按契约编程和测试驱动开发

来源:互联网 发布:js高手进阶之路 编辑:程序博客网 时间:2024/06/05 00:35
一直以来,我总觉得按契约编程是assert()宏的延伸,不够现代,作用和测试驱动开发不能相比。测试驱动开发能够覆盖设计,编码,回归兼容测试等各个 领域。

但是任何工具/方法都有它的适应面,如果不是,按契约编程也就不会出现了。总的来说,按契约编程台阶较低,而测试驱动开发对开发者的要求较高。

1. 测试驱动的运行环境和程序的正式运行环境不同,而契约则是合一的。也就是说不需要单独准备测试运行环境。想想测试驱动开发使用的mock和模拟器。有多少人愿意仅仅为了测试而构造这些代码,这些代码没有实际产出。使用契约,则不需要创建/模拟运行环境。
2. mock和模拟器需要极高的编程技巧,不是所有人都有这个能力或者时间。软件开发常常有很大的压力。
3. 测试驱动开发常常是测试优先驱动开发,即先写测试后写实现。对已有代码添加测试,往往缺乏动力,而且通常是非常困难的。因为代码要便于单元测试,需要做设计上的安排,尽量剥离对其他类库和环境(比如数据库,文件,网络)的依赖。契约编程则不一样,随时都可以添加契约,甚至一边阅读别人的代码一边添加。

测试驱动开发结合重构产生优秀的设计和代码,按契约编程则更利于工程和监管。绝大多数的软件开发者都没有构建完美代码的愿望,没有动机,就不会有行动。而按契约编程则是提供质量最直接,最方便的方式,更能面对任务压力,所以较易实施。
原创粉丝点击