软件测试定义是:使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别.它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness)、完全度(completeness)和质量(quality)的软件过程;是SQA(softwarequalityassurance)的重要子域。GrenfordJ.Myers曾对软件测试的目的提出过以下观点:(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。然而,这种观点指出测试是以查找错误为中心,而不是为了演示软件的正确功能.但是只从字面意思理解,可能会产生误导,认为发现错误是软件测试的唯一目的,查找不出错误的测试就是没有价值的测试,实际上并非如此!(1)测试并不仅仅是为了找出错误.通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进;(2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性;(3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法软件测试的内容:软件测试主要工作内容是验证(verification)和确认(validation),下面分别给出其概念:验证(verification)是保证软件正确地实现了一些特定功能的一系列活动,即保证软件做了你所期望的事情。(Dotherightthing)1.确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程;2.程序正确性的形式证明,即采用形式理论证明程序符号设一计规约规定的过程;3.评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断和提出报告。确认(validation)是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。即保证软件以正确的方式来做了这个事件(Doitright)1.静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性;2.动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期问各个阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。从不同的角度出发,软件测试可以划分为不同的分类:从是否关心软件内部结构和具体实现的角度划分A.白盒测试B.黑盒测试C.灰盒测试从是否执行程序的角度A.静态测试B.动态测试。从软件开发的过程按阶段划分有A.单元测试B.集成测试C.确认测试D.验收测试E.系统测试*测试过程按4个步骤进行,即单元测试、集成测试、确认测试和系统测试及发版测试。*开始是单元测试,集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。*集成测试把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。*确认测试则是要检查已实现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全、正确。*系统测试把已经经过确认的软件纳入实际运行环境中,与其它系统成份组合在一起进行测试。单元测试(UnitTesting)*单元测试又称模块测试,是针对软件设计的最小单位─程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。*单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。1.单元测试的内容*在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。(1)模块接口测试*在单元测试的开始,应对通过被测模块的数据流进行测试。测试项目包括:–调用本模块的输入参数是否正确;–本模块调用子模块时输入给子模块的参数是否正确;–全局量的定义在各模块中是否一致;*在做内外存交换时要考虑:–文件属性是否正确;–OPEN与CLOSE语句是否正确;–缓冲区容量与记录长度是否匹配;–在进行读写操作之前是否打开了文件;–在结束文件处理时是否关闭了文件;–正文书写/输入错误,–I/O错误是否检查并做了处理。(2)局部数据结构测试*不正确或不一致的数据类型说明*使用尚未赋值或尚未初始化的变量*错误的初始值或错误的缺省值*变量名拼写错或书写错*不一致的数据类型*全局数据对模块的影响(3)路径测试*选择适当的测试用例,对模块中重要的执行路径进行测试。*应当设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。*对基本执行路径和循环进行测试可以发现大量的路径错误。(4)错误处理测试*出错的描述是否难以理解*出错的描述是否能够对错误定位*显示的错误与实际的错误是否相符*对错误条件的处理正确与否*在对错误进行处理之前,错误条件是否已经引起系统的干预等(5)边界测试*注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。*如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。2.单元测试的步骤*模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测模块相联系的其它模块。–驱动模块(driver)–桩模块(stub)──存根模块*如果一个模块要完成多种功能,可以将这个模块看成由几个小程序组成。必须对其中的每个小程序先进行单元测试要做的工作,对关键模块还要做性能测试。*对支持某些标准规程的程序,更要着手进行互联测试。有人把这种情况特别称为模块测试,以区别单元测试。集成测试(IntegratedTesting)*集成测试(集成测试、联合测试)*通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:–在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;–一个模块的功能是否会对另一个模块的功能产生不利的影响;–各个子功能组合起来,能否达到预期要求的父功能;–全局数据结构是否有问题;–单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。在单元测试的同时可进行集成测试,发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统。*子系统的集成测试特别称为部件测试,它所做的工作是要找出集成后的子系统与系统需求规格说明之间的不一致。*通常,把模块集成成为系统的方式有两种–一次性集成方式–增殖式集成方式1.一次性集成方式(bigbang)*它是一种非增殖式组装方式。也叫做整体拼装。*使用这种方式,首先对每个模块分别进行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的软件系统。2.增殖式集成方式*这种集成方式又称渐增式集成*首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统*在集成的过程中边连接边测试,以发现连接过程中产生的问题*通过增殖逐步组装成为要求的软件系统。(1)自顶向下的增殖方式*这种集成方式将模块按系统程序结构,沿控制层次自顶向下进行组装。*自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。*选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。(2)自底向上的增殖方式*这种集成的方式是从程序模块结构的最底层的模块开始集成和测试。*因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测试完成,所以不再需要桩模块。在模块的测试过程中需要从子模块得到的信息可以直接运行子模块得到。*自顶向下增殖的方式和自底向上增殖的方式各有优缺点。*一般来讲,一种方式的优点是另一种方式的缺点。(3)混合增殖式测试*衍变的自顶向下的增殖测试–首先对输入/输出模块和引入新算法模块进行测试;–再自底向上组装成为功能相当完整且相对独立的子系统;–然后由主模块开始自顶向下进行增殖测试。*自底向上-自顶向下的增殖测试–首先对含读操作的子系统自底向上直至根结点模块进行组装和测试;–然后对含写操作的子系统做自顶向下的组装与测试。*回归测试–这种方式采取自顶向下的方式测试被修改的模块及其子模块;–然后将这一部分视为子系统,再自底向上测试。关键模块问题*在组装测试时,应当确定关键模块,对这些关键模块及早进行测试。*关键模块的特征:①满足某些软件需求;②在程序的模块结构中位于较高的层次(高层控制模块);③较复杂、较易发生错误;④有明确定义的性能要求。确认测试(ValidationTesting)*确认测试又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。*对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信息就是软件确认测试的基础。1.进行有效性测试(黑盒测试)*有效性测试是在模拟的环境(可能就是开发的环境)下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。*首先制定测试计划,规定要做测试的种类。还需要制定一组测试步骤,描述具体的测试用例。*通过实施预定的测试计划和测试步骤,确定–软件的特性是否与需求相符;–所有的文档都是正确且便于使用;–同时,对其它软件需求,例如可移植性、兼容性、出错自动恢复、可维护性等,也都要进行测试*在全部软件测试的测试用例运行完后,所有的测试结果可以分为两类:–测试结果与预期的结果相符。这说明软件的这部分功能或性能特征与需求规格说明书相符合,从而这部分程序被接受。–测试结果与预期的结果不符。这说明软件的这部分功能或性能特征与需求规格说明不一致,因此要为它提交一份问题报告。2.软件配置复查n软件配置复查的目的是保证u软件配置的所有成分都齐全;u各方面的质量都符合要求;u具有维护阶段所必需的细节;u而且已经编排好分类的目录。n应当严格遵守用户手册和操作手册中规定的使用步骤,以便检查这些文档资料的完整性和正确性。验收测试(AcceptanceTesting)*在通过了系统的有效性测试及软件配置审查之后,就应开始系统的验收测试。*验收测试是以用户为主的测试。软件开发人员和QA(质量保证)人员也应参加。*由用户参加设计测试用例,使用生产中的实际数据进行测试。*在测试过程中,除了考虑软件的功能和性能外,还应对软件的可移植性、兼容性、可维护性、错误的恢复功能等进行确认。*确认测试应交付的文档有:–确认测试分析报告–最终的用户手册和操作手册–项目开发总结报告。系统测试(SystemTesting)*系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。*系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统的定义不符合或与之矛盾的地方。软件测试网站推荐中国软件测试:介绍:中国软件测试网是中国IT实验室核心技术频道,致力于打造国内最大最全的软件测试技术文献平台。51testing软件测试论坛:介绍:软件测试网包括软件测试论坛、软件测试博客和文章资料精选三大模块,提供学习、交流、教材下载以及求职、招聘信息的发布、检索等服务。技术文献目录:手机测试:测试工具介绍:AutoRunner是国内第一款自动化测试工具,可以用来完成功能测试、回归测试、每日构建测试与自动回归测试等工作。是具有脚本语言的、提供针对脚本完善的跟踪和调试功能的、支持IE测试和Windowsnative测试的自动化测试工具。TestCen