1、第1章 软件测试理论基础,目录,软件测试的由来 软件测试的定义 软件测试的目的 软件测试的原则 软件测试的对象 软件测试的分类 软件测试流程 软件测试工作阶段,软件测试的由来,调试在已知错误的情况下,对软件程序代码做出的一系列检查,校正的过程。 测试在未知错误的情况下,检查程序代码是否有问题的过程。区分:软件测试从软件质量保证的角度来检查程序代码是否有误,而调试是为了解决当前已知的错误,调试活动无法替代软件测试活动。,软件测试的定义,软件测试就是为了发现错误而审查软件文档、检查软件数据和执行程序代码的过程。 软件测试应该是对软件形成过程的文档,数据以及程序进行的测试,而不仅是对程序进行的测试。
2、 60%以上的软件错误并不是程序错误,而是分析和设计的错误,提倡软件全生命周期测试的理念。,软件测试的目的,基于不同的立场,存在着两种完全不同的测试目的: 用户角度:希望软件测试暴露软件中隐藏的错误和缺陷,已考虑是否接受产品。 软件开发者角度:希望测试成为表明软件产品中不存在错误的过程,验证被测软件已正确的实现了用户的需求,确立人们对软件质量的信心。,软件测试的原则,软件测试的原则: 所有的软件测试都应追溯到用户需求。 应当把“尽早地和不断地进行软件测试”作为软件测试者的座右铭。 完全测试是不可能的,测试需要终止。 测试无法显示软件潜在的缺陷。也就是说测试只能证明软件存在错误而不能证明软件没有
3、错误。,软件测试的对象,用户要求 用户: 我要什么?,运行结果 计算机: 程序运行得到的结果,需求说明书 分析员: 我可以提供什么?,源程序 程序员: 我要让计算机怎么做,设计说明书 设计员: 我要让软件做什么?,相符吗?,理解正确性 表达正确性,理解正确性 设计正确性 表达正确性,理解正确性 编码正确性,运行正确性 输入正确性,软件测试的分类,一般的,我们将软件测试活动分为以下几类: 从是否关心软件内部结构和具体实现的角度划分: 黑盒测试 白盒测试 灰盒测试 从是否执行程序的角度划分: 静态测试 动态测试 从是否使用自动化测试工具划分: 手动测试 自动测试,软件测试分类 黑盒测试,黑盒测试又
4、叫功能测试、数据驱动测试或基于需求规格说明书的功能测试。该测试类别注重于测试软件的功能性需求。 测试工程师无需了解程序代码的内部构造,完全模拟软件产品的最终端用户使用该软件,检查软件产品是否达到了用户的需求。黑盒测试能更好的从用户角度来考察被测系统的功能性需求实现情况。,软件测试分类 白盒测试,白盒测试又称结构测试、逻辑驱动测试或基于程序代码内部构成的测试。 白盒测试需要测试工程师深入考查程序代码的内部结构、逻辑设计等。对于白盒测试工程师来说,软件产品的内部结构是敞开的。,软件测试分类 灰盒测试,灰盒测试介于白盒和黑盒测试之间。 灰盒测试一方面考虑程序代码的功能性表现,另一方面,又需要考虑程序
5、代码的内部结构。 通俗地讲,灰盒测试就是白加黑。,软件测试分类 静态测试,静态测试,顾名思义,就是静态的、不执行被测对象程序代码而寻找缺陷的过程。 通俗地讲,静态测试就是用眼睛看,阅读程序代码,文档资料等,与需求规格说明书中的客户需求进行比较,找出程序代码中设计不合理,以及文档资料有错误的地方。 在进行静态测试时可采用一些代码走查工具,如QA C+、C+ Test等。,软件测试分类 动态测试,实际的执行被测对象的程序代码,输入实现设计好的测试用例,检查程序代码运行得到的结果与测试用例中设计的预期结果之间是否有差异,判定实际结果与预测结果是否一致。 动态测试有四部分组成:设计测试用例、执行测试用
6、例、分析比较输出结果、输出测试报告。,软件测试分类 手动测试,它是测试人员设计测试用例并执行测试用例,然后根据实际的结果去和预期的结果相比较并记录测试结果,最终输出测试报告的测试活动。 可充分发挥测试工程师的主观能动性,将其智力体现在测试工作中,能发现许多的缺陷,但同时又有一定的局限性和单调枯燥性。,软件测试分类 自动化测试,定义利用测试工具,模拟用户业务使用流程,让他们自动运行来查找缺陷。 优点快、广泛、可重复性工作 缺点只可检查比较主要的问题,如崩溃、死机,无法发现一般的日常错误。编写脚本工作量也很大,有时会超过手动测试时间。我们要根据实际情况选择或者不选择测试工具,选择使用何种测试工具,
7、不能为了实用工具而可以的去使用工具。,软件测试流程,软件测试虽然是软件生命周期的一个独立阶段,但测试工作却渗透到从分析、设计直到编程的各个阶段中。需求测试、单元测试、集成测试、系统测试、性能测试、用户测试、回归测试,需求测试,在许多失败的项目中,70%85%的返工是由于需求方面的错误所导致的,因此我们必须在项目的源头(需求)就开始测试。对被测软件的需求规格说明书、概要设计文档、详细设计文档、数据库设计文档等文档资料进行查阅,重点检查需求规格说明书中是否存在描述不准确、需求定义模糊、需求用例不正确、语言存在二义性等等问题。,单元测试,又称模块测试,就是对程序代码中最小的涉及模块单元进行测试。在单
8、元测试中我们主要采用静态测试与动态测试相结合的办法。单元测试要求需要几年的代码编写经验,并且要十分熟悉当前的被测系统,以及该系统是否与其他系统的接口关联情况。单元测试在编码阶段占据非常重要的地位。可以降低编码的错误率,提高编码质量,集成测试,又称组装测试,是将软件产品各个模块组装起来,检查接口是否存在问题,以及组装后的整体功能、性能表现。一般可采用非增式集成方法、增式集成方法(自底向上集成、自顶向下集成、组合方式集成)等策略进行测试,利用以黑盒测试为主,白盒测试为辅的测试方法进行测试。主要解决各个组成但源代码是否符合开发规范、接口是否存在问题,整体功能有无错误、界面是否符合设计规范、性能是否满
9、足用户需求等。,系统测试,将通过集成测试的软件部署到某种较为复杂的计算机用户环境进行测试。目的:通过与系统的需求定义作比较,发现软件与系统的定义不符合或与之矛盾的地方。这个阶段主要进行的是安装卸载测试、兼容性测试、功能确认测试、安全测试等。采用黑盒测试法,主要考察被测软件的功能与性能表现。,性能测试,性能测试要求被测软件在业务处理速度、处理能力和所耗用的硬件系统资源比率满足用户的需求。不要尝试用手动方式进行性能测试,应当编写一段相应的程序或者使用专门的工具进行,如利用LoadRunner自动化性能测试工具。性能测试相对难度较大,要求测试人员掌握编程语言,精通业务流程,拥有深厚的项目经验。,用户
10、测试,可称为用户确认测试。正式验收前,需要用户对本系统做出一个评价,用户可对交付的系统做测试,并将测试结果反馈回来,进行修改、分析。用户测试环节是被测试软件首次作为正式的系统交友用户使用,用户会根据他们的实际使用情况进行测试、使用,并提出实际使用过程中的问题。用户测试是软件生产流程中的最后质检关。,回归测试,回归测试是经过一段时间以后再回过头来对以前修复过的Bug重新进行测试,看该Bug是否会重新出现。有些时候可采用自动化测试工具来进行回归测试,如利用QTP。一般情况下,都由测试工程师手动的执行以前的测试用例,来检查用例通过情况。,软件测试工作阶段,计划与设计阶段实施测试阶段测试总结阶段,计划
11、与设计阶段 -立项会议,由工程技术委员会召开立项会议,会议主要对项目的可行性进行分析,并且确定项目经理及项目测试组长。,计划与设计阶段 -需求评审,注:1需求定义基本完成,此时应在评审会议召开之前发给测试团队,预留时间给测试相关人员熟悉、理解。2测试部参与人员由测试部经理指定,主要由测试组长、测试设计等人员组成(还应包括配置管理人员、质量保证人员)。,计划与设计阶段 -测试工作启动,在正式测试任务下达前,开发团队应在项目(产品)开发计划完成后及时向测试团队下达预通知,告之较为确切的测试日期,提供当前最新的相关资料。部门经理和测试组长组建测试小组,并视具体情况决定是否需要调整人力、时间安排、测试
12、环境等其它资源。测试小组成员可预先熟悉必要的项目(产品)资料。,计划与设计阶段 -测试设计阶段-设计测试计划,针对需求分析文档和项目开发计划文档测试完成后,测试组需要编写测试计划文档、制定测试测略及预估测试过程中的风险,并设计出合理的规避风险的策略,为后续的测试工作提供直接的指导。,计划与设计阶段 -测试设计阶段-设计测试用例,在需求分析文档确立基线以后,测试组需要针对项目的测试需求编写测试用例,在实际的测试中,测试用例将是唯一实施标准。,计划与设计阶段 -设计内容评审,测试计划及测试用例的设计工作完成后,需通知项目组相关成员召开评审会议。在这之前需要将待评审的内容发给相关人员熟悉和理解。,实
13、施测试阶段 -测试交接,实施测试阶段 -实施测试-按计划进行测试,实施测试用例将花费测试组大部分时间,这些工作都是建立在前期很多计划工作的基础上。,实施测试阶段 -实施测试-提交阶段性报告,在约定的测试周期完成之后,测试组长需要总结此次测试的结果,编写阶段性测试报告。,实施测试阶段 -回归测试,在每轮测试结束之后,由测试组重新拷贝修改后的最新版本,进行回归测试。,实施测试阶段 -同行审查,测试总结阶段 -测试总结报告,在回归测试结束之后,测试组长将要编写测试总结报告,对测试进行总结,并且提交给全体项目组,为产品的后续工作提供重要的信息支持。,测试总结阶段 -测试验收,测试验收工作是在以上工作全部结束后,对测试的过程,效果进行验收,宣布测试结束。,测试总结阶段 -测试工作总结,测试归档是在测试验收结束宣布测试有效,结束测试后,对测试过程中涉及到各种标准文档进行归类,存档。,测试总结阶段 -测试总结报告,测试归档是在测试验收结束宣布测试有效,结束测试后,对测试过程中涉及到各种标准文档进行归类,存档。,