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