一、定义
软件测试是为了发现错误而执行程序的过程,是根据程序开发阶段的规格说明及程序内部结构而精心设计的一批测试用例(输入数据及其预期结果的集合),并利用这些测试用例去运行程序,以发现程序错误的过程。 软件测试应尽可能在实际运行使用环境下进行。软件测试不再只是一种仅在编码阶段完成后才开始的活动,而是应该包括在整个开发和维护过程中的活动。
二、原则
1. 软件开发人员即程序员应当避免测试自己的程序(单元测试除外)
2. 应尽早地和不断地进行软件测试
3. 对测试用例要有正确的态度:第一,测试用例应当由测试输入数据和预期输出结果这两部分组成;第二,在设计测试用例时,不仅要考虑合理的输入条件,更要注意不合理的输入条件。
4. 要充分注意软件测试中的群集现象,也可以认为是“80-20原则”。反而这里是错误群集的地方,对这段程序要重点测试,以提高测试投资的效益。
5. 严格执行测试计划,排除测试的随意性,以避免发生疏漏或者重复无效的工作。
6. 应当对每一个测试结果进行全面检查。
7. 妥善保存测试用例、测试计划、测试报告和最终分析报告,以备回归测试以及维护之用。
三、测试方法
软件测试方法可以分为静态测试和动态测试。
序列 | 测试方法 | 定义 |
1 | 静态测试 | 是指被测程序不在机器上执行,而采用人工检测和计算机辅助静态分析的手段对程序进行检测。 包括对文档的静态测试和对代码的静态测试。 对文档的静态测试主要以检查单的形式进行。 对代码的静态测试则主要采用桌前检查、代码走查和代码审查。 |
2 | 动态测试 | 是指在计算机上实际运行程序进行的软件测试,一般采用白盒测试和黑盒测试方法。 |
黑盒测试和白盒测试
序列 | 测试种类 | 定义 |
1 | 黑盒测试 | 不考虑模块内部结构,只在其接口进行测试。 1)等价类划分:将所有可能的输入数据划分为几类,从每一类中选取具有代表性的数据作为测试用例。 2)边界值法:选取刚好等于、刚刚大于或者刚刚小于输入范围边界的值作为测试数据。 3)错误推测法:根据程序中所有可能的错误和容易发生错误的特殊情况设计测试用例。 4)因果图法:利用输入条件的多种组合产生相应多个动作的方式设计测试用例。 5)判定表 6)状态图 7)随机测试 8)正交试验法 |
2 | 白盒测试 | 对程序所有的逻辑分支进行测试,逻辑覆盖属于典型的白盒测试。 主要有以下几种逻辑覆盖测试:语句覆盖、 |
四、测试类型
序列 | 阶段 | 定义 |
1 | 单元测试 | 是对每个模块进行测试。 主要目的是针对设计说明中的功能、性能、接口和其他设计约束等条件进行测试,发现编码过程中可能存在的各种错误。 例:用户输入验证过程中的边界值的错误。 |
2 | 集成测试 | 在单元测试的基础上,将所有模块按照设计要求组装成系统,必须精心计划,应提交集成测试计划、集成测试规格说明书和集成测试分析报告。 主要目的是针对详细设计中可能存在的问题,尤其是检查各单元与其他程序部分之间的接口上可能存在的错误。 |
3 | 配置项测试 | 对象:软件配置项 目的:检查软件配置项与SRS的一致性 条件:已通过单元测试和集成测试 |
4 | 系统测试 | 将软件放在整个计算机环境下,在实际运行环境中进行一系列的测试,发现软件与系统定义不符合或矛盾的地方。 主要内容:功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、安装测试、反安装测试。 性能测试主要验证软件系统在承担一定负载的情况下所表现出来的特性是否符合客户的需要。主要指标有响应时间、吞吐量、并发用户数、和资源利用率等。 |
5 确认测试 | 内部确认测试 | 主要由软件开发组织内部按照SRS进行测试。 |
α测试 | 一个用户在开发环境下进行的测试,或者公司内部用户在模拟实际操作环境下进行的测试。 | |
β测试 | 软件的多个用户在实际使用环境下进行的测试。通过之后,才能把产品发布或者交付给用户。 | |
验收测试 | 验证软件的功能、性能以及其他特性是否与用户的要求(开发技术合同&SRS)一致。(在系统测试之后) 测试对象是完整的、集成的计算机系统。 条件:被测软件系统已通过系统测试。 | |
6 | 回归测试 | 目的:测试软件变更之后,变更部分的正确性和对变更需求的符合性,以及原有的、正确的功能、性能和其 他规定的要求的不损害。 |
五、软件调试
软件调试(排错)与成功的测试形影相随。测试成功的标志是发现了错误,根据错误的迹象确定错误的原因和准确诶之,并加以改正,主要依靠软件调试技术。
六、软件测试管理
软件测试管理包括过程管理、配置管理和评审工作。
过程管理包括测试活动管理和测试资源管理。
软件测试人员应包括测试项目负责人、测试分析员、测试设计员、测试程序员,测试员、测试系统管理员和配置管理员等。
软件测试工作开始条件(准入条件):具有测试合同或项目计划;具有软件测试所需的各种文档;所提交的被测软件已受控;软件源代码已正确通过编译或汇编。
软件测试工作结束条件(准出条件):已按要求完成了合同或项目计划所规定的软件测试任务;实际测试过程遵循了原定的软件测试计划和软件测试说明;客观、详细地记录了软件测试过程和软件测试中发现的所有问题;软件测试文档齐全,符合规范;软件测试的全过程自始自终在控制下进行;软件测试中的问题或异常有合理的解释或正确有效的处理;软件测试工作通过了测试评审;全部测试工具、被测软件、测试支持软件和评审结果已纳入配置管理。
配置管理
由开发组织实施的软件测试,应将测试工作产品纳入软件项目的配置管理。
由独立测试组织实施的软件测试,应建立配置管理库,将被测试对象和测试工作产品纳入配置管理。
评审
测试过程中的评审包括测试就绪评审和测试评审。
测试就绪评审:是指测试执行前对测试计划和测试说明等进行评审,评审测试计划的合理性和测试用例的正确性、完整性和覆盖充分性,以及测试组织、测试环境和设备、工具是否齐全并符合技术要求等。
测试评审:是指在测试完成后,评审测试过程和测试结果的有效性,确定是否达到测试目的,主要对测试记录和测试报告进行评审。
七、测试工具
1. 缺陷管理工具: Bugzilla, Remine
2. 覆盖率检查工具: Truecoverage
3. 测试管理工具: TestManager
4. 性能测试工具: Loadrunner