测试左移之静态分析

测试左移之静态分析 1. 自动化工具扫描主要方式这是静态分析的主力。工具会像机器人审查员一样按照预设的规则对代码进行地毯式排查。分析方法具体说明实际例子语法与风格检查检查代码是否符合语言的语法规则和团队的编码规范如缩进、命名规则。Python代码函数名应为小写加下划线如果写成驼峰命名如getData工具会提示函数名称应符合蛇形命名法。缺陷模式匹配识别已知的代码坏味道和常见错误模式。Java代码定义了equals()方法但没有定义hashCode()工具会警告覆盖equals时必须覆盖hashCode这可能导致集合类运行异常。数据流分析模拟代码执行路径追踪变量赋值、使用和释放过程。C代码int* p new int; if (condition) return; delete p;——如果condition为真函数提前返回导致内存泄漏工具会标记潜在的内存泄漏路径。控制流分析检查代码逻辑结构是否合理是否存在不可达代码。JavaScript代码function test() { return; console.log(done); }——return之后的语句永远不会执行工具会提示不可达代码。安全漏洞扫描识别常见的安全漏洞如SQL注入、跨站脚本攻击。SQL语句拼接SELECT * FROM users WHERE name userName ——如果userName来自外部输入工具会警告存在SQL注入风险建议使用参数化查询。2. 人工代码审查补充方式工具无法理解业务逻辑的合理性这部分需要人来完成。分析方法具体说明实际例子逻辑正确性审查判断代码是否实现了预期的业务逻辑。开发人员实现了一个计算订单折扣的函数审查者发现函数只考虑了满减没有考虑会员等级折扣与产品需求不符。可读性与可维护性审查检查代码是否易于他人理解和后续修改。一个函数写了500行做了数据处理、文件写入、发送邮件三件事。审查者建议拆分成三个小函数遵循单一职责原则。架构符合性审查确认代码是否遵循了项目的整体架构设计。项目规定业务层不能直接调用数据访问层但开发人员在业务代码中直接写了SQL查询审查者指出应通过服务层调用。‍ 测试人员具体参与哪些地方测试人员在静态分析中不是被动接收报告而是主动参与质量规则的制定和问题的定性。主要体现在以下几个方面1. 制定和维护静态分析规则测试人员的经验转化为规则这是测试人员最重要的参与点。测试人员把自己发现的高频缺陷、典型故障模式转化为自动化的检查规则。测试人员做什么具体实例将线上故障转化为规则之前线上出现过因为浮点数精度导致金额计算错误的问题。测试人员推动在静态分析工具中增加规则禁止在金额计算中使用float/double必须使用Decimal类型。将测试痛点转化为规则测试人员在测试中发现很多Bug是因为空指针引起的。测试人员要求增加静态分析规则所有从外部传入的对象参数在使用前必须进行非空判断。将安全规范转化为规则安全测试人员整理出常见的SQL注入漏洞模式要求在CI门禁中增加对应的安全扫描规则一旦检测到SQL字符串拼接直接阻断构建。2. 参与代码审查用测试思维补充开发盲区测试人员可能不会逐行审查所有代码但会重点参与核心模块、复杂逻辑或高风险变更的代码审查。测试人员做什么具体实例从用户场景质疑代码逻辑开发实现了一个登录失败次数限制功能。代码逻辑是连续失败5次锁定账号30分钟。测试人员提问如果用户在失败4次后第5次成功登录失败计数器应该清零吗如果不清零下一次再输错是否直接锁定——这帮助发现了边界条件未处理的问题。检查异常处理是否完备代码中调用了第三方支付接口。测试人员审查时会关注如果网络超时怎么办有重试机制吗重试会不会导致重复扣款接口返回异常码时代码能正确处理吗验证日志是否便于问题定位测试人员提出这个关键操作没有打印日志如果出问题了我们怎么知道当时发生了什么应该在这里加上业务日志记录入参和出参。3. 审核和分析静态扫描报告区分误报和真问题自动化工具会产生大量告警其中有真有假。测试人员可以协助开发团队过滤误报并对真问题进行优先级排序。测试人员做什么具体实例验证告警的真实性静态扫描报告显示变量X可能未初始化就被使用。测试人员检查代码后发现虽然存在一条理论上的执行路径会导致变量未初始化但这条路径在实际业务中由于前置条件的限制永远不会被执行。测试人员判定这是误报建议忽略或优化代码让工具不再告警。评估缺陷的严重程度扫描报告发现一个潜在的整数溢出问题。测试人员结合业务场景评估这个数值代表的是用户年龄最大值不可能超过150溢出可能性极低属于低风险可以暂缓修复。而另一个SQL注入问题测试人员判定为严重风险必须立即修复。跟踪问题闭环测试人员会建立缺陷跟踪台账记录每个静态扫描发现的问题明确责任人、修复版本和验证状态。修复完成后测试人员会进行回归验证确保问题真的被修复并且没有引入新的问题。4. 推动将静态分析纳入CI/CD门禁质量内建的守门人测试人员会和质量架构师、DevOps工程师一起定义质量门禁的标准确保静态分析成为自动化的质量防线。测试人员做什么具体实例设定阻断标准规定P0级严重和P1级高危的静态扫描问题必须清零否则代码不能合并到主分支。设定覆盖率目标虽然没有直接参与代码编写但测试人员可以提出新增代码的单元测试覆盖率不能低于80%且核心业务代码的圈复杂度不能高于15这些都可以通过静态分析工具进行度量。监控质量趋势测试人员定期查看静态分析报告的趋势图问题总数是在下降还是在上升新增代码引入的问题多不多如果质量趋势恶化测试人员会发起复盘推动团队改进编码和审查流程。