软件测试基础知识软件生命周期软件生命周期(SDLC,SystemsDevelopmentLifeCycle)是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段。这种按时间分程的思想方法是软件工程的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。问题定义及规划此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性需求分析在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。“唯一不变的是变化本身。”同样需求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。软件设计此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。程序编码此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。软件测试在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分为单元测试、组装测试以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。运行维护软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进型维护两个方面。软件测试的定义软件测试是软件工程过程的一个重要阶段,是在软件发布前对软件开发各阶段产品的最终检查,是为了保证软件开发产品的正确性、完全性和一致性而检测软件错误、修正软件错误的过程。软件测试的目标(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。软件开发的目的是开发出实现用户需求的高质量、高性能的软件产品,而软件测试是以检查软件功能和其他非功能特性为核心,是软件质量保证的关键,也是成功实现软件开发目标的重要保障。软件测试的分类黑盒测试和白盒测试从测试是否针对软件结构与算法的角度分类(黑盒测试和白盒测试)。两种测试方法从不同的角度出发,反应了软件的不同侧面,也适用于不同的开发环境。黑盒测试又称功能测试、数据驱动测试或基于规格说明的测试,也可被称为用户测试,主要应用于快速应用开发(RAD)环境。黑盒测试方法把程序看成一个黑盒子,完全不考虑程序内部结构和处理过程。黑盒测试是在程序接口进行测试,它只是检查程序功能是否按照规格说明书的规定正常使用。典型的黑盒测试方法等价类划分因果图边界值分析黑盒主要是为了发现以下几类错误1)是否有不正确或遗漏了的功能?2)在接口上,输入能否正确的接受?能否输出正确的结果?3)是否有数据结构错误或外部信息(例如数据文件)访问错误?4)性能上是否能够满足要求?5)是否有初始化或终止性错误?白盒测试又称结构测试、逻辑驱动测试或基于程序本身的测试,也可称为程序员测试,主要用于结构化开发环境。白盒测试的前提是可以把程序看成装在一个透明的白盒子里,也就是完全了解程序结构和处理过程。白盒测试按照程序内部逻辑测试程序,检验程序中每条通路是否按预定要求正确工作。白盒测试又称结构测试。典型的白盒测试方法静态分析动态测试使用白盒测试方法主要想对程序模块进行如下的检查:对程序模块的所有独立的执行路径至少测试一次对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测试一次在循环的边界和运行界线内执行循环体测试内部数据结构的有效性等白盒测试与黑盒测试比较白盒测试黑盒测试测试依据程序内部结构规格说明优点能够对程序内部的特定部位进行覆盖测试能站在用户立场上进行测试缺点无法检验程序的外特性无法对未实现规格说明的程序内部欠缺部分进行测试不能测试程序内部特定部位如果规格说明有误,则无法发现静态测试和动态测试从是否需要执行被测试软件的角度分类(静态测试和动态测试)。静态测试不执行被测试的软件。类似于汽车检查。动态测试是在测试过程中执行被测试软件,类似于试车。测试不同阶段从测试的不同阶段分类(单元测试、集成测试、系统测试、验收测试)。按测试阶段分类,测试可分为4个主要阶段:单元测试、集成测试、系统测试和验收测试。这是一种从小到大、循序渐进的测试过程。单元测试单元测试是对程序员编写完成的一个个程序单元进行测试。(单元通常不是可运行的程序,单元测试必须编写额外的可运行的测试驱动程序。)单元测试又称模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。软件单元测试的目的是检测程序模块对《详细设计说明书》的符合程度;软件单元测试依据是《单元测试计划》。软件单元测试由测试工程师编制测试用例进行测试,及针对程序模块进行多次循环反复的单元测试,并将测试结果记录在针对单元测试的《软件测试报告》上。若程序模块通过单元测试,则按《配置管理规范》所规定的标识方法进行标识。单元测试-设计测试模型:驱动模块—相当于所测模块的主程序桩模块—也叫做存根模块,用以代替所测模块调用的子模块。单元测试考虑方面模块接口测试局部数据测试独立路径测试出错处理测试边界条件测试单元测试原则为模块正常运行设计为正向测试设计为逆向测试设计为满足特殊需求设计为代码覆盖设计单元测试执行检查编码是否遵循软件编程规范和标准自动或手动分析程序设计测试用例并运行错误跟踪分析集成测试集成测试有渐增式和非渐增式两种。渐增式的集成中可以采用两种“自顶向下”和“自底向上”。集成测试中会混合使用白盒测试和黑盒测试方法。集成测试可以发现模块间接口以及全局数据结构等问题。系统测试系统测试的目的是检查系统是否符合软件需求。系统测试采用黑盒测试方式。系统测试的主要内容有:功能测试、健壮性测试、性能-效率测试、用户界面测试、安全性测试、压力测试、可靠性测试、安装/反安装测试等。为了保证测试的客观性,一般由机构的独立测试小组来执行系统测试。验收测试验收测试是由用户完成的测试,验收测试的内容与系统测试的内容类似,验收测试可以分为Alpha测试盒Beta测试。回归测试回归测试的范围测试全部用例问题修改后的检验测试高风险模块/系统基于操作剖面选择测试回归测试的基本过程识别出软件中被修改的部分从原基线测试用例库T中,排除所有不再使用的测试用例,确定那些对新的软件版本依然有效的测试用例,其结果是建立一个新的基线测试用例库T0依据一定的策略从T0中选择测试用例测试被修改的软件如果必要,生成新的测试用例集T1,用于测试T0无法充分测试的软件部分用T1执行修改后的软件第2和第3步测试验证修改是否破坏了现有的功能,第4和第5步测试验证修改工作本身测试各种分类间关系单元测试的目的是检测程序模块对《详细设计说明书》的符合程度;软件单元测试依据为《单元测试计划》集成测试会混合使用白盒测试和黑盒测试方法测试阶段主要依据测试人员、测试方式主要测试内容单元测试详细设计规格说明书由程序员执行白盒测试接口测试、路径测试集成测试概要设计规格说明书由程序员执行白盒测试和黑盒测试接口测试、路径测试、功能测试、性能测试系统测试用户需求规格说明书由独立测试小组进行黑盒测试功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、压力测试、可靠性测试、安装/反安装测试验收测试用户需求规格说明书由用户执行黑盒测试软件测试的内容回归测试回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。功能测试功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。功能测试也叫黑盒子测试或数据驱动测试,只需考虑各个功能,不需要考虑整个软件的内部结构及代码。一般从软件产品的界面、架构出发,按照需求编写出来的测试用例,输入数据在预期结果和实际结果之间进行评测,进而提出更加使产品达到用户使用的要求。Mercury的WinRunner是典型的自动化测试工具。WinRunner是一种用于检验应用程序能否如期运行的企业级软件功能测试工具。通过自动捕获、检测和模拟用户交互操作,WinRunner能识别出绝大多数软件功能缺陷,从而确保那些跨越了多个功能点和数据库的应用程序在发布时尽量不出现功能性故障。性能测试性能测试时通过自动化的测试工具模拟多种正常、峰值以及异常负载调节来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。性能测试类型包括负载测试、强度测试、容量测试等。负载测试(LoadTesting):负载测试是一种主要为了测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能。强度测试(StressTesting):强度测试也就是压力测试,压力测试主要是为了测试硬件系统能否达到需求文档设计的性能目标,譬如在一定时期内,系统的CPU利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等。压力测试和负载测试最大的差别在于测试目的不同。容量测试(VolumeTesting):确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等。易用性测试易用性测试是指用户使用软件时是否感觉方便,比如是否最多点击鼠标三次就可以达到用户的目的。易用性与可用性存在一定的区别,可用性是指是否可以使用,易用性是指是否方便使用。易用性测试包括针对应用程序的测试,同时还包括对用户手册系统文档的测试。通常采用质量外部模型来评价易用性。包括如下方面的测试:1)易理解性测试2)易学性测试3)易操作性测试4)吸引性测试5)易用的依从性测试易用性测试方法有:静态测试;动态测试、动态和静态结合测试。安装与反安装测试测试软件在“全部、部分、升级”等状况下的安装/反安装过程。软件安装测试1)安装过程中对于缺省安装目录及任意指定的安装目录,是否都能正确安装2)若是选择安装,查看能否实现其相应的功能3)在所有能中途退出安装的位置退出安装程序后,验证此程序并未安装成功(没有程序组及程序项产生)4)软件安装后,对其他已经安装的软件是否有影响5)裸机安装后,各功能点是否可用6)安装前,安装程序是否判断可用磁盘空间大小,如果不能满足安装空间要求,安装程序能否继续7)安装过程中查看版权声明、版本信息、公司名称、LOGO等是否符合标准8)安装过程中界面显示与提示语言是否准确友好9)重复安装时系统是否有提示、是否可以覆盖安装、是否可以升级安装、是否允许多版本共存、是否有注册码或硬件加密狗、在没有它们(或错误)的情况下能否顺利安装。软件反安装测试1)卸载后注册表中的注册信息及相关的程序安装目录是否能完全删除掉2)卸载过程中完全删除共享文件后,看其他程序能否正常运行3)卸载后是否对其他已安装的程序有影响4)系统卸载后用户建立文档是否保留5)软件卸载画面上的软件名称及版本信息是否正确6)在所有能中途退出卸载的位置是否能正确退出7)卸载过程中界面显示与提示语言是否准确、友好8)卸载后安装此系统能否打开原来保存的文件,并