基于程序切片技术的网页过滤方法

xiaoxiao2020-7-22  12

基于程序切片技术的网页过滤方法
【专利摘要】本发明给出了一种基于程序切片技术的网页过滤方法。该方法包括HTML依赖关系的生成、HTML切片的生成、嵌套在HTML里面的JavaScript依赖关系的生成、JavaScript切片这几个功能模块。以客户端网页的脚本源代码为输入,对脚本源代码进行分析,根据HTML中的标签中的依赖关系生成基于HTML的依赖图,之后跟据这个依赖图生成HTML切片。之后再抽取嵌套在HTML中的JavaScript代码,对JavaScript代码的对象级、方法级、语句级代码做出依赖关系的构建,根据依赖关系构造出相对应的依赖图,最后根据切片准则,用图的可达性算法计算出切片。利用这些分层切片对网页的脚本代码进行层层切片处理,筛选出自己感兴趣的内容,过滤掉不感兴趣的或者不良的内容,以达到网页过滤的效果。
【专利说明】基于程序切片技术的网页过滤方法
【技术领域】
[0001]本发明给出了一种基于程序切片技术的网页过滤的设计方案,主要解决对网页中不良信息的过滤问题,属于信息安全领域。
【背景技术】
[0002]互联网作为一个开放和使用信息资源的全球性网络,已经和正在对世界各国的经济、政治、文化、科技、军事等各个领域产生重大影响,使人们的生活方式发生深刻变化。互联网的开放性、互连性以及使用的高自由性、信息来源的不可控性等,使得网络内容安全对社会的潜在威胁和危害是不可估量的。随着互联网的迅速普及,“网络垃圾”已经开始侵入我们的生活;黑客也开始利用互联网进行恶意代码、犯罪软件的感染和传播,从中获取利益;不法分子更是利用互联网作为渗透我们国家的秘密通道。因此,如何有效地过滤这些非法数据,如何更有针对性地提取网页内容,如何更加准确快捷地帮助用户寻找其感兴趣的信息,日益成为网络安全领域的一个热点问题。
[0003]以跨平台、可扩展、结构化等为特点的XML语言(可扩展标记语言)推出已经有几年的时间了,但据统计,互联网上信息的载体大部分还是以HTML(超文本标记语言)网页为主的。因此,对网页信息的处理,尤其是对HTML网页信息的处理已经成为互联网信息处理的重点,并由此产生了一些与互联网信息处理有关的研究领域,如:网页的检索、网页分类、网页信息抽取、网页摘要和新词预测等。这些领域几乎都是在网页正文信息的基础之上建立的,网页正文信息抽取的质量和性能会直接影响到它们的处理结果和性能,因此网页信息的过滤与抽取对互联网信息处理来说是一个重要的基础性的工作和研究课题。
[0004]程序切片是一种重要的程序分析和理解技术,对程序进行切片的过程就是删除无关代码的过程,程序切片技术在程序调试、回归测试、软件维护、程序理解以及逆向工程等方面有着广泛的应用。本专利将程序切片思想与网页过滤技术相结合,一方面拓展了程序切片技术的应用领域,另一方面充分利用程序切片结果,优化网页过滤方法。
[0005]参考文献:
[0006][I]苏小鲁,郭文明.基于DOM的HTML网页正文信息抽取模块的设计和实现.北京邮电大学硕士研究生学位论文,2011.[0007][2]张迎周,徐宝文.一种新型形式化程序切片方法.中国科学E辑:信息科学,2008,38(2):161-176.
【发明内容】

[0008]技术问题:本发明的目的是提出一种基于程序切片技术的网页过滤方法。该方案从HTML文件中标签、元素以及嵌套在里面的JavaScript之间的依赖关系出发,对依赖关系进行分析,构建一个多层次的切片方法来对HTML中各个标签、元素以及嵌套的JavaScript的进行切片处理。针对现有的传统切片在面向脚本语言切片功能的匮乏以及在的类似于JavaScript这种面向对象语言存在的效率和准确率上的技术瓶颈,本发明着手于客户端脚本语言HTML里面标签、元素以及嵌套在HTML中的JavaScript之间的依赖关系,结合程序切片技术,提出一种网页过滤的方法。
[0009]技术方案:本发明提出了一种基于程序切片技术的网页过滤方法,包括对HTML标签和内容进行切片处理、嵌套在HTML中的JavaScript进行切片处理,进而达到对客户端网页内容的过滤。
[0010]在本发明中,所有的功能模块都是基于程序切片技术的。在网页过滤方法设计中,我们设计利用多钟不同的切片思想,首先针对客户端脚本源代码中的HTML文件中的标签和元素进行构造依赖关系的构造,而后在嵌套在HTML中的面向对象语言JavaScript中对象级、方法级以及语句级等等层次进行依赖图的构建。然后对这些依赖关系,我们采取逐步求精算法来分层计算JavaScript的切片。
[0011]目前的程序切片技术主要集中在处理面向过程和面向对象的语言,而网页过滤方法采用的是基于对象的语言(JavaScript),因此需要对基于对象语言的程序切片方法开展相关研究在网页检测过程中通过浏览器内核解析网页源代码并提取出源代码,以此作为网页检测的依据,具体实现步骤为:
[0012]该方法以图论知识为理论基础,以程序切片为技术手段,通过超级文本标记语言HTML (HyperTextMarkupLanguage,)以及嵌套在HTML中的一种脚本语言JavaScript中的依赖关系进行切片开发的模型,以达到对网页源代码进行切片处理;该方法包括文档对象模型 HTMLDOM(HTMLDocumentObjectModel,)树构造、JavaScript 方法级依赖图、JavaScript语句级依赖图、通过依赖图建立切片等这几个功能模块;利用这些分层切片对网页的脚本代码进行层层切片处理,筛选出自己感兴趣的内容,过滤掉不感兴趣的或者不良的内容,以达到网页过滤的效果,所包含的步骤为:
[0013]步骤I)基于DOM树的抽取方式:
[0014]基于DOM树的抽取方式是基于单一页面的处理,该方式并不关心页面的布局,首先将网页转换成DOM树,根据所处理页面的DOM树按照某种算法把网页内的噪音信息去除,从而抽取出正文信息;
[0015]步骤2)将HTML文档构建成DOM树的依赖图
[0016]DOM把一份文档表不为一棵树,DOM树中的一切是以最外层的HTML包含兀素即html元素开始的,使用树的比喻,叫做根元素,从根流出的线表示不同标记部分之间的关系;head和body元素是html根元素的孩子;title是head的孩子,head是title的父亲;处在同一层次的且互不包含的两个分支之间称为兄弟关系,整个树就这样组织下去,直到最后的叶子节点变为属性值为止(html, head, body, title均为HTML语言中成对出现的标签);
[0017]步骤3)根据DOM依赖图构建切片
[0018]根据已知的树形依赖图,根据图的可达性算法构建出相应的切片;
[0019]步骤4)抽取JavaScript代码
[0020]JavaScript代码在HTML —般以标签格式存在,编写程序或者使用开放源码的JavaScript引擎SpiderMonkey工具(一种用C语言实现的JavaScript脚本引擎)来抽取JavaScript 代码;
[0021]步骤5)构建出JavaScript程序的依赖关系[0022]通过对JavaScript源程序进行基于扫描的语法分析,找出所有的对象、变量、方法的定义;按照逻辑结构将JavaScript分为对象层、方法层和语句层,逐层抽取程序语句间的数据依赖和控制依赖关系;通过对JavaScript源程序中赋值语句的左值右值,控制语句的谓词、函数调用语句对实参和全局变量的影响以及对象继承时的多态进行语义分析;针对JavaScript中动态定义对象的模式,实现对象中数据和方法的统一封装处理;
[0023]步骤6)基于对象的系统依赖图的构造方法
[0024]根据数据依赖和控制依赖关系构造出由对象层次子图0HG、控制依赖子图CDG、数据依赖子图DDG三个基本层次组成的基于对象的系统依赖图BOSOG ;0HG描述了基本对象的结构信息和对象层次信息,其中的顶点包括每个对象的对象首部顶点、定义在每个对象中的每个方法的方法首部顶点:边包括每个对象得对象首部顶点到与其有继承关系的对象的相应对象首部顶点的继承边,由方法首部表示的方法节点到定义该方法的对象的对象首部顶点的类成员边;当一个对象和另一个对象或者系统结合时,通过对象首部节点和对象成员边就能够方便的访问方法的信息,同时图中子对象没有重新表示从超对象中CDG中描述了函数方法的具体语句现过程,采用继承的方法,因此消除了对继承方法的重复表示;用静态后向切片的方法,包含了方法的多态性表示;DDG中包括了对象的实现,消息动态绑定到对象中的特定方法表 示对象间的数据依赖关系;
[0025]步骤7) JavaScript切片算法实现
[0026]根据JavaScript自身的特点建立JavaScript语言的分层切片模型,采用对传统的系统依赖图进行基于对象扩充的方案进行JavaScript脚本切片;
[0027]步骤8)相关的程序片段切分与计算方法
[0028]利用两阶段图形可达性算法逆向遍历基于对象的系统依赖图B0S0G,首先在BOSOG上找出从节点η出发,沿数据依赖边或者控制依赖边可以到达的节点进行标记,构成程序关于节点η的程序切片;其次标记在BOSOG中与η相连的节点,然后标记跟这些节点相连的节点,依次计算到不能找到新的节点为止,通过上述遍历过程中的节点标记,计算出相关的程序片段。
[0029]有益效果:作为网页过滤方法,本发明基本上实现了网页过滤所应该具有的功能。具有以下的一些特点和创新之处:
[0030]多层次的程序切片技术:本发明中使用的程序切片技术是基于层次结构依赖图的程序切片,它不同于传统的程序切片仅仅在断言或者语句的细粒度级别上的切片方法,它属于一种多层次的切片方法,在这种切片方法中,不必构造整个程序的系统依赖图,对比传统的切片方法,多层次的切片方法有如下的优点:
[0031]?复杂度低:
[0032]构造依赖图的复杂度取决于以下元素:
[0033](I)节点数(Vertices),即一个方法或过程中谓词和赋值语句的最大数;
[0034](2)边数(Edges),即一个方法或过程中边的最大数;
[0035](3)参数个数(Params),即一个方法或过程中形式参数的最大数;
[0036](4)全局变量数(Globals),即系统中的全局变量数;
[0037](5)局部变量数(Locals),即函数内部的局部变量数;
[0038](6)调用位置数(CallSites),即一个方法或过程中调用位置的最大数;[0039](7)继承树深度(TreeD印th),即确定可能的间接调用目标的继承树深度;
[0040](8)方法(Methods),即系统中方法或过程的数目。
[0041]令ParamVertices (m) = Params+Globals+Locals,则有 SDG 的大小的上界满足下列条件:
[0042]Size(SDG(m)) = Vertices+CallSites* (1+TreeDepth*(2*ParamVertices(m))) +2*ParamVertices(m)
[0043]利用层次切片,首先不必构造整个程序的系统依赖图,而是根据切片准则构造方法级依赖图,删除每个对象中与切片准则无关的方法和变量;最后根据切片准则构造语句级依赖图,在每个方法中删除与切片准则无关的语句和谓词等。在分层模型中,由于删除了所有与切片准则无关的 方法等等,这使得依赖关系的数量同样得到删减,因而,层次切片模型的复杂度比传统的方法低。
[0044]?精确度高:分层切片方法将对象级和方法级的无关的对象和方法排除,而后考虑这些对象和方法里面变量,语句之间关系的这些细节问题,最后选用恰当的语句级依赖图和切片算法,实为更为精确的切片。
[0045]?可复用性强:分层切片方法可以将网页脚本中的JavaScript都抽取出来放在一个源代码文件中,这个源代码文件经过少量修改甚至不需要修改就可以编译。当别人需要调用这个构件的时候,只需要使用切片后的代码。
[0046]基于HTML的切片技术:本发明客户端的网页源代码出发,对网页中脚本语言进行分析。HTML是由标签和属性构成,因为HTML中的每个标签之间都存在着互相依存的关系,标签之间存在着相互调用。一个HTML文件中所有标签之间的依赖关系对于理解网页结构,分析网页结构以及切分网页结构都可以起到很重要的作用。本发明对HTML中的所有标签进行分析,从中抽取出所有标签之间的依赖关系,得到一个HTML标签依赖关系图,然后用程序切片技术来分析这个标签依赖图,将某一个标签作为切片节点,对标签依赖图进行切片,得到这个标签所依赖的其他所有标签。将所有切片后得到的标签的定义从HTML文件中抽取出来,生成一个切片代码,这个代码就包含了运行这个标签所需要的所有的、最精简的代码,从而实现源代码的切分,达到生成网页过滤的目的。
[0047]基于对象的切片技术:在面向对象语言切片技术的基础上,提出了基于对象语言的切片算法JavaScript语言是基于对象的语言。在对JavaScript程序进行语法和语义分析构建JavaScript程序的依赖程序层次模型,构造对象层次子图、控制依赖与数据依赖子图,从而构建基于对象的系统依赖图。再次利用依据网页分析模块构建的切片准则来逆向遍历基于对象的系统依赖图,最后计算出相关的切片
【专利附图】

【附图说明】
[0048]图1是本发明的网页过滤方法的整体流程框图。
[0049]图2描述了 JavaScript抽取的过程。
[0050]图3描述了 JavaScript切片构造的过程。
[0051]图4描述了网页代码分层切片模型的过程。
【具体实施方式】[0052]本发明中基于程序切片的Web服务平台包含对HTML标签和内容进行切片处理、嵌套在HTML中的JavaScript进行切片等功能。
[0053]JavaScript是一种基于对象的编程语言,不同于其它面向对象的语言,它没有类的概念,只有对象。JavaScript语言的对象有三个来源=JavaScript内部对象、主机环境中对象、程序创建的对象。任何对象都可以作为原型对象与另一个对象联系起来,允许后一个对象来共享前一个对象的所有属性。JavaScript提供动态继承,继承可以根据单个对象的不同而不同。而且还支持不需要任何声明的函数,函数可以是对象的属性,作为宽松类型的方法被调用执行。
[0054]任一个对象都可以定义自己的属性,不管是在创建阶段还是在运行阶段。JavaScript在运行时可以动态的增加或者删除任何对象的属性。如果为一组对象的原型对象增加一个属性的话,那么所有继承于这个原型对象的所有对象都可获取这个新增加的属性。JavaScript没有Java等面向对象语言所具有的静态类型,也没有严格的类型检查机制。但JavaScript支持大部分的Java语言的语法和控制流结构。Java等面向对象语言的类是通过声明来创建并在编译阶段就固定好了的,而JavaScript支持基于以下几个基本数据类型的运行时类系统:数字类型,布尔类型和字符串类型。
[0055]图1给出了本发明方法的一个整体的流程框图,描述了各个模块的作用以及模块之间的联系。下面的内容是对本发明中的网页过滤方法的各个功能在实现上的详细描述。
[0056]I,将HTML构造成DOM树
[0057]DOM接口提供了一种通过分层对象模型来访问XML文档信息的方式,这些对象模型依据XML的文档结构,即元素间有序的嵌套结构,形成一棵对象节点树,本文中称此结构为DOM树,它将XML文档表示为节点构成的树。org.w3c.dom包中的不同接口可以表示元素、属性、已分析的字符数据、注释和处理指令,它们都是公用Node接口的子接口。Node接口提供了在树中导航与处理的基本方法。
[0058]2,对DOM树进行切片处理
[0059]DTD切片算法描述:
[0060]DTD切片分两个步骤:切片规则生成、切片文档生成,以下将讨论这两个步骤的算法。
[0061]算法I切片规则生成:
[0062]输入:DTD文档dtdFile切片选取的元素节点集合criterionSet。
[0063]输出:切片规则树criterionT。
[0064]步骤1:解析dtdFile得到树型结构dtdT,获取dtdT根元素节点boot ;
[0065]步骤2:如果boot为非空,则转步骤3,否则算法结束;
[0066]步骤3:从criterionSet中选取一个元素节点,并在dtdT中搜索,如果存在该元素节点,则转步骤4 ;
[0067]否则算法结束;
[0068]步骤4:在criterionT中生成从根元素节点到搜索元素节点的树分支,转步骤3。
[0069]算法2切片文档生成:
[0070]输人:HTML文档 srcHTMLFile,DTD 文档 dtdFile,切片规则树 criterionT。
[0071]输出:DTD切片文档 sliceDtdFile, XML 切片文档 slicedHTMLFile[0072]步骤1:解析sourceFile形成DOM树document ;解析dtdFile得到dtd树型结构dtdT ;
[0073]步骤2:先序遍历。criterionT获取元素节点node,如果节点不为空,贝U转步骤3,否则算法结束;
[0074]步骤3:先序遍历document获取与node匹配的元素节点及其内容,写入slicedHTMLFile ;先序遍历dtdT获取与node匹配的元素节点信息,写入slicedDtdFile,转步骤2 ;
[0075]3, JavaScript 代码的抽取
[0076]JavaScript代码在HTML —般以这样的格式存在的〈scripttype = "text/javascript"〉和〈/script〉之间,这种是目前嵌入JavaScript的一般方式。JavaScript代码可以在head区或body区,但有些区别。JavaScript代码随网页的其他元素顺序载入,载入后先经过一次语法检查,然后顺序执行;如果JavaScript代码中不包含document,write或document, writeln语句,写在head区比较好,因为这样会先执行。
[0077]根据已知的网页,遍历该网页的每个节点,通过上述对JavaScript嵌入方式的分析来判断,如果是script节点,并且是JavaScript类型,则分析是文件还是代码;若是文件,则通过HTTP请求获取此文件;若是代码,直接将这些代码保存为本地文件。最后将所有JavaScript文件交给程序
[0078]4, JavaScript对象级依赖图
[0079]开放源码的JavaScript引擎SpiderMonkey提供了一个最基本的且易于扩展的JavaScript分析器。通过包装SpiderMonkey使其包装后的接口能接收从页面提取的JavaScript 代石马。
[0080]一个完整的对象级依赖图除了包含对象节点之外,还必须能准确地反映这些节点之间的各种依赖关系。在JavaScript语言的程序中,主要存在以下几种依赖关系。
[0081](I)对象间的创建关系
[0082]对象之间的创建关系是一种委托关系的具体实现。一个对象在其方法中依靠创建另一种对象,而后再委托它进行部分工作,最后完成自己的工作。这种关系发生在一个对象在实现某个方法时使用另一个对象的时候。
[0083](2)对象之间的聚合关系
[0084]对象之间的聚合关系是很常见的。例如飞机是由机头、机身、机翼和尾翼等组成,这是一种聚合关系,它不能用继承关系来描述,但可以用对象之间的聚合关系或包含关系来描述。这种关系是直接的。
[0085](3)对象通信(消息)关系
[0086]消息流图描述了系统中对象间的消息流。目标不在于描述系统中的所有消息流,只是描述那些相关对象间交换的主要消息。这种图可以反映相互创建的对象是如何交互来完成所赋予的任务的,这样就可以检查设计中的缺点。有两种不同的消息图,一种描述从一个对象到其他对象的外向消息流;另一种是从其他对象到本对象的内向消息流。
[0087]5, JavaScript语句级依赖图
[0088]语句依赖图是对对象的方法体进行分析所得到的,它包括所有语句类型。对于方法调用需要分析出方法形参之间的关系,即是否一部分形参受到另一部分形参的影响即可,通过形参与实参的对应关系把调用函数与被调用函数联系起来。New语句的处理:如果相应的类没有构造函数,我们则给出缺省的构造函数,即给对象中的每个数据成员赋缺省的初值。
[0089]语句级依赖图由语句节点和语句之间的依赖关系组成,其中语句节点可分为以下三大种类型:
[0090](I)复合语句开始节点
[0091]用语句体第一个语句的sequence表示,但是要标明是语句体开始节点。
[0092](2)复合语句结束节点
[0093]用语句体最后一个语句的sequence表示,但是要标明是语句体结束节点;复合语句指:方法体、if-else语句、if-else的肯定部分、if_else的否定部分、switch语句、while语句、do-while语句、for语句。
[0094](3)其他的语句节点
[0095]I)简单语句节点,用该语句的sequence表示;
[0096]2)谓词节点,即条件语句(包括switch语句)和循环语句的判断部分,用该语句谓词的sequence表示;
[0097]3)方法调用节点,用该语句的sequence表示;
[0098]4)结构化跳转语句节点,包括break, continue, return语句,用它们的sequence表不。
[0099]语句之间的依赖关系包括:
[0100]I)数据依赖:即变量X在语句节点i的定义是语句节点j的一个到达定义,则j数据依赖于i,该指针是从j指向i;
[0101]2)普通依赖:即一般的顺序语句结构,如果语句节点j的下一个语句节点是i,则指针从j指向i,由于我们的程序中不存在goto语句,所以我们在每建立一个节点以后,都和它前面的节点建立“普通依赖”关系的连接,这里“普通依赖”关系只存在于平级(即同一层次)的语句节点之间;
[0102]3)控制的依赖关系:只局限于条件语句和循环语句内部,只要把指针从条件体或循环体内的语句指向条件判断部分即可。
[0103]6, JavaScript语句级切片算法
[0104]K.L.0ttenstein等人提出的用于计算过程内切片的程序依赖图和S.Horwitz等人提出的用于解决过程间切片计算问题的系统依赖图(SDG)都是在语句级表示程序。我们称之为语句级依赖图。这类依赖图的节点表示出现在程序中的语句和断言。边表示程序组件之间的依赖关系。在利用依赖图的方法中,若一个切片准则C在依赖图G中确定了一个开始节点n,则关于C的切片就是G中从η经过依赖边能够到达的节点相应的语句和断言构成的集合(考虑后向切片)或者是G中从C能够到达的节点相应的语句和断言构成的集合(考虑前向切片)。
[0105]定义I (语句级切片准则)语句级切片准则是一个二元组<η,V, P〉,其中η是程序P的一条语句,V是在η点定义或引用的变量集合。
[0106]定义2 (语句级切片)语句级切片是一种程序分解技术。一个程序P和一个切片准则<η,V, P〉,其中η是程序P中的某条语句,V是在η定义或引用的一个变量集合,程序P关于切片准则 <n,V, P〉的程序切片Slice ?η, V, P?是由程序P中影响变量V在η点的值的语句和谓词构成(后向切片);或由变量V影响的语句和谓词构成(前向切片)。
【权利要求】
1.一种基于程序切片技术的网页过滤方法,其特征在于该方法以图论知识为理论基础,以程序切片为技术手段,通过超级文本标记语言HTML以及嵌套在HTML中的一种脚本语言JavaScript中的依赖关系进行切片开发的模型,以达到对网页源代码进行切片处理;该方法包括文档对象模型HTMLDOM树构造、JavaScript方法级依赖图、JavaScript语句级依赖图、通过依赖图建立切片等这几个功能模块;利用这些分层切片对网页的脚本代码进行层层切片处理,筛选出自己感兴趣的内容,过滤掉不感兴趣的或者不良的内容,以达到网页过滤的效果,所包含的步骤为: 步骤I)基于DOM树的抽取方式: 基于DOM树的抽取方式是基于单一页面的处理,该方式并不关心页面的布局,首先将网页转换成DOM树,根据所处理页面的DOM树按照某种算法把网页内的噪音信息去除,从而抽取出正文信息; 步骤2)将HTML文档构建成DOM树的依赖图 DOM把一份文档表不为一棵树,DOM树中的一切是以最外层的HTML包含兀素即html兀素开始的,使用树的比喻,叫做根元素,从根流出的线表示不同标记部分之间的关系;head和body元素是html根元素的孩子;title是head的孩子,head是title的父亲;处在同一层次的且互不包含的两个分支之间称为兄弟关系,整个树就这样组织下去,直到最后的叶子节点变为属性值为止; 步骤3)根据DOM依赖图构建切片 根据已知的树形依赖图,根据图的可达性算法构建出相应的切片; 步骤4)抽取JavaScript代码 JavaScript代码在HTML—般以标签格式存在,编写程序或者使用开放源码的JavaScript 引擎 SpiderMonkey 工具来抽取 JavaScript 代码; 步骤5)构建出JavaScript程序的依赖关系 通过对JavaScript源程序进行基于扫描的语法分析,找出所有的对象、变量、方法的定义;按照逻辑结构将JavaScript分为对象层、方法层和语句层,逐层抽取程序语句间的数据依赖和控制依赖关系;通过对JavaScript源程序中赋值语句的左值右值,控制语句的谓词、函数调用语句对实参和全局变量的影响以及对象继承时的多态进行语义分析;针对JavaScript中动态定义对象的模式,实现对象中数据和方法的统一封装处理; 步骤6)基于对象的系统依赖图的构造方法 根据数据依赖和控制依赖关系构造出由对象层次子图0HG、控制依赖子图CDG、数据依赖子图DDG三个基本层次组成的基于对象的系统依赖图BOSOG ;OHG描述了基本对象的结构信息和对象层次信息,其中的顶点包括每个对象的对象首部顶点、定义在每个对象中的每个方法的方法首部顶点:边包括每个对象得对象首部顶点到与其有继承关系的对象的相应对象首部顶点的继承边,由方法首部表示的方法节点到定义该方法的对象的对象首部顶点的类成员边;当一个对象和另一个对象或者系统结合时,通过对象首部节点和对象成员边就能够方 便的访问方法的信息,同时图中子对象没有重新表示从超对象中CDG中描述了函数方法的具体语句现过程,采用继承的方法,因此消除了对继承方法的重复表示;用静态后向切片的方法,包含了方法的多态性表示;DDG中包括了对象的实现,消息动态绑定到对象中的特定方法表示对象间的数据依赖关系;步骤7) JavaScript切片算法实现 根据JavaScript自身的特点建立JavaScript语言的分层切片模型,采用对传统的系统依赖图进行基于对象扩充的方案进行JavaScript脚本切片; 步骤8)相关的程序片段切分与计算方法 利用两阶段图形可达性算法逆向遍历基于对象的系统依赖图BOSOG,首先在BOSOG上找出从节点η出 发,沿数据依赖边或者控制依赖边可以到达的节点进行标记,构成程序关于节点η的程序切片;其次标记在BOSOG中与η相连的节点,然后标记跟这些节点相连的节点,依次计算到不能找到新的节点为止,通过上述遍历过程中的节点标记,计算出相关的程序片段。
【文档编号】G06F17/30GK103970845SQ201410175921
【公开日】2014年8月6日 申请日期:2014年4月28日 优先权日:2014年4月28日
【发明者】张迎周, 孙健, 仉雪玲, 孙韦翠, 高海燕, 陈栋, 王子元, 嵇宇 申请人:南京邮电大学

最新回复(0)