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

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

3天内不再提示

在基于模型的自动代码生成器中建立信任

星星科技指导员 来源:嵌入式计算设计 作者:S. Tucker Taft 2022-06-29 10:31 次阅读

您如何建立对用于安全关键系统的自动代码生成器的信任?例如,给定一个代码生成器,它采用 Simulink 和 Stateflow 中表示的飞行控制系统的实时模型并将其转换为 MISRA C 或 Ada 的 SPARK 子集,什么过程可以确保生成的代码是真实的表示原来的实时模型?美国联邦航空管理局 (FAA) 有一个定义明确的过程来创建合格的代码生成器,这意味着代码生成器的输出可以被信任以与输入模型的语义完全匹配,没有遗漏,也没有添加任何内容。此过程在 DO-178C(机载系统中的软件考虑)中定义,

对于像代码生成器这样的工具,它可能会在机载系统中插入错误,如果该工具要用于其故障可能发生的子系统,则需要最高级别的工具认证(工具认证级别 1 (TQL-1))是灾难性的(A 级子系统)。

毫不奇怪,这种级别的工具鉴定可能涉及大量的时间和精力,通常估计为工具的每 1,000 个源代码行 (KSLOC) 需要数百小时。这类似于验证 A 级安全关键嵌入式软件组件所需的每条线路的工作量。但是工具可以是更多的代码行。例如,如果该工具是 100 KSLOC,则在 A 级进行验证的传统方法可能花费大约 500 万美元。因此,有强烈的动机去研究测试这种工具的替代方法,同时仍然实现 TQL-1 目标。

传统的测试方法

验证高完整性应用程序的传统方法要求测试人员:

仔细定义和验证应用程序的一组高级需求

从高级需求中导出模块级需求,这些需求足够具体以确定适当的实现

使用单元测试检查实现的每个模块是否符合其低级需求

对所有高级需求执行集成级测试

然后执行覆盖率分析以确保所有代码都被这些测试覆盖,并确保应用程序中没有剩余的代码可能会提供额外的、不需要的功能。

对于嵌入式软件组件,每个模块的单元级测试和整个组件的集成级测试的组合可以很好地工作。特别是嵌入式软件模块的单元测试是实用的,因为在许多情况下,每个模块的输入的数量和复杂性是可控的,并且输出相对容易识别和检查。然而,对于像自动代码生成器这样的工具,它通常涉及多个阶段,涉及将输入模型逐步转换为生成的代码,单元测试可能是一个真正的挑战。另一方面,对于这样的工具,集成测试并不难,因为中间阶段的数量不会影响工具的整体输入和输出。

图 1 说明了单元测试的复杂性和代码生成器等多阶段工具的集成测试相对容易性之间的这种二分法。

pYYBAGK7vReAX8zUAACpGeORK-M492.png

【图1 | 由于易于使用,集成测试优于单元测试。]

在图 1 中,我们展示了优化自动代码生成器的整体数据流,其中输入模型称为“用户语言”,输出称为“源代码”。多个阶段流水线化,第一阶段读取以用户语言 (M 0 ) 表示的原始模型,并以某种内部数据结构 (M 1 ) 表示模型。然后将其转换为模型的较低级别表示(M 2 , M 3等),直到最后阶段以所需的编程语言生成实际的源代码。要执行集成测试,只需使用普通模型创建工具准备一个以用户语言表示的模型,将其输入代码生成器,然后检查生成的源代码,以确定它是否满足高级需求。形式和功能,使用该编程语言的普通编译器、静态分析和测试工具。

相比之下,对多阶段代码生成器的每个阶段执行单元测试要复杂得多。必须为给定阶段的每个测试构造一个内部数据结构,该结构符合用于该阶段输入的表示,然后需要在该输入上调用该阶段,然后必须检查输出表示以查看它是否具有预期的形式和内容。准备此类输入并检查此类输出需要费力的手动过程或创建特殊工具,这些工具本身可能需要资格认证。

集成单元测试

考虑到单元测试的复杂性,已经开发了一种替代方法,称为集成单元测试。图 2 说明了这种方法:

poYBAGK7vRyAclQwAAFlCXvSF3I670.png

【图2 | 集成单元测试方法是单元测试的一种更简单的替代方法]

在图 2 中,我们展示了一个将单元测试需求监视器和单元测试预言(一个“知道”所需输出的检查器)直接嵌入到工具结构中的过程。将这些监视器和检查器嵌入工具中,然后我们按照用于正常集成测试的步骤,准备代表性模型(测试0到测试4) 并通过代码生成器提供给它们。但是现在,不仅仅是等待工具生成最终输出,每个嵌入式单元测试需求监视器都会跟踪其相关阶段的输入是否与其关联的单元测试匹配,如果匹配,它会记录该事实,然后触发相应的基于 oracle 的单元测试检查器,该检查器验证阶段的输出是否对应于特定测试模式的输入的预期转换。

例如,假设我们已经定义了将模型级别的增益模块特定转换为代码级别的表达式,该表达式将信号变量的值乘以常数。每次增益块出现在其模型级输入表示中时,我们都会有一个单元测试需求监视器记录,当它出现时,触发基于 oracle 的检查器查看代码级输出表示以确保它涉及适当的信号变量乘以适当的常数。这是一个非常简单的检查,只要有足够多的模型作为一个整体通过工具,就可以预期覆盖这个特定的单元测试模式。

通过该工具运行多个模型后,我们可以得到一个类似于图 2 的表格。在左侧,我们有模型,从 Test 0到 Test 4。在顶部,我们有工具每个不同阶段的测试需求和测试预言对。例如,tr 0,2表示阶段 0 的测试要求 2,而2,1表示阶段 2 的测试预言 1。每当一个阶段的特定输入满足与某个测试需求关联的测试模式时,我们将在输入模型行的需求列中看到一个 SAT。每次调用测试 oracle 时,我们都会在输入模型行的 oracle 列中看到 PASS 或 FAIL。如果我们最终得到一个空列,则永远不会遇到测试模式(未涵盖相应的低级需求)。如果我们最终在 test-oracle 列中出现 FAIL,这意味着我们有一个测试失败(相应的低级需求没有正确实现)。在图 2 所示的表格中,我们看到 tr 0,1和 tr 2,0没有被覆盖,而 to 0,2和 to 2,1有失败。这样的表格记录了完整的单元测试过程,同时避免了为每个测试模式准备特殊输入的费用。

受信任的代码生成器

如果我们要越来越依赖此类工具来帮助从更高级别的模型自动生成安全关键软件,那么建立对代码生成器的信任至关重要。但是,需要创新方法来管理以最高信任级别 TQL-1 实现现代优化代码生成器的工具认证的潜在高昂费用。集成单元测试就是这样一种方法。当与其他正式指定需求的系统方法相结合,并根据这些需求生成需求监控器和预言机等组件时,就有可能以一种不仅更具成本效益,而且支持增量认证的方式实现 TQL-1。工具进化。AdaCore 正在使用这些方法验证其 QGen 代码生成器。

审核编辑:郭婷

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

    关注

    5103

    文章

    19268

    浏览量

    310011
  • 源代码
    +关注

    关注

    96

    文章

    2948

    浏览量

    67194
  • 编译器
    +关注

    关注

    1

    文章

    1645

    浏览量

    49461
收藏 人收藏

    评论

    相关推荐

    Python的迭代器与生成器

    ) if y 2: for y in range(1, 4): if y     生成器 如果要创建一个100万个元素的列表,你使用上面的方式无疑非常占用内存,这时候就用到了生成器,它其实是保存一个你定义的规则,需要用到元素的
    的头像 发表于 02-20 10:43 105次阅读

    开源随机数生成器库OpenRNG助力实现移植到Arm平台时的最佳性能

    OpenRNG 实现了多种生成器和分布方式。生成器算法可生成“看似随机”并具有某些统计特性的序列,我们将在下文进行讨论。分布方式会将序列映射到常见的概率分布概念,如高斯分布或二项分布
    的头像 发表于 02-08 09:24 817次阅读
    开源随机数<b class='flag-5'>生成器</b>库OpenRNG助力实现移植到Arm平台时的最佳性能

    超详细!FMU生成器用户手册来啦~

    FMU生成器是TSMaster中用于将模型打包生成FMU文件的一个工具,目前支持FMI3.0和FMI2.0版本,FMU类型仅支持Co-Simulation(CS),即联合仿真FMU。本文将介绍FMU
    的头像 发表于 01-17 20:02 409次阅读
    超详细!FMU<b class='flag-5'>生成器</b>用户手册来啦~

    EE-322:面向SHARC处理器的专家代码生成器

    电子发烧友网站提供《EE-322:面向SHARC处理器的专家代码生成器.pdf》资料免费下载
    发表于 01-07 14:04 0次下载
    EE-322:面向SHARC处理器的专家<b class='flag-5'>代码</b><b class='flag-5'>生成器</b>

    探索设计稿自动生成Flutter代码的技术方案

    的工具和方法,最后尝试大模型生成flutter代码项目中的实践。 一、美团的探索 美团2021年3月25日发表了一篇关于设计稿
    的头像 发表于 11-08 10:09 1202次阅读
    探索设计稿<b class='flag-5'>自动</b><b class='flag-5'>生成</b>Flutter<b class='flag-5'>代码</b>的技术方案

    如何自动生成verilog代码

    介绍几种自动生成verilog代码的方法。
    的头像 发表于 11-05 11:45 606次阅读
    如何<b class='flag-5'>自动</b><b class='flag-5'>生成</b>verilog<b class='flag-5'>代码</b>

    使用C2000™嵌入式模式生成器(EPG)进行设计

    电子发烧友网站提供《使用C2000™嵌入式模式生成器(EPG)进行设计.pdf》资料免费下载
    发表于 09-14 10:13 1次下载
    使用C2000™嵌入式模式<b class='flag-5'>生成器</b>(EPG)进行设计

    Freepik携手Magnific AI推出AI图像生成器

    近日,设计资源巨头Freepik携手Magnific AI,共同推出了革命性的AI图像生成器——Freepik Mystic,这一里程碑式的发布标志着AI图像创作领域迈入了一个全新的高度
    的头像 发表于 08-30 16:23 1282次阅读

    CDCM6208V1F具有小数分频器的2:8时钟生成器/抖动消除器数据表

    电子发烧友网站提供《CDCM6208V1F具有小数分频器的2:8时钟生成器/抖动消除器数据表.pdf》资料免费下载
    发表于 08-20 09:13 0次下载
    CDCM6208V1F具有小数分频器的2:8时钟<b class='flag-5'>生成器</b>/抖动消除器数据表

    具有小数分频器的CDCM6208 2:8时钟生成器/抖动消除器数据表

    电子发烧友网站提供《具有小数分频器的CDCM6208 2:8时钟生成器/抖动消除器数据表.pdf》资料免费下载
    发表于 08-20 09:07 0次下载
    具有小数分频器的CDCM6208 2:8时钟<b class='flag-5'>生成器</b>/抖动消除器数据表

    TSMaster 测试报告生成器操作指南

    用户基于TSMaster软件开发测试用例时,或需要使用TSMaster生成HTML报告时,需要使用TSMaster测试报告生成器。1Test_Report说明Test_Report是目前
    的头像 发表于 08-03 08:21 678次阅读
    TSMaster 测试报告<b class='flag-5'>生成器</b>操作指南

    ISEDA首发!大语言模型生成代码到底好不好使

    模型席卷一切、赋能百业的浪潮里,“码农”也没能独善其身。各种代码自动生成的大模型,似乎描绘了
    发表于 05-16 13:41 428次阅读
    ISEDA首发!大语言<b class='flag-5'>模型</b><b class='flag-5'>生成</b>的<b class='flag-5'>代码</b>到底好不好使

    微软Edge浏览器将引入AI主题生成器,为用户提供独特的主页设计

    根据微软的365产品规划,他们计划在Edge浏览器添加人工智能主题生成器。这项创新功能允许用户通过文字描述来创建个性化主题,人工智能系统将生成一系列预览图片,并将其作为浏览器主题。
    的头像 发表于 05-13 15:16 849次阅读

    飞凌嵌入式ElfBoard ELF 1板卡-在线二维码生成器

    在线二维码生成器允许用户将文本、网址、图片或其他数据转换为二维码形式。二维码是一种特殊类型的条形码,它可以通过扫描来快速识别和读取信息。在线二维码生成器使用特定的算法将这些信息编码成二维码,用户可以
    发表于 04-24 17:00

    Minitab 交互式表格生成器

    生成器
    MinitabUG
    发布于 :2024年04月03日 15:58:54