logo Parasoft 行业资讯(二) 我也要发布文档

通过测试自动化左移您的安全关键软件测试



我们使用安全性至关重要的软件面临成本危机,这意味着所需的增强功能已经超出了为其开发支付费用的能力。例如,波音787计划需要650万行代码,设计开发和测试成本为4,000,000,0000美元。重大安全关键项目的趋势表明,总成本呈指数增长,其中软件占开发总预算的比例逐年上升。使用先前项目中使用的相同技术,下一个大型航空航天项目可能会负担不起。所以,我们能做些什么?

安全认证以及所需的测试和验证是软件开发预算的很大一部分。在利用自动化的同时,将软件的测试向左移动(即,在软件开发生命周期的早期)会在成本,风险和进度方面带来很大的好处。下面的图1显示了用于商业航空公司软件开发的每千行代码的百万美元成本(波音和空中客车公司的数据),清楚地表明了呈指数级增长。


1:民航项目中每行代码的软件开发成本。数据取自空中客车公司和波音公司的项目指标。


在何处创建和发现错误及其对成本的影响

毫不奇怪,大多数缺陷都是在开始时甚至在编写第一行代码之前就引入到项目中的。在测试过程中发现并修复了大多数错误,但是在产品被出售和运送后,在操作过程中发现了很好的百分比(多达20%!)。在经过认证的系统中,这要么意味着耗费巨大的修复-测试-重新认证周期,要么意味着运营商针对该问题的解决方法。图2显示了在软件开发生命周期的每个阶段引入和检测到的错误的相对百分比。


2:显示在开发的不同阶段引入和检测到的缺陷百分比的图表。

在生命周期的早期修复缺陷是最便宜的,而在项目的整个过程中发现和修复缺陷的代价则成倍增加。在操作中,将产品运送到客户手中后,修复成本最高。部署后的缺陷修复成本是保守的,并且不包括因现场安全事件而对您的品牌造成的损害和责任。图3显示了在生命周期的每个阶段修复缺陷的相对成本。显然,目标是将已检测到并已修复的缺陷移到生命周期的早期,换句话说,移至“左移”。此外,我们希望减少缺陷的数量,将其传达给客户(在每个领域中都是现实)。


3:在每个开发阶段查找和修复错误的相对成本。在需求和设计过程中,基线(1x)是修复缺陷的成本最低的地方。图2和图3的来源:SAVI2012 INCOSE SE大会上的演讲。


测试自动化在左移中的作用

安全性至关重要的软件行业认识到需要改变工作方式。太多的项目正在重新发明轮子,并且认证全新的软件既耗时又昂贵。新产品的连接性和功能的增长意味着需要改变方法。在这篇文章中,我们不会介绍所有建议的技术,而是专注于测试自动化在转移减少,检测和修复缺陷及安全漏洞方面所扮演的角色。

在任何对安全至关重要的项目中,很大一部分都是测试,而自动化对于实现安全性、保障性和质量目标是绝对必要的。这是测试自动化工具支持新软件开发方法并提高测试和文档生产率的方式的示例:

支持敏捷和迭代开发方法:了解瀑布方法的问题,许多团队正在使用更现代的开发方法来提高质量和安全性。测试自动化是任何迭代开发方法的重要组成部分,因为测试套件是在模块,组件等的每个新迭代上运行的。测试自动化通过可重复的自动化测试来支持这些方法,从而为每个测试提供不同级别的报告,而且可以累加随着时间的流逝。动态分析工具对于检测难以检测到的运行时错误至关重要,而静态分析在测试开始之前检测缺陷中起着重要作用。

支持软件检查:在开发生命周期的早期消除缺陷的最佳实践之一是检查。检查意味着检查所有内容,而不仅仅是源代码。例如,检查需求和设计对于防止系统中主要的bug源至关重要(请参见图2)。从字面上看,许多错误是设计到系统中的。工具在此阶段的作用较小,但确实可以提高代码审查的效率。自动化的单元测试,动态错误检测和静态分析在项目的早期编码阶段提供了大大改进的错误检测。自动化测试的结果可以显示在代码审查中,从而减少了对手动错误检测的依赖,并为检测不正确的需求和设计决策留出了更多时间。

提高测试效率:手动测试是乏味且重复性较差。尽管结果“正确”,但结果收集可能是临时性的,可能会遗漏错误。实现所需的代码覆盖率(根据安全标准和项目的关键程度而变化)很难跟踪。测试自动化不仅使测试少了很多繁琐和可重复的工作,而且先进的测试工具的报告功能还可以创建有关项目状态的重要管理信息。添加动态分析和动态分析可以在运行时分析代码(以检测棘手的运行时错误),而静态分析可以在运行之前分析代码,从而大大提高了测试工具的错误检测能力。

自动化编码标准合规性:许多安全关键项目需要源代码标准。例如,MISRA在汽车软件中很常见,但在其他行业已经得到认可。一些标准要求代码符合满足特定目标的公司标准。在每种情况下,手动执行编码合规性都是乏味且容易出错。静态分析工具是执行合规性的理想之选,而高级工具则可以检测出超出格式违规的错误,从而走得更远。

自动化认证文档:获得软件安全认证的很大一部分工作是在文档化过程,验证和验证中。测试自动化降低了记录测试结果和覆盖率分析的成本。

加速第三方软件的重用:提高生产力的关键策略是重用软件。理想情况下,可以使用已经认证的组件来降低这些子单元的开发成本。项目需要使用COTS(现成的商用)软件以及可能的开源和其他源代码。使用静态和动态分析工具自动评估该软件可降低使用这些组件的风险。

改善质量,安全性和安全性:即使是严格的测试方案也可能会遗漏严重错误。例如,仅代码覆盖率还不足以确保在发生安全攻击或多线程代码时的正确行为。静态分析工具可以在不运行特定测试的情况下检测源代码中的错误,并且可以找到在单元或系统测试中很难发现的错误,例如安全漏洞。动态分析工具可以在测试期间检测运行代码中的错误,这些错误可能会反映在测试结果中(例如,内存泄漏缓慢)。在系统测试期间进行的模糊测试和渗透测试可以发现在正常操作条件下遗漏的错误。总体而言,最新工具发现的其他缺陷和安全漏洞可帮助降低成本,风险以及进入生产环境的20%左右的许多错误。


左移有什么影响?

显然,必须采取一些措施来解决如图2所示的问题。在生命周期的开始阶段,引入了太多的缺陷,并使其无法被发现,并且在制造和制造产品时,产品中留下了太多的缺陷。在客户手中(或视情况而定在飞机或汽车中)。采用新的开发方法,重用组件,利用COTS和开源以及工具自动化都是提高开发生产力的关键步骤。 

假设使用最先进的工具进行开发过程,可以在生命周期的早期发现并修复更多的缺陷,那么单元测试将非常有效,从而帮助减少了将其付诸生产的错误。在图4中,一个假设的示例显示了整个生命周期中缺陷检测的变化——在整个生命周期的早期,大部分缺陷检测和修复都向左移动。

4:该图显示了改进的开发过程,该过程在生命周期的早期转移了对错误和安全漏洞的检测。

从上面的图3我们知道,成本在每个开发阶段都会大幅增加。下面的图5显示了将传统方法中的缺陷修复成本与图4中所示的改进后的新方法进行成本对比的结果,毫不奇怪的是,尽早发现并修复错误的成本要比后来修复这些问题的成本低。在这里介绍的情况下,总成本差异约为40%,这有利于左移方法。


5:该图显示了修复传统方法与左移方法时的相对成本。即使总缺陷数量相同,早期检测也可以显着降低成本。


认证工具链和资格协助的重要性

在对安全至关重要的项目中使用自动化工具需要对工具本身的信任。产品制造商有责任确保用于创建软件的过程和工具符合标准的要求。工具供应商可以通过在销售给制造商之前使工具获得安全标准机构的认证来提供帮助,或者在无法进行此类预认证的情况下,提供资格协助。然后,他们可以在自己提交的文件中使用工具供应商的认证证据,从而减少所需的工作量。(例如,Parasoft C/C++test已通过TüVSüD认证,符合IEC 61508ISO 26262标准的安全相关软件开发要求。)

在某些软件安全标准(例如DO-178BDO-178C)中,认证是在系统级别上进行的,单个工具和软件并非独立认证。在这些情况下,工具供应商会提供鉴定工具包和有关文档和专业服务的帮助,从而大大降低了鉴定用于项目的工具所需的成本和精力。


结论

安全关键软件肯定会陷入成本危机。大型、新的、对安全至关重要的项目开发成本过高,以至于它们可能无法盈利。开发安全性至关重要的软件需要新的方法,并且这种工作必须减少在软件开发生命周期后期发现的错误数量。将缺陷和安全漏洞的检测和修复尽可能早地转移到生命周期中,可以大大降低成本。测试自动化在提高测试效率和结果方面发挥着作用,并且是安全关键软件开发新方法的重要组成部分。