我们正面临安全关键软件的成本危机,这意味着所需增加的功能已经超出了支付其开发费用的能力。例如,波音 787 项目需要 650 万行代码,设计、开发和测试成本达 40 亿美元。波音777X项目的成本数字并未公开披露,波音737 MAX最初估计为36亿美元,但后来升至63亿美元,这还不包括数十亿美元的故障成本。
Parasoft 产品免费试用https://www.evget.com/consult/parasoft/#Aps_contact
重大安全关键项目的趋势显示总成本呈指数增长,软件在总开发预算中所占比例逐年增加。使用先前项目中使用的相同技术,下一个大型航空航天项目可能无法负担。所以,我们能做些什么?
安全认证以及所需的测试和验证占软件开发预算的很大一部分。软件的左移测试(在 SDLC 的早期进行测试)在利用自动化的同时,在成本、风险和进度方面带来了巨大的回报。下图显示了商业航空公司软件开发每千行代码的成本为数百万美元,这清楚地显示了指数级增长。
了解何时引入和检测到错误
毫不奇怪,大多数缺陷都是在项目一开始就被引入的,甚至是在编写第一行代码之前。大多数错误都是在测试期间发现并修复的。但有相当一部分(高达 20%)是在产品销售和运输后的运营过程中发现的。
在经过认证的系统中,这要么意味着极其昂贵的修复-测试-重新认证周期,要么意味着操作员需要解决问题。下图显示了软件开发生命周期每个阶段引入和检测到的错误的相对百分比。
在生命周期的早期修复缺陷是最便宜的。在项目期间,查找和修复这些问题的成本会成倍增加。在操作中,产品交付到客户手中后,修复成本最高。部署后缺陷修复成本是保守的,不包括对您的品牌的损害以及现场安全事件的责任。
下图显示了在生命周期的每个阶段修复缺陷的相对成本。显然,目标是将检测到并修复的缺陷移至生命周期的早期。换句话说,左移。此外,希望减少交付给客户的缺陷数量,这在每个领域都是现实。
通过测试自动化进行左移测试
安全关键的软件行业认识到需要改变工作方式。太多的项目都在重新发明轮子,而认证全新的软件既耗时又昂贵。新产品的连接性和功能性的增长意味着方法需要改变。在这篇文章中,我们不会涵盖所提出的所有技术,而是集中讨论测试自动化在减少、检测和修复缺陷和安全漏洞方面所扮演的角色。
测试自动化的优点
任何安全关键项目的很大一部分都是测试。自动化对于实现安全、保障和质量目标是绝对必要的。以下是测试自动化工具如何支持现代软件开发方法并提高测试和文档生产力的示例。
支持敏捷和 CI/CD 管道
瀑布方法的问题已被理解,许多团队正在使用更现代的开发方法来提高质量和安全性。测试自动化是任何迭代开发方法的重要组成部分,因为测试套件在模块、组件等的每次新迭代上运行。
测试自动化通过可重复的自动化测试支持这些方法,为每个测试提供不同级别的报告,而且随着时间的推移提供累积结果。这些工具还旨在通过与工作项跟踪、需求管理、构建系统和源存储库服务集成来与 CI 流程配合使用。动态分析工具对于检测难以检测的运行时错误至关重要。静态分析在测试开始前检测缺陷方面发挥着重要作用。
支持软件检查
在开发生命周期早期消除缺陷的最佳实践之一是检查。检查意味着审查所有内容,而不仅仅是源代码。例如,检查需求和设计对于防止系统中错误的主要来源至关重要。请参见图 2。许多错误实际上是被设计到系统中的。工具在此阶段发挥的作用较小,但确实提高了代码审查的有效性。
自动化单元测试、动态错误检测和静态分析大大改进了项目早期编码阶段的错误检测。自动化测试的结果可以在代码审查中呈现,从而减少对手动错误检测的依赖,并留出更多时间来检测不正确的需求和设计决策。
提高测试效率
手动测试非常繁琐且可重复性较差。结果收集可以是临时的,尽管结果是“正确的”,但也可能会错过错误。实现所需的代码覆盖率(根据安全标准和项目的关键性而变化)很难跟踪。
测试自动化不仅使测试变得不再那么繁琐和可重复,而且高级测试工具的报告功能可以创建有关项目状态的重要管理信息。添加动态分析(在运行时分析代码以检测棘手的运行时错误)和静态分析(在运行前分析代码)大大提高了测试工具的错误检测能力。
自动遵守编码标准
许多安全关键项目需要源代码标准。例如,MISRA 在汽车软件中很常见,但在其他行业也得到了认可。某些标准要求代码符合满足特定目标的公司标准。在每种情况下,手动强制执行编码合规性都是乏味且容易出错的。静态分析工具是强制合规性的理想工具,而高级工具则可以进一步检测超出格式违规范围的错误。
自动化认证文档
实现软件安全认证的很大一部分工作量是记录流程、验证和验证。测试自动化显着降低了记录测试结果和覆盖率分析的成本。
加速遗留软件的重用
提高生产力的一个关键策略是重用软件。理想情况下,可以使用已经认证的组件来降低这些子单元的开发成本。使用静态和动态分析工具自动评估遗留软件可以降低使用这些组件的风险。
提高质量、安全和保障
即使严格的测试方案也可能会遗漏严重错误。例如,仅代码覆盖率不足以确保在安全攻击或多线程代码的情况下正确的行为。静态分析工具可以在不运行特定测试的情况下检测源代码中的错误,并且可以发现在单元或系统测试中难以发现的错误,例如安全漏洞。
动态分析工具可以检测测试期间运行代码中可能反映在测试结果中的错误,例如缓慢的内存泄漏。系统测试期间的模糊测试和渗透测试可以发现正常操作条件下遗漏的错误。总的来说,最先进的工具发现的额外缺陷和安全漏洞有助于降低成本、风险以及投入生产的 20% 左右的错误。
左移测试有什么影响?
很明显,必须采取一些措施来解决图 2 中清楚显示的问题。在生命周期开始时引入了太多缺陷并且未被发现。当产品被制造出来并在客户手中时,或者在飞机或汽车中(视情况而定)中,有太多的残留物。采用现代开发方法、重用组件、利用 COTS 和开源以及工具自动化都是提高开发效率的关键步骤。
假设开发过程使用最先进的工具,其中测试向左移动,并且在生命周期的早期检测到并修复更多缺陷,那么单元测试非常有效,有助于减少进入生产的错误。在图 4 中,一个假设的示例显示了生命周期中缺陷检测的变化,其中大部分缺陷检测和修复在生命周期的早期移至左侧。
从上面的图3我们知道,在开发的每个阶段成本都会显着上升。下面的图 5 显示了传统方法与图 4 中所示的现代方法修复缺陷的成本比较。将发现和修复错误移到左侧,比稍后修复它们的成本要低。在此所示的情况下,总体成本差异约为 40%,有利于左移方法。
认证工具链和资格协助的重要性
在安全关键项目中使用自动化工具需要对工具本身的信任。产品制造商有责任确信用于创建软件的流程和工具满足标准的要求。工具供应商可以通过在将工具出售给制造商之前让工具经过安全标准机构的认证来帮助解决这一问题,或者在无法进行此类预先认证的情况下,提供资格协助。然后,他们可以在自己提交的认证中使用工具供应商的认证证据,并减少所需的工作量。例如,Parasoft C/C++test已获得 TÜV SÜD 认证,具有根据 IEC 61508 和 ISO 26262 标准进行安全相关软件开发的资格。
在某些软件安全标准(例如 DO-178C)中,认证是在系统级别完成的,并且各个工具和软件不是独立认证的。在这些情况下,该工具的供应商会提供资格认证套件以及文档和专业服务方面的帮助,从而大大减少了对项目中使用的工具进行资格认证所需的成本和工作量。
通过左移策略降低安全关键软件成本
安全关键软件无疑面临成本危机。新的大型安全关键项目的开发成本变得过于昂贵,甚至可能无法盈利。开发安全关键型软件需要现代方法,并且必须减少在软件开发生命周期后期发现的错误数量。向左移动,在生命周期中尽早检测和修复缺陷和安全漏洞可以显着降低成本。测试自动化在提高测试效率和结果方面发挥着关键作用。它是现代安全关键软件开发方法的重要组成部分。