1.03k likes | 1.25k Views
软件工程. 北京邮电大学软件学院 韩万江 Casey_han@263.net. 需求 分析. 概要 设计. 详细 设计. 编码. 测试. 产品 提交. 维护. RoadMap. 软件工程. 第六章 软件测试. 本章目录. 一、测试概述 二、测试方法 三、测试级别 四、测试管理流程 五、测试自动化 六、测试过程 七、案例分析. 软件测试. --- 测试方法. 本节要点. 一、测试方法概述 二、静态测试方法 三、动态测试方法 四、面向对象测试. 测试方法. 静态测试 动态测试. 测试方法.
E N D
软件工程 北京邮电大学软件学院 韩万江 Casey_han@263.net chapter__6
需求 分析 概要 设计 详细 设计 编码 测试 产品 提交 维护 RoadMap chapter__6
软件工程 第六章 软件测试 chapter__6
本章目录 • 一、测试概述 • 二、测试方法 • 三、测试级别 • 四、测试管理流程 • 五、测试自动化 • 六、测试过程 • 七、案例分析 chapter__6
软件测试 ---测试方法
本节要点 • 一、测试方法概述 • 二、静态测试方法 • 三、动态测试方法 • 四、面向对象测试 chapter__6
测试方法 • 静态测试 • 动态测试 chapter__6
测试方法 实际运行程序,并通过观察程序运行的实际结果来发现错误的软件测试技术。 不实际运行程序,而是通过检查和阅读等手段来发现错误并评估代码质量的软件测试技术。也称为静态分析技术。 软件测试方法 在知道程序内部结构的情况下采用的测试技术或策略。 动态测试 静态测试 在不知道程序内部结构,只知道程序规格的情况下采用的测试技术或策略。 黑盒测试 白盒测试 白盒测试 灰盒测试 黑盒测试方法和白盒测试方法综合的策略。 chapter__6
本节要点 • 一、测试方法概述 • 二、静态测试方法 • 三、动态测试方法 • 四、面向对象测试 chapter__6
静态测试(分析) • 定义: • 不实际运行程序,而是通过检查和阅读等手段来发现错误并评估代码质量的软件测试技术。也称为静态测试技术。 • 方法: • 走查:WalkThrough • 审查:Inspection • 评审:Review Michael Fagan IBM(1976) chapter__6
静态分析-走查 • 定义: • 开发组内部进行的,主要是个人通过检查和阅读等手段来查找错误的活动。 • 经验: • 限时 • 避免跑题 • 不要现场修改 • 检查要点 • 逻辑错误 • 代码标准/规范/风格 chapter__6
静态分析-审查 • 定义: • 开发组内部进行的,分配了相关的角色,采用讲解、提问并使用Checklist方式进行的查找错误的活动。 • 经验: • 以会议的形式,制定会议目标、流程和规则,结束后要编写报告 • 参加人员 • 经验丰富的开发人员 • 和本模块相关的开发人员 • 本项目组的新人 • 由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并记录 • 不要现场修改 • 检查要点 • 设计需求 • 代码标准/规范/风格 chapter__6
静态分析-评审 • 定义: • 开发组、测试组和相关人员(QA、产品经理等)联合进行的,采用讲解、提问并使用Checklist方式进行的查找错误的活动。一般有正式的计划、流程和结果报告。 • 经验: • 以会议的形式,制定会议目标、流程和规则,结束后要编写报告。相关资料要在会议前下发并阅读。 • 参加人员 • 经验丰富的开发人员 • 和本模块相关的开发人员 • 测试组和相关人员 • 由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并记录 • 不要现场修改 • 检查要点 • 设计需求 • 代码标准/规范/风格 • 文档的完整性和一致性 chapter__6
同行(对等)评审(Peer Review) • 对等技术评审是由与工作产品开发人员具有同等背景和能力的人员对工作产品进行的一种评审, • 目的是早期和有效的消除软件工作产品中的缺陷,并可对软件工作产品和其中可预防的缺陷有更好的理解。 chapter__6
本节要点 • 一、测试方法概述 • 二、静态测试方法 • 三、动态测试方法 • 四、面向对象测试 chapter__6
动态测试 • 白盒测试 • 黑盒测试 chapter__6
白盒测试 基于代码的测试 chapter__6
白盒测试 • 基本的逻辑覆盖 • 其它的逻辑覆盖准则 chapter__6
基本逻辑覆盖测试 • 语句覆盖 • 判定覆盖 • 条件覆盖 • 判定/条件覆盖 • 条件组合覆盖 • 路径覆盖 chapter__6
语句覆盖 选择足够的测试用例,使得程序中每一条可执行语句至少被执行一次。 语句覆盖率= (至少被执行一次的语句数量)/(可以执行的语句总数) chapter__6
语句覆盖实例 1. if Condition then Do_something; End if Another_Statement; TestCase: Condition True chapter__6
判定覆盖 选择足够的测试用例,使得程序中每一个判断的每一种可能结果都至少被执行一次。判定覆盖也叫分支覆盖。 判定覆盖率= (判定结果被评价的次数)/(判定结果的总数) chapter__6
判定覆盖实例 1. if Condition then Do_something; End if Another_Statement; TestCase: 1、Condition True 2、Condition False chapter__6
判定覆盖实例 1. if Condition then Do_something; Else Do_something_Else; End if Another_Statement; TestCase: Condition True TestCase: Condition False chapter__6
判定覆盖实例 1. If A and B then • Do-Something • End if 判断: 1.A=T,B=T=> A and B=T 2.A= T,B=F => A and B=F TestCase A B A and B TestCase1 T T T TestCase2 T F F chapter__6
条件覆盖 选择足够的测试用例,使得程序中每一个判断中的每一个条件的可能结果都至少被执行一次 条件覆盖率= (条件操作数值至少被评价一次的数量)/(条件操作数值的总数) chapter__6
条件覆盖实例 1. If A and B then • Do-Something • End if TestCase A B A and B TestCase1 T F F TestCase2 F T F chapter__6
条件覆盖 例如: • if (A>1) and (B=0) then X=X/A; • if (A=2) and (X>1) then X=X+1; B=0 , B<>0 A>1,A <=1 X>1 , X <= 1 A=2,A <> 2 chapter__6
条件覆盖 Testcase A B X • 条件: • A>1 T1; • A<=1 F1 • B=0 T2; • B<>0 F2 • A=2 T3; • A <> 2 F3 • X>1 T4; • X <= 1 F4 Case1、 1 0 3 if (A>1) and (B=0) then X=X/A; if (A=2) and (X>1) then X=X+1; Case2、 2 1 1 chapter__6
判定条件覆盖 选择足够的测试用例,使得同时满足判定覆盖和条件覆盖。 判定条件覆盖率= (条件操作数值或者判定结果至少被评价一次的数量)/(条件操作数值总数+判定结果的总数) chapter__6
判定条件覆盖-实例 1. If A and B then • Do-Something • End if 判断: 1. A and B=T 2. A and B=F 条件: 1.A=T 2. A=F 3.B=T 4. B=F TestCaseABA and B TestCase1 T T T TestCase2 F F F chapter__6
判断 (A>1) and (B=0) A>1,B=0 =>True A>1,B<>0 =>False A<=1,B=0 =>False A<=1,B<>0 =>False (A=2) and (X>1) A=2,X>1 =>True A=2,X<=1 =>False A<>2,X>1 =>False A<>2,X <= 1 =>False 条件: A>1 T1; A<=1 F1 B=0 T2; B<>0 F2 A=2 T3; A <> 2 F3 X>1 T4; X <= 1 F4 判断条件覆盖-实例 if (A>1) and (B=0) then X=X/A; if (A=2) and (X>1) then X=X+1; A、B、X 2、0、3 1、1、1 chapter__6
判断 (A>1) and (B=0) A>1,B=0 =>True A>1,B<>0 =>False A<=1,B=0 =>False A<=1,B<>0 =>False (A=2) and (X>1) A=2,X>1 =>True A=2,X<=1 =>False A<>2,X>1 =>False A<>2,X <= 1 =>False 条件: A>1 T1; A<=1 F1 B=0 T2; B<>0 F2 A=2 T3; A <> 2 F3 X>1 T4; X <= 1 F4 判断条件覆盖-案例冗余 if (A>1) and (B=0) then X=X/A; if (A=2) and (X>1) then X=X+1; A、B、X 2、0、3 1、1、1 1、0、3 2、1、1 chapter__6
条件组合覆盖 选择足够的测试用例,使得程序中每一个分支判断中的每一个条件的每一种可能组合结果都至少被执行一次。 条件组合覆盖率= (被评价的分支条件组合数量)/(分支条件组合总数) chapter__6
条件组合覆盖 1. If A and B then • Do-Something • End if TestCase ABA and B TestCase1 T T T TestCase2 F F F TestCase3 T F F TestCase4 F T F chapter__6
条件组合 A>1,B=0 A>1,B<>0 A<=1,B=0 A<=1,B<>0 A=2,X>1 A=2,X<=1 A<>2,X>1 A<>2,X <= 1 条件: (A>1) and (B=0) A>1 A<=1 B=0 B<>0 (A=2) and (X>1) A=2 A <> 2 X>1 X <= 1 条件组合覆盖 if (A>1) and (B=0) then X=X/A; if (A=2) and (X>1) then X=X+1; A、B、X 1、0、3 2、1、1 2、0、3 1、1、1 chapter__6
路径覆盖 选择足够的测试用例,使得程序中所有的可能路径都至少被执行一次。 路径覆盖率= (至少被执行一次的路径数)/(总的路径数) chapter__6
a False True (A>1)and (B=0) c b X=X/A False True (A=2)or (X>1) e d X=X+1 路径覆盖 if (A>1) and (B=0) then X=X/A; if (A=2) or (X>1) then X=X+1; Testcase A B X 覆盖路径 Case 1 1 0 3 abe Case 2 2 1 1 abe Case 3 2 0 3 ace Case 4 1 1 1 abd Testcase A B X 覆盖路径 Case 5 6 0 1 acd chapter__6
三角形程序实现的数据流图 chapter__6
三角形程序的伪代码 • Program Triangle2 • Dim a,b,c as integer • Dim IsATriangle As Boolean Step 1 :Get Input • Output(“Enter 3 integers which are sides of triangle”) • Input(a,b,c) • Output(“Side A is ” ,a) • Output(“Side B is ” , b) • Output(“Side C is ” , c) Step 2:Is a Triangle? • If(a<b+c) and (b<a+c) and (C<a+b) • Then IsATriangle=True • Else IsATriangle=false • Endif chapter__6
三角形程序的伪代码 Step 3 :Determine Triangle Type • If IsATriangle • Then if (a=b)AND(b=c) • Then Output(“Equilateral”) • Else if (a<>b) AND(a<>c) AND(b<>c) • Then Output(“Scalene”) • Else Output(“Isosceles”) • Endif • Endif • Else Output(“Not a Triangle”) • Endif • End triangle2 chapter__6
三角形程序图 chapter__6
DD-路径(Decision-to-Decision Paths) • 判断(决策)到判断(决策)的路径 • 判断(决策):一个序列语句 • 开始位置是一个判断(决策)的开始,结束位置是下一个判断(决策)语句的开始。 • 序列语句没有分支 chapter__6
三角形的DD-路径 chapter__6
DD-路径覆盖 DD路径覆盖率= (至少被执行一次的决策路径数)/(系统中总的决策路径数) • E.F.Miller发现: • DD-路径覆盖可以发现全部缺陷的85% chapter__6
A B D E C F G McCabe的基路径方法 线性独立路径数:V(G)=e-n+2 • e :边数 • n :节点数 V(G)=10-7+2=5 chapter__6
保险金程序-需求 保险金=基本保险费率×年龄系数-安全驾驶折扣 • 保险金程序伪代码 chapter__6
保险金程序图 chapter__6
保险金程序路径? V(G)=11 chapter__6
路径覆盖 • 覆盖路径P1的案例 • 年龄:17,点数:1 • 覆盖路径P2的案例 • 年龄:16,点数:0 • 。。。。。。。 chapter__6