一、背景
总所周知,单元测试有很多优点,但为什么大多数公司都没有强制要求或者实际落地效果很差?难道仅仅是因为程序员们不想做或者没时间做吗?本文带你探讨看透本质原因!
二、单元测试的优点
1、单元测试可以让代码的提测质量更高:单元测试能够给予研发人员即时反馈,增强提测代码的信心。虽然单元测试不能替代系统测试和验收测试,但是它确实让软件的bug更少,软件质量保证变得更好。
2、单元测试有利于更快定位bug: 由于单元测试规模较小,复杂性较低,因而发现错误后容易隔离和定位,有利于调试工作。
3、单元测试可以减少 bug的修复成本:bug越早发现就越容易修复,修复的成本越低。在《快速软件开发》一书中已引用了大量的研究数据指出,最后才修改一个 bug 的代价是在 bug 产生时修改它的代价的10倍。
4、单元测试,可以延长项目的生命期:每个人都有自己的编程风格和习惯,有老手也有新手,没单元测试的话,大家就随便发挥了,只要结果出来了就好了,那么这个项目的代码后续来的人接手就会更困难,而单元测试可以在一定程度上约束这种事情的发生,并且让后期需要系统重构可以更放心的去重构。
既然单元测试有这么多的优点,那为什么很多公司都没有强制要求必须做单元测试,或者即使要求了,也很难真正落地推行下去呢?仅仅是因为程序员们懒,不愿意吗?真相当然不会这么简单,我们接着往下看~
三、为什么单元测试难以落地推行
1、国内大多的公司都是做软件应用级别的开发,应用软件开发主要功能都是与界面相关的,单元测试能测的东西不多,更多的还是得依赖功能测试。此外需求一改,对应的单元测试的代码也得改,而应用软件需求变化是非常频繁的,容易导致最后写单元测试的工作量比开发的工作量还要大。单元测试比较适合的还是用于服务器或者专注算法的团队。
2、国内软件迭代速度都非常快,迭代速度比不出问题更重要,舍去单元测试,用最快的迭代速度开发上线,有功能测试兜底,在同样的时间内,既能测试系统又能纠正需求,还能得到用户的反馈。国内大多公司都是开发应用软件,自然会选这条路。写得很好的一段代码,需求一变就没用了,与其投入成本开发高质量的代码,不如快速构建实现需求,代码质量低一点也能接受。
3、单元测试对程序员的要求更高,并且对开发应用软件来说,确实会导致研发的开发速度变慢,国内的应用迭代都非常快,人力成本负担不了开发单元测试的成本。
4、单元测试是否可以交由测试人员来做呢?答案是不能,因为这对测试人员的技能要求提高了一个数量级,需要达到开发水平甚至比开发水平还要高,因此开展的成本更高,很多企业不能或者不愿意负担这样的成本。而这也是近几年白盒测试岗位需求明显变少的原因,简单来说,白盒测试是站在开发者角度,让代码更完善、更规范。而对于当下快节奏的应用软件的互联网行业来说,更关注的是黑盒测试,是功能的快速迭代和用户使用上的反馈。
5、国外的很多系统级的开发,需求变化小,但对稳定性要求高,所以对代码质量要求高,这也是国外像Google这样的公司,更愿意投入更多的时间在单元测试上的原因,也要求程序员做自己做更多的测试。这也是Goole研发测试比例在10:1的原因。
综上,国内公司单元测试难以落地推行的主要原因,主要还是大部分公司都是属于应用级软件的开发,在应用软件需求迭代快,变化频繁的背景下,结合实际对人才的要求、人力成本,单元测试的投入产出比并没有想象中的那么好。真正能落地单元测试的公司,主要还是做系统级开发的公司,周期较长,需求不会频繁变动,稳定性要求高,在这样的背景下,一行高质量优美的代码的作用才能体现出真正的价值~
作者:程序员杨叔