软件测试的期末复习资料.docx
软件测试的重点 第一章P4 软件缺陷:它是计算机系统或者程序中存在的任何一种破坏正常运行能力的问题,错误,或者隐藏的功能缺陷,瑕疵。注:软件缺陷出现最多的阶段是需求规格说明书。P9软件测试的定义:软件测试为了发现程序中的错误而执行程序的过程。软件测试的目的:就在于在软件投入运行之前,尽可能多地发现软件中的错误。=测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错。实现此目的的核心是测试用例的设计。判断软件测试的成功与失败:一个好的测试用例在于发现还未曾发现的错误,成功的测试是发现了错误的测试。软件测试的目标是为了检验软件系统是否满足用户的需求。调试和测试的区别:首先调试是由程序员编试的,且 调试是在测试之前。/调试是一个随机的、不可重复的过程,目的是寻找错误的原因和具体的位置,并修复错误。调试一般在测试前进行。4. 优秀的软件测试员应具备的素质: 1 软件测试人员是群探索者。 2 软件测试人员是故障排除员。 3 软件测试人员不放过任何蛛丝马迹。 4 软件测试人员具有创造性。 5 软件测试人员是群追求完美者。 6人员判断准确。 7 软件测试人员注重策略和外交。 8 软件测试人员善于说服。5. P12软件测试的分类:1.从是否需要执行被测软件的角度(程序是否运行的角度):软件测试可分为静态测试和动态测试。其中静态测试可分为(1)代码检查法 (2)静态结构分析法(3)代码度量质量法 其中动态测试分为(1)黑盒测试和白盒测试#二者的区别: 静态测试不实际执行程序,而是利用人工手段及静态测试工具完成对程序的静态测试。主要目的是检查软件的表示与描述是否一致,没有冲突和歧义。而动态测试则是实际运行测试用例,以发现软件中的错误。 # 静态测试和动态测试的时序关系: 一般可先进行静态测试,即代码检查法、静态结构分析法、代码质量度量法等进行测试;然后进行动态测试,即逻辑覆盖法、基本路径测试法、程序插桩等进行测试。2.从软件测试用例设计方法的角度(从测试的策略):可分为黑盒测试和白盒测试(1)黑盒测试是一种从用户角度出发的测试,又称为功能测试,数据驱动测试和基于规格说明的测试。(2)白盒测试基于产品的内部结构来进行测试,检查内部操作是否按规定执行,软件各个部分功能是否得到充分利用,又称为结构测试,逻辑驱动测试和基于程序的测试,即根据被测程序的内部结构设计测试用例,测试者需要事先了解被测程序的结构。3.按照软件的开发阶段分类:软件测试可分为单元测试,集成测试,确认测试,系统测试和验收测试。4. 按照实施测试的组织,可将测试分为Alpha测试、Beta测试及第三方测试。(1) Alpha测试 Alpha测试属于开发方进行,指软件开发组织公司内部人员模拟各类用户对即将交付的软件产品进行测试,以发现其中的错误并改正。 (2 ).Beta测试 Beta测试是用户进行的测试,但通常不等同于验收测试,即决定是否接受软件并不是Beta测试的目的。 Beta测试的目的在于帮助开发方在正式发布软件产品前对其进行最后的改进。 (3 )第三方测试 第三方测试是指由不同开发方和用户方的组织进行的测试。6. 软件测试技术的发展历史和现状(1) 软件测试技术的发展历史 20世纪50年代,英国,图灵给出了软件测试的原始定义。 1957年,测试是发现软件潜在错误和缺陷的活动。 1972年,北卡罗纳大学举行了首届软件测试正式会议。 1975年,John Good Enough 和Susan Gerhart 发表了名为测试数据选择的原理文章。 1979年,G冷ford J.Myers的著作软件测试的艺术是软件测试领域一本重要的专著。 20世纪90年代,软件测试得到了快速的发展。 (2)软件测试的现状 在软件发达的国家得到软件从业人员的普遍重视,已经形成了一个独立的产业,发展程度较高。 另外,软件测试发展趋势很好,已经成为了一个独立的流程。 第二章 软件测试过程与策略1.软件测试的误区:误区1 测试和调试是一回事。误区2 可以对软件进行穷举测试。误区3 若交付使用的软件有缺陷,是测试人员的失职。 误区4 关注测试的执行而忽略测试用例的设计。误区 5 测试比编程容易多。误区 6 测试是编码之后进行的工作。误区7 测试自动化是万能的。误区8 软件测试是一种破坏性工作。(软件测试是破坏性的工作)。2. p25(1)单元测试(又称模块测试):定义:它是对软件基本组成单位进行的测试,单元测试的对象是软件设计的最小单位模块。单元测试的主要内容:模块接口测试,局部数据结构测试,独立路径测试,出错处理测试,边界条件测试。单元测试的步骤:驱动模块(函数,被测模块):相当于被测模块的主程序,它接收测试数据,把这些数据传送给被测模块,最后输出实测的结果。桩模块:用以代替被测模块调用的子模块。(函数调用其他函数)3.p34确认测试定义:最严格的解释是检验所开发的软件是否能按用户提出的要求运行。确认测试的目的:是检查已实现的软件系统是否满足需求规格说明书中的规定的各种需求。确认测试的依据:需求规格说明书4.p41验收测试:定义:是向未来的用户表明系统能够像预定要求的那样工作。(验收测试即按项目任务书或合同、供需双方约定的验收依据文档对整个系统进行测试与评审,以决定是否接受软件系统。)需要用户的参与。 第三章 黑盒测试1.黑盒测试的定义:黑盒测试又称功能测试或是数据驱动测试,是从用户观点出发,主要以软件规格说明书为依据,对程序功能和程序接口进行的测试。2.黑盒测试有哪些方法: 等价类划分法 边界值分析法 决策表法 因果图法3.等价类划分法:(1)定义:等价类划分是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。(2)p56等价类的几个原则和规则:(1)如果规定了输入条件的取值范围或者个数,则可以确定一个有效等价类和两个无效等价类。(2)如果规定了输入值的集合,则可以确定一个有效等价类和一个无效等价类。(3)如果规定了输入数据的一组值,并且程序要对每一个输入值分别进行处理,则可为每一个值确定一个有效等价类,此外根据这组值确定一个无效等价类,即所有不允许的输入值的集合。(4)如果规定输入数据必须遵守的规则,则可以确定一个有效等价类和喏干个无效等价类。(5)如果已知的等价类中各个元素在程序中的处理方式不同,则应将该等价类进一步划分成更小的等价类。4. p57健壮等价类测试:健壮等价类测试主要的出发点是考虑了无效等价类。 对无效的输入,测试用例从每个有效等价类中取一个值,对无效输入,一个测试用例有一个无效值,其他值均取有效值标准等价类测试不考虑无效数据值,测试用例使用 每个等价类中的一个值。5边界值分析法的定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。 边界值分析法的几个原则和规则:(1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。(2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少1,比最大个数多1的数作为测试数据。(3)将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。 (4)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。( 5)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。 (6)分析规格说明,找出其它可能的边界条件。6.决策表的4个部分组成:条件桩 动作桩 条件项 动作项解法如下:找出条件桩确定规则的个数 2n列出所有的条件桩和动作桩画表格填入条件项填入动作项得到初始决策表 第四章 白盒测试1.白盒测试定义:也称为结构化测试、基于代码的测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。它是基于程序的测试,检测产品的内部结构是否合理以及内部操作是否按规定执行。2白盒测试技术常见的方法:逻辑覆盖测试和路径分析测试逻辑覆盖测试:语句覆盖(覆盖能力最弱) 判断覆盖 条件覆盖 判断/条件覆盖 条件组合覆盖 路径覆盖 (覆盖能力最强) (逐级递增)当采取这些逻辑覆盖时,测试用例如何选择。P86路径分析测试:步骤:<1>根据题意画出控制流图<2>计算出环路复杂性V(G)=E-N+2 E是控制流图中边的数量 N是控制流程图中节点的数目 V(G)=p+1 其中p是控制流图中判断节点的数目 V(G)=A 其中A是控制流图中区域的数目(由边和节点围成的叫做区域)其中环路复杂度=独立路径的数目<3>确定程序的基本路径集合;<4>为每个路径设计测试用例(输入数据+期望的结果)3.p92程序插桩(白盒的测试方法):是借助于在被测程序中设置断点或打印语句来进行测试的方法,在执行测试的过程中可以了解一些程序的动态信息(运行程序或代码)。4.哪些情况用白盒测试:(1)单元测试阶段:以白盒测试为主;(2)集成测试阶段:白盒和黑盒测试法相结合即灰盒测试;(3)集成测试阶段之后,试用黑盒测试方法 1、动态测试: 逻辑覆盖测试法、路径分析法、程序插桩等。 2、静态测试法: 代码走查法、静态结构分析法 代码度量质量法等。 3、最少测试用例的计算: N-S图 第五章 软件测试计划与文档1.制定测试计划的目的:(1)使软件测试工作进行更顺利(2)促进项目参加人员彼此的沟通(3)使软件测试工作更易于管理2.测试文档的定义:记录和描述了整个测试流程,它是整个测试活动中非常重要的文件。 测试过程实施 必备的核心文档是:测试计划,测试用例和软件测试报告。3.测试用例的定义:p107 是为了高效率地发现软件缺陷而精心设计的少量测试数据。实际测试中,由于无法达到穷举测试,所以要从大量输入数据中精选有代表性或特殊性的数据来作为测试数据。好的测试用例应该能发现尚未发现的软件缺陷。 第六章软件自动化测试1.p112软件自动化测试的定义:自动测试是软件测试的一个重要组成部分,它能完成许多手工测试无法实现或难以实现的测试。 正确、合理的实施自动测试,能够快速、全面的对软件进行测试,从而提高软件质量,节省经费,缩短软件发布周期。 软件自动化测试的目的:减轻手工测试的工作量,从而达到提高软件质量的目的。自动化则着重于发现旧的软件故障。而手工测试的目的着重于发现新的软件故障。1. 哪些用来自动化测试:(1)执行回归测试 (2)执行手工很难达到或手工无法完成的测试 (3) 枯燥乏味的重复性工作 一致的, (4)可重复的测试 2.自动化测试工具的分类:1 .白盒测试工具: Jtest test 2.黑盒测试工具:WinRuuner LoadRunner 3.测试管理工具: TeamManager 其他的测试工具:Testlink:软件测试管理工具Mantis:软件跟踪管理工具WinRuuner:黑盒测试工具Junit 单元测试工具 用来测试java 第七章软件测试管理1. 软件测试最重要的是有效的测试管理。测试管理包括对人的管理、对流程的管理、对具体版本的管理。2.软件测试最重要的目标之一是发现缺陷、管理缺陷、改正缺陷、消灭缺陷.3.测试过程管理、测试用例管理、测试用例执行和缺陷管理是软件测试管理的核心内容。4.p144 CMM:即软件能力成熟度模型,是软件行业标准模型,用来定义和评价软件公司开发过程的成熟度,为如何提高软件质量提供指导。5.CMM软件能力成熟度模型的等级划分:(为评测软件公司开发能力成熟度提供了简单的方式)1.等级1(初始级): 该等级的软件开发过程是随意,项目能否成功依靠个人的能力和运气,具有偶然性。软件开发过程没有定义,开发时间和费用无法预知,测试过程和其他的过程混杂在一起。2.等级2(可重复级):该等级成熟度主要集中在项目级,建立基本的项目管理过程去跟踪成本,进度,功能和质量,可以借鉴以前成功项目的经验,应用到新项目中,软件开发具有一定的组织性,使用了基本软件测试行为,例如测试计划和测试用例。3.等级3(已定义级)该等级具备了组织化的思想,而不仅仅是针对具体的项目,软件开发中的管理活动被文档化和标准化,并且形成了整个软件组织的标准软件过程,所有项目均在标准软件过程中进行。4.等级4(已管理级)在该成熟度等级中,组织过程处于在统计的控制之下,软件过程和产品质量有具体的度量标准,软件过程和产品质量 得到了定量理解和控制。5.等级5(已优化级)通过来自过程,新技术和新思想等各方面的定量信息反馈,能够进行持续的过程改进,以期达到质量更佳的等级。 第八章面向对象的软件测试 1.p152面向对象的软件测试与传统软件测试区别:(书上更具体) 传统的软件测试策略是从“小型测试”开始,逐步走向“大型测试”。即从单元测试开始,然后逐步进入集成测试,最后是有效性和系统测试。其单元测试集中:在最小的可编译程序单位子程序(如模块、子例程、进程),一旦这些单元都已经被独立测试过后,就被集成在程序结构中,然后进行一系列的回归测试以发现模块的接口错误和由于新单元的加入而产生的副作用,最后,把系统作为一个整体进行测试以发现需求规格说明中的错误。而面向对象的软件测试:面向对象分析测试(OOA Test)和面向对象设计测试(OOD Test):主要针对分析结果、设计结果产生的文本进行的测试,是软件开发前期的关键性的测试。面向对象编程测试(OOP Test):主要针对编程风格和程序代码实现进行测试,主要的测试是面向对象的单元测试和面向对象的集成测试中体现。面向对象的单元测试:是对程序内部具体单一的功能模块的测试。面向对象的集成测试:主要是对系统内部的相互服务进行测试,如成员函数间的相互作用、类间的消息传递等。 面向对象的系统测试:是基于面向对象的集成测试的最后阶段的测试,主要以用户需求为测试标准,需要借鉴面向对象分析的测试或面向对象分析的测试的结果。2.p153面向对象程序的结构将开发分为(生命周期划)三个阶段:面向对象分析的测试 面向对象设计的测试 面向对象编程的测试 3.面向对象的软件测试的模型:第一阶段:面向对象分析的测试 面向对象设计的测试:产生主体测试 第二阶段:面向对象的编程测试:面向对象的单元测试 面向对象的集成测试 和面向对象的系统测试4.面向对象的测试方法:(1)继承层次结构中类的测试:继承是实现接口和代码复用的有效机制,也是面向对象语言的一大特色。可以得出继承层次结构中类测试的测试用例可以采用如下增补原则: 如果子类新增了一个或者多个新的操作,就需要增加相应的测试用例。 如果子类定义的同名方法覆盖了父类的方法,就需要增加相应的测试用例(2)接口(接口不存在任何构造方法无法被实现)类的测试:使用一个实现接口的类来做测试即可。 在对接口类测试,应该遵循以下原则:p 如果接口没有被任何类实现就无需进行测试。 p 如果已被别的类实现,那么就针对实现该接口的类进行测试。 (3)抽象类测试: 通常,采用以下两种方法来处理抽象类的测试问题: (1)一般情况下,利用Java的内类机制,在抽象类的测试驱动程序内引入内类,让内类实现对被测试抽象类的继承,然后把它作为引用体,这样对内类的测试就等价于对被测试抽象类的测试,见P163例子。 (2)如果抽象类被具体类继承,那么,在创建该具体类的测试驱动程序时要继承抽象类的测试驱动程序,在以后的回归测试中,只要执行最底层的测试类,就可以对其父测试类重新执行一次测试,同时将测试结果分别返回。 (4)重载和覆盖测试:覆盖(重写)是在子类中重新定义了从父类中继承的同名方法,重载和覆盖不同,不是子类对父类同名方法的重新定义,而是类对自身已有的同名方法的重新定义(重载)在测试时,可以参考如下两个原则: (1)要对类实例方法的所有重载形式分别进行测试。(2)子类的测试驱动程序在继承父类测试驱动程序的同时,要对覆盖了父类的同名方法进行测试,而且应该重新对父类的类实例方法的所有重载形式执行一次测试。 5 .p167类测试:(面向对象程序的基本单位是类)1 类测试的方法 :通过代码检查或执行测试用例能有效地测试一个类的代码。 在进行类测试时,一般要考虑以下几个方面: 测试人员 测试内容 测试时间 测试过程 测试程度 。2. 类测试的组成部分 作为每个类,决定是将其作为一个单元进行独立测试,还是以某种方式将其作为系统某个较大部分的一个组件进行独立测试,需要基于以下因素进行决策:p 这个类在系统中的作用,尤其是与之相关联的风险程度。p 这个类的复杂性(根据状态个数、操作个数以及关联其他类的程度等进行衡量)p 开发这个类测试驱动程序所需的工作量。6.p173 JUnit简介JUnit是一个对Java程序进行单元测试的测试框架,是XUnit在Java语言上的实现。Xunit是专门进行单元测试的程序框架。Cppunit:用来对c+的测试的工具JUnit:对单元测试的工具 用来对java的测试 第九章web网站的测试1.软件测试不仅是对程序进行测试,且对程序中的文档进行测试。2.网页测试包括 1. 功能测试 2. 可用性测试3. 功能测试包括以下内容:链接测试 表单测试 数据校验 Cookies 测试表单测试的定义:表单就是一些需要在线显示和填写的表格。表单有一些标准操作,如确认、保存、提交等。4数据校验:目的: 根据业务规则,需要对用户输入进行校验,则要保证这些校验功能正常工作。5. Cookies测试:(1)定义:Cookie是一个由网页服务器放在您硬盘上的非常小的文本文件. 它本质上就像您的身份证明一样,并且不能像代码那样被执行或被用来散布病毒。它只能被您使用并且只能由提供的服务器读取.(2)cookies测试测试内容: Cookies是否能正常工作; Cookies是否按预定的时间进行保存; 刷新对Cookies 有什么影响等。 6.页面内容的测试: (1) 内容测试的目的: 内容测试用来检验Web 网站提供信息的正确性、准确性和相关性。(为内容测试的三个重要性!) 正确性:是指信息是真实可靠的还是胡编 乱造的。准确性:是指网页文字表述是否符合语法逻辑或者是否有拼写错误。相关性:是指能否在当前页面内可以找到与当前浏览信息相关的信息列表或入口,也就是一般Web站点中所谓的“相关文章列表”。7.功能测试:功能测试的主要依据为:需求规格说明书及详细设计说明书功能测试包括以下内容:1.数据库测试;2.WEB网站特定的功能需求测试;3.设计语言测试。8.数据库的测试:(1)数据库测试的主要因素: 数据完整性:测试的重点是检测数据损坏程度。 例如:检查事务日志以便及时掌握数据库的变化 数据有效性:数据有效性能确保信息的正确性,使得前台用户和数据库之间传送的数据是准确的。 数据操作和更新:具体包括:增加记录、删除记录、更新某些特定的字段。 9界面测试要素主要包括:符合标准和规范,具有直观性、一致性、灵活性、舒适性、正确性、实用性。 小结名词解释:软件缺陷:它是计算机系统或者程序中存在的任何一种破坏正常运行能力的问题,错误,或者隐藏的功能缺陷,瑕疵。软件测试:软件测试是为了发现程序中的错误而执行程序的过程。具体说,它是根据软件开发阶段的规格说明和程序的内部结构而精心设计出一批测试用例,并利用测试用例来运行程序,以发现程序错误的过程。静态测试:静态测试不实际执行程序,而是利用人工手段及静态测试工具完成对程序的静态测试。动态测试:动态测试则是实际运行测试用例,以发现软件中的错误。黑盒测试: 它又称功能测试或是数据驱动测试,是从用户观点出发,主要以软件规格说明书为依据,对程序功能和程序接口进行的测试。 白盒测试:也称为结构化测试、基于代码的测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。/p78它是基于程序的测试,检测产品的内部结构是否合理以及内部操作是否按规定执行。单元测试(又称模块测试):它是对软件基本组成单位进行的测试,单元测试的对象是软件设计的最小单位模块。集成测试:又叫组装测试,将所有模块按照概要设计的要求组装成一个系统。目的在于发现并排除在模块连接过程中可能出现的问题,最终概要设计要求的软件系统。p144 CMM:即软件能力成熟度模型,是软件行业标准模型,用来定义和评价软件公司开发过程的成熟度,为如何提高软件质量提供指导。测试计划: 测试计划就是描述所有要完成的测试工作,包括被测试项目的背景、目标、范围、方式、资源、进度安排、测试组织,以及与测试有关的风险等方面。 .测试文档的定义:记录和描述了整个测试流程,它是整个测试活动中非常重要的文件。 测试过程实施 必备的核心文档是:测试计划,测试用例和软件测试报告。.测试用例的定义:p107 是为了高效率地发现软件缺陷而精心设计的少量测试数据。实际测试中,由于无法达到穷举测试,所以要从大量输入数据中精选有代表性或特殊性的数据来作为测试数据。好的测试用例应该能发现尚未发现的软件缺陷。面向对象测试的定义:它是指利用面向对象技术提供的各种机制对面向对象软件进行测试,广义地讲,它还包括对软件分析、设计和实现的一致性检查