信息系统分析与设计(第3版)邝孔武 王晓敏_第 10章-系统实施_第1页
信息系统分析与设计(第3版)邝孔武 王晓敏_第 10章-系统实施_第2页
信息系统分析与设计(第3版)邝孔武 王晓敏_第 10章-系统实施_第3页
信息系统分析与设计(第3版)邝孔武 王晓敏_第 10章-系统实施_第4页
信息系统分析与设计(第3版)邝孔武 王晓敏_第 10章-系统实施_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第10章章 系统实施系统实施本章计划学时:本章计划学时:4学时学时本章主要内容本章主要内容 系统实施阶段的任务系统实施阶段的任务 程序设计程序设计 程序设计技术程序设计技术 编程规范编程规范 系统测试和调试系统测试和调试 测试技术测试技术 测试类型测试类型 测试工具测试工具 系统转换系统转换主要包括以下几个方面的任务:主要包括以下几个方面的任务: 1. 1. 硬件准备硬件准备 2. 2. 软件准备软件准备 3. 3. 人员培训人员培训 4. 4. 数据准备数据准备系统实施阶段的内容系统实施阶段的内容系统实施阶段的特点是:系统实施阶段的特点是: 工作量大工作量大 投入的人力、物力多投入的人力、

2、物力多实施阶段的特点实施阶段的特点10.1 制定实现策略制定实现策略 结构化方法结构化方法主张自顶向下实现,尽量先实现主张自顶向下实现,尽量先实现上层模块,逐步向下,最后实现下层最基本上层模块,逐步向下,最后实现下层最基本的模块。的模块。 首先实现系统的轮廓或框架,在此基础上不断添首先实现系统的轮廓或框架,在此基础上不断添加新的功能,逐步完善,最后达到物理模型所要加新的功能,逐步完善,最后达到物理模型所要求的全部功能。求的全部功能。 面向对象方法面向对象方法主张基于构件的实现方法,按主张基于构件的实现方法,按层划分构件后,尽量先完成构件接口,然后层划分构件后,尽量先完成构件接口,然后可实现并行

3、开发。可实现并行开发。 先实现底层构件,然后开发上层构件先实现底层构件,然后开发上层构件 这种自顶向下的实现方法有效地解决了接这种自顶向下的实现方法有效地解决了接口问题。接口解决不好,往往不得不对调口问题。接口解决不好,往往不得不对调试过的程序反复修改,甚至推倒重来,造试过的程序反复修改,甚至推倒重来,造成重大的返工。成重大的返工。 这种方法整体性好,结构风险较小。这种方法整体性好,结构风险较小。 便于控制进度,保证研制工作按时完成。便于控制进度,保证研制工作按时完成。自顶向下方法的优点自顶向下方法的优点10.2 编写程序编写程序编写程序,要考虑以下几个方面:编写程序,要考虑以下几个方面: (

4、1) 了解什么是好程序;了解什么是好程序; (2) 采用什么程序设计技术;采用什么程序设计技术; (3) 遵循什么样的编程规范;遵循什么样的编程规范;1、好程序的标准、好程序的标准一般认为好程序应具备下列素质:一般认为好程序应具备下列素质: (1) 能够工作;能够工作; (2) 调试代价低;调试代价低; (3) 易于维护;易于维护; (4) 易于修改;易于修改; (5) 设计不复杂;设计不复杂; (6) 效率高。效率高。2、程序设计技术、程序设计技术 结构化程序设计结构化程序设计 面向对象程序设计面向对象程序设计 可视化程序设计可视化程序设计 Web程序设计程序设计 插件技术插件技术 结构化程

5、序设计结构化程序设计 通常认为结构化程序设计包括以下四方面的通常认为结构化程序设计包括以下四方面的内容:内容:(1) 限制使用限制使用GO TO语句语句(2) 逐步求精的设计方法逐步求精的设计方法(3) 自顶向下的设计、编码和调试自顶向下的设计、编码和调试(4) 主程序员制的组织形式主程序员制的组织形式面向对象程序设计面向对象程序设计 封装、继承、多态封装、继承、多态 程序以对象为基本元素,对象包含属性和方程序以对象为基本元素,对象包含属性和方法,设计程序通常不采用顺序结构法,设计程序通常不采用顺序结构 数据是特定对象的数据,只有对象自身的函数据是特定对象的数据,只有对象自身的函数或过程(方法

6、)可以维护对象的数据(属数或过程(方法)可以维护对象的数据(属性)性) 公用的功能通常设计组件(类)以实现重用公用的功能通常设计组件(类)以实现重用 需要分析并表达出对象之间的关系需要分析并表达出对象之间的关系可视化编程技术可视化编程技术 所见即所得的交互编程所见即所得的交互编程 基于事件驱动的原理基于事件驱动的原理 可以使用模板自动生成部分代码可以使用模板自动生成部分代码 结合面向对象编程技术结合面向对象编程技术3、编程规范、编程规范 必要的内部注释必要的内部注释 清晰的结构清晰的结构 良好的风格良好的风格 严格的源代码管理严格的源代码管理 程序的注释程序的注释需要注意以下几点:需要注意以下

7、几点: 每个文件的开始部分应指明程序的主要内容、编每个文件的开始部分应指明程序的主要内容、编写者、最后修改日期等信息,以利于管理。写者、最后修改日期等信息,以利于管理。 每个过程或函数前应有简要的接口描述信息,如每个过程或函数前应有简要的接口描述信息,如函数功能、参数要求、返回值或其他特别说明。函数功能、参数要求、返回值或其他特别说明。 注释必须与程序一致注释必须与程序一致, 所以修改程序时,要注所以修改程序时,要注 意对注释作相应的修改。意对注释作相应的修改。 对程序段作注释,而不是对每个语句作注释。对程序段作注释,而不是对每个语句作注释。清晰的程序结构清晰的程序结构1. 简单、直接地反映意

8、图简单、直接地反映意图2. 表达式的书写应一气呵成表达式的书写应一气呵成3. 嵌套不宜过深嵌套不宜过深4. 避免使用避免使用GOTO语句语句5. 避免使用全局变量(通常是设计问题)避免使用全局变量(通常是设计问题) 其他规范其他规范1. 排版格式的规范化排版格式的规范化2. 文件名、过程名、变量名的规范化文件名、过程名、变量名的规范化3. 不要直接使用数字不要直接使用数字参考阅读参考阅读代码大全代码大全10.3 系统测试系统测试 测试的目的(概念)测试的目的(概念) 测试的类型、步骤测试的类型、步骤 测试技术测试技术 测试用例的设计测试用例的设计目前,检验软件有三种手段:目前,检验软件有三种手

9、段:动态检查、静态动态检查、静态检查和正确性证明。检查和正确性证明。 程序正确性证明程序正确性证明技术目前还处于初级阶段,技术目前还处于初级阶段, 静态检查静态检查指人工评审软件文档或程序,发现指人工评审软件文档或程序,发现其中的错误(代码审查、代码走查、同行评其中的错误(代码审查、代码走查、同行评审)。审)。 动态检查动态检查就是测试。就是测试。测试是为了发现错误而测试是为了发现错误而执行程序的过程。执行程序的过程。测试只能证明程序有错误,测试只能证明程序有错误,而不可能证明程序没有错误。而不可能证明程序没有错误。系统测试系统测试 (1) (1)测试是指测试是指“用意在发现错误而执行一个程用

10、意在发现错误而执行一个程序的过程序的过程”; (2)(2)一个好的测试用例是指这个测试用例有很一个好的测试用例是指这个测试用例有很高的高的 概率可以发现一个尚未发现的错误;概率可以发现一个尚未发现的错误; (3)(3)一个成功的测试是指它成功地发现了一个一个成功的测试是指它成功地发现了一个尚未发现的错误。尚未发现的错误。 测试的关键问题是测试的关键问题是如何设计测试用例,即设如何设计测试用例,即设计一批测试数据,通过有限的测试用例,在有计一批测试数据,通过有限的测试用例,在有限的研制时间、研制经费的约束下,尽可能多限的研制时间、研制经费的约束下,尽可能多地发现程序中的错误。地发现程序中的错误。

11、10.3.1 测试的目的测试的目的10.3.2 测试类型测试类型1. 模块测试模块测试也称单元测试,根据模块的功能说明检验每个也称单元测试,根据模块的功能说明检验每个单独的模块是否存在错误。单独的模块是否存在错误。2. 联合测试联合测试也称集成测试,检验模块及系统结构。也称集成测试,检验模块及系统结构。3. 确认测试确认测试检验系统说明书的各项功能与性能是否实现,检验系统说明书的各项功能与性能是否实现,是否满足要求。也可称验收测试。是否满足要求。也可称验收测试。4. 系统测试系统测试是对整个信息系统的测试,将硬件、软件、操是对整个信息系统的测试,将硬件、软件、操作人员看作一个整体,来分析系统的

12、功能与执作人员看作一个整体,来分析系统的功能与执行性能行性能1、模块测试、模块测试 模块测试又称单元测试,是针对软件设计的模块测试又称单元测试,是针对软件设计的最小单位最小单位程序模块,进行正确性检验的程序模块,进行正确性检验的测试工作。测试工作。 模块测试的目的在于发现各模块内部可能存模块测试的目的在于发现各模块内部可能存在的各种差错。在的各种差错。 模块测试需要从程序的内部结构出发设计测模块测试需要从程序的内部结构出发设计测试用例,多个模块可以平行地独立进行单元试用例,多个模块可以平行地独立进行单元测试。测试。模块测试方法模块测试方法 模块并不是一个独立的程序,在考虑测试模模块并不是一个独

13、立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测模块相联系的其他模辅助模块去模拟与被测模块相联系的其他模块。块。 驱动模块驱动模块 (driver(driver,测试驱动开发方法强调,测试驱动开发方法强调 比如比如人人工吹气测试自行车的气门芯,测试没有问题后工吹气测试自行车的气门芯,测试没有问题后再安装再安装 桩模块桩模块 (stub) (stub) 存根模块存根模块 某演员缺席使用某演员缺席使用替补替补,彩排继续,彩排继续模块测试工具模块测试工具比如常见的单元测试工具:比如常见的单元测试工具: JUnit NUnit 这些

14、工具实质上是一种测试框架,一般提供这些工具实质上是一种测试框架,一般提供一些基本接口,开发人员继承这个接口,来一些基本接口,开发人员继承这个接口,来编写测试程序,而测试程序的具体运行交给编写测试程序,而测试程序的具体运行交给框架来负责。框架来负责。 可以集成到开发环境中可以集成到开发环境中2、集成测试、集成测试 将所有模块集成在一起所进行的系统功能的将所有模块集成在一起所进行的系统功能的测试测试 集成测试的策略有多种:集成测试的策略有多种: 一次性组装一次性组装 自顶向下的组装自顶向下的组装 自底向上的组装自底向上的组装一次性组装测试一次性组装测试 Big-bang IntegrationBi

15、g-bang Integration(一次性组装或整体(一次性组装或整体拼装)拼装)首先对每个模块分别进行模块测试,然后再把所首先对每个模块分别进行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的软有模块组装在一起进行测试,最终得到要求的软件系统。件系统。自顶向下的集成测试自顶向下的集成测试 Top-down Integration(自顶至下)(自顶至下) 按系统程序结构,沿控制层次自顶向下进行组装。按系统程序结构,沿控制层次自顶向下进行组装。 通过设置下层模块为桩,检查控制流,较早地验通过设置下层模块为桩,检查控制流,较早地验证了主要的控制和判断点。证了主要的控制和判断点。 需要

16、制作较多的桩模块,并且桩模块不能返回真需要制作较多的桩模块,并且桩模块不能返回真实的数据。实的数据。自顶向下的集成测试自顶向下的集成测试自底向上的集成测试自底向上的集成测试 Bottom-up Integration(自底向上)(自底向上) 从程序模块结构的最底层的模块开始组装和测试。从程序模块结构的最底层的模块开始组装和测试。 对于一个给定层次的模块,它的子模块及其下属对于一个给定层次的模块,它的子模块及其下属模块已经组装并测试完成,所以不再需要桩模块。模块已经组装并测试完成,所以不再需要桩模块。 要到最后才窥得全貌,重大结构问题不能及早发要到最后才窥得全貌,重大结构问题不能及早发现现3、确

17、认测试、确认测试 确认测试主要是进行功能的有效性测试。确认测试主要是进行功能的有效性测试。 运用黑盒测试的技术,验证被测软件是否满运用黑盒测试的技术,验证被测软件是否满足需求规格说明书列出的需求。足需求规格说明书列出的需求。 目的是使软件符合需求,获得客户的确认,目的是使软件符合需求,获得客户的确认,为验收作准备为验收作准备测试和测试和测试测试 测试和测试和测试测试 测试是由一个用户在开发环境下进行的测试,测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下也可以是公司内部的用户在模拟实际操作环境下进行的测试。进行的测试。 测试是由软件的多个用户在实际使用环境下进

18、测试是由软件的多个用户在实际使用环境下进行的测试。这些用户返回有关错误信息给开发者。行的测试。这些用户返回有关错误信息给开发者。回归测试回归测试 回归测试回归测试 当软件发生变化后(例如:增加了新的模块、修当软件发生变化后(例如:增加了新的模块、修改了程序模块后),可能使得原来通过测试的功改了程序模块后),可能使得原来通过测试的功能不能正常运行,回归测试就是通过重新执行已能不能正常运行,回归测试就是通过重新执行已经执行过的测试来保证改动过的程序的正确性。经执行过的测试来保证改动过的程序的正确性。 回归测试可以用人工来执行所有测试用例的一个回归测试可以用人工来执行所有测试用例的一个子集,或者采用

19、捕捉回放工具来进行(自动测试子集,或者采用捕捉回放工具来进行(自动测试工具)。工具)。 回归测试回归测试 当软件发生变化后(例如:增加了新的模块、修改当软件发生变化后(例如:增加了新的模块、修改了程序模块后),可能使得原来通过测试的功能不了程序模块后),可能使得原来通过测试的功能不能正常运行,回归测试就是通过重新执行已经执行能正常运行,回归测试就是通过重新执行已经执行过的测试来保证改动过的程序的正确性。过的测试来保证改动过的程序的正确性。 回归测试可以用人工来执行所有测试用例的一个子回归测试可以用人工来执行所有测试用例的一个子集,或者采用捕捉回放工具来进行(自动测试工集,或者采用捕捉回放工具来

20、进行(自动测试工具)。具)。回归测试的概念回归测试的概念4、系统测试、系统测试 系统测试,是将通过确认测试的软件,作为系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行环境其他系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的集成测试和下,对计算机系统进行一系列的集成测试和确认测试。确认测试。 系统测试为系统的正式运行做准备,也可称系统测试为系统的正式运行做准备,也可称为试运行。为试运行。系统测试的内容系统测试

21、的内容 功能测试功能测试 在规定的一段时间内运行软件系统的所有功能,以在规定的一段时间内运行软件系统的所有功能,以验证这个软件系统有无严重错误。验证这个软件系统有无严重错误。 可靠性测试可靠性测试 平均失效间隔时间平均失效间隔时间 MTBF(Mean Time Between Failures) 因故障而停机的时间因故障而停机的时间MTTR(Mean Time To Repairs) 强度测试(压力测试)强度测试(压力测试) 检查在系统运行环境非正常乃至发生故障的情况下,检查在系统运行环境非正常乃至发生故障的情况下,系统可以运行到何种程度系统可以运行到何种程度 性能测试性能测试 检查系统是否满

22、足在需求说明书中规定的性能。特检查系统是否满足在需求说明书中规定的性能。特别是对于实时系统或嵌入式系统。别是对于实时系统或嵌入式系统。系统测试的内容(续)系统测试的内容(续) 恢复测试恢复测试 证实在克服硬件故障证实在克服硬件故障(包括掉电、硬件或网络出错包括掉电、硬件或网络出错等等)后,系统能否正常地继续进行工作,并不对系后,系统能否正常地继续进行工作,并不对系统造成任何损害。统造成任何损害。 采用人工模拟硬件故障,故意造成软件出错。采用人工模拟硬件故障,故意造成软件出错。 启动停止测试启动停止测试 验证在机器启动及关机阶段,软件系统正确处理验证在机器启动及关机阶段,软件系统正确处理的能力。

23、的能力。 反复启动软件系统反复启动软件系统 ,例如操作系统自举、网络的,例如操作系统自举、网络的启动、应用程序的调用等。启动、应用程序的调用等。 在尽可能多的情况下关机。在尽可能多的情况下关机。系统测试的内容(续)系统测试的内容(续) 配置测试配置测试 检查计算机系统内各个设备或各种资源之间的相检查计算机系统内各个设备或各种资源之间的相互联结和功能分配中的错误。互联结和功能分配中的错误。 包括配置命令测试、循环配置测试、修复测试。包括配置命令测试、循环配置测试、修复测试。 安全性测试安全性测试 检验在系统中已经存在的系统安全性、保密性措检验在系统中已经存在的系统安全性、保密性措施是否发挥作用,

24、有无漏洞。施是否发挥作用,有无漏洞。 可使用性测试可使用性测试 从使用的合理性和方便性等角度对软件系统进行从使用的合理性和方便性等角度对软件系统进行检查,发现人为因素或使用上的问题。检查,发现人为因素或使用上的问题。系统测试的内容(续)系统测试的内容(续) 可支持性测试可支持性测试验证系统的支持策略对于公司与用户方面是否切验证系统的支持策略对于公司与用户方面是否切实可行。实可行。 安装测试安装测试对系统安装进行测试,找出在安装过程中出现的对系统安装进行测试,找出在安装过程中出现的错误。错误。系统的每一部分是否都齐全;系统的每一部分是否都齐全;所有文件是否都已产生并确有所需要的内容;所有文件是否

25、都已产生并确有所需要的内容;硬件的配置是否合理,等等硬件的配置是否合理,等等系统测试的内容(续)系统测试的内容(续) 兼容性测试兼容性测试验证软件产品在不同版本之间的兼容性。验证软件产品在不同版本之间的兼容性。有两类基本的兼容性测试:向下兼容、交错兼容有两类基本的兼容性测试:向下兼容、交错兼容 容量测试容量测试检验系统的能力最高能达到什么程度。检验系统的能力最高能达到什么程度。对于信息检索系统,让它使用频率达到最大。对于信息检索系统,让它使用频率达到最大。在使系统的全部资源达到在使系统的全部资源达到“满负荷满负荷”的情形下,的情形下,测试系统的承受能力,也称压力测试。测试系统的承受能力,也称压

26、力测试。 文档测试文档测试检查用户文档检查用户文档( (如用户手册如用户手册) )的清晰性和精确性。的清晰性和精确性。10.3.3 测试技术测试技术 黑箱测试黑箱测试/黑盒测试黑盒测试 白箱测试白箱测试/白盒测试白盒测试1、黑箱测试、黑箱测试 这种方法是把测试对象看做一个黑盒子,测这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序模块的详细说明,检查部特性,只依据程序模块的详细说明,检查程序的功能是否符合它的功能说明。程序的功能是否符合它的功能说明。 黑盒测试又叫做黑盒测试又叫做功能测试功能测试或或数据驱动测试数

27、据驱动测试。黑箱的穷举测试黑箱的穷举测试 用黑盒测试发现程序中的错误,必须在用黑盒测试发现程序中的错误,必须在所有所有可能的输入条件和输出条件可能的输入条件和输出条件中确定测试数据,中确定测试数据,来检查程序是否都能产生正确的输出。来检查程序是否都能产生正确的输出。 但这是但这是不可能不可能的。举例:的。举例:假设一个程序假设一个程序P P有输入量有输入量X X和和Y Y及输出量及输出量Z Z。在字长。在字长为为3232位的计算机上运行。若位的计算机上运行。若X X、Y Y取整数,按黑盒取整数,按黑盒方法进行穷举测试:方法进行穷举测试:可能采用的测试数据组:可能采用的测试数据组: 2 2323

28、22 23232 2 26464 如果测试一组数据需要如果测试一组数据需要1 1毫秒,一年工作毫秒,一年工作365365 2424小时,完成所有测试需小时,完成所有测试需5 5亿年。亿年。2、白箱测试、白箱测试 此方法此方法把测试对象看做一个透明的盒子把测试对象看做一个透明的盒子,它,它允许测试人员利用程序内部的逻辑结构及有允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有关信息,设计或选择测试用例,对程序所有逻辑结构进行测试。逻辑结构进行测试。 通过在不同点检查程序的状态,确定实际的通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试状态是否

29、与预期的状态一致。因此白盒测试又称为又称为结构测试结构测试或或逻辑驱动测试逻辑驱动测试。白箱的穷举测试白箱的穷举测试 对一个具有多重选择和循环嵌套的程序,不对一个具有多重选择和循环嵌套的程序,不同的路径数目可能也是天文数字。同的路径数目可能也是天文数字。给出一个小程序的流程图,它包括了一个执行给出一个小程序的流程图,它包括了一个执行2020次的循环。次的循环。包含的不同执行路径数达包含的不同执行路径数达5 52020条,对每一条路径进条,对每一条路径进行测试需要行测试需要1 1毫秒毫秒一年工作一年工作3653652424小时小时测试完需测试完需31703170年。年。使用测试用例使用测试用例

30、不论使用什么测试技术,我们都不可能采用不论使用什么测试技术,我们都不可能采用穷举测试,如何选择测试用例,达到:穷举测试,如何选择测试用例,达到:以尽可能少的数据发现尽可能多的错误以尽可能少的数据发现尽可能多的错误 一个测试用例就是为了测试某个目标(模块、一个测试用例就是为了测试某个目标(模块、功能、性能)而准备的一份输入数据及其预功能、性能)而准备的一份输入数据及其预期结果期结果3、测试用例的设计、测试用例的设计 设计测试用例时,根据黑盒技术和白盒技术设计测试用例时,根据黑盒技术和白盒技术的原理,可以有不同的方法:的原理,可以有不同的方法: 逻辑覆盖法(白盒)逻辑覆盖法(白盒) 等价类划分法(

31、黑盒)等价类划分法(黑盒) 边界值分析法(黑盒)边界值分析法(黑盒)测试用例设计测试用例设计逻辑覆盖逻辑覆盖 逻辑覆盖逻辑覆盖是以程序内部的逻辑结构为基是以程序内部的逻辑结构为基础的设计测试用例的技术,属于白盒测础的设计测试用例的技术,属于白盒测试。试。 根据覆盖测试的目的不同,逻辑覆盖分根据覆盖测试的目的不同,逻辑覆盖分为:为:语句覆盖语句覆盖判定覆盖判定覆盖条件覆盖条件覆盖条件组合覆盖条件组合覆盖路径覆盖路径覆盖逻辑覆盖举例逻辑覆盖举例(A1) and (B=0)(A=2) or (X1)X=X/AX=X+1语句覆盖语句覆盖 语句覆盖就是设计若干个测试用例,运行被语句覆盖就是设计若干个测试

32、用例,运行被测程序,使得每一测程序,使得每一可执行语句可执行语句至少执行一次。至少执行一次。在图例中,正好所有的可执行语句都在路径在图例中,正好所有的可执行语句都在路径L1L1上,上,所以选择路径所以选择路径 L1L1设计测试用例,就可以覆盖所有设计测试用例,就可以覆盖所有的可执行语句。的可执行语句。 测试用例的设计格式如下测试用例的设计格式如下【输入的【输入的(A, B, X)(A, B, X),输出的,输出的(A, B, X)(A, B, X)】 为图例设计满足语句覆盖的测试用例是为图例设计满足语句覆盖的测试用例是: :【(2, 0, 4)(2, 0, 4),(2, 0, 3)(2, 0,

33、 3)】 覆盖覆盖 aceace【L1L1】 语句覆盖是最弱的逻辑覆盖准则语句覆盖是最弱的逻辑覆盖准则判断覆盖判断覆盖 判定覆盖就是设计若干个测试用例,运行被判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个测程序,使得程序中每个IF判断语句的取真判断语句的取真分支和取假分支至少一次。分支和取假分支至少一次。 判定覆盖又称为分支覆盖。判定覆盖又称为分支覆盖。 对于图例,如果选择路径对于图例,如果选择路径L1和和L2,就可得满,就可得满足要求的测试用例足要求的测试用例: 【(2, 0, 4),(2, 0, 3)】覆盖】覆盖 ace【L1】 【(1, 1, 1),(1, 1, 1)】覆盖

34、】覆盖 abd【L2】条件覆盖条件覆盖 条件覆盖就是设计若干个测试用例,运行被条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中所有判断的每个子条件测程序,使得程序中所有判断的每个子条件的可能取值至少执行一次。的可能取值至少执行一次。 在图例中,我们事先可对所有条件取值加以在图例中,我们事先可对所有条件取值加以标记。例如:标记。例如: 对于第一个判断:对于第一个判断: 条件条件 A1 取真为取真为 ,取假为,取假为条件条件 B0 取真为取真为 ,取假为,取假为 对于第二个判断:对于第二个判断: 条件条件A2 取真为取真为 ,取假为,取假为条件条件X1 取真为取真为 ,取假为,取假为T1T

35、1T2T2T3T3T4T4条件覆盖条件覆盖测试用例测试用例 覆盖分支覆盖分支 条件取值条件取值【(2, 0, 4),(2, 0, 3)】 L1(c, e) 【(1, 0, 1),(1, 0, 1)】 L2(b, d) 【(2, 1, 1),(2, 1, 2)】 L3(b, e)或【(1, 0, 3),(1, 0, 4)】 L3(b, e) 【(2, 1, 1),(2, 1, 2)】 L3(b, e)T T T T12344321TTTTT T T T1234T T T T1234T T T T1234条件组合覆盖条件组合覆盖 条件组合覆盖就是设计足够的测试用例,运行被测程序,条件组合覆盖就是设

36、计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。使得每个判断的所有可能的条件取值组合至少执行一次。 记 A1, B0 作 A1, B0 作 A 1, B0 作 A 1, B0 作 A2, X1 作 A2, X 1 作 A2, X1 作 A2, X 1 作T T12T T12T T12T T12T T34T T34T T34T T34条件组合覆盖条件组合覆盖 测 试 用 例 覆盖条件 覆盖组合【(2, 0, 4), (2, 0, 3)】(L1) , 【(2, 1, 1), (2, 1, 2)】(L3) , 【(1, 0, 3), (1, 0, 4)】(L3) ,

37、 【(1, 1, 1), (1, 1, 1)】(L2) , T T T T1234T T T T1234T T T T1234T T T T1234路径覆盖路径覆盖 路径覆盖路径覆盖就是设计足够的测试用例,覆盖程序中所有可能就是设计足够的测试用例,覆盖程序中所有可能的路径。的路径。 测试用例测试用例 通过路径通过路径 覆盖条件覆盖条件 【(2, 0, 4), (2, 0, 3)】 ace (L1) 【(1, 1, 1), (1, 1, 1)】 abd (L2) 【(1, 1, 2), (1, 1, 3)】 abe (L3) 【(3, 0, 3), (3, 0, 1)】 acd (L4)T T

38、T T1234T T T T1234T T T T1234T T T T3412测试用例设计测试用例设计等价类划分等价类划分 等价类划分是一种典型的黑盒测试方法,使等价类划分是一种典型的黑盒测试方法,使用这一方法时,完全不考虑程序的内部结构,用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。只依据程序的规格说明来设计测试用例。 等价类划分方法把所有可能的输入数据,即等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用部分中选取少数有代表性的数据做为测试用例。例。 使用这

39、一方法设计测试用例要经历划分等价使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。类(列出等价类表)和选取测试用例两步。等价类划分等价类划分 等价类是指某个输入域的子集合。在该子集等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误合中,各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价都是等效的。测试某等价类的代表值就等价于对这一类其他值的测试。于对这一类其他值的测试。 等价类的划分有两种不同的情况:等价类的划分有两种不同的情况: 有效等价类:是指对于程序的规格说明来说,是有效等价类:是指对于程序的规格说明来说,是合理的,

40、有意义的输入数据构成的集合。合理的,有意义的输入数据构成的集合。 无效等价类:是指对于程序的规格说明来说,是无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。不合理的,无意义的输入数据构成的集合。 设计测试用例时,要同时考虑有效等价类和设计测试用例时,要同时考虑有效等价类和无效等价类的设计。无效等价类的设计。 不同类型的数据,划分等价类不同不同类型的数据,划分等价类不同如何划分等价类如何划分等价类(1 1)如果输入条件规定了取值范围,或值的个数,)如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类和两个无效等价类。则可以确立一个有效等价类和两个无效等

41、价类。例如,在程序的规格说明中,对输入条件有一句话:例如,在程序的规格说明中,对输入条件有一句话:“数量可以从数量可以从1 1到到999”999”则有效等价类是则有效等价类是“11数量数量999”999”两个无效等价类是两个无效等价类是“数量数量1”1”或或“数量数量999”999”。在数轴上表示成在数轴上表示成: :如何划分等价类如何划分等价类(2 2)如果输入条件规定了输入值的集合,或者)如果输入条件规定了输入值的集合,或者是规定了是规定了“必须如何必须如何”的条件,这时可确立的条件,这时可确立一个有效等价类和一个无效等价类。一个有效等价类和一个无效等价类。例如,在例如,在C C语言中对变

42、量标识符规定为语言中对变量标识符规定为“以字母以字母打头的打头的串串”。那么所有以字母打头的构成有。那么所有以字母打头的构成有效等价类,而不在此集合内(不以字母打头)的效等价类,而不在此集合内(不以字母打头)的归于无效等价类。归于无效等价类。(3 3)如果输入条件是一个布尔量,则可以确定)如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类。一个有效等价类和一个无效等价类。如何划分等价类如何划分等价类(4 4)如果规定了输入数据的一组值,而且程序)如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理。这时可为每要对每个输入值分别进行处理。这时可为每一个输入值确立一个有效

43、等价类,此外针对一个输入值确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允这组值确立一个无效等价类,它是所有不允许的输入值的集合。许的输入值的集合。例如:在教师上岗方案中规定对教授、副教授、例如:在教师上岗方案中规定对教授、副教授、讲师和助教分别计算分数,做相应的处理。因此讲师和助教分别计算分数,做相应的处理。因此可以确定可以确定4 4个有效等价类为教授、副教授、讲师和个有效等价类为教授、副教授、讲师和助教,一个无效等价类,它是所有不符合以上身助教,一个无效等价类,它是所有不符合以上身分的人员的输入值的集合。分的人员的输入值的集合。如何划分等价类如何划分等价类(5)如果规定了

44、输入数据必须遵守的规则,则如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(符合规则)和若可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。干个无效等价类(从不同角度违反规则)。例如,变量名例如,变量名“所有以字母或数字打头的,不包所有以字母或数字打头的,不包含含等字符的非保留字等字符的非保留字”等。等。 在明确规则的几个条件后,确立每个条件的在明确规则的几个条件后,确立每个条件的有效等价类和无效等价类,建立等价类表。有效等价类和无效等价类,建立等价类表。最后,确定测试用例。最后,确定测试用例。如何划分等价类如何划分等价类在某一种语言版本中规定:在某一种语言

45、版本中规定:“标识符是由字母开标识符是由字母开头,后跟字母或数字的任意组合构成。有效字符头,后跟字母或数字的任意组合构成。有效字符数为数为8 8个,最大字符数为个,最大字符数为8080个。个。”并且规定:并且规定:“标识符必须先说明,再使用。标识符必须先说明,再使用。” “在同一说明语句中,标识符至少必须有一个。在同一说明语句中,标识符至少必须有一个。”测试用例设计测试用例设计边界值分析边界值分析 边界值分析也是一种黑盒测试方法,是对等边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。价类划分方法的补充。 人们从长期的测试工作经验得知,大量的错人们从长期的测试工作经验得知,大量的错误是

46、发生在输入或输出范围的边界上,而不误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。况设计测试用例,可以查出更多的错误。 比如我们在操作链表指针时,出现错误的往比如我们在操作链表指针时,出现错误的往往是在边界值的情况下(如在表头或表尾进往是在边界值的情况下(如在表头或表尾进行插入或删除),判定条件、循环条件等也行插入或删除),判定条件、循环条件等也常常是在正常值左右出现问题。常常是在正常值左右出现问题。边界值分析边界值分析 这里所说的边界是指:相当于输入等价类和这里所说的边界是指:相当于输入等价

47、类和输出等价类而言,等于其边界值及稍高输出等价类而言,等于其边界值及稍高/低于低于其边界值的一些特定情况。其边界值的一些特定情况。 使用边界值分析方法设计测试用例,首先应使用边界值分析方法设计测试用例,首先应确定边界情况。应当选取正好等于,刚刚大确定边界情况。应当选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据,而于,或刚刚小于边界的值做为测试数据,而不是选取等价类中的典型值或任意值做为测不是选取等价类中的典型值或任意值做为测试数据。试数据。 比如,在计算个人所得税时,全月应纳税所得额比如,在计算个人所得税时,全月应纳税所得额超过超过1000元至元至2000元的部分税率为元的部分税率为5

48、%。那么在。那么在测试时,可以选择的测试用例是:测试时,可以选择的测试用例是: x=999 x=1000 x=1001 x=2000 x=2001边界值分析边界值分析 对于数据库应用系统,很多的功能是与记录对于数据库应用系统,很多的功能是与记录处理有关,我们可以扩大边界值的概念,根处理有关,我们可以扩大边界值的概念,根据以下提示选择测试用例:据以下提示选择测试用例: 新记录(第一条记录前,最后,记录的项目不全)新记录(第一条记录前,最后,记录的项目不全) 处理业务(第一条、最后一条、相邻、超常规、处理业务(第一条、最后一条、相邻、超常规、错误范围、记录不存在)错误范围、记录不存在) 记录删除(

49、第一条、最后一条、指定范围、当前记录删除(第一条、最后一条、指定范围、当前记录等)记录等) 查看(第一页查看(第一页/条、指定页条、指定页/条、最后一页条、最后一页/条)条)10.3.4 测试原则测试原则 应当把应当把“尽早地和不断地进行软件测试尽早地和不断地进行软件测试”作为软件作为软件开发者的座右铭。开发者的座右铭。 测试用例应由测试用例应由测试输入数据测试输入数据和对应的和对应的预期输出结果预期输出结果这两部分组成。程序员应避免检查自己的程序。这两部分组成。程序员应避免检查自己的程序。(结对编程)(结对编程) 在设计测试用例时,应包括在设计测试用例时,应包括合理的输入条件合理的输入条件和

50、和不合不合理的输入条件理的输入条件。 充分注意测试中的群集现象。经验表明:充分注意测试中的群集现象。经验表明:测试后程序中残存的错误数目与该程序中已发现的错误数目成正比 严格执行测试计划,排除测试的随意性。严格执行测试计划,排除测试的随意性。 应当对每一个测试结果做全面检查和分析。应当对每一个测试结果做全面检查和分析。 妥善保存测试计划、测试用例、出错统计和最终分妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。析报告,为维护提供方便。何时引入测试何时引入测试在系统生命周期,越早引入测试越好:在系统生命周期,越早引入测试越好: 计划阶段:评估测试可行性分析。计划阶段:评估测试可行性分析。 分析阶段:需求走查,制定确认测试计划、设计分析阶段:需求走查,制定确认测试计划、设计功能测试用例。功能测试用例。 设计阶段:确认设计符合需求,制定单元测试和设计阶段:确认设计符合需求,制定单元测试和集成测试计划、设计单元测试和集成测试用例。集成测试计划、设计单元测试和集成测试用例。 实施阶段:进行单元测试和集成测试。最后进行实施阶段:进行单元测试和集

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论