在不熟悉您的编程领域时尝试使用 TDD
Trying to use TDD when unfamiliar with the domain your programming in
背景:
我目前正在创建我的第一个游戏引擎项目用于学习目的。这是我做过的第一个更大的项目。我知道进入该项目时,我知道游戏引擎中涉及的更高层次的细节(例如单独的系统——输入、图形、音频、物理等),但当进入细节时,我有点想事情我去的时候出去。我的编码过程现在是这样的:
1.) 找出我要设计的系统的一些快速、更高层次的细节
2.) 开始一些实验性编码,看看事情到底需要如何工作
3.) 一旦我对自己拥有的感觉良好,之后添加测试。
由于我对问题领域(游戏引擎编程)非常不熟悉,所以我发现我真的需要在代码中进行试验,看看我需要什么功能以及什么设计套件最好。但是,我知道大多数社区(无论如何看起来)通常提倡更多的 TDD 方法来构建应用程序。我可以看到这样做的好处,但我不太确定当我什至不确定我真正需要测试哪些功能时我将如何应用 "Write test first, fail, then pass"。即使我能想到 1 或 2 个确定的函数,如果在实验阶段我发现最好将这些函数拆分成更多跨越不同 类 的函数会怎么样?然后我将不得不不断地重新设计我的代码和测试。
我的 Issue/Question(s):
那么,当您在代码中进行试验时,是否有一种使用 TDD 方法的好方法?或者 TDD 通常是指那些熟悉他们所从事的项目,并且知道设计需要是什么或他们需要测试什么功能的人?
我发现当我让 "I'm not comfortable writing unit tests in this situation" 成为不写单元测试的借口时...我从不写任何单元测试。
如果您对某事物的行为有足够的了解来对其进行编码,那么您也有足够的知识来对其进行测试。
Even if I can think of 1 or 2 definite functions, what if during the
experimenting phase I find it's better to split those functions out
into more functions across different classes
如果您已经对原始功能进行了测试,并且只是更改了界面,那么应该几乎没有什么测试逻辑需要更改。之后更改界面时也不会有破坏某些东西的风险。此外,这种担忧并不特定于尝试新域。
也许不熟悉的领域不是开始学习 TDD 的最佳场所。但我当然不会说它天生就不适合这个过程。
在不熟悉的领域使用 TDD 的常见方法:
- 进行一些实验性编码以了解更多信息
- 搁置实验代码,开始TDD"test first"方法
- 当您编写生产代码以使测试通过时,您将收获实验代码的片段。
这种方法的好处是,通过 TDD "red,green,refactor" 周期,您通常会改进实验代码的设计。没有它,您的实验代码通常会以 "big ball of mud".
结束。
背景:
我目前正在创建我的第一个游戏引擎项目用于学习目的。这是我做过的第一个更大的项目。我知道进入该项目时,我知道游戏引擎中涉及的更高层次的细节(例如单独的系统——输入、图形、音频、物理等),但当进入细节时,我有点想事情我去的时候出去。我的编码过程现在是这样的:
1.) 找出我要设计的系统的一些快速、更高层次的细节
2.) 开始一些实验性编码,看看事情到底需要如何工作
3.) 一旦我对自己拥有的感觉良好,之后添加测试。
由于我对问题领域(游戏引擎编程)非常不熟悉,所以我发现我真的需要在代码中进行试验,看看我需要什么功能以及什么设计套件最好。但是,我知道大多数社区(无论如何看起来)通常提倡更多的 TDD 方法来构建应用程序。我可以看到这样做的好处,但我不太确定当我什至不确定我真正需要测试哪些功能时我将如何应用 "Write test first, fail, then pass"。即使我能想到 1 或 2 个确定的函数,如果在实验阶段我发现最好将这些函数拆分成更多跨越不同 类 的函数会怎么样?然后我将不得不不断地重新设计我的代码和测试。
我的 Issue/Question(s):
那么,当您在代码中进行试验时,是否有一种使用 TDD 方法的好方法?或者 TDD 通常是指那些熟悉他们所从事的项目,并且知道设计需要是什么或他们需要测试什么功能的人?
我发现当我让 "I'm not comfortable writing unit tests in this situation" 成为不写单元测试的借口时...我从不写任何单元测试。
如果您对某事物的行为有足够的了解来对其进行编码,那么您也有足够的知识来对其进行测试。
Even if I can think of 1 or 2 definite functions, what if during the experimenting phase I find it's better to split those functions out into more functions across different classes
如果您已经对原始功能进行了测试,并且只是更改了界面,那么应该几乎没有什么测试逻辑需要更改。之后更改界面时也不会有破坏某些东西的风险。此外,这种担忧并不特定于尝试新域。
也许不熟悉的领域不是开始学习 TDD 的最佳场所。但我当然不会说它天生就不适合这个过程。
在不熟悉的领域使用 TDD 的常见方法:
- 进行一些实验性编码以了解更多信息
- 搁置实验代码,开始TDD"test first"方法
- 当您编写生产代码以使测试通过时,您将收获实验代码的片段。
这种方法的好处是,通过 TDD "red,green,refactor" 周期,您通常会改进实验代码的设计。没有它,您的实验代码通常会以 "big ball of mud".
结束。