软件测试是软件质量保证的重要手段之一,自然也是软件开发生命周期中不可或缺的一部分。但在软件测试领域,存在三大难题(也是测试的基本问题)——Test Oracle问题、充分性问题和有效性问题,它们给我们带来巨大的挑战。
我们必须关注这三大基本问题,整个测试生命周期都是围绕着这三大基本问题展开,例如测试分析侧重解决测试充分性问题(测什么,也包括另外两大问题)、测试设计侧重解决有效性/效率(如何测)等。如果我们能很好地解决了这三类问题,那么我们的测试就做得很好了。
之前,我写过:
-
软件测试的底层逻辑是什么?(谈到三大灵魂之问,其中涉及了其中两大问题:测什么、如何测 两大问题)
-
评“阿里研究员:软件测试中的18个难题”:其实没有那么多难点,只有四大难点 (测试充分性和有效性,以及拓展到测试相关的质量文化、人)
虽然有不同的表述,这也是正常的,因为视角不同,而且没有唯一的答案。大家可以有不同的理解,主要看这样的表述及其说明是否更合理,能否帮助我们解决问题、提升测试的水平。
~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问题、充分性问题和有效性问题—是测试过程中必须面对和解决的关键挑战。解决这些问题需要综合考虑软件的需求、设计、实现和运行环境,以及测试资源的分配和利用,充分运用测试分析能力、设计能力、自动化测试能力和测试策略。通过不断的创新、实践和改进,测试团队可以最大程度地提高测试的质量、充分性和效率。
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。