一种增量组合JavaScript程序模块的方法
【专利摘要】本发明公开了一种增量组合JavaScript程序模块的方法,本发明包括以下步骤:根据JavaScript程序模块是否包含动态语法特性,将程序模块划分为静态模块和动态模块;使用信赖-保证方法定义静态模块的模块契约,使用程序证明方法验证静态模块是否满足其模块契约;如果静态模块的执行过程中需要执行动态模块,动态模块根据静态模块的模块契约插入运行时检查代码;在动态模块执行时运行时检查代码,确保动态模块的执行满足静态模块的模块契约。本发明的组合方法能够有效的契合JavaScript语言的动态语法特性和应用场合,支持增量组合JavaScript程序。
【专利说明】—种增量组合JavaScr i pt程序模块的方法
【技术领域】
[0001]本发明属于计算机软件验证领域,特别涉及一种增量组合JavaScript程序模块的方法。
【背景技术】
[0002]JavaScript语言是一种广泛应用于互联网应用程序的脚本语言,JavaScript语言具有很好的表达能力和灵活性,使用JavaScript语言可以提高软件系统的开发效率和开发速度,提高软件系统的可读性和可重用性。
[0003]封装性就是把对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部实现细节,封装有两个含义:一是把对象的全部属性和行为结合在一起,形成一个不可分割的独立单位。对象的属性值(除了公有的属性值)只能由这个对象的行为来读取和修改;二是尽可能隐蔽对象的内部细节,对外形成一道屏障,与外部的联系只能通过外部接口实现。
[0004]JavaScript语言支持动态语法特性:动态类型、隐式类型转换、运行时求解和反射等,由于各种动态语法特性的引入,JavaScript程序违反传统的程序封装性原则,很难使用传统的静态方法进行模块化分析,支持JavaScript程序的增量组合。
【发明内容】
[0005]本发明的目的是针对现有模块组合方法的不足,提供一种增量组合JavaScript程序模块的方法。
[0006]本发明解决其技术问题所采用的技术方案如下:
步骤1.将JavaScript程序模块分为静态模块I和动态模块D:静态模块#不包含动态语法特性,支持程序静态分析;动态模块D包含动态语法特性,必须在运行时进行检查;步骤2.使用信赖-保证方法(rely-guarantee paradigm)定义静态模块#的模块契约,模块契约包含三个部分:使用假设条件(assume condition)定义模块执行的前提条件;使用保证条件(guarantee condition)定义模块执行的期望条件;如果静态模块的执行过程插入动态模块,使用依赖条件(rely condition)约束动态模块的执行过程;
步骤3.使用程序证明方法验证静态模块#是否满足其模块契约(假设条件assume、保证条件guarantee、依赖条件rely),验证静态模块#相对于其模型契约满足正确性具体如下:
3-1.使用程序证明方法验证静态模块#执行前的程序状态满足模块的假设条件 如果满足继续执行步骤3-2,如果不满足则静态模块#不满足其模块契约,返回步
骤2;
3-2.使用程序证明方法验证静态模块#的执行过程满足模块的依赖条件re7_F,如果满足继续执行步骤3-3,如果不满足则静态模块#不满足其模块契约,返回步骤2 ;
3-3.使用程序证明方法验证静态模块#执行后的程序状态确保模块的保证条件guaran tee,如果满足则静态模块M满足其正确性约束,如果不满足则静态模块#不满足其模块契约,返回步骤2;
步骤4.根据静态模块#的模块契约,在动态模块D中插入运行时检查代码:一部分检查代码负责检查模块#的的假设条件assume在依赖条件rely下是否是稳定的,另一部分检查代码负责检查模块M的保证条件assume在依赖条件下rely是否是稳定的,然后执行步骤5 ;
步骤5.运行JavaScript程序的模块,如果执行过程插入动态模块,执行相应的运行时检查代码,如果正确则是正确的模块组合,如果不正确则是错误的模块组合。
[0007]本发明的有益效果如下:
本发明通过分尚动态语法特性,将JavaScript划分为静态模块和动态模块,静态模块增量组合动态模块;使用信赖-保证方法定义JavaScript程序模块的模块约束,能够确保JavaScript程序模块在动态语法特性的影响下依然稳定,支持JavaScript程序模块的增量组合。
【专利附图】
【附图说明】
[0008]图1为本发明使用程序证明方法验证静态模块是否满足其模块契约的流程图。
[0009]图2为本发明使用信赖-保证方法增量组合JavaScript程序的流程图。
【具体实施方式】
[0010]下面结合附图对本发明作进一步说明。
[0011]如图1、图2所示,一种增量组合JavaScript程序模块的方法,具体包括如下步骤:
步骤1.将JavaScript程序模块分为静态模块I和动态模块D:静态模块#不包含动态语法特性,支持程序静态分析;动态模块D包含动态语法特性,必须在运行时进行检查;步骤2.使用信赖-保证方法(rely-guarantee paradigm)定义静态模块#的模块契约,模块契约包含三个部分:使用假设条件(assume condition)定义模块执行的前提条件;使用保证条件(guarantee condition)定义模块执行的期望条件;如果静态模块的执行过程插入动态模块,使用依赖条件(rely condition)约束动态模块的执行过程;
步骤3.如图2所示,使用程序证明方法验证静态模块#是否满足其模块契约(假设条件assume、保证条件guarantee、依赖条件rely),验证静态模块#相对于其模型契约满足正确性具体如下:
3-1.使用程序证明方法验证静态模块#执行前的程序状态满足模块的假设条件 如果满足继续执行步骤3-2,如果不满足则静态模块#不满足其模块契约,返回步
骤2;
3-2.使用程序证明方法验证静态模块#的执行过程满足模块的依赖条件re7_F,如果满足继续执行步骤3-3,如果不满足则静态模块#不满足其模块契约,返回步骤2 ;
3-3.使用程序证明方法验证静态模块#执行后的程序状态确保模块的保证条件guaran tee,如果满足则静态模块#满足其正确性约束,如果不满足则静态模块#不满足其模块契约,返回步骤2; 步骤4.根据静态模块#的模块契约,在动态模块D中插入运行时检查代码:一部分检查代码负责检查模块#的的假设条件assume在依赖条件rely下是否是稳定的,另一部分检查代码负责检查模块M的保证条件assume在依赖条件下rely是否是稳定的,然后执行步骤5 ;
步骤5.运行JavaScript程序的模块,如果执行过程插入动态模块,执行相应的运行时检查代码,如果正确则是正确的模块组合,如果不正确则是错误的模块组合。
[0012]本发明实施方式显示和描述了本发明的基本原理、主要特征及优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
【权利要求】
1.一种增量组合JavaScript程序模块的方法,其特征在于包括如下步骤:步骤1.将JavaScript程序模块分为静态模块I和动态模块D:静态模块#不包含动态语法特性,支持程序静态分析;动态模块D包含动态语法特性,必须在运行时进行检查;步骤2.使用信赖-保证方法定义静态模块#的模块契约,模块契约包含三个部分:使用假设条件定义模块执行的前提条件;使用保证条件定义模块执行的期望条件;如果静态模块的执行过程插入动态模块,使用依赖条件约束动态模块的执行过程; 步骤3.使用程序证明方法验证静态模块#是否满足其模块契约,验证静态模块#相对于其模型契约满足正确性;所述的模块契约包括:假设条件、保证条件和依赖条件; 步骤4.根据静态模块#的模块契约,在动态模块D中插入运行时检查代码:一部分检查代码负责检查静态模块#的假设条件在依赖条件下是否是稳定的,另一部分检查代码负责检查静态模块#的保证条件在依赖条件下是否是稳定的,然后执行步骤5 ; 步骤5.运行JavaScript程序的模块,如果执行过程插入动态模块,执行相应的运行时检查代码,如果正确则是正确的模块组合,如果不正确则是错误的模块组合。
2.如权利要求1所述的一种增量组合JavaScript程序模块的方法,其特征在于验证静态模块#相对于其模型契约满足正确性具体如下: 3-1.使用程序证明方法验证静态模块#执行前的程序状态满足模块的假设条件,如果满足继续执行步骤3-2,如果不满足则静态模块#不满足其模块契约,返回步骤2 ; 3-2.使用程序证明方法验证静态模块#的执行过程满足模块的依赖条件,如果满足继续执行步骤3-3,如果不满足则静态模块#不满足其模块契约,返回步骤2 ; 3-3.使用程序证明方法验证静态模块#执行后的程序状态确保模块的保证条件,如果满足则静态模块#满足其正确性约束,如果不满足则静态模块#不满足其模块契约,返回步骤2。
【文档编号】G06F9/44GK103530119SQ201310472702
【公开日】2014年1月22日 申请日期:2013年10月12日 优先权日:2013年10月12日
【发明者】吴明晖, 吕嘉, 颜晖, 应晶, 陈天洲 申请人:浙江大学城市学院