持续集成中使用静态代码分析工具保障代码质量(二)

高可信测试工具 2023-11-30 09:49:38
加精

第 3 章 解决方案

静态代码分析进行测试时不需要实际执行代码,因此,它可以对特定时间范围内提交的代码更改进行完整分析。此外,静态代码分析不需要编写特定的测试用例。为了有效补充持续集成,静态代码分析工具必须是快速、可扩展和自动化的。

3.1 总体目标

依靠Jenkins持续集成的功能,通过集成静态分析工具、单元测试工具、质量门控制、确认测试等工作,自动完成源代码质量的检测评估,由管理人员决定软件产品是否达标,对满足要求的软件产品进行自动化打包,甚至自动发布。

3.2 总体方案

图1 持续集成总体架构图

3.3 方案详述

运行流程

流程简述

CI环境准备

搭建Jenkins环境

获取代码

通过Jenkins插件获取代码仓库中最新提交的源码

静态分析

通过静态分析工具对代码进行静态缺陷检测和分析

单元测试

通过单元测试工具对代码进行函数单元测试

质量门控制

集成质量门脚本对质量门进行控制

确认测试

对比脚本预设指标进行确认测试判断

打包

对符合要求的代码进行打包

3.3.1 自定义流水线

Jenkins是一个流行的自动化构建和集成工具,它可以帮助开发人员和团队实现高效的软件开发流程,同时自定义流水线管理是Jenkins的重要功能之一,允许用户创建和管理自定义流水线以便更好满足自身定制化需求。

图2 Jenkins流水线示意图

3.3.2 静态分析工具集成

通过集成SpecChecker等多种静态分析工具,自动对被测软件代码进行扫描和分析,发现代码中潜在的风险和缺陷,开发人员可以尽早修正以避免可能存在的事故,从而保障软件的代码质量。

图3 SpecChecker集成命令行接口

图4 SpecChecker分析结果

3.3.3 单元测试工具集成

通过集成单元测试工具,可以在软件编码阶段的早期有效发现缺陷,从而帮助开发人员提高代码质量、改善设计、提高可维护性、改进开发流程、减少回归测试、提高开发效率。

3.3.4 质量门控制

通过集成质量门脚本,确保产品或项目在每个关键阶段满足质量标准,从而减少后期错误和缺陷,提高项目的质量和成功率。它也有助于改进项目管理和协作,并提高团队的效率和产出。

3.3.5 自动化确认测试

通过集成确认测试脚本,由用户来判断软件项目的各指标质量是否达标。

3.3.6 自动化打包

利用自动化打包advanced installer工具,对经过层层质量把关后符合要求的软件制品进行自动打包。

3.3.7 分布式部署

为增加平台的可靠性、可拓展性、增强性能、具备弹性,软件产品自动化研制平台要支持分布式技术,充分利用各节点不同操作系统的特性和计算能力,将子任务分发到不同子节点中去,以达到最终完成软件产品研制的能力。

 

图5 Jenkins主从架构示意图

3.3.8 容器化部署

为帮助开发人员快速构建、测试和部署应用,同时也可以让运维人员更加高效地管理和维护应用程序,软件产品自动化研制平台要支持容器化能力,方便后续动态添加新的其他分析工具。

3.4 静态分析工具SpecChecker

3.4.1 工具介绍

SpecChecker是北京轩宇信息技术有限公司自主研发的一个基于源代码静态技术的代码检查工具,支持代码规则检测、运行时错误检查、典型故障模式检查和代码度量等功能。

SpecChecker可用来检测编码错误和安全编码标准符合性,可在已有代码和新开发代码的任何开发阶段使用,通过编译时的检查有效改善代码质量,降低程序失效的风险。SpecChecker还可用于辅助代码审查,利用可视化的的代码结构分析提高审查效率。

图6 SpecChecker主界面

3.4.2 工具功能

3.4.2.1 代码安全规则检查

SpecChecker支持的规则覆盖《航天C语言可信编程规范》、《五院编程规范2007版》、《国军标C语言编程安全子集8114-2013》、《国军标航天型号软件C语言安全子集5369-2005》和《921C语言规范》等航天军工常用编程规范以及《CERT-C-2016》、《CWE》、《MISRAC2012(C99)》、《MISRAC2012(C90)》、《MISRACPP2008》、《AUTOSARCPP14》、《ADA静态分析规则集》、《PYTHON静态分析规则集》、《JAVA静态分析规则集》等。

3.4.2.2 运行时错误检查

对于在软件编码时没有编译错误,但运行时可能导致程序崩溃的问题,例如除零错误、内存重复释放、SQL注入等,SpecChecker提供了针对这些问题的单独检查,目前共支持常见20项运行时错误的检测。

3.4.2.3 典型故障模式检查

《航天嵌入式软件故障模式集合》,该集合针对航天软件中曾经出现过的典型问题进行了总结和固化,目前共收录了300项典型故障模式。SpecChecker目前提供针对其中300项故障的自动检测。

3.4.2.4 代码度量分析

SpecChecker支持对C/C++/Python/Java语言代码的度量分析。

  • 支持的C语言度量指标50余种,包括:

代码规模(可执行行数);

基本复杂度;

函数入口数、出口数;

预处理类度量;

注释率;

  • 支持的C++语言度量指标20余种,包括:

代码行;

McCabe复杂度;

函数被调用次数;

函数调用次数;

最大嵌套块数

…。

  • 支持的Python语言度量指标10余种,包括:

代码可执行行数

代码注释行数

多行字符串行数

程序词汇表

可维护性指数

…。

  • 支持的Java语言度量指标10余种,包括:

类的圈复杂度

函数圈复杂度

外部变量数

外部类数

类内函数间的耦合关系

…。

3.4.2.5 共享变量与数据竞争分析

在安全关键领域的嵌入式软件中,由于中断并发导致的数据竞争问题十分突出。然而,目前缺乏有效的方法和工具,在工程实践中多通过人工审查进行测试,工作效率低且遗漏率较高。

SpecChecker是目前唯一一款支持中断驱动型程序共享变量与数据竞争分析的商业工具。给定程序中并发执行的入口函数,SpecChecker利用全局调用关系分析能够找出并发程序中所有的共享变量;进一步利用全面的路径分析和变量访问序模式分析能够发现潜在的原子性问题。SpecChecker利用问题的表象特征值进行统计排序,将最可能发生的、最严重的缺陷排在分析结果的最前列,可为进一步的人工审查提高效率。

3.4.2.6 可定制的中文测试报告

SpecChecker提供可定制的、可独立分发的中文测试报告,极大程度地满足用户个性化文档工作的需求。(生成两种静态分析报告)支持的格式有:

  • HTML;
  • Word
  • PDF
  • Excel

欢迎访问产品网站:北京轩宇信息技术有限公司--高可信工具软件

...全文
580 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

25

社区成员

发帖
与我相关
我的任务
社区描述
静态缺陷检测、单元/集成测试、虚拟仿真测试、软件安全、.......好用的工具让测试也可以如此简单~~
集成测试 企业社区
社区管理员
  • 轩宇老哥
  • 高可信测试工具
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧