软件静态分析以及工具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