突变测试,或称程序突变,是一种白盒测试技术,可以帮助公司开发一系列新的软件检查,同时也可以审计一个项目的当前流程。 这是一个相对较新的方法,它可以确保开发人员和测试人员都以高标准工作。
一个应用程序的成功与否取决于其自身的质量保证程序–这意味着组织必须接受一种以上的测试技术。
学习突变测试可以帮助测试团队提高他们的技能和一般剧目–使他们能够提高这些检查的可靠性。 突变测试是一个复杂而敏感的过程,因此,测试人员彻底研究能够保证成功实施的好处、挑战和第三方方案至关重要。
在这篇文章中,我们看看突变测试和它如何提高质量保证,以及软件测试团队的其他关键考虑因素。
什么是软件测试中的突变测试?
在软件方面,突变测试是指质量保证团队故意在应用程序的代码中引入错误–或 “突变”–以观察团队的反应。 其目的是创造一个错误,并确保测试套件能够识别对应用程序的每一个改动。
在编辑程序的代码时,突变测试员可以切换一个真/假表达式,删除一个语句,或简单地改变一个值。 在其他软件检查过程中,这些错误可能以多种方式表现出来;所有这些错误都很容易被一个熟练和有经验的测试团队发现。
突变本身往往是非常微小的,允许突变代码的测试人员观察团队如何发现这些变化。 重大的变化即使粗略地看一下也会很明显–所以小错误通常是确保公司采用稳健的测试方法的最好方法。
这项技术特别关注一个团队的测试案例的有效性;包含测试信息的文件。 团队也可以使用第三方自动化软件来运行这些检查,在这种情况下,突变测试看这个平台在程序代码中检测故障的能力如何。
1.什么时候需要做突变测试?
由于突变测试的目的是验证和改进当前的质量保证检查,因此团队在测试阶段的早期进行这项工作是非常重要的。 这意味着如果测试套件无法识别和 “杀死 “突变体,就有足够的时间对组织的测试程序进行任何规模的全面修改。
由于这是一种高度通用的方法,突变测试几乎适用于任何类型的软件,包括网络、移动和桌面程序。 这在单元测试阶段效果最好–该阶段检查一个应用程序的最小组件。
2.当你不需要做突变测试时
仍有一些情况下,突变和一般的白盒测试并不适合一个程序;这可能是由于各种原因。
例如,如果测试人员的目标只是用黑盒测试来检查–在这种情况下,他们会转而关注该环节的前端,甚至是整个测试阶段。
有一些公司认为白盒测试是繁琐和耗时的,这可能导致他们跳过这个过程。 强大的、经过良好检查的测试用例也可以规避突变测试的需要,因为这显示了团队的勤奋和对准确测试程序的承诺。
3.谁参与了突变分析?
在突变分析中,有许多不同的作用,包括:
– 突变试验者
他们通过引入各种小缺陷来突变代码,以确保测试过程按预期进行。 这些测试人员通常是质量保证团队中预先存在的成员。
– 应用测试人员
他们定期检查代码中的任何问题,识别并纠正他们发现的任何突变。 他们进行白盒测试以发现编码错误 – 但也使用其他技术。
– 应用程序开发人员
他们设计程序的功能并编写初始代码。 他们还修复测试人员发现的任何问题,确保软件处于稳定状态以备发布。
– 项目经理
他们提供应用方面的指导,并可能与突变测试人员一起工作,以看到他们自己团队的功效。 他们确保在每个发展阶段都有强有力的标准。
我们用突变测试来测试什么?
突变测试更注重于测试过程,而不是应用。 为此,它研究了以下内容:
1.测试案例
测试用例是包含每个测试的详细信息的文件,包括测试人员对每个单独检查的预期结果。 一致和准确的测试案例为QA团队成员提供了一个关于应用程序健康状况的想法,以及它的性能如何符合公司的期望。
这些测试用例中的信息可以决定测试人员发现某些缺陷的能力–包括突变测试所引起的缺陷。
2.测试标准
突变测试仔细检查了当前的测试程序,以确保团队成员能够识别即使是可能影响用户对软件看法的小问题。
测试人员的勤奋和能力甚至可能是企业通过这些检查评估的主要因素。 如果没有在每个阶段对细节的强烈关注,测试人员可能会错过程序中存在的严重突变。
3.单个代码单元
突变测试在开发的单元测试部分很常见。 这着眼于单个组件,以保持对每个测试的强烈关注,通过确保测试人员只工作于相关的代码行,大大优化了整个过程。
由于突变测试往往是在质量保证阶段的早期,并可能是全面测试的前奏,这种方法可以在不影响准确性的情况下提高速度。
4.计划更新
软件更新通常涉及重新启动测试过程,以确保没有新的故障,而且以前的错误不会重新出现。
重复突变测试是其中的一个关键部分,有助于促进重大软件变化后的一致测试标准。
测试团队可能认为彻底的更新后检查是不必要的,但代码突变可以确保他们了解测试在整个开发的每个阶段的重要性。
5.自动化软件
公司还进行突变测试,检查他们的自动测试套件,确保他们能够注意到突变的代码,以及其他问题。
如果第三方测试应用程序可以识别程序的外部变化,甚至有可能修复它,这意味着组织可以信任该软件来进行自动化测试。
公司验证他们的自动化方法是非常重要的;这让每个测试人员都感到安心。
6.自动化战略
公司如何将自动化整合到其流程中,与他们采用的软件同样重要;例如,公司可能决定实施 超自动化。 这让公司能够智能地决定哪些突变和软件测试需要自动化。
如果没有一个强大的自动化策略来适应应用程序代码中存在的巨大差异,一些测试可能与自动化不兼容 – 这限制了平台的能力。
7.申请
虽然突变测试更多关注的是测试团队,而不是应用程序,但它仍然可能突出这个程序的重要信息。
例如,突变测试显示了软件如何响应其代码中的变化,包括它是否以团队期望的方式标示这些问题。
这种方法不是一种软件测试技术,但仍然能够提供有关其内部运作的有趣数据。
突变测试的生命周期
突变测试的通常生命周期如下:
1.需求分析
任何突变测试生命周期的第一步是弄清楚到底什么需要验证,以及应用程序的哪些部分代码最能从这些测试中受益。
该团队可能会与开发人员和高管交谈,以确定他们的关切,并开始解决这些问题。
2.测试规划
然后,测试人员开始开发他们打算实施的确切检查–在这种情况下,将提供最佳洞察力的突变。
这个阶段决定了整体的突变测试策略,以及团队如何有效地实现他们预期的代码突变。
3.测试案例开发
突变测试涉及它自己单独的测试文档,包括关于突变代码的信息,以及他们希望测试人员如何修复这个问题。
良好的记录能确保测试按计划进行,并能帮助团队保持其对高测试标准的承诺。
4.测试环境设置
测试人员确保应用程序已经准备好让他们改变–如果其他团队成员无法发现这些问题,他们有一个程序来解决这些问题。
作为其中的一部分,突变测试者建立了一个测试服务器,并将其作为突变的帆布。
5.测试执行
在完成他们的准备工作后,测试人员改变应用程序的几个组件的代码;然后他们等待其他测试人员注意并解决这些问题。
突变测试人员和应用程序测试人员都必须广泛地记录这一点,以确保他们的记录是稳健的。
6.测试周期结束
一旦测试完成,突变测试人员会仔细检查他们所做的所有修改是否被应用测试人员或他们自己修复。
然后,他们结束测试周期并分析结果,讨论测试人员如何应对各种错误,以及他们纠正错误的能力。
7.测试重复
在关闭测试周期后,可能有必要在未来的软件更新后重新激活。
一个应用程序的每一次改变都会以某种方式改变其功能,从而产生新的可能性,团队必须考虑到这些可能性,以确保他们的测试过程足够缜密。
突变检测的好处
进行突变测试有很多好处,包括:
1.验证了测试过程
突变测试的主要好处是它能够显示公司的测试人员如何对待软件 – 以及他们识别编码问题的能力。 这也确保了团队的测试用例足够全面,涵盖所有必要的测试。
突变测试检查一个组织的整体测试程序,以保证其按预期工作。
2.确保强大的自动化
突变测试帮助团队检查他们的第三方测试自动化平台是否能够充分识别代码内的错误,并以正确的方式处理这些错误。
如果这个软件在进行必要的校准后也不能检测到这些,可能值得把平台换成能轻松通过这些测试的平台。
3.覆盖面好
每个软件测试过程必须能够广泛覆盖整个应用程序,以确保每个方面都得到必要的关注。
突变测试器可以改变程序代码的任何部分;良好的实施允许这些测试包括每一个主要的功能。 这教会了测试人员在整个应用程序中搜索问题。
4.检查源代码
由于突变测试涉及到对代码的处理,并在适当的时候直接进行修改,这种方法也可以强调应用程序中存在的未优化的脚本。
软件测试人员只有在软件的代码充分的情况下才可以授权程序并进行正常的一轮测试;这些检查使测试人员能够突出未来潜在的问题。
5.导致更好的软件
突变测试有助于确保应用程序的测试过程适合程序的要求。
如果突变分析显示质量保证团队没有遵循正确的程序或测试用例不充分,测试人员可以努力改善这一点。 如果没有这种尽职调查,组织可能会在不知不觉中发布有问题的产品。
6.对不同语言有效
无论测试团队在应用中使用什么语言,都有可以提供高质量突变分析的软件选择。
这包括一些针对该语言的生活质量特征,精简检查以提高可靠性。 针对不同语言的定制方法提高了每个单独测试的质量。
7.高度便利的工具
许多顶级突变平台是完全开源的–这意味着它们免费或以大幅降低的成本提供更多的定制和全面的功能。
与许多其他形式的测试相比,代码突变的障碍较少,是企业评估甚至改进其质量保证方法的一种有用和方便的方法。
突变测试的挑战
这一过程也伴随着众多的挑战,例如::
1.需要编程知识
为了让测试人员执行这些检查,他们必须对程序和代码有全面的了解,这使得经验不足的测试人员很难作出贡献。
一个企业只能以适合测试人员现有技能的方式来测试软件;具体来说,就是他们编辑应用程序并创造一个可修复的编码错误的能力。
2.不适用于黑盒测试
黑盒测试主要包括查看应用程序的前端,而不检查其内部工作和代码 – 这实际上与突变测试不相容。
因此,与其他方法相比,这些检查只对某些测试有帮助;许多方法可以对整个测试阶段提供更大的覆盖面。
3.设计突变测试是很耗时的
由于团队需要找到值得变异的个别组件,代码变异可能是一个乏味的过程。 决定颁布哪些突变本身可能需要大量的时间;当其他测试类型有效地等待这些检查来充分验证公司的测试方法时,这可能是个问题。
4.可能需要许多代码变异
按照类似的思路,复杂的项目自然需要更多的突变体以确保全面的测试方法。 这为突变阶段增加了更多的时间,并可能涉及到对应用程序代码的许多手工修改。
如果没有高质量的具有程序突变能力的测试自动化软件,这对测试人员来说可能很难成功实施。
5.测试人员可能不会注意到错误
突变测试人员和项目经理在实施这些检查时,最担心的是软件测试人员(手动或自动)可能根本没有注意到这些问题。
这可能需要对公司的测试程序进行全面检修–尽管这仍可能为测试人员提供有关其质量保证标准的重要信息。
6.可能是内存密集型的
突变测试通常需要大量的处理能力,尽管这可能取决于测试人员使用的应用程序。
如果组织的机器数量有限,或者这些设备的规格较低,它们可能难以同时运行太多的突变。 这影响到他们在测试阶段结束前能进行多少次检查。
7.报告可能是信息密集型的
虽然这主要取决于一个团队的突变测试工具的界面,但他们生成的报告可能难以解析。
这意味着需要花时间手动整理它们并找到正确的测试结果;一些程序让用户定制实际的报告过程;这在不同的应用程序中是不同的。
突变测试的特点
有效的突变测试的主要特点是:
1.全面的
这些检查涵盖了软件的每一个主要方面;有足够资源的公司甚至可能为每个常规测试案例设计一个突变测试。
虽然确切的数量取决于组织的能力和偏好,但有效的突变测试涵盖了广泛的编码特征。
2.战略
程序突变同样应该遵循一个明确的、计划良好的结构,以促进组织的整体测试目标。
例如,他们产生的错误可能近似于现实的测试失败,这使得测试人员能够在这些问题自然发生时进行预测,大大改善公司的测试过程。
3.建设性的
突变测试的目的是确定测试中的不足之处–显示团队如何改进他们的检查,并在出现小错误时进行修复。
突变测试人员必须优先考虑影响软件功能的 “无效 “突变体,使整个项目的测试改进更加清晰。
4.先发制人
这些检查的存在是为了验证团队的整体策略;这意味着突变测试在开发的早期阶段效果更好。
如果测试人员注意到他们的质量保证方法有任何重大缺陷,这就给了他们必要的时间来改变他们的测试用例,以确保它们是足够的。
5.一致性
跨越应用程序的不同迭代的突变测试应该返回一致的结果,同时也增加更多的检查以适应软件的变化。
随后的检查必须包括对细节的同样关注,以保持其有效性–如果没有这种精确性,突变测试会变得不太准确。
6.微妙的
突变测试旨在考察质量保证团队通过其测试和第三方平台识别代码缺陷的能力。
这意味着测试不应该被每个检查软件的人立即发现;目的是检查测试人员对小的代码问题如何反应。
7.协作性
与任何软件测试一样,代码突变是一个过程,通常需要团队合作和沟通以确保其成功。 保持一个合作的氛围有助于避免信息孤岛,这可能会导致沟通不畅–这也保证了每个测试人员都能专注于手头的任务。
突变测试的类型
三种主要的突变测试类型是:
1.价值突变
值突变直接改变了代码内的值,将一个数字或字母改为另一个,从而影响到应用程序的功能。
例如,测试者可以改变程序的确切参数,如它所反应的数字。 突变测试人员可能会特别针对软件的常量值,因为这些常量值在正常操作中总是保持不变。
2.决策突变
决策突变修改算术和逻辑运算符,有效地改变应用程序对特定情况的反应。
例如,将一个大于运算符(>)与一个小于运算符(<)交换,自然会影响到程序的输出。 测试人员也可以将 “或 “换成 “和”,或者反过来,从根本上改变这个软件以及它如何解释其他测试人员和可能的用户提供的信息。
3.声明突变
语句突变改变了代码的实际语句,修改了应用程序用来做决定的规则。 测试人员可以改变这些行的内容,复制它们,甚至删除它们,以检查突变的程序如何影响软件的功能。
这些突变改变了一个程序的构件,可能会删除整个功能或以其他方式阻止它们工作。
澄清一些疑惑
– 突变测试与回归测试
突变测试和回归测试都是软件测试的有用方法–了解这些技术中的每一个,可以提高公司的整体质量保证。
1.什么是回归测试?
回归测试是指测试人员在不同的迭代之间检查软件,以确保它在代码发生变化的情况下仍能发挥作用。
如果没有这些检查,即使是微小的变化也可能导致严重的问题,有可能导致以前的错误重新出现。 由于重新测试每个组件的复杂性质,这通常需要自动化;许多公司为此放弃了回归测试。
测试人员可以对单个单元、单个部件或整个产品进行这些检查 – 所需的确切测试主要取决于项目及其规模。
2.突变和回归测试之间的区别是什么?
回归测试主要侧重于检查程序及其功能,而代码突变则是看测试人员如何应对问题。
前者也主要是在程序多次迭代后进行,而突变检查可以在开发的任何阶段进行–尽管通常是在测试阶段的早期。
回归和突变测试都可以处理单个编码单元,以及微小的变化如何导致测试人员必须努力纠正的重大问题。
3.结论:突变测试与自动测试
由于检查和单元的广泛性,自动化往往是突变测试的一个关键部分–这使得它有时对成功和全面的测试过程至关重要。
公司通常使用代码突变来检查他们的第三方自动化平台以及它对有问题的脚本的识别程度。
将彻底的突变检查目录与自动化软件相结合,可以大大增加公司的覆盖率,并确保更有力的结果。
虽然这是两种独立的测试实践,但它们不需要相互对立。 例如,整合机器人流程自动化,可以促进公司的突变测试战略。
在软件工程中开始突变测试需要什么?
全面突变测试的通常要求包括:
1.一个明确的测试策略
测试团队必须建立一个突变测试的策略,包括哪些组件和单元是最需要检查的。
例如,代码的某些方面可能对应用程序的成功和功能更加不可或缺;测试人员应确保有足够的突变来适应这一点。
公司的突变测试时间表也是一个重要的考虑因素,因为这可以确保测试人员有足够的时间来调查代码。
2.没有范围蠕变
即使有一个彻底的战略,规定了公司的突变测试方法,也有可能出现明显高于必要数量的测试。
在整个过程中,效率是最重要的,尤其是其他测试阶段可能在等待团队发现和杀死突变。 测试人员在开始突变代码之前,必须清楚地定义他们的范围;这可以确保在一个实际的时间框架内一切都可以管理。
3.严格的文件记录
每一个测试过程都得益于完整的文档–通常是以测试案例的形式,详细说明各个检查和任何相关的突变体。
这说明了团队目前在整个测试中的进展,这对管理人员和行政人员特别有用。 记录每一个代码突变也有助于测试人员对他们所做的修改保持清晰的记录。
如果质量保证团队在测试时努力寻找这些突变,这些文件就能有效地作为答案的关键。
4.熟练的测试人员
突变代码的测试人员必须对软件有很强的理解–包括他们可以突变甚至破坏软件的许多方法。
突变测试人员大致知道他们的改变将如何影响应用程序,以及其他质量保证团队成员如何识别突变的代码。
这通常需要有良好的编程知识水平。 为了使突变分析有效,软件的测试人员也应该有完善的技能和测试经验。
5.自动化软件
在突变测试之前,第三方自动化软件可能是必要的,因为这个过程往往需要大量的检查。 这对于有更多代码和功能供质量保证团队检查的复杂应用程序来说尤其如此。
公司可能会专门颁布这些检查,以测试自动化软件对编码错误的反应。 这可能是公司审判过程中的一个核心部分,以决定哪些程序是最有用的。
突变测试过程
测试人员在进行突变分析时,通常遵循的步骤是:
1.准备测试
准备工作是任何测试过程的第一步。 这包括协商实施确切的检查,并获得任何必要的批准–例如来自公司高管和利益相关者。
测试人员必须以适应项目时间表的方式开发这些检查,同时仍然覆盖每一个主要组件。 团队的规划可以决定其代码突变的有效性。
2.介绍突变体和故障
准备工作完成后,测试团队开始改变代码,按照他们的计划突变代码,引入特定的故障。 这些错误应该是相对较小的,因为这允许测试人员衡量团队其他成员识别编码问题的能力。
小故障也可以帮助组织检查其第三方自动化软件的敏感性。
3.应用测试案例
测试用例必须考虑到应用程序中每一个可能的故障点–如果突变的程序能够没有任何错误地运行,这可能需要重写。
一个程序的测试用例代表了测试人员进行的全部检查;每一个测试用例都应该帮助测试人员发现任何隐藏的突变,并成为应用程序可用性的组成部分。
4.比较结果
在程序中加入变异错误并应用团队的测试案例后,团队必须比较原始程序和变异程序的结果。
希望原版中每一个成功的检查,在突变的应用中也会有一个错误。 这显示了测试人员和他们使用的工具的能力。
5.根据不同的产出采取行动
如果原始程序和突变体程序之间有不同的输出,正如测试人员所期望的那样,这意味着测试用例可以通过证明突变体的存在而成功地杀死它。
然后,测试人员可以对他们的方法和识别编码问题的能力充满信心地进行测试。 对于这些特定的测试,没有必要对测试案例进行修改。
6.如有必要,请更换外壳
一些代码突变可能会在不同的程序中产生相同的结论,这表明测试案例无法成功地突出应用程序中每一个可能的错误。
在这些情况下,突变体保持 “活力”,并可能以测试人员没有框架的方式继续影响软件 – 这导致了更好的测试案例的创建。
如何创建突变体程序
突变体程序实际上与原始程序相同,只是有一个微小的变化,会以微小但明显的方式影响一个应用程序的功能。
全面而详细的测试用例有助于测试人员或软件套件准确定位这些变化及其导致的故障。 该公司正在检查的每个案例都需要一个原始和变异的程序,显示每一个变化的效果都是孤立的。
这些程序通常会复制现实中的错误,如编码错字。 对于测试人员来说,避免阻止应用程序执行的 “静止的 “突变体也很重要–这对测试人员来说太明显了。
在一个突变的程序中要改变什么?
与许多软件测试变量一样,测试人员所做的确切改变取决于应用程序及其代码。
有三个类别包含了大多数的突变测试:操作数、表达式和语句。 改变其中任何一项都可以创造出一个有效的突变程序–显示不同的数值或规则如何影响程序使用的逻辑。
这些类别与测试人员调查的三种主要突变类型有关;它们分别是决策、价值和语句突变。 这些变化应该是微小的,不能完全阻止测试的执行。
突变测试的最佳实践
在软件测试背景下进行突变测试时,有一些做法值得遵循,以确保获得强有力的结果,例如:
1.最大化突变得分
一个程序的突变分数是一个团队或应用程序能够成功识别或 “杀死 “的突变体的百分比。
例如,如果一轮突变测试有40个突变体,测试人员发现了36个,那么突变得分就是90%–团队的目标始终是确保得分达到100%。
2.随机选择突变体
虽然它可以帮助确定某些组件的优先次序,并对其进行更彻底的测试,但对于测试人员来说,随机选择添加哪些突变体也很有用–尤其是在紧迫的期限内。
只要这些检查代表了每一种重要的突变类型,质量保证团队就可以验证他们的整体软件测试策略。
3.保持小的变化
代码突变应该代表与原始程序的微小偏差,因为这说明测试人员有多大可能识别某些错误;微小的编码问题也表明他们的软件有多敏感。
至关重要的是,突变测试人员要找到一个平衡点,使这些微小的变化仍能产生明显的故障。
4.每个程序有一个突变
突变测试孤立地看待单个测试用例,以检查它们有多全面。 为了帮助解决这个问题,每一个变异的程序都应该只有一个与原始程序的变化。
具有多个突变的程序可能无法有效地与测试用例配对;突变可能相互冲突。
5.仔细考虑自动化软件
公司经常使用代码突变来验证团队对自动化软件的使用,并确保它能够像人类测试人员一样有效地识别错误。
这意味着选择正确的自动化平台可能是一个重要的考虑因素,也是整合机器人流程自动化的可能性。
6.使用测试驱动的开发
测试驱动开发(TDD)是指一种特定的技术,在开发的每个阶段都考虑到测试要求。
这有助于确保测试用例与软件完全兼容–使其能够轻松地通过突变测试,并做出与质量保证过程同步的更好的程序。
突变试验的输出类型
突变测试产生的输出有几种,包括:
1.突变体程序
突变程序是这些检查的自然输出;测试人员创建这些程序以反映他们当前的测试案例和他们帮助检测的问题。 这些程序通常只在一个微小但重要的方面偏离其原始的对应程序,以确保更高的可靠性。
2.活的或死的变种人
在测试之后,突变要么被 “杀死”,要么保持 “活着”–这只是指测试人员(或他们的软件)是否成功识别了一个编码问题。
如果突变体保持活力,测试用例可能需要认真修改。
3.变异测试案例
质量保证团队使用单独的特定突变测试案例,记录其突变程序的信息。
这有助于确保团队对每一次检查都有全面的记录;这些文件包括关于突变的细节及其对项目的影响。
4.突变得分
任何突变测试的最终目标是达到100%的突变分数,公司的测试程序成功定位并杀死每个突变体。 任何低于此的情况都表明他们的测试案例和一般流程需要改进,以识别有问题的代码。
突变测试实例
这里有三个突变测试的例子:
1.价值突变的例子
价值突变涉及改变一个常数或参数,这可能会改变程序的极限。 例如,自动结账机的软件可能使用食品的重量来确定其价格。
测试人员可能会突变这个程序背后的代码,以改变重量参数,使每盎司或每磅的食物变得更加昂贵。 测试人员或测试平台应该能够识别不同数值对该程序的影响。
由于这个错误改变了软件的一个主要功能,测试用例应该注意到这个错误并提醒团队。
2.决策突变的例子
决策突变涉及改变算术或逻辑运算符,颠倒或以其他方式改变该应用程序对用户输入的响应方式。 回到自助收银机的例子,这些机器可以标记出一个意外的高重量的物品,可能是由于用户错误。
机器的代码可以通过 “if (a>b) “的决定来做到这一点–“b “反映了预期的重量,而 “a “则对应于实际的重量。 团队可能会将其突变为 “如果(a≤b)”,从而改变结账的反应方式;即使是在预期的重量下,它也会标记该物品。
3.声明突变的例子
语句突变涉及改变规则或输出–这甚至可能包括从应用程序中完全删除语句。 这些突变可能比其他突变更明显,这取决于具体语句的频率;测试人员明智地选择语句是至关重要的。
例如,如果用户试图购买受年龄限制的物品,自助结账机可以显示警告。 如果没有相应的声明,机器可能会崩溃或允许任何客户购买任何物品。
通过突变声明并向团队强调,测试人员可以验证他们的方法是否容纳了这些问题。
通过突变测试检测到的错误和bug的类型
突变测试主要是发现测试过程本身的问题。 考虑到这一点,以下是这些检查可以帮助识别的一系列问题:
1.不明确的测试案例
如果突变分析显示出低突变分数(甚至任何低于100%的分数),这表明团队的测试用例无法解释可能影响应用程序的每一个可能的故障。
它们可能不够具体或广泛,无法满足团队的要求。 这些文件应该包括团队在测试软件时可能遇到的每一种可能性,以确保可靠性。
2.未经培训的测试团队
突变测试也可以说明团队的能力,包括他们个人识别突变和其他故障的程度。 如果他们不能在整个程序中找到突变体,尽管有明确和详细的测试案例,这有可能是由于测试人员没有正确应用这些案例。
突变的程序会在整个测试过程中显示出问题–这也可能包括不熟练或未经训练的测试人员。
3.测试软件不完善
如果一个公司使用这些检查来检查自己的测试平台,它可能会发现软件不能准确识别或杀死突变代码。
公司可能会通过调查其他选择来回应,直到他们找到一个与他们的测试案例相匹配的选择。 如果自动化软件不能找到有问题的代码,它很可能难以识别影响软件的其他问题。
4.未经优化的代码
突变测试可以揭示出软件内已经存在的问题。 例如,测试人员可能试图突变代码,但自己却发现了关键缺陷。
这作为程序的另一个重要角度,表明代码突变提供了测试过程之外的好处。 测试人员以任何身份检查这段代码的次数越多,团队就能在整个测试阶段发现和修复更多的问题。
常见突变测试指标
突变测试使用的主要指标包括:
1.被杀死的变种人
这指的是测试人员或软件能够识别的突变体的数量,标志着它们的存在,以确保工作人员能够发现像这样的小故障。
测试人员杀死的突变体的数量取决于他们测试案例的强度。
2.活着的突变体
活着的突变体是指那些测试人员或软件未能识别的突变体–显示出团队的质量保证策略中可能存在的任何差距。 如果发生这种情况,测试人员应该重新调整他们的流程和测试案例,以适应这些突变体,并在未来的检查中杀死它们。
3.有效的突变体
这个指标决定了程序能够成功包括的突变数量,而没有发生运行时错误,使测试及其有效性失效。
有效的突变体是指测试人员和自动化软件可以检查的突变体;这是由于突变体相对较小。
4.无效的突变体
重大的突变可能会影响到应用程序,使测试变得不切实际,甚至不可能–因此,跟踪突变程序中存在多少 “无效 “突变体是有帮助的。
识别这些允许测试人员编辑甚至删除它们,确保检查只包括有效的变异。
5.突变体总数
无论是否有效,突变的数量是测试人员跟踪的另一个指标;这让他们可以监测突变体并记录其状态。
由于每一个突变通常都涉及一个单独的测试,总数也可作为整体代码突变数量的计数。
6.突变得分
对突变分析最有帮助的指标通常是突变分数,它实际上是测试人员或自动化套件能够检测到的有效突变体的百分比。
任何低于100%的检测都可能是测试程序不当的标志。
实施突变体测试的7个错误和陷阱
突变测试是一个复杂的过程,公司必须明智地实施,以避免严重问题或错误。 以下是测试人员在进行突变测试时应努力避免的七个陷阱:
1.变异比例不当
在突变分析过程中,规模是一个重要的考虑因素,因为这个过程的存在是为了确保测试人员识别应用程序中的小故障。 如果突变对测试人员来说过于明显,这可能不是检查他们注意或反击软件问题能力的有效方法。
2.无效或活体突变
即使在正确的规模下,许多突变也只能提供有限的有效性–例如,如果它们没有导致故障,或者导致一个问题,使应用程序停止工作。
测试人员应注意任何编码的改变会影响整个软件。
3.不兼容的测试案例
测试用例和突变必须完美配对,以确保一致和和谐的测试。 当决定添加哪些突变时,甚至在设计最初的测试案例时,质量保证团队可能会努力保证这些突变适合在一起,并导致整体测试更加流畅。
4.最后期限和时间表
测试阶段的长度各不相同,但应始终遵守公司内部的最后期限。 未能适当安排突变测试的公司可能无法及时完成这一过程。
在项目进入测试阶段之前,团队必须确保测试计划是适当的全面的。
5.测试覆盖率不足
企业可以选择随机地实施他们的代码突变–但他们涵盖广泛的问题仍然很重要。
为了确保测试人员和软件都能检测到每一种类型的突变体,检查应该至少包括几种值、决策和语句的突变。
6.使用突变体来测试软件
虽然突变测试为应用程序提供了一个新的视角,但团队必须只使用这种方法来检查自己的测试过程。 公司需要了解突变测试的确切能力和限制;这种技术只能与其他软件检查一起成功。
7.太多的变种人
公司确保广泛的测试覆盖率是最重要的,但他们在这个过程中可能会实现太多的突变体。 每个突变程序都需要大量的计算能力–限制了一个组织可以同时进行多少次突变。
运行过多的突变也会使测试截止日期更难满足。
突变测试清单、技巧和窍门
还有一些额外的提示,可以帮助任何团队提高突变测试过程的成功率,比如说:
1.检查编程语言的兼容性
免费和付费的突变测试工具通常都专攻一种编码语言–因此,测试人员选择一个与应用程序和软件测试平台兼容的工具非常重要。
测试团队应该调查许多选择,以确保他们使用适合他们的预算以及他们喜欢的编码语言的程序。
2.明智地分配测试
测试团队的不同成员可能会查看应用程序的不同方面,通常与他们的具体优势、劣势和整体经验相关。
当团队将突变测试分配给每个测试人员时,他们应该记住这一点,以了解他们的熟练程度;这表明进一步的测试可能会有多好。
3.谨慎选择故障
如果软件最近的一次迭代出现了涉及某个值或语句的错误,那么复制这个错误并检查团队或程序的反应可能会有帮助。
这有助于保证应用程序的持久性,并说明团队有能力在以前的错误再次出现时注意到它们–这是回归测试的一个关键组成部分。
4.最大限度地提高计算能力
由于突变检查可能需要大量的计算能力来运行,这有助于充分利用公司的硬件。
例如,如果某些机器有更强的规格,在这些设备上运行突变体可能会有帮助。 这使公司能够避免因机器速度较慢而可能导致的任何重大延误。
5.不要否定活着的变异
即使有严格的时间表,测试人员也应该努力修改和扩大他们的测试案例,以打击任何在这个过程中幸存的突变体。
虽然这些错误在软件或测试人员没有发现的情况下似乎并不重要,但它们仍然代表着测试案例未能识别所有的编码问题。
6.调查新的自动化软件
如果团队的测试用例足够详细,但他们的自动测试套件不能成功地使用它们来识别每个突变,他们可能会从不同的软件中受益。
有许多免费和付费的平台,公司应该检查每个选项,以确保他们有最适合他们的测试案例的长期软件。
7.同步每一个测试过程
协作是每一个测试策略的核心组成部分–这有助于确保每个过程可以很容易地按照团队的意图结合起来。
例如,测试团队可以在开发他们的测试案例时考虑到突变,以确保更高的兼容性,使测试人员更容易验证他们的策略。
8.使用单元测试
单元测试使质量保证团队能够孤立地检查代码片断,大规模地简化测试,使团队更容易发现问题。
如果测试人员担心最后期限,这种组合可能特别有帮助,使他们有机会简化检查,提高整体覆盖率 – 导致更强大的软件测试。
9.编写详细的测试案例
突变测试案例应包含关于突变体及其对程序影响的充分信息,以及测试团队或平台如何定位这些故障。
通过提供尽可能多的细节,测试人员可以亲自验证测试用例,并确保团队确切知道如何确保测试顺利进行。
5个最佳突变测试工具
有一系列的工具可以帮助公司满足突变测试的要求。 正如软件测试应用程序通常的情况一样,价格和功能从一个平台到另一个平台都有所不同,因此,组织选择最适合其需求的平台至关重要。
其中一些程序可以提供免费的对应程序,或完全开放源代码;尽管为更大的便利性付费通常是必要的。
考虑到这一点,这里有五个最好的突变测试工具。
1.史赛克
史赛克专门研究JavaScript突变,大大精简了这一过程,以保证没有假阳性,并降低了测试人员在所有突变检查中需要应用的总体工作量。
史赛克平台智能地评估软件,并使用它收集的信息来计算出将从突变中受益的字符串或代码段。 这个应用程序带有一个明文报告器,可以输出变种人的摘要,包括史崔克是否能够杀死它。
2.PIT测试
由于PITest能够改变Java字节码并在每秒内进行数千次突变,因此在全世界范围内非常受欢迎。 这个应用程序使用测试用例覆盖率数据来即时了解哪些测试可以杀死一个突变体。
它只运行它知道的相关测试,限制了这个程序通常消耗的计算能力。 PITest也与大多数形式的Surefire单元测试插件兼容,但在有效管理测试顺序的依赖性方面会有困难。
3.保险++
Insure++有许多测试功能,包括突变分析,使平台能够发现程序中的模糊之处。 与传统的突变测试不同的是,Insure++放弃了生成有缺陷的突变体,而是创建与项目源代码相匹配的功能等效的突变体。
这是为了避免隐含的假设,这些假设可能无意中限制了测试过程,也可能不反映现实的测试环境。 顾名思义,该平台主要与C++程序兼容,每一个功能都是根据这种语言来校准的。
4.杂乱无章
这个应用程序专门针对JUnit JavaScript框架,有全面的可视化指标,显示代码对突变分析的反应。 Jumble是一个开源的平台,在Java应用程序的字节码中工作,以降低每个测试周期的时间。
专门使用程序源代码的类似应用程序,由于其重新编译过程,有时可能需要更长的时间来执行这些检查。
Jumble还利用启发式方法来进一步优化突变测试,使后续的测试运行更加简单。
5.MutPy
MutPy支持基于Python的应用程序的突变测试,提供对高阶突变的全面支持,以及全面的覆盖率分析。 这个程序的界面在输出阶段很容易使用,它清楚地告诉用户团队突变测试的每个基本细节。
MutPy为测试人员提供了许多定制的选择–使他们能够根据自己的要求专门校准这个软件。 该平台使用抽象语法树,提供了应用程序源代码的清晰结构,使测试人员对其突变更有信心。
结论
代码突变几乎适用于任何软件测试过程,为实施这种技术的公司提供了许多明显的好处–特别是在质量保证阶段的早期。
没有一种方法是没有挑战的;这意味着企业必须明智地考虑突变分析的优势,同时确保它符合他们通常的软件开发时间表。
这些突变让测试团队有机会检查他们自己的方法,并确定其在源代码中定位和纠正错误的有效性。 这种技术与自动化程序特别兼容,让公司验证他们信任的软件来处理他们的检查。
突变测试为质量保证团队提供了一种全面的方法,使其更好地了解自己的流程和软件,包括他们本来无法发现的问题。
因此,测试团队密切调查这种技术,评估它是否符合组织的需求–包括他们选择的突变工具是否与他们的编程语言完全兼容,这一点至关重要。 ZAPTEST自动化测试软件拥有许多功能,可以通过突变测试,确保团队对其能力有充分信心。
免费版和企业版都提供了一个高质量的测试过程,可以轻松地适应代码的突变。
常见问题和资源
1.关于突变测试的最佳课程
在线课程可以帮助第一次参加测试的人学习代码突变的基础知识,或者加强有经验的质量保证人员的原有技能。 一般的软件测试课程也可以为测试人员提供许多好处。 为突变测试人员提供的最佳在线课程包括:
– PluralSight的’Mutation Testing in Java with PITest’专门研究了如何改变Java代码以及这种方法对实际软件测试过程的好处。
– Udemy的’The Complete 2023 Software Testing Bootcamp’是一个特别最新的课程,说明了软件测试的每个关键组成部分,包括白盒测试。
– Alison的 “软件测试–条件覆盖和突变测试策略 “是免费的,仔细研究了如何明智地实施突变测试。
– PluralSight的 “单元测试基础 “探讨了单元测试的好处和特点,帮助确保学生了解编写强大的单元测试的确切过程。
– Udemy的 “单元测试简介 “是另一个免费课程,它对单元测试以及测试驱动开发策略的重要性进行了清晰的阐述。
2.关于突变测试的前5个面试问题是什么?
在面试中,公司可以向候选人提出一些问题,以验证他们的经验或对突变测试及其核心原则的理解。 这使公司能够确保他们雇用一个合格的测试人员,能够轻松地处理不同的突变相关情况。
确切的问题各不相同,但可能包括询问他们自己的意见或询问他们的代码变异技能的例子。
排名前五位的突变测试面试问题是:
– 你以前有哪些突变测试工具的经验,如果有的话? 这个软件的主要特点是什么?
– 在进行代码突变时,你将如何努力确保测试速度和深度之间的健康平衡?
– 在哪些情况下,突变分析是不可能的? 在这些情况下,你会如何检查测试程序?
– 如果一个价值突变设法在测试过程中幸存下来,你将采取什么行动来防止这种情况再次发生?
– 为了保证你的同事有他们需要的数据,你会在一个突变测试案例上包括哪些信息?
3.关于突变测试的最佳YouTube教程
YouTube上有免费的教程、网络研讨会和其他视频,可以帮助提高测试人员对突变测试的理解。 关于这个主题的一些最有用的视频和系列包括:
– 软件测试》的 “程序的突变测试”,提供了代码突变如何帮助程序的实际例子,以及如何编写彻底的测试案例。
– Devoxx的 “突变测试:我的测试破坏了我的代码吗?”,该文章探讨了突变分析如何改善各类软件项目的整体测试程序。
– NDC会议的 “杀死所有突变体!突变测试介绍”,研究测试套件如何能够从代码突变和它帮助创建的故障中受益。
– GOTO会议的 “Python中的突变测试”,专门研究了基于Python的应用程序如何应用突变分析来达到特定的测试目标。
– Diego Pacheco的《用PITest进行Java突变测试》,同样说明了JavaScript软件使用代码突变–重点是PITest突变程序。
4.如何维护突变测试?
将突变分析与回归测试和其他长期战略相结合,使公司即使在发布后也能确保强有力的质量保证标准。
随后的更新可能会导致代码的改变,需要进一步检查。 突变测试表明,自动化软件和测试人员在同一软件的不同版本中是一致的,重新认证了他们的特殊方法。
新的功能需要更新的测试用例,特别是当这些功能与先前存在的功能相互作用时。
除此之外,使用测试驱动开发允许团队成员对软件的寿命进行规划,并将测试兼容性作为其自身开发周期的一部分。