关于单元测试/TDD的成本和收益的一些想法

发表于:2009-3-20 15:12

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:daquan198163    来源:JavaEye

  最近我在公司搞代码评审,做的过程中发现一个矛盾的问题:评审发现了问题,于是需要重构,可是重构需要有完善的单元测试做保障,而项目已接近开发结束,基本没有单元测试,结果发现的问题只能搁置,因为你很难下决心去为了完善一个东西而去冒毁坏它的风险!

  这样下去,代码评审将流于形式。

  我意识到TDD与code review有着很紧密的联系,其实以前就听说过敏捷的十二个实践都是有内在联系的。

  于是,我又转而开始宣传单元测试和TDD的必要性和好处,比如单元测试是最好的文档、单元测试是自动化的回归测试可以保护代码不被破坏、可以增强重构的信心、可以快速反馈提高开发效率……

  但我的同事还是有几点担心的问题:

  1、写测试需要成本;

  2、测试本身也可能出错;

  3、测试也需要维护,需求变了原来只要改一处,现在需要改两处了;

  4、对于一些简单的CRUD,真有必要去测吗?我鼠标点两下不就行了?

  总之就是经过我的鼓吹,他们已经基本认同了从长远看TDD是值得做的,但还是担心短期内成本会增加以至影响了当前进度。

  不解决这个担心,就没办法让他们在目前工期压力下做这件事情。

  所以这回讨论的焦点在短期成本和收益。

  首先我认为,即便是短期看,也是值得去TDD的,这是我实践过程中的感觉:

  1、写测试需要成本

  这个成本不大,而且能很快的收回,比如减少了debug和集成测试的时间;

  2、测试本身也可能出错

  测试出错说明你对程序行为的预期错了,这属于需求理解问题,无法避免;

  3、测试也需要维护,需求变了原来只要改一处,现在需要改两处了

  我觉得这是个伪问题,因为如果你有测试套件的话,它实际上就代替了以前的详细设计文档,并且改起来更容易;

  4、对于一些简单的CRUD,真有必要去测吗?我鼠标点两下不就行了?

  如果用了ORMapping框架,里面机关重重,因此CRUD也不简单,而且查询从来都不会简单,各种条件组合需要测的地方很多。

  欢迎大家发表自己的想法和意见。

《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • fishy
    2009-3-20 15:15:42

    1、写测试需要成本
    (你不做unit test,就不测试了?为啥不稍微花一点儿时间把自动化测试弄好呢?而且对于回归测试的情况,数据量越大,越复杂,做成自动测试的效率就越高,不过要是你们的应用都是hello world那也没必要写测试了,太简单,没有必要,也没有重构的可能)

    2、测试也可能出错
    (这个是一个概率问题,不测试的话,出错的概率更大,如果保证了回归测试,至少能保证以后改功能的时候,已经测试到的分支不会被牵连改坏,给我们信心就已经很不容易了)

    3、测试也需要维护,需求变了原来只要改一处,现在需要改两处了
    (见1。改了需求,就算你手工测试也不是一样要根据需求更改?测试数据肯定也不同了。只算写了代码的工作量,不看手工工作量,这种说法我保留意见。)

    4、对于一些简单的CRUD,真有必要去测吗?我鼠标点两下不就行了?
    (简单的功能,测试也简单,主要为了保证回归测试,以后改代码的时候不心虚)

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号