一种混合验证JavaScript程序正确性的方法

文档序号:6515177阅读:191来源:国知局
一种混合验证JavaScript程序正确性的方法
【专利摘要】本发明公开了一种混合验证JavaScript程序正确性的方法。本发明包括以下步骤:将JavaScript程序划分为静态部分和动态部分两大部分;使用开放时态逻辑规约JavaScript程序的正确性;使用程序证明方法验证静态部分正确性和静态动态部分组合的正确性;使用模型检测方法验证动态部分的正确性。本发明验证方法能够适应JavaScript语言的多种语法特性和应用场合,既能支持自动化的模型检测工具,又能有效的降低状态搜索空间,有效提高JavaScript程序的验证效率。
【专利说明】—种混合验证JavaScr i pt程序正确性的方法
【技术领域】
[0001]本发明属于计算机软件验证领域,特别是涉及一种混合验证JavaScript程序正确性的方法。
【背景技术】
[0002]JavaScript语言是一种广泛应用于互联网应用程序的脚本语言,由于支持各种动态语法特性,JavaScript语言具有很好的表达能力和灵活性,使用JavaScript语言可以提高软件系统的开发效率和开发速度,提高软件系统的可读性和可重用性。
[0003]JavaScript语言支持动态语法特性包括:动态类型、隐式类型转换、运行时求解和反射等,由于各种动态语法特性的引入,JavaScript程序很难使用传统的程序证明和模型检测(model checking)方法进行验证。
[0004]形式化方法是借助数学的方法来研究计算机科学中的有关问题。从广义角度,形式化方法是软件开发过程中分析、设计及实现的系统工程方法。狭义地,形式化方法是软件规格和验证的方法,形式化验证的主要技术包括模型检验和定理证明。
[0005]模型检验是一种基于有限状态模型并检验该模型的期望特性的技术。模型检验主要适用于有穷状态系统,其优点是完全自动化并且验证速度快;并且,模型检验可用于系统部分规格,即对于只给出了部分规格的系统,通过搜索也可以提供关于已知部分正确性的有用信息;此外,当所检验的性质未被满足时,将终止搜索过程并给出反例,这种信息常常反映了系统设计中的细微失误,因而对于用户排错有极大的帮助。模型检验方法的一个缺陷是“状态爆炸问题”,即随着所要检验的系统的规模增大,模型检验算法所需的时间/空间开销往往呈指数增长,因而限制了其实际使用范围。
[0006]定理证明采用逻辑公式来规格系统及其性质,其中的逻辑由一个具有公理和推理规则的形式化系统给出,进行定理证明的过程就是应用这些公理或推理规则来证明系统具有某些性质。不同于模型检验,定理证明可以处理无限状态空间问题。定理证明系统可以分为自动和交互式两种类型。自动定理证明系统是通用搜索过程,在解决各种组合问题中比较成功;交互式定理证明系统需要与用户进行交互,要求用户能提供验证中创造性最强部分(建立断言等)的工作,因而其效率较低,较难用于大系统的验证。

【发明内容】

[0007]本发明目的是针对JavaScript的动态语法特性,针对模型检测方法和程序证明方法各自的不足,提供一种混合验证JavaScript程序正确性的方法。
[0008]本发明解决其技术问题所采取的技术方案包括以下步骤:
[0009]步骤1.判断程序组件是否包含动态语法特性,若有,则程序组件划分为静态部分和动态部分两大部分:静态部分不包含动态语法特性,使用程序证明方法进行验证;动态部分使用模型检测方法进行验证,静态动态部分的组合划分至动态部分,使用程序证明方法进行验证。[0010]步骤2.将划分后的静态部分通过程序规约方法进行规约,使用开放时态逻辑对JavaScript程序进行形式化规约;开放时态逻辑扩展计算树逻辑,具体的通过引入新的路径算子和时态算子,扩展计算树逻辑的描述和推理能力,开放时态逻辑的语法使用BNF范式描述如下:
【权利要求】
1.一种混合验证JavaScript程序正确性的方法,其特征在于包括以下步骤: 步骤1.判断程序组件是否包含动态语法特性,若有,则程序组件划分为静态部分和动态部分两大部分; 步骤2.将划分后的静态部分通过程序规约方法进行规约,使用开放时态逻辑对JavaScript程序进行形式化规约;开放时态逻辑扩展计算树逻辑,具体的通过引入新的路径算子和时态算子,扩展计算树逻辑的描述和推理能力,开放时态逻辑的语法使用BNF范式描述如下:

ψ:: — TR UE I FA LSE | /? | ? 丨φ J I f φ】λ φ2 J " ν φ2 / I f ->φ2)1

AX φ I --φ \AF(p | EF φ \ΛΟφ | EG φ |


AdpfJip1) I Ε(φχ?φ2 J I Λ(φ? S φ2 ) | Efpl S φ2 ) j


AIXφ I EfXφ \Λ^"φ | EIFφ \A1G φ \ EIG φ [

ΑΟΧφ I ΕΟΧφ \AOF φ | EOF φ \AOG φ | EOG φ 其中P属于命题公式集合;使用开放时态逻辑形式化规约JavaScript程序正确性:对于一段JavaScript程序代码P,程序规约表示成(pre, rely, post):其中pre是程序代码P执行前的前置条件,rely是程序代码P执行过程中的依赖条件,post是程序代码P执行完成后的后置条件,其中前置条件和依赖条件是程序代码P正确执行的假设,后置条件是程序代码P正确执行的承诺; 步骤3.使用程序证明方法验证静态部分和静态动态组合的正确性,证明系统包括一个核心语言和一组证明规则;核心语言抽象描述JavaScript程序,证明系统中的程序证明方法定义如下:
P;:- X ~ e I 13 ^ 6 I if € then else P21 c ihen P | while c do P 其中:i表示一组程序变量X1....,Xn组成的向量,:表示一组表达式ei,...,en组成的向量,顺序执行表示成P1;P2,对于程序代码P1和匕其中程序代码P1先执行,然后程序代码P2执行;动态部分插入静态部分表示成P1 < P2:对于程序代码 P1和P2,其中程序代码P1是静态代码,程序代码P2是动态代码; 步骤4.步骤4.针对静态部分的程序规约,建立开放系统的有限状态机模型,其中静态部分抽象成开放系统的内部迁移,动态部分抽象成开放系统的外部迁移,外部迁移对开放系统的影响必须确保系统的正确性,并使用模型检测工具验证系统的正确性,如果验证正确则程序正确,如果发现错误则程序验证错误。
2.如权利要求1所述的一种混合验证JavaScript程序正确性的方法,其特征在于步骤I中所述的静态部分不包含动态语法特性,使用程序证明方法进行验证;动态部分使用模型检测方法进行验证,静态动态部分的组合划分至动态部分,使用程序证明方法进行验证。
3.如权利要求1所述的一种混合验证JavaScript程序正确性的方法,其特征在于步骤3中所述的证明规则定义如下: (1)赋值规则
A(pre S rely)
AfprefX ^r-e) S rely}
fx-^e }sai( pre, refy, pni x d)) (2)一致性规则
【文档编号】G06F11/36GK103488571SQ201310474324
【公开日】2014年1月1日 申请日期:2013年10月12日 优先权日:2013年10月12日
【发明者】吴明晖, 吕嘉, 颜晖, 应晶, 陈天洲 申请人:浙江大学城市学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1