Parasoft常用于开发过程中的代码检查和静态分析,通过扫描项目源码,帮助开发人员发现代码规范、结构以及潜在质量问题。不过在配置扫描项目时,实际操作中经常会遇到一些细节问题,例如项目导入后无法正常分析、部分文件没有参与扫描、设置的规则没有生效等。这些情况多数和项目环境、源码路径以及分析配置有关。本文将介绍Parasoft代码扫描项目的配置方法,并整理项目配置异常时的排查思路。
Parasoft在企业软件开发和质量验证场景中经常用于自动化测试、代码分析以及单元测试管理。对于使用C、C++、Java等语言开发的项目,单元测试能够帮助开发人员提前发现函数逻辑错误和接口调用问题。不过在实际使用Parasoft创建测试用例时,初次配置项目环境、设置测试对象以及执行测试流程时,容易遇到测试用例无法生成、执行失败、覆盖结果异常等情况。本文介绍Parasoft创建单元测试用例的方法,以及测试执行失败后的定位思路。
Parasoft Jtest执行Java单元测试并采集代码覆盖率后,可以把测试结果上传到Parasoft DTP,由DTP把不同构建的代码变化、测试执行结果和Coverage数据关联起来,判断哪些测试受到代码修改影响。变更影响分析结果偏少时,通常不是单纯的代码差异识别问题,更常见的是Baseline与Target选择错误、Coverage Image不一致,或者同一次构建的数据被分散到了不同Build ID中。
在Parasoft C/C++test中做单元测试时,Stub可以替代外部接口、底层驱动或者当前测试环境无法直接调用的函数。真正容易出问题的并不是“有没有生成桩”,而是测试执行时究竟用了哪一个函数定义,以及当前Test Case的返回值配置有没有在调用前生效。碰到桩函数明明设置了返回值,被测函数却拿到0、false、空指针或者原函数结果时,可以从Stub类型、测试步骤顺序和Instrumentation配置三个方向检查。
Parasoft的MISRA规则应当怎样启用,以及MISRA的违规项又该如何按照等级去筛选,这两个问题的处理方式,主要取决于项目当前使用的是Parasoft C/C++test的桌面版本、命令行版本,还是结合DTP平台来统一查看结果。MISRA规则的启用,并不是简单地把开关打开就算完成了,在这之前,还需要确认项目代码能够被正常分析,编译配置、头文件的路径、宏定义,还有规则集,这几样都是正确的。Parasoft C/C++test这个工具,能够被用在C和C++代码的质量检查上,同时也支持面向安全关键软件的编码规范合规检查,其中就包含了与MISRA有关的规则。
在项目经历过多次扫描之后,单独一份报告已经很难满足分析需求了。想要弄清楚Parasoft DTP里的质量趋势图该怎么看,以及遇到指标口径不一致的问题时如何统一,最关键的一点是得先确认图表使用的项目、筛选配置还有构建版本,然后再去解释缺陷数量、覆盖率和测试结果变动背后的含义。DTP中的筛选配置相当于一组运行时的设定,它负责从数据库里提取特定项目的数据;另外,某些组件还能按照仪表板的设置、指定的筛选配置和目标构建来获取数据。
Java项目在运行过程中出现空指针异常(NullPointerException),并不意味着静态分析工具一定会把它同步报告出来。Parasoft Jtest检查这类空指针问题时,需要结合规则配置、数据流路径、工程依赖还有构建信息去综合判断,如果调用链条太长、扫描范围不够完整、生成的代码没有进入分析,或者日常用的规则集比较轻量,都可能让一部分问题没有被识别出来。遇到漏报的情况,先不要急着把所有规则一股脑全打开,而是应该按照规则配置、工程范围和构建环境这几块,一项一项去检查,这样定位会更加清楚,免得把环境搞得很乱却找不到真正缺口。
Parasoft DTP本身就是一个集中接收和展示质量数据的浏览器端平台,静态分析、单元测试、覆盖率这类结果会先从C/C++test、Jtest、dotTEST、SOAtest等工具送进DTP,再通过Report Center里的看板和组件展示出来。所以看趋势这件事,核心不是先做图,而是先把项目、过滤器、构建和运行配置这几层关系理顺,不然后面即使把图表拖出来,数据也很容易看偏。
很多团队把Jtest接进项目后,第一反应都是先跑一遍规则,可真正到了空指针这一类运行时风险上,常见问题并不是工具没能力,而是配置没选对、规则没单独收口、结果出来后又不会顺着路径往回找。Parasoft官方文档已经把这条链路拆得很清楚,空指针问题主要落在Flow Analysis这一层,内置配置里【Flow Analysis Fast】、【Flow Analysis Standard】和【Flow Analysis Aggressive】都围绕运行时缺陷展开,而【Recommended Rules】和【Critical Rules】又默认带了【Flow Analysis Fast】的规则,所以想把空指针检查跑起来,关键是先选对配置,再决定要不要把规则单独拎出来。
把Parasoft dotTEST接进流水线时,关键不是先选哪家CI平台,而是先把运行入口、测试配置和结果出口这三件事定住。Parasoft官方已经给出比较清晰的接入路径,Azure DevOps可以直接用官方扩展里的Run dotTEST任务,GitHub可以用官方Run Parasoft dotTEST Action,而更通用的Jenkins、GitLab一类流程,本质上还是调用dottestcli去跑指定配置,再把SARIF、XML、HTML或DTP结果接回流水线。