合同设计是否适合您?

24 design-by-contract

您是否专业使用Design by Contract?这是您从项目一开始就要做的事情,还是可以改变方向并开始将其融入您的软件开发生命周期?您发现什么是设计方法的优缺点?

我在研究生课程中遇到了" 按合同设计"的方法.在学术环境中,它似乎是一种非常有用的技术.但我目前不专业地使用Design by Contract,而且我不知道任何其他开发人员正在使用它.听听SO群众的实际使用情况会很好.

Jam*_*sen 14

我不能高度推荐它.如果你有一个采用内联文档合同规范的套件,那就特别好了,如下所示:

// @returns null iff x = 0
public foo(int x) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

并将它们转换为生成的单元测试,如下所示:

public test_foo_returns_null_iff_x_equals_0() {
  assertNull foo(0);
}
Run Code Online (Sandbox Code Playgroud)

这样,您实际上可以看到正在运行的测试,但它们是自动生成的.顺便说一句,生成的测试不应该检查到源代码管理中.

  • 我没有看到这个示例测试用例应该如何测试"iif"的"且仅当"部分. (8认同)
  • 有关C#/ .NET的开源软件的任何建议吗? (7认同)

Ged*_*rne 8

当您在必须相互通信的应用程序之间建立接口时,您真的可以通过合同来欣赏设计.

如果没有合同,这种情况很快就会成为一场责怪网球比赛.团队不断来回敲响指控,浪费了大量时间.

有了合同,责任很明显.

调用者是否满足前提条件?如果不是,客户团队需要修复它.

鉴于有效请求,接收器是否满足后期条件?如果不是,服务器团队需要修复它.

双方是否都遵守合同,但结果不理想?合同不足,问题需要升级.

为此,您不需要以断言的形式实现合同,您只需确保所有各方都记录并达成一致.