浅述基于Klocwork的QT开发环境软件代码审查
2021-02-03陈莹赵玉丽
陈莹 赵玉丽
南京莱斯电子设备有限公司 江苏 南京 210000
引言
QT是面向对象的应用跨平台的C/C++语言工具包,QT应用程序设计方法遵循面向对象的编程方法。编写QT应用程序的主要方法是基于已有的QT类进行编写用户类。它既可以开发GUI程序,也可以开发非GUI程序,比如控制台工具和服务器。QT拥有很多的窗口部件,如按钮、菜单、滚动条和应用程序窗口等,这些窗口部件组合起来可以创建很多种用户界面[1]。
1 背景介绍
QT开发环境能够跨平台运行,目前支持的平台系统有:Linux(32位、64位)(包括中标麒麟平台),MacOSX以及Windows平台。它提供给应用程序开发者建立图形用户界面所需的功能。QT很容易扩展,并且允许真正的组件编程。QT利用signal/slot(信号/槽)机制实现对象之间的通信。signal和slot没有构成一一对应的关系,同一个signal可以连接很多个slot,多个signal也可以与某一个slot相连。虽然signal/slot机制比回调函数的速度缓慢,但缓慢速度并不明显。特别是在嵌入式系统中这些signal和slot使用不多的场合,这种速度上的损失可以忍受,并且该种机制具有简明性和灵活性[2]。开发团队在对应的集成和测试中若能有效发现违反编码规则的问题、软件代码缺陷和存在的安全隐患漏洞,如:内存及资源管理错误、内存泄漏、空指针引用、未初始化的变量、未经验证的用户输入、数组边界采用不可信数据,可以大大降低系统后续风险,同时减少严重经济损失甚至灾难事故的发生概率[3-5]。应用源代码分析工具Klocwork,不需设计测试用例,也不需运行程序,就能够快速检测出Windows、Linux操作系统下C、C++、Java语言代码漏洞、代码设计缺陷,并同时可生成详细、全面的缺陷修复率以及其他关键软件度量的报告。
1 传统模式的代码审查
通常情况下,Klocwork可以通过新建一个测试项目,输入项目名,选择文件类型,并选择要分析的dsw或dsp工程名,然后在valid configurations栏下面选择debug选项,钩选生成测试报告,从而完成测试项目的生成。
代码审查的具体方法为:
1.1 设置环境变量
将qmake、nmake加入环境变量,或可修改Kwcc-config.xml加入头文件的路径,以消除分析错误防止分析结果不准确。
1.2 创建一个新项目
如果这个项目是第一次分析,就在Klocwork上创建一个新项目,使用命令为kadmincreate-project<my-project-name>,如果不是第一次分析的,就不用再次创建新项目了,使用原来创建的项目名即可。
1.3 导入kb文件
导入kb文件,命令为:kwadmin import- config <myproject-name>QT 4.6.2kb
1.4 根据.pro文件生成.out文件
打开VS命令窗口,执行命令,如D:QTQT5.3inqmake.exe,执行成功后,会在.pro工程目录下生成makefile、makefile.debug、makefile.release三个文件。在VS命令窗口中,执行kwinject nmake -f makefile.release命令,可以在.pro文件目录下看到有.out文件生成,打开生成的.out文件,可以查看到正确的版本号和相关的.out信息[6]。
(1)执行nmake -f makefileclean命令
在VS命令窗口中,执行nmake -f makefile clean命令,可以根据输入调试信息查看默认用的哪个makefile。例如,nmake -f Makefile.release clean
(2)使用klocwork分析QT项目
使用Klocwork分析QT项目的命令为 kwbuildproject
-project<my-project-name>-f-o tables kwinject.out,此步骤即build文件。
(3)将分析后的项目结果导入数据库
将分析后的项目结果导入数据库的命令为:kwadmin load<my-project-name>tables,此时可进入Klocwork start page中进入 project list里查看.pro工程的问题列表。
但是Klocwork Insight版本对QT的支持并不完全,比如针对QT4.7和QT5.4等开发环境,无法生成对应的out文件,目前缺少可以直接进行广泛代码审查的测试脚本。下面就在实践中总结的通过命令行方式进行代码审查的脚本方法进行探讨。
2 设置脚本进行代码审查
2.1 设置脚本对QT4.7开发环境下的代码审查
(1)创建工程,创建检查工程需要执行如下指令
. /K10 /server /bin/kwadmin-urlhttp://安装Klocwork工具的服务器IP地址: 8080 create -project,可以通过浏览器网页检查工程创建情况,登录http://localhost:8080/输入用户名Administrator 密码为空,查看工程创建情况。
1)编译生成中间文件
cd到工程目录下,找到Makefile文件,执行makeclean命令; 执行kwinject -o Myproject.out make生成out文件。
2)分析中间文件
kwbuildproject-add-analysis-options=--lef-planner-inmemory-project Myproject-o tables -f kwinject.out。
执行命令后,到工程目录下,生成tables目录成功。
3)生成报告
执行命令 kwadmin load Myproject tables。
4)查看报告
登录 http://localhost:8080/查看工程,点击工程选择 issues列表,查看问题描述。
2.2 设置脚本对 QT5.4开发环境下的代码审查
(1)创建工程,创建检查工程需要执行如下指令
. /K10 /server /bin/kwadmin-urlhttp://安装Klocwork工具的服务器IP 地址: 8080 create - project,可以通过浏览器网页检查工程创建情况,登录http://localhost:8080/输入用户名Administrator密码为空,查看工程创建情况[7]。
(2)编译生成中间文件
1)cd到QT安装路径下,…mingw491-32in,执行qmake.exe命令。
2)cd到工程路径下,执行clean命令:…mingw32-make -f Makefile.Debugclean。
3)执行kwinjectmingw32-make-f Makefile.Debug生成out文件。
(3)分析中间文件
kwbuildproject add-analysis-options=--lef-planner-in-memory--project Myproject -o tables -f kwinject.out。
执行命令后,到工程目录下,生成tables目录成功。
(4)生成报告
执行命令 kwadmin load Myproject tables。
(5)查看报告
登录 http://localhost:8080/查看工程,点击工程选择issues列表,查看问题描述。
3 检查结果分析与处理
通过脚本对QT环境下的代码审查,可适用于各通用平台,且不需要生成中间过程out文件,方法简便易行。确认是源代码问题,修改源代码后重新合入版本库,启动新一轮的Klocwork检查;根据新的检查结果确认代码缺陷是否已经被解决,已经解决掉的缺陷呈现状态为前一次检查出来的缺陷数量减少。确认是误报的缺陷,登录Klocwork检查的WebUI方面完成误报缺陷的屏蔽,屏蔽成功之后分析结果的缺陷数也会减少[8-9]。
4 典型案例
某公司有个软、硬件结合的大型开发项目。分别在Windows 7 操作系统、QT环境下安装Klocwork进行代码检查。对该模块进行检查的扫描结果如下表所示。查结果报告中给出了模块的告警数量,并详细列举了缺陷的类型与缺陷定位。开发工程师通过登录检查的WebUI页面检查结果报告,对产品源代码进行分析和处理,将缺陷归零,有效提高了代码质量。
检查的扫描结果表
工作实践表明Klocwork检查有助于及时发现并解决QT开发环境下软件源代码的各种缺陷,便于产品主管了解工作进度和解决存在的问题,进一步提升产品质量。
5 结束语
本文设计了广泛适用于通用平台的Klocwork代码审查工具的脚本,并通过QT4.7/QT5.4开发环境的适应举例阐明了该脚本的易用性和可行性。在klocwor代码审查实践的基础上,对klocwork如何支持QT开发环境下的.pro文件问题审查进行了详细的分析说明,从而对软件开发人员和测试人员有较好的参考价值。