ISO26262如何保证软件安全测试完整性
为了评估验证的完整性并提供证据证明已有测试用例已充分实现相应测试目标,必须对测试完整性进行评估,这里就得提到结构覆盖率这个概念。
首先明确一点,这里的结构覆盖率不是指我们对百分之多少的测试用例或者需求进行了测试,这是属于基于需求的测试覆盖率,它和结构覆盖率有本质区别。
结构覆盖率用于度量我们设计的测试用例在多大程度上可以覆盖我们的代码,包括代码的语句,函数,分支等等。因此,结构覆盖率又可以进一步分为:
语句覆盖率: 用于统计每个代码语句被测试用例执行的比例
分支覆盖率: 用于统计每个判定分支(即If...else等)被测试用例执行的比例
函数覆盖率: 用于统计代码中所有函数被测试用例执行的比例
调用覆盖率: 用于统计每个函数调用端被测试用例执行的比例
MC/DC(修改条件/判定覆盖率): 这个比较复杂,我们单独来讲
其中,很多朋友搞不清函数覆盖率和调用覆盖率的区别,以及MC/DC意义,接下来我们结合实例重点来聊聊这两部分内容:
1) 函数覆盖率 vs. 调用覆盖率
例如,对于测试对象:
if A==1, then f1, f2, else if (0), then f3,else, then f4,end
其中,f1,f2,f4均被定义,f3定义不存在。
该情况下,由于elseif (0), 函数f3永远不会被执行,所以函数调用覆盖率为3/4=75%,但所有定义的函数均被执行,所以函数覆盖率为100%。
所以,函数覆盖率多用于检测未被调用的多余函数,而调用覆盖率用于检测死代码。
2) MC/DC(修改条件/判定覆盖率)
MC/DC是分支测试的进一步补充,适用于判定类代码覆盖检测,它要求较为复杂:
在一个程序中每一种所有可能的输入和输出至少出现一次。
每一个判定中的每一个条件必须能够独立影响判定输出,即在其他条件不变的前提下,仅改变条件中一个值,而使判定结果改变。
什么意思呢,我们来看个实例。例如,对于测试对象:
if A and (B or C), then⋯ else,⋯end
理论上,对于三个输入判定条件(A, B, C),一共存在8种测试Case,为实现MC/DC全覆盖,其实只需要以下4个测试用例,即Case1 - 4,就能使得A,B,C输入和判定输出结果true和false都出现一次,且只要A,B,C一个条件值发生改变,就会最终判定结果发生变化。

所以,MC/DC较复杂,但错误检出率高,适合那些大型的并且要求测试非常精确的软件测试。
为保证软件安全测试完整性,ISO 26262-6:2018还对软件单元,集成软件的测试覆盖率进行相应要求,具体包括:


可以看出,软件单元层面结构覆盖率多基于语句,分支等最基本的代码组成部分测试,而集成后的软件架构层级的结构覆盖率多基于函数,其层级更高。二者逐步递进,可以有效评估软件安全测试的完整性和充分性。
需要注意的是:
1、结构覆盖率不需要一味追求100%,高结构覆盖率并不完全说明代码已经进行高质量充分测试,它只说明哪些代码没有被测试用例有效执行。
2、结构覆盖率测试可以帮我们反推前期测试用例设计是否充分,是否存在盲点,哪些地方需要进行补充,增加测试完整性。
3、结构覆盖率测试并不能解决软件事先没有考虑到的情形及功能不足。
华菱咨询成立至今,我们的咨询师团队已经为5000多家企事业单位提供各项咨询及培训服务,并获得了客户及业界的一致好评,欢迎您选择、体验华菱咨询的优质服务。
经过20多年的发展与实践沉淀,华菱咨询将利用深厚的行业知识,帮助客户把握新机遇,评估和管理风险,以实现负责任的增长。华菱咨询高绩效的跨学科团队可帮助客户满足监管要求,确保客户及时了解信息并满足利益相关者的需求。华菱咨询将为客户提供全面的端到端的服务,利用技术的进步真正推动业务的发展。
版权声明:
1.本公众号所发布内容,凡未注明“原创”等字样的均来源于网络善意转载,版权归原作者所有!
2.除本平台独家和原创,其他内容非本平台立场,不构成投资建议。
3.如千辛万苦未找到原作者或原始出处,请理解并联系我们。
4.文中部分图片源于网络。
5.本公众号发布此文出于传播消息之目的,如有侵权,联系删除。
华菱咨询深圳官网:http://www.hlemc-sz.com/
华菱咨询苏州官网:http://www.hlemc.com/
若还有其他问题,可直接在平台私信联系我们,我们会第一时间与您取得联系,感谢支持。