自然、人类、机器
Home › Forums › 《冒号课堂》讨论区 › DbC和TDD
Tagged: DbC, TDD
昨天看了一个老外的视频讲座,他谈到:DbC适合用于表达无副作用的条件约束(constraint);TDD适合用于表达类的外部行为(behavior)。二者是互补关系,可以结合使用。
http://www.infoq.com/presentations/TDD-in-a-DbC-World-Greg-Young
二者既有互补之处,也有重叠之处。另外,好的DbC框架可以自动生成一些测试用例。
对,的确有重叠之处。
需求的表达方式有很多种: 自然语言文档,UML用例图,TDD的测试用例,DBC的契约。好的需求规范应该追求精确性和抽象(通用)性。自然语言和UML用例图具备抽象性,但精确性不足;TDD的测试用例具备精确性但没有抽象性;DBC同时具备这两个特征但是表达能力不足,不是所有规范都能用无副作用的语句来表示。
虽然assertion中不能含有副作用的语句,但DbC中的precondition和postcondition之间是允许副作用的。当然不可否认,DbC的表达力的确是有局限的。