《软件测试基础》授课教案 授课内容:第四章 白盒测试技术 授课课次:第9次课 授课时数:2学时 授课日期: 上课教室: 目的与要求:
掌握白盒测试中基本路经测试的概念和方法; 了解程序插桩的概念和方法。 教学重点: 基本路经测试 教学难点: 程序插桩 教学方式: 1. 运用《白盒测试技术》课件进行课堂讲授,让学生理解基本路径测试的概念,掌握基本路径测试方法; 2. 进行课堂练习,加深对基本路径测试的理解和使用。 教学内容: 1.程序结构分析 2.DD路径测试 3.基本路径测试 4.程序插桩 内容提要及时间分配: 1、课前引导(8分钟)
回顾6种覆盖法的基本思想。 白盒测试中有哪些常用方法? 2、本课内容(75分钟)
程序结构分析 DD路径测试 基本路径测试 程序插桩 3、课后小结(5分钟)
4、布置作业(2分钟) 教学参考书: 1. 软件测试方法和技术 朱少民 清华大学出版社 2. 软件测试 Paul C.Jorgensen 机械工业出版社 讨论与思考:
把第2章的NextDate问题的伪代码转换成为控制流图,并简化。 作 业:
1.请把下面的程序流程图转化成控制流图。
1236
784
591011
2.重新编写程序片断14~20,用嵌套if-then-else语句替代复合条件。 14. if(a=b)AND (b=c) 15. Then Output(“Equilateral”) 16. Else If(a<>b)AND(a<>c)AND(b<>c) 17. Then Output(“Scalence”) 18. Else Output(“Isosecles”) 19. EndIf 20. EndIf 比较你改写后的程序和上面程序片断的圈复杂度。 复问题目:
序号 题 目 学 生 成 绩 1 2 3 教 学 内 容 与 方 法 步 骤 4.2.3程序结构分析
引言:程序的结构形式是白盒测试的主要依据。这一部分将从控制流分析和数据流分析的不
同方面讨论如何分析程序结构。我们的目的是要在程序中找到隐藏的错误。 1. 控制流分析 由于非结构化程序会给测试带来许多不必要的困难,所以业界要求写出的程序具有良好的结构。上个世纪70年代以来,结构化程序的概念逐渐被人们普遍接受。体现这一要求对某些语言并不困难,比如Pascal、C,因为它们都具有反映基本控制结构的相应得控制语句。但对于有些开发语言要做到这一点,程序人员就要很注意程序结构化的要求,比如说汇编语言,若使用汇编语言编写程序,开发人员就尤其要注意程序的结构化要求。 正是由于这个原因,系统地检查程序的控制结构变得十分有意义了。 a) 控制流图 程序流程图又称框图,是我们最熟悉,也是最容易理解的一种程序控制结构的图形表示了。在这种图上的框里面常常标明了处理要求或者条件,但是,这些标注在做路径分析时是不重要的。为了了更加突出控制流的结构,需要对程序流程图做一些简化。在图4-2种我们给出了简化的例子。其中(a)图示一个含有两个出口判断和循环的程序流程图,我们把它简化成(b)的形式,称这种简化了的程序流程图叫做控制流图。 在控制流图中只有两种图形符号,它们是: 节点:以标有编号的圆圈表示。它代表了程序流程图中矩形框表示的处理、菱形表示的两个到多个出口判断以及两条到多条流线相交的汇合点。 控制流线或弧:以箭头表示。它与程序流程图中的流线是一致的,表明了控制的顺序。为了方便讨论,控制流线通常标有名字,如图中所标的a、b、c等。 为了使控制流图在机器上表示,我们可以把它表示成矩阵的形式,称为控制流图矩阵。图4-3表示了图4-2的控制流图矩阵,这个矩阵有5行5列,是由该控制图中5个节点决定的。矩阵中6个元素a、b、c、d、e和f的位置决定了它们所连接节点的号码。例如,弧d在矩阵中处于第3行第4列,那是因为它在控制流图中连接了节点3至节点4。这里必须注意方向,图中节点4到节点3没有弧,所以矩阵中第4行第3列也就没有元素。 12345
1354
2abe
c
df
acb
fde
(a) (b) 图4-2程序流程图和控制流图 图4-3 控制流图矩阵 除了用程序流程图可以转化成控制流图以外,还可以把伪代码表示的处理过程转化成控制流图。根据程序建构控制流图很容易,如图4-4所示,我们把三角形伪代码实现过程转化成了控制流图。对于不可执行语句我们不把它映射成节点,比如变量和类型说明语句。 1. Program triangle2 ‘version of simple 2. Dim a,b,c As Integer 3. Dim IsATriangle As Boolean 4. Output(“Enter 3 integers which are sides of a triangle”) 5. Input(a,b,c) 6. Output(“Side A is ”,a) 7. Output(“Side B is ”,b) 8. Output(“Side C is ”,c) 9. If (a10. Then IsATriangle =True 11. Else IsATriangle =False 12. EndIf 13. If IsATrangle 14. Then if(a=b)AND (b=c) 15. Then Output(“Equilateral”) 16. Else If(a<>b)AND(a<>c)AND(b<>c) 17. Then Output(“Scalence”)
4567891011
12131415161718192021
222318. Else Output(“Isosecles”) 19. EndIf 20. EndIf 21.Else Output(“NOT a Triangle”) 22.EndIf 23.End triangle2 图4-4 三角形伪代码映射成的控制流图 我们有的时候为了方便会把一条伪代码语句做为一个节点,但有的时候,我们可以把几个节点合并成一个,合并的原则是:若在一个节点序列中没有分支,则我们可以把这个序列的节点都合并成一个节点。比如图4-4我们可以合并成如图4-5的形式。对于不可执行语句我们不把它映射成节点,比如变量和类型说明语句。 当过程设计中包含复合条件时,生成控制流图的方法要复杂一些。在这种情况下,我们要把复合条件拆开成一个个简单条件,让每一个简单条件对应流图中一个节点。这样的节点我们把它叫判定节点,它会引出两条或者多条边。如图4-6所示。
ab yx
判定节点„„If a OR b Then call x Else call yEndIf„„
图4-5 简化后的三角形控制流图 图4-6 包含复合条件的伪代码转化成控制流图
491011
12131415161718192021
2223b) 程序结构的基本要求 我们对于程序结构提出以下4点基本要求,这些要求是,写出的程序不应该包含: 转向并不存在的标号; 没有用过的语句标号; 从程序入口进入后无法达到的语句; 不能达到停机语句的语句。 显然,这些要求是合理的。目前,对这些情况的检测主要通过编译器和程序分析工具来实现。 2. 数据流分析 在单元测试中,数据仅仅在一个模块或者一个函数种流通。但是,数据流的通路往往涉及多个集成模块,甚至于整个软件,所以我们有必要进行数据流的测试,尽管它非常耗时。 数据流分析最初是随着编译系统要生成有效的目标代码而出现的,这类方法主要用于优化代码。数据流测试是指一个基于通过程序的控制流,从建立的数据目标状态的序列中发现异常的结构测试方法。数据流测试用作路径测试的“真实性检查”。 早期的数据流分析常常集中于现在叫做定义/引用异常的缺陷: 变量杯定义,但是从来没有使用。 所使用的变量没有被定义。 变量在使用之前被定义了两次。 因为程序内的语句因变量的定义和使用而彼此相关,所以用数据流测试方法更能有效地发现软件缺陷。但是,在度量测试覆盖率和选择测试路径的时候,数据流测试很困难。 4.2.4 DD-路径测试 引言:DD路径测试,即决策到决策路径测试。在讨论DD-路径测试之前,我们先要了解什
么叫做链,在这里,链出现在有向图中,是一条起始节点和终止节点不同的路径,并且每个节点的出度=1,入度=1。也有一种长度为0的退化链情况,意思就是这条连只有一个节点和0条边。 1. DD路径概念: DD-路径是控制流图中的一条链,只要满足下列五种情况之一: (1) 由一个节点组成,入度=0; (2) 由一个节点组成,出度=0; (3) 由一个节点组成,入度>=2或者出度>=2;