安全认证和所需的测试和验证在软件开发生命周期的早期
发表时间:2023-11-26 14:04:42
文章来源:炫佑科技
浏览次数:185
菏泽炫佑科技
安全认证和所需的测试和验证在软件开发生命周期的早期
图 1:商业航空项目每行代码的软件开发成本。 数据取自空中客车公司和波音公司的项目指标。
错误产生和发现的位置以及对成本的影响
毫不奇怪,大多数缺陷都是在项目开始时引入的,甚至在**行代码编写之前。 大多数缺陷是在测试过程中发现并修复的,但相当多的缺陷(高达 20%!)是在操作过程中发现的,即在产品销售和运输之后。 在经过认证的系统中,这意味着要么需要极其昂贵的修复-测试-重新认证周期,要么需要操作员解决问题。 图 2 显示了软件开发生命周期每个阶段引入和检测到的错误的相对百分比。
图 2:图表显示了在不同开发阶段引入和检测到的缺陷的百分比。
在生命周期的早期修复缺陷的成本*低,而随着项目的老化,发现和修复缺陷的成本呈指数级增长。 在运营中,产品运送给客户后维修成本*高。 部署后缺陷修复成本是保守的,不包括品牌损害和现场安全事件的责任。 图 3 显示了生命周期每个阶段修复缺陷的相对成本。 显然,目标是移动在生命周期早期发现并修复的缺陷,换句话说,“左移”。 此外,*好减少传递给客户的缺陷数量(每个领域的现实)。
图 3:每个开发阶段查找和修复缺陷的相对成本。 需求和设计期间是基线 (1x),也是修复缺陷*便宜的地方。 图2和图3来源:SAVI在2012年SE会议上的演讲。
测试自动化在换档中的作用
安全关键的软件行业认识到需要改变其工作方式。 太多的项目需要重新发明轮子,而认证全新的软件既耗时又昂贵。 新产品的连接性和功能性的增长意味着方法需要改变。 在本文中,我们不会涵盖所有提出的技术,而是重点讨论测试自动化在减少左移、检测和修复缺陷和安全漏洞方面的作用。
任何安全关键项目的重要组成部分都是测试,而自动化对于实现安全、保障和质量目标是绝对必要的。 这是一个测试自动化工具的示例,它支持新的软件开发方法并提高测试和文档工作效率。
支持敏捷和迭代开发方法:瀑布方法的问题已被理解,许多团队正在使用更现代的开发方法来提高质量和安全性。 测试自动化是任何迭代开发方法的重要组成部分,因为测试套件在模块、组件等的每次新迭代上运行。测试自动化通过可重复的自动化测试支持这些方法,为每个测试提供不同级别的报告,还提供随着时间的推移累积的结果。 动态分析工具对于检测难以发现的运行时错误至关重要自动化软件开发,而静态分析在测试开始前检测缺陷方面发挥着重要作用。
支持软件检查:在开发生命周期早期消除缺陷的*佳实践之一是检查。 检查意味着审查所有内容,而不仅仅是源代码。 例如,检查需求和设计对于防止系统中出现主要错误源至关重要(参见图 2)。 许多错误实际上是系统设计的。 工具在这个阶段发挥的作用较小,但它们确实可以提高代码审查的效率。 自动化单元测试、动态错误检测和静态分析大大改进了项目早期编码阶段的错误检测。 自动化测试的结果可以在代码审查中呈现,从而减少对手动错误检测的依赖,并留出更多时间来检测不正确的需求和设计决策。
提高测试效率:手动测试繁琐且可重复性差。 结果收集可能是临时的,并且尽管结果“正确”,但可能会遗漏错误。 实现这一目标所需的代码覆盖率因项目的安全标准和关键性而异,并且难以跟踪。 测试自动化不仅大大减少了测试的繁琐性和可重复性,而且高级测试工具的报告功能可以创建有关项目状态的重要管理信息。 动态分析(在代码运行时对其进行分析,以检测棘手的运行时错误)和静态分析(在代码运行前对其进行分析)的添加大大提高了测试工具的错误检测能力。
自动化编码标准合规性:许多安全关键项目都需要源代码标准。 例如,MISRA 在汽车软件中很常见安全认证和所需的测试和验证在软件开发生命周期的早期,但在其他行业也得到认可。 某些标准要求代码符合公司标准才能实现某些目标。 在每种情况下,手动强制执行编码合规性都是乏味且容易出错的。 静态分析工具是强制合规性的理想选择,高级工具可以进一步检测格式违规之外的错误。
自动化认证文档化:在实现软件安全认证的过程中,很大一部分工作量是在记录过程、验证和验证方面。 测试自动化显着降低了记录测试结果和覆盖率分析的成本。
加速第三方软件的复用:提高生产力的一个关键策略是复用软件。 理想情况下,可以使用已经认证的组件来降低这些子单元的开发成本。 项目需要利用 COTS(商业现成)软件,也可能利用开源和其他源代码。 利用静态和动态分析工具自动评估这些软件可以降低使用这些组件的风险。
提高质量、安全性和保障:即使严格的测试制度也可能会遗漏关键错误。 例如,在安全攻击或多线程代码的情况下,仅代码覆盖率不足以确保正确的行为。 静态分析工具可以在不运行特定测试的情况下检测源代码中的错误,并且可以在单元或系统测试中发现难以发现的错误,例如安全漏洞。 动态分析工具可以检测测试期间运行代码的错误,这些错误可能会反映在测试结果中(例如缓慢的内存泄漏)。 系统测试期间的模糊测试和渗透测试可以发现正常操作条件下遗漏的漏洞。 总体而言,*先进的工具发现的额外缺陷和安全漏洞有助于降低成本、风险以及进入生产的 20% 左右的错误。
左移有什么影响?
很明显,必须采取一些措施来解决图 2 中清晰显示的问题。在生命周期开始时引入了太多缺陷,并且在产品生产并交到客户手中(或在飞机或汽车上(视情况而定),产品中留下了太多缺陷。 采用新的开发方法、重用组件、利用 COTS 和开源以及工具自动化都是提高开发效率的关键步骤。
鉴于开发过程使用*先进的工具,可以在生命周期的早期发现并修复更多缺陷,单元测试非常有效,有助于减少生产中的错误。 在图 4 中,一个假设的示例显示了生命周期中缺陷检测的变化 - 其中大部分缺陷检测和修复在生命周期的早期移至左侧。
图 4:该图显示了改进的开发流程,该流程将缺陷和安全漏洞的检测移至生命周期的早期。
从上图3我们知道,在每个开发阶段,成本都会大幅上升。 下面的图 5 显示了传统方法和图 4 中所示的新改进方法中修复缺陷的成本的比较。毫不奇怪,尽早发现并修复缺陷比稍后修复缺陷要便宜。 在此介绍的案例中,总体成本差异约为 40%,有利于左移方法。
图 5:该图显示了传统方法与左移方法修复错误的相对成本。 即使缺陷总数相同,早期检测也可以显着降低成本。
认证工具链和资格协助的重要性
在安全关键项目中使用自动化工具需要对工具本身的信任。 产品制造商有责任相信用于创建软件的程序和工具符合标准的要求。 工具供应商可以在这方面提供帮助,方法是在将工具出售给制造商之前让工具经过安全标准机构的认证,或者在无法进行此类预先认证的情况下提供资格协助。 然后,他们可以在自己的认证提交中使用工具供应商的认证证据,从而减少所需的工作量。 (例如,C/C++test已被TüV SüD认证为符合IEC 61508和ISO 26262标准的安全相关软件开发资格)
在一些软件安全标准中,例如DO-178B和DO-178C,认证是在系统级别进行的,个别工具和软件没有独立的认证。 在这些情况下,工具供应商提供资格认证工具箱,并提供文档和专业服务方面的帮助,从而显着减少资格项目中使用的工具所需的成本和工作量。
结论
安全关键软件无疑陷入了成本危机。 新的大型安全关键项目开发成本太高,甚至可能无利可图。 开发安全关键型软件需要新的方法,并且此类努力必须减少在软件开发生命周期后期发现的错误数量。 尽早将缺陷和安全漏洞的检测和修复转移到生命周期的早期可以显着降低成本。 测试自动化在提高测试效率和结果方面发挥着重要作用,是安全关键软件开发新方法的重要组成部分。
炫佑科技专注互联网开发小程序开发-app开发-软件开发-网站制作等