51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3651|回复: 8
打印 上一主题 下一主题

[原创] 程序切片技术在软件测试中的应用

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-6-15 21:40:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家有研究程序切片技术的吗,请介绍一下这项技术在软件测试中是怎么用的,提供一些资料,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-6-16 00:10:02 | 只看该作者
古乐编的《软件测试技术概论》里面有介绍的,你去找找看
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2010-6-16 19:06:31 | 只看该作者
程序切片是一种“影响分析”:给定某条语句的某个变量,找出影响这个变量的语句和其他变量。例如:

int foo(int a, int b) {
   int c = a + 1;
   int d = b + 1;
   return c*d;
}
,
利用切片分析,可以知道c的取值受到参数a的影响,d的取值受到参数b的影响,返回值受到参数a和b的影响。

对于这样简单的程序,影响分析是一目了然的。但是,对于大规模程序(有非常多的函数),需要用实现了切片分析的工具来提高分析效率。此类工具往往可以标记处某条语句的变量是受哪些输入参数的影响,是通过哪条路径(语句序列)影响的。

对于软件质量保证,程序切片有如下应用:
1. 辅助程序理解。通过标记程序变量受哪些参数和语句的影响,来帮助程序员理解程序。
2. 程序重构。既然知道特定变量受哪些参数和语句影响,那么可以把这些语句和参数抽取出来,组成新的函数,即实现extract method重构方法。
3. 静态代码分析,以发现程序缺陷。

以上几条都要工具的辅助,而目前成熟的商业工具较少(这些工具还包含了许多其他的静态分析技术),应用得更少。

对于测试人员而言,程序切片的作用在于它的思想:给定某条语句的变量,要“反向”找出影响它的语句和输入参数。例如,你发现某条语句会写一个字符串到数据库,而数据库中对应的字段只能容纳16个字符,那么你就要反向读代码,一直追踪到输入框。然后,检查在这条路径上有没有对输入长度进行限制,限制得是否合理。如果没有施加有效的,那么设计一条测试用例来暴露:当用户或黑客如此输入时,程序会试图写入超过16个字符的字符串,这会导致程序异常。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2010-6-17 23:07:40 | 只看该作者
谢谢楼上的解答!程序切片技术主要用于简化测试用例和回归测试方面,大家有研究在这方面的应用的吗?麻烦推荐一些资料。程序切片技术包括很多种切片技术,要研究以上两方面的应用应该从哪种切片技术入手呢?
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2010-6-17 23:38:47 | 只看该作者
据我所知,目前尚无成熟工具用切片技术处理回归测试。大部分研究都处于学术研究的范畴,较成熟的应用出现在软件缺陷静态分析领域。如果您想将程序切片应用于实际工作,我建议您参考我提到的对切片“思想”的应用。如果您想做一些学术研究,可以用搜索引擎去搜索一下,有许多中文的学术文献。

程序切片是一个80年代提出的概念,有大量的学者进行了研究,但一直没有得到广泛的应用。原因如下:

1. 程序切片技术的基础是控制流分析和数据流分析。在研究过程中,学者们得到了许多数据流分析的研究成果,这对于编译优化、程序分析、缺陷检测都是很有效的。也就是说,切片本身没有得到广泛应用,但是其副产品有很多应用。

2. 程序切片对于一个简单的函数是很有效的,但是对于复杂函数(调用其他函数,传递指针参数,传递引用参数),程序切片的算法复杂度高,精确性低。而现实中的程序恰恰就是由许多复杂函数组成的。

3. 程序切片面临的最大困难时“别名”分析,就是指针(C语言中的指针、Java中的引用)到底指向何处。在现实程序中,存在大量的指针和容器,这给程序切片带来了很大困难。

4. 程序切片是静态分析技术,静态分析的根本困难是无法准确分析得到运行时的情况。所以,许多学者和工具开发者利用多种技术(如符号执行、模拟执行等),来获得全面的信息。一本很好的书介绍了相关内容:《安全编程代码静态分析》http://www.china-pub.com/39332

现实世界的程序是复杂的,单一技术不可能有效地处理。所以,有限的高级工具都综合运用多种技术,程序切片只是工具箱中的一员。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2010-6-19 10:16:11 | 只看该作者
谢谢您的耐心解答!很荣幸能遇到像您这样了解这方面的专业人士。我在写这方面的硕士论文,想先做一些理论研究,再在此基础上做一些应用,查阅了一些资料之后发现这方面的应用并不多就比较苦恼,不知道在这方面的研究还有没有价值?您之前举得写一个字符串到数据库中的例子,想检查是否对字符串长度进行了限制,直接设计一个超过16字符的字符串的用例检查是否会导致程序异常不就可以了吗?之前进行的反向查找有必要吗?
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2010-6-22 10:06:17 | 只看该作者
> 不知道在这方面的研究还有没有价值?
程序切片的理论与应用研究都是有学术价值的。

> 之前进行的反向查找有必要吗?
方法是这样的:
1. 先发现一个可能出错点。这一步是比较容易的,因为问题代码有一些“模式”可以匹配。
2. 反向查找,以确定有一条执行路径真的可以用错误的数据触发错误的代码。
这样的方法很适合静态分析工具来找出缺陷。

> 直接设计一个超过16字符的字符串的用例检查是否会导致程序异常不就可以了吗?
确实如此。找到错误有许多种方式。切片是静态方法,您提到的测试是动态方法,是相互补充的。静态方法的优势是:扫描一次,发现所有类似的缺陷,且不需要人的参与。

目前国内做切片研究的学者不多。但是,过去十几年间还是有一些积累。建议你在学术数据库中搜索与切片有关的博士学位论文。看看他们都是怎么做“切片应用”的,也许会有所启发。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2010-6-24 20:34:12 | 只看该作者
谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2010-7-27 22:21:33 | 只看该作者
有正在研究程序切片的,咱一起研究一下哈!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-17 08:25 , Processed in 0.072939 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表