软件测试策略和测试方法的应用
 
引言
软件测试的方法有哪些
在软件开发过程中, 编程和测试是两个相辅相成、缺一不可的技术活动。软件测试的目的是尽可能地出软件中隐藏的错误和缺陷, 给最终用户提供具有一定可信度的质量评价。软件测试就是“为了发现错误而执行程序的过程”, 一般根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例( 即输入数据及其预期的输出结果), 利用这些测试用例去运行程序, 以发现程序潜在的错误或缺陷。
软件测试是一个贯穿软件开发全过程的系统工程, 是对测试经验和软件规范化设计有密切关系的工程。如何用较少的测试案例, 实现最大的测试覆盖、最大限度地发现软件瑕疵, 除了采用适当的测试策略, 制定完善的测试计划、测试方案、结果分析和文档资料管理外, 还需要在测试过程中科学合理地应用各种软件测试方法。
1、软件测试策略
软件测试策略反映了进行软件测试的指导思想及方法原则。在进行软件测试之前, 分析软件开发过程及内容, 制定科学合理的测试策略, 是进行软件测试的首要问题。通常, 软件测试策略分为传统的软件测试策略和现代的软件测试策略。
1.1 传统的软件测试策略
传统的软件测试策略遵循瀑布模型, 如图1
所示。一般将软件测试放置在软件开发的最后阶段, 该模型直接反映出对软件测试的不够重视, 其缺点也是非常明显的, 即可能将软件开发前期各部分的错误和缺陷累积到最后阶段, 对软件测试造成很大的压力, 使其不能明确地出错误或缺陷到底出在哪个阶段, 尤其对面向对象和多线程设计方法的测试, 更是缺乏全面合理的效果。1.2 现代的软件测试策略现代的软件测试策略采用双V 模型, 如图2
所示, 体现了软件测试的重要地位, 它贯穿了软件开发的全过程。在双V 模型中,首先要制定测试目的, 包括: 一是证明软件系统能否正常工作的演示功能; 二是能够发现问题的检错功能; 三是测试系统的质量的预测功能; 四是控制质量的预防功能; 五是按顺序包含了预防、检错、预
测及演示等功能, 并向着集成化、自动化、智能化的方向演进的综合功能。因此, 要根据实际情况选择实现相应功能的测试目的, 是为了证明软件系统能正常工作, 还是为了发现问题;是为了测试系统的质量, 还是为了控制软件系统的质量。其次是确定测试对象和测试范围。测试对象可以是整个系统、子系统、模块、单元, 也可以是某个变量、类、成员函数等; 测试范围包括功能测试、性能测试、可靠性测试、疲劳测试、移植性测试、恢复性测试等。再次是对测试环境和测试方法的选择和描述。最后是对测试结构进行记录和分析, 并对测试过程做全面的跟踪和管理。因此, 双V 模型测试策略成为现代软件开发过程中指导软件测试的首要选择。2、软件测试的基本方法软件测试可以采用多种方法和手段。根据应用角度的不同,软件测试方法有不同的分类, 但基本的软件测试方法包括静态测试与动态测试、黑盒测试与白盒测试、积极测试与消极测试等。
2.1 静态测试与动态测试
软件测试是一个对测试经验、测试计划、测试环境和测试工具依赖性非常强的工作, 按工作状态分为静态测试和动态测试两个阶段。
静态测试, 主要是针对所有文档资料、编程规范、数据定义、控制和数据使用、代码与需求
的一致性、代码与设计的一致性等方面的进行分析。静态测试往往是在不需要运行软件系统的情况下, 对一个组件、系统的说明书或执行计划等进行测试。采用的方法主要有:(1) 文档资料浏览。要正确理解文档资料, 对文档资料的任何改变要有统一的认知;(2) 讨论决定。对文档资料进行讨论, 做出诸如“做什么、不做什么、如何做”等问题的计划与决定;(3) 检查。根据各种技术规范和定义, 出软件开发过程中可能存在的问题, 如: 市场和商业销售策略、系统需求和
系统设计、程序代码、测试计划、测试设计、测试案例、测试结果、用户手册、培训教材等;(4) 利用工具对程序代码进行静态分析。如程序复杂度、系统结构、控制流程、数据流程等。动态测试是指根据被测系统的动态行为对其进行运行中的实时测试, 测试对象包括对软件中的一个组件或系统执行运行和使用的软件。动态测试可适用于单元测试、集成测试、系统测试及验收测试等几个阶段。
2.2 黑盒测试与白盒测试
根据测试侧重于结构性测试还是功能性测试, 动态测试又可分为黑盒测试和白盒测试两种。
黑盒测试将被测对象看作一个打不开的黑盒, 测试人员在不考虑程序内部结构和内部特性的情况下, 只依据需求规格说明书设计测试用例, 检查程序的功能是否按照规范说明的规定正确地执行, 因此, 又被称为功能性测试。它着重于验证软件功能和性能的正确性, 典型测试项目包括功能测试、性能测试、边界测试、余量测试、强度测试等。黑盒测试主要缺点是: 测试结果取决于测试用例的设计, 而测试用例的设计部分来源于经验, 没有状态转换的概念, 给寻和确定程序缺陷带来困难。黑盒测试所采用的测试方法主要包括: 等值分割法、边界数值法、有限状态机法、经验估计法等。
白盒测试是对软件的过程性细节做细致的检查, 把测试对象看作一个打开的盒子, 允许测试人员利用程序内部的逻辑结构及有关信息, 设计或选择测试用例, 对程序所有逻辑路径进行测试,因此, 又被称为结构性测试或逻辑驱动测试。对白盒测试的研究主要集中在提高软件的各种覆盖率上。目前一般认为, 基于同一测试覆盖准则, 测试覆盖率越高, 软件的可靠性或可信性就越高。白盒测试的主要方法有逻辑驱动、基路测试等, 主要用于软件验证。白盒测试需要全面了解程序内部逻辑结构、对所有逻辑路径进行测试。白盒测试是穷举路径测试, 在使用这一方案时, 测试者必须检查程序的内部结构, 从检查程序的逻辑入手, 得出测试数据。
2.3 积极测试与消极测试
从全覆盖地实现测试目的的角度分类, 软件测试可分为积极测试与消极测试。
积极测试又称正向测试, 是指对一个积极输入值进行的测试, 也就是对输入有效值进行的测试。测试者期望输入一个有效值后能得到有效的输出。积极测试的目的是验证软件, 对比需求确认软件功能。因此, 积极测试是为了测试软件系统做了它应该做的事情。
消极测试又称反向测试, 是指对一个消极输入值进行的测试, 也就是对输入无效值进行的测试。测试者期望输入一个无效值后系统能提示值无效的错误信息。消极测试的目的是中断软件的执行, 测试异常流的输出, 检验错误处理机制。因此, 消极测试是为了测试系统没做它不该做的事情。消极测试是一种非常开放的测试方法。一般来说, 消极测试用例的数量要远远大于积极测试用例的数量, 消极测试对积极测试的数量比例一般默认是80%:20%。
3 在软件测试过程中合理应用测试方法
软件测试过程可分为四个主要阶段: 单元测试、集成测试、系统测试和验收测试。这是一种“从小到大”、“由内至外”、“循序渐进”的测试过程, 体现了“分而治之”的思想。在测试过程中科学合理地应用各种测试方法是提高软件测试效率、达到测试目的有效保证。