• 1. 软件测试的基本理论及方法
  • 2. 软件测试的基本理论及方法对软件测试的误解 如何理解软件测试 软件测试的定义 软件测试的对象 软件测试分类和比较 软件测试的目的 软件测试组织 软件测试规范 软件测试的内容和技术 WEB应用测试
  • 3. 对软件测试的误解如果发布出去的软件有质量问题,那是软件测试人员的错. 软件测试技术要求不高,至少比编程容易多了. 软件测试随便找一个能力差的人就能做. 有时间就多测试一些,来不及就少测试一些. 软件测试是测试人员的事,与开发人员无关. 设计-实现-测试,软件测试是开发后期的一个阶段
  • 4. 如何理解软件测试软件测试是一种有效的提高软件质量的手段,但即使在投入上有所保证,测试也不能百分为百发现所有质量隐患.况且软件质量并不仅仅是测试出来的. 很多人认为软件测试就是运行一下软件,看看结果对不对.但实际上,如何在有限的投入下,提高软件测试的效率和产出是一件很见功底的事.好的测试人员不仅要掌握各种测试技术,还要具备丰富的编程经验和对BUG的敏感.测试的复杂之处,除了测试技术问题之外,还有测试管理问题. 测试不是可有可无,随心所欲的.规范化的软件开发需要对软件测试早做计划,分配必要的时间,人力和财力等资源,并将其作为项目管理的一个部分加以控制和协调. 开发和测试是软件项目相辅相成的两个过程,人员间的交流,协作和配合是提高整体效率的重要因素.
  • 5. 软件产品开发完毕,再进行测试的观念是有悖于生命周期理论的.软件产品质量问题越晚发现,修复的代价越大. 需求设计编程内部测试外部测试发布修正BUG的代价
  • 6. 一些常识和经验之谈 测试能提高软件的质量,但是提高质量不能依赖测试。 测试只能证明缺陷存在,不能证明缺陷不存在。“彻底地测试”难以成为现实,要考虑时间、费用等限制,不允许无休止地测试。我们应当祈祷:软件的缺陷在产品被淘汰之前一直没有机会发作。 测试的主要困难是不知道如何进行有效地测试,也不知道什么时候可以放心地结束测试。 每个开发人员应当测试自己的程序(份内之事),但是不能作为该程序已经通过测试的依据(所以项目需要独立测试人员)。 80-20原则:80%的缺陷聚集在20%的模块中,经常出错的模块改错后还会经常出错 测试应当循序渐进,不要企图一次性干完,注意“欲速则不达”。
  • 7. 软件测试的定义软件测试是为了发现错误而执行程序的过程 软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程.
  • 8. 软件测试不等于程序测试.软件测试贯穿于软件定义和开发的整个期间. 需求分析,概要设计,详细设计,以及程序编码等各个阶段所得到的文档,包括需求规格说明,概要设计规格说明,详细设计规格说明以及源程序,都是软件测试的对象.软件测试的对象
  • 9. 软件生存各个阶段间的确认和验证
  • 10. 软件配置:包括软件需求规格说明、软件设计规格说明、源代码 等; 测试配置:包括测试计划、测试用例、测试驱动程序等。实际上,在整个软件工程过程中,测试配置只是软件配置的一个子集。 测试工具:为提高软件测试效率,可使用测试工具支持测试工具。例如:测试数据自动生成程序、测试结果分析程序等。
  • 11. 测试的目的测试是程序的执行过程,目的在于发现错误; 一个好的测试用例在于发现至今未发现的错误; 一个成功的测试是发现了至今的错误的测试.
  • 12. 测试的种类名称说明黑盒测试基于软件需求,而不是基于软件内部设计和程序实现的测试方式。白盒测试基于软件内部设计和程序实现的测试方式。单元测试主要测试软件模块的源代码。一般由开发人员而非独立测试人员来执行,因为测试者需要懂得该单元的设计与程序实现,测试者可能需要编写额外的测试驱动程序。集成测试将一些“构件”集成一起时,测试它们能否正常运行。这里“构件”可以是程序模块、客户机-服务器程序等等。功能测试测试软件的功能是否符合功能性需求,通常采用黑盒测试方式。一般由独立测试人员执行。系统测试测试软件系统是否符合所有需求,包括功能性需求与非功能性需求。一般由独立测试人员执行,通常采用黑盒测试方式。回归测试指错误被修正后或软件功能、环境发生变化后进行的重新测试。回归测试的困难在于不好确定哪些内容应当被重新测试。验收测试由客户或最终用户执行,测试软件系统是否符合需求规格说明书。
  • 13. 名称说明负载测试测试软件系统的最大负载,超出此负载软件可能会失常。压力测试概念上与负载测试相似,叫法不同。性能测试测试软件在各种状况下的性能,如在正常或最大负载下的状况。易用性测试测试软件是否易用,主观性比较强。一般要根据很多用户的测试反馈信息,才能评价易用性。安装与反安装测试测试软件在“全部、部分、升级”等状况下的安装/反安装过程。恢复测试测试该系统从故障中恢复过来的能力。安全性测试测试该系统防止非法侵入的能力。兼容性测试测试该系统与其它软件硬件兼容的能力。比较测试通过与同类产品比较,考察该系统的优点、缺点。Alpha 测试一种先期的用户测试,此时系统刚刚开发完成。Beta测试一种后期的用户测试,此时系统已经通过内部测试,大部分错误已经改正,即将正式发行。
  • 14. 测试的分类与比较测试方式 白盒测试:关心软件内部设计和程序实现,主要测试依据是设计文档 黑盒测试:不关心软件内部,只关心输入输出,主要测试依据是需求文档 测试阶段 单元测试、集成测试、系统测试、验收测试。是“从小到大”、“由内至外”、“循序渐进”的测试过程,体现了“分而治之”的思想。 单元测试的粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。 集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由开发小组采用白盒加黑盒的方式来测试,既要验证“设计”又要验证“需求”。 系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合“需求规格说明书”。 验收测试与系统测试非常相似,主要区别是测试人员不同,验收测试由用户执行。
  • 15. 软件测试过程模型V模型是最具有代表意义的测试模型 。 V模型是软件开发瀑布模型的变种,它反映了测试活动与分析和设计的关系 。 从左到右,描述了基本的开发过程和测试行为,非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系 。 箭头代表了时间方向,左边下降的是开发过程各阶段,与此相对应的是右边上升的部分,即各测试过程的各个阶段。
  • 16. 软件测试过程模型相比于V模型,W模型更科学。W模型可以说是前者自然而然的发展,它强调:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、功能和设计同样要测试。 测试与开发是同步进行的,从而有利于尽早地发现问题。以需求为例,需求分析一完成,我们就可以对需求进行测试,而不是等到最后才进行针对需求的验收测试。 测试不仅仅是评定软件的质量,测试还可以尽可能早地找出缺陷所在,从而帮助改进项目内部的质量。
  • 17. 测试内容 接口与路径测试。 功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、压力测试、可靠性测试、安装/反安装测试… 测试阶段 主要依据 测试人员、测试方式 主要测试内容 单元测试系统设计文档由开发小组执行白盒测试 接口测试、路径测试 集成测试系统设计文档 需求文档由开发小组执行白盒测试和黑盒测试 接口测试、路径测试 功能测试、性能测试 系统测试需求文档由独立测试小组执行黑盒测试 功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、压力测试、可靠性测试、安装/反安装测试 验收测试需求文档由用户执行黑盒测试
  • 18. 黑盒测试与白盒测试的比较 测试方式特征依据测试人员测试驱动程序黑盒测试只关心软件的外部表现,不关心内部设计与实现。软件需求任何人(包括开发人员、独立测试人员和用户)一般无需编写额外的测试驱动程序白盒测试关注软件的内部设计与实现,要跟踪源代码的运行。设计文档由开发人员兼任测试人员的角色需要编写额外的测试驱动程序
  • 19. 问题1:有了“黑盒”测试为什么还要“白盒”测试? 黑盒测试只能观察软件的外部表现,即使软件的输入输出都是正确的,却并不能说明软件就是正确的。因为程序有可能用错误的运算方式得出正确的结果,例如“负负得正,错错得对”,只有白盒测试才能发现真正的原因。 白盒测试能发现程序里的隐患,象内存泄漏、误差累计问题。在这方面,黑盒测试存在严重的不足。 问题2:由于单元测试要写测试驱动程序,非常麻烦,能否等到整个系统全部开发完后,再集中精力进行一次性地单元测试呢? 如果这样做,在开发过程中,缺陷会越积越多并且分布得更广、隐藏得更深,反而导致测试与改错的代价大大增加。最糟糕的是无法估计测试与改错的工作量,使进度失去控制。因此为图眼前省事而省略单元测试或者“偷工减料”,是“得不偿失”的做法。 问题3:如果每个单元都通过了测试,把它们集成一起难道会有什么不妥吗?集成测试是否多此一举? 要把N个单元集成一起肯定靠接口耦合,这时可能会产生在单元测试中无法发现的问题。例如:数据通过不同的接口时可能出错;几个函数关联在一起时可能达不到预期的功能;在某个单元里可以接受的误差可能在集成后被扩大到无法接受的程度。所以集成测试是必要的,不是多此一举。
  • 20. 问题4:在集成测试的时候,已经对一些子系统进行了功能测试、性能测试等等,那么在系统测试时能否跳过相同内容的测试? 不能!因为集成测试是在仿真环境中开展的,那不是真正的目标系统。再者,单元测试和集成测试通常由开发小组执行。根据测试心理学的分析,开发人员测试自己的工作成果虽然是必要的,但不能作为成果已经通过测试的依据。 问题5:既然系统测试与验收测试的内容几乎是相同的,为什么还要验收测试? 首先是“信任”问题。对于合同项目而言,如果测试小组是开发方的人员,客户怎么能够轻易相信“别人”呢? 所以当项目进行系统测试之后,客户再进行验收测试是情理之中的事。否则,那是客户失职。 不论是合同项目还是非合同项目,软件的最终用户各色各样(如受教育程度不同、使用习惯不同等等)。测试小组至多能够模仿小部分用户的行为,但并不具有普遍的代表性。 问题6:能否将系统测试和验收测试“合二为一”? 系统测试不是一会儿就能做完的,比较长时间的用户测试很难组织。用户还有自己的事情要做,他们为什么要为别人测试呢?即使用户愿意做系统测试,他们消耗的时间、花费的金钱大多比测试小组的高。 系统测试时会找出相当多的软件缺陷,软件需要反反复复地改错。如果让用户发现“内幕”,一是丢脸,二是会吓跑买主。所以还是关起门来,先让测试小组做完系统测试的好。
  • 21. 回归测试 回归测试是指对某些已经被测试过的内容进行重新测试。每当软件增加了新的功能,或者软件中的缺陷被修正,这些变更都有可能影响软件原有的功能和结构。为了防止软件的变更产生无法预料的副作用,不仅要对新内容进行测试,还要对某些老内容进行回归测试。
  • 22. 测试人员的组织了解开发人员的测试心理 测试的目的是找出尽可能多的缺陷。所以测试是“破坏性”的,而开发却是“建设性”的。开发人员总是喜欢欣赏程序的成功之处,而不愿看到失败之处。让开发者去做“蓄意破坏”的测试,就象杀自己的孩子一样难以接受。 开发者对自己的程序印象深刻,并总以为是正确的(自信是应该的)。倘若在设计时就存在理解错误,或因不良的编程习惯而流下了隐患,他本人很难发现这类错误. 开发者对自己的程序的功能、接口十分熟悉,他自己几乎不可能因为使用不当而引发错误,这与大众用户的情况不太相似,所以测试自己的程序不具备典型性。 结论:开发人员应当测试自己的程序,这是他分内的工作。但是开发人员在测试自己的程序时,很难做到客观、公正,所以自我测试不具有说服力。
  • 23. 如何组织测试人员:应当视企业的人力资源而定 条件特别好的公司,可以为每一个开发人员分配一名独立的测试人员。这样的测试人员职业化程度很高,可以完成单元测试、集成测试和系统测试工作,能够实现开发与测试同步进行。 条件比较好的公司,可以设置一个独立的测试小组,该测试小组轮流参加各个项目的系统测试。而单元测试、集成测试工作由项目的开发小组承担。 条件一般的公司,养不起独立的测试小组。单元测试、集成测试工作由项目开发小组承担。当项目进展到系统测试阶段,可以从项目外抽调一些人员,加上开发人员,临时组织系统测试小组。 条件比较差的公司,也许只有一个项目和为数不多的一些开发人员。那么就让开发人员一直兼任测试人员的角色,相互测试对方的程序。如果人员实在太少了,只好让开发者测试自己的程序,有测试总比没有测试好吧!
  • 24. 避免开发人员与测试人员产生矛盾 开发人员不能很好地测试自己的程序是因为做不到“无情”。但如果测试人员真的做到了“无情”却会引起开发人员的愤怒,遭人白眼。由于开发与测试存在“对立”关系,开发人员与测试人员很容易产生矛盾,这对项目而言是一种伤害。 开发人员的注意事项: (1)不要敌视测试人员。要理解测试的目的就是发现缺陷,是测试人员的工作职责。不要以为测试人员吃饱了没事干,存心找茬。 (2)不要轻视测试人员,别说人家技术水平差,不配搞开发只好搞测试。 测试人员的注意事项: (1)发现缺陷时不要嘲笑开发人员,别说他的程序真臭、到处是Bug。 (2)在开发人员压力太大时或心情不好时不要火上浇油,发现缺陷时别大声嚷嚷。 尽量不要相互讽刺对方,例如: A对B说:你唯一的特点就是无能。 B对A说:你唯一的特点就是粗鲁。 还要注意的是,如果测试人员与开发人员的关系非常好,可能会导致在测试的时候“手下留情”,这对项目也是一种伤害。
  • 25. 企业的测试策略 理念: 企业的主要目的是获取利润,降低测试成本也是盈利的一种方式。 用较低的代价实现有效的测试,不应为了追求完美的测试而不失一切代价。 如何合理地减少测试工作量 减少冗余的测试 白盒测试与黑盒测试的方式虽然不同,但往往有“异曲同工”之妙。在很多地方,白盒测试与黑盒测试会产生一模一样的效果(或者能推理出来),这样的测试是冗余的。 在集成测试、系统测试阶段,可能要执行多次“回归测试”。每一次“回归测试”都会存在不少的冗余,应当设法剔除不必要的重复测试工作。 减少无价值的测试 无价值的测试通常是由于不懂得测试技术引起的。例如功能测试,在等价区间之中,本来只要测试一个典型的输入就行了,如果有人在此区间测试了100次,那么其中99次就是无价值的。 如何“偷工减料” 有一些“短、平、快”的项目,经费本来就少,用户对质量要求也马马虎虎。为了能多挣一点钱,开发方不得不采用“偷工减料”的方式来降低测试代价。偷工减料的途径无非就是减少测试的内容和频度。但不能砍得太狠,否则软件拿不出手。基本方法是找出软件中需要优先测试的部分,其它次要部分可以忽略或将来再测试。
  • 26. “偷工减料”方法的测试优先级: 哪些功能是软件的特色? 哪些功能是用户最常用的? 如果系统可以分块卖的话,哪些功能块在销售时最昂贵? 哪些功能出错将导致用户不满或索赔? 哪些程序是最复杂、最容易出错的? 哪些程序是相对独立,应当提前测试的? 哪些程序最容易扩散错误? 哪些程序是全系统的性能瓶颈所在? 哪些程序是开发者最没有信心的?
  • 27. 测试何时结束? 一、基于测试用例的规则 (1)先构造测试用例(并请有关人员进行评审)。 (2)在测试过程中,当测试用例的不通过率达到20%时,则拒绝继续测试,待开发人员修正软件后再进行测试。 (3)当功能性测试用例通过率达到100%,非功能性测试用例通过率达到90%时,允许正常结束测试。 该规则的优点是适用于所有的测试阶段,缺点是太依赖于测试用例。如果测试用例非常糟糕,那么该规则就失效了。 二、基于“测试期缺陷密度”的规则 把测试一个CPU小时发现的缺陷数称为“测试期缺陷密度”。绘制“测试时间-缺陷数”的关系图,如果在相邻n个CPU小时内“测试期缺陷密度”全部低于某个值m时,则允许正常结束测试。例如n大于10,m小于等于1。该规则比较适用于系统测试阶段。 三、基于“运行期缺陷密度”的规则 把软件运行一个CPU小时发现的缺陷数称为“运行期缺陷密度”。绘制“运行时间-缺陷数”的关系图,如果在相邻n个CPU小时内“运行期缺陷密度”全部低于某个值m时,则允许正常结束测试。例如n大于100,m小于等于1。该规则比较适用于验收测试阶段,即客户试运行软件期间。
  • 28. 需求经常变更怎么办 1、需求变更可能会让项目所有成员遭殃,如何“预防变更”以及“降低变更的代价”是软件工程的经典问题。本节仅论述需求变更对测试的影响。 2、需求变更将导致软件设计和实现的变更,也导致了测试变更。最让人难过的是上一次测试有可能白做了,如果软件变更比较大的话。 3、测试人员不要只是自认倒霉,应当主动作些应变: (1)及时了解需求变更的详细情况,尽早调整测试计划,不要闷头按原计划测试。 (2)将软件中稳定的部分与易变的部分区别对待,前者先测试,后者后测试。 (3)向领导反映需求变更对测试造成的影响,为自己争取余地。 (4)设计一些比较灵活的测试用例,能适应某些变更(不过技术难度比较高)。 引申问题:如果在系统测试时,对照需求文档,发现软件多了功能或少了功能,该怎么办? 如果发现软件少了功能,测试人员不可为了少干些活而隐瞒事实。如果发现软件多了功能,测试人员不可认为这些功能反正是“锦上添花”,便自作主张地测试了事。两种情况都要报告给项目经理,有可能导致一系列的变更。
  • 29. 测试规范测试流程 第一步:制定测试计划。该计划被批准后转向第二步。 第二步:设计测试用例。该用例被批准后转向第三步。 第三步:如果满足“启动准则” ,那么执行测试。 第四步:撰写测试报告。 第五步:消除软件缺陷。如果满足“完成准则”,那么正常结束测试。制定测试计划设计测试用例执行测试写测试报告消除软件缺陷审批审批回归测试完成 测试完成准则启动准则
  • 30. 测试的信息流 测试信息流如下图所示:
  • 31. 软件测试的策略 在软件工程中,测试过程应该按4个步骤进行,即单元测试、组装(集成)测试、确认测试和系统测试。下图给出了软件测试经历的4个步骤。
  • 32. 测试规范测试启动准则 同时满足以下条件,允许开始测试: (1)测试计划已经制定并且通过了审批; (2)测试用例已经设计并且通过了审批; (3)被测试对象已经开发完毕并等待测试。 测试完成准则 对于非严格系统可以采用“基于测试用例”的准则。同时满足以下条件允许结束测试: (1)功能性测试用例通过率达到100%; (2)非功能性测试用例通过率达到90%时。 对于严格系统,应当补充“基于测试期缺陷密度”的规则: (3)相邻n个CPU小时内“测试期缺陷密度”全部低于某个值m。例如n大于10,m小于等于1。
  • 33. 测试的文档《测试计划》:指明范围、方法、资源,以及相应测试活动的时间进度安排表的文档。 《测试方案》:指明为完成软件或软件集成特性的测试而进行的设计测试方法的细节文档。 《测试用例》:指明为完成一个测试项的测试输入、预期结果、预期执行条件等因素的文档。 《测试规程》:指明执行测试时测试活动序列的文档。 《测试报告》:指明执行测试结果的文档。
  • 34. 建立测试计划定义测试目标 开发测试矩阵 软件模型 结构特性 批量测试的阶段和用例 为在线系统作概念上的测试脚本 软件测试矩阵 定义测试管理 测试计划的一般性信息 定义测试里程碑 定义管理上的检查点 书写测试计划
  • 35. 评审测试计划涉及评审的问题 评审测试的开始时间是否会延期 有没有抵触评审的角色 一段时间内是否很难得到工作的检查信息。 更换工具有可能导致他们反感评审工作 评审结果可能会影响对个人的工作评价 对于最终成品的检查 项目的需求规格说明书 软件返工/维护的文档 升级后的技术文档 被更改的源程序 测试计划 用户手册(包括在线帮助)
  • 36. 测试用例测试用例的基本要素有:目的、前提条件、输入数据或动作、期望的响应。
  • 37. 建议测试方法测试方法 测试用例的概念是简单的 建立有效的测试用例是复杂的 设计测试文件 测试用例应当包含合法的和非法的输入 每一个动作只进行一次关键操作 输入测试数据 分析结果 尝试将测试文件违反程序的规则进行输入 压力测试的测试工具 以大信息量的数据进行输入 这是一个昂贵的测试,应根据需要来选择 在线系统需要做压力测试
  • 38. 测试报告目标 表示出目前项目的实际状况 明确什么是测试做的工作,什么是不做的工作。 给出系统的操作性能的评价 明确什么时候系统可以进行产品化的工作 关注点 测试报告只有真正需要的时候才有用,需要配合市场和管理 测试的信息是不充分的(对于评价一个项目来说) 测试状况并不能真实的反应个人的状况
  • 39. 测试期间数据的收集有关测试结果的积累数据 测试任务,测试集合和测试事件的描述 缺陷分析 由于计划的问题,导致没有发现的缺陷的数据 严重的缺陷 缺陷类型 为什么缺陷没有发现 效果
  • 40. 测试报告报告目前的软件状态 功能/测试矩阵 功能测试的状态报告,侧重点分析 关于功能的工作时间轴 期望发现 VS 实际发现的缺陷比 没有发现的缺陷和改正的缺陷的差距 按照类型分类,没有改正的缺陷的平均值 缺陷分类报告 测试活动报告
  • 41. 软件系统的主要测试内容及技术接口与路径测试 功能测试 健壮性测试 性能测试 用户界面测试 信息安全测试 压力测试 可靠性测试 安装/反安装测试
  • 42. 接口与路径测试 数据一般通过接口输入和输出,所以接口测试是白盒测试的第一步。每个接口可能有多个输入参数,每个参数有“典型值”、“边界值”、“异常值”之分,所以输入的组合数可能并不少。根据接口的定义,可以推断某种输入应当产生什么样的输出。输出包括函数的返回值和输出参数。如果实际输出与期望的输出不一致,那么说明程序有错误。白盒方式的接口测试和黑盒方式的功能测试,其方法十分相似。 一个函数体内的语句可能只有十几条,但逻辑路径可能有成千上万条。想遍历测试几乎是不可能的,不测试或者胡乱找几条路径测试却又不行。 对于非严格系统而言,在分析路径方面花费很多精力是不值得的。我认为在构造接口测试的同时已经建立了测试路径。因为每一种输入将产生唯一的输出,输入与输出之间的路径也是唯一的。由于接口测试中的输入是有代表性的,因此相应的路径也具有代表性,不用得着费煞苦心地去找测试路径。 路径测试的检查表 数据类型、变量值、逻辑判断、循环、内存管理、文件I/O、错误处理 由于接口测试是枚举的,有可能漏掉某些状况,导致一些重要的路径没有被测试。预防措施有: 观察是否有程序语句从来没有被执行过。如果发生在这种情况,要么是程序有错误,存在无用的代码;要么是接口测试不充分,漏掉了一些路径。 要特别留意函数体内的错误处理程序块(如果存在的话),这是最易被人疏忽的路径,隐患最多。
  • 43. 软件系统的主要测试内容及技术接口与路径测试用例的参考模板
  • 44. 软件系统的主要测试内容及技术功能测试 功能测试的基本方法是构造一些合理输入(在需求范围之内),检查输出是否与期望的相同。如果两者不一致,即表明功能有误。也有例外的情况,如《需求规格说明书》中的某个功能写错了,而实际上软件的功能却是正确的,这时要更改的是《需求规格说明书》。 功能测试看起来比较简单,只要看得懂《需求规格说明书》,谁都会做。难点在于如何构造有效的输入。由于输入空间通常是无限的,穷举测试显然行不通。那么随便输入一些东西,碰运气行不行? 功能测试有两种比较好的测试方法:等价划分法和边界值分析法。 等价划分是指把输入空间划分为几个“等价区间”,在每个“等价区间”中只需要测试一个典型值就可以了。等价划分法来源于人们的直觉与经验,可令测试事半功倍。 “缺陷遗漏在角落里,聚集在边界上”。边界值测试法是对等价划分法的补充。如果A和B是输入空间的边界值,那么除了典型值外还要用A和B作为测试用例。 例如测试函数。凭直觉,等价区间应是(0, 1)和(1, +∞)。可取典型值x=0.5以及x=2.0进行“等价划分”测试。再取 x=0以及x=1进行“边界值”测试。
  • 45. 健壮性测试 健壮性是指在异常情况下,软件还能正常运行的能力。健壮性有两层含义:一是容错能力,二是恢复能力。 容错性测试通常构造一些不合理的输入来引诱软件出错,例如: (1)输入错误的数据类型。如“猴”年“马”月。 (2)输入定义域之外的数值。如上海人常说的“十三点” 粗暴一些方式俗称“大猩猩”测试法。除了不能拳打脚踢嘴咬外,什么招术都可以使出来。例如在测试客户机-服务器模式的软件时,把网络线拔掉,造成通信异常中断。 恢复测试重点考察一下几项: (1)系统能否重新运行; (2)有无重要的数据丢失; (3)是否毁坏了其它相关的软件硬件。
  • 46. 健壮性测试目标 当在进行安装或组装操作过程中,文件丢失时或发生意外后系统有能力重新进行操作 如何使用 程序的安装,运行方式,工具的使用和关键技术经过足够的评估 系统开发完毕后,介绍一下发生失败后的处理过程 例子 人为的使一个系统在安装或者组装过程中产生错误 什么时间去使用 当操作的连续性是个重点的时候
  • 47. 健壮性测试用例的参考模板
  • 48. 性能测试 性能测试即测试软件处理事务的速度,一是为了检验性能是否符合需求,二是为了得到某些性能数据供人们参考(例如用于宣传)。 有时人们关心测试的“绝对值”,如数据送输速率是每秒多少比特。有时人们关心测试的“相对值”,如某个软件比另一个软件快多少倍。 在获取测试的“绝对值”时,我们要充分考虑并记录运行环境对测试的影响。例如网络环境、计算机主频,总线结构和外部设备都可能影响软件的运行速度。 性能测试的一些注意事项: 不要试图让人拿着钟表去测时间,应当编写一段程序用于计算时间以及相关数据。 应当测试软件在标准配置和最低配置下的性能。 为了排除干扰,应当关闭那些消耗内存、占用CPU的其它应用软件(如杀毒软件)。 不同的输入情况会得到不同的性能数据,应当分档记录。例如传输文件的容量从100K到1M可以分成若干等级。 由于环境的波动,同一种输入情况在不同的时间可能得到不同的性能数据,可以取其平均值。
  • 49. 性能测试技巧目标 确定系统达到了希望达到的性能水平 如何使用 使用软件和硬件的监视器 使用模拟的监控模型,对关心的性能指标进行监控 创建一个小程序 例子 计算通信的时间 单位时间处理的信息量
  • 50. 性能测试用例的参考模板
  • 51. 用户界面测试 绝大多数软件拥有图形用户界面。图形用户界面的测试重点是正确性、易用性和视觉效果。在评价易用性和视觉效果时,主观性非常强,应当考虑多个人的观点。
  • 52. 信息安全测试 信息安全性(security)是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。 信息安全性测试有如下步骤: (1)为非法入侵设立目标,例如“盗窃某个文件”或“更改数据库记录”等。 (2)邀请(或悬赏)一些人扮演黑客,让他们想尽办法入侵系统,实现“目标”。 (3)如果有人成功了,请他详述入侵的过程。别忘了给予奖励。 信息安全性测试用例的参考模板
  • 53. 安全性测试目标 安全性的缺陷很难被发现。 大多数的情况下组织能够防止一般性的破坏者。 如何使用 对安全性的需求进行评审 分析与安全性有关的处理流程 转包给专业的人员 例子 定义了被保护的资源,权限进行了控制,日志文件和审查追踪是可用的。 什么时间使用 当被保护的资源对于组织具有重要的价值的时候
  • 54. 压力测试 压力测试也叫负荷测试,即获取系统能正常运行的极限状态。了解“极限”是很有价值的,例如潜艇下潜极限深度…。 压力测试的主要任务是:构造正确的输入,使劲折腾系统却让它刚好不瘫痪。 压力测试的一个变种是敏感测试。在某种情况下,微小的输入变动会导致系统的表现(如性能)发生急剧的变化。敏感测试目的是发现什么样的输入可能会引发不稳定现象。 压力测试用例的参考模板
  • 55. 压力测试目标 模拟出实际用户环境 怎么用 产生测试数据 测试组模拟用户处理被创建的数据 例子 确定是否分配了足够的磁盘空间 通讯的容量是否足够 测试系统过载的情况 什么时间使用 当关于容量的信息不确定的时候
  • 56. 可靠性测试 可靠性是指在一定的环境下、在给定的时间内、系统不发生故障的概率。由于软件不像硬件那样可以“加速老化”,按此定义,软件可靠性测试可能会花费很长时间。 比较实用的办法是,让用户使用该系统,记录每一次发生故障的时刻。计算出相邻故障的时间间隔,注意要去掉非工作时间。这样我们可以方便地统计出不发生故障的“最小时间间隔”、“最大时间间隔”和“平均时间间隔”。其中“平均时间间隔”会让人们大体了解到系统“可靠”的程度。
  • 57. 安装 / 反安装测试 安装 / 反安装测试的目的:避免“大风浪都挺过来了,却在阴沟里翻了船” 目前市面上有非常流行的、专门制作安装/反安装程序的一些工具,如Install Shelled。制作安装/反安装程序不再是件难事,关键是不要麻痹大意。主要测试工作: (1)至少在标准配置和最低配置两种环境下测试; (2)如果有安装界面,应当尝试各种选项,如选择“全部”、“部分”、“升级”等。
  • 58. WEB应用的测试一、功能测试   1、链接测试   链接是Web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面。首先,测试所有链接是否按指示的那样确实链接到了该链接的页面;其次,测试所链接的页面是否存在;最后,保证Web应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问。   链接测试可以自动进行,现在已经有许多工具可以采用。链接测试必须在集成测试阶段完成,也就是说,在整个Web应用系统的所有页面开发完成之后进行链接测试。   2、表单测试   当用户给Web应用系统管理员提交信息时,就需要使用表单操作,例如用户注册、登陆、信息提交等。在这种情况下,我们必须测试提交操作的完整性,以校验提交给服务器的信息的正确性。例如:用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等。如果使用了默认值,还要检验默认值的正确性。如果表单只能接受指定的某些值,则也要进行测试。例如:只能接受某些字符,测试时可以跳过这些字符,看系统是否会报错。
  • 59. 3、Cookies测试   Cookies通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies访问了某一个应用系统时,Web服务器将发送关于用户的信息,把该信息以Cookies的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息。   如果Web应用系统使用了Cookies,就必须检查Cookies是否能正常工作。测试的内容可包括Cookies是否起作用,是否按预定的时间进行保存,刷新对Cookies有什么影响等。   4、设计语言测试   Web设计语言版本的差异可以引起客户端或服务器端严重的问题,例如使用哪种版本的HTML等。当在分布式环境中开发时,开发人员都不在一起,这个问题就显得尤为重要。除了HTML的版本问题外,不同的脚本语言,例如Java、javascript、 ActiveX、VBScript或Perl等也要进行验证。   5、数据库测试   在Web应用技术中,数据库起着重要的作用,数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中,最常用的数据库类型是关系型数据库,可以使用SQL对信息进行处理。 在使用了数据库的Web应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试。
  • 60.   二、性能测试   1、连接速度测试   用户连接到Web应用系统的速度根据上网方式的变化而变化,他们或许是电话拨号,或是宽带上网。当下载一个程序时,用户可以等较长的时间,但如果仅仅访问一个页面就不会这样。如果Web系统响应时间太长(例如超过5秒钟),用户就会因没有耐心等待而离开。   另外,有些页面有超时的限制,如果响应速度太慢,用户可能还没来得及浏览内容,就需要重新登陆了。而且,连接速度太慢,还可能引起数据丢失,使用户得不到真实的页面。   2、负载测试   负载测试是为了测量Web系统在某一负载级别上的性能,以保证Web系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web系统的用户数量,也可以是在线数据处理的数量。例如:Web应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现象?Web应用系统能否处理大量用户对同一个页面的请求?  
  • 61.  3、压力测试   负载测试应该安排在Web系统发布以后,在实际的网络环境中进行测试。因为一个企业内部员工,特别是项目组人员总是有限的,而一个Web系统能同时处理的请求数量将远远超出这个限度,所以,只有放在Internet上,接受负载测试,其结果才是正确可信的。   进行压力测试是指实际破坏一个Web应用系统,测试系统的反映。压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web应用系统崩溃,接着当系统重新启动时获得存取权。   压力测试的区域包括表单、登陆和其他信息传输页面等。   
  • 62. 三、可用性测试   1、导航测试   导航描述了用户在一个页面内操作的方式,在不同的用户接口控制之间,例如按钮、对话框、列表和窗口等;或在不同的连接页面之间。通过考虑下列问题,可以决定一个Web应用系统是否易于导航:导航是否直观?Web系统的主要部分是否可通过主页存取?Web系统是否需要站点地图、搜索引擎或其他的导航帮助?   在一个页面上放太多的信息往往起到与预期相反的效果。Web应用系统的用户趋向于目的驱动,很快地扫描一个Web应用系统,看是否有满足自己需要的信息,如果没有,就会很快地离开。很少有用户愿意花时间去熟悉Web应用系统的结构,因此,Web应用系统导航帮助要尽可能地准确。   导航的另一个重要方面是Web应用系统的页面结构、导航、菜单、连接的风格是否一致。确保用户凭直觉就知道Web应用系统里面是否还有内容,内容在什么地方。   Web应用系统的层次一旦决定,就要着手测试用户导航功能,让最终用户参与这种测试,效果将更加明显。
  • 63.   2、图形测试   在Web应用系统中,适当的图片和动画既能起到广告宣传的作用,又能起到美化页面的功能。一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有: (1)要确保图形有明确的用途,图片或动画不要胡乱地堆在一起,以免浪费传输时间。Web应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面。   (2)验证所有页面字体的风格是否一致。   (3)背景颜色应该与字体颜色和前景颜色相搭配。   (4)图片的大小和质量也是一个很重要的因素,一般采用JPG或GIF压缩。   3、内容测试   内容测试用来检验Web应用系统提供信息的正确性、准确性和相关性。   信息的正确性是指信息是可靠的还是误传的。例如,在商品价格列表中,错误的价格可能引起财政问题甚至导致法律纠纷;信息的准确性是指是否有语法或拼写错误。这种测试通常使用一些文字处理软件来进行,例如使用Microsoft Word的"拼音与语法检查"功能;信息的相关性是指是否在当前页面可以找到与当前浏览信息相关的信息列表或入口,也就是一般Web站点中的所谓"相关文章列表"。
  • 64.   4、整体界面测试   整体界面是指整个Web应用系统的页面结构设计,是给用户的一个整体感。例如:当用户浏览Web应用系统时是否感到舒适,是否凭直觉就知道要找的信息在什么地方?整个Web应用系统的设计风格是否一致? 对整体界面的测试过程,其实是一个对最终用户进行调查的过程。一般Web应用系统采取在主页上做一个调查问卷的形式,来得到最终用户的反馈信息。   对所有的可用性测试来说,都需要有外部人员(与Web应用系统开发没有联系或联系很少的人员)的参与,最好是最终用户的参与。   四、客户端兼容性测试   1、平台测试   市场上有很多不同的操作系统类型,最常见的有Windows、Unix、Macintosh、Linux等。Web应用系统的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应用可能在某些操作系统下能正常运行,但在另外的操作系统下可能会运行失败。   因此,在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试   2、浏览器测试   浏览器是Web客户端最核心的构件,来自不同厂商的浏览器对Java,、javascript、 ActiveX、 plug-ins或不同的HTML规格有不同的支持。例如,ActiveX是Microsoft的产品,是为Internet Explorer而设计的,javascript是Netscape的产品,Java是Sun的产品等等。另外,框架和层次结构风格在不同的浏览器中也有不同的显示,甚至根本不显示。不同的浏览器对安全性和Java的设置也不一样。   测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。
  • 65.   五、安全性测试   Web应用系统的安全性测试区域主要有:   (1)现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等。   (2)Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。   (3)为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。   (4)当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。   (5)服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。
  • 66. 谢 谢