• 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敏捷测试与传统测试区别  二、敏捷测试过程中的测试活动有哪些  敏捷测试要求“测试人员”参与整个敏捷开发过程,并且在迭代周期内遍历整个测试准备——预测试——功能测试——回归测试过程。敏捷测试强调测试启动“越早越好”、“测试与开发并行”,在开发人员进行方案设计时,“测试人员”同步进行测试方法设计;开发人员进行功能开发时,...
            13 14 3104
            分享
          •   一、什么是敏捷测试?  敏捷测试是一种在敏捷开发中进行软件测试的方法。它强调快速、迭代和协作,以确保软件的质量和交付速度。  在敏捷测试中,测试人员需要与开发人员密切合作,尽早参与到项目中,并在整个开发过程中持续测试。测试人员不仅要测试软件的功能,还要关注软件的性能、可用性和安全性等方面。  敏捷测试强调测试的自动化,以提高测试效率和覆盖范围。测试人员通常会使用自动化测试工具来编写和执行测试用例,以便在短时间内获得反馈。同时,敏捷测试也鼓励测试人员采用探索性测试等方法,发现软件中可能存在的问题。  另外,敏捷测试还注重团队的沟通和协作。测试人员需要与开发人员、产品经理和其他相关人员保持良好...
            0 0 432
            分享
          • 一、接口自动化测试流程1、需求分析;请求(url、方法、数据)响应(响应数据、状态码)2、挑选需要做自动化接口(时间、人员、接口复杂度);3、设计自动化测试用例(如果功能阶段设计过用例,直接拿过来使用即可);4、搭建自动化测试环境(实现自动化使用的语言 如:(python、pycharm));5、设计自动化执行框架(报告、参数化、用例执行框架);6、编写代码;7、执行用例(unittest、pytest);8、生成测试报告(htmltextrunn er\allure)。二、接口清单整理登录接口请求登陆接口请求请求url:http://ttapi.research.itcast.cn/app/...
            0 0 1411
            分享
          •   在测试的过程中,有些测试点是在需求说明文档里明确提到的,比如果输入框的输入要求是什么、是否必填等等。  对于有经验的测试人来说,有一些测试点,是我们在以往的测试经验中总结出来的,而对于初学者往往会忽略一些没有在需求中列明的点。  对于不同模块的测试,我们需要着重注意的点也不一样,下面我们来总结一下注意点或者易错点。  必填项验证  1、必填项不填,如果是前台做的验证,保存时给出了提示信息,这个时候要F12看一下是否调用保存接口,或者去数据库查看一下数据有没有新增上,有可能是前台只给了提示,但还是给后台发送请求了。  2、提示了必填之后,将必填项填上,提示信息有无消失。  新增编辑成功验证 ...
            7 7 1627
            分享
          • 在我们测试工作中,测试用例的编写至关重要,编写好的测试用例可以覆盖整个项目的测试,能够更好的找到缺陷,下面浅谈下我对功能测试用例编写的思路在面试中,我们常常会被问到:给你一个纸杯,你要怎么测试?不巧的是,我们大多数人都会说纸杯的功能,比如它能装多少水,装开水能不能烫手,纸杯的美观程度等等,当然,不是说这样想是不对的,而是没有考虑周全我们要测试一个产品,要从多个维度来考虑:《1》 安全性纸杯在装满热水时,我们能不能够拿住它,他的耐热怎么样?纸杯装满水会不会漏水?《2》 功能纸杯可以装水吗?纸杯能够装满水吗?《3》兼容性纸杯能否装不同的液体:饮料、凉白开、热水、酒类《4》产品设计纸杯的外表是不是看...
            0 0 1517
            分享
      • 51testing软件测试圈微信