软件测试三大难题:我们必须面对和解决

2493 篇文章 2 订阅
2330 篇文章 14 订阅

软件测试面试刷题,这个小程序(永久刷题),靠它可以快速找到工作!https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502icon-default.png?t=N7T8https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502

软件测试是软件质量保证的重要手段之一,自然也是软件开发生命周期中不可或缺的一部分。但在软件测试领域,存在三大难题(也是测试的基本问题)——Test Oracle问题、充分性问题和有效性问题,它们给我们带来巨大的挑战。

我们必须关注这三大基本问题,整个测试生命周期都是围绕着这三大基本问题展开,例如测试分析侧重解决测试充分性问题(测什么,也包括另外两大问题)、测试设计侧重解决有效性/效率(如何测)等。如果我们能很好地解决了这三类问题,那么我们的测试就做得很好了。

之前,我写过:

虽然有不同的表述,这也是正常的,因为视角不同,而且没有唯一的答案。大家可以有不同的理解,主要看这样的表述及其说明是否更合理,能否帮助我们解决问题、提升测试的水平

Test Oracle ~

图片

Test Oracle(测试预言)是指在软件测试过程中,用来判断测试结果是否正确的标准或依据。它是软件测试中的核心问题之一,因为如果没有可靠的Test Oracle,测试人员就无法判断测试结果是否正确、无法发现软件中的缺陷,自然,测试就无法进行。

今天我们往往拿不到详细、完整、清晰的设计规格说明书,而且大数据、海量用户的存在,Test Oracle问题就更加突出。

Test Oracle要考虑的因素也很多,如下所示:

所以我们面对这方面的挑战,例如:

  • 缺乏标准:在某些情况下,软件的功能需求可能描述得不够清晰,导致测试人员难以确定测试结果是否符合预期。

  • 环境依赖:软件的行为可能受到运行环境的影响,不同的环境可能导致不同的测试结果。

  • 复杂性:软件的复杂性增加,使得确定测试结果的正确性变得更加困难。

所以新功能测试,我喜欢推荐探索式测试,依赖我们测试人员的智慧,进行综合性的判断。

 ~ 测试充分性~

充分性问题关注的是测试是否足够全面,以确保软件的每个方面都经过了验证。如果测试不充分,可能会遗漏一些重要的功能或场景,从而导致软件发布后出现未被发现的缺陷。

测试充分性往往通过测试覆盖率来度量,但没有一种特别有效的方法能准确度量,以大家熟知的代码覆盖率为例,工业界主要用三种:

  • 行覆盖

  • 分支覆盖

  • MC/DC

我上课时,曾经举过一个简单的例子 if(a>0||b<-10) ,要做到100%分支覆盖或MC/DC,其实很容易,(a,b)只要2个或3个测试数据组合。但这不代表测试是充分的,要做到充分测试,假设(a,b)是两个不独立的两个参数,考虑到边界值分析方法、异常值(NULL、字符串等),完全组合测试用例数可能是8*8=64个。

更何况,还有更复杂的情况。即使做到了分支覆盖和边界值、异常值等组合覆盖,在复杂程序中也无法保证路径覆盖。

即使保证代码充分性覆盖,还不能保证功能/非功能性覆盖,例如可靠性测试、安全性测试,安全性测试就是矛与盾的关系,从来无法实现100%覆盖。

即使功能/非功能性覆盖做到100%,也无法保证业务100%覆盖,当业务比较复杂时。这就是人们常说的,测试是不能穷尽的。

这往往导致灵魂之问:“测试可以结束了吗?” ,我们往往难以回答这样的问题。

测试总是有风险的,我们通过测试分析,尽可能将风险降到最低点。

~测试有效性~

有效性问题关注的是测试过程的效率,即如何在有限的资源和时间内,最大化测试的价值。测试的有效性直接影响到软件发布的速度和质量。因为我们测试的时间、资源都是有限的,我们希望能快速完成测试。从测试逆向思维角度看,发现缺陷概率越大的测试用例,测试用例越有效(越有价值),如果发现不了缺陷的测试用例,其价值几乎等于零。实际工作之中,大部分测试用例都发现不了缺陷,从这个角度看,它们没有价值,但我们似乎又不能不执行这些测试用例。

测试用例的优化显得很关键。去除冗余的测试用例,合并相似的测试用例,可以减少不必要的重复工作。然而,在追求效率的同时,不能忽视质量。过度追求效率可能导致测试不充分,遗漏重要的缺陷。例如,如果仅仅为了快速完成测试而减少对某些复杂功能的测试,可能会在后续导致严重的问题。

这就涉及到测试策略问题,即在测试充分性和测试有效性之间找到平衡。测试策略考虑的因素很多,所以这里面蕴藏着巨大的智慧。

图片

在实际的软件测试工作中,这三个基本问题是相互关联和相互影响的。一个高质量的测试需要准确的 Test Oracle 作为判断标准,同时要兼顾充分性和有效性。测试人员需要在三者之间找到平衡,根据项目的特点和需求,合理分配资源和精力。

比如,在一个时间紧迫的项目中,可能需要优先保证关键功能的测试充分性,同时利用探索式测试和自动化测试的有机融合,提高测试效率。而在一个对质量要求极高的项目中,则需要更加细致地构建 Test Oracle,全面进行测试以确保充分性。

软件测试的三难题—Test Oracle问题、充分性问题和有效性问题—是测试过程中必须面对和解决的关键挑战。解决这些问题需要综合考虑软件的需求、设计、实现和运行环境,以及测试资源的分配和利用,充分运用测试分析能力、设计能力、自动化测试能力和测试策略。通过不断的创新、实践和改进,测试团队可以最大程度地提高测试的质量、充分性和效率。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值