| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 关于精准测试的一点思考 -> 正文阅读 |
|
[Python知识库]关于精准测试的一点思考 |
精准测试是现代软件测试面临的一个重大挑战。这个挑战来源于两方面的背景。 一,软件测试资源有限。如何提高资源利用率,减少资源浪费,有针对性而不是漫无目的地进行软件测试? 二,软件测试复杂度高。如何克服各种不确定因素,让软件测试真正能够发现并且不误报,不漏报软件缺陷(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两种异常结果,简要介绍了各自的应对方法。从根本上说,要提高测试结果精准性,要做好以下两项长期性工作。 一,在设计和实现测试用例时,提高思维的严谨性。多思考和反问一个基本问题,那就是如果软件失败,测试用例是否能够检测得到?是否应该添加更多的检验条件和规则? 二,在项目实施过程中,做好测试监控工作。基于大量测试用例历史执行数据,我们可能发现许多改进测试的机会。例如,对那些永远都不失败的测试用例,需要考虑其存在的合理性;对于在同一个软件版本上时而成功时而失败的测试用例,需要分析其背后的原因。 以上就是我对精准测试,尤其是如何提高测试结果的精准性的一点思考。总的来说,精准测试挑战大,问题多,这篇文章只是开了一个头而已。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 9:20:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |