• 0
  • 0
分享

  一、背景

  总所周知,单元测试有很多优点,但为什么大多数公司都没有强制要求或者实际落地效果很差?难道仅仅是因为程序员们不想做或者没时间做吗?本文带你探讨看透本质原因!

  二、单元测试的优点

  1、单元测试可以让代码的提测质量更高:单元测试能够给予研发人员即时反馈,增强提测代码的信心。虽然单元测试不能替代系统测试和验收测试,但是它确实让软件的bug更少,软件质量保证变得更好。

1-1.png

  2、单元测试有利于更快定位bug: 由于单元测试规模较小,复杂性较低,因而发现错误后容易隔离和定位,有利于调试工作。

  3、单元测试可以减少 bug的修复成本:bug越早发现就越容易修复,修复的成本越低。在《快速软件开发》一书中已引用了大量的研究数据指出,最后才修改一个 bug 的代价是在 bug 产生时修改它的代价的10倍。

1-2.png

  4、单元测试,可以延长项目的生命期:每个人都有自己的编程风格和习惯,有老手也有新手,没单元测试的话,大家就随便发挥了,只要结果出来了就好了,那么这个项目的代码后续来的人接手就会更困难,而单元测试可以在一定程度上约束这种事情的发生,并且让后期需要系统重构可以更放心的去重构。

  既然单元测试有这么多的优点,那为什么很多公司都没有强制要求必须做单元测试,或者即使要求了,也很难真正落地推行下去呢?仅仅是因为程序员们懒,不愿意吗?真相当然不会这么简单,我们接着往下看~

  三、为什么单元测试难以落地推行

  1、国内大多的公司都是做软件应用级别的开发,应用软件开发主要功能都是与界面相关的,单元测试能测的东西不多,更多的还是得依赖功能测试。此外需求一改,对应的单元测试的代码也得改,而应用软件需求变化是非常频繁的,容易导致最后写单元测试的工作量比开发的工作量还要大。单元测试比较适合的还是用于服务器或者专注算法的团队。

1-3.png

  2、国内软件迭代速度都非常快,迭代速度比不出问题更重要,舍去单元测试,用最快的迭代速度开发上线,有功能测试兜底,在同样的时间内,既能测试系统又能纠正需求,还能得到用户的反馈。国内大多公司都是开发应用软件,自然会选这条路。写得很好的一段代码,需求一变就没用了,与其投入成本开发高质量的代码,不如快速构建实现需求,代码质量低一点也能接受。

1-4.png

  3、单元测试对程序员的要求更高,并且对开发应用软件来说,确实会导致研发的开发速度变慢,国内的应用迭代都非常快,人力成本负担不了开发单元测试的成本。

  4、单元测试是否可以交由测试人员来做呢?答案是不能,因为这对测试人员的技能要求提高了一个数量级,需要达到开发水平甚至比开发水平还要高,因此开展的成本更高,很多企业不能或者不愿意负担这样的成本。而这也是近几年白盒测试岗位需求明显变少的原因,简单来说,白盒测试是站在开发者角度,让代码更完善、更规范。而对于当下快节奏的应用软件的互联网行业来说,更关注的是黑盒测试,是功能的快速迭代和用户使用上的反馈。

1-5.png

  5、国外的很多系统级的开发,需求变化小,但对稳定性要求高,所以对代码质量要求高,这也是国外像Google这样的公司,更愿意投入更多的时间在单元测试上的原因,也要求程序员做自己做更多的测试。这也是Goole研发测试比例在10:1的原因。

  综上,国内公司单元测试难以落地推行的主要原因,主要还是大部分公司都是属于应用级软件的开发,在应用软件需求迭代快,变化频繁的背景下,结合实际对人才的要求、人力成本,单元测试的投入产出比并没有想象中的那么好。真正能落地单元测试的公司,主要还是做系统级开发的公司,周期较长,需求不会频繁变动,稳定性要求高,在这样的背景下,一行高质量优美的代码的作用才能体现出真正的价值~


作者:程序员杨叔    

来源:http://www.51testing.com/html/98/n-7798298.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1. Charles安装官网下载安装Charles:https://www.charlesproxy.com/download/2. HTTP抓包(1)查看电脑IP地址  例如:192.168.1.169(2)设置手机HTTP代理手机连上电脑,点击“设置->无线局域网->连接的WiFi”,设置HTTP代理:服务器为电脑IP地址:如192.168.1.169端口:8888设置代理后,需要在电脑上打开Charles才能上网(3)电脑上打开Charles进行HTTP抓包手机上打开某个App或者浏览器什么的,如果不能上网,检查前面步骤是否正确点击“Allow”允许,出现手机的HT...
            1 0 4453
            分享
          •   简介  除了测试,测试数据创建、需求跟踪和测试报告等任务也可自动化。  随着迭代,可自动化的内容越来越多:  什么应该被自动化?  与人工测试相比,具备明显收益  ·如果失败会对业务造成相当大的损失的业务功能或用户流;自动化测试有助于经常验证这些功能。  · 需要针对应用程序的每个构建或发布版本运行的测试,如烟雾测试、正常性测试和回归测试。  · 需要针对多种配置运行的测试,如不同平台和浏览器的组合。  · 涉及大量测试数据集或输入大量数据的测试,例如填写很长的表格,因为测试自动化有助于实现扩大覆盖范围,减少工作量和提高可靠性。  · 报告,自动化测试报告减少了人工干预,并产生频繁和最新的...
            0 0 870
            分享
          •   在软件测试过程当中,大多数缺陷怎么定位都可以采用分层测试解决。  所谓的分层测试就是我们会根据一个 case的覆盖范围将测试分成不同的种类。  一个测试用例覆盖范围最广的是系统测试,覆盖最窄的是单元测试。虽然在学术界对他们有非常清晰的定义,但是在实际的工作过程当中并没有明显的界限。从上到下可以分为系统测试,集成测试,组件测试,单元测试等等。  我们平时接触的比较多的可能就是系统测试,也就是我们常说的点点点功能。但是这种方式是不利于问题的定位的。  而越到后面因为一个测试覆盖的范围越小,所以更能精准的定位到问题的所在。  如何定位是前端问题还是后端问题?基本上介于集成测试和组件测试之间,我们...
            0 0 1014
            分享
          • 首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还是需要花时间去掌握的,毕竟谁也不会跟钱过不去。接下来,一起总结一下APP UI自动化测试的思路吧。开发语言选择通常用于自动化测试的编程语言有:Python、Java、Javascript、Ruby、C#、PHP等。一般我们会选择自己熟悉的编程语言来编写自动化脚本,但对于编程基础基本为0的童鞋(或者专注于做自动化测试的童鞋),推荐学习使用Python。相对于其他语言,Python做自动化测试有以下优点:对于初学者来说,Python语法简洁,可读性强,易于...
            0 0 1251
            分享
          •   前言  性能测试用例主要分为预期目标用户测试、用户并发测试、疲劳强度与大数据量测试、网络性能测试、服务器性能测试五大部分。  具体编写用例时要根据实际情况去进行,遵守低成本、策略为中心,裁减、完善模型,具体化等原则。  Web性能测试模型提出的主要依据是:一种类型的性能测试可以在某些条件下转化成为另外一种类型的性能测试,这些类型的性能测试的实施是有着相似之处的。  预期指标的性能测试  系统在需求分析和设计阶段都会提出一些性能指标,完成这些指标的相关的测试是性能测试的首要工作之一,这些指标主要诸于:系统可以支持并发用户200个,系统响应时间不得超过20秒等。  对这种预先承诺的性能要求,需...
            0 0 957
            分享
      • 51testing软件测试圈微信