工业4.0下的数字化智能软件测试技术之三—穿线测试引领数字化软件测试进入工业界
众所周知,软件测试具有两种主流方法,即黑盒测试和白盒测试。由于白盒测试一般情况下需要有比较高的技术要求及相当的代码能力和缜密的逻辑思维能力,普通测试工程师远不能胜任,且严格执行白盒测试时间成本极高,目前知名的白盒测试技术多用于系统集成前的单元测试阶段,核心技术全部为国外掌握,工具售价昂贵,以上所有因素导致很多软件测试过程中会直接省去白盒测试,这也是为什么白盒测试诞生至今,在软件测试工业界没有正式推广的原因。这里首先让那个我们从投入产出模型来分析下,传统的黑盒测试、白盒测试以及穿线测试技术的特性。
1 黑盒测试(功能测试)
黑盒测试是面向功能的测试,测试用例的依据是软件的需求,测试的对象是运行起来的软件。通常情况下,一个有经验的测试工程师根据需求说明书编写的测试用例在执行完成后,覆盖率一般能达到70%左右,需要N个工作日。要达到覆盖率的最终目标100%,还需要增加新的测试用例。有过覆盖率测试经验的朋友知道,剩下的30%可能需要 N* 3 工作日,甚至更多,同时为了达到更高的覆盖率,通常会产生大量重复的测试用例,大大增加的测试成本。下图为黑盒测试的覆盖率及成本使用效果图:
2 白盒测试
和黑盒测试正相反,白盒测试的测试用例的依据就是软件代码。测试工程师需要依据代码的逻辑结构、基本路径的分析,得到测试用例。因为该方法直接面向代码,写出的测试用例非常有针对性,每执行一个用例,覆盖率指标都能有新的提高,最终达到终极目标。听起来很不错,其实还有一个很大的问题,就是测试工程师需要分析所有代码的逻辑结构、调用关系、数据流等,仅此一项,就需要花费巨额的时间。另外传统单元级白盒测试仅仅关注程序覆盖方面,并不管程序单元组合和集成后的系统级功能。下图为白盒测试的覆盖率及成本使用效果图:
结合上述2种方法,笔者提出了全新的理念即穿线测试(TheadingTest),它采用了白盒和黑盒相结合的方法,以黑盒的测试方法,来得到白盒的测试数据。结合的优势:
3 穿线测试
上述讲到黑盒和白盒各有优劣,穿线测试则是将二者在技术和流程上进行优雅结合的方法。穿线测试实际上属于创新型的系统级白盒测试工具,是软件测试领域里面全新的学术流派。它先通过传统黑盒测试把基本的功能都测试一轮,覆盖率达到70%(即普通黑盒测试高效运行区域的临界区),同时这个过程受到穿线测试工具的监控,并获取该阶段的测试结果数据;第二步,通过穿线测试得到的白盒结果并且进行可视化分析,快速定位剩下30%的漏测代码,进行针对性地增加测试用例,最终达到终极目标。经过很多客户的实践经验,这种方法对于覆盖率测试是最有效的,且测试时间最短。
上文提到了穿线测试通过原有的黑盒测试方式,得到白盒结果,这样使得测试难度以及测试人员的能力要求大大降低,并在这个基础上,为了使得白盒测试结果更加方便理解,穿线测试又相继提出了计算可视化的代码覆盖率,以简单的图形显示,让广大不懂代码和程序内部结构的黑盒测试人员也能进行大师级别的代码覆盖率测试。
例:下图看到的截图为以穿线测试为理论,产品化的工具ThreadingTest中的覆盖率计算可视化方法的截图,它将为用户清晰的表达某种覆盖率是如何计算出来的:
图中覆盖率SC0解释说明:
[ 段 ]
在二个连续的分支点之间的计算机程序语句序列被叫作段。
[可视段]
在一个控制层之内最大可能的非-条件语句序列被称为可视段。在二节点之间可视段的长度可能是零(没有可执行语句)。
SC0
基本段测试覆盖度量也称为块测试覆盖。如果程序的所有可见段(程序块)至少被执行一次,则该段程序的SC0覆盖率达到了100%。
SC0= 被执行的块个数/该段程序包含的块个数(即可见段个数)
在图中,我们清晰地看到该函数的覆盖率SC0,是如何被计算出,且显示出相关的代码,通过这种方式展示,可以使广大没有接触过代码的测试人员,通过黑盒的测是方式,找出覆盖率中代码的没有覆盖到的部分,进行测试用例的补充,从而提升测试用例的制作,以及提高测试质量。
在ThreadingTest中,还有关于其它覆盖率的划分说明,如TRUE(真条件的百分比)、BOTH(条件真假的覆盖率百分比)、Branch(分支覆盖率)、MC/DC等。
穿线测试的出现对测试界的带来的变革
测试工具产品ThreadingTest对穿线理念进行了商业实现,并且免费给整个软件测试界试用。通过工具的方式,让黑盒测试人员也能进行代码级别的白盒测试,并对整个测试各阶段的流程进行了量化的管理,通过黑盒测试来实现白盒结果的展示,完成了测试界中最有效的70%黑盒+30%白盒相结合的测试方法。
穿线测试的最终目标是引领白盒测试进入工业界即在达到精确的测试数据分析水准的同时又大幅度降低单独实施白盒测试高门槛以及局限性,让白盒测试技术可以优雅的和黑盒测试流程、方法进行对接。引领革命性的、可应用于工业领域的数字化软件测试技术。笔者以及带领的TheadingTest团队将始终为达到此目标而努力。并期待软件测试界的有识之士能够同我们一起来推广这个未来可以在工业4.0进程中能够起关键作用的软件测试装置,让软件测试本身和工业4.0系统一样变的数字化、智能化。