静态代码分析技术主要有:
1)词法分析:通过使用正则表达式匹配方法将源代码转换为等价的符号流,生成相关符号列表。
2)语法分析:通过使用上下文无关语法将相关符号整理为语法树,判断源程序结构上是否正确。
3)抽象语法树分析:将程序组织成树形结构,树中相关节点代表了程序中的相关代码。
4)语义分析:对结构上正确的源程序进行上下文有关性质的审查,进行类型审查,审查源程序有无语义错误,为代码生成阶段收集类型信息。
5)控制流分析:生成有向控制流图,用节点表示基本代码块,节点间的有向边代表控制流路径,反向边表示可能存在的循环;还可生成函数调用关系图,表示函数间的嵌套关系。
6)数据流分析:对控制流图进行遍历,记录变量的初始化点和引用点,保存切片相关数据信息。
7)污点分析:基于数据流图判断源代码中哪些变量可能受到攻击,是验证程序输入、识别代码表达缺陷的关键。
8)无效代码分析:根据控制流图可分析孤立的节点部分为无效代码。
以下是使用高级静态分析工具的一些主要优缺点。
优点:先进的静态分析器可以更早地预防软件缺陷。
缺点:在将代码提交到构建之前,您需要让开发人员运行静态分析器。
优点:高级静态分析器会为每种语言提供专门的支持。
缺点:这意味着大多数工具都只适用于特定的编码语言——尤其是C或 C++。这导致组织中有些团队使用C/C++,而其他团队则使用Java等语言的情况越来越普遍。
优点:高级静态分析器可以提供代码审查功能,改善开发人员之间的协作。
缺点:许多团队可能已经有了独立的代码审查工具。
其他优点:高级静态分析仪的利大于弊。
-
误报率和漏报率更低 -
提供最佳实践建议,改善代码质量 -
执行编码标准,满足功能安全要求
示例
Perforce静态代码分析器(Helix QAC和Klocwork)是高级静态分析工具的代表。这两种解决方案都都能在问题出现之前识别出更多的软件缺陷。Helix QAC和Klocwork为C和C++提供专门的支持。它们甚至还提供代码审查功能,让开发人员更容易在源代码上进行协作。
总之,许多开发人员在软件部署前都会使用这些工具来帮助发现问题。无论您使用的是Lint工具还是高级静态分析工具,都应该在开发流水线中尽早的使用,以确保节省时间并快速修复bug。
Linting有助于确保代码库的一致性和可维护性,并适用于在整个开发团队中实施最佳实践。因此,如果您的需求比较基础,那么Linting可以让您在CI/CD过程中尽早发现潜在问题,而不会像静态分析那样占用大量资源。
高级静态分析更适合具有复杂代码库的大型项目。在这些项目中,安全性、性能、可靠性、代码质量和合规性都值得维护。静态分析的自动化程度更高,可以在编码阶段发现Linting工具遗漏的问题,从而减少手动修复的时间。静态分析工具不仅可以强制执行标准合规性,还可以提供可定制的报告来证明合规性。
原创文章,作者:速盾高防cdn,如若转载,请注明出处:https://www.sudun.com/ask/77346.html