近年来,软件从业人员为保证开发中软件的质量,提出了多种技术与方法。程序切技术是一种重要的一种重要的程序分析技术,可以帮助开发人员和维护人员理解程序的结构和作用,广泛应用于程序的调试、测试与维护等领域。程序切片主要通过寻找程序内部的相关特性,从而分解程序,然后对分解所得的程序切片进行分析研究,以此达到对整个程序理解和认识的目的。随着编程语言逐渐趋于人性化,多功能化和复杂化,为了适应编程语言的这种进步,程序切片技术也在不断的演化发展着。 程序切片技术是M.Weiser在他的1979年的博士论文中首次提出的一种程序分解技术,程序中的某个输出只与这个程序的部分相关语句以及控制谓词有关系,因此如果删除其他的语句或者控制谓词将对这个输出没有任何影响。也就是说,对于一个特定的输出,源程序和对于删除不相关的语句和控制谓词后所得的程序是作用相同的。后来在1981年和1984年,M.Weiser博士又发表了两篇论文对这种技术进行推广和完善。切片技术引起了研究者们广泛的关注,由于它起到了其他技术无可替代的作用,因此可以说是程序分解领域的一场大变革,另外切片技术还在硬件描述语言和其他规约语言以及形式化模型等方面的分析有至关重要的作用,因此它的研究具有极其重要的理论和实际意义。 其形式化定义如下:把满足如下两个条件的切片称为M.Weiser切片:第一,一个程序切片需要对应一个切片准则,用lt;n,Vgt;表示,其中n指程序中的某个兴趣点,一般指一条语句,V表示在这条语句使用的变量的集合。第二,程序P的切片s可以通过在P中删除零条或者多条语句后得到,且保证程序P和所得的切片S关于切片准则的作用是相同的。 当时,M.Weiser博士把只与某个输出相关联的语句和控制谓词构成的程序称之为源程序的静态切片。由此可见,一个程序的切片大多数是源程序的一个子集,这个概念准确的说其实就是程序切片的一个核心思想。后来随着研究的发展,研究者们对M.Weiser博士程序切片的概念进行了扩展,由于程序切片不一定都是可执行的,因此又包含了不可执行的切片思想,这也是一种静态切片,这样就丰富和发展了程序切片的内涵。随后,Korel和Laski又提出了动态切片的概念,它只考虑程序的某个特定执行情况,程序中的信息如数组、指针和循环依赖关系都可以在程序执行时动态确定。因此,动态切片与静态切片相比结果更加的准确。 动态程序切片技术使用的是动态的数据流和控制流分析方法,它依赖与程序中某个变量的具体输入,其输入的不同可能会导致切片结果的不同。静态切片技术强调的是在可以遍历到的所有轨迹中,对程序中某一点的变量状态造成影响的所有语句;而动态切片技术则是强调程序在一次特定的执行中会影响变量在程序中某一点的状态的所有语句,可以看出动态程序切片是相应的静态程序切片的一个子集。因此使用动态程序切片时的工作量要比使用静态程序切片的工作量来的小,更适合使用于程序测试与调试等本身工作量就比较大的工作中。
高级综合技术的研究在当前倍受关注。在进行操作调度与资源分配时,为了节省资源,提高设计质量,应对含有条件结构的流图进行相互独立性测试。通过对相互独立性测试问题进行研究,给出了一种相互独立性测试算法。经实验证明,该算法具有速度快、效率高的特点,应用在高级综合系统中时,可极大地提高综合设计的质量。 高内聚具有单一责任原则,一个模块内部各个组成元素之间相互结合的紧密程度高,代码相关性很高,一般只负责一项任务,模块的独立性高。高耦合指不同模块之间联系紧密,模块的独立性差。规模越大,独立性越差。模块的独立性越强,可复用程序就越高。模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。实践证明,保证模块的高内聚性比低耦合性更为重要。 高传入耦合表示对象具有太多职责,而高传出耦合表示对象不够独立。 (1)传入耦合:组件(或包)通常试图用于整个架构中,这就会给它们带来高传入耦合值。核心框架、登录包之类的实用工具以及异常层次结构通常具有高传入耦合。简单来说就是依赖于它的组件,表现在有其他类导入了它。 (2)传出耦合:简单来说就是它所依赖的一些组件,表现在导入其他包进来。
|
|
|
|
|
|
参考文献: [1]刘艳艳. 程序切片技术在软件重用中的应用[D]. 电子科技大学, 2009. [2] Conover A J, Song Y T. A Framework for Component Mining of Java Applications via Dynamic Slicing.[C]// Software Engineering Research, Management and Applications, 2005. Third ACIS International Conference on. IEEE, 2005:40-47. [3]王雪莲, 赵瑞莲, 李立健. 一种基于前向分析的动态程序切片算法[C]// 第三届中国测试学术会议论文集. 2004. [4]王兴亚, 姜淑娟, 鞠小林,等. 一种基于前向计算的动态程序切片方法[J]. 计算机科学, 2014, 41(1):250-253. [5]贾利敏, 张忠林. 一种简化依赖关系的动态程序切片算法[J]. 郑州大学学报:工学版, 2009, 30(2). [6]袁小龙, 沈绪榜. 一种相互独立性测试算法[J]. 计算机研究与发展, 1997(S1):218-221. [7]齐晶晶, 郭跟成. 基于信息熵的软件构件度量方法[J]. 计算机应用, 2006, 26(5):1183-1185. [8]Andrew Glover, 总裁, Stelligent Incorporated,“追求代码质量:软件架构的代码质量”.[Online]Available: http://www.ibm.com/developerworks/cn/java/j-cq04256/index.html#resources (2006/5/23) |
|
