提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|行业资讯|编辑:李显亮|2021-04-19 14:01:35.497|阅读 194 次
概述:许多软件开发和验证工程师并不真正理解为什么获得结构覆盖很重要。许多人这样做只是因为这是他们行业的功能标准所要求的,而不是认真对待。让我们来看看什么是结构性覆盖,以及它为什么重要的更多原因。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
许多软件开发和验证工程师并不真正理解为什么获得结构覆盖很重要。许多人这样做只是因为这是他们行业的功能标准所要求的,而不是认真对待。
像ADAS这样的安全关键系统可以在没有司机的情况下运送乘客,使自动驾驶仪能够让人们在我们的天空中飞行,并通过医疗设备让病人活着。人们的生活依赖于这些系统。获得结构代码覆盖率至关重要。让我们来看看什么是结构性覆盖,以及它为什么重要的更多原因。
简而言之,结构覆盖是为了确定系统是否经过充分测试而执行和记录的代码的标识。安全关键系统覆盖的彻底性取决于安全完整性等级(SIL)、汽车工业中的ASIL和航空电子设备中常用的开发保证等级(DAL)。
在嵌入式系统中,这些通常被分解到代码语句、分支、修改的条件决定,你还可以钻研到更细的粒度,比如对象代码或汇编语言。
你可能会听到或读到其他类型的覆盖指标,比如函数、调用、循环、条件、跳转、决策等。但对于嵌入式安全关键型系统来说,你目前需要了解的是语句、分支、MC/DC和对象代码。
目前有一种趋势是采用多条件覆盖(MCC),它比MC/DC更彻底。MCC要求的测试用例数量要多得多-2,达到条件数的幂。其计算公式为 2C
语句覆盖是最简单的工作,代表了程序中的每一行代码。然而,代码语句可以有不同程度的复杂性。例如,分支语句表示代码中的if then else条件。case或switch等语句被解释为分支。不过,如果你要获得分支的覆盖率,这意味着必须覆盖真和假决策路径的执行。
在关注更高的安全水平时,可能需要修改后的条件决定覆盖范围(MC/DC)。分支的复杂程度会越来越高,在一个决策中存在多个条件,而且每个条件都必须独立测试。
语句覆盖是最简单的工作,代表了程序中的每一行代码。然而,代码语句可以有不同程度的复杂性。例如,分支语句表示代码中的if then else条件。case或switch等语句被解释为分支。不过,如果你要获得分支的覆盖率,这意味着必须覆盖真和假决策路径的执行。
对于覆盖标准来说,这意味着决策中的每个条件都已被证明会独立影响该决策的结果。
同时,程序中的每一个决策中的条件都至少采取了一次所有可能的结果,程序中的每一个决策都至少采取了一次所有可能的结果。在下面有4个条件语句的例子中,有16个可能的测试用例。MC/DC在这个例子中只需要5个。取条件数加1。
对于最严格的安全关键型应用,如航空电子,工艺标准DO-178B/C Level A规定了对象代码覆盖。这是由于编译器或链接器会产生额外的代码,这些代码不能直接追溯到源代码语句。因此,必须进行汇编级覆盖。
想象一下,必须执行这项任务的严谨性和人力成本。幸运的是,有Parasoft ASMTools,一个关于获得对象代码覆盖的自动化解决方案。
代码覆盖率往往是通过对代码进行检测来确定的。检测指的是在用户代码中加入额外的代码,以便在执行过程中确定该语句、分支或MC/CD是否被执行。
基于嵌入式目标或设备,覆盖数据可以存储在文件系统中,写入内存,或通过各种通信渠道,如串行端口、TCP/IP端口、USB甚至JTAG发送出去。
对于代码覆盖率的要求,比如规定的100%的结构、分支和MC/DC覆盖率,或者是可选的、个人想要的80%,有几种测试方法用来满足你的目标。最常见的方法。
综合这些不同做法的覆盖率指标是典型的。但代码覆盖率究竟如何确定呢?
通过系统测试获得代码覆盖率是一个很好的方法,可以确定是否已经进行了足够的测试。方法是运行所有的系统测试,然后检查代码中哪些部分没有被行使。
未执行的代码意味着可能需要新的测试用例来行使未被触及的代码,在这些代码中可能潜伏着缺陷,并有助于回答这样一个问题:我是否做了足够的测试?
当我在系统测试期间进行过代码覆盖率的测试时,平均得出的指标是60%的覆盖率。40%的未执行代码中的大部分是由于你的应用程序中的防御性代码。
还有你的编码准则规定的防御性代码,系统测试永远无法执行。由于这些原因,系统测试不能带你达到100%的结构代码覆盖率。你需要采用其他的测试方法,如手动和/或单元测试来让你达到100%。要知道,流程标准允许合并从各种测试方法获得的覆盖率指标。
如前所述,单元测试可以作为系统测试的补充方法,以获得100%的覆盖率。通过单元测试获得代码覆盖率是比较流行的方法之一,但它并不能暴露你是否对系统做了足够的测试,因为重点是在单元级(函数/程序)。
这里的目标是创建一组单元测试用例,在所需的覆盖率合规性需求(语句、分支和MC/DC)下行使整个单元,以达到该单个单元100%的覆盖率。每一个单元都要重复这样做,直到覆盖整个代码库。然而,要想从单元测试中获得最大的收益,不要只关注获得代码覆盖率。
为了帮助通过单元测试加快代码覆盖率,Parasoft C/C++test中存在可配置的自动测试用例生成功能。测试用例可以自动生成,以测试空指针、最小-中间-最大范围、边界值等的使用。这种自动化可以让你走得更远。在几分钟内,你将获得大量的代码覆盖率。
然而,与系统测试一样,由于使用防御性代码或形式化语言语义,获得100%的代码覆盖率是难以实现的。在单元的颗粒级别上,防御性代码可能以开关中的默认语句的形式出现。如果一个开关中的每一个可能的情况都被捕获,这就使得缺省语句无法到达。
那么,对于这些特殊情况,如何才能获得100%的保障呢?
答案是需要部署手动方法。用户可以通过使用调试器,修改调用栈,执行return 0;语句,将该语句标注或标注为覆盖。目视见证执行过程,至少要记录现在被认为是覆盖的文件名、代码行和代码语句。
这种通过手动/视觉检查和报告执行的覆盖可以用来补充通过单元测试捕获的覆盖。这两种覆盖报告的补充可以用来证明100%的结构代码覆盖。
如果系统测试覆盖发生了,并且要包括在内,则可以使用所有三个覆盖报告(系统、单元、手动)来显示和证明100%的覆盖率和合规性。
当标准基于您的SIL、ASIL或DAL级别时,可能需要执行不同级别的覆盖(声明、分支、MC/DC和目标代码)。幸运的是,Parasoft提供了自动化的软件测试解决方案,以及您在获得100%结构代码覆盖率时需要解决的方法。
了解如何为您的嵌入式项目利用代码分析技术。请点击下方图片观看视频。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
通过提供强大的3D CAD数据访问工具并适用于桌面、移动和Web的高级环境3D可视化发动机,HOOPS在提升造船设计和制造流程的效率方面发挥了重要作用。
HOOPS Luminate在汽车行业中的应用具有广泛的潜力和深远的影响。它通过提供高效的3D可视化、虚拟装配与拆解、性能分析、客户定制等功能,帮助汽车制造商在设计、生产和销售过程中提升效率、降低成本并提高产品质量。
在不断发展的软件开发世界中,使工具和框架与最新的平台版本保持同步至关重要,欢迎查阅~
全球航运业对国际贸易至关重要,全球 90% 以上的商品通过海运运输。准确监控和控制这些集装箱的移动对于维持高效的供应链至关重要。手动输入集装箱号码是这一程序的关键部分,它带来了相当大的挑战,例如人为错误和效率低下。
针对 C/C++ 软件开发提供统一、完全集成的测试解决方案。
Parasoft Jtest用于应用软件开发的集成Java测试工具
Parasoft dotTEST降低C#和VB.NET开发风险,有效地实现符合C#和.NET开发的测试工具的要求
Parasoft SOAtest人工智能和机器学习赋能 API 和 Web 服务测试
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢