聂芸
摘要:软件测试是保证软件质量,提高软件可靠性的关键,文章介绍了软件测试的必要性和目的,同时对几种常用的软件测试方法进行介绍,指出软件测试的一般流程,并对今后的发展方向进行了展望。关键词:软件测试;质量;测试方法
随着科技和时代的发展,软件的规模和复杂度越来越大,从而对软件质量提出更高的要求。为满足用户日趋复杂的需求,软件开发趋向繁琐化和复杂化,软件投入使用的过程中出现漏洞和缺陷的数量也在不断增加,所以,采用高效的软件测试是软件质量、可靠性和稳定性的重要保证。通过调查相关数据了解,目前,软件测试的工作量在整个软件开发工作总量中的比重达到了40%以上,对于测试的成本投入也达到软件开发总额的50%。可以说软件测试是软件开发过程必不可少的环节,软件测试的成功对软件开发的成功具有决定性的意义。
软件测试是一个破坏性、重复性的过程,其目的是以尽量少的时间和资源尽早的找出软件中潜在的错误和缺陷。通过分析错误和缺陷产生的原因及分布特征,可以帮助项目管理人员发现软件开发过程的不足,以便过程改进。同时,也有利于设计出高效的、有针对性的测试用例。
1 测试的主要方法
1.1 黑盒测试和白盒测试
依据是否了解程序代码内部实现方式,测试方法可分为黑盒测试和白盒测试。黑盒测试是把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常工作,程序是否能正确接收输入数据而产生正确的输出信息。主要针对软件界面和软件功能进行测试。在实际操作中,测试人员既需要测试正确的输入信号,还需要测试不正确的输入信号,以测试软件对错误的处理能力。当输入错误信号时,软件系统应友好的提示用户,而不能出现系统崩溃、用户数据丢失等现象。
白盒测试是按照程序内部的结构测试程序,检测程序内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
1.2 错误驱动测试
通过性的功能测试仅能测试系统已实现的功能的正确性,而对系统容错能力却无法测试。在用户实际使用的过程中,会有大量的不正确的输入,此时系统能否对不正确的输入进行容错处理?基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例进行测试就是错误驱动测试。
1.3 回归测试
软件测试是一个发现错误和改正错误不断循环的过程。由于程序的复杂性,各个模块及元素(变量、函数、类)之间存在着相互关联性、耦合性,因此对于改正后的错误,需要测试验证。一方面验证错误是否已被修改,另一方面检查对错误的修改是否影响其它模块产生新的错误,这就需要将已执行过的测试用例重新执行,这就是回归测试。
2 软件测试的流程
2.1 单元测试
单元测试是软件开发过程中对程序最小可测单元进行的测试活动。其目的在于根据详细设计说明书,从程序的内部结构出发,检查每个程序单元是否正确实现详细设计说明书中的模块功能、性能、接口和设计约束等要求。
单元测试是在程序单元的代码编写完成,确认没有语法错误之后由程序员进行,根据详细设计说明书和源程序清单,对该模块的逻辑结构,程序内部分支路径进行测试,来发现和修改代码编写过程中的错误。主要采用白盒测试和黑盒测试相结合的方式进行测试,使之对任何合理的和不合理的输入,都能鉴别和响应。单元测试的主要内容包括接口测试、功能测试、局部数据结构、覆盖条件、执行路径测试、出错处理、边界测试等。
2.2 集成测试
集成测试在单元测试的基础上,将两个或多个模块按照概要设计说明书的要求有序的、递增的组装成子系统,对这个子系统进行测试。集成测试,着眼于测试当各个模块连接起来的时候,穿越模块接口的数据是否会丢失,一个模块的功能是否会对另一个模块的功能产生不利的影响,各个子功能组合起来,能否达到预期要求的父功能,全局数据结构是否有问题,单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。集成测试多采用增量式组装测试,增量式测试是一种可行性比较高的方法。增量式测试又分为自底向上和自顶向下两种测试方式。
自顶向下测试从程序的顶点模块开始,然后逐步组装下一级的模块进行测试。为了模拟被测试模块的下一级模块,需要构建哑模块或桩子模块。它从主控模块开始,按照软件的控制层次结构,以广度优先或者深度优先的策略,把各个单元模块组装集成在一起。自顶向下测试的主要好处就是较早地验证了主要控制点和判断点,按深度优先可以首先实现和验证一个完整的软件功能,功能能够较早获得证实,带来信心,只需一个驱动,减少驱动器开发的成本,支持故障隔离,它可以让人们看见系统的早期版本并证明系统的正确性。主要缺点是需要桩子模块,底层验证被推迟,底层组件测试不充分。
自底向上测试策略从程序的最底层模块开始。为了模拟上一层的模块需要开发一定的驱动模块。当对所有的低一层模块测试完毕才对高一层模块组合进行测试。自底向上测试方法的优点是测试数据的建立不存在困难,对底层组件行为较早验证,工作最初可以并行集成,比自顶向下效率高,减少了桩的工作量,支持故障隔离。驱动模块模拟所有的调用参数,如果关键模块位于调用模块的底部,则自底向上测试方法更优。自底向上测试的主要缺点是系统的早期版本直到最后模块测试完毕才产生,驱动的开发工作量大,对高层模块的验证被推迟,设计上的错误不能被及时发现,因为不可在底层模块设计之前进行测试。
当各单元被分别测试后,集成测试根据设计阶段形成的功能分解树,自顶向下或自底向上逐步用各个单元来替换桩和驱动程序。集成测试一般在完成了软件的所有或大部分编码,并且完成单元测试工作后,由各单元模块开发人员一起完成。一般采用白盒测试与黑盒测试相结合的方法。
2.3 系统测试
系统测试是将软件系统与计算机硬件、外设、其它系统软件、数据和人员等其它系统元素结合在一起,依据需求规格说明书,发现软件不符合需求规格说明书的地方。系统测试的测试用例是根据需求规格说明书来设计,并模拟用户使用环境来执行。系统测试的内容极其广泛,包括功能测试、容错性测试、性能测试、压力测试、协议测试、安全性测试、兼容性测试、稳定性测试等等。通常采用黑盒测试。
2.4 验收测试
验收测试是按照项目任务书或合同、供需双方约定的验收依据文档进行的对整个系统的测试与评审,决定是否接收或拒收系统。验收测试是为了向用户证明软件已经实现需求规格说明书所定义的功能和要求,软件能正确的、安全的、按照预定要求的为用户服务。测试重点主要是软件是否实现用户需求,而不是针对功能进行的测试。所以验收测试不需要专业的测试技术,也可以是使用该产品的最终用户来体验该软件是否能够满足使用要求,也可以由开发团队和用户方以外的第三方按照用户需求规格说明书来跟踪和测试软件是否能实现需求。
3 软件测试的展望
随着国家信息化和软件行业的发展,软件系统的规模越来越大,国内外的软件开发企业和软件用户越来越重视软件质量,软件企业已经建立了独立的软件测试和质量保证部门,并配置了专职的测试和质量保证人员,并且在软件行业中已经出现了独立的第三方软件评测机构,软件测试作为一个独立的专业和行业正逐步走向成熟。在今后的软件系统开发中,软件测试工作将不再局限于单元测试、集成测试、系统测试和验收测试,而会将测试工作进一步前移,对需求的精确性和完整性的测试技术,对系统设计的测试技术将成为新的研究热点。