1招提升Java单元测试ROI
全球著名的软件估算和度量领域的领导者和理论家Capers Jones,相信业内的人对这个名字都不陌生。我最开始也是从他的《软件项目估计》和《软件工程通史:1930-2019》有了初步认知和了解。Capers Jones的工作对任何行业的软件开发人员来说都是一笔宝贵的财富。他一生都在研究软件项目的成功与失败,其中大部分是在2011年出版的《软件质量经济学》中达到顶峰。尽管企业Java开发人员可能会认为此收集的信息对他们没有吸引力,但我认为他们完全可以从中发掘出一些有价值的见解。
这里有一些令人震惊的统计数据,它们适用于使用Scrum和最新软件工具的开发人员,与其他任何类型的软件开发一样。总体而言,软件业在开发上花费的每1块钱,其中的5毛都是用于维护以及查找和修复错误。但是,尽管团队尽了最大的努力,但大多数测试形式只能删除大约35%的错误,从而在软件中留下了极大的隐患。
Jones在很大程度上是“左移测试”的早期支持者,尽管他可能从未使用过该术语。在软件生命周期中尽早发现并修复缺陷(尤其是需求、分析和设计中的缺陷)是提高软件质量的关键。有趣的是,Jones通过与许多供应商用来计算工具ROI的每次缺陷成本度量标准进行比较而脱颖而出——如果有的话,每次缺陷成本会低于自动化工具的ROI和左移测试工作。
当前的测试成功率
我们已经知道,软件开发人员将其开发预算的一半用于查找和修复错误,并且当前的测试方法仍将三分之二的错误留在了软件中。这里有一些更加有趣的统计数据:
- 即使使用最新的软件开发方法,最佳项目中的缺陷清除率也大约为85%。这意味着尚有15%的缺陷尚未发现并进入最终产品。
- 大约6%的测试用例本身具有测试用例中的错误。
- 在大型项目中,多达20%的回归测试是重复的,这增加了测试成本,但无助于提高产品质量。
- 大约7%的错误修复包括新错误。因此,即使在解决错误的同时,也引入了新的错误。
测试自动化和Parasoft Jtest单元测试助手如何提供帮助
正如我们过去多次说过的那样,单元测试是必要的,但又是乏味的。测试自动化可以消除开发人员的许多繁琐过程,但是测试开发和维护仍然是Java开发人员在进行代码的单元测试时面临的关键问题之一。在上一篇文章中,我概述了如何使用Parasoft Jtest进行自动单元测试创建,以及如何在提高单元测试效率和结果的同时,还降低了模拟复杂性和测试用例维护。继续本主题,让我们考虑通过自动创建单元测试实现的经济利益及其对测试工作的影响。
在Parasoft最近进行的一项调查中,我们了解到,大多数开发人员在单元测试上花费了大约40%的时间。考虑到由十天组成的为期两周的开发迭代周期,也就是四天专门用于测试。显而易见,为什么说测试会成为拖累迭代和敏捷软件开发速度的障碍。另外,当前的测试成功率可能意味着该时间量还不够,那么我们就要考虑更重要的是,需要一种减少时间并改善结果的方法。
我们也一直在忙着使用Parasoft Jtest从Java进行客户数据检索,得出的结果非常令人鼓舞。Java开发团队发现单元测试工作量至少减少了50%。换句话说,他们可以使用Jtest和单元测试助手在两天内完成四天的单元测试。这种基于单次迭代的时间节省是令人印象深刻的,而且当在典型项目中将其与许多迭代相加时,这种节省变得更加明显。例如,如果一个典型的项目每三个月发布一次,并有6个开发迭代,那么Jtest可以节省相当于1.2个迭代或12天的开发工作量。通过这些节省,软件团队可以在不牺牲质量的情况下提高生产力,并显着减少交付时间。更好的质量和准时(甚至更早)交付?这些都是巨大的经济利益。
提高质量的真正投资回报率
提高质量的投资回报比修复缺陷的成本要多。在生命周期的早期修复错误的成本较低,这样做可以为你节省不少的钱。尽管这是一项指标,甚至仅此一项就足以证明投资质量更好,但实际上却低估了ROI。
导致项目延迟的主要原因之一是缺少缺陷和安全漏洞,这些缺陷和安全漏洞已进入产品开发周期的后期。当然,较早发现并修复这些问题的成本较低,因为开发团队仍在脑海中重新思考代码,并且没有进行下一个迭代(或相关项目)。
仅使用每次缺陷成本指标和方法来计算ROI,请考虑上面的示例,这里是由20人组成的团队从事一个项目,假设每小时的负荷率为100块钱。该团队使用具有所有优点的新测试自动化工具(左移缺陷识别),比以前的迭代发现了20多个缺陷。尽早发现并修复这些错误可能需要每个缺陷三个小时,总计6000块钱。稍后在集成或系统测试中发现并修复这些错误可能会使工作量增加三倍,而费用为18000块钱。简而言之,对于此迭代,ROI为12000块钱。听起来不错吧?但是,这并未算上将迭代节省了2天的开发时间,也没有算上节省32000块钱并提高了生产率。
纵观全局,可以看到减少整个发行版的开发时间才是真正的省钱之道,而不是每次的缺陷成本。左移的真正收益是达到或超过项目进度和目标。再次考虑上面的示例,但是这次以整个开发团队提前12天完成交付的角度来看投资回报率。对于这个团队来说,这是20人12天的工作量,算下来节省了总计192000元!尽管这个例子过于简单粗暴,但它确实指出,在不牺牲质量的前提下,将产品更快地投放市场时,工具的投资回报率是在团队级别实现的。
结论
传统的单元测试方法会消耗大量的软件开发时间,并且这些方法的结果需要改进。Parasoft Jtest可以帮助减少50%的单元测试工作量,这在质量和减少迭代进度方面都具有可观的回报。
当你考虑单元测试对团队和整个项目的影响时,这些工具的投资回报率就非常重要。与简单的按缺陷成本分析不同,按时完成项目并满足目标要求是巨大的回报,并且在这样做的同时节省了时间和金钱,这使它变得更好。