走进单元测试(1):为什么难以广泛应用?
2010-04-25 08:31
288 查看
这几天在北京参加Qcon,觉得Scrum和敏捷在这里提到的比较多,而单元测试作为敏捷方法的一个重要配套工具,了解和真正进入实施的却并不是很多。
这里并不想告诉你如何做单元测试,这样的文章园子里已经一搜一大把,我没有再写这种的必要。开这个系列,首先是因为我进入了公司的技术创新组,目前主要负责单元测试这块,以期记录自己的成长;二是希望借这个系列,能够为大家带来一些真实的单元测试用例的设计方法和在设计用例中遇到的问题,以及解决问题的方法。
在我6年的技术工作中,如果问我什么技术对我的影响最大,我会毫不犹豫的说是单元测试。我比大多数人幸运的地方就是我的第一份写代码的工作就是编写单元测试;没错,是单元测试,尽管不是TDD的实践。但至少为我理解TDD打下了一个坚实的基础。而6年来,我一直希望能够有一个地方可以真正的将这些东西用起来,现在来看暂时算是等到了希望。
我辗转过很多公司,也曾经提过很多次关于单元测试的问题。然而每每提及的时候会得到支持,但最终实施都不了了之。我一直在思索为什么?为什么一个明明觉得很好的东西大家都嘴上说好而就一直不肯去实践?下面是我认为的几个原因:
1、开发成本的高昂。单元测试会加重开发人员的负担,因为有了更多的代码需要编写。而这种成本的增加在小作坊是一个很重的负担,毕竟对于他们生存是第一要务。即使是在大公司,鉴于很多人没有这样的经验,因此培训和指导如何编写单元测试也是一块很大的成本。
2、时间上的紧迫。从一个软件项目的角度来看,尽管编码所占的时间并不多。但如果是一个小的软件作坊形式的公司,其生存的要点在于能够短平快的做完项目,实施单元测试会延长项目的交付时间。即使是在一个比较规范性的公司,由于客户或者内部需求的时间压力,也很多时候只能选择放弃采用这样的过程,毕竟满足客户需求才是项目的最终目标。
3、开发人员的素质。为什么会有这一条,是因为接触过很多人开发人员,他们仅仅把完成任务当做目标,他们希望的就是尽量以自己熟悉的方式来尽快完成任务,剩下的时间就可以做自己的事了。而这部分人恰恰却是推动过程中的最大阻力。如何说服他们,采取什么措施,后面的系列可能会有这方面的思考。
鉴于中国的软件公司多数还处于小作坊时代以及开发人员的素养还有待提高,我一直比较悲观的认为,就不说敏捷了,就是单元测试的普及,在中国还有很长的路要走。我也希望自己的这个系列,能够为这个事情的推动尽自己的绵薄之力!
这里并不想告诉你如何做单元测试,这样的文章园子里已经一搜一大把,我没有再写这种的必要。开这个系列,首先是因为我进入了公司的技术创新组,目前主要负责单元测试这块,以期记录自己的成长;二是希望借这个系列,能够为大家带来一些真实的单元测试用例的设计方法和在设计用例中遇到的问题,以及解决问题的方法。
在我6年的技术工作中,如果问我什么技术对我的影响最大,我会毫不犹豫的说是单元测试。我比大多数人幸运的地方就是我的第一份写代码的工作就是编写单元测试;没错,是单元测试,尽管不是TDD的实践。但至少为我理解TDD打下了一个坚实的基础。而6年来,我一直希望能够有一个地方可以真正的将这些东西用起来,现在来看暂时算是等到了希望。
我辗转过很多公司,也曾经提过很多次关于单元测试的问题。然而每每提及的时候会得到支持,但最终实施都不了了之。我一直在思索为什么?为什么一个明明觉得很好的东西大家都嘴上说好而就一直不肯去实践?下面是我认为的几个原因:
1、开发成本的高昂。单元测试会加重开发人员的负担,因为有了更多的代码需要编写。而这种成本的增加在小作坊是一个很重的负担,毕竟对于他们生存是第一要务。即使是在大公司,鉴于很多人没有这样的经验,因此培训和指导如何编写单元测试也是一块很大的成本。
2、时间上的紧迫。从一个软件项目的角度来看,尽管编码所占的时间并不多。但如果是一个小的软件作坊形式的公司,其生存的要点在于能够短平快的做完项目,实施单元测试会延长项目的交付时间。即使是在一个比较规范性的公司,由于客户或者内部需求的时间压力,也很多时候只能选择放弃采用这样的过程,毕竟满足客户需求才是项目的最终目标。
3、开发人员的素质。为什么会有这一条,是因为接触过很多人开发人员,他们仅仅把完成任务当做目标,他们希望的就是尽量以自己熟悉的方式来尽快完成任务,剩下的时间就可以做自己的事了。而这部分人恰恰却是推动过程中的最大阻力。如何说服他们,采取什么措施,后面的系列可能会有这方面的思考。
鉴于中国的软件公司多数还处于小作坊时代以及开发人员的素养还有待提高,我一直比较悲观的认为,就不说敏捷了,就是单元测试的普及,在中国还有很长的路要走。我也希望自己的这个系列,能够为这个事情的推动尽自己的绵薄之力!
相关文章推荐
- 为什么难以设计出令人满意的室内导航应用
- 为什么非持续性VDI没有得到广泛应用
- 主题:四,android四大组件基础介绍及打电话,发短信简单应用 &单元测试
- Android Activity为什么要细化出onCreate、onStart、onResume、onPause、onStop、onDesdroy这么多方法让应用去重载?
- WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效
- JavaScript应用广泛
- [瞭望]RoR 在国内难以建立大型应用
- [瞭望]RoR 在国内难以建立大型应用
- 高盛报告:未来5-10年区块链将被广泛应用【附下载】
- 为什么你的代码如此难以理解
- 两本云计算书籍光盘及源码分享:走进云计算和云计算的关键技术与应用实例
- 为什么基于TCP的应用需要心跳包(TCP keep-alive原理分析)
- 你的应用为什么只被打开过一次?
- 自动执行单元测试(NUnit)的简单应用
- 为什么应用商店里搜索不到你的App?
- 为什么说B+树比B 树更适合实际应用中操作系统的文件索引和数据库索引?
- [瞭望]RoR 在国内难以建立大型应用
- 为什么web应用在tomcat启动时报java.lang.ClassCastException异常?
- 应用JUnit实施单元测试
- Scala深入浅出进阶经典 第42讲:Scala中泛型类、泛型函数、泛型在Spark中的广泛应用