《《黑盒测试培训》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《黑盒测试培训》PPT课件.ppt(35页珍藏版)》请在三一办公上搜索。
1、软件测试培训内容,什么是软件测试软件测试对象测试的目的测试的分类功能测试方法与内容测试策略测试流程及相关文档测试人员的基本素质测试驱动开发介绍,什么是软件测试,软件测试是一种有效的提高软件质量的手段,但即使在投入上有所保证,测试也不能百分为百发现所有质量隐患.况且软件质量并不仅仅是测试出来的.很多人认为软件测试就是运行一下软件,看看结果对不对.但实际上,如何在有限的投入下,提高软件测试的效率和产出是一件很见功底的事.好的测试人员不仅要掌握各种测试技术,还要具备丰富的编程经验和对BUG的敏感.测试的复杂之处,除了测试技术问题之外,还有测试管理问题.测试不是可有可无,随心所欲的.规范化的软件开发需
2、要对软件测试早做计划,分配必要的时间,人力和财力等资源,并将其作为项目管理的一个部分加以控制和协调.开发和测试是软件项目相辅相成的两个过程,人员间的交流,协作和配合是提高整体效率的重要因素.,开发与测试的 V 型关系如果软件开发过程采用严格的瀑布模型,那么开发与测试有“V”型的对应关系。,软件产品开发完毕,再进行测试的观念是有悖于生命周期理论的.软件产品质量问题越晚发现,修复的代价越大.,需求,设计,编程,内部测试,外部测试,发布,修正BUG的代价,一些常识和经验之谈测试能提高软件的质量,但是提高质量不能依赖测试。测试只能证明缺陷存在,不能证明缺陷不存在。“彻底地测试”难以成为现实,要考虑时间
3、、费用等限制,不允许无休止地测试。我们应当祈祷:软件的缺陷在产品被淘汰之前一直没有机会发作。测试的主要困难是不知道如何进行有效地测试,也不知道什么时候可以放心地结束测试。每个开发人员应当测试自己的程序(份内之事),但是不能作为该程序已经通过测试的依据(所以项目需要独立测试人员)。80-20原则:80的缺陷聚集在20的模块中,经常出错的模块改错后还会经常出错测试应当循序渐进,不要企图一次性干完,注意“欲速则不达”。,软件测试的定义 软件测试是为了发现错误而执行程序的过程 软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用
4、例去运行程序,以发现程序错误的过程.,软件测试不等于程序测试.软件测试贯穿于软件定义和开发的整个期间.需求分析,概要设计,详细设计,以及程序编码等各个阶段所得到的文档,包括需求规格说明,概要设计规格说明,详细设计规格说明以及源程序,都是软件测试的对象.,软件测试的对象,软件生存各个阶段间的确认和验证,测试的目的,测试的目的是寻找错误,并且是尽最大可能找出最多的错误.在选取用例时,考虑那些易于发现程序错误的数据;一个好的测试用例在于发现至今未发现的错误;一个成功的测试是发现了至今未发现的错误的测试.,正确理解测试的目的十分重要。如果认为测试的目的是为了说明程序中没有缺陷,那么测试人员就会向这个目
5、标靠拢,因而下意识地选用一些不易暴露错误的测试示例。这样的测试是不真实的。为什么需要测试?因为软件中有Bug。为什么软件中有Bug?以下是一些原因:(1)开发人员不太了解需求,不清楚应该“做什么”和“不做什么”,常常做不合需求的事情,因此产生了Bug。(2)软件系统越来越复杂,开发人员不太可能精通所有的技术,如果不能正确地使用技术,将产生Bug。(3)技术文档普遍比较糟糕,文档本身就有Bug,导致使用者产生更多的Bug。(4)软件需求、设计报告、程序经常发生变更,每次变更都可能产生新的Bug。(5)任何人在编程时都可能犯错误,导致程序中有Bug。(6)人们常处于进度的压力之下,急忙之下容易产生
6、Bug,尤其是在期限临近之际。(7)人们过于自信,喜欢说“没问题”,不真实的“没问题”将产生真正的问题。,测试的分类,从测试方法的角度可以分为手工测试和自动化测试。手工测试:不使用任何测试工具,根据事先设计好的测试用例来运行系统,测试各功能模块自动化测试:利用测试工具,通过编写测试脚本和输入测试数据,自动运行测试程序。目前最常用的自动化测试工具是基于GUI的自动化测试工具,基本原理都是录制、回放技术。,从整体的角度可以分为单元测试、集成测试、系统测试、确认测试。单元测试:是针对软件设计的最小单位程序模块,进行正确性检验的测试工作。一般包括逻辑检查、结构检查、接口检查、出错处理、代码注释、输入校
7、验、边界值检查。单元测试的依据是系统的详细设计;一般由项目组开发人员自己完成。集成测试:在单元测试的基础上,将所有模块按照设计要求组装进行测试。一般包括逻辑关系检查、数据关系检查、业务关系检查、模块间接口检查、外部接口检查。系统测试:系统测试是在所有单元、集成测试后,对系统的功能及性能的总体测试。确认测试:模拟用户运行的业务环境,运用黑盒测试方法,验证软件系统是否满足用户需求或软件需求说明书中指明的软件特性(功能、非功能)上的。,从测试原理上分为:白盒测试、黑盒测试。白盒测试:是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺
8、点或者错误,进而加以修正。黑盒测试:是通过使用整个软件或某种软件功能来严格地测试,而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收和正确的输出,黑盒测试方法主要有等价类划分、边界值分析、错误推测法等。等价类划分:是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作
9、为测试用例.该方法是一种重要的,常用的黑盒测试用例设计方法.设计测试用例时,要同时考虑这两种等价类.因为,软件不仅要能接收合理的数据,也要能经受意外的考验.这样的测试才能确保软件具有更高的可靠性.边界值分析:长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误。错误推测法:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法.错误推测方法的基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例.例如,在单元测试时曾列出的许多在模块中常见
10、的错误.以前产品测试中曾经发现的错误等,这些就是经验的总结.还有,输入数据和输出数据为0的情况.输入表格为空格或输入表格只有一行.这些都是容易发生错误的情况.可选择这些情况下的例子作为测试用例。,从软件特性上分为功能测试和性能测试。功能测试:是指为了确保软件系统功能实现的正确性,完整性和其他特性而进行的测试。性能测试:是指为了评估软件系统的性能状况,和预测软件系统性能趋势而进行的测试和分析。,1、数据输入测试:向系统输入数据或输入数据库操作命令时,一般是测试系统对数据库中数据操作的过程。数据类型测试:由于不同的数据库系统对数据类型要求的不同,在定义数据库表时,也规定了数据字段的数据类型。测试步
11、骤和方法:在系统的数据维护功能界面上,录入或修改数据时,特意输入非系统设计的数据类型,检查系统是否可以接受,若不能接受则检查是否满足了系统在这方面的设计要求,如即刻清除非法内容、输入焦点不能到下一输入位置、出现系统自定义的提示信息、不允许出现开发工具的报错信息等。若系统可以接受并保存,则要看数据库表的字段类型设计是否与用户或习惯上不一致,并且要注意其他模块在调取该数据时,是否有特定要求。边界值测试:根据数据取值范围的要求,输入符合取值范围的数据、取值范围的上、下限和超过取值范围的数据。注意,除要测试数据库系统本身数据类型取值范围外,还要根据软件系统设计中的一些特定要求,设计测试用例来测试。,功
12、能测试方法与内容,数据合法性测试:测试人员除了要测试输入数据是否满足所使用数据库系统本身的数据类型和取值范围的要求外,还应该根据经验和软件系统和需求的特定要求检查输入数据的合法性。比如:日期合法性(出生年月、参保日期、发生时间、根据习惯和业务逻辑顺序对日期合理性的要求等)。工资、比例、率等,都要注意输入的合理、合法性。单引号和双引号:不要忽略输入单引号和双引号可能引起的错误和数据问题。在功能录入界面上,在某字段的输入框输入了包括单引号和双引号的数据,以后在通过Select 语句查询时可能会出问题。特别在基于WEB方式的系统,输入了单引号,在查询数据记录时,肯定会出现页面链接错误(页面无法链接或
13、找不到或链接对象错误)。空值测试:在测试数据录入或修改的功能界面时,若不输入任何东西,系统又没有设计成NOT NULL,则这时,要非常注意其影响。因为数据可以正常保存,但数据表该字段是空值,那么所有与该字段有关的操作,如:查询(AND)、计算(累加、连乘)等,则可能出现数据问题(计算结果为0,无记录返回)。对于测试人员首先要检查系统到底是作为空值,还是作为空串或空字符处理。另外对于允许不输入任何值的字段,在测试过程中,要检查是否在界面显示或打印报表时,这些字段作为了关键要素或标题等情况。,空格:在数据维护的功能界面上,输入数据时,要注意是否在输入位置有空格,首先看系统设计时,是怎么考虑的,若系
14、统允许输入空格,则检查条件查询或作为调用参数时的数据返回情况;另外检查程序是否使用了去掉空格的函数。数据校验的不一致:测试时,对于一些编号、编码、代码等主键或作为查询或调用条件的字段,要注意系统对他们的输入合法性检查与查询或调用条件的要求是否是一致的。特别是对于数据结构设计中没有特定约束,而由程序进行校验控制的情况。分析:数据输入测试的主要目的是保证输入到系统中数据的合法、合理性。我觉得,数据输入过程的检查是非常重要的,若在编程过程中,不注重数据的校验功能,虽然看起来加快了开发进度,但给以后会带来一些不可预计的编程或维护工作量。,2、目录路径测试测试系统中规定的路径要求,更改路径,检查系统的是
15、否可以正确运行及系统的排错功能。测试时,根据系统设计说明书(详细设计)或通过对程序源代码的熟悉,找出系统运行过程中指定的路径或在运行过程中,需要使用者选择路径的地方。特意更改路径(选择正确的路径、选择另外的路径、输入不存在的路径)。检查系统是否具有路径上的容错性和灵活性。比如,原则上在程序中,最好不要写绝对路径,另外可以提供配置路径的对话框,若输入了非法路径,系统有无提示等。,3、数据操作测试:包括数据操作测试和用户界面操作的测试。修改、新增数据:对于新增和修改数据,要注重以下几个方面的测试。界面上,新增数据成功后,数据列表是否立即刷新,输入有错误时,是否清空错误的数据,输入焦点是否得以控制。
16、在提示信息上,是否有保存成功的提示,输入有错误时,提示的错误信息是否准确,可读。数据方面,要通过SQL检查数据提交是否正确。删除数据:测试删除记录时,系统是否有确认提示,能否批量删除,根据系统详细设计,检查删除主表记录时,在业务上,其他相关表是否相应更改。事物的提交与回滚:熟悉C/S模式开发或数据库应用系统开发的人都知道,数据库事物的概念。对于一个比较复杂的业务逻辑或业务上有数据一致和完整性要求时,尽量使用事物对数据进行提交,这样一旦由于意外原因引起系统或硬件故障时,可以回滚。根据系统的设计要求在测试时,可人为模拟意外故障,来测试系统的数据完整性和容错能力。,4、工具条和快捷键测试:在功能界面
17、测试时,对系统菜单中定义的快捷键和菜单工具条中的工具按钮要测试。主要是有效性和一致性测试。有效性:检查是否有效,界面有无反应。一致性:定义或提示的信息是否与实际完成的功能一致。5、操作顺序测试按钮顺序测试:在功能界面上,不按照设计上或习惯上的操作顺序点击功能按钮,看系统有什么反应;多次、反复点击某一按钮,看系统有什么反应。主要是测试系统的控制、校验和容错能力。业务逻辑顺序:不按照系统的正常业务逻辑、流程操作,来测试系统是否控制了业务流程的顺序。6、按钮有效性控制测试:主要是测试当不具备条件或无实际意义的情况下,按钮的“Enabled”属性。比如:某一业务未处理,下一环节的功能按钮则应变灰(不可
18、用)。逐条显示数据记录,当游标已经指到了最后一条时,“下一条”和“末记录”按钮则应变灰等。,7、同时刻操作测试:对于删除、修改、增加数据和一些业务功能,进行多客户端同时刻操作测试,看系统有什么反应。8、附件压力测试:对于有发送、上传、下载、邮件等功能的系统,选取大的文件,进行测试,来检查系统的界面效果和稳定性,看是否会死机或长时间无任何反应等。9、数据输出测试:数据处理输出测试:主要测试对数据的排序、条件查询是否按照输入的条件或要求输出了正确的数据。打印输出:测试打印功能是否能够正常打印出报表,打印设置后,是否能按照设置的要求打印。10、WEB测试:基于WEB方式的应用,对于一些提交表单的页面
19、,通过多次点击“back”键,来测试系统的处理情况。对于有保存数据功能的页面,多次点击“保存”,来测试系统的处理情况。,测试策略,理念:降低测试成本。用较低的代价实现有效的测试,不应为了追求完美的测试而不失一切代价。如何合理地减少测试工作量减少冗余的测试白盒测试与黑盒测试的方式虽然不同,但往往有“异曲同工”之妙。在很多地方,白盒测试与黑盒测试会产生一模一样的效果(或者能推理出来),这样的测试是冗余的。在集成测试、系统测试阶段,可能要执行多次“回归测试”。每一次“回归测试”都会存在不少的冗余,应当设法剔除不必要的重复测试工作。减少无价值的测试无价值的测试通常是由于不懂得测试技术引起的。例如功能测
20、试,在等价区间之中,本来只要测试一个典型的输入就行了,如果有人在此区间测试了100次,那么其中99次就是无价值的。如何“偷工减料”有一些“短、平、快”的项目,经费本来就少,用户对质量要求也马马虎虎。为了能多挣一点钱,开发方不得不采用“偷工减料”的方式来降低测试代价。偷工减料的途径无非就是减少测试的内容和频度。但不能砍得太狠,否则软件拿不出手。基本方法是找出软件中需要优先测试的部分,其它次要部分可以忽略或将来再测试。,“偷工减料”方法的测试优先级:哪些功能是软件的特色?哪些功能是用户最常用的?如果系统可以分块卖的话,哪些功能块在销售时最昂贵?哪些功能出错将导致用户不满或索赔?哪些程序是最复杂、最
21、容易出错的?哪些程序是相对独立,应当提前测试的?哪些程序最容易扩散错误?哪些程序是全系统的性能瓶颈所在?哪些程序是开发者最没有信心的?,测试何时结束?一、基于测试用例的规则(1)先构造测试用例(并请有关人员进行评审)。(2)在测试过程中,当测试用例的不通过率达到20时,则拒绝继续测试,待开发人员修正软件后再进行测试。(3)当功能性测试用例通过率达到100,非功能性测试用例通过率达到90时,允许正常结束测试。该规则的优点是适用于所有的测试阶段,缺点是太依赖于测试用例。如果测试用例非常糟糕,那么该规则就失效了。二、基于“测试期缺陷密度”的规则把测试一个CPU小时发现的缺陷数称为“测试期缺陷密度”。
22、绘制“测试时间缺陷数”的关系图,如果在相邻n个CPU小时内“测试期缺陷密度”全部低于某个值m时,则允许正常结束测试。例如n大于10,m小于等于1。该规则比较适用于系统测试阶段。三、基于“运行期缺陷密度”的规则把软件运行一个CPU小时发现的缺陷数称为“运行期缺陷密度”。绘制“运行时间缺陷数”的关系图,如果在相邻n个CPU小时内“运行期缺陷密度”全部低于某个值m时,则允许正常结束测试。例如n大于100,m小于等于1。该规则比较适用于验收测试阶段,即客户试运行软件期间。,需求经常变更怎么办需求变更可能会让项目所有成员遭殃,如何“预防变更”以及“降低变更的代价”是软件工程的经典问题。本节仅论述需求变更
23、对测试的影响。需求变更将导致软件设计和实现的变更,也导致了测试变更。最让人难过的是上一次测试有可能白做了,如果软件变更比较大的话。测试人员不要只是自认倒霉,应当主动作些应变:(1)及时了解需求变更的详细情况,尽早调整测试计划,不要闷头按原计划测试。(2)将软件中稳定的部分与易变的部分区别对待,前者先测试,后者后测试。(3)向领导反映需求变更对测试造成的影响,为自己争取余地。(4)设计一些比较灵活的测试用例,能适应某些变更(不过技术难度比较高)。引申问题:如果在系统测试时,对照需求文档,发现软件多了功能或少了功能,该怎么办?如果发现软件少了功能,测试人员不可为了少干些活而隐瞒事实。如果发现软件多
24、了功能,测试人员不可认为这些功能反正是“锦上添花”,便自作主张地测试了事。两种情况都要报告给项目经理,有可能导致一系列的变更。,测试流程及相关文档,测试流程第一步:制定测试计划。该计划被批准后转向第二步。第二步:设计测试用例。该用例被批准后转向第三步。第三步:如果满足“启动准则”,那么执行测试。第四步:撰写测试报告。第五步:消除软件缺陷。如果满足“完成准则”,那么正常结束测试。,制定测试计划,设计测试用例,执行测试,写测试报告,消除软件缺陷,审批,审批,回归测试,完成测试,完成准则,启动准则,测试启动准则同时满足以下条件,允许开始测试:(1)测试计划已经制定并且通过了审批;(2)测试用例已经设
25、计并且通过了审批;(3)被测试对象已经开发完毕并等待测试。测试完成准则对于非严格系统可以采用“基于测试用例”的准则。同时满足以下条件允许结束测试:(1)功能性测试用例通过率达到100;(2)非功能性测试用例通过率达到90时。,测试相关文档测试计划:指明范围、方法、资源,以及相应测试活动的时间进度安排表的文档。测试用例:指明为完成一个测试项的测试输入、预期结果、预期执行条件等因素的文档。测试报告:指明执行测试结果的文档。,测试人员基本素质,(1)首先,应对软件测试感兴趣和对自己有自信,如果具备了这两点,那么在开发过程中不管遇到什么样的困难,我相信你一定能克服。(2)善于怀疑,世界上没有绝对正确的
26、,总有错误的地方,具有叛逆心理,别人认为不可能发生的事,我却认为可能发生。别人认为是对的,我却认为不是对的。(3)打破砂锅问到底的精神,对于只出现过一次的bug,一定找出原因,不解决誓不罢休。(4)保持一个良好的心情,否则可能无法把测试作好。不要把生活中的不愉快的情绪带到工作中来(5)做测试时要细心,不是所有的bug都能很容易的找出,一定要细心才能找出这些bug。(6)灵活一些,聪明一点,多制造一些容易产生bug的例子。(7)在有条件的情况下,多和客户沟通,他们身上有你所需要的。(8)设身处地为客户着想,从他们的角度去测试系统。(9)不要让程序员,以“这种情况不可能发生”这句话说服你,相反,你
27、应该去说服他,告诉他在客户心里,并不是这样的。(10)考虑问题要全面,结合客户的需求、业务的流程、和系统的构架,等多方面考虑问题。,(11)提出问题不要复杂化,这一点和前面的有点矛盾,如果你是一新手,暂时不要管这一点,因为最终将有你的小组成员讨论解决。(12)追求完美,对于新测试员来说,努力的追求完美,这对你很好,尽管有些事无法做到,但你应该去尝试。(13)幽默感,能和开发小组很好的沟通是关键,试着给你的开发小组找一个“BUG杀手”,或对他们说“我简直不敢相信,你写的程序居然到现在没有找到BUG”。(14)到此是不是对测试很有兴趣呢?不过我要告诉你,测试过程中有酸甜苦辣,其中的滋味只有你知道,
28、也许你会感到枯燥,要学会放松自己,去溜冰或做你喜欢做的事,不过,别放弃,因为你的自信告诉过你“你会是很优秀的测试员”不是吗?,TDD 概述 测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写测试代码。它以不断的测试推动代码的开发,也就是说在明确要开发某个功能之后,首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。再添加其他功能,如此循环直到完成全部功能的开发。需求向来就是软件开发过程中感觉最不好明确描述、易变的东西。这里说的需求不只是指用户的需求,还包括对代码的使用需求。测试驱动开发就是通过编写测试
29、用例,先考虑代码的使用需求(包括功能、过程、接口等),而且这个描述是无二义的,可执行验证的。通过编写这部分代码的测试用例,对其功能的分解、使用过程、接口都进行了设计。而且这种从使用角度对代码的设计通常更符合后期开发的需求。可测试的要求,对代码的内聚性的提高和复用都非常有益。因此测试驱动开发也是一种代码设计的过程。测试的作用也不仅仅局限于发现已经存在的bug,而是起到了指导开发的作用。,测试驱动开发,TDD 的一般步骤1新增测试用例2编译代码,新增的测试用例很可能不能通过3尽可能少的改动代码,让测试用例编译通过4添加新的测试用例,发现最新的测试用例不能编译通过5尽可能少的改动代码,让最新的测试用
30、例通过6运行所有的测试用例,保证每个测试用例都能通过7重构代码,消除重复设计。,TDD在实践中的应用敏捷开发,项 目,划分迭代轮次,迭代1,迭代2,迭代N,根据功能点划分story,story1,story2,story3,根据功能点划分story,story4,story5,story6,根据功能点划分story,story,story,story,TDD在迭代过程中的应用一、BA、测试人员、开发人员共同参与需求澄清会议,保证每个story的需求达成三方一致;二、BA和测试人员共同制定story验收标准,并由测试人员将验收标准记录下来,供开发人员在开发过程中随时查看;三、测试人员在开发人员开始编码之前按照验收标准添加完测试用例,并通过用例评审,发给开发人员。开发人员在开发过程中可以同时根据story验收标准和测试用例来指导开发,最大限度的保证story的正确性。,