梅 磊 刘先博
(中国电子科技集团38所,合肥,230000)
Klocwork在军用软件测试中的应用
梅 磊 刘先博
(中国电子科技集团38所,合肥,230000)
文摘:分析在软件测试工作中出现的大量重复性工作,引用软件工程化管理的自动化测试思维,自主定制测试脚本,在Windows系统及国产麒麟操作系统下使用Klocwork测试工具进行自动化测试设计、实现和应用,通过在项目开发过程中定期循环交替进行Klocwork的全面检查,发现集成测试和系统测试所不能发现的问题,提高项目代码的质量,降低整个测试过程的成本。
静态分析;静态测试;软件工程化。
随着我国国防实力的稳步提升以及军用装备信息化建设要求的提高,对军用装备软件系统的要求也越来越高,其安全性与稳定性已成为装备研发过程的重中之重。然而,在军用软件开发期间,由于人为因素引入的错误,隐藏了许多难以发现的缺陷。通过使用多种专用的软件代码静态分析工具,既可以有效提高我们测试人员的测试效率,又可以即时的、准确的分析源代码,识别软件中严重的安全性缺陷和质量缺陷,延长复杂软件的生命周期。有效地使用软件静态分析工具实现对军用软件问题的发掘与探索、提高软件测试工作的质量和效率已经成为软件测试领域的应用热点。
Klocwork软件是Klocwork公司基于专利技术分析引擎开发、综合了近年来各种最先进的静态分析技术而形成的一款具有很多突出特征的静态分析工具,利用其专利技术能发现全面且详细的软件缺陷种类,它支持现行市面常用的编程语言(如C、C++和Java等)。同时,还支持多种度量以及代码规范的检查,可以通过设置相应的阈值,提高检测效率。特别针对C/C++语言引用的非法指针、内存泄漏、数组越界及缓冲区溢出等缺陷的检测拥有不俗的表现。该工具对软件架构、编程规则的违反情况提供可视化的架构分析及优化建议,并与多种主流的IDE开发环境进行集成,可持续为大型及超大型(上千万代码行)软件项目提供测试支持。
1.1 工作内容
由于Klocwork的测试环境通常不直接向用户提供自动测试框架或者脚本,而往往要借助于集成开发环境或脚本来实现自动化测试。通常测试前,首先就要明确被测软件的测试环境,在被测软件和测试工具中建立稳固的联系,这样才能顺利保证静态分析工作的进行。
Klocwork是一种基于Client/Server架构的源代码静态分析工具,支持多语言、多平台的各类集成开发环境。同时,利用On The Fly技术可以在配置完成后瞬间开始进行分析,并且可以拖拽式地生成测试报告,极大地提高和方便测试人员在本地查看、修改代码中的错误。在外场的开发人员和测试人员也可以非常方便地利用Klocwork的这一特点,应用Trace Back技术来对发现的问题继续追溯,对Bug的发现和管理也提供了一种新的思路。如果在遇到外场软件项目开发周期紧张的情况下,测试人员可用便携式测试设备在实装环境下完成软件的静态分析工作,然后将测试数据注入本地测试分析数据库内,以供每位测试人员对测试结果进行分析和整理,极大地改善了测试环境的局限性,提高了外场测试工作的灵活性。
Klocwork的代码静态分析环境结构如图1所示。
在当前版本的Klocwork分析界面中,工具将找到的缺陷明确分为致命(critical)、严重(severe)、错误(error)和非预期(unexpected)等10个等级,并且对于各类问题都有明确、详细的解释与说明。同时,对于发现的每个问题,通过简易的操作便可追溯到具体的代码行,直观、简洁地对问题进行分析与修改。特别是,作为严重影响软件正常工作、在日常测试工作中最为重视的致命性错误,Klocwork将空指针引用、缓冲区溢出、数组越界、内存泄漏等19类错误列入其中,并针对每类典型错误都列举了实例,便于操作人员的理解和使用。
Klocwork可以对当前我国军用雷达装备的软件系统研发平台及环境提供完整的支持。其主要特点包括:多语言——C、C++、汇编等;多平台——Windows、Linux等;支持多种编译器——ARM系列、TI系列、WinderRiver系列、Microsoft Visual C++、Green Hills系列等;支持的集成开发环境——Microsoft Visual Studio 6.0及以上、Tornado 2.0及以上、Visual DSP++5.0及以上、QT4.8.0及以上等。
1.2 工作流程
针对基于Klocwork搭建的自动化测试流程必须基于各种编辑器的命令行操作界面方式来设计,同时按照测试人员的测试需求,软件模块的优先级,以及不同程度下软件代码的复杂程度,通过设计和编写符合要求的自动化测试脚本来实现静态分析的自动化测试过程。在命令行界面编译模式下的Klocwork测试工作流程如图2所示。
Klocwork测试工作主要有以下几个步骤。
a)打开安装路径E∶KlocworkServer 10.0config的文件夹中kwfilter.conf文件,查看当前Klockwork命令是否支持被测软件的编译器。
b)运行make-f Makefile clean来清理陈旧的构建,或手动删除已生产的目标文件。
c)使用被测软件的编译器在相匹配的编译环境中对被测软件进行编译。
d)启动KMC服务功能,并创建项目,设置项目属性,同时添加被测软件源代码文件。
e)开始测试执行阶段,利用kwinject命令来获取编译过程信息:kwinject C∶Program Files (x86)Analog DevicesVisualDSP 5.0gmake-378"-f dsp3.mak dsp3_Debug。
f)通过kwbuildproject命令来分析被测软件源代码:kwbuildproject--urlhttp∶//localhost∶8080/my_project-o my_tables kwinject.out。
g)待工具分析结束后,将分析结果上传至服务器,如kwadmin--url http∶//server2∶8080/ load my_project my_tables。
h)登陆http∶//localhost∶8080/即可查看静态分析结果。
Klocwork对于不同编译环境下的分析执行过程虽然大同小异,但仍存在一定程度上的差异。因此,导致编译过程或分析过程出现错误,而无法正常得到静态分析结果。以下将从当前军用软件常用开发平台(Windows、基于linux平台开发的军用软件逐渐转向使用国产麒麟系统)来分别描述在不同平台下,配合不同类型的集成开发环境,Klocwork的静态测试过程。
由于历史原因使得国内很多的军用软件开发环境仍是基于Windows系统,即基于Windows系统开发而来的软件在日常的测试工作中还是占了很大一个部分,因此灵活地使用Klocwork对这类程序进行静态分析就显得尤为重要。下面将以Windows系统下基于DSP++5.0开发环境的军用软件静态测试过程为例,详细描述此类软件的静态分析过程。基于Windows系统的静态分析环境见表1。
表1 基于Windows平台的静态分析环境
具备静态分析测试环境后,按照如图3所示流程进行配置,并进行分析执行过程。
a)打开Visual DSP++的IDE,导入被测软件Pro_1的项目文件,并进行编译。
b)在CMD运行模式下,测试DSP++编译器的可用性:gmake-378-h。
c)将当前工作路径转换至Pro_1源代码所在路径E:mcfx_4dspPro_1。
d)Clean项目Pro_1的生成文件,并用命令行对源代码重新进行编译:gmake-378-f Pro_1.mak Pro_1_Debug“.constant_object_parameter.c”。
e)编译通过后,再次执行Clean操作,并使用kwinject命令重新获取编译过程信息:kwinjectgmake-378-fPro_1.mak Pro_1_Debug,编译结束后,在Pro_1的根目录下生成kwinject.out的文件。
f)在Klocwork中创建Pro_1项目ksadmin-url http∶//localhost∶8080/create-project mcfx_4dsp_1。
g)对Pro_1使用kwbuildproject命令进行分析:kwbuildproject-urlhttp∶//localhost∶8080/mcfx _4dsp_3-o my_tables kwinject.out,同时在Pro_1根目录下生成my_tables文件夹。
h)向服务器数据库上传本次分析结果:kwadmin-urlhttp∶//localhost∶8080/loadmcfx_4dsp _3 my_tables。
i)登陆服务器客户端,查看静态分析结果。
近年来,随着网络技术和信息技术的飞速发展,网络技术和信息技术安全已经与我国政治、经济、国防、文化等公共安全密不可分。而我国操作系统市场在以往一直被微软的Windows垄断,所以推动国产操作系统的发展也是国家重要的发展方向。中标麒麟(GeoKylin)操作系统是目前国内安全级别最高的操作系统,并且可以为各类用户提供全方位的应用安全保护,可以为军用软件提供更加安全、可靠的运行环境。基于中标麒麟系统的静态分析环境见表2。
表2 基于麒麟平台的静态分析环境
由于麒麟系统基于linux内核,与Windows系统下使用Klocwork进行静态分析的过程会有异同,而且更加繁琐。为了能够缩减配置的步骤,提高开展静态分析的效率,我们利用系统提供的命令,编写静态分析脚本,部分脚本如下所示:
“#####功能:klocwork自动分析项目脚本
#************被测软件参数************
#被测软件名称
project_name="Pro_2"
#被测软件makefile文件路径
project_path=/home/Project Case/Pro_2/exe
#********klocwork安装的参数***********
#klocwork安装目录
kloc_dir=$HOME/klocwork
#klocwork server
KWSRV=http∶//localhost∶8080
#*****************************
……
#Create a project
kwadmin--url$KWSRVcreate-project $project_name
……
#Analyze the project
clean_tables_dir$tables_directory
mkdir$tables_directory
kwbuildproject--url$KWSRV/$project_name-f-o$tables_directory kwinject.out
……”。
在使用过程中应特别要注意的是,在使用前,需要将被测软件参数中的项目名称和路径修改为Pro_2对应的项目信息。若为初次使用,必须要设置Klocwork安装的参数,而且项目名称、路径均不能使用中文。脚本自动执行完成后,系统会将静态分析结果自动上传至测试数据服务器以供测试人员使用。
对某军用软件项目4种主流测试工具(Pro_1、Pro_2经过Klocwork、QAC、Testbed、C++Test)进行静态分析测试,测试效率与测试结果统计分别见表3、表4。表3为几种主流测试工具对同一项目测试后的统计时间;表4为工程项目经过测试后得到的缺陷级别、缺陷类型及缺陷个数的统计结果。
由表3可以得出,对于项目Pro_1的静态测试工作,4种测试工具所用时间差距不大,基本可忽略不计。其中Klocwork由于省略了测试类型人工选择的过程,所耗时间最短,拥有较高的测试效率,而Testbed由于测试类型较多,所以花费的时间最长。后期,选用更大代码量的项目Pro_2来进行静态分析,从测试结果来看,Klocwork自动化测试方法的优越性便体现出来,成为唯一一个在1h以内完成测试分析的工具。因此,对于软件项目而言,代码量越大,Klocwork的自动化测试过程所体现的优越性会越明显。
表3 主流静态分析工具测试效率比较
表4 主流静态分析工具测试结果比较
表4列举了4种测试工具发现的10种同类问题及个数的统计结果,而对于个别只被其中某一种或两种工具检测到的问题,此次则未列入其中。
由结果可以得出,在此次静态分析测试过程中,Klocwork共发现了70个问题缺陷,虽然问题总数稍少于QAC,但其中所包含的致命缺陷(19)和重要缺陷(18)均为4种工具中发现个数最多的。而这也恰恰是我们针对软件静态分析最为重视的地方,因为这些问题的存在不仅会导致软件程序的易读性、维护性等方面出现问题,特别情况下,还可能导致出现程序死机、异常退出等严重状况。同时,Klocwork工具所发现的缺陷更多的是一类比较隐秘、不易发现的问题,如数组越界、资源泄漏等,都容易造成不可意料的经济损失和安全隐患。
各类代码静态分析工具均有各自的侧重点。如:QAC分析偏重编码风格、冗余代码、函数类型等编码规则方面的审查;Klocwork软件则侧重于内存泄露、空指针引用等静态分析方面;Testbed倾向于发现代码本身不符合编码规则的问题;而C++Test能够很好地发现变量未初始化和资源泄露等各类代码结构的问题。因此,在日常工作中,通常会将各种测试工具配合使用,取长补短,不仅能提高代码静态分析的覆盖率,而且能很好的提高测试效率、拓展测试的深度与广度,这种方式也逐渐成为大多数软件测评机构的选择之一。
直接针对代码进行静态分析可以在系统测试前找到很多问题、大幅度减少在系统测试时发现问题以及修复问题的时间,最终提高软件测试环节的效率。在项目开发过程中定期循环交替进行Klocwork的全面检查,能够发现集成测试和系统测试所不能发现的问题,不断提高项目代码的质量,降低整个测试过程的人力成本、时间成本。这对于军用软件较高产品成熟度的要求显得尤为重要,也使得自动化测试工具Klocwork的广泛使用,已然成为当前普遍的应用趋势。
[1]尹浩,于秀山.程序设计缺陷分析与实践[M].北京∶电子工业出版社,2011.
[2]蔡建平.嵌入式软件测试实用技术[M].清华大学出版社,2010.
[3]黎连业,王华,李淑春.软件测试与测试技术[M].清华大学出版社,2009.[4]许育诚.软件测试与质量管理[M].电子工业出版社,2004.
[5]杜会斌,吴晓娟,周旭.自动测试在军事电子技术中的应用[J].无线电工程,2005,35(9).
[6]MARK,FWESTER.软件测试自动化技术与实例详解[M].电子工业出版社,2000.
[7]路晓丽,等.软件测试技术[M].机械工业出版社,2007.
[8]Cem Kaner,Jack Falk,Hung Quoc Nguyen.计算机软件测试[M].机械工业出版社,2005.
[9]吕云翔,王洋,肖咚.软件测试案例教程[M].机械工业出版社,2011.
[10]梅尔斯.软件测试的艺术[M].机械工业出版社,2006.
梅磊(1987年—),硕士,软件系统研究部助理工程师,研究领域:软件测试、软件工程化。