基于模型的测试教程
应用程序测试对于任何应用程序来说都是一项关键活动。在过去十年中,已经开发出各种应用程序测试方法,以确保我们提供满足所有客户需求的高质量应用程序。
基于模型的测试 (MBT) 是测试自动化领域中的一个热门话题,它涉及从被测应用程序的模型中创建测试用例。
现在已经可以使用各种基于模型的测试方法。我们将向您展示两种使用遗传算法的基于模型的测试方法。使用遗传算法进行基于模型的测试是一个热门话题,并且有几篇论文和对现有技术的比较。
什么是基于模型的测试,它是如何工作的?
基于模型的测试是一种软件测试方法,其中将被测产品的运行时行为与模型预测进行比较。模型是对系统行为的表示。输入序列、动作、条件、输出以及从输入到输出的数据流都可以用来定义行为。它应该易于理解和重用;共享必须提供被测系统的详细描述。
有各种可用的模型来描述系统行为的各个方面。
以下是模型的一些示例:
数据流
控制流
依赖图
决策表
状态转换机
基于模型的测试解释了系统如何响应活动(由模型确定)。提供动作并观察系统是否按预期响应。
这是一种验证系统的简单形式化方法。此测试可用于硬件和软件。
基本的 MBT 流程包括五个关键步骤:
建模
测试计划
测试设计
测试生成
测试执行
建模
建模是描述系统需求的过程。测试生成器将基于此描述。
模型中还必须包含被测系统的预期输出。设计模型和测试模型在此阶段非常重要。
选择模型时应考虑一些关键标准:在大多数情况下,模型被转换为状态转换系统或有限状态机系统。有限状态机系统是系统潜在配置的表示。
搜索系统中的可执行路径以查找测试用例。将使用合理的执行路径来生成测试用例。如果模型是确定性的,或者可以转换为确定性模型,则可以使用此方法。
测试计划
测试计划包括定义测试选择标准和指标。这提供了对测试用例规范的形式化制定,以及指导可行测试套件的映射等。
测试设计
测试设计是指使用前面的测试选择标准对测试用例进行形式化。
测试生成
这需要创建尽可能多的测试。
离线
搜索算法
测试格式是预先确定的。
在线
行走或寻光算法
在执行上一步并收到输出值后,确定下一步。
算法必须快速。
测试执行
运行测试并查找当前输出和预期输出之间的差异。
进化算法
进化算法中使用的所有概念都是选择、繁殖和变异。
我们将在本文中介绍三种不同的进化算法:
遗传算法
进化规划
进化策略
基于遗传信息的算法 (GA)
遗传算法属于进化计算,而进化计算属于人工智能。
遗传算法基于达尔文的进化论。也可以说,通过遗传算法解决的问题的答案已经进化了。
我们在遗传算法中使用来自自然选择的四个关键概念:基因、染色体(个体)、种群和自然选择。
自然选择包括以下步骤:
将选择种群中最适合的个体。
个体将拥有继承其父母特征的后代。
后代将包含在下一代中。
更适合的父母的后代将胜过他们的父母,并且有更高的生存机会。
这是一个迭代过程,将产生最适合的个体的一代。
描述遗传算法最简单的方法是想象我们有一个要解决的问题,并且我们可以检查该问题的解决方案集合。我们将不得不使用进化论和自然选择来找到该问题的最佳答案。
遗传算法中使用以下术语:
**初始种群:**问题从当前问题的潜在解决方案(个体)集合开始。种群由一定数量的个体组成。每个人都是我们试图解决的问题的潜在解决方案。一组参数构成一个个体(变量)。这些特性被称为基因。基因连接成一个字符串形成染色体(解决方案/个体)。二进制值(1 和 0 的字符串)通常用于对染色体中的基因进行编码。
**适应度函数:**确定个体与其他个体竞争的能力。基于适应度函数,我们将为每个个体(染色体/解决方案)计算适应度分数。适应度分数决定了个体被选中进行繁殖的可能性。
**选择:**将选择最适合的个体,并将它们的基因传递给下一代。它是如何工作的?根据它们的适应度分数,算法将选择两对个体(父母)。将选择具有高适应度水平的个体进行繁殖。有很多选择算法。
**交叉(重组):**这是遗传算法最重要的阶段。交叉有多种形式。通常,从要交配的每对父母的基因中随机选择一个交叉点,以产生新的后代并将它们插入种群。因此,这两个父母将有两个孩子。
**变异:**这是一种遗传算子,以较低的随机频率应用于产生的一部分新的后代。这意味着位字符串中的位数经常被交换。
**终止:**如果种群没有产生与前一代明显不同的后代,则算法将终止。现在我们可以说遗传算法已经为我们的问题生成了一组解决方案。
基于模型的测试和遗传算法
了解如何将遗传算法应用于基于模型的测试是本文最重要的部分。让我们来看一下遗传算法在基于模型的测试中的两种用途。
我们现在正在使用遗传算法中的所有术语,并演示它们如何在 GA 的各种基于模型的测试应用程序中使用。
使用 GA 从 UML 状态图模型生成测试数据基于模型的测试可以从被测应用程序的 UML(统一建模语言)模型表示中生成测试用例和可执行测试脚本。使用统一建模语言 (UML) 状态图,可以使用遗传算法生成测试数据。
使用 UML 状态图时,请记住以下术语:
状态图(状态图)用于表示任何复杂特征或描述完整系统、子系统甚至系统内单个项目的动态行为。
在编码之前,基于模型的测试用于从 UML 状态图中提取测试用例。因此,我们可以为任何程序规范创建测试套件。规范通常以 UML 图或形式语言规范的形式出现。
触发器类似于事件,它启动从一种状态到另一种状态的转换。
保护条件是一个布尔条件,在转换发生之前必须满足该条件。
转换发生时发生的动作(活动)被称为影响。
如前所述,为了使用遗传算法,我们必须首先建立初始人群(染色体)。这个初始种群将是我们挑战的解决方案集合。
基于模型的测试挑战 −
在任何公司部署MBT显然需要大量的资金和工作。
学习曲线会更长,模型也更难理解。
基于模型的测试的优势 −
MBT具有以下优点 −
简单的测试用例/套件维护
节省成本,提高测试覆盖率
可以在n台计算机上执行各种测试
早期缺陷识别
缺陷数量增加(此条可能与上下文不符,建议修改为更正面的说法,例如:更有效的缺陷发现)
节省时间
提高测试人员的工作满意度
结论
在测试过程中,测试人员无论如何都会创建心智模型。这些心智模型可以转换成纸质模型。这有助于提高测试人员的可读性和可重用性。
基于模型的测试是一种相对较新的软件测试方法。下图描述了软件测试的演变过程 −