首页 > 技术文章 > 软考知识点梳理--软件测试

jianlian 原文

软件测试是在将软件交付给客户之前所必须完成的重要步骤。软件测试仍是发现软件错误(缺陷)的主要手段。软件测试的目的是验证软件是否满足软件开发合同或 项目开发计划、系统/子系统设计文档、SRS、软件设计说明和软件产品说明等规定的软件质量要求。通过测试,发现软件缺陷,为软件产品的质量测量和评价提 供依据。 测试用例设计的原则有基于测试需求的原则、基于测试方法的原则、兼顾测试充分性和效率的原则、测试执行的可再现性原则。 每个测试用例应包括名称和标识、测试追踪、用例说明、测试的初始化要求、测试的输入、期望的测试结果、评价测试结果的准则、操作过程、前提和约束、测试终止条件。
    1. 测试的方法
    软件测试方法可分为静态测试和动态测试。 静 态测试是指被测试程序不在机器上运行,而采用人工检测和计算机辅助静态分析的手段对程序进行检测。静态测试包括对文档的静态测试和对代码的静态测试。对文 档的静态测试主要以检查单的形式进行,而对代码的静态测试一般采用桌前检查(Desk Checking)、代码走查和代码审查。经验表明,使用这种方法能够有效地发现30%~70%的逻辑设计和编码错误。 动态测试是指在计算机上实 际运行程序进行软件测试,一般采用白盒测试和黑盒测试方法。白盒测试也称为结构测试,主要用于软件单元测试中。它的主要思想是,将程序看作是一个透明的白 盒,测试人员完全清楚程序的结构和处理算法,按照程序内部逻辑结构设计测试用例,检测程序中的主要执行通路是否都能按预定要求正确工作。白盒测试方法主要 有控制流测试、数据流测试和程序变异测试等。另外,使用静态测试的方法也可以实现白盒测试。例如,使用人工检查代码的方法来检查代码的逻辑问题,也属于白 盒测试的范畴。白盒测试方法中,最常用的技术是逻辑覆盖,即使用测试数据运行被测程序,考察对程序逻辑的覆盖程度。主要的覆盖标准有语句覆盖、判定覆盖、 条件覆盖、条件/判定覆盖、条件组合覆盖、修正的条件/判定覆盖和路径覆盖等。
黑盒测试也称为功能测试,主要用于集成测试、确认测试和系统测试 中。黑盒测试将程序看作是一个不透明的黑盒,完全不考虑(或不了解)程序的内部结构和处理算法,而只检查程序功能是否能按照SRS的要求正常使用,程序是 否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息(例如,文件和数据库等)的完整性等。黑盒测试根据SRS所规定的功能来设 计测试用例,一般包括等价类划分、边界值分析、判定表、因果图、状态图、随机测试、猜错法和正交试验法等。
    2. 测试的类型
    软件测试可分为单元测试、集成测试、确认测试、系统测试、配置项测试和回归测试等。
    (2.1) 单元测试。单元测试也称为模块测试,测试的对象是可独立编译或汇编的程序模块、软件构件或OO软件中的类(统称为模块),其目的是检查每个模块能否正确地 实现设计说明中的功能、性能、接口和其他设计约束等条件,发现模块内可能存在的各种差错。单元测试的技术依据是软件详细设计说明书,着重从模块接口、局部 数据结构、重要的执行通路、出错处理通路和边界条件等方面对模块进行测试。
    (2.2)集成测试。集成测试的目的是检查模块之间,以及模块和已集成的软件之间的接口关系,并验证已集成的软件是否符合设计要求。集成测试的技术依据是软件概要设计文档。除应满足一般的测试准入条件外,进行集成测试前还应确认待测试的模块均已通过单元测试。
    (2.3)确认测试。确认测试主要用于验证软件的功能、性能和其他特性是否与用户需求一致。根据用户的参与程度,通常包括以下类型:
    (2.3.1)内部确认测试。内部确认测试主要由软件开发组织内部按照SRS进行测试。
    (2.3.2)Alpha 测试和Beta测试。对于通用产品型的软件开发而言,Alpha测试是指由用户在开发环境下进行测试,通过Alpha测试以后的产品通常称为Alpha 版;Beta测试是指由用户在实际使用环境下进行测试,通过Beta测试的产品通常称为Beta版。一般在通过Beta测试后,才能把产品发布或交付给用 户。
    (2.3.3)验收测试。验收测试是指针对SRS,在交付前以用户为主进行的测试。其测试对象为完整的、集成的计算机系统。验收测试的目的 是,在真实的用户工作环境下,检验软件系统是否满足开发技术合同或SRS。验收测试的结论是用户确定是否接收该软件的主要依据。除应满足一般测试的准入条 件外,在进行验收测试之前,应确认被测软件系统已通过系统测试。
    (2.4)系统测试。
    系统测试的对象是完整的、集成的计算机系统,系统测试的目的是,在真实系统工作环境下,验证完整的软件配置项能否和系统正确连接,并满足系统/子系统设计文档和软件开发合同规定的要求。系统测试的技术依据是用户需求 或开发合同,除应满足一般测试的准入条件外,在进行系统测试前,还应确认被测系统的所有配置项已通过测试,对需要固化运行的软件还应提供固件。一般来说, 系统测试的主要内容包括功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、安装与反安装测试等,其中,最重要的工作是进行功能测试与性能测试。 功能测试主要采用黑盒测试方法;性能测试主要验证软件系统在承担一定负载的情况下所表现出来的特性是否符合客户的需要,主要指标有响应时间、吞吐量、并发 用户数和资源利用率等。
    (2.5)配置项测试。
    配置项测试的对象是软件配置项,配置项测试的目的是检验软件配置项与SRS的一致性。配置项测试的技术依据是SRS(含接口需求规格说明)。除应满足一般测试的准入条件外,在进行配置项测试之前,还应确认被测软件配置项已通过单元测试和集成测试。
    (2.6)回归测试。回归测试的目的是测试软件变更之后,变更部分的正确性和对变更需求的符合性,以及软件原有的、正确的功能、性能和其他规定的要求的不损害性。回归测试的对象主要包括以下四个方面: 
   (2.6.1)未通过软件单元测试的软件,在变更之后,应对其进行单元测试。
    (2.6.2)未通过配置项测试的软件,在变更之后,首先应对变更的软件单元进行测试,然后再进行相关的集成测试和配置项测试。
    (2.6.3)未通过系统测试的软件,在变更之后,首先应对变更的软件单元进行测试,然后再进行相关的集成测试、配置项测试和系统测试。
    (2.6.4)因其他原因进行变更之后的软件单元,也首先应对变更的软件单元进行测试,然后再进行相关的软件测试。
    3. 面向对象的测试
     OO系统的测试目标与传统信息系统的测试目标是一致的,但OO系统的测试策略与传统的结构化系统的测试策略有很大的不同,这种不同主要体现在两个方面,分别是测试的焦点从模块移向了类,以及测试的视角扩大到了分析和设计模型。 与 传统的结构化系统相比,OO系统具有三个明显特征,即封装性、继承性与多态性。正是由于这三个特征,给OO系统的测试带来了一系列的困难。封装性决定了 OO系统的测试必须考虑到信息隐蔽原则对测试的影响,以及对象状态与类的测试序列;继承性决定了OO系统的测试必须考虑到继承对测试充分性的影响,以及误 用引起的错误;
多态性决定了OO系统的测试必须考虑到动态绑定对测试充分性的影响、抽象类的测试,以及误用对测试的影响。
     4. 软件调试 软 件调试(排错)与成功的测试形影相随。测试成功的标志是发现了错误,根据错误迹象确定错误的原因和准确位置,并加以改正,主要依靠软件调试技术。常用的软 件调试策略可以分为蛮力法、回溯法和原因排除法三类。软件调试是一个相当艰苦的过程,究其原因,除了开发人员心理方面的障碍外,还因为隐藏在程序中的错误 具有下列特殊的性质:
    (4.1)错误的外部征兆远离引起错误的内部原因,对于高度耦合的程序结构,此类现象更为严重。
    (4.2)纠正一个错误造成了另一个错误现象(暂时)的消失。
    (4.3)某些错误征兆只是假象。
    (4.4)因操作人员一时疏忽造成的某些错误征兆不易追踪。
    (4.5)错误是由于分时而不是程序引起的。
    (4.6)输入条件难以精确地再构造(例如,某些实时应用的输入次序不确定)。
    (4.7)错误征兆时有时无,此现象对嵌入式系统尤其普遍。
    (4.8)错误是由于把任务分布在若干台不同处理机上运行而造成的。
     5. 软件调试与测试的区别主要体现在以下几个方面:
    (5.1)测试的目的是找出存在的错误,而调试的目的是定位错误并修改程序以修正错误。
    (5.2)调试是测试之后的活动,测试和调试在目标、方法和思路上都有所不同。
    (5.3)测试从一个已知的条件开始,使用预先定义的过程,有预知的结果;调试从一个未知的条件开始,结束的过程不可预计。
    (5.4)测试过程可以事先设计,进度可以事先确定;调试不能描述过程或持续时间。
     6. 验收测试
     验收测试是部署软件之前的最后一个测试操作。在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
    验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样。 验收测试,系统开发生命周期方法论的一个阶段,这时相关的用户和独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。 用 户验收测试是软件开发结束后,用户对软件产品投入实际应用以前进行的最后一次质量检验活动。它要回答开发的软件产品是否符合预期的各项要求,以及用户能否 接受的问题。由于它不只是检验软件某个方面的质量,而是要进行全面的质量检验,并且要决定软件是否合格,因此验收测试是一项严格的正式测试活动。
软考知识点梳理--软件测试

推荐阅读