单元测试 张亶 2011/11/21 回顾 单元测试的位置 单元测试的目标:设计测试用例 黑盒单元测试&白盒单元测试 三个例子 . 三角形问题 . NextDate . 佣金问题 课程内容 黑盒测试 白盒测试 实际应用 1 2 3 3 黑盒测试 黑盒测试的常用方法 . 等价类划分 . 边界值分析 . 决策表 . 两个基本决定因素 . 健壮性:有没有非法输入 . 单/多缺陷:输入变量之间有没有相互影响 . 导致四个分类: . 健壮单缺陷测试 . 不健壮单缺陷测试 . 健壮多缺陷测试 . 不健壮多缺陷测试 输入用户名和密码的测试 . 仅测试长度是否合法 . 测试用户名和密码是否能够通过 黑盒测试 问题的提出 . 一般性题目: . 测试 F(X1,X2)的正确性 . 例如F完成加法add . a≤ X1≤ b c≤ X2≤ d . 关注输入空间的边界 a b c d x 2 x 1 Input Domain of F(x 1 , x 2 ) 基本原理 . 错误出现在输入变量的极限值附近 . 例子1: ≤ 代替了< . 例子2: 文档输出的页边界 . 例子3: 中苏之间的间谍出现在哪里? 基本实现 . 对一个变量测试输入 . 最小值(min) . 略高于最小值(min+) . 正常值(nom) . 略低于最大值(max-) . 最大值(max) Input Boundary Value Testing a b test cases for a variable x, where a < x< b Experience shows that errors occur more frequently for extreme values of a variable. x x(min) x(min+) x(nom) x(max -) x(max) Input Boundary Value Testing (2 Variables) test cases for a variables x and y, where a < x < b and c < y < d As in reliability theory, two variables rarely both assume their extreme values. a b c d x 2 x 1 案例 . 此处板书 . long c = int a+ int b; 归纳边界分析 . 变量: 基于单缺陷假设,对于一个n变量的函 数,边界值分析会产生4n+1(??)个测 试用例 . 仅仅依赖与输入变量 . 另外考虑: bool变量? 健壮性测试 . 增加两个用例: . Min-, Max+ min,min+,nom,max-,max . 在测试用例中有意义的部分不是输入,而 是预期的输出 .C语言变量转换 . 32日,13月,-1月等等 Robustness Testing a b test cases for a variable x, where a < x < b x 1. stress input boundaries 2. acceptable response for invalid inputs? 3. leads to exploratory testing (test hackers) 4. can discover hidden functionality a b c d x 2 x 1 Robustness Testing (2 Variables) 案例(续) . 此处板书 . long c = int a+ int b; 归纳边界分析 . 变量: 基于单缺陷假设,对于一个n变量的函 数,边界值分析会产生6n+1(??)个测 试用例 . 仅仅依赖与输入变量 边界分析的局限性 . 变量不独立的情况 . 例子:nexedate函数中年月日之间存在联系 . 三角形问题的三条边存在制约 最坏情况(多缺陷)测试 . 最坏情况测试:拒绝单缺陷假设 . 用笛卡儿积作测试用例 . 个数从4n+1到5n . 健壮性测试从6n+1到7n 笛卡儿积 . 无序对偶 . 有序对偶 ),( ba >,< ba } ∈ ∧ ∈ , > , < { = × B y A x y x B A Worst Case Testing (2 Variables) Eliminate the "single fault" assumption. Murphy's Law a b c d x 2 x 1 Robust Worst Case Testing (2 Variables) a b c d x 2 x 1 边界值测试 单缺陷 最坏情况 不健壮 4n+1 5n 健壮 6n+1 7n 练习 . 在NextDate问题中,限定年份为为1800~ 2200年,需要多少个测试用例? . 如果把限制设在1900~1903年,还需要多 少个测试用例? 黑盒测试 基本概念的引入 . 等价类功能测试的动机: . 完备 . 不冗余 . 边界测试不满足以上的要求 . 等价类测试的前提是等价类的分割 Equivalence Class Testing Domain Range F Equivalence class testing uses information about the functional mapping itself to identify test cases Equivalence Partitioning Domain Range F Define relation R as follows: for x, y in domain, xRy iff F(x ) = F(y). Facts: 1. R is an equivalence relation. 2. An equivalence relation induces a partition on a set. 3. Works best when F is many-to-one 4. (pre-image set) Domain Range Test cases are formed by selecting one value from each equivalence class. - reduces redundancy - identifying the classes may be hard 等价类测试的分类 . 体现不同的测试策略 弱一般等价类测试 弱健壮等价类测试 强一般等价类测试 强健壮等价类测试 测试策略分类 单缺陷 多缺陷 不健壮 弱一般等价类测试 强一般等价类测试 健壮 弱健壮等价类测试 强健壮等价类测试 等价类测试的步骤 . 等价类测试的前提是等价类的分割 . 选择测试策略 . 取决与实际情况 . 取决于开发的目的 . 取决与商业需求 . 当等价类的分割和测试策略确定后,就可以 直接得到等价类测试用例 Equivalence Classes: Valid(x 1 ) : a < x 1 < b; Invalid(x 1 ) : x 1 < a , x 1 > b Valid(x 2 ) : c < x 2 < d; Invalid(x 2 ) : x 2 < c , x 2 > d a b c d x 2 x 1 Traditional Equivalence Class Test Cases Equivalence Classes: x 1 : a < x 1 < b, b < x 1 < c, c < x 1 < d x 2 : e < x 2 < f, f < x 2 < g a b c d x 2 x 1 Weak Equivalence Class Test Cases e f g Equivalence Classes: x 1 : a < x 1 < b, b < x 1 < c, c < x 1 < d x 2 : e < x 2 < f, f < x 2 < g a b c d x 2 x 1 Strong Equivalence Class Test Cases e f g Equivalence Classes: x 1 : a < x 1 < b, b < x 1 Š c, c < x 1 < d x 2 : e < x 2 < f, f < x 2 < g a b c d x 2 x 1 Robust Weak Equivalence Class Test Cases e f g Equivalence Classes: x 1 : a < x 1 < b, b < x 1 < c, c < x 1 < d x 2 : e < x 2 < f, f < x 2 < g a b c d x 2 x 1 Robust Strong Equivalence Class Test Cases e f g 案例:三角形问题 . 等价类的划分: R1={:等边三角形} R2={:等腰(非等边)三角形} R3={:不等边三角形} R4={: a,b,c不构成三角形} . 输入三元组意味着不再通过笛卡儿积 获得测试用例 测试用例数目 弱一般等价类测试 4个 (3 ,3,3) 等边 (3,4,4)等腰 (3,4,5) 不等边 (3,4,7)不是三角形 弱健壮等价类测试 4+2 个 (0,0,0) (201,201,201) 强一般等价类测试 4个 强健壮等价类测试 30个 . 33-1=26个不合法输入 . 26+4个=30个测试用例 不同的等价类划分 . 工艺性特征 D1={:等边三角形} D2={:a=b,a≠c} D3={: a=c,a≠b} D4={: b=c,a≠b} D5={: a≠c,a≠b, b≠c} D6={:a+b≤c} D7={: a+c≤b} D8={: b+c≤a} 不同的等价类划分 D6={:a+b≤c} . D6的再划分 D6„={:a+b:a+b=c} . 其它的划分方法… 案例2:NextDate问题 . 划分方案一: M1={m:1≤m≤12} D1={d:1≤d≤31} Y1={y:1812≤m≤2012} . 仅仅有一个合法的等价类 测试用例数目计算 单缺陷 多缺陷 不健壮 1个 1个 健壮 1个+2个 1个+26个 NEXTDATE Equivalence Classes(2) Month: M1 = { month : month has 30 days} M2 = { month : month has 31 days} M3 = { month : month is February} Day: D1 = {day : 1 ≤ day ≤ 28} D2 = {day : day = 29 } D3 = {day : day = 30 } D4 = {day : day = 31 } Year: Y1 = {year : year = 1900} Y2 = {year : 1812 ≤ year ≤ 2012 AND year is a leap year and year ≠ 1900 } Y3 = {year : (1812 ≤ year ≤ 2012 AND year not leap} and year ≠ 1900 } 思考 . Y1中的是1900还是2000?还是不分? . 工艺特征:测试者认为 . 有人犯这样的错误 • 1900年是闰年 . 有人犯这样的错误 • 2000年不是闰年 . 没有人犯以上的错误 测试用例数目计算 单缺陷 多缺陷 不健壮 4个=max{3,3,4} 36个=3*3*4 健壮 6个 150个=(3+2) ×(3+2) ×(4+2) Weak Equivalence Class Test Cases Select test cases so that one element from each input domain equivalence class is used as a test input value. April 1 1900 Jan. 29 1812 Feb. 30 1813 April 31 1900 EC-1 EC-2 EC-3 EC-4 Test Case Input Domain Equiv. Classes Input Values Expected Outputs M1, D1, Y1 M2, D2, Y2 M3, D3, Y3 M1, D4, Y1 April 2 1900 Jan. 30 1812 impossible impossible Notice that Weak Equivlaence testing presumes that the variables in the input domain are independent; logical dependencies are unrecognized. 思考 . 你觉得1月和12月有区别吗? . 你觉得27日和28日有区别吗? . 怎样从”体制”上保证这样的情况不遗漏? Revised Nextdate Domain Equivalence Classes Month: M1 = { month : month has 30 days} M2 = { month : month has 31 days except Dec.} M3 = { month : month is February} M4 = { month : month is December} Day: D1 = {day : 1 ≤ day ≤ 27} D2 = {day : day = 28 } D3 = {day : day = 29 } D4 = {day : day = 30 } D5 = {day : day = 31 } Year: Y1 = {year : year is a leap year} Y2 = {year : year is not a leap year} The cross product of these contains 40 elements. 练习:测试用例数目 单缺陷 多缺陷 不健壮 ? ? 健壮 ? ? 练习:佣金问题 . 如何划分等价类 . 基于输入的划分 . 基于输出的划分 指导方针和观察 . 弱(一般或健壮)不如强全面 . 强制类型的编程语言可以较少测试 . 如果错误条件非常重要,则健壮形式的测 试是合适的 . 如果输入数据是离散值区间和集合定义, 则等价类测试是合适的。 . 结合边界值测试 黑盒测试 黑盒测试 案例背景 . 有一个处理单价为5角钱的饮料的自动售货机 软件测试用例的设计。其规格说明如下: . 若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖 啤酒〗的按钮,则相应的饮料就送出来 . 若售货机没有零钱找,则一个显示〖零钱找完〗 的红灯亮,这时在投入1元硬币并押下按钮后,饮 料不送出来而且1元硬币也退出来; . 若有零钱找,则显示〖零钱找完〗的红灯灭,在 送出饮料的同时退还5角硬币。” (1) 分析这一段说明,列出原因和结果 原因: 1. 售货机有零钱找 2. 投入1元硬币 3. 投入5角硬币 4. 押下橙汁按钮 5. 押下啤酒按钮 建立中间结点,表示处理中间状态 11. 投入1元硬币且押下饮料按钮 12. 押下〖橙汁〗或〖啤酒〗的按钮 13. 应当找5角零钱并且售货机有零钱找 14. 钱已付清 结果: 21. 售货机〖零钱找完〗灯亮 22. 退还1元硬币 23. 退还5角硬币 24. 送出橙汁饮料 25. 送出啤酒饮料 (2) 画出因果图。所有原因结点列在左 边,所有结果结点列在右边。 (3) 由于 2 与 3 ,4 与 5 不能同时发 生,分别加上约束条件E。 (4) 因果图 (5) 转换成判定表 . 问题分析 . 遗漏的情况 . 不是5角和一元的硬币 . 啤酒和饮料卖完了 黑盒测试综述 . 测试程序 = 数学函数 . 输入变量的边界分析 → 边界值分析 . 相似处理 → 等价类测试 . 变量的逻辑依赖关系 → 决策表 . 如何选择合适的功能性测试方法(策略) 测试工作量 测试工作量 = 设计测试用例的工作量 + 使用测试用例进行测试的工作量 测试工作量 . 边界值测试不考虑变量的逻辑关系,最机 械的 . 等价类测试需要考虑如何划分等价类,然 后也是机械的 . 决策表需要不只一次尝试。 测试工作量(续) . 精细的设计产生小量的测试用例 . 测试设计 vs 执行测试 . 容易使用的方法产生大量测用例 . 测试用例数量的比较 . 测试用例的数量不能衡量测试质量 . 基于定义域的测试方法,个数相同没有 反映问题的特殊性 . 强等价类和决策表方法之间差别的本质 Number of Test Cases domain based decision table low high Sophistication equivalence class 测试效率 . 功能测试的局限 .(1)不完备 .(2)冗余 . 功能测试有漏洞,精细的手段可以缩小漏洞 . 没有漏洞,不冗余的测试用例(存在吗? ) 可以用于量化测试效率 . 冗余识别易,不出漏洞难 Effort to Identify Test Cases domain based decision table low high Sophistication equivalence class 测试的有效性 . 测试的一般步骤 . 指定方法和策略 . 决定测试用例 . 运行测试用例 . 找不到最有效的测试方法 . 用指导性原则决定有效的测试方法 . 专家系统 . 用结构性测试回答这类问题比较容易。 测试的有效性 . 看“解决特定类型的缺陷”的能力 . 测试小概率的缺陷没有意义 c1. variables are | physical | logical | c2. independent variables? | Y | N | Y | N | c3. fault assumption is | S M | - | S N | - | c4. exception handling? | Y | N | Y | N | - | Y | N | Y | N | - | ____________________________________________________________________ a1. boundary value analysis| | X | | | | | | | | | a2. robustness testing | X | | | | | | | | | | a3. worst case testing | | | | X | | | | | | | a4. robust worst case | | | X | | | | | | | | a5. trad. equiv. class | X | | X | | | X | | X | | | a6. weak equiv. class | X | X | | | | X | X | | | | a7. strong equiv. class | | | X | X | X | | | X | X | X | a8. decision table | | | | | X | | | | | X | "Expert System" to Choose Functional Testing Method 例子:综合了三种方法 . 需求 . 保险金=基本保险费率×年龄系数-安全驾驶折扣 . 基本保险费率=500$/半年 . 如果扣分在要求的范围内 Age AgeCo. ThrsholdCo. discount 16~25 2.8 1 50 26~35 1.8 3 50 36~45 1.0 5 100 46~60 0.8 7 150 61~100 1.5 5 200 分析 . 输入 . 年龄 . 扣的分数 . 输出 . 保险金 . 保险金= 500$ ×年龄系数-安全驾驶折扣 边界值测试 . 最坏情况边界值测试 . 5×5=25 测试用例 . 分析:变量有关系吗? . 改进分类方案 . 年龄16~25,26~35,36~45,46~60,61~100分别 用作边界 . 扣的分数分别用1~2,3~4,5~6,7~12 . 导致25个年龄,13个点 5×5=25 测试用例 min Min+ nor Max- max age 16 17 54 99 100 threshold 0 1 6 11 12 25×13测试用例 min Min+ nor Max- max age 16 17 20 24 25 age 26 27 30 34 age … threshold 0 1 threshold 2 3 threshold 4 5 threshold … 等价类测试 . A1={y: 16≤y ≤ 25} . A2={y: 26≤y ≤ 35} . A3={y: 36≤y ≤ 45} . A4={y: 46≤y ≤ 60} . A5={y: 61≤y ≤ 100} . P1 ={p:p=0,1} . P2 ={p:p=2,3} . P3 ={p:p=4,5} . P4 ={p:p=6,7} . P5 ={p:p=8,9,10,11,12} 决策表测试 . 决策表 . 决策表的测试用例 年龄 16~25 16~25 25~35 25~35 … 点数 0 1~12 0~2 3~12 … 年龄系数 2.8 2.8 1.8 1.8 … 折扣 50 - 50 - … 课程内容 黑盒测试 白盒测试 实际应用 1 2 3 3 白盒测试概述 . 结构化测试,是功能测试的补充 . 基于程序或设计( Implementation ) . 有数学工具支持 . 图论 . 片理论 . 一个重要的指标——覆盖指标 . 通常只在单元测试中使用 . 设计测试用例不是显而易见的事情 . 商用软件中提供测试覆盖指标等的支持 Structural Testing • Complement of/to Functional Testing • Based on Implementation • Powerful mathematical formulation • program graph • define-use path • slice • Basis for Coverage Metrics • Usually done at the unit level • Not very helpful to identify test cases • Commercial tool support 白盒测试分类 . 路径测试 . 数据流测试 白盒测试 预备知识1:语句和语句片断 语句 if … then …else 语句片断 if… then… else… 预备知识2:图论 图:节点,边 有向图 入点度(indegree) 出点度(outdegree) 路径 Program Graphs Given a program written in an imperative programming language, its program graph is a directed graph in which: (Traditional Definition) nodes are program statements, and edges represent flow of control (there is an edge from node i to node j iff the statement corresponding to node j can be executed immediately after the statement corresponding to node i). (Improved Definition) nodes are either entire statements or fragments of a statement, and edges represent flow of control (there is an edge from node i to node j iff the statement (fragment) corresponding to node j can be executed immediately after the statement or statement fragment corresponding to node i). 1. Get Input 2. Is_A_ Triangle 3. Triangle Type 4. Output Controller Keyboard Screen Triangle Program Triangle Sides Prompts & Triangle Types Triangle Program Specification triangle sides prompts triangle type a, b, c a, b, c True False type code Data Dictionary Triangle Sides : a + b + c a, b, c are non-negative integers type code : equilateral | isosceles | scalene | not a triangle prompts : 'Enter three integers which are sides of a triangle' triangle type : 'Equilateral' | 'Isosceles' | 'Scalene' | 'Not a Triangle' Program triangle2 'Structured programming version Dim a,b,c AsInteger Dim IsATriangle As Boolean 'Step 1: Get Input 1. Output("Enter 3 integers which are sides of a triangle") 2. Input(a,b,c) 3. Output("Side A is ",a) 4. Output("Side B is ",b) 5. Output("Side C is ",c) 'Step 2: Is A Triangle? 6. If (a < b + c) AND (b < a + c) AND (c < a + b) 7. Then IsATriangle = True 8. Else IsATriangle = False 9. EndIf 'Step 3: Determine Triangle Type 10. If IsATriangle 11. Then If (a = b) and (b = c) 12. Then Output ("Equilateral") 13. Else If (a != b) AND (a != c) AND (b != c) 14. Then Output ("Scalene") 15. Else Output ("Isosceles") 16. EndIf 17. EndIf 18. Else Output("Not a Triangle") 19. EndIf 20. End triangle2 Triangle Program Pseudo-Code 11 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 Pseudo-Code Program Graph A B C D E F G first last Trillions of Paths If the loop executes up to 18 times, there are 4.77 Trillion paths. Stephen R. Schach, Software Engineering , (2nd edition) Richard D. Irwin, Inc. and Aksen Associates, Inc. 1993 路径测试 Path Testing • Paths derived from some graph construct • When a test case executes, it traverses a path • Huge number of paths implies some simplification needed • Big Problem: infeasible paths • Big Question: what kinds of faults are "associated" with what kinds of paths? • By itself, path testing can lead to a false sense of security 内容 . 概述 . DD-路径 . 测试覆盖指标 . 路径测试策略 . 路径测试案例 路径测试步骤 . 得到结构 . 程序 ↔ 程序图 ↔ DD路径图 . 选择覆盖指标 . 路径覆盖(C∞) → CMCC →C1P ( C1) →C0 . 选择路径满足覆盖指标 . 设计测试用例 “traverse”相应的路径 路径测试步骤 . 得到结构 . 程序 ↔ 程序图 ↔ DD路径图 . 选择覆盖指标 . 路径覆盖(C∞) → CMCC →C1P ( C1) →C0 . 选择路径满足覆盖指标 . 设计测试用例 “traverse”相应的路径 DD-路径 . DD = 决策到决策路径 . 是语句的一个序列 . 定义: DD 路径是一条链,满足 . 一个起始和终止点不同的路径 . 每个节点都满足 outdeg=indeg=1 . 初始节点和其它节点2-连接 . 退化情况1个节点,0条边 A DD-Path (decision-to-decision) is a chain in a program graph such that Case 1: it consists of a single node with indeg = 0, Case 2: it consists of a single node with outdeg = 0, Case 3: it consists of a single node with indeg ≥ 2 or outdeg ≥ 2, Case 4: it consists of a single node with indeg = 1 and outdeg = 1, Case 5: it is a maximal chain of length ≥ 1. Definition of DD-Paths Initial Node Terminal Node Interior Nodes a 2-connected chain DD路径图 . 如果程序逻辑密集,计算稀疏,那么 这种组合会产生很多短的DD路径 . 定义: DD路径图 . 是一种压缩图(2-连接压缩) . 有生成DD路径的工具 Given a program written in an imperative language, its DD-Path graph is the directed graph in which nodes are DD-Paths of its program graph, and edges represent control flow between successor DD-Paths. • a form of condensation graph • 2-connected components are collapsed into individual node • single node DD-Paths (corresponding to Cases 1 - 4 ) preserve the convention that a statement fragment is in exactly one DD-Path DD-Path Graph 路径测试步骤 . 得到结构 . 程序 ↔ 程序图 ↔ DD路径图 . 选择覆盖指标 . 路径覆盖(C∞) → CMCC →C1P ( C1) →C0 . 选择路径满足覆盖指标 . 设计测试用例 “traverse”相应的路径 路径测试步骤 . 得到结构 . 程序 ↔ 程序图 ↔ DD路径图 . 选择覆盖指标 . 路径覆盖(C∞) → CMCC →C1P ( C1) →C0 . 选择路径满足覆盖指标 . 设计测试用例 “traverse”相应的路径 测试覆盖指标 . 定义:(测试覆盖指标)是度量一组测试 用例覆盖某个程序的工具 . E.F.Miller发现,DD路径覆盖可以发现 缺陷的85% Metric Description of Coverage C 0 Every statement C 1 Every Path (predicate outcome) C 1p Every predicate to each outcome C 2 C 1 coverage + loop coverage Cd C 1 coverage + Every dependent pair of DD-Paths C MCC Multiple condition coverage C ik Every program path that contains up to k repetitions of a loop (usually k = 2) C stat "Statistically significant" fraction of paths C ∞ All possible execution paths Structural Test Coverage Metrics 案例 1. Every node 2. Every edge 3. Successive pairs of edges 4. Every path Exercise: How do these compare with structural test coverage metrics? Graph-Based Coverage Metrics 课堂练习:三角形问题的测试 用例 . ABCEFGO * . ABDEFGO (1,2,3) . ABCEFHINO (3,3,3) . ABDEFHINO * . ABCEFHJKMNO (2,3,4) . ABDEFHJKMNO * . ABCEFHJLMNO . ABDEFHJLMNO * 数据流测试 准备工作 . 程序P . 程序图G(P) . 变量集合V . 所有的路径集合PATHS(P) . 启发:来源于调试程序 . 我们一起做 佣金.doc 定义:定义节点&使用节点 . n∈G(P),v∈V 得到 定义节点 DEF(v,n) v在节点n处 定义 输入、赋值、循环控制 和过程调用 值会改变 使用节点 USE (v,n) v在节点n处 使用 输出、赋值、循环控制 、条件控制和过程调用 值不会会改变 定义-使用路径&定义清除路径 . 变量v的定义-使用路径 du-path . du-path ∈PATHS(P) . 对于v∈V,存在DEF(v,m),USE(v,n),使m和n 是该路径的最初和最终节点 . 变量v的定义清除路径dc-path . dc-path ∈PATHS(P) . 具有最初节点DEF(v,m)和最终节点USE(v,n) . 路径中没有其它节点是v的定义节点 找到定义清除路径的步骤 . 定义节点/使用节点 . 定义/使用路径 . 是否可以执行 . 是否是定义清除 定义节点/使用节点 变量 定义节点 使用节点 lockprice 7 24 … totallocks 10 16 16 21 24 … locks 13 19 14 16 … sales 27 28 29 33 34 37 38 commission 31 32 33 36 37 38 32 33 37 41 定义/使用路径 变量 路径 是定义清除路径? lockprice 7,24 y totalstocks 11,17 y totalstocks 11,22 n totalstocks 11,25 n 测试覆盖指标 .T是拥有变量集合V的程序P的程序图 G(p)中的一个路径集合。 . 单纯的路径需要考虑是否可行的问题 . 全定义准则,对于v∈V ,T包含从v的 每个定义节点到v的一个使用节点的定 义清除路径。 . 全使用准则,对于v∈V ,T包含从v的 每个定义节点到v的所有使用节点 USE(v,n)的定义清除路径。 数据流测试步骤 . 得到结构 . 定义清除路径 . 选择覆盖指标 . 全定义准则&全使用准则&其他准则 . 选择路径满足覆盖指标 . 设计测试用例 “traverse”相应的路径 1. Every node 2. Every edge 3. Successive pairs of edges 4. Every path Exercise: How do these compare with structural test coverage metrics? Graph-Based Coverage Metrics 课堂练习:佣金问题的测 试用例 习题1 . 用单元黑盒测试方法测试 .(1) 计算前一天 PreviousDate (y,m,d) .(2) 计算7天后 NextWeekDate(y,m,d) .(3) 计算N天后 NextNdaysDate(y,m,d,n) 习题2 . 画出佣金.doc所描述程序的 . 程序图 . DD路径图 . 写出边覆盖的测试用例
还剩121页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

haoyehaoa

贡献于2012-06-12

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf