一种基于语法树的程序正确性验证方法

文档序号:6574869阅读:945来源:国知局
专利名称:一种基于语法树的程序正确性验证方法
技术领域
本发明属于计算机应用技术领域,特别是涉及一种程序设计正确性验 证的方法。
技术背景程序正确性验证是IT技能测评自动化的一项重要内容,也是其中的 一个理论、技术难点。程序的正确性,是指对于给定领域的所有的输入, 程序都能给出正确的输出,程序都能给出正确的输出。然而正如Dijkstm 所指出"我们可以通过测试发现程序中存在的错误,但无法证明不存在 错误。"通常情况下,即使是一个非常简单的程序,都可能具有无限多个 可能的输入。目前,进行程序正确性验证通常有两种方案第一种,完全抛弃检查输入一输出的方法,通过形式语言理解来判断程序的正确性;第二种 方案则维持采用检査输入一输出的方法,但不是检査所有的可能输入, 而是检査领域问题的各种"典型"输入。限于形式语言理解研究的发展 水平,第一种方案的研究、发展非常缓慢。国内外学者将研究的重点放 在第二种方案上,也就是典型测试数据的自动生成,并提出了一些切实 可的方法,如符号执行方法、迭代张弛法等,但这些方法的效率以及验 证的准确性不够。 发明内容本发明的目的在于针对现有技术的不足,提供一种基于语法树的程序正确性验证方法。本发明解决其技术问题采用的技术方案如下1)采用XML的格式将源程序转换为程序语法树,具体方法是分析待验证程序的语义信息,转换成XML格式的语义表达,映射为一棵无序标签树。其中,程序名及程序中的各元素转化为相应层次的父节点和子节点;程序中的操作符、操作数为叶子节点。使用一个虚拟根 节点将所有节点进行组合。2) 对程序语法树进行优化,具体方法是采用常量合并、同类语义合并、无用变量删除以及复杂表达式拆分 的方法对l)中的程序语法树进行分析,排除语义的多样性,使同一功能 呈现同 一 的语法树表现形式。3) 使用XPath语句对2)中的优化后的程序语法树进行表达,每一 条XPath语句都对应一个权重,具体方法是① 对于XPath语句组中的每一条XPath语句依次检验,如果XPath 语句在待验证语法树中査询结果与在匹配树中的査询结果一致,则此 XPath语句对应的权重值累加到作为结果的匹配度中;② 一组XPath语句査询完成,生成匹配树,将得到的匹配度作为最 小匹配代价。4) 利用XPath路径的匹配方法验证源程序整体的正确性,具体方法是将匹配树与每一待验证树进行比较。取匹配树的每条路径并在待验证 树中査找对应路径根节点。如果未找到该根节点,则完全不匹配,源程 序整体错误,退出验证。如果找到该根节点,则进入5)。5) 对待验证树中的单条路径进行验证,如果待验证树中的节点n是查 询树的第k条路径的根节点,并且与以节点n为根的子树和匹配树中的 第k条路径相匹配,则待验证树与匹配树在其第k条路径上匹配,即验 证第k条路径所对应的源程序正确。6) 通过5)对待验证树中的全路径进行验证,如果部分路径上匹配, 则对应该路径的源程序正确;如果所有路径上匹配,则源程序整体正确。本发明是一种基于语法树的程序正确性验证方法,其主要功能是通过 该方法以程序的语法树作为程序正确性的检验对象,运用无序标签树语 义匹配算法,验证目标程序的正确性。本方法实现程序的正确性自动验证,为计算机程序自动测评提供了方法保障。(1) 语义形式化。程序语法树是程序结构的树状表示,是形式化、规 范化的程序语义表示,是程序设计者思想的形式化表示,比源程序具有 更低的层次,能够形象地抽象出程序结构,便于程序正确性的验证;(2) 高效性。引入Xpath使得在匹配XML文档结构树时能够准确地找到某一个节点元素。将XPath比作文件管理路径,通过文件管理路径,按照一定的规则査找到所需要的文件。同理,根据XPath所制定的规则,能够快速找到XML结构文档树中的任何一个节点。每一条XPath语句都有一个返回结果,若查找到该节点则返回值为True,或节点的值;当査询节点不存在时,返回结果为False。
具体实施方式
1方法中涉及到相关的定义及说明定义l (映射)设11= (V, E, root (Tl)), T2= (W, F, root (T2)) 为两棵标签树, 一个从T1到T2的映射M定义为^^「x『,并且对所有 H wl), (v2,w2)e M满足以下的条件D V1 = V20M = W2,表示两棵树中参与映射的节点是一一对应的; 2 ) vl =朋面tor(v2) O =朋ce加r(w2),表示映射保持节点对之间的祖 先后代关系。映身才M的定义域"。附"'")定义为"owflz'^M) = {v e F1e『(v, w) £ A/] ^ F; 日央射M的值;t或W""ge(A/)定义为Range(M) =e『| 3v e F : (v, w)e vlf} e『;定义2 (映射代价)n"r,i ,賜,(r1)),r2"^F,觸々2)),为两棵标签树,M为一个从Tl到T2的映射,则定义M的映射代价 y(M):,(M)= Z ))+ZH^W——义))+ Z"W^7))假设Q是一棵匹配树,Qsub是Q的节点集中的一个子集。T是待 验证的考生答案程序语法树,Tsub是T的节点集的一个子集。定义3(路径包含匹配)如果存在一个Qsub到Tsub的映射g,满 足以下3个条件,称映射g是Q到T的一个路径包含匹配,Q为被包含树,D为包含树O vl = v2 〈=> (vl) = g (v2) vl, v2是Qsub中的节点(g是 --个单射);2) label (vl) " label (g (vl))"表示两个标签之间的近似距离在阀值范围内;3) vl 二 ancestor (v2) 〈 = 〉 g (vl) = ancestor (g (v2"树的路径包含匹配,放宽了节点之间的对应关系,要求保持节点的 祖先后代关系。程序正确性的验证转化为匹配树与待验证语法树之间的 包含匹配问题。定义4 (树的包含匹配代价)e"r,&。。,(n)),r"『,F,脂/(r幼为两棵 标签树,则树Q到树T的树包含代价rOw,A4fe,"=應z+(M)1 M: 27J,其中A(M)的定义见定义2 。如果M是树Q到树D的树包含匹配,并且有y(M卜:ra^M(e,T);则称M是一个树Q到树T的具有最小匹配代价的树包含匹配。显然两棵树之间的匹配代价越小,两棵树的匹配度越高,匹配越好越相近。在实际操作中,根据树的包含的定义,代码实现上述的包含匹配算 法,根据映射代价的定义,计算匹配树与待验证语法树之间的匹配代价, 最小匹配代价就是两棵树的匹配度,这是一个复杂的实现过程,在实际 中尝试采用了另外一种简便的方法。用-一组XPath语句来表示一颗匹配树,每一条XPath语句都对应一 个权重(0-1之间),该权重表示原匹配树中对应节点的重要性;用一个 XPath语句组中的每一条XPath语句依次对XML表示的待验证语法树进 行査询,如果查询成功,即Xpath语句在待验证语法树中査询结果与在 匹配树中的査询结果一致,则这条XPath语句对应的权重值累加到作为结果的匹配度中。--组XPath语句查询完成,也就是一颗匹配树与待验 证语法树匹配完成,可以把得到的匹配度看作近似的最小匹配代价。实 际阅巻系统中经使用验证,这是一种替代复杂方法的切实可行的解决方案。2基于XPath路径的程序正确性验证算法引入XPath,是的在匹配XML文档结构树时能够准确地找到某一个节 点元素。可以把XPath比作文件管理路径通过文件管理路径,可以按 照一定的规则查找到所需要的文件;同样,依据XPath所制定的规则, 也可以很方便地找到XML结构文档树中的任何 - "个节点。每一条XPath 语句都有一个返回结果,若査找到该节点则返回值为True,或节点的值; 当查询节点不存在时,返回结果为False。匹配树Q和每一待验证树T进行比较。取匹配树Q的每条路径p并 在待验证树T中查找对应路径根节点。若没找到该根节点,说明完全不 匹配,则退出查询;假设匹配树Q有k条路径,如果待验证树T中的节 点n是査询树Q的k条路径的根节点,并且以n为根的子树和匹配树Q 中的k条路径匹配,则说明待验证树与匹配树在其k条路径上匹配。具体算法实现如下输入匹配树Q,待验证树T;输出 匹配度R;(1) R 二 0(2) 用XPath语句写出匹配树Q的所有从根节点到叶节点的路径;(3) k为匹配树Q的路径总数;(4) for匹配树Q中按字母顺序排列的每条路径p;(5) 执行XPath语句在待验证树T中查找相应的节点,若找到就在 其相应的匹配度上加上当前XPath语句的权重;(6) 若没有找到对应节点则退出循环;(7) endfor。
权利要求
1.一种基于语法树的程序正确性验证方法,其特征在于该方法的具体步骤包括1)采用XML的格式将源程序转换为程序语法树,具体方法是分析待验证程序的语义信息,转换成XML格式的语义表达,映射为一棵无序标签树;其中,程序名及程序中的各元素转化为相应层次的父节点和子节点;程序中的操作符、操作数为叶子节点;使用一个虚拟根节点将所有节点进行组合;2)对程序语法树进行优化,具体方法是采用常量合并、同类语义合并、无用变量删除以及复杂表达式拆分的方法对1)中的程序语法树进行分析,排除语义的多样性,使同一功能呈现同一的语法树表现形式;3)使用XPath语句对2)中的优化后的程序语法树进行表达,每一条XPath语句都对应一个权重,具体方法是①对于XPath语句组中的每一条XPath语句依次检验,如果XPath语句在待验证语法树中查询结果与在匹配树中的查询结果一致,则此XPath语句对应的权重值累加到作为结果的匹配度中;②一组XPath语句查询完成,生成匹配树,将得到的匹配度作为最小匹配代价;4)利用XPath路径的匹配方法验证源程序整体的正确性,具体方法是将匹配树与每一待验证树进行比较,取匹配树的每条路径并在待验证树中查找对应路径根节点;如果未找到该根节点,则完全不匹配,源程序整体错误,退出验证;如果找到该根节点,则进入5);5)对待验证树中的单条路径进行验证,如果待验证树中的节点n是查询树的第k条路径的根节点,并且与以节点n为根的子树和匹配树中的第k条路径相匹配,则待验证树与匹配树在其第k条路径上匹配,即验证第k条路径所对应的源程序正确;6)通过5)对待验证树中的全路径进行验证,如果部分路径上匹配,则对应该路径的源程序正确;如果所有路径上匹配,则源程序整体正确。
全文摘要
本发明涉及一种程序设计正确性验证的方法。目前进行程序正确性验证方法效率低、验证的准确性不够。本发明方法具体包括采用XML的格式将源程序转换为程序语法树;对程序语法树进行优化;使用XPath语句对优化后的程序语法树进行表达,每一条XPath语句都对应一个权重;利用XPath路径的匹配方法验证源程序整体的正确性;对待验证树中的单条路径进行验证;对待验证树中的全路径进行验证。本发明方法可以准确验证源程序的准确性,同时效率比现有方法大大提高。
文档编号G06F11/36GK101261602SQ20081006094
公开日2008年9月10日 申请日期2008年4月8日 优先权日2008年4月8日
发明者卿 吴, 周必水, 胡维华, 谢红标 申请人:杭州电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1