我是靠谱客的博主 天真奇迹,最近开发中收集的这篇文章主要介绍功能安全理论 | 软件组件 与 软件单元,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

组件(Compoent)在26262-1 3.21 P13中的定义是(在逻辑上或技术上可分离的非系统级元素,其中包含多个硬件或者软件单元non-system level element that is logically or technically separable and is comprised of more than one hardware part or more software units).而软件单元的定义在26262-1 P33 3.159 中则是(atomic level software component of the software architecture that can be subjected to stand-alone testing可以进行独立测试的软件架构中的不可细分组件),从定义的角度来看软件单元是本身也是组件,只是在本身定义的层次上不可细分。所谓不可细分,从C语言函数的角度来理解的话,可以分为两种情况,一是这个函数本身只有指令不包含任何的函数调用,二是这个函数本身既包含了函数调用也包含了指令但是它们不是单纯的顺序执行关系。也就是说这个函数所调用的函数包含有返回值,而这个函数会利用所调函数的返回值来执行运算。使函数之间彼此影响。具体可见如下例子:

void Module_A (void)

{

sint16  return_s16value;

return_s16value = Module_A_SubFunc1();

if(return_s16value > 1) 

    {

            Module_A_SubFunc2();

     }

else

     {

            Module_A_SubFunc3();

      }

}

在上面这个函数中子函数Module_A_SubFunc1()的返回值决定了后面两个函数的执行顺序,此时从void Module_A (void)的角度来看,它是不可细分的软件单元(因为子函数之间互相影响,导致执行顺序不唯一)。如果Module_A的结构如下:

void Module_A (void)

{

  Module_A_SubFunc1();

  Module_A_SubFunc2();

  Module_A_SubFunc3();

}

在上面的结构中子函数之间执行顺序是唯一的,而且Module_A这个函数中只有函数不涉及指令,它只是逻辑上的一个函数组,所以此时它是可以进行细分的,此时的Module_A可以被认为是组件。

   结合上面的定义,我们再来看一下26262-6部分提出的V型设计架构,在V型的左边设计阶段依次是需求-架构-单元实现,从设计的角度来看软件是down to unit即细化到单元。所以,结合上面的定义,在进行单元设计的时候,需要根据需求进行优化,除了保证最底层的软件单元(仅包含指令的函数)满足圈复杂度等度量指标(一般是小于10或者15)的要求外,更上层的调用函数也需要满足这样的要求,不然后续的单元测试会存在很大的困扰。当然,这些要求主要是针对手工编码而言的,在MBD设计中一般在代码生成阶段会有相应的优化。

  清楚了上面的定义,可以帮助我们在单元测试阶段更好的设计测试用例。此处需要提醒大家的是,我们在安排单元测试的时候(参考功能安全理论 | 黑盒 与 白盒)尤其是打高级桩进行测试的时候,用例的分类与优化方法选择十分重要,笔者推荐分类树方法,它可以帮助我们设计更加高效,更低冗余度的用例。编者后续可以给大家进行分享。

最后

以上就是天真奇迹为你收集整理的功能安全理论 | 软件组件 与 软件单元的全部内容,希望文章能够帮你解决功能安全理论 | 软件组件 与 软件单元所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部