软件静态分析以及工具Klocwork介绍
1. 软件静态分析
软件静态分析无需执行程序代码,就能发现代码的质量和安全问题,这种技术能够把缺陷的发现和解决时间向前推移至编码阶段。从而显著降低缺陷解决的成本,提高软件的质量。
一般来说,静态分析的准入条件是代码能够通过编译,而它的退出条件则是所报告的可能存在的缺陷都得到合理的评估。
2. 软件静态分析与编译,代码审查,动态测试的关系
编译主要对源代码进行语法和语义分析。
静态分析工具在代码通过编译之后再对代码进行分析,通常可以嵌入到IDE,或者通过编辑makefile(c/c++),重新进行工程的集成构建。静态分析工具相比编译器而言,对代码进行了进一步严格的检查,像空指针引用,内存管理,数组越界堆栈溢出,未初始化数据引用,编程风格都可以通过静态分析工具检查出来。这些都超出了编译器的功能范畴。
如上所述,静态分析用于检测比较通用的编程问题,借助专业的工具,而代码审查则依赖开发人员,它除了涵盖静态分析中常见的编程问题之外,当然还包括对特定场景的分析和理解。静态分析可以简化代码审查,降低代码审查的工作量。
静态分析无需执行源代码,而动态测试则是对运行的程序进行测试,后者依靠特定的输入来判断输出是否符合期望。
3. Klocwork静态分析工具
静态分析工具很多,商业工具比较有名的有Klocwork,coverity,pc-lint,开源的有splint,findbugs等。这里对Klocwork做一个简单的介绍。
Klocwork帮助开发者构建更加安全可靠的软件,早期发现代码中的质量缺陷。它通过遍历所有的执行路径来确定代码是否存在问题,特别适合于大型工程。
Klocwork提供了如下组件,见图中蓝色部分,主要的安装包分为server package和user package。
Server package主要包括license server, database server, Klocwork server, Build Tools和Projects Root,各模块的具体功能介绍可以参考http://www.klocwork.com/products/documentation/current/About_the_Klocwork_packages_and_components
我们需要完成集成构建,它主要依赖于build tools组件,则需要安装server package
Klocwork集成构建的主要过程,以C/C++为例,可参见下图
· 创建工程->(create project database)
kwadmin --url http://server2:8080/ create-project my_project
· 获取编译设置->(build spec)
kwinject <my_build_command>
输入常常是makefile系列文件
· 运行->results in Tables
kwbuildproject --urlhttp://server2:8080/my_project --tables-directory /my_tables kwinject.out
得到分析结果和报告,存储在tables文件夹里面
· 上传到数据库(update project database)
kwadmin --url http://server2:8080/ load my_project /my_tables
详见Klocwork开发者网站文档http://www.klocwork.com/products/documentation/current/Klocwork_Insight_Documentation