关于精准测试的一点思考

发表于:2019-11-20 13:19  作者:肖哥shelwin   来源:测试不将就

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签: 软件测试技术 精准测试

  精准测试是现代软件测试面临的一个重大挑战。这个挑战来源于两方面背景。
  一,软件测试资源有限。如何提高资源利用率,减少资源浪费,有针对性而不是漫无目的地进行软件测试?
  二,软件测试复杂度高。如何克服各种不确定因素,让软件测试真正能够发现并且不误报,不漏报软件缺陷(bug)?
  软件测试是一个系统工程。因此,精准测试并不是单一或孤立的,而是贯穿于软件测试全过程全方位的需求。在实践中,根据内容不同,可以将精准测试至少划分为以下几种类型:
  一,精准测试管理。测试管理主要包括对各种资源,包括人员,时间和基础设施的调度,并完成测试计划和测试策略的制定。精准测试管理,要求我们制定合理的测试计划和正确的测试策略,以此指导测试工作执行。
  二,精准测试对象。在开展软件测试之前,明确SUT(system under test,即被测对象)的范围,是首要的事情。SUT划定了测试边界,有利于测试"火力"的集中。另外,在敏捷模式下,由于软件频繁更新,全量测试的成本高,耗时长。这时,只针对新增或修改的代码进行差量测试,是一种更精准更高效的做法。
  三,精准测试过程。测试过程的精准性,主要体现在测试用例的有效性。衡量测试有效性的重要手段是覆盖率,包括代码覆盖率和需求覆盖率。通过度量覆盖率,识别覆盖率不足的地方,并有针对性地进行弥补,是提高用例有效性的推荐做法。另外,当测试发现缺陷时,如何快速准确定位缺陷产生原因,也是提高测试过程精准性需要考虑的。
  四,精准测试结果。测试是为发现软件缺陷而存在的。测试结果的精准性,衡量的就是测试发现软件缺陷的真实能力。同时,作为硬币的另一面,测试不误报实际上不存在的缺陷,也是要考虑的。
  实现精准测试,应当兼顾以上四方面内容。本文由于篇幅所限,我们重点探讨第四方面,即测试结果的精准性。毕竟,这是一切测试工作的出发点和落脚点。
  要提高测试结果的精准性,首先要有一种度量测试结果精准性的机制。这里,参考算法理论中评价分类算法的惯用手段,我们约定如下术语,并将测试结果划分为四种类型:
  一,True Positive(TP)。当软件存在缺陷时,测试用例失败。这是一种期望结果。
  二,True Negative(TN)。当软件不存在缺陷时,测试用例成功。这也是一种期望结果。
  三,False Positive(FP)。当软件不存在缺陷时,测试用例失败。这不是一种期望结果,因为出现了误报。
  四,False Negative(FN)。当软件存在缺陷时,测试用例成功。这也不是一种期望结果,因为出现了漏报。
  根据这四个术语,可以衍生出一系列度量测试结果精准性的指标,例如:正确率(accuracy, TP+TN / TP+TN+FP+FN),精度(precision,TP / TP+FP),召回率(recall, TP / TP+FN)等。这些指标各有长处和不足,我们暂且不展开讨论。
  这些指标有一个共同点,那就是如果要得到优化,需要从减少False Postive或False Negative两类非期望的测试结果着手。那么,这两类测试结果分别有什么危害,又应该如何减少呢?
  先看False Positve,即误报缺陷的情况。误报的危害主要两个。一是浪费大家的时间和精力,去分析原本并不存在的缺陷;二是降低了测试结果的公信力。这就好比"狼来了"的故事,当测试结果经常出现误报时,大家会对测试失去耐心和信任,而后果可能是真正的缺陷被忽视。
  如何减少False Positive的情况?一方面,我们需要设计好测试的前置条件,只有前置条件全部满足了,我们才开始正式执行测试步骤。另一方面,我们需要提高测试环境,测试依赖库和测试脚本的质量与稳定性,让它们足够健壮和可靠。
  再看False Negative。从某种程度上说,False Negative是比False Positive更严重的结果。漏报缺陷,最好的结果是我们能在后续测试阶段发现它,而最坏的结果是缺陷一直到软件部署后,用户规模使用时才爆发,从而造成巨大的商业损失。
  如何减少False Negative的情况?一种常见做法是借鉴"变异测试"的思想,故意在软件中插入错误代码,然后观察测试用例是否发生期望之中的失败。在测试驱动开发(TDD)和探索性测试中,这种做法经常被使用。另外,为了提高测试覆盖面,还可以随机化数据或参数,以验证软件是否能够在无数的输入组合下工作。
  这里,针对False Positve和False Negative两种异常结果,简要介绍了各自的应对方法。从根本上说,要提高测试结果精准性,要做好以下两项长期性工作。
  一,在设计和实现测试用例时,提高思维的严谨性。多思考和反问一个基本问题,那就是如果软件失败,测试用例是否能够检测得到?是否应该添加更多的检验条件和规则?
  二,在项目实施过程中,做好测试监控工作。基于大量测试用例历史执行数据,我们可能发现许多改进测试的机会。例如,对那些永远都不失败的测试用例,需要考虑其存在的合理性;对于在同一个软件版本上时而成功时而失败的测试用例,需要分析其背后的原因。
  以上就是我对精准测试,尤其是如何提高测试结果的精准性的一点思考。总的来说,精准测试挑战大,问题多,这篇文章只是开了一个头而已。关于精准测试的更多内容,敬请关注本公众号未来的文章。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理

【福利】填问卷 送2019精选测试大礼包+接口测试实战课程!

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2020, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道