1、第八章 软件质量与质量保证,2019/6/8,2,目录,8.1 软件质量的定义 8.2 影响软件质量的因素 8.3 软件质量的保证策略 8.4 软件质量的保证活动 8.5 软件评审 8.6 软件质量保证的标准 8.7 结构化的软件测试 8.8 面向对象的软件测试 8.9 软件测试计划与测试分析报告 8.10 软件维护,2019/6/8,3,8.1 软件质量的定义,ANSI/IEEE Std 729-1983定义软件质量为:与软件产品满足规定的和隐含的需求的能力有关的特征或特性的全体。 M.J.Fisher 定义软件质量为:所有描述计算机软件优秀程度的特性的组合。,2019/6/8,4,8.1
2、软件质量的定义,软件质量反映的三个方面的问题: 软件需求是度量软件质量的基础 在各种标准中定义了一些开发准则,用来指导软件人员用工程化的方法来开发软件。 往往会有一些隐含的需求没有明确提出来。软件质量是各种特性的复杂组合。它随着应用的不同而不同,随着用户提出的质量要求而不同。,2019/6/8,5,8.2 影响软件质量的因素,影响软件质量的主要因素 正确性: 健壮性: 效率: 完整性: 可用性: 风险:,2019/6/8,6,8.2 影响软件质量的因素,影响软件质量的主要因素 可理解性: 可维修性: 灵活性: 可测试性: 可移植性: 可再用性: 互运行性:,2019/6/8,7,8.2 影响软
3、件质量的因素,软件质量应遵循的原则 应强调软件总体质量,而不应片面强调软件正确性,忽略其可维护性与可靠性、可用性与效率等 应在软件工程化生产的整个周期的各个阶段都注意软件的质量,而不能只在软件最终产品验收时注意质量。 应指定软件质量标准,定量地评价软件质量,不能仅局限于定性地评价软件质量,使软件产品评价走上评测结合,以测为主的科学轨道。,2019/6/8,8,8.3 软件质量的保证策略,审查 在软件生命周期每个阶段结束前,都正式使用结束标准对该阶段生产出的软件配置成分进行严格的技术审核。 审查小组组成:组长、作者、两名评审员。 审查步骤 : S1:计划:组织审查组,分发材料,安排日程等. S2
4、:概貌介绍:项目较大时,考虑作者介绍概貌. S3:准备:评审员阅读材料取得有关项目知识 S4:评审会:发现和记录错误 S5:返工:修正发现的问题 S6:复查:判断返工是否解决了问题.,2019/6/8,9,8.3 软件质量的保证策略,复查和管理复审 复查是检查已有的材料,断定特定阶段的工作是否能够开始或继续。 管理复审指向开发组织或使用部门的管理人员,提供有关项目的总体状况、成本和进度等方面的情况,以便从管理角度对开发工作进行审查。,2019/6/8,10,8.3 软件质量的保证策略,测试 测试是用已知的输入在已知环境中动态地执行系统或系统的“部件”。 测试过程的基本文档: 测试计划(包括单元
5、测试和集成测试):确定测试范围、方法和需要的资源等。 测试过程:详细描述和每个测试方案有关的测试步骤和数据,包括测试数据以及预期的结果。 测试结果:把每次测试运行的结果归入文档,如果运行出错,则应产生问题报告,并必须通过调试解决所发现的问题。,2019/6/8,11,8.4 软件质量保证活动,质量保证是复审、开发方法、配置控制与程序测试的综合应用。 软件的开发方法应该符合规定的“软件开发规范” 计划和开发时期各个阶段的工作都要进行复审,每个阶段产生的文档都必须严格管理,以确保文档和程序的完整性与一致性 坚持对程序进行各个层次的测试。,2019/6/8,12,8.4 软件质量保证活动,验证与确认
6、 验证是为了确定开发时期中某个阶段的产品是否达到了阶段对它的需求。确认是在整个开发结束时对开发的软件能否满足软件需求的总评价。 具体讲:验证包含在开发时期各个阶段进行的复审复查与测试活动中;确认则主要指测试阶段的确认测试和验收时的系统测试等活动。,2019/6/8,13,8.4 软件质量保证活动,开发时期的配置管理 软件配置包括生存期中各个阶段产生的文档和程序。这些文档或程序是随着软件的开发进程逐步产生的,因此也称阶段产品。配置管理的中心思想:在软件开发的进程中,开发者有权对本阶段的阶段产品进行更改,但一旦阶段产品通过了复审,就应将它交给配置管理人员去控制,任何人(包括编制这一文档的人员)需要
7、对它更改时,都要经过正式的审批手续。在软件工程的术语中,各个阶段产品的复审时间成为基线,基线之前更改自由,基线之后严格管理。,2019/6/8,14,8.5 软件评审,评审是以提高软件质量为目的的技术活动。 质量用户的满意程度。两个必要条件:(1)程序的规格说明书要符合用户的要求(设计质量)(2)程序要按照设计规格说明书所规定的情况正确的执行(程序质量)。,2019/6/8,15,8.5.1 设计质量的评审内容,设计质量的评审对象是在需求分析阶段产生的软件需求规格说明、数据要求规格说明,在软件概要设计阶段产生的软件概要设计说明书等。通常从12个方面评审。,2019/6/8,16,8.5.1 设
8、计质量的评审内容,1.评价软件的规格说明是否合乎用户的要求 在用户所要求的规格说明中,用户是否明确 在设计规格说明中各设计结果是否都与用户协商过,并已达成一致意见 是否调查了同行业其他单位的相同软件,并进行了比较 是否充分分析了正在使用的类似软件,其结果在需求规格说明中是否提及 需求规格说明是否得到了用户或单位上级机关的批准 上述需求规格说明与软件的概要设计规格说明是否一致 总体设计思想和设计方针是否明确,2019/6/8,17,8.5.1 设计质量的评审内容,2.评审的可靠性 用户是否已经明确对可靠性的要求和判断 针对输入错误的处理功能 针对操作错误的处理功能 针对硬件失效的处理功能 针对软
9、件失效的处理功能 该软件是否按照外部规格说明进行工作,2019/6/8,18,8.5.1 设计质量的评审内容,3.评审保密措施实现情况 是否有对系统使用资格进行检查的功能? 是否有对特性数据的使用资格 是否有对特殊功能的使用资格进行检查的功能? 是否有记录以上所列使用情况的功能? 在查出违反使用资格情况后,能否向系统管理人员报告有关信息? 是否有对系统内重要的数据加密的功能?,2019/6/8,19,8.5.1 设计质量的评审内容,4.评审操作特性实施情况 操作命令和操作信息的恰当性 输入数据和输入控制语句的恰当性 输出数据的恰当性 应答时间的恰当性,2019/6/8,20,8.5.1 设计质
10、量的评审内容,5.评审性能实现情况 计算机系统的性能由应答时间和处理能力两方面来决定。性能设计首先应明确规定性能的目标值: 目标值的恰当性: 性能目标设定条件的恰当值 明确性能的评价方法,2019/6/8,21,8.5.1 设计质量的评审内容,6.评审软件的可维修性 检测故障的功能: 获取分析数据的功能 区分问题根源的功能: 故障修正的方法:,2019/6/8,22,8.5.1 设计质量的评审内容,7.可扩充性 对扩充分体的考虑: 模块化: 模块的通用性:,2019/6/8,23,8.5.1 设计质量的评审内容,8.互换性 互换性:指当软件功能扩充了以后,其已有功能还能照样使用的特性。 评审因
11、软件扩充给运行环境造成的影响: 对可扩充性的考虑 软件结构上的稳定性,2019/6/8,24,8.5.1 设计质量的评审内容,9.评审软件的可移植性 可移植性:指当把软件移植到不同的运行环境时,不需改变规格就能照原样工作的特性。 其规格是否不易受运行环境影响 软件接口是否划分出应用部分及其他啊部分的接口部分? 向新的运行环境的可移植性 软件的大小与划分的恰当程度,2019/6/8,25,8.5.1 设计质量的评审内容,10.可测试性 可测试性是指为了保证软件质量,有效地进行充分、全面的测试的特性。 检查测试标准情况: 是否明确设计规格和测试规格之间的对应关系 限定变化的影响范围 是否容易对故障
12、的主要原因进行分析与修改 检查测试作业,2019/6/8,26,8.5.1 设计质量的评审内容,11.评审软件的复用性 是否具有充分的可移植性 功能上是否具有通用性,2019/6/8,27,8.5.1 设计质量的评审内容,12.评审软件的互连性 满足互连性的必要条件是与其他软件有共同的接口及该接口部分是模块化的,容易改变的。 与其他软件应用共同的接口 与其他软件之间的接口部分应是模块化的,2019/6/8,28,8.5.2 程序质量的评审内容,程序质量评审是考虑软件本身的结构、与运行环境的接口、变更带来的影响而进行的评审活动。,2019/6/8,29,8.5.2 程序质量的评审内容,1.软件的
13、结构(1)功能结构:功能结构是联系用户和开发者的规格说明,软件功能的本质是把输入信息变换成输出信息。检查项目: 数据结构:包括数据名的定义;构成该数据的数据项;数据与数据项之间的关系 功能结构:包括功能名的定义;构成功能的子功能 数据结构和功能结构之间的对应关系:包括数据元素与功能元素之间的对应关系;数据结构与功能结构的一致性。,2019/6/8,30,8.5.2 程序质量的评审内容,1.软件的结构(2)功能的通用性:在软件的功能结构中,某些功能有时可以作为通用功能反复出现多次。检查项目: 抽象数据结构:包括抽象数据的名称和定义;抽象数据构成元素的定义。 抽象功能结构:,2019/6/8,31
14、,8.5.2 程序质量的评审内容,1.软件的结构(3)模块的层次:模块的层次就是指当程序模块结构。检查项目: 模块层次: 与功能层次的对应关系:,2019/6/8,32,8.5.2 程序质量的评审内容,1.软件的结构(4)模块结构:模块的动态结构,分为处理模块和数据模块两类,检查项目: 控制流结构 数据流结构 模块结构与功能结构之间的对应关系 每个模块的定义,2019/6/8,33,8.5.2 程序质量的评审内容,1.软件的结构(5)处理过程的结构:处理过程是指模块划分到最底层的那些模块的实现方式,也就是最基本的加工逻辑过程。检查项目: 要求模块的功能结构与实现这些功能的处理过程的结构应明确对
15、应 要求控制流应是结构化的 数据的结构与控制流之间的对应关系是明确的 对于描述的术语标准化。,2019/6/8,34,8.5.2 程序质量的评审内容,2.与运行环境的接口 运行环境包括硬件、其他软件和用户。与运行环境的接口应设计得较理想,要预见到环境改变。 主要检查项目: 与其他软件的接口: 与硬件的接口: 与用户的接口:,2019/6/8,35,8.6 软件质量保证的标准,1.ISO质量保证模型ISO9000质量保证模型将一个企业视为一个互连过程的网络。为了使质量系统符合ISO标准,这些过程与标准中给出的区域对应,并且必须使描述文档化。ISO 9000以一般术语描述了质量保证系统的要素。这些
16、要素包括用于实现质量计划、质量控制、质量保证和质量改进所需的组织结构、规程、过程和资源。,2019/6/8,36,8.6 软件质量保证的标准,2.ISO 9001标准ISO 9001是应用于软件工程的质量标准。,2019/6/8,37,8.6 软件质量保证的标准,ISO 9001描述的20条需求: 1.管理责任 2.质量系统 3.合同复审 4.设计控制 5.文档和数据控制 6.采购 7.对客户提供的产品的控制 8.产品标识和可跟踪性 9.过程控制 10.审查和测试,2019/6/8,38,8.6 软件质量保证的标准,11.审查、度量和测试设备的控制 12.审查和测试状态 13.对不符合标准产品
17、的控制 14.改正和预防行动 15.处理、存储、包装、保存和交付 16.质量记录的控制 17.内部质量审计 18.培训 19.服务 20.统计技术,2019/6/8,39,8.6 软件质量保证的标准,软件组织通过ISO 9001,就必须针对前面每一条需求建立相关政策和过程,并且有能力显示组织活动的确是按照这些政策的过程进行的。,2019/6/8,40,8.7 结构化的软件测试,测试的目的:确保软件的质量,尽量找出软件错误并加以纠正,而不是证明软件没有错误。 测试的范围:整个软件的生存周期。 测试的工作量:占软件开发总成本的40%到50%以上,找错,2019/6/8,41,8.7.1 软件测试的
18、概念和原则,1.测试的概念 软件测试:对软件计划、软件设计、软件编码进查错和纠错的活动(包括代码执行活动和人工活动)。找错的过程称为测试,纠错的过程称为调试。,2019/6/8,42,8.7.1 软件测试的概念和原则,程序测试:随着程序设计的概念的出现而流行的概念。它是对编码阶段的语法错、语义错、运行错进行查找的代码执行活动。找出编码中错误的代码执行活动称为程序测试。纠正编码中的错误称为程序调试。程序测试的目的是查找编码错与纠正编码错,保证算法的正确实现。,2019/6/8,43,8.7.1 软件测试的概念和原则,软件确认与程序确认:软件确认是广义上的软件测试,它企图证明程序软件在给定的外部环
19、境中的逻辑正确性的一系列活动和过程,指需求说明书的确认,程序的确认。程序确认分为静态确认和动态确认。静态分析包括正确性证明,人工分析,静态分析。动态分析包括动态确认与动态测试。,2019/6/8,44,8.7.1 软件测试的概念和原则,静态分析不执行程序本身,而是分析程序正文可能导致错误的异常情况。 动态分析执行被测程序,从执行结果分析程序可能出现的错误。,2019/6/8,45,8.7.1 软件测试的概念和原则,各种软件错误的出现比例: 功能错, 占整个软件错误的27%,需求分析设计不完整引起 系统错,占16%,总体设计错误引起的 数据错,占10%,编码错误引起 编码错,占4% ,程序员编码
20、错误引起的 其他错,占16%,文档错误和硬件错误引起的,2019/6/8,46,8.7.1 软件测试的概念和原则,2.测试过程 软件配置,指被测试的文件,如软件需求说明书,软件设计说明书,源程序清单等文档。 测试配置,指测试计划,测试用例,测试程序等文档。 测试工具,为提高测试效率而设计的支撑软件测试的软件。 测试评价,由测试出的错误迹象,分析找出错误的原因和位置,以便纠正和积累软件设计的经验。 纠错(调试),找到出错的原因与位置并纠正,包括修正文件直到软件正确位置。 可靠性模型,通过对测试出软件出错率的分析,建立模型,得出可靠得数据,指导软件得设计与维护,2019/6/8,47,软件 配置,
21、测试,测试 配置,测试 工具,结果 分析,排错,可靠性分析,测试 结果,错误,预期 结果,出错率,改正 的软件,预测 的可 靠性,2019/6/8,48,8.7.1 软件测试的概念和原则,3.测试的原则 测试前要认定被测试软件有错,不要认为软件没有错 要预先确定被测试软件的测试结果 要尽量避免测试自己编写的程序 测试要兼顾合理输入与不合理输入数据 测试要以软件需求规格说明书为标准 要明确找到的新错与已经找到的旧错成正比 测试是相对的,不能穷尽所有的测试,要根据人力物力安排测试,并选择好测试用例与测试方法 测试用例留作测试报告与以后的反复测试用,重新验证纠错的程序是否有错。,2019/6/8,4
22、9,8.7.1 软件测试的概念和原则,程序测试举例 例:程序 Triangle, 输入三个整 数,表示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。,2019/6/8,50,8.7.1 软件测试的概念和原则,判断三角型的测试用例设计:输入数据 预期结果 (1) 6;6;6 等边 (2) 8;8;4 等腰 (3) 4;5;6 一般 还应输入非法数据:0; 7; 9-7;3; 5a; 2; 7 等,2019/6/8,51,8.7.2 软件测试技术,1.软件测试的目标 测试是为了发现程序中的错误而执行程序的过程 好的测试方案是极可能发现迄今为止尚未发
23、现的错误的测试方案 成功的测试是发现了迄今为止尚未发现的错误的测试。,2019/6/8,52,8.7.2 软件测试技术,2.测试方法,软件测试的 策略和方法,静态测 试方法,动态测 试方法,人工测试方法,计算机辅助静 态分析方法,白盒测试方法,黑盒测试方法,穷举测试方法,2019/6/8,53,8.7.2 软件测试技术,静态测试:基本特征是在对软件进行分析、检查和测试时不实际运行被测试的软件。静态测试约可找出3070%的逻辑设计错误.对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错.,2019/6/8,54,8.7.2 软件测试技术,动态测试:通过运行软件来检验软
24、件的动态行为和运行结果的正确性动态测试的两个基本要素:被测试程序测试数据(测试用例)动态测试方法 (1)选取定义域有效值,或定义域外无效值. (2)对已选取值决定预期的结果 (3)用选取值执行程序 (4)执行结果 与(2)结果相比,不吻和程序有错.,2019/6/8,55,8.7.2 软件测试技术,3.黑盒测试和白盒测试 如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,此测试方法称为黑盒测试。 黑盒测试又称:功能测试,数据驱动测试,基于规格说明书的测试 如果知道产品内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常运行,此测试方法称为白盒测试
25、。 白盒测试又称:结构测试,玻璃盒测试,基于覆盖的测试.根据被测程序的逻辑结构设计测试用例;力求提高测试覆盖率;,2019/6/8,56,8.7.2 软件测试技术,黑盒测试与白盒测试比较 黑盒测试把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程。它是再程序接口进行的测试,只检查程序功能是否按照规格说明的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息的完整性。 白盒测试是把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程,它按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。,2019/6/8,57,8.7.2 软
26、件测试技术,穷尽测试:包含所有可能情况的测试。 只要对每一种可能的情况都进行测试,就可以得到完全正确的程序。而对于实际程序而言,穷尽测试通常是不可能做到的。,2019/6/8,58,8.7.2 软件测试技术,例:输入 三条边长 黑盒测试 可采用的测试用例数(设字长16位) 执行时间: 设测试一次需1ms共需一万年.,=2 X2 X2 3X10,16,16,16,14,2019/6/8,59,8.7.2 软件测试技术,白盒测试 含4个分支,循环次数 20,从A到B的可能路径执行时间: 设测试一次需2ms穷举测试需5亿年.,=5+5 +5 +5 10,20,1,2,19,14,A,B,2019/6
27、/8,60,8.7.2 软件测试技术,不论黑盒还是白盒测试都不能 进行穷尽测试, 所以软件测试不可 能发现程序中存在的所有错误, 因 此需精心设计测试方案, 力争尽可 能少的次数,测出尽可能多的错误.,2019/6/8,61,黑盒测试与白盒测试能发现的错误,C,B,A,D,-只能用黑盒测试发现的错误,A,-只能用白盒测试发现的错误,-两种方法都能发现的错误,-两种方法都不能发现的错误,B,C,D,2019/6/8,62,8.7.2 软件测试技术,3.测试方案 设计测试方案是测试阶段的关键技术问题。测试方案包括预定要测试的功能,应该输入的测试数据和预期的结果,其中最困难的问题是设计测试用的输入数
28、据(即测试用例)。设计测试方案的基本目标是:确定一组最可能发现某个错误或某类错误的测试数据。,2019/6/8,63,8.7.2 软件测试技术,(1)白盒测试的用例设计 逻辑覆盖法:指有选择地执行程序中某些最有代表性的通路。是对穷尽测试的唯一可行的替代办法。 逻辑覆盖准则: 语句覆盖 判定覆盖 条件覆盖 判定/条件覆盖 条件组合覆盖,2019/6/8,64,8.7.2 软件测试技术,例:PROCEDURE SAMPAL (A,B:REAL; VAR X:REAL);BEGINIF (A1) AND (B=0)THEN X:=X/AIF (A=2) OR (X1)THEN X:=X+1END;,
29、2019/6/8,65,1.语句覆盖,开始,(A1) AND (B=0),(A=2) OR (X1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,使程序中每个语句至少执行一次,2019/6/8,66,8.7.2 软件测试技术,只需设计一个测试用例: 输入数据:A=2,B=0,X=4 即达到了语句覆盖;语句覆盖是最弱的逻辑覆盖,2019/6/8,67,2.判定覆盖,开始,(A1) AND (B=0),(A=2) OR (X1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,使每个判定的真假分支都至少执行一次,2019/6/8,68,8.7.2 软件测试技
30、术,例:可设计两组测试用例: A=3,B=0 ,X=3 可覆盖c、d分支 A=2,B=1 ,X=1 可覆盖b、e分支 两组测试用例可覆盖所有判定的真假 分支语句覆盖仍是弱的逻辑覆盖,2019/6/8,69,8.7.2 软件测试技术,条件覆盖 使每个判定的每个条件的可能取值至少执行一次,2019/6/8,70,8.7.2 软件测试技术,第一判定表达式: 设条件 A1 取真 记为 T1 假 T1条件 B=0 取真 记为 T2 假 T2 第二判定表达式: 设条件 A=2 取真 记为 T3 假 T3条件 X1 取真 记为 T4 假 T4,2019/6/8,71,3.条件覆盖,开始,(A1) AND (
31、B=0),(A=2) OR (X1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,满足条件: T1,T1,T2,T2T3,T3T4,T4,2019/6/8,72,测试用例 通过 满足的 覆盖 A B X 路径 条件 分支 1 0 3 abe T1,T2,T3,T4 b,e 2 1 1 abe T1,T2,T3,T4 b,e 两个测试用例覆盖了四个条件八种可能取值。 未覆盖c、d分支,不满足判定覆盖的要求. 条件覆盖不一定包含判定覆盖 判定覆盖也不一定包含条件覆盖,2019/6/8,73,8.7.2 软件测试技术,判定/条件覆盖 选取足够多的测试用例,使判断中的每个条件的所
32、有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次.,2019/6/8,74,4.判定/条件覆盖,开始,(A1) AND (B=0),(A=2) OR (X1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,满足条件: T1,T1,T2,T2T3,T3T4,T4,2019/6/8,75,测试用例 通过 满足的 覆盖 A B X 路径 条件 分支 2 0 4 ace T1,T2,T3,T4 c,e 2 1 1 abd T1,T2,T3,T4 b,d 能同时满足判定、条件两种覆盖标准取值。,2019/6/8,76,测试用例 通过 满足的 覆盖 A B X 路
33、径 条件 分支 2 0 3 ace T1,T2,T3,T4 c,e 2 1 1 abe T1,T2,T3,T4 b,e 1 0 3 abe T1,T2,T3,T4 b,e 1 1 1 abd T1,T2,T3,T4 b,d,2019/6/8,77,8.7.2 软件测试技术,条件组合覆盖 所有可能的条件取值组合至少执行一次A1, B=0A1, B0A1, B=0A1, B0A=2, X1A=2, X1A2, X1A2, X1,2019/6/8,78,测试用例 通过 满足的 覆盖 A B X 路径 条件 分支 2 0 3 ace T1,T2,T3,T4 c,e 2 1 1 abe T1,T2,T3
34、,T4 b,e 0 0 1 abe T1,T2,T3,T4 b,e 0 1 0 abd T1,T2,T3,T4 b,d 2 0 2 ace T1,T2,T3,T4 c,e 2 1 1 abe T1,T2,T3,T4 b,e 3 2 2 abe T1,T2,T3,T4 b,e 3 3 1 abd T1,T2,T3,T4 b,d,2019/6/8,79,8.7.2 软件测试技术,(2)黑盒测试的用例设计 等价划分法:把所有可能的输入数据(有效的和无效的)划分成若干个等价的子集 (称为等价类), 使得每个子集中的一个典型值在测试中的作用与这一子集中所有其它值的作用相同. 可从每个子集中选取一组数据来
35、测试程序。,2019/6/8,80,8.7.2 软件测试技术,如何划分等价类?有效等价类(合理等价类) 无效等价类(不合理等价类),2019/6/8,81,8.7.2 软件测试技术,划分等价类的规则: 如果规定了输入值范围,则可划分出一个有效的等价类(输入值在此范围内),两个无效的等价类 如果规定了输入数据的个数,则类似地也可以划分出一个有效的等价类和两个无效的等价类 如果规定了输入数据的一组值,而且程序对不同输入值做不同的处理,则每个允许的输入值是一个有效的等价类,此外还有一个无效的等价类(任何不允许的输入值)。 如果规定了输入数据必须遵循的规则,则可以划分出一个有效的等价类(符合规则)和若
36、干个无效的等价类(违反规则) 如果规定了输入数据为整型,则可划分出正整数,零和负整数等三个有效类 如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表。,2019/6/8,82,8.7.2 软件测试技术,用等价类划分法设计测试用例步骤: S1:形成等价类表,每一等价类规定 一个唯一的编号; S2:设计一测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步骤,直到所有有效等价类均被测试用例所覆盖; S3:设计一新测试用例,使其只覆盖 一个无效等价类,重复这一步骤直到所有无效等价类均被覆盖;,2019/6/8,83,8.7.2 软件测试技术,用等价类划分法设计测试用例:例:某城市
37、电话号码由三部分组成地区码:空白或3位数字前 缀:非0或1开头的三位数字后 缀:4位数字,2019/6/8,84,输入条件 有效等价类 无效等价类,地区码,空白(1) 3位数字(2),有非数字字符 (5) 少于3位数字 (6) 多于3位数字 (7),前 缀,从200到999 之间的3位数字(3),有非数字字符 (8) 起始位为0(9) 起始位为1(10) 少于3位数字 (11) 多于3位数字 (12),后 缀,有非数字字符 (13) 少于4位数字 (14) 多于4位数字 (15),4位数字(4),第一步:电话号码等价类划分,2019/6/8,85,第二步:确定测试用例,对表中4个有效等价类可公
38、用下面两个测试用例:,测试数据 测试范围 期望结果,( )276-2345(635)805-9321,等价类(1)(3)(4)等价类(2)(3)(4),有效有效,2019/6/8,86,8.7.2 软件测试技术,对表中11个无效等价类应选择11个测试用例:,测试数据 测试范围 期望结果,(20A)123-4567 (33 )234-5678 (7777)345-6789.,无效等价类(5) 无效等价类(6) 无效等价类(7). (15),无效 无效 无效.,本例的15个等价类至少需要13个测试用例,2019/6/8,87,8.7.2 软件测试技术,(2)黑盒测试的用例设计 边界值分析方法:使用
39、边界值分析方法设计测试方案首先应该确定边界情况,使程序运行在边界情况附近的测试方案。 边界值分析法与等价类划分法区别 (1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。 (2)边界值分析不仅考虑输入条件,还要考虑输出空间 产生的测试情况,2019/6/8,88,8.7.2 软件测试技术,(2)黑盒测试的用例设计 边界值分析方法:使用边界值分析方法设计测试方案首先应该确定边界情况,使程序运行在边界情况附近的测试方案。 边界值分析法与等价类划分法区别 边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。 边界值分析
40、不仅考虑输入条件,还要考虑输出空间产生的测试情况,2019/6/8,89,8.7.2 软件测试技术,(2)黑盒测试的用例设计 边界值分析方法设计用例原则: 如输入条件代表以a和b为边界的范围,测试用例应包含a、b、略大于a和略小于b的值。 如输入条件代表一组值,测试用例应当执行其中的最大值和最小值,还应测试略大于最大值和略小于最小值的值。 如规格说明中提出输入输出的有序集(顺序文件、有序表等),取有序集的第一个和最后一个元素做测试用例。 如程序数据结构有预定的边界,应测试其边界的数据项。,2019/6/8,90,8.7.2 软件测试技术,(2)黑盒测试的用例设计 边界值分析方法设计用例: 例:
41、邮件收费规定 15 kg收费2元则应对:0.9,1, 5,5.1 kg 或0.99,1, 5,5.01 kg设计测试用例。,2019/6/8,91,8.7.2 软件测试技术,(2)黑盒测试的用例设计 边界值分析方法设计用例: 例:一个输入文件可有1255个记录则可分别设计有:1个、255个、0个、256个记录的输入文件,2019/6/8,92,8.7.2 软件测试技术,(2)黑盒测试的用例设计 错误推测方法:根据经验来设计测试用例的方法。例举出程序中可能有的错误和容易发生错误的特殊情况,根据它门选择测试方案,2019/6/8,93,作业一,影响软件质量的主要因素有哪些? ISO9001描述的2
42、0条需求是什么? 软件测试的原则是什么? 软件测试的目标是什么? 比较黑盒测试与白盒测试的区别。,2019/6/8,94,8.7.3 测试步骤,被测 模块,单元 测试,设计 信息,集成 测试,被测 模块,单元 测试,被测 模块,单元 测试,测试过 的模块,确认 测试,系统 测试,软件 需求,其它系 统元素,装配好的软件,确认 的软件,可运 行的 软件,2019/6/8,95,8.7.3 测试步骤,测试策略,单元测试,U,C,D,R,S,I,V,ST,集成测试,确认测试,系统测试,系统工程,软件需求分析,软件设计,代码编写,2019/6/8,96,8.7.3 测试步骤,1.单元测试: 也称模块测
43、试、逻辑测试、结构测试,测试的方法一般采用白盒法,以路径覆盖为最佳测试准则。,2019/6/8,97,8.7.3 测试步骤,单元测试对于模块的5个基本特性进行评价,模块,错误处理,模块接口,局部数 据结构,重要的 执行路径,边界条件,2019/6/8,98,8.7.3 测试步骤,模块接口测试 测试I/O接口数据,看I/O是否正常,如果I/O不正常则其他测试就无法测试。 考虑问题: 参数,模块接收输入参数个数是否与模块变元的个数是否一致 ?输入参数与变元的属性是否匹配?输入参数单位与变元单位是否一致 传送给另一个被调用模块的输入参数有与变元个数是否一致?输入参数与变元的属性是否匹配?输入参数单位
44、与变元单位是否一致? 模块调用内部函数变元个数、属性、次序是否一致?多入口输入参数是否引用与当前入口无关的参数?是否修改了只作为输入用的变元?全程量的定义和用法在各模块中是否一致? 文件的属性是否正确?打开文件的语句是否正确?有没有有没有打开就使用的文件?格式说明书与输入输出语句是否一致?缓冲区大小是否与记录长度相匹配?文件结束判断处理是否正确?输入输出错误是否检查与处理了?,2019/6/8,99,8.7.3 测试步骤,局部数据结构测试模块内部数据是否完整,内容、形式、相互关系是否有错。 考虑问题: 错误的和不相容的说明,使用没赋值或没初始化的变量,错误的变量名 数据类型不相容,溢出或地址异
45、常。 初始值错或不正确的补缺值,全程数据对局部数据的影响,2019/6/8,100,8.7.3 测试步骤,逻辑覆盖 由于无法穷尽所有的逻辑测试,选择代表性的数据进行路径覆盖是十分必要的。测试数据重点放在测试错误的计算、不正确的比较或不适当的控制流而造成的错误 考虑问题: 运算的优先顺序 理解错,逻辑错,语义错 混合运算对象类型彼此不相容 变量初始值不正确 精度不够 表达式的符号错 不同类型的变量进行比较 循环次数引起循环错或不终止循环 错误地修改循环变量,2019/6/8,101,8.7.3 测试步骤,出错处理 预见出错的条件,并设置相应的处理错误的通路,保证程序正确运行。 考虑的问题: 对可
46、能出现的错误的描述是否难于理解 指明的错误与实际遇到的错误不相符合 出错后还没有进行错误处理就转入系统干预 对错误处理的不正确 提供的错误信息不足,无法确定错误位置和查错。,2019/6/8,102,8.7.3 测试步骤,测试步骤 S1:配置测试环境,设计辅助测试模块 S2:编写测试数据,根据逻辑覆盖及单元测试要考虑的问题设计测试用例 S3:进行多个单元的并行测试,2019/6/8,103,8.7.3 测试步骤,实用测试策略 白盒法与黑盒法相结合,静态测试与动态测试相结合,人工测试与机器测试相结合 执行步骤: S1:用边值分析法设计测试用例,测试边界易出错之处 S2:用等价类划分方法设计测试用
47、例,测试主要的软件错误 S3:结合用人工测试的错误推测法测试用例做弥补 S4:用逻辑覆盖设计测试用例作为测试的补充。,2019/6/8,104,8.7.3 测试步骤,2.组装测试 也称为综合、集成测试。单元测试之后进入组装测试。 非增式组装:将单元测试后的模块按照总体的结构图一次性组装起来 增式组装:在单元测试的基础上,采用自顶向下或自底向上逐层安装,直到最后测试完毕。 自顶向下增式组装测试:按照结构图自顶向下,先广度后深度逐层测试,直到测试结束。只设计存根模块,不设计驱动模块 自底向上增式组装测试:按照结构图自底向上,逐步安装,逐步测试,直到测试结束。只设计驱动模块,不设计存根模块 自顶向下
48、与自底向上增式组装结合测试,2019/6/8,105,8.7.3 测试步骤,2.组装测试 各类组装测试策略的优缺点: 非增式组装测试,程序错误易爆炸,不容易组装成功。单元测试使用的辅助模块多,适合于规模小的开发系统 增式组装测试,将错误分解,容易找到错误并测试成功,适合于大规模的开发系统 自顶向下的增式组装测试,不需要驱动模块的设计,可在程序测试的早期实现并验证系统的主要功能,及早发现上层模块的接口错误。 自底向上组装测试的优缺点与自顶向下的相反。,2019/6/8,106,8.7.3 测试步骤,3.确认测试 确认测试也称为合格测试或称验收测试。主要由使用用户参加测试,检验软件规格说明的技术标准的符合程度。 测试准则: 系统级的功能测试 正规的系统验收测试 强度测试,加载所有负荷的情况下,运行系统验证系统负荷能力. 性能测试:在实际运行环境下是否满足系统的性能要求 背景测试,不是空载条件下而是实际符合情况下,测试多道程序、多重作业的能力。 配置测试,在指定的组合逻辑或物理设备下测试,做好用户手册,操作手册,设计说明,源程序,测试说明。 恢复测试:测试系统在软件和硬件故障的情况下恢复原先控制的数据的能力。 安全测试,测试并保证系统的安全性,使不合法用户不能使用系统。,