1、第一部分 传统的软件工程方法,第二章 系统分析 第三章 需求分析 第四章 软件设计 第五章 编码与测试,第五章 编码与测试,51 程序编码 52 测试的基本概念 53 两种测试类型 54 白盒测试方法的用例设计 55 黑盒测试方法的用例设计 56 软件的测试步骤 57 调试与排错 58 软件可靠性 59 本章重点,51 程序编码,基本任务:将软件设计的结果翻译成计算机可以“理解”的形成使用某种语言描述的程序。,程序的质量主要取决于软件设计的质量,程序设计语言的特性和编码途径也对程序的可靠性、可读性、可测试性和可维护性产生深远的影响。,511 程序设计语言的选择,项目的应用领域 (附表)系统用户
2、的要求可以得到的软件工具工程规模软件可移植性要求软件开发人员的知识水平、心理因素,程序设计语言及应用领域参考表,512 编码风格,编码风格(程序设计风格、编程风格),是指导人们编写出逻辑简明清晰、易读易懂程序的基本原则。包括: 1、源程序文档化: 2、数据说明:对数据添加说明。 3、语句结构:结构化、库函数、可读性。 4、输入/输出(I/O):友好、方便使用。,512 编码风格源程序文档化,为了提高程序的可维护性,源代码也需要实现文档化(内部文档编制)。包括: 1、符号名的命名: 2、程序注释:序言、功能等。 3、标准的书写格式:分层缩进的写法显示嵌套结构层次。,512 编码风格源程序文档化,
3、if () if() else else ,if () if() else else ,52 软件测试的基本概念,软件测试是软件开发工作的最后一个环节。由于人认识客观事物的主观性,难免在开发的软件产品中产生错误。为了给用户交付一个高质量的软件系统,必须对开发的系统进行严格的测试,以便尽可能多的发现错误。软件测试是保证软件质量,提高软件可靠性的关键。,521 基本概念,软件产品最大的成本是检测软件错误、修正软件错误的成本。在整个软件开发中: 测试工作量40%,(1)预防错误: 几乎不可实现 (2)发现错误: 软件测试目的,找错,521 基本概念,522 测试的目的与地位,G.J.Myers在中认
4、为:“程序测试是为了发现错误而执行程序的过程.”,E.W.Dijkstra 指出:“程序测试能证明错误的存在,但不能证明错误不存在.”测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错.,把证明程序无错当作测试目的不仅是不正确的, 完全做不到的,而且对做好测试没有任何益处,甚至是十分有害的.软件测试要设法使软件发生故障,暴露软件错误测试的“成功”与“失败”能够发现错误的测试是成功的 测试,否则是失败的测试。,“测试的目的是说明程序正确地执行它应有的功能”也是错误的.例:程序Triangle,输入三个整数,表示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、
5、等腰三角形还是不等边三角形。为说明其能正确执行它的功能,可使用“测试用例”(3,4,5),(5,5,6),(6,6,6), 程序都能给出正确结果,是否就可认为程序是正确的?,523 测试与调试(排错),测试 (test) 调试 (debug),以已知条件开始, 使用预先定义的程序, 有预知的结果,以不可知内部条件开始,结果一般不可预见,有计划,被动的,由独立的测试组,在不了解软件设计的条件下完成,由程序作者进行,发现错误,找出错误位置,排除,524 测试阶段工作步骤,单元测试: 检验每个模块能否单独工作. 集成测试: 检验概要设计中模块接口设计问题 确认测试: 以需求规格说明书为检验尺度 系统
6、测试: 综合检验 平行运行:新旧两套系统并行运行,对照检验测试可视为分析、设计、编码三个阶 段的最终复审,以保证软件质量.,525 测试阶段与前期工作的关系,程序中的问题根源可能在开发前期的各阶段解决、纠正错误也必须追溯到前期工作。,测试与开发前期工作的关系,决定软件与系统的配合关系,需求分析,概要设计,详细设计,编 码,单元测试,集成测试,确认测试,系统测试,开发前期出现错误的扩展,计划,需求 分析,设 计,编 码,测 试,A,A,B,软件生存期各阶段间需求保持的正确性,用户要求,用户: 我要什么?,运行结果,计算机: 程序运行得 到的结果,源程序,程序员: 我要让计算 机什么做?,设计说明
7、书,设计员: 我要让软件 做什么?,需求说明书,分析员: 我可以提 供什么?,1,2,3,4,5,理解正确性 表达正确性,理解正确性 设计正确性 表达正确性,理解正确性 编码正确性,运行正确性 输入正确性,相符吗?,526 软件测试的对象,软件测试不等于程序测试,软件测试应贯穿于软件定义与开发的整个期间;据美国一家公司统计,查出的软件错误中,属于需求分析和软件设计的错误约占 64%,属于程序编写的错误仅占 36%。程序编写的许多错误是“先天的”。,527 测试的基本原则,(1)开发和测试队伍分别建立 (2)测试用例(测试用的一组输入数据、环境平台和运行条件)应由输入数据和预期的输出结果两部分组
8、成. (3)兼顾合理的输入和不合理的输入数据 (4)应检查程序是否作了不该做的事 (5)程序修改后要回归测试 (6)应长期保留测试用例,直至系统废弃。,程序测试举例 例:程序 Triangle, 输入三个整 数,表示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。,判断三角型的测试用例设计:输入数据 预期结果 (1) 6;6;6 等边 (2) 8;8;4 等腰 (3) 4;5;6 一般 还应输入非法数据:0; 7; 9-7;3; 5a; 2; 7 等,528 软件错误的分类,功能错(需求分析错误)软件结构错数据错编码错软件集成错测试定义与测试执行
9、错误,529 软件测试信息流,测试过程需要三类输入: 软件配置:需求规格说明书软件设计说明书被测源程序 测试配置:测试计划测试用例(测试数据)测试驱动程序 测试工具:,软件测试信息流,软件 配置,测试,测试 配置,测试 工具,结果 分析,排错,可靠性分析,测试 结果,错误,预期 结果,出错率,改正 的软件,预测 的可 靠性,5210 测试的方法与技术,软件测试的 策略和方法,静态测 试方法,动态测 试方法,人工测试方法,计算机辅助静 态分析方法,白盒测试方法,黑盒测试方法,穷举测试方法,静态测试: 基本特征是在对软件进行分析、检查和测试,不实际运行被测试的软件.静态测试约可找出3070%的逻辑
10、设计错误.对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错.,动态测试:通过运行软件来检验软件的动态行为和运行结果的正确性.动态测试的两个基本要素:被测试程序测试数据(测试用例),动态测试方法 (1)选取定义域有效值,或定义域 外无效值. (2)对已选取值决定预期的结果 (3)用选取值执行程序 (4)执行结果 与(2)结果相比,不吻和程序有错.,53 两种类型的测试,1 黑盒测试,2 白盒测试,531 黑盒测试,又称: 功能测试数据驱动测试基于规格说明书的测试,532 白盒测试,又称: 结构测试玻璃盒测试基于覆盖的测试.根据被测程序的逻辑结构设计测试用例;力求提高
11、测试覆盖率;,533 黑盒与白盒测试比较,黑盒测试是从用户观点,按规格说明书要求的输入数据与输出数据的对应关系设计测试用例,是根据程序外部特征进行测试。白盒测试是根据程序内部逻辑结构进行测试。,534 穷举测试,例:输入 三条边长 黑盒测试 可采用的测试用例数(设字长16位) 执行时间: 设测试一次需1ms共需一万年.,=2 X2 X2 3X10,16,16,16,14,534 穷举测试,白盒测试 例: 含5个分支,循环次数 20,从A到B的可能 路径执行时间: 设测试一次需2ms穷举测试需5亿年.,=5+5 +5 +5 10,20,1,2,19,14,A,B,534 穷举测试,不论黑盒还是白
12、盒测试都不能 进行穷尽测试, 所以软件测试不可 能发现程序中存在的所有错误, 因 此需精心设计测试方案, 力争尽可 能少的次数,测出尽可能多的错误.,黑盒测试与白盒测试能发现的错误,C,B,A,D,-只能用黑盒测试发现的错误,A,-只能用白盒测试发现的错误,-两种方法都能发现的错误,-两种方法都不能发现的错误,B,C,D,54 白盒测试的测试用例设计,逻辑覆盖法:一系列测试方法总称,特点是逐渐进行越来越完整的通路测试。例:PROCEDURE SAMPAL (A,B:REAL; VAR X:REAL);BEGINIF (A1) AND (B=0)THEN X:=X/AIF (A=2) OR (X
13、1)THEN X:=X+1END;,541 逻辑覆盖准则,(1)语句覆盖 (2)判定覆盖 (3)条件覆盖 (4)判定/条件覆盖 (5)条件组合覆盖 (6)路径覆盖 (7)点覆盖 (8)边覆盖,1语句覆盖,开始,(A1) AND (B=0),(A=2) OR (X1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,使程序中每个语句至少执行一次,只需设计一个测试用例: 输入数据:A=2,B=0,X=4 即达到了语句覆盖;语句覆盖是最弱的逻辑覆盖,2判定覆盖,开始,(A1) AND (B=0),(A=2) OR (X1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,
14、c,e,使每个判定的真假分支都至少执行一次,例:可设计两组测试用例: A=3,B=0 ,X=3 可覆盖c、d分支 A=2,B=1 ,X=1 可覆盖b、e分支 两组测试用例可覆盖所有判定的真假分支判定覆盖仍是弱的逻辑覆盖,3 条件覆盖 使每个判定的每个条件的可能取值至少执行一次。,第一判定表达式: 设条件 A1 取真 记为 T1 假 T1条件 B=1 取真 记为 T2 假 T2 第二判定表达式: 设条件 A=2 取真 记为 T3 假 T3条件 X1 取真 记为 T4 假 T4,3 条件覆盖,开始,(A1) AND (B=0),(A=2) OR (X1),返回,X=X/A,X=X+1,F,F,T,
15、T,a,b,d,c,e,满足条件: T1,T1,T2,T2T3,T3T4,T4,测试用例 通过 满足的 覆盖 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分支,不满足判定覆盖的要 求. 条件覆盖不一定包含判定覆盖 判定覆盖也不一定包含条件覆盖,4 判定/条件覆盖选取足够多的测试用例,使判断中的每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次.,判定/条件覆盖,开始,(A1) AND (B=0),(A=2) OR (X
16、1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,满足条件: T1,T1,T2,T2T3,T3T4,T4,测试用例 通过 满足的 覆盖 A B X 路径 条件 分支 2 0 4 ace T1,T2,T3,T4 c,e 2 1 1 abd T1,T2,T3,T4 b,d 能同时满足判定、条件两种覆盖标准。取值。,测试用例 通过 满足的 覆盖 A B X 路径 条件 分支 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
17、,(5)条件组合覆盖 所有可能的条件取值组合至少执行一次A1, B=0A1, B0A1, B=0A1, B0A=2, X1A=2, X1A2, X1A2, X1,测试用例 通过 满足的 覆盖 A B X 路径 条件 分支 2 0 3 ace T1,T2,T3,T4 c,e 2 1 1 abe T1,T2,T3,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 a
18、bd T1,T2,T3,T4 b,d,测试用例 通过 满足的 覆盖 A B X 路径 条件 分支 2 0 4 ace T1,T2,T3,T4 c,e 2 1 1 abe T1,T2,T3,T4 b,e 1 0 2 abd T1,T2,T3,T4 b,d 1 1 1 abd T1,T2,T3,T4 b,d,6 路径覆盖 覆盖每一个可能的路径测试用例 通过 满足的 覆盖 A B X 路径 条件 分支 1 1 1 abd T1,T2,T3,T4 b,d 1 1 2 abe T1,T2,T3,T4 b,e 3 0 1 acd T1,T2,T3,T4 c,d 2 0 4 ace T1,T2,T3,T4 c,e,路径测试法借助程序控制流图设计测试 用例的白盒测试法.点覆盖边覆盖,7 点覆盖 测试路径至少经过程序控制流图 中每个节点一次 执行路径: abdghi和aceghi 满足点覆盖,S,1,2,3,4,5,6,E,a,c,b,d,f,e,g,h,i,8 边覆盖 测试路径至少经过程序控制流图 中每条边一次. 执行路径: abdfi和aceghi 满足边覆盖,S,1,2,3,4,5,6,E,a,c,b,d,f,e,g,h,i,