如何设置Parasoft的静态分析,以及怎样确认它产生的误报,许多开发团队在引入代码检查的时候,都会遇到这类问题。静态分析并不是把工具装好,点一次扫描就结束了,在这之前,要去看工程的配置是否准确,挑选的规则集是否合适,在那之后,还要看扫描出来的结果,能不能被开发人员弄明白,愿不愿意去处理。如果配置与真实项目差别很大,告警就会大量出现;如果判断误报时缺少依据,后面的评审又容易反复争论。
把项目接入持续集成之后,单次的扫描结果只能说明当时那一刻的情况,真正值得持续盯着的,其实是缺陷数量、覆盖率和测试结果这几个方面,有没有随着时间在慢慢变好。要谈清楚Parasoft DTP里面的质量趋势图到底该怎样去读,以及不同团队之间如果指标的计算口径对不上,又该怎么去把它拉齐,重点就在于先要搞清楚这些趋势图背后统计的到底是哪些构建、哪些扫描任务,还有哪些代码目录,然后再来判断曲线上的那些变化可不可信。DTP这个平台会接收像C/C++test、dotTEST、Jtest这些工具上报过来的数据,然后通过仪表板上的各个组件,把分析的结果给展示出来。
测试环境一切换,页面上给出保存成功的提示,并不代表目标服务已经在按新配置运行了,这个细节很多人在排查问题时容易忽略。Parasoft CTP对测试环境的管理,主要依赖环境定义、组件实例、变量、Virtualize资源以及Provisioning Action这几个模块一起来完成。团队里常说的“策略下发”,指的就是先把环境的配置保存下来,然后再去执行Provision动作,让配置里定义好的状态真正施加到目标环境上面去。官方文档也提到过,Environment Manager的用途正是把环境通过Provision操作,调整到测试所需要的指定状态。
在项目经历过多次扫描之后,单独一份报告已经很难满足分析需求了。想要弄清楚Parasoft DTP里的质量趋势图该怎么看,以及遇到指标口径不一致的问题时如何统一,最关键的一点是得先确认图表使用的项目、筛选配置还有构建版本,然后再去解释缺陷数量、覆盖率和测试结果变动背后的含义。DTP中的筛选配置相当于一组运行时的设定,它负责从数据库里提取特定项目的数据;另外,某些组件还能按照仪表板的设置、指定的筛选配置和目标构建来获取数据。
接口用例在录制完成以后,一到回放环节就频繁报错,这通常并不是录制功能本身不能用了,而是代理、认证信息、动态参数或者请求结构没有被处理利索。Parasoft SOAtest可以借助Parasoft Recorder把接口流量采集下来,再照着流量生成Smart API Test;录制期间,SOAtest Web Proxy这个代理需要一直保持运行。着手排查的时候,不要一遍又一遍地重新去做录制,应该先看一看失败的请求和真实流量之间,究竟是在哪一个层面上出现了偏差。
Java项目在运行过程中出现空指针异常(NullPointerException),并不意味着静态分析工具一定会把它同步报告出来。Parasoft Jtest检查这类空指针问题时,需要结合规则配置、数据流路径、工程依赖还有构建信息去综合判断,如果调用链条太长、扫描范围不够完整、生成的代码没有进入分析,或者日常用的规则集比较轻量,都可能让一部分问题没有被识别出来。遇到漏报的情况,先不要急着把所有规则一股脑全打开,而是应该按照规则配置、工程范围和构建环境这几块,一项一项去检查,这样定位会更加清楚,免得把环境搞得很乱却找不到真正缺口。
在CTP里说测试策略,真正落地时通常不是单指一条规则,而是把测试场景、环境配置、变量集和执行方式绑成一套可复用的执行方案。Parasoft官方现在把这套链路放在Environment Manager里推进,核心动作包括按环境配置执行test scenario jobs,用环境变量切换同一套资产在不同环境下的取值,以及在新版里为单个测试选择test configuration或为场景映射variable set。所以测试策略要想下发得稳,重点不是手工通知,而是把策略做成环境和作业层面的可执行对象。
很多人第一次用SOAtest做接口测试,容易把录制和断言拆成两件完全独立的事。前面只顾着把流量抓进来,后面才发现生成出来的用例不是太重,就是断言写得太死,接口一改一点点就全红。Parasoft官方资料里其实把这条路讲得很清楚,录制接口一般是先启动SOAtest Web Proxy,再通过Parasoft Recorder打开API Traffic for Parasoft SOAtest开始抓流量;断言这边则更推荐用JSON Assertor或XML Assertor去盯关键字段,而不是把整包响应都按回归快照硬比。
很多团队把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结果接回流水线。