为了保证新系统运行的正确性和有效性,将一切可能发生的问题和错误尽量排除在正式运行之前,则需要进行系统测试工作。对系统测试工作要事先准备好测试方案,以提高工作效率,压缩时间,降低费用。完成系统测试后,应完成编写测试报告、绘制程序框图、打印系统源程序清单等工作。
1.系统测试的原则
进行系统测试的目的是发现程序和系统的错误并加以纠正。在系统测试中,应遵循以下基本原则:
(1)测试工作应避免由系统开发人员或小组本身来承担。
(2)设计测试用例不仅要包括合法的或有效的输入数据,还要包括无效的或不合法的各种输入数据的形式。
(3)不仅要检验程序是否执行了规定的操作,还要检查它是否同时做了不该做的事。
(4)保留测试用例,将给今后进行重新测试和追加测试等提供方便。
2.系统测试的方法
进行系统测试的主要方法有:
(1)人工测试:人工测试的目的在于检查程序的静态结构,找出编译过程不能发现的程序算法错误。其主要的任务就是进行程序代码复审,一般采用三种具体形式。
①个人复查:指程序源代码编写结束后,由程序员自行进行检查。由于是自查,出于程序员对自身所编写的程序的心理偏爱,习惯性错误不易发现,自身对程序功能算法的理解错误也很难纠正。一般这种形式效率不高,仅限于小型程序模块的检查。
②小组复查:由未参与系统程序设计的有经验的3~5个程序员组成测试小组,对系统程序进行复查。通过对系统软件资料和源程序的检查、分析和手工模拟,从中发现并纠正存在的各种错误。由于是人工方式,运行速度较慢,一般采用少量的简单的测试用例进行。
③会审:测试小组的组成同上法。测试小组成员在进行会审时应仔细阅读有关资料,根据错误类型清单(包括常见的各种编程错误)实施会审,通过测试小组成员与程序员的提问、讲解、回答及讨论的各种交互过程,发现并纠正错误。同时,审定有关系统程序的功能、结构及风格等。
(2)机器测试。机器测试就是直接在计算机上运行所要测试的程序模块,从实际运行的结果发现并纠正错误。机器测试采用的形式主要有两种:
①黑盒测试:也称功能测试,即不管程序内部的结构是如何设计和编制的,仅从外部根据IPO图的要求,对模块进行测试。也就是说,在程序的输入和输出特性上,测试程序模块是否满足设计的功能。
②白盒测试:也称结构测试,即将软件看作透明的白盒,按照程序的内部结构和处理逻辑,设计测试用例,对软件的逻辑过程进行测试,检查是否符合设计的要求。
3.系统测试的过程及步骤
系统测试过程一般有程序测试、功能调试和系统调试三部分。
(1)程序测试
对所设计的程序进行语法检查和逻辑检查,测试程序运行的时间和存储空间的可行性。程序测试一般从代码测试、程序功能测试两方面进行。程序的逻辑检查的方式是代码测试。通常需要编写各种测试数据,通过考察程序对正常数据、异常数据和错误数据输入的反应,检验程序执行的逻辑正确性,以及程序对各种错误的监测和处理能力。程序经过代码测试后,验证了它的逻辑正确性,但是否实现了规定的功能,尚未可知。因此,还应该测试其应用功能的需求,即面向程序的应用环境,考察是否达到了设计的功能和性能指标。
(2)功能调试
通常系统总是由多个功能模块组成的,而每个功能模块又是由一个或多个程序构成。因此,在完成对单个程序的测试以后,应当将组成一个功能模块的所有程序按照其逻辑结构加以组合,以功能模块为单位,检查该功能模块内各程序之间的接口是否匹配,控制关系和数据传递是否正确,联合操作的正确性及模块运行的效率。
(3)系统调试(www.xing528.com)
在实际环境或模拟环境中调试系统是否正常。主要检查各子系统之间的接口正确性。系统运行功能是否达到目标要求,系统的再恢复性等。其目的就是保证调试的系统能够适应运行环境。一般也从两方面进行:
第一方面,主控程序和调度程序调试:将所有控制程序与其他各模块的接口“短路”,以某种联系程序代替原功能模块,验证控制接口和参数传递的正确性,并发现和解决资源调度过程中的效率等问题。
第二方面,程序总调:将主控程序和调度程序与系统中的各功能模块以及所有程序联合起来进行整体调试。调试应对系统的各种可能的使用形态及组合进行考察,全面测试新系统的综合性能,以确认是否达到设计目标。
除了上述常规测试以外,有时根据系统需求还可进行一些特殊测试。如:峰值负载测试、容量测试、响应时间测试、恢复能力测试等。另外,交付使用之前,还可进行实况测试,以考察系统在实际运行环境下的运行合理性与可靠性。
图7-1 系统测试流程图
4.测试用例设计与测试策略
设计软件测试方案中,测试用的输入数据(测试用例)的设计是非常重要且困难的。下面就白盒测试与黑盒测试中的测试用例设计问题分别进行讨论。
(1)白盒测试的测试用例设计
白盒测试是对软件的过程性细节进行检查,因此,可以通过对程序内部结构和逻辑的分析来设计测试用例。主要的设计方法有:逻辑覆盖法、基本路径测试等。以下介绍逻辑覆盖法的思路和过程。
所谓逻辑覆盖,就是以程序内部的逻辑结构为基础的测试技术,其主要思路就是,通过程序执行测试数据,反映出数据覆盖其内部的逻辑程度。一般总希望覆盖程度越高越好,这样就可以测试到对应程序内部的大部分乃至全部。根据具体的覆盖情况的不同,逻辑覆盖可分为:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、多重覆盖和路径覆盖等。
语句覆盖是通过设计若干测试用例,使程序中的每条语句至少被执行一次。判定覆盖使程序中的每个判断的取真和取假分支均至少被执行一次。条件覆盖指利用若干测试用例,使被测试的程序中,对应每个判断中每个条件的所有可能情形均至少执行一次。判定/条件覆盖指设计的若干测试用例,可以使程序中每个判断的取真和取假分支至少被执行一次,且每个条件的所有可能情况均至少被执行一次。多重覆盖指设计多个测试用例,使每个判断表达式中条件的各种组合均至少被执行一次。路径覆盖指设计足够多的测试用例,使程序中的所有可能路径均至少被执行一次。
上述方法仅讨论了语句、分支、条件以及它们的组合,而对于程序或算法而言,循环也是重要的基本结构之一,因此,也应该进行测试。而对循环的测试,主要检查其结构的有效性。一般可将循环分为简单循环、串联循环、嵌套循环和非结构循环等类型,测试时可以根据不同的结构,设计不同的测试用例进行。
(2)黑盒测试的测试用例设计
黑盒测试测试用例的设计,应针对程序功能进行。通常有等价类划分、边界值分析、错误推测、因果图、功能图等设计方法。下面介绍前两种方法。
等价类划分的主要思想是,程序的输入数据都可以按照程序说明划分为若干个等价类,每一个等价类对于输入条件也可以分为有效的输入和无效的输入两种。因此,可以对每一个有效的或无效的等价类设计测试用例。如果用某个等价类的一组测试数据进行测试时,不产生错误,则说明对于同一类的其他数据也不会出错;反之,则肯定出错。因而,测试时只需从每个类中任取一种输入数据进行测试即可。
边界值分析是等价类划分的一种补充。通常,程序在处理边界时容易发生错误,而等价类划分技术是在某一等价类中任取一组数据进行测试,不一定代表边界状态。因此,以边界值指对每个等价类的各边界做考察,使测试数据等于、刚刚小于及刚刚大于边界值。
(3)测试策略
不同的测试方案设计的方法各有所长,用某种方法设计出的测试方案可能最容易检测出某种类型的错误,但对于其他类型的错误则可能无法检测出来。可以利用每种测试方法设计出有用的测试方案,但没有一种方法能设计出全部测试方案。
因此,在对管理信息系统进行测试时,应该联合使用各种设计测试方案的方法,形成一种综合策略。通常的做法是:用黑盒测试法设计基本的测试方案,再用白盒测试法补充一些必要的测试方案。通常采用的测试策略是:在进行测试方案设计时,将逻辑覆盖、等价类划分和边界值分析等方法综合运用,使测试用例既能检测设计的内部要求,又可以检测设计的接口要求。
视具体情况用等价类划分法补充测试方案;必要时再用错误推测法等其他方法补充测试方案;对照程序逻辑,检查已经设计出的测试方案。可以根据对程序可靠性的要求采用不同的逻辑覆盖标准,如果现有方案未达到规定的覆盖标准,则应再补充测试方案。
在对大型复杂系统进行测试时,一般不做全面的测试,而采用抽样测试或重点测试的方式,有针对性地选择具有代表性的测试用例,或将测试重点放在容易出错的位置及重要模块进行测试,以减少测试费用,提高测试效率。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。