什么是测试左移(使用测试自动化左移您的安全关键软件测试)
我们正处于安全关键软件的成本危机中。所需的附加功能超出了支付其开发费用的能力。例如,波音787项目需要650万行代码,设计、开发和测试花费了40亿美元。
重大安全关键项目的趋势显示,总成本呈指数级增长,软件在年度总开发预算中占很大比例。使用以前项目中使用的相同技术,下一个大型航空航天项目可能负担不起。那么,我们能做什么呢?
认证和所需的测试和验证是软件开发预算的一大部分。在开发生命周期的早期阶段开始软件测试,同时使用自动化,在成本、风险和进度方面带来巨大的好处,如图1所示。
[图1 |商用航空项目中每行代码的软件开发成本]
以及创建和查找错误的位置和成本影响。
不出所料,大多数缺陷都是在项目开始时引入的,甚至是在写第一行代码之前。大多数错误是在测试过程中发现并修复的,但很大一部分(高达20%)是在产品发货后的运行过程中发现的。在认证系统中,这意味着要么是极其昂贵的维修-测试-重新认证周期,要么是运营商问题的解决方案(图2)。
[图2 |不同开发阶段引入和检测到的缺陷百分比]
在项目的整个过程中,发现和修复缺陷的成本会成倍增加。最坏的情况是在产品交付给客户后修复缺陷。部署后的缺陷修复费用是保守的,不包括对你品牌的损害和现场安全事故的责任(图3)。显然,目标是将检测到并修复的缺陷转移到生命周期3354的早期阶段,换句话说就是,向左。另外,希望减少传递给客户的缺陷数量(各领域的现实)。
[图3 |在每个开发阶段发现和修复错误的相对成本。它是需求和设计阶段基线(1x)和缺陷修复成本最低的地方。]
自动化在左移中的作用
关键的软件行业认识到需要改变做事的方式。太多的项目试图重新发明轮子,而且认证新软件既费时又费钱。
新产品越来越多的连接性和功能性意味着方法需要改变。任何安全关键项目的很大一部分都是测试,自动化对于实现安全、保障和质量目标是绝对必要的。以下是测试自动化工具如何支持新的软件开发方法并提高测试和文档生产率的例子:
支持敏捷和迭代的开发方法:了解瀑布法的问题,很多团队使用更现代的开发方法来提高质量和安全性。自动化是任何迭代开发方法的重要部分,因为测试套件运行在模块、组件等的每一次新迭代上。自动化测试通过可重复的自动化测试支持这些方法,为每个测试提供不同级别的报告,而且随着时间的推移积累结果。动态分析工具对于检测难以检测的运行时错误非常重要,而静态分析对于在测试开始之前检测缺陷起着重要的作用。
支持软件检查:检查是在开发生命周期早期消除缺陷的良好实践。检查意味着审查一切,而不仅仅是源代码。例如,检查需求和设计对于防止系统中的主要错误来源是必不可少的(再次参见图2)。许多错误实际上是设计到系统中的。工具在这个阶段的作用很小,但是它们确实提高了代码评审的有效性。自动单元测试、动态错误检测和静态分析在项目的早期编码阶段提供了大大改进的错误检测。自动化测试的结果可以在代码审查中呈现,从而减少对人工错误检测的依赖,并留出更多时间来检测不正确的需求和设计决策。
提高测试效率:人工测试繁琐,重复性差。结果可能是临时收集的,尽管结果是正确,错误仍可能被遗漏。实现所需的代码覆盖率取决于安全标准和项目的关键程度,这是很难跟踪的。自动化不仅减少了测试的单调和重复性,而且高级测试工具的报告功能创建了关于项目状态的重要管理信息。添加动态分析(在代码运行时分析代码(以检测棘手的运行时错误))和静态分析(在代码运行前分析代码)增加了测试工具的错误检测能力。
自动化编码标准符合性:许多安全关键项目需要源代码标准。例如,MISRA在汽车软件中很常见,但在其他行业中却得到了认可。一些标准要求代码符合满足特定目标的公司标准。在每种情况下,手动执行代码遵从性是乏味且容易出错的。静态分析工具可以强制遵从,而高级工具则更进一步,检测格式违规之外的错误。
自动化认证文档:实现软件安全认证的大部分工作量是记录过程,验证和验证。测试自动化显著降低了记录测试结果和覆盖分析的成本。
加速第三方软件的重用:提高生产率的一个关键策略是软件重用。理想情况下,经过认证的组件可以用来降低这些子单元的开发成本。该项目需要使用COTS(现成的商业)软件,并可能开源和其他源代码。使用静态和动态分析工具来自动评估软件可以降低使用这些组件的风险。
提高质量、安全性和可支持性:即使严格的测试方案也可能遗漏严重的错误。例如,在安全攻击或多线程代码的情况下,单靠代码覆盖率不足以确保正确的行为。静态分析工具可以在不运行特定测试的情况下检测源代码中的错误,可以发现单元或系统测试中难以发现的错误,如安全漏洞。动态分析工具可以检测运行代码中的错误(例如,缓慢的内存泄漏),这些错误可能会反映在测试期间的测试结果中。系统测试期间的模糊测试和渗透测试可以发现在正常操作条件下遗漏的错误。总的来说,最先进的工具发现的额外缺陷和安全漏洞有助于降低成本、风险和许多错误,使其投入生产约20%。
向左移动有什么影响?
显然,必须采取一些措施来解决图2中清楚显示的问题。在生命周期的开始,引入了太多的缺陷而没有被发现,当产品被交付给客户时,产品中留下了太多的缺陷。采用新的开发方法、重用组件、使用COTS和开源以及工具自动化是提高开发效率的关键步骤。
[图4 |该图显示了改进的开发过程,它将错误和安全漏洞的检测转移到了生命周期的早期。]
从图3中我们知道,每个开发阶段的成本都会显著增加。图5示出了修复传统方法和图4所示方法的缺陷的成本比较。正如预期的那样,越早发现并修复错误,成本越低。在这里描述的情况下,总的成本差异大约为40%,这对于左移方法是有利的。
【图5。该图显示了在传统方法和左移方法中修复错误的相对成本。即使缺陷总数相同,早期检测也会显著降低成本。]
认证链和资格援助的重要性
在安全关键项目中使用自动化工具需要工具本身的信任。它是产品制造商确保用于创建软件的过程和工具符合标准要求的责任。供应商可以通过在出售给制造商之前已经通过安全标准机构认证的工具来提供帮助,或者如果这种预先认证是不可能的,则提供资格帮助。然后,他们可以在自己的认证提交中使用工具供应商的认证证据,并减少所需的工作量。例如,Parasoft C/C test已通过TV南德认证,根据IEC 61508和ISO 26262标准,有资格进行安全相关软件开发。
在一些软件安全标准中,如DO-178B和DO-178C,认证是在系统级完成的,没有针对个别工具和软件的独立认证。在这种情况下,工具供应商将提供识别工具包,并在文档和专业服务方面提供帮助,从而大大降低为项目识别工具所需的成本和工作量。
审计郭婷
标签:项目软件工具