使用代码覆盖率提高嵌入式软件的可靠性.docVIP

使用代码覆盖率提高嵌入式软件的可靠性.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文档。上传文档
查看更多
利用代码覆盖率提高嵌入式软件的可靠性简介 代码覆盖率是衡量软件测试完成情况的指标,通常基于测试过程中已检查的程序源代码比例 计算得出。代码覆盖率可以有效避免包含未测试代码的程序被发布。 代码覆盖率能不能提高软件的可靠性?答案是肯定的,代码的覆盖率分析是保证软件质量最简 便易行的方法。 代码覆盖率等级 代码覆盖率可以通过多种方法测量。最常用的是测量以下一个或多个指标:语句覆盖率,分支 覆盖率,修订的条件/判定覆盖率(MC/DC。以下章节中将逐一详解这些代码覆盖率。 语句覆盖率 语句覆盖率用来度量被测代码中的可执行语句是否被执行到,它并不考虑循环或者条件语句, 只针对语句度量可执行代码。应当特别注意的是:“语句”并不等同于代码行。 一般情况下,对于C,C++,Java或Ada,分号代表语句结束。在某些情况下,一条语句会跨越多行代码。语句覆盖率可以有效度量可执行代码是否被执行,但同时也有一定的局限性。 语句覆盖率的局限 考虑如下图1的代码段: int* p = NULL; if (condition p = variable; *p = 123; 图 1 –语句覆盖局限代码示例 ? 2010 - All rights reserved - Vector Software 如果“condition”为true,那么就有可能达到100%的语句覆盖,然而这个测试用例忽略了另 一种情况:如果“condition”为假,程序将引用空指针,因此,虽然语句覆盖率是一个很好 的度量指标,它仍旧是入门级的代码覆盖率。理想情况下,即使“condition”为false,测试 用例也应当被计算。 分支覆盖率 分支覆盖率用来度量程序中所有的判定和分支以及相应的输出是否都被测试执行到,例如“if”语句必须将“true”和“false”都考虑到以覆盖所有的输出。如果只有一个路径被执行,那么覆盖率将被标记为部分执行。 和语句覆盖率类似,分支覆盖浪费也有一些需要注意的细节,尤其在针对“惰性求值”的编 程语言时,惰性求值是将代码的求值操作延迟到需要结果值时再进行的一项技术。 分支覆盖率的局限 典型的情况是当有复杂的布尔表达式的“惰性求值”出现时,如下图2的代码片段: int* p = NULL; if (condition1 (condition2 || function1(*p statement1; else 图 2 –分支覆盖率局限代码示例 考虑“condition1”为假的情况,惰性求值将不会度量“condition2”或,此种情况同样会导致代码“if (condition1 (condition2 || function1(*p”的分支覆盖率计算错误。 继续考虑“condition1”和“condition2”都为真的情况。惰性求值将再次导致“function1(*p”不会被度量,也同样会导致代码“if (condition1 (condition2 || function1(*p”的分支覆盖率计算错误。在此种情况下,有可能出现分支覆盖率为100%但软件中仍有潜在缺陷的情况。 ? 2010 - All rights reserved - Vector Software Page 2 修订条件/判定覆盖率(MC/DC MC/DC 是一种特殊的分支覆盖率,它不但会使用分支覆盖率报告复杂条件下的true 和false 输出, 同时也会报告复杂条件下的全部分支条件输出。 MC/DC 最初由波音公司创建,用于航空软件中DO-178B 的A 级认证。通过对所有的子条件输出分 支的独立证明,有效解决了惰性求值带来的问题。 继续讨论代码示例2,我们需要在“condition2”和“function1(*p”固定的条件下验证“condition1”的“true ”和“false ”判定分支,之后继续固定“condition1”和“function1(*p”验证“condition2”的判定分支。 同样的,让我们在固定“condition1”和“condition2”的条件下讨论 “function1(*p”。在其他 分支条件固定的情况下验证某个分支条件的“true ”和“false ”值称作“MC/DC 对”。MC/DC 对 一般使用MC/DC 真值表描述。表1就是一个MC/DC 真值表示例。 Row *1 Ca T Cb T Cc T Rslt T Pa 5 Pb Pc *2 3 T T T F F T T T 6 7 4 4 4 7 T F F F F T F F 3 2 3 Actual Expression is: ( condition1 ( condition2 || function1 ( *p Condition a (Ca is: c

文档评论(0)

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

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

1亿VIP精品文档

相关文档