软件测试过程
软件测试过程包括单元测试、集成测试、系统测试和验收测试。
单元测试
单元测试是对软件设计的最小单元——模块进行正确性检验的测试工作,主要测试模块在语法、格式和逻辑上的错误。单元必须是可测的,其行为或输出是可观测的,且有明确的可定义的边界或接口。确定单元的最基本原则是“高内聚,低耦合”。
- 单元测试原则
(1)单元测试越早越好。
(2)单元测试应该依据《软件详细设计规格说明》进行。
(3)修改过的代码应该重做单元测试,保证对已发现错误的修改没有引入新的错误。
(4)当测试结果与预期结果不一致时,测试人员应如实记录实际的测试结果。
(5)单元测试应注意选择好被测软件单元的大小。
(6)一个完整的单元测试说明应该包含正面测试和负面测试。正面测试验证程序应该执行的工作,负面测试验证程序不应该执行的工作。
(7)注意使用单元测试工具。单元测试工具的使用能很好地把握测试进度,避免大量的重复劳动,降低工作强度,提高测试效率。 - 单元测试的主要任务
单元测试的主要任务包括模块接口测试、模块局部数据结构测试、模块中所有独立执行路径测试、模块边界条件测试、各种错误处理测试。 - 单元测试主要技术
单元测试的依据是详细设计描述。
单元测试步骤:
(1)人工静态检查,保证代码算法的逻辑正确性、清晰性、规范性、一致性、算法高效性,并尽可能地发现程序中没有发现的错误。
(2)动态执行跟踪。通过设计测试用例,执行待测程序,跟踪比较实际结果与预期结果来发现错误。
(3)状态转换测试。当单元可能处于不同状态转换时,应根据单元可能进入的状态、这些状态之间的转换、引起转换可能导致的状态等进行测试。 - 单元测试工具简介
单元测试工具借助于驱动模块与桩模块工作,运行被测软件单元以检查输入的测试用例是否按软件详细设计规格说明的规定执行相关操作。分为下列一些种类:静态分析工具、代码规范审核工具、内存和资源检查工具、测试数据生成工具、测试框架工具、 测试结果比较工具、测试度量工具、测试文档生成和管理工具。
常用的单元测试自动化工具包括:(1)基于XUnit测试框架的测试工具,如Java编程中使用的JUnit,.NET程序编程中使用的NUnit等。(2)常用的C语言单元测试工具VcTester和C++Test。VcTester主要功能包括脚本化测试驱动(包括修改变量与调用函数)、脚本桩、在线测试、支持持续集成测试、测试覆盖率统计、测试管理、生成测试报告、测试消息编辑器等。C++Test可以自动测试任何C/C++函数、类,自动生成测试用例、测试驱动函数或桩函数,在自动化的环境下极其容易快速地使单元级的测试覆盖率达到100%。(3)Visual Unit单元测试工具。其功能特性包括自动生成测试代码、快速建立功能测试用例、高效完成白盒覆盖、快速排错调试、生成详尽的测试报告。VU具有极高的测试完整性,能够实现单元测试中的功能测试、语句覆盖、条件覆盖、分支覆盖、路径覆盖等测试。(4)分析覆盖率的工具。常见的LogiScope、TrueCoverage、PurecOverage等。(5)静态分析工具如pc_lint等。
集成测试
- 集成测试的主要任务
(1)模块间调用时数据是否丢失。
(2)模块组合后能否实现预期功能。
(3)模块是否对其他模块产生负面影响。
(4)全局数据结构是否被异常修改。
(5)模块的误差是否累积达到不可接受的程度。 - 集成测试实施方案
分为非增量式集成测试和增量式集成测试、三明治集成测试、核心集成测试、分层集成测试、基于使用的集成测试等。
(1)非增量集成测试:对所有模块进行个别的单元测试后,按程序结构图将各模块连接起来,把连接后的程序当作一个整体进行测试。
(2)增量式集成测试:包括自顶向下增量式集成测试和自底向上增量式集成测试。
自顶向下增量式集成测试表示逐步集成和逐步测试是按结构图自上而下进行的,即模块集成的顺序是首先集成主控模块(主程序),然后按照软件控制层次结构向下进行集成。从属于主控模块的模块按深度优先策略(纵向),或者广度优先策略(横向)逐步集成到结构中去。自顶向下测试的主要优点在于它可以自然地做到逐步求精,一开始便能让测试者看到系统的框架。它的主要缺点是需要提供被调用模拟子模块,被调用模拟子模块可能不能反映真实情况,因此测试有可能不充分。并且在输入/输出模块接入系统以前,在被调用模拟子模块中表示测试数据有一定困难。由于被调用模拟子模块不能模拟数据,如果模块间的数据流不能构成有向的非环状图,一些模块的测试数据便难以生成。同时,观察和解释测试输出往往也是困难的。
自底向上增量式集成测试是从最底层的模块开始,按结构图自下而上逐步进行集成并逐步进行测试工作。自底向上测试的优点在于,由于驱动模块模拟了所有调用参数,能够轻易地生成测试数据。缺点:直到最后一个模块被加入进去之后才能看到整个程序(系统)的框架。
(3)三明治集成测试:三明治集成测试是将自顶向下测试与自底向上测试两种模式有机结合起来,采用并行的自顶向下、自底向上集成方式,形成改进的三明治方法。
(4)核心系统先行集成测试:核心系统先行集成测试法的思想是先对核心软件部件进行集成测试,在测试通过的基础上再按各外围软件部件的重要程度逐个集成到核心系统中。
(5)高频集成测试:高频集成测试是指同步于软件开发过程,每隔一段时间对开发团队的现有代码进行一次集成测试。
系统测试
系统测试的目的在于将通过集成测试的软件系统与系统的需求定义作比较,发现软件与系统定义不符合或矛盾的地方。
- 系统测试的测试技术
(1)验证测试。验证系统是否正确无误的实现了用户需求规格说明书的内容中的全部内容。
(2)功能测试。通过对系统进行黑盒测试,测试系统的输入、处理、输出等各个方面是否满足需求。主要包括需求规格定义的功能系统是否都已实现、各功能项的组合功能的实现情况、业务功能间存在的功能冲突情况等,比如共享资源访问以及各子系统的工作状态变化对其他子系统的影响等。
(3)性能测试。性能测试检验安装在系统内的软件的运行性能。
(4)可靠性、稳定性测试。在一定负荷的长期使用环境下,测试系统的可靠性、稳定性。
(5)兼容性测试。测试系统中软件与各种硬件设备的兼容性、与操作系统的兼容性、与支撑软件的兼容性等。
(6)恢复测试。恢复测试是要采取各种人工方法使软件出错(而不是能正常工作),进而检验系统的恢复能力。
(7)安全测试。安全测试是检查系统对非法侵入行为的防范能力,就是设置一些企图突破系统安全保密措施的测试用例,检验系统是否有安全保密的漏洞。
(8)强度测试。强度测试检验系统的能力最高能达到什么实际限度。
(9)面向用户支持方面的测试。主要是面向软件系统最终的使用操作者的测试。主要检查测试软件系统对用户支持的情况,用户界面的规范性、友好性、可操作性以及数据的安全性等。
(10)其他限制条件的测试。如可使用性、可维护性、可移植性、故障处理能力的测试等。
验收测试
验收测试通常以用户或用户代表为主体来进行,按照合同中预定的验收原则进行测试,实质上是用户用大量的真实数据试用软件系统。
- 验收测试的主要内容
主要测试工作包括配置复审、合法性检查、文档检查、软件一致性检查、软件功能和性能测试与测试结果评审等几项工作。
(1)配置复审的目的在于保证软件配置齐全、分类有序,并且包括软件维护所必需的细节。
(2)合法性检查:检查开发者使用的开发工具是否合法。对在编程中使用的一些非本单位自己开发的,也不是由开发工具提供的控件、组件、函数库等,检查其是否有合法的发布许可。
(3)软件文档检查:包括项目实施计划、详细技术方案、软件需求规格说明书(STP)(含数据字典)、 概要设计说明书(PDD)、详细设计说明书(DDD)(含数据库设计说明书)、软件测试计划(STP)(含测试用例)、软件测试报告(STR)、用户手册(SUM)(含操作、使用、维护、应急处理手册)、 源程序(SCL)(不可修改的电子文档)、 项目实施计划(PIP)、项目开发总结(PDS)、软件质量保证计划(SQAP)、 软件配置计划(SCMPP)、项目进展报表(PPR)、阶段评审报表(PRR)等。
(4)软件代码测试:包括源代码一般性检查和软件一致性检查。源代码一般性检查仅对系统关键模块的源代码进行抽查,检查模块代码编写的规范性、批注的准确性、是否存在潜在性错误以及代码的可维护性;软件一致性检查主要包括编译检查、装/卸载检查、运行模块检查。
(5) 软件功能和性能测试:对软件开发设计的再确认。包括界面(外观)测试、可用性测试、 功能测试、稳定性测试、性能测试、 强壮性测试、 逻辑性测试、 破坏性测试、 安全性测试。
(6)测试结果交付内容:测试结束后,由测试组填写软件测试报告,并将测试报告与全部测试材料一并交给用户代表。测试报告包括下列内容:软件测试计划、软件测试日志、软件文档检查报告、软件代码测试报告、软件系统测试报告、测试总结报告、测试人员签字登记表。 -
、测试
测试是在软件开发公司内模拟软件系统的运行环境下的一种验收测试,即软件开发公司组织内部人员,模拟各类用户行为对即将面市的软件产品(称为版本)进行测试,试图发现并修改错误。经过测试测试调整的软件产品称为版本。紧随其后的测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用版本,并要求用户报告异常情况,提出批评意见,一般包括功能性、安全可靠性、易用性、可扩充性、兼容性、效率、资源占用率、用户文档等方面的内容,然后软件开发公司再对β版本进行改错和完善。
回归测试
回归测试是指软件系统被修改或扩充(如系统功能增强或升级)后重新进行的测试,回归测试是为了保证对软件修改以后,没有引入新的错误而重复进行的测试。回归测试应保证数据中可能影响测试的因素与未经修改扩充的原软件上进行测试时的那些因素尽可能一致,否则要想确定观测到的测试结果是由于数据变化引起的还是很困难。
回归测试有选择的执行以前的测试用例,常用的用例选择方法可以分为以下3种:(1)局限在修改范围内的测试;(2)在受影响功能范围内回归;(3)根据一定的覆盖率指标选择回归测试。该方法一般是在相关功能影响范围难以界定的时候使用。最简单的策略是规定修改范围内的测试是100%,其他范围内的测试规定一个用例覆盖阈值,例如60%。
系统排错
系统排错的任务是根据测试时所发现的错误,找出原因和具体的位置,并进行改正。
- 排错过程
排错过程有两种可能,一种是能确定错误原因并进行了纠正,为了保证错误已排除,需要重新执行暴露该错误的原测试用例以及某些回归测试;另一种是未找出错误原因,那么只能对错误原因进行假设,根据假设设计新的测试用例证实这种推测,若推测失败,需进行新的推测,直至找到错误并纠正。 - 排错方法和策略
常用的系统排错方法主要有原始类排错法、试探法、回溯法、对分查找法、归纳法和演绎法等。