北大测试全套课件和教案 9. 第4章 第3讲(2)

2019-04-21 13:33

b) 程序结构的基本要求

我们对于程序结构提出以下4点基本要求,这些要求是,写出的程序不应该包含:

? 转向并不存在的标号; ? 没有用过的语句标号;

? 从程序入口进入后无法达到的语句; ? 不能达到停机语句的语句。

显然,这些要求是合理的。目前,对这些情况的检测主要通过编译器和程序分析工具来实现。

2. 数据流分析

在单元测试中,数据仅仅在一个模块或者一个函数种流通。但是,数据流的通路往往涉及多个集成模块,甚至于整个软件,所以我们有必要进行数据流的测试,尽管它非常耗时。

数据流分析最初是随着编译系统要生成有效的目标代码而出现的,这类方法主要用于优化代码。数据流测试是指一个基于通过程序的控制流,从建立的数据目标状态的序列中发现异常的结构测试方法。数据流测试用作路径测试的“真实性检查”。

早期的数据流分析常常集中于现在叫做定义/引用异常的缺陷: ? 变量杯定义,但是从来没有使用。 ? 所使用的变量没有被定义。 ? 变量在使用之前被定义了两次。

因为程序内的语句因变量的定义和使用而彼此相关,所以用数据流测试方法更能有效地发现软件缺陷。但是,在度量测试覆盖率和选择测试路径的时候,数据流测试很困难。

4.2.4 DD-路径测试

引言:DD路径测试,即决策到决策路径测试。在讨论DD-路径测试之前,我们先要了解什么叫做链,在这里,链出现在有向图中,是一条起始节点和终止节点不同的路径,并且每个节点的出度=1,入度=1。也有一种长度为0的退化链情况,意思就是这条连只有一个节点和0条边。

1. DD路径概念:

DD-路径是控制流图中的一条链,只要满足下列五种情况之一: (1) 由一个节点组成,入度=0; (2) 由一个节点组成,出度=0;

(3) 由一个节点组成,入度>=2或者出度>=2;

(4) 由一个节点组成,入度=1并且出度=1; (5) 长度>=的最大链。

2. 举例

为了便于理解,我们用图3-4三角形伪代码映射成的控制流图来说明这五种情况。很显然,我们可以看出节点4的入度为0,是DD-路径的第一种情况,我们把它叫做“第一”;节点5-8是第五种情况,我们可以把这4个节点合成一个DD-路径,为什么是5-8,而不是5-7或者5-9呢?因为若是5-9的话,就会违反入度=出度=1的原则,若是5-7,就会违反“最大”的原则;节点10、11、15、17、18、21是情况4的DD-路径;节点9、12、13、14、16、19、20、22是情况3的DD-路径;而节点23的出度为0,是DD-路径的第二种情况,我们把它叫做“最后”。根据图4-4,我们画出图4-8对应的三角形程序DD-路径图,它包括的路径 名都列举在表4-8中。

控制流图节点

4 5-8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

DD-路径名称

第一 A B C D E F H I J K L M N G O 最后

定义情况

1 5 3 4 4 3 3 3 4 3 4 4 3 3 4 3 2

第一ABCEFGIKMNOHJLD最后

图4-8 三角形程序DD-路径图

提出DD-路径的目的很多质量机构都把DD-路径覆盖作为测试覆盖的最低可接受级别。E.F.Miller发现,当通过一组测试用例满足DD-路径覆盖要求时,可以发现全部缺陷中的大约85%(Miller 1991)。

如果每一条DD-路径都被遍历,则我们知道每个判断分支都被执行,其实就是遍历DD-路径图中每条边。对于if类的 语句,这意味着真、假分支都要覆盖。对于CASE语句,则每个子句都要覆盖。

4.2.5基本路径测试

引言:基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。基本路径测试法包括以下5个方面: (1) 程序的控制流图:描述程序控制流的一种图示方法。 (2) 程序环境复杂性:

环形复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序

的基本独立路径数目边。

例如:图4-8中的复杂性度量,我们用V(G)表示,用n代表节点数目,用e代表控制流线的数目,那么:V(G)=e-n+2=20-17+2=5。由此,我们可以得到三角形程序段的基本路径集中最多有5条独立路径。

(3) 导出测试用例:通过程序的控制流图导出基本路径集,列出程序的独立路径。 (4) 准备测试用例,确保基本路径集中的每一条路径的执行。

(5) 图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一

个基本路径集。

下面我们通过一个实例来说明基本路径测试。

例:请看以下代码,它由C++语言书写。,把它转化成图形矩阵,,最后请使用基本路径测试法为变量temp设计测试用例,使之满足基本路径覆盖要求。

1. void ReadPara( CString temp) 2. {

3. if ( temp = = \

4. m_oper.SetCurSel(0); 5. else 6. {

7. if (temp = = \

8. m_oper.SetCurSel(1); 9. else 10. {

11. if ( temp = = \12. m_oper.SetCurSel(2); 13. else 14. {

15. if( temp = = \

16. m_oper.SetCurSel(3); 17. else 18. {

19. if ( temp = = \

20. m_oper.SetCurSel(4); 21. else

22. m_oper.SetCurSel(5); 23. } 24. } 25. } 26. } 27. return; 28. }

1.画出这段代码的控制流图,如4-9所示:

2348121620232425262728711151922 图4-9 例题控制流图

2.根据控制流图,计算环路复杂度V(G)=22-18+2=6。 3.导出测试用例,列出路径: Path1:2-3-4-27-28 Path2:2-3-7-8-26-27-28 Path3:2-3-7-11-12-25-26-27-28 Path4:2-3-7-11-15-16-24-25-26-27-28 Path5:2-3-7-11-15-19-20-23-24-25-26-27-28 Path6:2-3-7-11-15-19-22-23-24-25-26-27-28 4.设计测试用例

根据第3步中给出的路径,下面设计测试用例列在表3-9中。 Path 1 Path 2 Path 3 传入参数 ReadPara(”>=”) ReadPara(”>”) ReadPara(”==”) 预期调用 m_oper.SetCurSel(0) m_oper.SetCurSel(1) m_oper.SetCurSel(2) Path 4 Path 5 Path 6 ReadPara(”<”) ReadPara(”<=”) ReadPara(”+”) m_oper.SetCurSel(3) m_oper.SetCurSel(4) m_oper.SetCurSel(5) 5.图形矩阵的画法在前面我们已经讲过,这里不再赘述。

4.2.6 程序插桩

在软件测试中,常常要用到一种“插桩”技术,通过在源代码中加入记录信息语句,以便进行运行信息的追踪和调试,统计有关的运行资源状况。 想做插桩,可以思考以下几点:

(1)如果出现在语句中包含了return语句,怎么在它前面插入指定语句?同时保证语句的语法合法性?

例如: for ( j=0;j<10000;j++) {

if ( j == k)

return ; <----- 不能直接在之前插入,否则意义全变了; }

(2)当出现需要在for 循环语句、while循环语句中进行插入信息时候,很可能会导致程序运行时间非常长,是否有办法改进“插桩”机制?

(3)是否可以由用户进行指定,比如for 语句、while语句或者指定的语句前不允许进行“插桩”,怎么实现?

(4)如果对于一个庞大的系统软件,我们需要进行对所运行的程序的每个函数记录其运行的有关参数,如:运行开始时间、退出时间、运行总时间、调用次数等等的统计,您有什么更好的建议与想法呢? 小 结

白盒测试作为软件质量保证中的重要一环,对产品稳定性起到至关重要的影响,不幸的是,由于实施白盒测试有较高技术难度,该软件过程常被厂商忽略,因为难于实施,所以容易失败,失败后产生畏惧心理,就更不愿意进一步去尝试,如此形成恶性循环。我们应该克服这种心理恐惧,不畏惧“白盒测试”这只拦路虎,只要方法得当,白盒测试还是能做起来的。


北大测试全套课件和教案 9. 第4章 第3讲(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:绿化养护投标文件技术标

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: