软件测试培训测试的基本理论及方法测试的基本理论及方法对软件测试的误解如何理解软件测试软件测试的定义软件测试的对象测试的目的软件测试的分类测试类型的解释黑盒测试的几种典型方法测试的分类与比较测试流程测试规范软件测试的文档和模版软件系统的主要测试内容及技术WEB应用的测试测试工作中需要注意的问题企业的测试策略关于测试的几个问题对软件测试的误解如果发布出去的软件有质量问题,那是软件测试人员的错.软件测试技术要求不高,至少比编程容易多了.软件测试随便找一个能力差的人就能做.有时间就多测试一些,来不及就少测试一些.软件测试是测试人员的事,与开发人员无关.设计-实现-测试,软件测试是开发后期的一个阶段如何理解软件测试软件测试是一种有效的提高软件质量的手段,但即使在投入上有所保证,测试也不能百分百发现所有质量隐患.况且软件质量并不仅仅是测试出来的.很多人认为软件测试就是运行一下软件,看看结果对不对.但实际上,如何在有限的投入下,提高软件测试的效率和产出是一件很见功底的事.好的测试人员不仅要掌握各种测试技术,还要具备丰富的编程经验和对BUG的敏感.测试的复杂之处,除了测试技术问题之外,还有测试管理问题.测试不是可有可无,随心所欲的.规范化的软件开发需要对软件测试早做计划,分配必要的时间,人力和财力等资源,并将其作为项目管理的一个部分加以控制和协调.开发和测试是软件项目相辅相成的两个过程,人员间的交流,协作和配合是提高整体效率的重要因素.软件产品开发完毕,再进行测试的观念是有悖于生命周期理论的.软件产品质量问题越晚发现,修复的代价越大.需求设计编程内部测试外部测试发布修正BUG的代价一些常识和经验之谈测试能提高软件的质量,但是提高质量不能依赖测试。测试只能证明缺陷存在,不能证明缺陷不存在。“彻底地测试”难以成为现实,要考虑时间、费用等限制,不允许无休止地测试。我们应当祈祷:软件的缺陷在产品被淘汰之前一直没有机会发作。测试的主要困难是不知道如何进行有效地测试,也不知道什么时候可以放心地结束测试。每个开发人员应当测试自己的程序(份内之事),但是不能作为该程序已经通过测试的依据(所以项目需要独立测试人员)。80-20原则:80%的缺陷聚集在20%的模块中,经常出错的模块改错后还会经常出错测试应当循序渐进,不要企图一次性干完,注意“欲速则不达”。软件测试的定义软件测试是为了发现错误而执行程序的过程软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程软件测试就是在软件投进运行前,对软件需求分析、设计规格说明和编码的终极复审,是软件质量保证的关键步骤。软件测试不等于程序测试.软件测试贯穿于软件定义和开发的整个期间.需求分析,概要设计,详细设计,以及程序编码等各个阶段所得到的文档,包括需求规格说明,概要设计规格说明,详细设计规格说明以及源程序,都是软件测试的对象.软件测试的对象软件生存各个阶段间的确认和验证用户要求用户:我要什么?需求说明书分析员:我可以提供什么?设计说明书设计员:我要软件做什么?源程序程序员:我要让计算机怎么做?运行结果计算机:程序运行得到的结果理解正确性表达正确性理解正确性设计正确性表达正确性理解正确性编码正确性运行正确性输入正确性相符吗?12345软件配置:包括软件需求规格说明、软件设计规格说明、源代码等;测试配置:包括测试计划、测试用例、测试驱动程序等。实际上,在整个软件工程过程中,测试配置只是软件配置的一个子集。测试工具:为提高软件测试效率,可使用测试工具支持测试工具。例如:测试数据自动生成程序、测试结果分析程序等。测试的目的关于测试的目的,一般的观点认为,测试主要是为了查找软件中存在的错误。实际上,软件测试的目的不仅于此,具体如下:验证需求与设计的正确性;发现软件存在的错误;为软件开发商、用户确立关于软件质量的信心。软件测试的分类软件测试是一项复杂的系统工程,从不同的角度考虑可以有不同的划分方法,对测试进行分类是为了更好的明确测试的过程,了解测试究竟要完成哪些工作,尽量做到测试的全面性。软件测试按是否查看代码划分按阶段划分按是否运行程序划分其他动态测试静态测试验收测试系统测试集成测试单元测试灰盒测试白盒测试黑盒测试冒烟测试回归测试随机测试兼容性测试安装测试易用性测试界面测试逻辑测试性能测试功能测试压力测试负载测试稳定性测试一般性测试测试类型的解释名称说明静态测试静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的差错,并为测试用例选取提供指导。动态测试动态方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。单元测试主要测试软件模块的源代码。一般由开发人员而非独立测试人员来执行,因为测试者需要懂得该单元的设计与程序实现,测试者可能需要编写额外的测试驱动程序。集成测试将一些“构件”集成一起时,测试它们能否正常运行。这里“构件”可以是程序模块、客户机-服务器程序等等。名称说明系统测试测试软件系统是否符合所有需求,包括功能性需求与非功能性需求。一般由独立测试人员执行,通常采用黑盒测试方式。验收测试由客户或最终用户执行,测试软件系统是否符合需求规格说明书。回归测试回归测试是指对某些已经被测试过的内容进行重新测试。每当软件增加了新的功能,或者软件中的缺陷被修正,这些变更都有可能影响软件原有的功能和结构。为了防止软件的变更产生无法预料的副作用,不仅要对新内容进行测试,还要对某些老内容进行回归测试。Alpha测试一种先期的用户测试,此时系统刚刚开发完成。Alpha测试是由一个用户或多个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操纵环境下进行的受控测试,Alpha测试不能由该系统的程序员或测试员完成。Beta测试一种后期的用户测试,此时系统已经通过内部测试,大部分错误已经改正,即将正式发行。β测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。名称说明白盒测试是结构测试,也是逻辑驱动测试。基于软件内部设计和程序实现的测试方式。白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。黑盒测试是功能测试,也是数据驱动测试。基于软件需求所进行的测试。不关心软件内部结构、程序实现的算法。灰盒测试是介于白盒测试与黑盒测试之间的,可以这样理解,灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不象白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。压力测试压力测试是对系统不断施加压力的测试,通过确定一个系统的瓶颈或者不能接收的性能点来获得系统能提供的最大服务级别的测试。是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行软件压力测试的资源包括内部内存、CPU可用性、磁盘空间和网络带宽。目的是:需要了解AUT(被测应用程序)一般能够承受的压力,同时能够承受的用户访问量(容量),最多支持有多少用户同时访问某个功能。负载测试负载测试(Loadtesting),通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。名称说明性能测试测试软件在各种状况下的性能,如在正常或最大负载下的状况。包括负载测试、压力测试。易用性测试测试软件是否易用,主观性比较强。一般要根据很多用户的测试反馈信息,才能评价易用性。安装与反安装测试测试软件在“全部、部分、升级”等状况下的安装/反安装过程。恢复测试测试该系统从故障中恢复过来的能力。安全性测试测试该系统防止非法侵入的能力。兼容性测试测试该系统与其它软件硬件兼容的能力。比较测试通过与同类产品比较,考察该系统的优点、缺点。可移植性测试可移植性测试是指测试软件是否可以被成功移植到指定的硬件或软件平台上。用户界面测试-UI测试用户界面是指软件中的可见外观及其底层与用户交互的部分(菜单、对话框、窗口和其它控件)。用户界面测试是指测试用户界面的风格是否满足客户要求,文字是否正确,页面是否美观,文字、图片组合是否完美,操纵是否友好等等。UI测试的目标是确保用户界面为用户提供相应的访问或浏览功能。确保用户界面符合公司或行业的标准。包括用户友好性、人性化、易操纵性测试。黑盒测试的几种典型方法名称说明等价划分测试等价划分测试是根据等价类设计测试用例的一种技术。是黑盒测试的典型方法之一,通过把被测试程序所有可能的输进数据域划分成若干部分。从每一部分中选取少数有代表性的数据作为测试用例,可有效减少测试次数,提高软件测试效率,缩短软件开发周期。等价划分测试的目的就是为了在有限的测试资源的情况下,用少量有代表性的数据得到比较好的测试效果。等价类在测试数据设计上,分为有效等价类和无效等价类。有效等价类中的数据代表的是一组符合需求文档的正确的有意义数据。无效等价类则正相反边界条件测试等价划分方法的一种补充,由长期的测试工作经验得知,大量的错误是发生在输进或输出的边界上。因此针对各种边界情况设计测试用例,可以查出更多的错误。测试的分类与比较黑盒测试与白盒测试的比较白盒测试:关心软件内部设计和程序实现,主要测试依据是设计文档黑盒测试:不关心软件内部,只关心输入输出,主要测试依据是需求文档测试方式特征依据测试人员测试驱动程序黑盒测试只关心软件的外部表现,不关心内部设计与实现。软件需求任何人(包括开发人员、独立测试人员和用户)一般无需编写额外的测试驱动程序白盒测试关注软件的内部设计与实现,要跟踪源代码的运行。设计文档由开发人员兼任测试人员的角色需要编写额外的测试驱动程序不同阶段测试作用的比较单元测试、集成测试、系统测试、验收测试。是“从小到大”、“由内至外”、“循序渐进”的测试过程,体现了“分而治之”的思想。单元测试的粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由开发小组采用白盒加黑盒的方式来测试,既要验证“设计”又要验证“需求”。系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合“需求规格说明书”。验收测试与系统测试非常相似,主要区别是测试人员不同,验收测试由用户执行。开发与测试的V型关系如果软件开发过程采用严格的瀑布模型,那么开发与测试有“V”型的对应关系。需求开发高层设计详细设计编程单元测试集成测试系统测试验收测试测试流程测试流程第一步:制定测试计划。该计划被批准后转向第二步。第二步:设计测试用例。该用例被批准后转向第三步。第三步:如果满足“启动准则”,那么执行测试。第四步:撰写测试报告。第五步:消除软件缺陷。如果满足“完成准则”,那么正常结束测试。制定测试计划设计测试用例执行测试写测试报告消除软件缺陷审批审批回归测试完成测试完成准则启动准则测试的信息流测试信息流如下图所示:测试结果分析排错可靠性分析软件配置测试配置测试工具测试结果期望结果错误改正的软件出错率数据预测的可靠性软件测试的策略在软件工程中,测