1、网络测试技术与应用1.1 软件测试的背景与概念网络测试技术与应用1、测试的背景 今天我们使用的一切几乎都包含软件(包括嵌入式的软件)对于关键场合的各种软件应用,出现失效是根本不能接受的 除了上帝,我们都要测试!网络测试技术与应用软件是人编的软件是人编的所以不完美所以不完美实例:实例:2005年年9月月13日,魔兽世界日,魔兽世界“腐血腐血”问题问题 2003年年8月月14日,北美停电问题日,北美停电问题 约克郡号美国舰船事件约克郡号美国舰船事件,1997年年9月月21日日 Unix系统的系统的 2038年问题年问题2013年光大证券“816”乌龙事件2000年的巴拿马城致命的辐射治疗2011
2、年温州7.23 动车事故网络测试技术与应用 1)软件未实现产品说明书要求的功能)软件未实现产品说明书要求的功能 2)软件出现了产品说明书指明不应该出现的)软件出现了产品说明书指明不应该出现的错误错误 3)软件实现了产品说明书未提到的功能)软件实现了产品说明书未提到的功能 4)软件未实现产品说明书虽未明确提到但应)软件未实现产品说明书虽未明确提到但应该实现的目标该实现的目标 5)软件难以理解、不易使用、运行缓慢或者)软件难以理解、不易使用、运行缓慢或者-从测试员的角度从测试员的角度-最终用户会认为不好最终用户会认为不好网络测试技术与应用软件测试的起源 20 世纪60年代以前,计算机刚刚投入实际使
3、用,软件设计往往只是为了一个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言,软件的规模比较小,文档资料通常也不存在,很少使用系统化的开发方法,设计软件往往等同于编制程序,基本上是个人设计、个人使用、个人操作、自给自足的私人化的软件生产方式。网络测试技术与应用 60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件开发急剧增长。高级语言开始出现;操作系统的发展引起了计算机应用方式的变化;大量数据处理导致第一代数据库管理系统的诞生。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求
4、,迫切需要改变软件生产方式,提高软件生产率,软件危机(software crisis)开始爆发。网络测试技术与应用软件危机1、软件危机的现象:开发费用与进度失控,引起质量问题 可靠性差,难以维护 文档资料的缺失与不合格问题2、产生软件危机的原因:软件本身的特点决定(用户需求、软件规模,复杂度等原因)开发人员的弱点网络测试技术与应用 1968年在德国召开的NATO(North Atlantic Treaty Organization,北大西洋公约组织)会议上首次提出了“软件工程”概念,希望用工程化的原则和方法来克服软件危机。一个成熟的产品开发过程至少应该包括设计、开发和测试3个部分,一个成熟的产
5、品部门是非常重视测试环节的。测试环节做的好与坏,直接影响到产品的质量和市场对产品的评价。做好测试不是一件容易的事情,有时甚至比开发更有挑战性。如何做好测试,是摆在整个测试团队面前的一个难题。网络测试技术与应用 早期测试的含义比较狭窄,往往等同于“调试”,在产品完成时才开始测试 70年代开始出现的“第一类方法”,“试图验证软件是工作的”。70年代末Glenford J.Myers的第二类方法。“测试的目的是证伪”(测试是为发现错误而执行的一个程序或者系统的过程)网络测试技术与应用 第二类测试方法与需求和设计没有必然的关联,更强调测试人员发挥主观能动性,用逆向思维方式,不断思考开发人员理解的误区、
6、不良的习惯、程序代码的边界、无效数据的输入以及系统各种的弱点,试图破坏系统、摧毁系统,目标就是发现系统中各种各样的问题。这种方法往往能够发现系统中存在的更多缺陷。网络测试技术与应用 如果说开发者在创造世界,如果说开发者在创造世界,那么,测试者的任务就是要那么,测试者的任务就是要毁灭这个世界,当然,毁灭毁灭这个世界,当然,毁灭是为了重生!是为了重生!-目的在于提高软件产品的质量!目的在于提高软件产品的质量!网络测试技术与应用 80年带开始引入“软件质量”的概念,SQA。Bill Hetzel在软件测试完全指南(Complete Guide of Software Testing)一书中指出:“测
7、试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。”这个定义至今仍被引用。软件开发人员和测试人员开始坐在一起探讨软件工程和测试问题。软件测试已有了行业标准(IEEE/ANSI)网络测试技术与应用2、关于测试的误区1、“测试没有什么技术挑战”干测试是因为别无选择 如果我做开发,可以用给定的程序设计语言创造产品,这是很有意义的事情,而测试不过是例行公事和重复性的工作,不需要什么特殊技能网络测试技术与应用 Technology is the making,usage,and knowledge of tools,machines,techniques,crafts,syst
8、ems or methods of organization in order to solve a problem or perform a specific function 所以,测试工作本身,至少在测试的起步阶段,对于技术能力的要求是不高的。网络测试技术与应用 虽然测试本身对技术的要求越来越高,但是解决这些问题所需要的技术技能,应该还是比不过开发领域。如果你如果对纯粹的技术更加有偏好的话,你还是更应该做开发人员,而且最好还是做你们公司的核心的产品的开发,这样才能受到最大的锻炼,对你的成长更有帮助。网络测试技术与应用1.1.2 软件测试的目的、对象与原则 软件、产品公司必须尽全力减少、最
9、好消除所交付的产品中存在的缺陷;缺陷不可能在软件中隐藏得太久 用户在使用软件时,存在不可预知的“误操作”,必须要保证软件仍能正确运行;网络测试技术与应用1、测试的目地测试的目的是说明程序正确地执行它应测试的目的是说明程序正确地执行它应有的功能有的功能”这种说法正确吗?这种说法正确吗?网络测试技术与应用例1 程序程序Triangle,输入三个整数,表示一,输入三个整数,表示一个三角形的三个边长,该程序产生一个个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。为说明其腰三角形还是不等边三角形。为说明其能正确执行它的功能,
10、可使用能正确执行它的功能,可使用“测试用测试用例例”(3,4,5),(5,5,6),(6,6,6),程序都能给出正确结果,是否就可程序都能给出正确结果,是否就可认为程序是正确的?认为程序是正确的?网络测试技术与应用网络测试技术与应用Glenford J.Myers在在中认为:中认为:1.测试是为了寻找错误而运行程序的过程。测试是为了寻找错误而运行程序的过程。2.一个好的测试用例是指很可能找到迄今为止尚一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试。未发现的错误的测试。3.一个成功的测试是揭示了迄今为止尚未发现的一个成功的测试是揭示了迄今为止尚未发现的错误的测试。错误的测试。E.W.
11、Dijkstra 指出:指出:“程序测试能证明错误的存在程序测试能证明错误的存在,但不能证明错误不但不能证明错误不存在。存在。”网络测试技术与应用 软件测试的目的软件测试的目的 测试的目的测试的目的:发现程序的错误;:发现程序的错误;任务任务:通过在计算机上执行程序,暴露程序:通过在计算机上执行程序,暴露程序中潜在的错误。中潜在的错误。纠错的目的纠错的目的:定位和纠正错误;:定位和纠正错误;任务任务:消除软件故障,保证程序的可靠运行。:消除软件故障,保证程序的可靠运行。网络测试技术与应用 软件测试是根据软件开发个阶段的规格软件测试是根据软件开发个阶段的规格说明和程序的内部结构而精心设计一批说明
12、和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程结果),并利用这些测试用例去运行程序,以发现程序错误的过程。序,以发现程序错误的过程。测试肯定是促成产品质量的因素之一,但是测试本身却不能提高产品的质量,对于一个好的产品,测试与其他阶段恰当的交互是必不可少的。网络测试技术与应用2、软件测试的对象 从传统意义上来说,测试被狭义地定义为测试程序代码。是为了发现错误而执是为了发现错误而执行程序的过程;行程序的过程;广义来说,测试包含了所有生产优质产品的相关活动,生产软件产品必须有几个阶段(需求获取,分析,设计与编码),
13、除此之外还有测试(即传统意义的测试)测试贯穿于全部软件生存周期,并且不是周期结束前的最后一个活动!网络测试技术与应用测试与开发模型测试与开发模型 软件测试不仅仅是执行测试,而是一个包含很多复杂活动的过程,并且这些过程应该贯穿于整个软件开发过程。在软件开发过程中,应该什么时候进行测试,如何更好地把软件开发和测试活动集成到一起?其实这也是软件测试工作人员必须考虑的问题,因为只有这样,才能提高软件测试工作的效率,提高软件产品的质量,最大限度地降低软件开发与测试的成本,减少重复劳动。需要了解开发模型,瀑布、V、W、X等模型网络测试技术与应用瀑布模型 1970年Winston Royce提出了著名的瀑布
14、模型(Waterfall Model),直到80年代早期,它一直是唯一被广泛采用的软件开发模型。网络测试技术与应用 瀑布模型它将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。网络测试技术与应用V模型 20世纪80年代后期Paul Rook提出了著名的软件测试的V模型,旨在改进软件开发的效率和效果。清楚的描述了这些测试阶段和开发过程期间各阶段的对应关系。网络测试技术与应用 V模型指出,单元和集成测试应检测程序的执行是否满足软件设计的要求;系统测试应检测系统功能、性能的质量特性是否达到
15、系统要求的指标;验收测试确定软件的实现是否满足用户需要或合同的要求。但V模型存在一定的局限性,它仅仅把测试作为在编码之后的一个阶段,是针对程序进行的寻找错误的活动,而忽视了测试活动对需求分析、系统设计等活动的验证和确认的功能。网络测试技术与应用W模型 Evolutif公司针对V模型的缺陷,相对于V模型,提出了W模型的概念,W模型增加了软件各开发阶段中应同步进行的验证和确认活动。网络测试技术与应用 W模型强调:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、设计等同样要测试,也就是说,测试与开发是同步进行的。W模型有利于尽早地全面的发现问题。例如,需求分析完成后,测试人员就应该参与
16、到对需求的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,这将显著减少总体测试时间,加快项目进度。网络测试技术与应用 测试贯穿于全部软件生存周期,并测试贯穿于全部软件生存周期,并且不是周期结束前的最后一个活动!且不是周期结束前的最后一个活动!网络测试技术与应用软件生存期各阶段间需保持的正确性软件生存期各阶段间需保持的正确性用户要求用户要求用户:用户:我要什么我要什么?运行结果运行结果计算机:计算机:程序运行得程序运行得到的结果到的结果源程序源程序程序员:程序员:我要让计算我要让计算机什么做机什么做?设计说明书设计说明书设计员:设计
17、员:我要让软件我要让软件做什么做什么?需求说明书需求说明书分析员:分析员:我可以提我可以提供什么供什么?12345理解正确性理解正确性表达正确性表达正确性理解正确性理解正确性设计正确性设计正确性表达正确性表达正确性理解正确性理解正确性编码正确性编码正确性运行正确性运行正确性输入正确性输入正确性相符吗相符吗?网络测试技术与应用开发前期出现错误的扩展开发前期出现错误的扩展计划计划需求需求分析分析设设计计编编码码测测试试A A AB B 网络测试技术与应用软件缺陷的组成软件缺陷的组成 我们知道软件缺陷是由很多原因造成的,如果把它们按需求我们知道软件缺陷是由很多原因造成的,如果把它们按需求分析结果分析
18、结果规格说明书,系统设计结果,编程的代码等归类规格说明书,系统设计结果,编程的代码等归类起来,比较后发现,结果规格说明书是软件缺陷出现最多的地起来,比较后发现,结果规格说明书是软件缺陷出现最多的地方。方。网络测试技术与应用3、测试的原则 paretopareto原则:测试发现的错误中原则:测试发现的错误中80%80%很可能起源于很可能起源于20%20%的模块中。应孤立这些疑点模块重点测试的模块中。应孤立这些疑点模块重点测试。程序程序修改后要修改后要回归测试回归测试 穷举穷举测试是不可能的测试是不可能的网络测试技术与应用测试的原则 检查程序是否检查程序是否“未做其应该做的未做其应该做的”仅是测试
19、的一半,测仅是测试的一半,测试的另一半是检查程序是否试的另一半是检查程序是否“做了其不应该做的做了其不应该做的”。计划测试工作时不应默许假定不会发现错误计划测试工作时不应默许假定不会发现错误 最严重的错误最严重的错误(从用户角度从用户角度)是那些导致软件无法满足需是那些导致软件无法满足需求的错误。求的错误。程序中的问题根源程序中的问题根源可能在开发前期的各阶段可能在开发前期的各阶段解决、纠正错误也必须追溯到前期工作。解决、纠正错误也必须追溯到前期工作。网络测试技术与应用 1.3 软件测试的分类软件测试的分类 软件测试按照不同的分类标准,存在着各种各样的测试名称,比如按照软件项目流程阶段划分,可
20、分为单元测试、集单元测试、集成测试、系统测试、验收测试成测试、系统测试、验收测试。网络测试技术与应用 如下是一个典型瀑布式软件开发流程:网络测试技术与应用软件测试的分类软件测试的分类 单元测试:单元测试是对软件中的基本组成单位进行的测试,目的是检验软件基本组成单位的正确性。集成测试:集成测试是在软件系统集成过程中所进行的测试,目的是检查软件单位之间的接口是否正确。系统测试:是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等是否满足其规约所指定的要求。验收测试:是部署软件之前的最后一个测试操作,验收测试的目的是确保软件准备就绪,向软件购买都展示该软件系统满足其用户的需求。网络
21、测试技术与应用软件测试的另一种分类法 如果从测试工作对软件代码的可见程度划分,又可分为白盒测试、黑盒测试与白盒测试、黑盒测试与灰盒测试灰盒测试,这也是软件测试领域中最基本的两个概念。网络测试技术与应用软件输入输入不深入代码细节的测不深入代码细节的测试方法称为动态黑盒试方法称为动态黑盒测试。测试。软件测试员充当客户软件测试员充当客户来使用。来使用。输出输出网络测试技术与应用网络测试技术与应用网络测试技术与应用白盒测试白盒测试 白盒测试,指的是把“盒子”盖子去掉,去研究“盒子”里面的源代码和程序结构。白盒测试按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行
22、,检验程序中的每条通路是否都能按预定要求正确工作。网络测试技术与应用 静态白盒测试静态白盒测试即是利用眼睛,浏览代码,凭借经验,找出代码中的错误或者代码中不符合书写规范的地方,不要求在计算机上实际执行所测程序。动态白盒测试动态白盒测试通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。比如一段代码有4个分支,输入4组不同的测试数据使4组分支都可以走通而且结果必须正确。网络测试技术与应用灰盒测试灰盒测试 白盒和黑盒测试能发现软件在其生命周期不同阶段的不同类型的安全性隐患。而所谓的“灰盒测试”介于黑盒测试与白盒测试之间。可以这样理解,灰盒测试关注输出对于输入的
23、正确性,同时也关注内部表现,但这种关注不象白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。网络测试技术与应用1.2 测试用例“测试用例”(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序是否满足某个特定的需求。网络测试技术与应用 测试用例是将软件测试的行为、活动进行科学化的组织和归纳,目的是能够将软件测试的行为转化成可管理的模式。比如,当不同的测试工程师在相同的“环境”(指相同的被测软
24、件、测试环境等条件)下执行相同的的测试用例时,可以得出相同的结果,不会因为测试工程师的不同到导致测试结果的改变,这对于经常有测试工程师流动的企业、公司来说,在软件项目的管理上起到了非常重要的作用。测试用例也是将测试具体量化的方法之一,不同类别的软件或同一软件的不同功能,测试用例都是不同的。网络测试技术与应用测试用例的重要性 测试用例是测试部门的基石:测试用例是测试皇冠上的宝石 测试用例的地位决定其重要性:测试用例在测试执行过程中的指导性:网络测试技术与应用1.2.1 测试用例的评估 大体上,测试用例的质量可以从两个方面来衡量:单个测试用例的执行度 所有测试用例的覆盖度。网络测试技术与应用单个测
25、试用例 忠实度忠实度(测试用例应该忠实于被测设备和特性,应该严格遵守相关设计文档,标准协议和市场需求,这三个元素构成了测试用例的基本来源。如果测试步骤错误或者背离了产品设计的意图,无疑将导致错误的测试结果,会浪费测试人员,开发人员的宝贵时间)目的明确目的明确 做任何事都要有目的,测试用例更是如此。整个测试用例应该围绕一个明确的测试目的,然后展开测试步骤。测试目的代表了产品的一个测试点,测试目的是测试用例的中心灵魂。网络测试技术与应用 执行度执行度 测试用例的执行度代表了对产品特性理解的程度,测试用例越细致深入,就越有可能发现深层的缺陷。然而,要做到这一点不是容易的事情,需要对产品特性,协议的精
26、确理解和长期的测试经验积累。可重复性可重复性 测试用例写好了,可能会交给不同的测试人员,在不同的时间和场合执行测试。测试用例的可重复性是指在这些不同的情况下,应该有一致的测试结果。网络测试技术与应用可读性可读性 如同读文章一样,测试用例也是在测试人员之间传递阅读的。清晰的上下文关系,明确干净的描述让测试人员很容易理解测试的意图和步骤,避免了对测试意图的误解。通常,测试用例的可读性是容易被忽略的,然而要做好这一点并不困难。网络测试技术与应用测试用例集合 覆盖程度覆盖程度 Testing coverage(测试覆盖),指测试系统覆盖被测试系统的程度,一项给定测试或一组测试对某个给定系统或构件的所有
27、指定测试用例进行处理所达到的程度。对于产品测试特别是复杂庞大的产品,错过了测试点,就等于错过了产品缺陷。如果说每个测试用例覆盖了一个测试点,所有的这些测试点构成了整个产品的测试覆盖面。整个测试用例集应该覆盖从单一功能到复杂功能测试,系统测试,性能测试,兼容性测试,场景测试等方方面面,力图使测试盲点降到最低。网络测试技术与应用 清晰的分层结构清晰的分层结构 产品是复杂的,软件研发者面对这种复杂性采用的经典的方法瀑布模型,也就是从上到下,逐渐细分,大模块包括小模块,小模块包括更小的模块。对于测试用例来说,非常自然的,我们也需要考虑用这种层次化的组织结构来管理测试用例。网络测试技术与应用1.2.2
28、测试用例的分类和要素构成测试用例的分类和要素构成 测试用例的分类说法不一,其中一个普遍认同的说法是白盒测试和黑盒测试。本课程只对黑盒测试展开阐述 黑盒测试着眼于被测物外部结构,不考虑内部逻辑结构。黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。网络测试技术与应用黑盒测试用例的分类(从测试过程来分)黑盒测试用例的分类(从测试过程来分)单一功能测试(单一功能测试(feature testing)根据产品特征、操作描述和用户方案,测试产品的一个特性和可操作行为以确定它们满足设计需求。它只需考虑单个功能,不需要考虑整个软件的其他模块及代码。集成测试(集成测试(integrity
29、testing)集成测试,也叫组装测试或联合测试。在单一功能测试的基础上,将多个模块按照设计要求)组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。网络测试技术与应用 系统测试(system testing)系统测试是将已经确认的所有模块,包括软件、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,其目的是通过与系统的需求相比较,发现所开发的系统与用户需求不符或矛盾的地方,从而提出更加完善的方案.。回归测试(regression t
30、esting)在软件生命周期中的任何一个阶段,只要软件发生了改变,就可能给该软件带来问题。同样,在有新代码加入软件的时候,除了新加入的代码中有可能含有错误外,新代码还有可能对原有的代码带来影响。因此,每当软件发 生变化时,我们就必须重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能。为了验证修改的正确性及其影响就需要进行回归测试。黑盒测试用例的分类(从测试过程来分)黑盒测试用例的分类(从测试过程来分)网络测试技术与应用 一致性测试(compatibility testing)又包括功能一致性和协议标准一致性。是检验被测设备是否和设计要求一致,是否和标准协议一
31、致。边界值(boundary testing)长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。黑盒测试用例的分类(从测试方法来分)黑盒测试用例的分类(从测试方法来分)网络测试技术与应用 负面测试(Negative testing)是相对于正面测试(Positive testing
32、)而言的。它们也是测试设计时的两个非常重要的划分。简单点说,正面测试就是测试系统是否完成了它应该完成的工作;而负面测试就是测试系统是否不执行它不应该完成的操作。形象一点,正面测试就象一个毕恭毕敬的小学生,老师叫我做什么,我就做什么;而负面测试就象一个调皮捣蛋的孩子,你叫我这样做,我偏不这样做,而且和你对着干。开发人员也是最讨厌修改此类缺陷的。执行负面测试时,不单单要测试系统是否处理了用户的异常操作,还要检查系统对于这些异常操作是否给予了正确的错误提示。它是系统对用户进行继续正确操作的指引。黑盒测试用例的分类(从测试方法来分)黑盒测试用例的分类(从测试方法来分)网络测试技术与应用 稳定性测试(r
33、obust testing)压力测试(load testing)性能测试(performance testing)网络测试技术与应用测试用例的要素 一个完整的测试用例应该包含以下要素:Test ID(用例编号)Description(用例描述)Pre-setup(预置条件)Platform(测试平台)Priority(优先级)Complexity(复杂度)Steps Expected results(步骤/预期结果)网络测试技术与应用 用例描述应该是对测试用例目的和过程的简要描述,应该控制在几句话的范围内。用例描述应该使阅读者迅速并清楚地知道测试的意图,也就是测试的目的所在。对测试执行人员和测
34、试管理者来说,最关注的其实就是用例描述,通过对每个用例描述的预览,可以初步判断整个测试集的覆盖面和深度。测试步骤和预期结果是测试目的的展开。简单来说:测试步骤就是让被测设备到达某种状态,预期结果就是被测设备在这种状态下应该有的表现。预期结果必须和测试步骤一一对应,用来验证被测设备是否正常。网络测试技术与应用测试与测试用例 测试的目标是在用户发现缺陷之前找到他们 穷尽的测试是不可能的 测试贯穿与全部的软件开发周期 理解测试背后的原因(明白测什么,正确执行合适的测试)测试用例应该首先被测试网络测试技术与应用 测试用例需要不断完善,不断修订 充分注意测试中的群集现象。经验表明,测试后程序中残存的错误
35、数目与该程序中已发现的错误数目成正比。缺陷成群集中出现,因此测试应该关注这些缺陷。在设计测试用例时,应包括合理的输入条件和不合理的输入条件。所有的测试都应追溯到用户需求 应长期保留测试用例,直至系统废弃。网络测试技术与应用1.3 测试工作的生命周期 软件测试不可能发现产品中的全部BUG,在现实的研发活动中,提供给测试人员的资源也是极为有限的,如时间、人力资源、设备资源等。那么一项产品的开发活动或项目实施,什么时候应该开始测试?什么时候停止测试呢?网络测试技术与应用我们一般把软件测试周期分为如下七个阶段网络测试技术与应用1.3.1 计划阶段这是产品测试概念定义的阶段,定义测试标准和流程等。包含的
36、9个方面的主要工作:1、制定测试计划(包含测试大纲),测试周期的设定、测试的目标、质量参数、beta测试阶段的验收标准等等。2、制定各个阶段进行review(评价、核实)的时间,对上阶段的情况进行分析和总结,以调整计划。如讨论测试覆盖率、人员有无不足之类。3、制定错误报告的流程,比如那些问题要上报,那些问题暂时不用上报,并制定书写的格式,跟踪的方法,以及制定错误报告的类型。.网络测试技术与应用1.3.2 分析阶段 分析阶段是一个外部文档阶段,这个阶段的主要工作是从客户和开发组得到的文档并进行分析和总结。根据获取的信息去创建测试的框架和相应的测试文档。所以本阶段主要的工作是完成分析,搭出测试框架
37、,书写大纲等。包括的10个方面的主要工作(P14-15)网络测试技术与应用1.3.3 设计阶段 完成测试内部文档的阶段,这些文档大部分都是在分析阶段形成了大体的组织结构和大纲的文档,像测试用例之类的都有了一些基本的描述,本阶段主要的工作就是完成这些文档的最终书写。如测试计划,测试时间表,测试数据,各种相关文档都应该处于完成阶段。当然,仍然可以通过设计的危机处理机制进行更新。特别要指出的是,测试用例并不能够在本阶段完成。由于新功能的添加,具体功能的实现方法,修改功能等因素,测试用例只能不断的更新。网络测试技术与应用1.3.4 构建阶段 构建阶段,是在开发人员编码的同时,最终完成系统预先设置的各种
38、测试用例的阶段。本阶段的很多工作其实在上个阶段就已经涉及到了,完成本阶段的工作后,将进入到测试的主要阶段,对产品进行设定的各种测试。该阶段包括7个方面的工作,P16网络测试技术与应用1.3.5 循环测试阶段 循环测试阶段是最花费时间的阶。按照之前制定好的计划,利用各种资源、工具,依循完成的测试用例对系统进行一轮又一轮的测试,直到代码开发冻结。本阶段也包含了不断设置的回归测试。网络测试技术与应用1.3.6 最后测试和实施阶段 本阶段是代码冻结后的测试阶段,这个时候需要进行的是最后的验证测试,主要是完成最终的性能,压力,文档测试和UI等测试过程,开始形成系统说明书和用户手册。此时一般不在去修改主要
39、的源代码,只是对外观和界面的错误进行修复。只是对现有的一些问题进行跟踪和管理,必要的时候准备发布修复版。网络测试技术与应用1.3.7 实施后阶段 对整个项目进行总结的阶段。通过书写一些最终的报告。例如,错误分析报告,包括一共有多少个,有效率是多少,分布情况如何等等。这个阶段主要是将好的经验总结下来,对不足进行思考,为下个项目做准备。网络测试技术与应用1.4 BUG管理网络测试技术与应用什么是什么是bug Bug按照英文直译过来叫“虫子”。任何事物都不是完美的,何况是需要被测测试的物体。简单的来说,bug就是事物的缺陷。现实生活中充满了bug:人生病了,我们可以理解为有了bug;汽车抛锚了,我们
40、可以理解为出了bug,电脑死机了,更是一个bug。网络测试技术与应用如何判断Bug 但不是所有的问题都是bug。严格来说,是产品在规定范围或正常操作下出现的错误,才能称为bug。如前面提到的汽车抛锚了,如果是因为汽车使用年限超过了应该的年限,或者是司机的错误操作,都不能称为bug。下面是一个bug举例:Windows XP支持的最大共享文件夹名长度为80个英文字母或40个汉字,但设置共享文件夹名时可输入的范围是80个英文字符或80个汉字,如果共享文件夹名在4180个汉字之间,系统会提示该共享名包含无效的字符摂。其实真正的原因是共享文件夹名超长。网络测试技术与应用寻找Bug的目的 测试究竟是用来
41、做什么的?bug又有什么用处?测试不是为了找bug这么简单,测试的目的是通过找bug来提高产品质量,提高产品开发流程,继而满足市场和客户的要求。没有bug的完美产品是不存在的,一轮接一轮的测试就是为了让产品更加稳定,让bug被限制到尽可能小的范围。网络测试技术与应用 Bug的严重等级是对被测设备表现的一个评判。被测设备错误表现的严重性就决定了bug的严重等级。各家公司和机构对于严重等级的划分标准不一,但大体上可以按照下面的方式来定义:Priority 1 被测设备崩溃。被测设备重启。内存泄漏 系统配置丢失(硬件类)Bug的严重等级网络测试技术与应用 Priority 2 功能或模块不工作,测试
42、就结果或行为与预期不一致,且没有避开BUG的替代方法。功能缺失。系统性能与参考值相差太大。Priority 3 功能或模块不工作,测试就结果或行为与预期不一致,但有避开BUG的替代方法。网络测试技术与应用 Bug的优先级别 Bug的优先级别是从客户需求角度来说的,用户认为重要的特性出了问题,哪怕只是小小的显示信息错误,也应该在第一时间解决。网络测试技术与应用Bug的生命历程 Bug也是有生命的,从bug的发现,到bug的修复。就是一个bug的生命历程:网络测试技术与应用网络测试技术与应用1.4.2 发现发现bug网络测试技术与应用Bug从那里来?一个产品从设计到开发,凝聚了所有系统设计师,开发
43、人员,设计人员,管理人员的心血。从另一个方面来讲,这些不同的环节和不同人的工作,却是导致bug的原因。举例来说,可能出现bug的情况有:新特性的增加 对设计意图的错误理解 代码的反复修改 不严格的代码维护 开发人员的素质 紧张的开发进度。网络测试技术与应用怎么找bug?找bug决不是件简单的事情。一个高素质的测试人员应该做好一下的工作:熟悉产品设计需求 熟悉标准协议规范 熟悉产品操作手册 熟悉测试工具仪器的使用 有丰富的测试经验网络测试技术与应用当bug出现时 当我们在发现一个产品的问题时,怎么确定就是一个bug?这也不是个简单的问题,确定bug的过程称为bug定位。一般来说,可以按照一下几步
44、来做:排除非正确因素:排除非正确因素:需要排除的因素包括是否按照合理的测试步骤,是否在合理的测试场景,是否在产品规格范围内,等等。只有排除了这些正常因素,而被测设备依然会有不正常行为,才能初步定位为bug。网络测试技术与应用 收集收集bug相关信息相关信息 Bug出现时,应该保存好设备的配置,测试仪器的配置,设备的日志,屏幕输出等等。这些要素都是分析bug,修复bug的重要参考。寻找重现步骤寻找重现步骤 这是bug定位中的难点,特别对于多功能多模块的系统测试,bug产生的原因会很复杂,不是简单的表面现象就能找到重现条件。网络测试技术与应用 寻求开发人员的帮助寻求开发人员的帮助 Bug找到了以后
45、需要开发人员的确认和修复,测试人员需要和开发人员一起确认bug的原因,帮助开发人员找到bug的根源。报告报告bug 这时找到bug需要做的最后一步,通常会有专业的bug管理软件,如bugzilla,clearDDTS等等。http:/www.bugzilla.org/about/网络测试技术与应用什么是高质量的bug?找到了Bug的重现条件,从测试的角度来说,工作就完成了一大半。重现条件能够帮助开发人员更方便地定位,甚至开发人员会依赖于重现条件才能定位。找Bug的意义在于修复bug,不能重现的bug往往不能找到原因,更谈不上修复。网络测试技术与应用分析Bug趋势图 Bug不是越多越好,在适当的
46、时候发现适当数量和质量的bug才是产品经理所希望看到的。网络测试技术与应用网络测试技术与应用网络测试技术与应用如何报告如何报告bug 在有些公司里,程序员几乎会把一半的测试bug返回给测试组,因为那些bug不可再现、发现bug同设计要求一致,或者bug报告根本无法操作。为了防止这类问题,要提交好的测试bug,作为一个好的测试人员,必须遵循以下步骤:1)总结:简要描述客户或用户的质量体验和观察到的一些特征。2)压缩:精简任何不必要的信息,特别是冗余的测试步骤。3)去除歧义:使用清晰的语言,尤其要避免使用那些有多个不同或相反含义的词汇。网络测试技术与应用 4)中立:公正地表达自己的意思,对错误及其
47、特征的事实进行描述,避免夸张或忽略的语句,引起过度的注意力或忽视。5)评审:至少有一个同行,最好是一个有经验的测试工程师或测试经理,在你提交测试报告或测试评估报告之前先自己读一遍。好的测试bug描述是告诉读者测试人员发现了什么,而不是测试人员做了什么。因此只需要根据上述步骤写下最少的必需重现步骤网络测试技术与应用如何提交如何提交bug 一个好的错误跟踪系统包括了错误的必要信息,如果做得不好,会造成迷惑,并误导读者。好的故障描述应该包括十个基本部分:标题、项目、所属模块、优先级、重要性、异常等级、可重复性、现象、操作过程和附件。网络测试技术与应用标题标题 使用一两句话来描述错误,告诉经理、开发人
48、员以及其他读者为什么应该关心该问题。好的标题应该着重于出现的bug现 象。但是过于简洁易引起误导,使得原本重要的问题被忽视。因此必须应该采用简洁、切中要害的概要,这样才能引起读者的重视。不重要的就描述比较轻微,例 如:“联系人的email没有检查合法性”;重要的就要体现比较严重,例如:“填了运营商仍然提示运营商不能为空,使得无法进行下一步的操作”,会更容易 让开发人员理解究竟是什么问题及其重要性,并及时处理。网络测试技术与应用 项目项目 是指该错误属于哪一个项目,归哪个项目组解决,使不同的项目组看到和及时定位自己项目的错误。所属模块所属模块 是指准确说明发异常等级生错误的模块,切忌发生错误指派
49、模块,导致后续流程错误;网络测试技术与应用 优先级优先级 分为以下4级:1级:“马上解决”,表示问题必须马上解决,否则系统根本无法达到预定的需 求;2级:“高度重视”,表示有时间就要马上解决,否则系统偏离需求较大或预定功能不能正常实现;3级:“正常处理”,即进入个人计划解决,表示问题不影 响需求的实现,但是影响其他使用方面,比如页面调用出错,调用了错误的数据库数据库等;4级:“低优先级”,即问题在系统发布以前必须确认解决或确认可以不予解决。网络测试技术与应用 重要性重要性 分为以下5级:1级:“非常严重”,表示缺陷不修改整个系统流程不能继续;2级:“比较严重”,表示缺陷不修改不影响系统其他流程
50、,但是本模块流程不能继续;3级:“一般”,表示缺陷不影响流程;4级:“轻微”,表示缺陷可以延期解决;5 级:“优化”,表示修改以后流程会更好。网络测试技术与应用 异常等级异常等级 有以下5级:系统崩溃指该错误使得操操作系统作系统死机等致命性的错误;应用程序崩溃指该错误使得测试程序崩溃,即无任何反应;应用程序异常指错误使得应用程序结果不符合逻辑或是最初的需求;轻微异常指错误有,但是无伤大雅,例如错别字等;建议指改进后更好,不改进也对程序无碍。网络测试技术与应用 可重复性可重复性 是针对问题是否通过执行“操作步骤”就可以重新出现,如果是就“可再现”;如果这个bug只出现了一次,就再也不出现了,称这