缩略图
Mobile Science

软件测试用例文档自动生成工具设计及集成应用研究

作者

杨明鹏 胡业火

贵州航天风华精密设备有限公司 贵州贵阳 550009

1. 概述

软件测试是保证软件产品质量的重要手段。单元测试一般通过设置软件模块的外部输入条件,检查输出结果是否与预期一致的方法来进行。外部输入条件包括正常条件和异常条件,通过不同条件的施加,对软件模块的全部语句和判定条件进行遍历,检查软件模块执行结果是否正确。

传统的单元测试方法为设计测试用例执行后,人工记录输入条件、输出条件和执行结果,并将其写入测试说明、测试报告中。采用这种方法工作量大,不利于检查和维护测试用例的动态删减,需要耗费大量人力物力,且易出错等问题。

本文研究采用测试用例智能分析、文档自动化生成的方法,自动生成测试说明、测试报告,不仅提高了工作效率,并保证文档的质量。

2 . 词法分析

词法分析的功能实现为:扫描源程序字符流,按照源语言的词法规则识别出各类单词符号,并产生用于语法分析的符号序列,即将字符串源程序转换成符号串源程序。程序设计语言中的保留字或关键字、标识符、常数、各种运算符等都是单词符号的实例 [1]。

词法分析的功能是识别出具有独立意义的单词,而输出的则是这些单词的符号。在程序设计语言中,单词符号是最基本的语法单位,具有确定的语法意义。以C 程序为例,通常程序语言的单词符号有如下6 种。

保 留 字。if、else、while、do、break、case、continue、default、for、goto、return、switch 等 12 个保留字在程序语言中具有固定的意义,是编译程序识别各类语法成分的依据,用户不能用它们作为标识符;

标识符。由用户定义,用来表示各种名字,如变量名、函数名、数组名等;

无符号数。包括整数、浮点数,可由一般计数法、科学计数法来表示;

单分界符。如+、-、*、/、;、(、) 等为单分界符双分界符。如>=、<=、!=、== 等为双分界符;

转义序列。如 \n、\t、\b、\r、\f、\\、\’、\ddd、\”、\0 等。

词法分析的输出常采用二元式,单词类别通常用一个整数类码或单词记号表示,单词记号比整数类码含义明确。例如,保留字 for,可直接用同样的字符串 for 作为单词记号来表示,如果用整数类码,含义就不直观。用汇编语言编写词法分析程序时,单词类别常用整数类码表示,因为用单词记号处理起来比较麻烦。而如果用高级语言编写词法分析程序,那么采用单词记号则更自然,主要是高级语言提供了字符串处理函数,处理助记符号时不再烦琐。一个语言的单词类别如何分类、分成几类,怎样编码,主要取决于技术处理上的方便就行。标识符一般归为一类,常数则按类型 ( 整数、实数等 ) 分类。保留字即可将全体定义为一类,也可以一字一类。分界符可单独作为一类,也可以采用一符一类的分类方法。采用一字一类或采用一符一类的分类方法处理起来更方便。因为,如果一个类别只含一个单词符号,那么,对于这个单词符号,类别编码就完全代表它自身的值,词法分析就不必输出其值了。

单词值的输出也主要取决于处理上的方便性。对于保留字和分界符,如果要输出单词值 ( 不是采用一符一类时 ),则可采用整数形式的内部编码或其自身字符串的编码。对于标识符,则用自身的字符串编码来表示。常数即可用自身的值来表示,也可用字符串的形式来表示。有的编译程序在词法分析阶段就建立符号表,这样对于标识符和常数,其单词值可用标识符在符号表中的地址来表示,常数在常数表中的地址来表示。

3 语法分析

语法分析是编译过程的核心部分。语法分析的任务是:按照文法,从源程序符号串中识别出各类语法成分,同时进行语法检查,为语义分析和代码生成做准备。执行语法分析任务的程序称为语法分析程序,也称为语法分析器,它是编译程序的主要部分之一 [2]。按语法树的建立方法,语法分析方法分成两大类,即自顶向下分析和自底向上分析。

递归下降分析的方法其思路是将文法中的每一个非终结符 U 的文法规则看作是识别 U 的一个过程定义,为每个非终结符号构造一个子程序,以完成该非终结符号所对应的语法成分的分析和识别任务。如果 U 的文法规则的右部只有一个候选式,则按从左向右的顺序依次构造规则 U 的识别过程代码。如果有终结符号,判断能否与输入的符号相等,如果相等,表示识别成功,读入指针指向下一个输入符号;如果不等,则意味着输入串此时有语法错误。如果是非终结符号,则简单调用这个非终结符号的子程序,由这个子程序完成该非终结符号所对应的语法成分的分析和识别任务。当一条规则右部有多个候选式时,则根据每个候选式的第一个符号确定该候选式分支。只有被调用的分析和识别某语法成分的子程序匹配输入串成功,且正确返回时,该语法成分才算真正获得识别。

自底向上分析方法,也称为移进归约法。它的一般过程是:设置一个寄存符号的先进后出栈,称为符号栈。在分析进行时,对输入符号逐个地按扫描顺序移进栈里;当栈顶符号串形成一个句柄( 即为某条规则的右部) 时,就进行一次归约,即把栈顶构成句柄的那个符号串用相应规则左部的非终结符号来代替。接着再检查栈顶是否又出现了新的句柄,若出现新的句柄,就再进行归约;若没有形成新的句柄,则再从输入符号串移进新的符号,如此继续直到整个输入符号串处理完毕。最终如果栈里只有识别符号,则所分析的输入符号串为合法的句子,则报告成功;否则,输入串为不合法的符号串,则报告错误。

4 软件集成

TestCaseGenrator 软件中除常规词法分析、语法分析外,还需要分析注释信息,针对注释中的内容与语法树关联、集成。集成逻辑如下:

词法分析形成词法表;

语法分析形成语法树;

按被测代码的注释规范分析注释,得到被测模块、测试模块的标识符关联;分析输入条件,计算、推导被测模块的结果,与被测代码 assertEquals结果进行比较;

将比较结果汇总、编号,形成自动测试结果。

5. 集成应用

在 TestCaseGenrator 软件界面中设置源文件路径、测试文件路径、软件代号、名称、版本、开发语言等信息,软件自动对源文件、测试文件进行词法分析、语法分析,形成测试用例列表,并对测试用例顺序进行编号。经过工具软件运行生成测试说明和测试报告文档。

并将该工具软件与公司业务流程管理系统(BPM 系统)进行集成,将测试执行情况、结果导入到 BPM 系统进行审批入库、统计分析和管理,实现了对某项目软件测试用例的信息化管理。

对合格性测试用例的需求追踪、说明、执行统一纳入 TestLink 中管理。传统导出方式产生的文档要素不全,不符合文档模板要求,需要进行集成开发。对 TestLink 的二次开发采用 PHP 和 Restfull 接口方式,在 TestLink 中新建测试项目后,按照项目、测试计划、测试用例集、测试用例、测试执行情况的树状方式进行检索。将公司文档模板定义在配置文件中,按模板生成符合标准化要求的测试文档。

6. 结论

通过对测试用例代码、被测代码进行词法分析、语法分析,识别测试用例代码、用例代码的关联,通过 Java 语言开发了测试用例自动分析、文档生成工具,实现了单元测试、集成测试软件用例文档自动生成、统计分析和管理,提高了工作效率,保证了软件产品的质量。

参考文献:

[1] 朱利群 . 软件测试模型及其实现 [J]. 湖南师范大学(自然科学学报).1998,(3).89-92.

[2] 张茂林 . 软件自动测试的研究与程序实现 [J]. 北京航空航天大学学报 .1997,(1).74.