首页 > 其他分享 >软件测试三大难题:我们必须面对和解决

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

时间:2024-08-01 17:26:09浏览次数:14  
标签:难题 Test 测试用例 测试 Oracle 软件测试 三大 充分性

软件测试是软件质量保证的重要手段之一,自然也是软件开发生命周期中不可或缺的一部分。但在软件测试领域,存在三大难题(也是测试的基本问题)——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问题、充分性问题和有效性问题—是测试过程中必须面对和解决的关键挑战。解决这些问题需要综合考虑软件的需求、设计、实现和运行环境,以及测试资源的分配和利用,充分运用测试分析能力、设计能力、自动化测试能力和测试策略。通过不断的创新、实践和改进,测试团队可以最大程度地提高测试的质量、充分性和效率。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

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

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

标签:难题,Test,测试用例,测试,Oracle,软件测试,三大,充分性
From: https://blog.csdn.net/2401_83387413/article/details/140849517

相关文章

  • 软件测试_接口测试面试题
    接口测试是软件测试中的重要环节,它主要验证系统不同模块之间的通信和数据交互是否正常。在软件开发过程中,各个模块之间的接口是实现功能的关键要素,因此对接口进行全面而准确的测试是确保系统稳定性和可靠性的关键步骤。接口测试的核心目标是确保系统在不同模块之间的数据传输......
  • 软件测试面试时问你的项目经验,你知道该怎么说吗?
    很简单,我来给你们一个公式自我介绍,名字学历荣誉。1简述项目背景,你身处这个项目是做什么的。不要太细,试着引导一下面试官让他提问。这样,请问您对此有什么疑问吗?2简述你在项目中的角色,做那方面的工作。具体的工作陈述。有个度,自己把握好,什么不该说,这个要管好嘴。比如,项......
  • 5分钟掌握软件测试必会mysql数据库知识(数据类型和数据约束
    mysql常用数据类型mysql的常用数据类型,主要有四种,需要我们重点掌握。1整型int整型分成两类,一类是有符号的,就是负数,一类是无符号的,就是正整数。很多时候我们需要的就是无符号的。比如年龄。2小数decimal小数的设置需要我们特别去了解一下。例如:decimal(4,2)这是表示......
  • 软件测试求贤季,最终拿到5个Offer的一些经验分享(附面试题)
    作为一个测试工程师,自动化测试已经是必须要掌握的技能了。学习自动化测试有两个难点,除了其本身拥有一定的技术门槛之外,实战经验才是学习自动化测试的最大难点。部分初中级测试工程师往往在掌握了基本的编程与自动化测试框架API后,会认为自己已经掌握了自动化测试,便开始投入到......
  • 软件测试必备技能
    在软件测试领域,以下是一些必备的技能和能力,可以帮助你成为一名优秀的软件测试工程师:1.测试基础知识:熟悉软件测试的基本概念、原则和流程,包括不同类型的测试(如单元测试、集成测试、系统测试)、测试方法(如黑盒测试、白盒测试)、测试策略和测试计划等。2.测试设计技能:能够......
  • 目前软件测试前景怎么样?有哪些机遇和挑战?
    随着信息技术的快速发展,软件已经成为了我们生活中不可或缺的一部分。而软件的质量和稳定性也直接关系到用户的使用体验和企业的竞争力。因此,软件测试作为软件质量保证的重要环节,其前景也备受关注。首先,从行业角度来看,软件测试行业前景广阔。随着软件产业的快速发展,软件测试的......
  • 软件测试之解构单元测试
    软件单元测试是对软件中的最小可测试单元进行检查和验证的过程。这些单元可以是函数、方法、类实例,或者是任何具有明确功能、规格定义和接口定义的程序代码模块。单元测试是软件开发过程中的最低级别的测试活动,它确保软件的独立单元在与程序的其他部分相隔离的情况下能够正确工......
  • 让人眼前一亮的软件测试简历,收不到面试邀请算我输
    不知道大家的简历是不是都写成下面这样· 根据需求文档进行需求分析· 熟悉业务流程,明确测试点· 根据测试点设计测试用例· 参与评审测试用例· 提交和回归跟踪缺陷,确认修复完成之后关闭Bug· 通过使用Fiddler进行抓包分析并定位前后端Bu......
  • 软件测试的职业阶段
    最近一直在忙的项目刚刚上线交付完成,让自己有了些许喘息的时间。人总是这样,在忙碌的时候,能心无旁骛关注并做好一件事,已是万幸。而全力而为之后的闲暇总是如此的珍贵,在这难得的空隙中,不自觉的开始对自己的职业规划进行了重新审视。回首过去,我意识到,很多像我一样从事软件测试的......
  • 软件测试技术之APP稳定性测试
    在实际的测试过程中,主要是对系统的功能来进行测试,用于校验功能的正确性。还需要考虑到系统在未修改的状态下,是否能够稳定运行,即崩溃、闪退、重启、系统异常等等等地情况。在APP中,稳定性测试一般是交由Monkey来实现。Monkey:本身是在adb中的一个指令,是一种无序的,无法被规范和......