目标码覆盖率分析在PPC目标环境中应用.docVIP

目标码覆盖率分析在PPC目标环境中应用.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
目标码覆盖率分析在PPC目标环境中应用

目标码覆盖率分析在PPC目标环境中应用   【摘要】提出了一种对编译器产生的目标代码覆盖率的分析方法。传统的结构化语言的覆盖技术使用的是源代码级的,无法对编译器产生的代码进行验证,本文介绍了VerOCode软件在PPC目标环境中目标码覆盖率的分析验证。   【关键词】DO-178B;目标码覆盖;VerOCode   1.引言   目标码覆盖率分析技术是嵌入式软件系统质量保障的重要技术手段,目前在安全领域认可与使用的目标码验证要求来自于美国航空无线电技术委员会(RTCA)和欧洲民用航空设备组织(EUROCAE),为美国联邦航空管理局(FAA)以及欧洲航空管理部门的机载软件适航认证而制定的DO-178B/ED-12B标准。DO-178B/ED-12B标准将软件安全等级分为A-E级,在DO-178B 中要求:“覆盖率分析可以在源代码上开展,对于A级软件并且编译器产生的目标代码不能直接追踪到源代码的语句,那么需要对目标码进行额外的验证工作以确保产生的代码序列是正确的。”   这里提到的“基于目标码的额外验证工作”可以由目标码覆盖率分析来实现,即:编译器在编译过程中在目标码中添加了额外的代码,可以通过目标码覆盖率分析发现这部分代码,并且可以建立源代码与目标代码之间的关系。而源代码覆盖率方法由于进行了代码插装,测试的对象已经改变了,无法对编译器多添加的代码进行验证。在国外的适航认证经验中,目标码覆盖率分析已经得到广泛的使用,并且被适航认证局所认可。   2.目标码覆盖   2.1 目标码覆盖的出处   目标码覆盖的概念和要求在RTCA/DO-178B标准中明确提出,相关内容如下:结构覆盖分析的目的是确定在基于需求的测试过程中,哪些代码结构没有被执行。基于需求的测试用例可能没有完全执行所有的代码结构,因此需要进行结构覆盖分析,并要求进行覆盖分析验证。   结构化语言的覆盖分析可以在源代码级别进行。但是如果是DO-178B A级软件并且编译器产生的目标代码不能直接追踪到源代码中的语句,那么验证工作就需要采取额外地分析方法,即在目标代码的级别上验证编译器产生的代码序列的正确性。在目标代码中的数组边界检查就是编译成生成(compiler-generated)的不能直接追踪到源代码的目标代码的一个实例。   2.2 进行目标码验证的原因   (1)测试充分性要求   目标码的验证关心编译器产生的目标码的控制流结构有多少与源代码不一致。这些不一致产生的原因有许多,如:编译器的解释、优化等。然而,传统的结构化语言的覆盖率技术使用的是源码级的,尽管在处理器上执行的是目标码,二者之间控制流结构的不同在测试过程中会产生重大的差距。   MISRA C:2004认为C程序设计中存在的风险可能由5个方面造成:程序员的失误、程序员对语言的误解、程序员对编译器的误解、编译器的错误和运行时错误(runtime errors)。   (2)程序员对编程语言和编译器的误解   编译器的行为不符合程序员的想法。很多高级语言标准特别是工业级语言标准的定义并不精确。如果一个语言的某些特征是不完全定义的,或者说是歧义的,那么就可能出现程序员的意思与编译器的解释不一致的情况。所以对于不同的编译器,相同的源代码其行为可能不同;同一个编译器,其行为也可能因为上下文的不同而不同。例如C语言中的volatile的类型就是一个例子。   (3)编译器的错误   语言的编译器本身是一个软件工具,它编译代码并不总是正确的。例如可能在某些情况下它没有遵守语言标准,或者它本身就有错误。随着编译器验证技术的不断发展,越来越多的编译器问题被暴露出来。   针对嵌入式软件,由于运行资源有限,有时编译器产成的代码本身并没有问题,但仍然会导致系统失效。   3.关于编译器验证   对于高级语言程序,编译器经常会引入风险。对编译器进行验证是保证其正确产生目标码的最直接的方法。然而,目前对编译器的完全验证还存在非常困难的技术问题。编译器是一种特殊的系统软件,编译器的输入和输出都是应用软件或系统软件。由于编译器的这个特殊性和编译器本身结构的复杂性,使编译器的测试验证面临着巨大的挑战。目前,关于编译器的验证问题已经有广泛的研究,例如编译器使用的主要算术逻辑的验证、算术表达式的验证、编译器结构的验证等。但这些编译器的验证方法都比较复杂,实用性和灵活性也不强。此外,编译器验证软件的价格昂贵,编译器验证的效果难以估计,一般的软件开发单位也不会出资进行编译器验证。在不能完全信赖编译器的情况下,进行目标码验证是唯一的选择。   4.解决途径   目前,为了满足市场上不断涌现的目标码验证需求,有几个著名的外国厂商推出了相关的支持方案和工具,比如英国LDRA公司的Tbrun工具、美国I

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档