王飞 于凯华
摘要:软件单元测试是软件测试的基础,是保证软件质量的一个重要阶段,同时也是发现软件缺陷的关键步骤;该文首先介绍软件单元测试中白盒测试的方法;然后以核电DCS历史数据库软件为案例,具体研究了历史数据库软件白盒测试的测试用例的设计方法,详细介绍了白盒测试用例的设计步骤,并对几种逻辑覆盖准则进行了比较。
关键词:核电DCS;软件测试;白盒测试
中图分类号:TP31 文献标识码:A
文章编号:1009-3044(2019)11-0095-02
Abstract: Software unit testing is the foundation of software testing and an important stage of software quality assurance. The white-box-testing method in the software testing is introduced; then it takes some history database software used in DCS of nuclear power plant as the case and studies the white-box-testing test cases design method. The design procedure of the white-box-testing test cases is summarized and several kinds of cover criteria are compared. At last the merits of MC/DC coverage and the white-box-testing coverage criterion of history database used in DCS of nuclear power plant are studied.
Key words: DCS of nuclear power plant; software testing; White-box-testing
自从数字计算机应用于核电站控制系统以来,软件在核电厂控制系统中起着日益重要的作用,而有缺陷的软件的确存在。核电站控制系统软件的工作情况复杂,一旦软件出现问题,往往造成灾难性后果。因此,核电厂对核电厂控制系统软件部分提出了相当高的要求。
软件测试的方法可以分为黑盒测试和白盒测试,其中白盒测試是保证并提高软件质量的常规手段之一,是发现软件缺陷的关键步骤,是软件测试的基础。本文涉及的编程语言均为C/C++语言。
1 白盒测试方法
白盒测试又称结构、逻辑测试或程序测试。这种测试需要了解程序的内部情况,并依据内部构造设计和执行测试用例。单元测试时一般采用白盒测试。白盒测试测试方法有逻辑覆盖法和基本路径法。
2 核电DCS历史数据库软件测试白盒测试用例的设计
2.1 设计测试用例的步骤
通过对核电DCS历史数据库软件的分析,得出相应白盒测试测试用例设计步骤如下:
1)首先采用等价类划分、边界值分析的方法进行用例设计,主要从以下几个方面进行用例设计:
① 在数据允许范围内;
② 在数据允许范围外;
③ 数据的边界;
④ 极限值;
⑤ 这些类型的综合。
2)然后在语句覆盖、组合条件方面进行考虑,检查是否有没有执行到的语句、组合条件,然后采用回溯的方法,考虑相应的数据参数。
3)基于以上两种用例设计方法,还可以靠经验和直觉推测程序中可能存在的各种错误,进行错误推测,从而有针对性地编写检查这些错误的测试用例。
2.2 测试用例设计实例
下面以核电DCS历史数据库中基于斜率比较的旋转门压缩算法模块中程序为例,流程图如图1所示,具体研究白盒测试用例的设计。
1) 对程序流程图的说明:如图1所示,英文字母A、B、C、D、E、G表示程序分支的判定,其中的某个判定可能是一系列条件的组合,图1中英文字母T、F表示程序分支的判定结果的真、假,小写英文字母表示程序的路径。
2) 对覆盖准则进行选取,选为修正条件/判定覆盖(MC/DC)。
3) 分析流程图中的程序分支点,对分支点的判定进行提取,如表1所示。
4) 根据选取的准则来确定需要覆盖的路径,并进行测试用例的设计,如表2所示。
通过表2中的测试用例可以看出:测试用例1和测试用例2使判定A取真、假各一次,测试用例3和测试用例4使判定C取真、假各一次,测试用例2、测试用例3、测试用例4、测试用例5使判定B取真、假各一次,测试用例5、测试用例6、测试用例7使分支结构中条件斜率的取值取得了所有的可能的结果,并进行了转换一次和单条件的变化,同时程序模块的入口以及出口点都被调用了。由此可见,表2中测试用例达到了判定准则修正条件/判定覆盖的标准,满足测试要求。
3 核电DCS历史数据库软件测试白盒测试覆盖准则
通过对单元测试中白盒测试方法的研究,设计测试用例时需要满足的几种覆盖准则存在以下特点:
设计测试用例(a,b,x)=(2,0,4) 就可达到语句覆盖标准。若第一个条件语句中的逻辑与被错误地编写成逻辑或,上面设计的测试用例是不能发现这个错误的;又如若第三个条件语句中x>1误写成x>0,这个测试用例也是不能发现这个错误的。
2) 判定覆盖:在判定覆盖中,判定语句基本是由多个逻辑条件组合而成,若只是判断其整个最终结果,而忽略单个条件的取值情况,必然会导致部分测试路径无法覆盖。这样的判定覆盖并不全面。
3) 条件覆盖:条件覆盖中需要保证使一个判定中的每一个条件都取到两个不同的结果,而判定覆盖中对这一点并无要求,由此可见条件覆盖相较判定覆盖,其发现错误的能力较强。
4) 条件判定覆盖:条件判定覆盖要求测试用例使得条件语句中每个条件的所有可能都至少出现一次,同时判定条件可能的结果都至少出现一次,每一个条件能独立影响判定结果的变化都至少出现一次(即:其他条件不变,只改变这个条件时判定结果变化)。
4 结论
对于数据库软件来说,其执行语句中可能包含布尔表达式,在进行软件白盒测试用例设计时,其表达式的复杂性值得深入研究。由于数据库软件数据存储的下一步动作受到多个条件的制约,在程序设计中分支判断必然是一个多条件组合的布尔表达式,对于这样的程序模块,对其进行白盒测试,使用修正条件/判定覆盖是一个比较有实效的折中办法,这样能有效的发现程序中的错误,又可以避免陷入烦琐的用例设计中。
参考文献:
[1] RTCA DO-178B Software Considerations in Airborne Systems and equipment certification [S]. Prepared by RTCA SC-167/EURO-CAE WG-12. 1,1992
[2] 郑人杰. 计算机软件测试技术 [M]. 北京:清华大学出版社,1992.
[3] 徐宏革. 郭庆. 白盒测试之道C++test [M]. 北京:北京航空航天大学出版社,2010.
【通联编辑:梁书】