TDD响亮的YES(有一些例外)
很有争议,但是我认为,对此问题回答“否”的任何人都缺少TDD的基本概念。
对我来说,如果您遵循TDD ,答案是肯定的。如果不是,那么不合理的答案。
TDD中的DDD
TDD通常被认为具有主要优点。
- 防御
- 确保代码可能会更改,但行为不会更改。
- 这允许进行如此重要的重构实践。
- 您是否获得此TDD。
- 设计
- 在实施之前,您可以指定应该执行的操作,操作方式。
- 这通常意味着更明智的实施决策。
- 文献资料
- 测试套件应作为规范(要求)文档。
- 为此目的使用测试意味着文档和实现始终处于一致状态-对一个进行更改意味着对另一个进行更改。与保留要求和在单独的Word文档上进行设计相比。
将责任与实施分开
作为程序员,非常容易想到将属性视为重要的事物,而将getter和setter视为某种开销。
但是属性是实现细节,而setter和getter是使程序真正起作用的契约接口。
拼写一个对象应该:
允许其客户更改其状态
和
允许其客户查询其状态
然后实际存储此状态的方式(对于该状态,属性是最常见的,但不是唯一的方式)。
诸如
(The Painter class) should store the provided colour
对于TDD 的文档部分很重要。
当您编写测试时,最终的实现是微不足道的(属性)并且没有任何防御优势的事实对您来说应该是未知的。
缺乏往返工程...
系统开发领域的关键问题之一是缺乏 往返工程1-系统的开发过程被分为多个相互分离的子过程,这些子过程的工件(文档,代码)通常不一致。
1 Brodie,MichaelL。“ John Mylopoulos:缝制概念模型的种子。” 概念建模:基础和应用程序。Springer Berlin Heidelberg,2009年。1-9。
...以及TDD如何解决
TDD 的文档部分可确保系统规范及其代码始终保持一致。
先设计,后实施
在TDD中,我们首先编写不合格的测试,然后再编写使他们通过的代码。
在更高级别的BDD中,我们首先编写方案,然后使它们通过。
为什么要排除设置器和获取器?
从理论上讲,在TDD中,完全有可能由一个人编写测试,而由另一个人来实现通过测试的代码。
因此,问问自己:
编写课程测试的人是否应该提及吸气剂和吸气剂。
由于getter和setter是类的公共接口,因此答案显然是肯定的,否则将无法设置或查询对象的状态。
显然,如果您首先编写代码,答案可能不会那么清晰。
例外情况
该规则有一些明显的例外-功能是明确的实现细节,并且显然不是系统设计的一部分。
例如,本地方法'B()':
function A() {
// B() will be called here
function B() {
...
}
}
或square()
此处的私有函数:
class Something {
private:
square() {...}
public:
addAndSquare() {...}
substractAndSquare() {...}
}
或不属于public
接口的任何其他功能,需要在系统组件的设计中进行拼写。