软件产品的质量取决于软件开发过程,软件测试作为软件生存期中的一个重要阶段,受重视程度越来越高。软件测试是保证软件质量和可靠性的关键步骤,也是用来验证软件是否能够完成所期望功能的唯一有效的方法。测试已不仅仅局限于软件开发中的一个阶段,它已开始贯穿整个软件开发过程,进行测试的时间越早,整个软件开发成本下降就越多。大量统计表明,软件测试的工作量往往占到软件开发总量的40%以上,在极端的情况下,甚至可能高达软件工程其它步骤成本总和的三至五倍,其目的是尽可能的提高软件产品的质量和可靠性。
1、软件测试相关概念
(1) 软件测试:软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计出一批测试用例,并利用这些测试用例的运行结果来发现程序错误的过程。
(2)软件测试用例:测试用例实际上是对软件运行过程中所有可能存在的目标、运动、行动、环境和结果的描述。测试用例是测试组织的最小单位,指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并最终形成文档。
软件测试的核心是设计和执行测试用例。而测试用例的选择问题可以看作是从庞大的输入状态组合中,搜寻哪些可以发现错误的状态组合。因此需要用抽象的手段来尽量使测试更加有效。
(3)测试用例库:完整的单元测试很少只执行一个测试用例,开发人员通常都需要编写多个测试用例才能对某一软件功能进行比较完整的测试,这些相关的测试用例称为一个测试用例集。将大量的测试用例收集到测试用例库中,合理的分类后供测试人员选择使用,能够极大地提高软件问题的发现率。
2、提高测试质量的方法
2.1 采用测试性设计技术
软件测试是目前用来验证软件是否能够完成所期望的功能的唯一有效的方法。但是在测试的实施过程中,由于种种原因导致测试的难度相当大,甚至出现了无法测试的情形。为了提高软件的可测试性,我们在软件设计时应当遵循测试性设计原则,通过改变设计或代码、为软件增加专门测试结构等方法来提高软件的可测试性。
(1)测试驱动设计。这种设计就是直接把软件需求变成测试代码。在确定软件测试性能要求的基础上优先编写测试代码。先写验收测试,再写单元测试,并在开发过程中不断修正。
(2)每个操作对应一个方法,使方法小型化。使用小型化方法说明和重载带缺省方法参数的方法,使得测试中调用这些方法变的很容易。
(3)显示与控制分离。把代码移到GUI视图的外面,各种GUI动作就能成了模型上的简单方法调用。这样,在修改程序功能不会影响视图,同时通过方法调用测试功能也比间接地测试功能更容易。
(4)对于可能要作为参数的类,做一个接口。用接口说明外部程序组件或在需要时改变接口形成一个空类作为参数传入。
2.2 选择合适的测试管理模型
模型是系统功能的形式化或半形式化的表示,支持输入状态组合的系统枚举。基于模型的测试主要考虑系统的功能,可以认为是功能测试的一种。测试模型体现了被测试系统的最本质的功能关系。而且要比系统本身更易于开发和分析。一个可测试的模型要能提供足够的信息用来产生测试用例。所以可测试的模型必须满足以下要求:
(1)必须是某种测试实现的完全准确的反映,模型必须表示要检查的所有特征;
(2)是对细节的抽象;
(3)可以表示所有事件和所有的动作;⑷可以表示系统的各种状态,以便由可知的方法来确定已达到或没有达到什么状态。
2.3 采用合理的测试技术
软件测试方法众多,各有优点,但任何一种测试方法都无法覆盖所有测试的需求。这就需要充分掌握软件测试的各种方法,熟悉其优缺点,根据系统需求精心设计组合。我们可以从以下两个方面展开:
2.3.1 从代码的特性角度出发展开测试:
(1)单元测试: 按照代码的单元组成逐个进行测试。
(2)功能测试: 按照软件的功能或特性逐个进行测试。
(3)系统测试:对完整的代码进行编译和连接,以检查程序的主要功能能否达到预期目标。
(4)回归测试:对以前修复过的Bug 重新进行测试, 看该Bug是否会重新出现。值得注意的是,回归测试并不是软件测试的一个独立阶段。
2.3.2 从用户的角度出发展开测试:
(1)配置测试: 从用户的使用出发进行多方面的测试。
(2)兼容性侧试: 主要考虑软件和操作系统的兼容性问题。
(3)压力测试: 在各种极限情况下对产品进行测试, 以检查产品的长期稳定性。
(4)性能测试: 测试是保证程序具有良好的性能,能否达到预期的性能指标。
(5)文档和帮助文件测试: 对文档和帮助文件进行检测, 保证用户可以通过学习文档和帮助文件正常使用产品。
(6)Alpha 和Beta 测试: 在正式发布产品之前将软件测试版发送给用户, 让用户在使用中找到能够存在的Bug或者反馈相关信息, 以便在正式版中得到解决。
2.4 建立可复用的测试用例库
软件测试过程中产生的大量测试用例对保证软件的质量起到关键作用,测试用例的复用就显得尤其重要。在测试中应当构造出基于复用的测试用例,并采用测试用例库管理的方法来实现,这样可以大大提高软件测试的工作效率。
(1)基于复用的目的,对所使用的测试用例进行统一的建模组织,有效地将测试用例收集到测试用例库中,并按照行业项目等进行多级合理的分类、组织、存储。对采用不同方式描述的测试用例,将分别实现不同程度的复用。
(2)对数据库中存有的测试用例实行有效管理,通过提供有助于复用的多种查询方式,确保测试用例的复用程度,对不同类别的测试用例进行复用频率的统计,为测试人员提供有效的复用信息,在保证软件测试质量的前提下,提高了测试的效率。
(3)对数据库中的测试用例具体实现复用,通过查询出所需的测试用例,得到测试用例信息,针对不同描述方式的测试用例采用不同的复用方式进行复用。
3、结语
本文从技术的角度提出了一种以软件测试性设计为中心,配合合理的软件测试方法来实现提高软件测试质量的方法。但是值得说明的是:软件测试人员的水平高低会严重的影响测试质量,这需要我们在实际工作中特别加以注意。