测试用例质量的重要性

介绍

在进行测试时,通常会花很多精力选择“正确”的测试工具。这其实只是为了实现次要目标。当然,一个适合开发环境、项目和流程的工具是重要的。然而,对于良好测试而言,最重要的是测试用例的质量。只有“好”的测试用例才会发现软件存在缺陷。

一个简单的例子

如下是对一个简单测试对象的说明:

“start”和“length”定义了“value”的取值范围。被测函数用来确定给定值是否在定义的范围内。规定范围的上界不在范围内。所有数据类型都是整数。

如下图所示的三个测试用例都通过了测试,并且达到了100%的MC/DC覆盖度。

图1 这三个测试用例通过并达到了100%的覆盖率

图1测试用例都通过并已经达到了100%的覆盖度,但没有对所有的需求进行测试,即没有使用边界值进行测试。

边界值,最小/最大值,极端值,违规值

·    边界值

需要多少测试用例(以及哪些测试数据)才能充分对边界值进行测试?下面使用一个“输入值是否小于5”的函数来研究这个问题。

图2 可能的实现以及哪些测试输入能检测缺陷

图2表格第一列我“输入值是否小于5”的可能缺陷(即错误实现)。其中(i!= 5)和(i <> 5)均为“不相等”,归属不同编程语言(“!=”属于C / C ++,Java;“<>” 属于Pascal,PHP,SQL,Excel)。

表2中第二列为缺陷的可能性组合。缺陷的可能性被认为与关系式中错误字符的数量和“外观”上的差异有关(从正确的(i <5)需要更多的改变才能将正确的(i <5)变换为不正确的(i> = 5),也更容易在视觉上发现)。

表2中后三列为输入值为4、5、6时的测试结果,粗体和红色阴影表示测试失败。输入值4和5未检测到(i!= 5)和(i <> 5),输入值6(即第三测试用例)检测到了。(i <> 5)的实现方式更有可能发生,但使用“<>”运算符的编程语言对于嵌入式系统并不常见。

(i == 4)无输入值检测到,需要额外输入值检测缺陷,需要四个测试用例(“内部”两个值和“外部”两个值)。这是René Tuinhout提出的黑盒边界值分析(B3VA)。“小于5”的值范围有更低边界且可作输入值,则不需要额外测试,下边界可以检测(i == 4)。

结论:嵌入式系统(使用“!=”作为关系运算符),进行代码审查且目标是测试用例的数量较少,仅使用两个测试用例就可以。但为了检测一些缺陷,有时需要四个测试用例。

· 最小/最大值

将给定数据类型的最大和最小(即最负)可能的输入值作为边界值的特殊情况。

图3 函数abs_short()存在一个在使用最大/最小值输入时才会发现的问题

图3函数abs_short()在输入值为-5,0,5时,分别正确返回5,0,5,实现了100%的代码覆盖率。但输入值是-32768时(带符号的16位整数的最小(最负)值),预期结果为+32768。无法在给定的整数范围内表示,返回值为-32768,不是预期值。(背景:-32768 = 0x8000.0x8000-1 = 0x7FFF。反转值为0x8000,与开始时的值相同。)

· 极端值

极端(或特殊)输入值不是直接取边界或最小/最大值,是另一种特殊值。

图4minimum()函数存在编程缺陷

图4是最小值函数。三个(无符号)整数(a,b和c)为输入,返回输入的最小值。

图5:用于检测最小值函数缺陷的测试用例

图5,为该函数运行通过的测试用例。检查每个位置是否能正确检测到最小值(3),100%代码覆盖率,但没有极端或特殊的输入。对此函数,特殊的输入可以是三个相同正值,如输入(3,3,3),结果为0(不是预期结果3),表示最小值功能的实现存在缺陷。

· 违规值

图3函数“所有数据类型都是整数”。适用length的取值范围,故长度可能是负的。输入5,-2为长度,查看4是否被认为在范围之内。用(可能的)无效输入构建测试用例。

ISO26262中的建议

ISO 26262:2011在第6部分第9节中列出软件单元测试的测试用例的设计方法。

图6:ISO26262中设计测试用例的方法

图6为建议取决于汽车安全完整性等级(ASIL)。ASIL的范围从A到D,D最高级别。“强烈推荐”双加号(“++”); “推荐”单个加号(“+”)。1a,1b,1c,...是替代条目; 1,2,3,...是连续的条目。替代条目,应根据ASIL应用适当的方法组合;连续条目,应按照ASIL进行应用。1a要求软件单元测试的测试用例来自需求;1b要求使用等价类的生成和分析来导出测试用例;1c要求分析边界值以导出测试用例。方法1a,1b和1c已在本文前面的部分中讨论过。1d要求错误猜测来导出测试用例。

· 错误猜测

错误猜测需要经验丰富的测试人员,从过往的经验中找到敏感的测试用例。它是一种非系统的方法。例如,被测系统有两个按钮,假设一次只按下其中一个按钮:如果同时按下两个按钮会发生什么?这是错误猜测的示例。

可选方案

本节讨论设计测试用例的其他可选方法。

· 来自源代码的测试用例

使用工具从源代码自动生成测试用例。一些开源和商业工具都实现了一些技术方法(例如遗传算法或回溯),可以利用生成测试用例。源代码生成测试用例要注意:

♦ 遗漏:将无法发现代码中的遗漏。如要求“第一个参数等于第二个参数,则返回错误”若缺少这项检查的实现:由源代码生成的测试用例不会检测到此问题。

♦ 准确度:无法从代码中判断它是否正确。如无法判断(i <5)或(i <= 5)是否实现了代码的预期行为。

可以让工具生成测试用例并将其和需求进行比对,如果不符合要求再对其进行相应的拓展或改变。近期有研究人员对此进行了研究,其主要观点如下:

♦ 自动生成的测试套件比人工创建的测试套件实现了更高的代码覆盖率。

♦ 使用自动生成的测试套件无法检测到更多缺陷。

♦ 自动生成的测试用例会对捕获预期的类行为产生负面影响。

这项研究表明,自动化测试用例生成没有为测试带来优势,但它也没有缺点。虽有很多讨论的研究条件(编程语言,编程技巧等),但结果依然是令人惊讶的。

变异测试(Mutation Testing)

评定测试用例质量的一种可行方法是变异测试(在IEC 61508标准中也被称为“错误播种”(error seeding))。有运行通过的测试用例时,可以“变异”代码。如,将判断(i<5)改成(i<=5),在计算结果上加1,把“&&”改为“||”,注释掉部分代码等。代码进行变异之后,重新运行测试用例。若所有测试用例能够通过,测试用例质量就比较低。至少一项测试用例应该会由于进行了变异而无法验证通过。

小结

100%的代码覆盖率并不意味着“好”的测试用例。然而,在执行测试的过程中为了能够检测出软件的缺陷,需要高质量的用例。这项任务需要仔细而富有经验的人力工作才能达成,对于自动化生成的测试用例,应该持保留态度。

(0)

相关推荐

  • 为什么测试覆盖率如此重要(转)

    本文出处:http://www.51testing.com/html/60/n-4474360.html 由于软件中普遍存在的错误,全世界都见证了一些灾难性事件.2008年在英国希思罗机场5号航站楼开 ...

  • 说说等价划分和边界值分析的区别

    等价划分和边界值分析都是软件黑盒测试的测试方法,二者都是选取一些特定的输入数据进行测试,那么二者的区别是什么呢? 其实,等价划分和边界值分析要完成的测试目标是不同的. 当我们验证软件的某个功能是否正确 ...

  • 交朋友 质量的重要性!

    俗话说的好财富不是永远的朋友,但是朋友却是一生的财富,那么究竟什么才是真正所谓的朋友. 北京的悦悦谈了一个德国的男朋友,婚后便跟着老公去了德国,经过多年努力,两口子的生意做的是风生水起,于是大胆的在德 ...

  • 质量的重要性

    众所周知,产品的质量是关乎企业生存和发展的重要因素之一.然而影响产品质量的重要因素就是员工的质量意识.人的意识取决于人的行为,人的行为决定工作质量,也就决定了公司的发展.因此对于我们员工而言,更需要有 ...

  • 尿素质量的重要性不言而喻

    基本信息 车型 欧曼ETX ECU CM2880 排放阶段 国五 故障现象 动力不足,故障灯亮 步骤一:读取故障码 有四个当前故障. 步骤二:故障码分析 FC4271为尿素泵空气切断阀故障,FC356 ...

  • 你知道《住宅质量保证书》的重要性吗?看完你就明白了

    我们在选房.看房的时候步步小心,以免受害.到了验房的时候,是我们最开心的时候,终于可以拿到属于自己的房子了.但这最后一步验房往往是最关键的,也存在需要注意的问题. 图片来源网络 在验房时,理应要求开发 ...

  • 水泥土搅拌桩质量检测对水利工程的重要性

    水泥土搅拌桩质量检测对水利工程的重要性 1.水泥土搅拌桩在水利工程中的应用 在1984年之后,水泥土搅拌桩在水利工程中有着较为大规模的应用,在相关数据调查中,2015-2018年水泥土搅拌桩应用次数增 ...

  • 新手须知:搜索推广中质量分的重要性

    很多商家的店铺日常流量其实都是通过自然搜索得到,但是有时候就需要通过搜索推广让自己的产品在平台进行排名,以此来产生更多曝光获得流量.那么拼多多搜索推广的排名机制是怎样的呢?它可以展现在客户端,小程序, ...

  • ​浅析农贸市场设计改造与动态线路规划的重要性

    浅析农贸市场设计改造与动态线路规划的重要性 现代农贸市场的日常运作,动态线路设计必须保持稳定发展的首要因素.完善合理的动态线路规划,不仅能反映进入市场时的客货供应情况,而且对引导顾客的购物趋势也有很大 ...

  • 夜景照明在旅游区中的重要性

    近年来,旅游业迅速发展,夜游产品变得越来越多样化. 白天的风景名胜主要依靠风景吸引人,夜晚的夜景已成为吸引人的景点. 因此,夜旅游已成为未来旅游景点发展的趋势,夜景照明在其中起着重要的作用. 良好的夜 ...

  • 关于房屋质量纠纷的裁判规则

    律行天下 今天 来源:中国司法案例研究中心 编者按 房屋质量问题是房地产交易中的核心问题,也是引发众多纠纷的焦点.通常所说的房屋质量问题是指房屋达不到法定或约定的质量标准,存在质量缺陷.商品房质量对消 ...