0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

模型驱动测试如何生成基于代码的测试结果

星星科技指导员 来源:嵌入式计算设计 作者:Martin Bakal 2022-06-28 14:12 次阅读

模型驱动测试可以将需求与设计联系起来,帮助开发人员以一种通用语言生成结果,将设计过程中的每个人联系起来。这改善了工作流程并清楚地传达了设计。

在系统和软件测试社区中,生成基于代码的结果被认为是软件测试的黄金标准。但是,软件复杂性的增加和上市时间的缩短迫使许多组织重新考虑他们如何处理测试过程。随着基于模型的测试 (MBT) 的引入,开发人员获得了更快的自动化流程,可以帮助他们获得完整的模型和代码覆盖率。

即便如此,一些开发人员认为 MBT 未能达到预期,因为它没有提供基于代码的结果。然而,随着 MBT 技术的最新进展,这种看法不再准确。新的 MBT 工具使测试人员能够通过基于代码的结果实现性能分析、内存分析和代码覆盖。

模型驱动测试 (MDT) 流程通过让开发人员在实际应用程序上执行场景并执行这些测试来增强此工作流程。但关键问题是开发人员在运行这些基于场景的测试时需要基于代码的测试结果。

入门

MDT 方法可以帮助组织满足紧缩的上市时间窗口,因为它允许开发人员使用他们设计时使用的相同语言进行测试,即统一建模语言 (UML)。除了节省时间之外,MDT 还提供了另一个优势,它以场景为需求,使测试与客户的规范保持一致。

尽管 MDT 提供了许多好处,但批评者强调它有一个弱点:缺乏基于代码的测试结果,这对于调试故障、泄漏和性能差距至关重要。

在深入探讨有关基于代码的测试的问题之前,让我们解释一下 MDT 过程。基于 UML 的测试用例可以用许多不同的格式编写,包括 UML 序列图、流程图,甚至代码(使用断言样式语句)。简而言之,MDT 流程迫使开发人员以上述格式之一阅读他们的需求并基于它们设计场景。接下来,将模型构建到满足这些场景的可执行文件中。然后将原始场景转变为测试。最后,在软件经过 MDT 过程之后,这些相同的场景可以作为测试执行。

使用传统代码和流程图来捕获测试用例行为

可以使用代码或流程图或序列图来描述测试用例行为,提供比传统编码更高的生产力。使用代码描述测试用例与目前描述测试用例的过程基本相同,不同之处在于,如图1所示,测试用例需要关注刺激和预期结果。测试用例执行的上下文是从模型中自动生成的。

图 1:开发人员可以使用代码来描述测试用例的纯粹行为。

pYYBAGK6nMCAcjlDAAYLmgrQwQQ517.png

捕获代码中的测试用例行为并让它执行是利用 MDT 的最直接方法,而且风险最小且几乎没有学习曲线。这种方法的另一个优点是它允许轻松重用现有的基于代码的测试用例。但是由于测试用例行为的逻辑通常很重要,开发人员倾向于将测试用例描绘成非正式的流程图。由于将流程图映射到代码相对简单,MDT 环境允许开发人员将测试用例行为捕获为流程图,从该流程图生成测试代码,将其链接到测试架构,然后运行测试。

将测试用例描述为流程图,如图 2 所示,具有与编码相同的表达能力,但它更容易捕获并与项目的所有利益相关者进行沟通。

图 2:在流程图/活动图中比在代码中更容易捕获测试用例行为。

pYYBAGK6nMmAS9prAAgS_jQjHW4426.png

用序列图描述测试用例行为

序列图提供了在基于代码的测试环境中很少使用的设计的独特视图。这些图可以描述整个系统和与之交互的参与者之间的操作场景。在其他情况下,它们可能包括有关内部设计组件之间消息的排序和交换的详细信息

在系统级分析期间,设计人员确定了许多高级需求,并且大多数行为需求被描述为序列图。这构成了系统分析师创建基本要求的许多变体以及基本要求的“未雨绸缪”排列的过程的基础。此过程将作为序列图捕获的高级需求转换为具体的测试用例。

开发人员可以查看描述需求的序列图并将其作为测试用例以交互方式应用,将输入注入被测系统并检查输出以查看它们是否与序列图中定义的匹配。这些测试的来源包括记录应用程序的执行并手动编写它们。每个来源都有自己的好处。记录执行不测试需求,但有助于回归测试。手写序列在测试需求中很有用。无论如何创建测试,都需要基于代码的结果。

实现基于代码的结果

今天的开发人员可以通过多种方式获得基于代码的结果,所有这些都需要在某些工具中重写测试然后执行。完成后,团队将收到结果。

对某些人来说,这似乎是一种完全合乎逻辑的方法,但是在使用这种测试方法时会发现一些问题。首先,开发人员必须确定原始需求与软件可交付成果相匹配。要正确执行此操作,开发人员必须重写相同的基于场景的测试,否则代码结果可能无法映射到需求。开发人员需要能够编写符合其要求的测试并实现完整的基于场景和代码的结果。当前的测试工具使这成为可能,因为基于 MDT 的工具执行实际代码。

鉴于这些进步,为什么软件测试社区迟迟没有采用 MDT?这有几个原因,首先是早期基于模型的测试没有提供基于代码的测试结果。此外,许多开发人员需要代码覆盖率、内存分析和性能分析指标。当工具缺乏这些功能时,有些人会认为 MDT 是一种负担而不是解决方案,这是有道理的。

弥合这些差距是成功实施 MDT 的挑战。市场上有几种有效的基于代码的测试工具,重新创建此功能为开发人员喜欢的基于代码的结果样式提供了更少的选择。另一种选择是执行基于模型的测试并包含基于代码的结果。这是可能的,因为在运行基于模型的测试时,开发人员可以执行实际代码,而不是模拟。如果开发人员使用基于代码的测试工具来检测代码,则 MDT 可以运行,并且结果将在完成时出现。

分布式开发,更好的代码

寻找方法帮助分布式团队更好地协同工作,同时推动高质量的可交付成果是许多组织的首要任务。当开发过程采用 MDT 方法时,团队可以实现基于代码的测试结果。关键的支持技术是执行实际应用程序的 MDT 测试。这意味着使用可以直接提供测试结果的基于代码的测试工具运行 MDT 测试。基于代码的测试工具跟踪正在执行的应用程序,使其成为最佳方法。

MDT 在改进测试过程方面有着良好的记录,但它没有被广泛采用,因为它不会产生基于代码的测试结果。现在这是可能的,提供了两全其美的优势——在 MDT 流程中轻松创建和理解测试——以及开发人员可以使用的完整和彻底的测试结果。通过利用 MDT 方法的收益,开发人员也可以得到他们的蛋糕并吃掉它。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 测试
    +关注

    关注

    8

    文章

    4448

    浏览量

    125122
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66759
收藏 人收藏

    评论

    相关推荐

    电机驱动模块测试方法:测试设备、测试项目

    ATECLOUD测试系统实现电机驱动模块自动化测试需要两部分完成,软件和硬件。硬件主要是测试中用到的仪器设备;软件部分兼容了测试仪器指令,以
    的头像 发表于 04-26 14:14 61次阅读
    电机<b class='flag-5'>驱动</b>模块<b class='flag-5'>测试</b>方法:<b class='flag-5'>测试</b>设备、<b class='flag-5'>测试</b>项目

    探针测试台工作原理 探针测试台为嘛测试会偏大?

    探针测试台是一种用于测试集成电路(IC)的设备,工作原理是将待测试的IC芯片安装在测试座上,然后通过探针接触到芯片的引脚,以测试芯片的功能和
    的头像 发表于 02-04 15:14 544次阅读

    Meta推出最新版AI代码生成模型Code Llama70B

    Meta近日宣布了其最新版本的AI代码生成模型Code Llama70B,并称其为“目前最大、最优秀的模型”。这一更新标志着Meta在AI代码
    的头像 发表于 01-30 18:21 859次阅读

    Tessy—嵌入式软件单元测试/集成测试工具

    搭建测试环境、执行测试、评估测试结果生成测试报告。目前Tessy被广泛应用在汽车电子客户中,在
    的头像 发表于 01-15 14:39 269次阅读
    Tessy—嵌入式软件单元<b class='flag-5'>测试</b>/集成<b class='flag-5'>测试</b>工具

    代码生成:基于 AI 大模型的挑战与前景

    使用AI通用模型来完成代码生成这类非常具体的任务可能会带来问题。人工智能生成代码就像是陌生人的代码
    的头像 发表于 11-26 08:05 489次阅读
    <b class='flag-5'>代码</b><b class='flag-5'>生成</b>:基于 AI 大<b class='flag-5'>模型</b>的挑战与前景

    从HumanEval到CoderEval: 你的代码生成模型真的work吗?

    项目中的选取了代码生成任务来构建CoderEval,并根据对外部依赖的程度为标准将这些任务分为6个等级、根据生成的目标分为3类生成任务,以更多维地评估不同大
    的头像 发表于 11-25 15:55 754次阅读
    从HumanEval到CoderEval: 你的<b class='flag-5'>代码</b><b class='flag-5'>生成</b><b class='flag-5'>模型</b>真的work吗?

    TPT自动生成测试用例

    测试数据中分离激励是完全自动化测试数据生成的推动者。通过对期望的全面描述,您可以创建任何场景(通过测试数据)并及时检测问题。 TPT插件TASMO是迄今为止最受TPT用户喜爱的
    的头像 发表于 11-06 17:30 533次阅读
    TPT自动<b class='flag-5'>生成</b><b class='flag-5'>测试</b>用例

    最新MLPerf v3.1测试结果认证,Gaudi2在GPT-J模型上推理性能惊人

    英特尔产品在全新MLCommons AI推理性能测试中尽显优势 今日,MLCommons公布针对 60 亿参数大语言模型及计算机视觉与自然语言处理模型GPT-J的 MLPerf推理v3.1 性能基准
    的头像 发表于 09-12 17:54 233次阅读
    最新MLPerf v3.1<b class='flag-5'>测试</b><b class='flag-5'>结果</b>认证,Gaudi2在GPT-J<b class='flag-5'>模型</b>上推理性能惊人

    什么是可测试性设计 可测试性评估详解

    可测性设计(DFT)之可测试性评估详解 可测试性设计的定性标准: 测试费用: 一测试生成时间 -
    发表于 09-01 11:19 524次阅读
    什么是可<b class='flag-5'>测试</b>性设计 可<b class='flag-5'>测试</b>性评估详解

    C++生成Dll与回调函数测试

    描述了VS环境下,通过C++生成dll的方法,测试回调函数
    的头像 发表于 08-29 16:05 638次阅读
    C++<b class='flag-5'>生成</b>Dll与回调函数<b class='flag-5'>测试</b>

    软件代码结构化覆盖测试-语句覆盖

    本篇将深入到代码层面,讲解单元测试中的一项重要工作-软件代码测试
    的头像 发表于 08-25 11:50 385次阅读
    软件<b class='flag-5'>代码</b>结构化覆盖<b class='flag-5'>测试</b>-语句覆盖

    如何利用Simulink Test工具箱对模型进行单元测试

    创建完模型后,我们需要验证模型的行为,即仿真结果,是否跟我们预期的一致,这样才能保证由模型生成代码
    的头像 发表于 07-22 10:25 2630次阅读
    如何利用Simulink Test工具箱对<b class='flag-5'>模型</b>进行单元<b class='flag-5'>测试</b>?

    MBD的Simulink使用技巧:详解代码生成中的模型代码(2)

    上一篇文章中提到,生成嵌入式代码,必须选择定步长求解器。实际中,生成嵌入式代码几乎不会使用Simulink模型库中的连续
    的头像 发表于 07-13 15:13 2966次阅读
    MBD的Simulink使用技巧:详解<b class='flag-5'>代码</b><b class='flag-5'>生成</b>中的<b class='flag-5'>模型</b>与<b class='flag-5'>代码</b>(2)

    基于NI 数据采集器的QT C++应用程序开发测试输出模拟电压信号

    NI采集卡的C++驱动方式配置过程,代码编写,测试结果
    的头像 发表于 06-26 17:19 1960次阅读
    基于NI 数据采集器的QT C++应用程序开发<b class='flag-5'>测试</b>输出模拟电压信号

    嵌入式代码单元测试如何完成?

    软件开发中,每次需求的变更基本都需要改写代码,而代码变更后就需要进行功能测试,当然在功能测试之前需要代码的单元
    发表于 06-05 12:28 585次阅读