麒麟系统下Klocwork的静态分析方法

2019-09-10 20:52马萌谷伟赵煜
计算机与网络 2019年20期

马萌 谷伟 赵煜

摘要:静态分析是软件测试的最初阶段,充分有效的静态分析可以显著降低软件测试成本、提高软件质量。介绍了Klocwork检查工具在中标麒麟操作系统中的详细检查步骤与检查脚本、对检查出来的缺陷的处理,以及Klocwork工具在军用软件静态分析中的安装过程及使用步骤。典型案例表明,Klocwork检查有助于及时发现并解决C/C++软件源代码的各种缺陷,从而提高软件质量和安全性。

关键词:麒麟操作系统;静态分析;Klocwork工具

中图分类号:TP316文献标志码:A文章编号:1008-1739(2019)20-58-3

0引言

近年来,特别是“微软黑屏”事件和“棱镜门”事件给信息安全敲响了警钟,各种信息安全事件频繁发生。硬件设备国产化和软件自主可控是实现信息安全亟需解决的问题,尤其在信息安全要求较高的应用领域,例如军事、国防及保密领域已经普遍采用国产操作系统作为研究与应用平台,其中中标麒麟操作系统已经成为国产化自主可控的主流操作系统。因此,自主可控操作系统的广泛应用已经是软件发展的大趋势。

随着软件规模和复杂性的大幅度提升,软件质量可靠性的问题日益突出,我国大力开展相关软件的研发工作,软件测试是保证软件质量的关键技术之一,同时也是软件开发过程中的一个重要环节。军用软件的安全性要求比较特殊,质量标准要求高,给软件测试和质量保证带来相当大的难度。软件测试过程中,静态分析是首先需要执行的,对软件质量起到举足轻重的作用,进行高效静态分析是系统测试需要考虑的首要问题[1]。

1静态分析及Klocwork工具

静态分析(模块测试)测试软件设计的最小单位解决软件在语法、格式或逻辑等方面的差错以及是否符合功能要求。这个阶段更多关注程序的实现细节,需要从程序的内部结构出发设计测试用例,也是软件测试过程中最早期的测试活动。主要依据程序源代码的详细设计说明书,测试者需要了解该模块的I/O条件和模块的逻辑结构。静态分析主要采用白盒测试用例,辅助以黑盒测试的测试用例,使之对任何合理的和不合理的输入都能鉴别和响应。静态分析主要包括模块接口测试、局部数据结构测试、路径测试、错误处理测试和边界条件测试5个任务。

Klocwork工具是Klocwork公司综合应用近几年最先进的多种静态分析技术,基于其专利分析引擎技术,开发的测试工具,是一款非常优秀的静态分析工具[2],主要特点有:①发现软件缺陷的种类覆盖广,既包括安全漏洞缺陷,又包括软件质量缺陷,同时还能对变成规则、软件架构的违反情况进行分析;②支持多种开发语言,可分析Java和C++/C程序;③可以对软件的各种度量进行分析;④可以全面地分析软件,既可以对可视化软件进行优化、分析,又能对软件的缺陷进行分析;⑤可以对千万行级代码的超大程序进行分析;⑥可以对多种主流IDE开发环境提供集成。除此以外,Klocwork还可以针对软件运行时的错误,识别数组越界、非法指针引用、非法浮点数操作、不可迭代码及无限循环等问题。

2基于中标麒麟操作系统的Klocwork检查

2.1中标麒麟操作系统

中标麒麟操作系统是一款面向桌面应用的图形化操作系统,针对X86及龙芯、申威、众志、飞腾等国产CPU平台进行自主研发,提供性能最优的操作系统。通过进一步对硬件外设适配器的支持、对桌面应用的移植优化和对应用场景解决方案的构建,完全满足项目支撑。系统除给出基本功能外,还可以根据客户的具体要求,针对特定软硬件环境,提供定制化解决方案,实现性能化和个性化功能定制[3]。中标麒麟操作系统是国家重大专项的核心组成部分,是民用、军用“核高基”项目桌面操作系统的重要研究成果,成功通过了多个国家权威部門的测评,为实现操作系统领域“自主可控”的战略目标做出了重大贡献,在国产操作系统领域市场占有率稳居第一。

2.2 Klocwork的安装

中标麒麟操作系统安装Klocwork,即Linux/Unix系统下安装Klocwork,分为3步:

第1步:安装服务器。与Windows系统不同,Windows直接下载安装包,点击安装包,按照提示完成安装。麒麟操作系统安装服务首先需要检查文件执行权限,如果没有执行权限,需要使用chmod命令修改权限,然后执行安装命令安装klocwork Server,命令为: -a-i[-p],如果不加-p选项,projects_root默认安装在安装目录下,具体的安装信息,需要在命令行下输入 -h查看。要注意的是不要使用root用户安装klocwork服务端软件,安装后将license文件拷贝到projects_root/license目录下[4]。

第2步:安装加密狗驱动。对使用加密狗作为License服务认证标识的情况下,应正确安装加密狗驱动(要使用root用户来安装),具体步骤如下:

①找到驱动程序文件Sentinel_LDK_RedHat_and_SuSE_ RPM_Run-time_Installer.tar.gz,解压缩;

②到驱动程序目录下,执行安装程序:cd Sentiel_LDK_ RedHat_and_SuSE_RPM_Run-time_Installer Rmp-ivh aksusbd-1.16-1.i386.rpm;

③装完驱动之后,插上USB加密狗,看到USB加密狗上的小灯亮起,表示驱动已经装好;

④运行验证程序,以验证驱动是正确的。

第3步:检查安装文件执行权限。如果没有执行权限,请使用chmod命令修改权限,执行安装命令安装Klocwork User。

2.3执行Klocwork检查

麒麟操作系统与Windows有一定区别,麒麟操作系统不分硬盘,所有文件都是在home目录下,其他的步骤和Windows大同小异,具体步骤为(以下步骤以Project为具体项目名称,Project/project-Debug为项目路径,Pro为创建在浏览器中的项目名称),具体步骤如图1所示。

第1步:cd到*.pro工程所在的路径下执行qmake,即cmd中执行d:\qttstt>qmake,也可直接在项目中重新构建项目,允许工程编译中出现警告,但不能有错误,这是测试整个项目的必备前提,否则静态分析没有任何意义。

第2步:插入加密狗启动服务,包括启动license服务、数据库服务、Web服务和分析引擎服务,linux/unix下启动服务和Windows命令行启动方式一致,启动服务命令:kwservice-rstart;停止服务命令:kwservice-rstop。以Project为具体项目名称,project/project-debug为项目路径启动服务的命令为(开机启动过可忽略该步)/home/Project/klocwork/server/bin/kwservice -r/ home/Project/klocwork/server/projects_root start。

第3步:使用make clean删除产生的目标文件或手动删除除bin, makefile以外的文件。

第4步:执行kwinject mingw32-make -f Makefile,生成kwinject.out文件。开发环境如果使用mingw32,按照上述口令执行,如果报mingw32 is not executable错误,需在系统环境变量中添加mingw32-make.exe路径,如果使用VS编译器,则使用kwinject nmake -f makefile命令。

第5步:在服务端建立分析项目(可登陆浏览器查看项目创建是否成功):/home/Project/klocwork/server/bin/kwadmin --url http://localhost:8080 create-project Pro。

第6步:分析项目:/home/Project/klocwork/server/bin/ kwbuildproject--url http://localhost:8080/ Pro-f-o table kwinject. out,-o表示输出参数,执行此命令后,会输出分析结果到table目录中,-f表示强制输出到-o指定的目录;如果该目录不为空,则清除目录重新使用。

第7步:加载数据到数据库:/home/Project/klocwork/server/ bin/kwadmin --url http://localhost:8080 load Pro table。

第8步:登陆浏览器查看分析结果。在浏览器中输入http://localhost:8080,登陆页面后输入用户名,密码为空,页面上将打开项目列表,选择要查看的项目,点击Reports,进入报告页面,点击Issues,进入缺陷列表页面即可。

3结果分析与处理

实际测试需要投入大量时间和精力,测试工作同样也可以采用开发和实用工具,即自动测试工具。采用自动测试工具不但能提高测试效率还能模拟许多人工无法模拟的真实场景。

测试工具在问题处理方面也有很大优势,在现实测试项目中,有些项目在测试过程中会出现软件偶然死机或其他不易复现的问题,对待此类问题,测试和开发人员都很难排查问题所在,运用测试工具,即可测出此类问题,并对问题进行修复,例如在测试中要删除某个模块,软件突然异常退出,然后重复很多次现象仍难以复现。针对此现象,使用KLocwork工具进行代码走查,分析代码走查结果,可以找到解决办法。

目前软件测试工具主要有Klocwork,QAC,Testbed及C++Test,测试效率如表1所示,其中Klocwork在发现重要缺陷和致命缺陷检测率高于其他3个测试工具。QAC分析偏重编码风格[5]、冗余代码及函数类型等编码规则方面的审查;Klocwork侧重于内存泄露和空指针引用等方面;Testbed倾向于发现代码本身不符合编码规则的问题;而C++Test更侧重于发现变量未初始化和资源泄露等代码结构问题[6]。

4结束语

使用测试工具的目的是提高软件测试的效率和软件测试的质量,手工测试可以发现新缺陷,自动化测试主要用于发现旧缺陷,软件测试需要手动测试与自动测试相结合。在软件开发的任意阶段都可以借助测试工具及时发现错误,对软件的成本控制及软件开发效率的提升都非常有幫助。鉴于测试工具功能的日益完善,软件开发人员对其依赖程度逐渐增加,工具也有片面性及漏报、误报,仅仅依赖静态分析还不够,还需要进行动态测试。动态测试与静态测试相结合,从而提高测试的有效性。

参考文献

[1]梅磊,刘先博.Klocwork在军用软件测试中的应用[J].航天标准化,2017(3):38-42,47.

[2]罗春雷,于红增,卢华斌.自动化技术在Klocwork测试中的应用[J].无线电工程,2010,40(1):44-47.

[3]史黎黎,牛宾.基于Linux系统的即时通信软件开发[J].无线电工程,2015,45(8):94-98.

[4] Mark F.软件测试自动化技术与实例详解[M].北京:电子工业出版社,2000.

[5]梁倩,张熠.一种基于QAC和Klocwork软件的静态测试方法[J].计算机与网络,2012,38(10):58-60.

[6]周元哲.软件测试[M].北京:清华大学出版社,2013.