静态分析——自动化代码扫描如何预防缺陷和加速交付?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态分析——自动化代码扫描如何预防缺陷和加速交付?相关的知识,希望对你有一定的参考价值。

一.什么是静态代码分析?

静态代码分析(简称静态分析)是一种必要的开发测试行为,通过扫描代码模式和结构以及分析逻辑关系,查找潜在缺陷代码,最终将报告呈现给用户以便修复代码缺陷。当高风险代码被侦测到后,静态分析扫描工具就会报告相应违规,指引用户修复代码漏洞。静态分析方法一般有如下一些类型:

  • 模式匹配静态分析

模式匹配静态分析方法是静态分析的一种最简单形式,即根据预先配置的规则库去自动化进行代码扫描,如果发现规则库中匹配的模式代码即报告违规。例如,工程师们有时候不小心使用了字符串“”进行字符数组结尾,其实实际是想使用单个字符’’。这个错误可能会引起内存损坏并导致程序崩溃。静态分析工具会在代码中寻找这些模式代码并报告可能出现的错误。这种静态分析被称为模式匹配静态分析。

  • 数据流分析

数据流分析,有时也被称为动态分析,与上面提到的模式匹配静态分析有些许不同。这种类型的代码分析检查问题前同样需要配置一组规则集(规则库),但数据流分析方法会在执行代码扫描时模拟程序的执行路径,追踪数据流向如指针所指向内存的处理流向等,仿真执行程序,查找和报告运行时错误,深入挖掘软件项目代码中难以发现的缺陷,例如空指针取消引用、缓冲区溢出、资源泄露、SQL注入等等。

  • 度量分析

为了实现不同的代码扫描目标,还有一些其他类型的静态分析方法,如度量分析,通过预先配置的代码结构度量阈值,来自动化扫描代码结构的同时报告项目代码的结构复杂性,统计相应软件项目代码中字段的继承深度,圈复杂度等等,以便后续可以对项目进行重构提供重要依据,优化产品,提高软件产品的可靠性和健壮性。

二.静态分析与认证标准

市场上的各种软件正变得越来越复杂,每天我们都会和各种不同的软件打交道,软件无处不在。例如,汽车系统在早期是纯机械的,但今天一般的汽车可能都包含超过1000个代码行的微控制单元,以响应各种用户指令,如智能空调,导航系统,安全系统等等。越来越多的硬件设备搭载了响应的智能系统,而每个系统都要求提供安全可靠的功能,去满足用户的各种个性化需求,这就要求软件项目必须具备一定的质量保障方法,比如最切实可行的静态分析。特别是那些攸关人身安全的行业软件系统,如汽车电子、医疗器械、航空电子设备等等。

当今软件市场上,有一些公开或私营企业或组织,如OWASP和MITRE,他们研究和发布了一些常见安全错误列表,并倡导最佳编程实践。在一些特定行业还存在相关的代码和认证标准,如MISRA,通过强制规定遵守一定的代码编写标准来保障相关行业软件系统的安全性,可靠性和健壮性。而这些最佳实践或相应行业代码标准都可以作为静态分析的具体规则纳入到规则库中,每天持续地进行自动化代码扫描,切实履行编程最佳实践。

三.自动化静态分析的好处

在客户端机器上通过手动触发运行静态分析就类似于在文字处理程序中运行拼写检查,及时报告拼写错误并协助用户纠正。对于小项目来说,这是可以接受的,但是在大型企业或组织中,静态分析应该是自动化执行,并且作为持续构建或代码签入的一部分。将静态分析方法当作为开发测试过程的一部分进行整合后,静态分析能提供许多益处,具体参见如下说明。

  • 加快软件开发周期

在项目的早期阶段就引入自动化静态分析,持续地进行自动化代码扫描,在修复成本处于最低时就找到问题并修复代码缺陷。这相比不运行静态分析而只为加速开发软件,整个过程最初可能需要花费更多时间,但是效率收益是翻倍增长的。另外,一些静态分析工具还提供规则库的详细编程标准实施描述性文档,这在查找和规避问题的同时也会扩宽软件工程师的编程知识,往更专业和更高层次方向发展。开发团队所产出的代码是可持续迭代维护开发的,工程师们也更有信心做出代码改变和创新,其实整个软件项目开发的速率是阶梯式提高的。

  • 降低产品缺陷率

静态分析可以帮助您更早的找到并修复缺陷,可防止软件产品后期的系统性缺陷。一些静态分析工具不仅报告静态分析违规行为,还可与开发平台集成,直接定位到具体代码行,这可以帮助你了解所有报告的缺陷实例发生的根本原因。具备了自动化静态分析技术,就可以更容易地实施缺陷预防政策,从而降低软件开发生命周期的缺陷率。

  • 持续改进软件

“DevOps”一词常用于描述一组实践,它促进跨部门合作和沟通,这对帮助企业优化和加速开发过程是必须的。通过跨部门分享知识和任务,企业在提高质量工艺的同时,也为加快SDLC创建了一个高效的进程。这方法是有效的,然而,必须实施一个自动化反馈回路,是整个高效的团队实践流程得到改进。

自动化静态分析不仅是提供反馈循环机制,它还为各相关部门在DevOps模式下有效协作提供了实际素材和具体沟通桥梁。尤其是当代码测试进入到单元测试和回归测试时,静态分析还扮演了如下几个角色:

  • 保证代码质量具备动态测试基础

  • 提供改进开发过程所需的大数据

  • 提供了DevOps自动反馈的切实可行方法

因此,静态分析成为了持续集成构建和软件开发测试过程持续改进的关键推动力。

四.关于Parasoft的静态分析解决方案

市场上有一些静态分析工具,涵盖范围从开放源码事业到全面发展的测试套件。针对JavaC/C++.Net 等主流语言的软件产品开发, Parasoft公司提供了一个企业级的开发测试解决方案。除了全方位的静态代码分析能力如模式匹配分析、数据流分析和度量分析等,该开发测试平台还具备良好的扩展性,包括了单元测试,集成测试,运行时错误检测,代码审查,覆盖率分析等功能,可以自动化生成测试用例,执行单元测试的同时提供多种视角的覆盖率分析,提供图形化报表系统,是一个完善的方案级平台,全方位落实自动化缺陷预防政策,保障客户产品质量的同时提高软件产品交付速度。

五.结论

静态代码分析是确保应用程序功能如期实现的一个重要组成部分。它不仅提高了整个开发团队的速度,也降低了与释放潜在危险的软件相关的风险。虽然有分析总比没分析好,但应该将静态分析整合到开发测试基础设施中,从而最大限度地提高实践的有效性。Parasoft在代码级测试中提供了专业的代码分析和自动化测试套件,开发测试平台中提供了一个先进的分析和报告系统。结合这两种技术,使软件工程团队加速软件交付,同时确保他们的应用程序功能满足客户需求,符合产品预期,实现商务价值。

Parasoft联名十大商家共启正版行动,超低折扣等你来拿!


以上是关于静态分析——自动化代码扫描如何预防缺陷和加速交付?的主要内容,如果未能解决你的问题,请参考以下文章

测试基础知识

C++代码质量扫描主流工具深度比较

《高级软件测试》实践作业3学习记录12月19日

敏捷测试

代码质量C++代码质量扫描主流工具深度比较

代码质量C++代码质量扫描主流工具深度比较