静态代码分析简介
程序静态分析(Static Code Analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。目前静态分析技术向模拟执行的技术发展以能够发现更多传统意义上动态测试才能发现的缺陷,例如符号执行、抽象解释、值依赖分析等等并采用数学约束求解工具进行路径约减或者可达性分析以减少误报增加效率。目前的静态分析工具,无论从科研角度还是实用性角度还有很大的提高余地,国际最好分析工具误报率在5-10%之间,能够报出的缺陷种类也仅有几百种。
与动态分析方法不同的是,静态分析方法不需要执行程序,只需要自动扫描代码,所以,静待代码分析可能会误报程序缺陷。
百度百科
个人理解可将代码省查所做的工作总结为两点
- 如何定义代码缺陷
- 如何以静态的方式分析代码的缺陷,根据规则提取缺陷信息
提取缺陷信息方法
词法分析,语法分析,语义分析,控制流分析,数据流分析,污点分析,无效代码分析等。
CppDepend简介
通常,我们都会利用现有的集成工具去分析代码。在此,介绍一款分析C/C++的静态代码分析工具——CppDepend。
CppDepend的代码规则为LINQ查询,它可以在数秒内构建一个规则。并且,这些规则包含了技术债务评估。
默认的规则集包括了超过100条规则,诸如entangled code,dead-code,API breaking changes和bad OOP usage这样的代码缺陷,都可以通过默认的规则集分析。
CppDepend功能
运行CppDepend,其主界面如下图所示。
CppDepend主要功能如下:
(代码查询)CQLinq
支持LINQ(CQLinq)上的代码查询,轻松编写自定义规则和查询代码。(技术债务估算)Technical Debt Estimation
对于每个问题,通过可定制的C#公式来估计修复的成本和严重性。(优质门)Quality Gates
质量门是C#LINQ(CQLinq)查询,实现PASS / FAIL标准来编码质量。(问题管理)Issues Management
探索问题 只需点击几下,集中精力在紧迫和重要的事情上。(代码质量指标)Code Quality Metrics
代码行,循环复杂性,耦合,嵌套深度,等级,CppDepend支持它们(以及更多)。(诊断)Diagnostics
CppDepend操作使用CQlinq,其易于浏览的所有Clang诊断程序。Clang提供了超过百种诊断。(构建比较和代码差异)Compare Builds and Code Diff
比较两个版本的代码库,并以任意方式来浏览代码差异和更改。(图)Diagrams
让看起来太复杂的代码一目了然。(插件集成)Plugins Integration
CppDepend支持Cppcheck和CPD的XML文件。(架构浏览)Explore Existing Architecture
探索代码如何实际结构化,并阐明架构缺陷。(检测依赖循环)Detect Dependency Cycle
摆脱组件之间的依赖循环,以实现更高的代码可维护性。(趋势监控)Trend Monitoring
获取几乎所有代码指标的趋势图,以掌握应用程序的演进。(线束测试覆盖数据)Harness Test Coverage Data
导入测试覆盖数据,并充分利用它在CppDepend上下文中丰富的功能。(不变性和纯度)Immutability and Purity
CppDepend有助于实现清晰的并发编程。(Visual Studio加载项)Visual Studio Add-in
完整的Visual Studio集成,超快速和轻量级的分析。(生成自定义报告)Generate Custom Reports
根据需求生成分析报告。