法律状态公告日
法律状态信息
法律状态
2019-06-11
未缴年费专利权终止 IPC(主分类):G06F11/36 授权公告日:20150401 终止日期:20180627 申请日:20120627
专利权的终止
2015-04-01
授权
授权
2012-12-26
实质审查的生效 IPC(主分类):G06F11/36 申请日:20120627
实质审查的生效
2012-11-07
公开
公开
技术领域
本发明属于计算机软件测试领域,特别是涉及一种JavaScript函数正确性的测试设计、实现和运行方法。
背景技术
JavaScript语言是一种广泛应用于互联网应用程序的脚本语言,JavaScript语言具有很好的表达能力和灵活性,使用JavaScript语言可以提高软件系统的开发效率和开发速度,提高软件系统的可读性和可重用性。
函数是(function)是JavaScript语言的第一类对象,JavaScript程序由一组函数组成,如果能够测试JavaScript函数自身的正确性和JavaScript函数组合的正确性,就可以有效的测试JavaScript程序的正确性。
JavaScript语言支持动态类型(dynamical ly typed)和隐式类型转换(implied type conversion),这两个语法特征使得JavaScript函数的相关变量在运行时类型和行为不确定,影响JavaScript函数自身的正确性和函数组合的正确性。
现有的函数测试方法基于单一的函数契约,只能规约和测试类型确定的函数上下文,不能匹配JavaScript语言的动态类型和隐式类型转换的语法特征,无法有效测试JavaScript函数的正确性。
发明内容
本发明的目的之一是通过设计多个函数契约,匹配目标函数的相关变量在运行时的可能类型和可能值,解决由于动态类型和隐式类型转换引起的JavaScript函数测试困难问题。
本发明的目的之一是通过JavaScript语言的运行时求解函数(eval)将提出的多个函数契约转换为普通的JavaScript程序代码,在不改变现有JavaScript语言语法的前提下,生成相应的测试代码。
本发明的目的之一是使用JavaScript语言的面向方面扩展库jQuery-AOP监控目标JavaScript函数的运行,生成JavaScript函数的运行时监控代码。
本发明的目的之一针对提出的函数契约设计、提出的函数契约测试代码和提出的运行时监控代码,提出一个函数契约检测算法,当目标JavaScript函数被调用时,按照一定的步骤对目标JavaScript函数的正确性进行测试。
为了实现上述目的,本发明所采取的技术方案是:
一种使用多函数契约测试JavaScript函数正确性的方法,其特征在于:包括以下步骤:
步骤S01:根据目标JavaScript函数的函数上下文中相关变量在运行时的可能类型和可能值设计多个函数契约,对于目标函数的类型正确性和行为正确性分别进行规约,
步骤S02:将步骤S01设计得到的多个函数契约转换为普通的JavaScript对象数组,并生成对目标函数运行时的监控代码,
步骤S03:当目标JavaScript函数被调用时,运行时监控代码 根据提出的契约检测算法测试目标JavaScript函数的正确性,在发现特定类型的错误时抛出相应的异常。
前述一种使用多函数契约测试JavaScript函数正确性的方法,其特征在于:步骤S01目标函数设计多个函数契约的具体步骤为:每一个函数契约包含函数名称、类型约束和行为约束三个组成部分,类型约束对目标函数的相关变量的可能类型进行规约,行为约束对目标函数的可能行为进行规约,类型约束和行为约束必须是匹配的。
前述一种使用多函数契约测试JavaScript函数正确性的方法,其特征在于:所述类型约束包含两个部分:类型约束的前置条件和类型约束的后置条件,类型约束的前置条件对目标函数执行前的相关变量的可能类型进行规约,类型约束的后置条件对目标函数执行后的相关变量的可能类型进行规约。
前述一种使用多函数契约测试JavaScript函数正确性的方法,其特征在于:行为约束包括两个部分:行为约束的前置条件和行为约束的后置条件,行为约束的前置条件对目标函数执行前的程序状态进行规约,行为约束的后置条件对目标函数执行后的程序状态进行规约。
前述一种使用多函数契约测试JavaScript函数正确性的方法,其特征在于:步骤S02生成对目标函数运行时的监控代码的具体步骤为:
步骤i01:根据S01步骤中的函数契约设计生成一个JavaScript对象——函数契约对象,函数契约对象由三个部分组成:函数名称、 类型约束数组和行为约束数组,类型约束数组包含这个函数的所有类型约束,行为约束数组包含这个函数的所有行为约束,类型约束数组和行为约束数组是一一对应的;
步骤i02:定义一个函数契约对象数组,将步骤i01生成的所有函数契约对象放在这个数组中;
步骤i03:逐个访问步骤i02生成的函数契约对象数组,解析目标函数的类型约束和行为约束,通过字符串连接运算生成一个字符串,字符串是目标函数的监控代码的字符串形式;
步骤i04:利用JavaScript语言运行时求解函数eval()求解步骤i03生成的字符串,生成目标JavaScript函数的运行时监控代码,这些运行时监控代码使用JavaScript语言的面向方面扩展库jQuery-AOP监控目标函数的运行。
前述一种使用多函数契约测试JavaScript函数正确性的方法,其特征在于:步骤S03测试目标JavaScript函数的正确性具体步骤为:
步骤p01:从函数契约对象数组中取出目标函数的函数契约对象,继续执行步骤p02;
步骤p02:顺序访问函数契约对象的类型约束数组,判断是否还有类型约束没有检测:如果不存在,则说明当前函数上下文无法匹配目标函数的任意一个函数契约,抛出类型异常;如果存在,则从类型约束数组中顺序取出下一个类型约束,继续执行步骤p03;
步骤p03:取出选中类型约束的前置条件,根据函数上下文中相 关变量的实际类型,判断类型约束的前置条件是否满足:如果不满足,则说明当前函数契约不匹配当前的函数上下文,返回步骤p02;如果满足,继续执行步骤p04;
步骤p04:根据选中类型约束在类型约束数组中的索引值,取出对应的函数契约对象中的行为约束数组中的行为约束,继续执行步骤p05;
步骤p05:取出选中行为约束中的前置条件,利用JavaScript语言的运行时求解函数eval()检测行为约束的前置条件是否满足:如果不满足,则发生行为错误,抛出行为异常;如果满足,则继续执行步骤p06;
步骤p06:执行目标JavaScript函数;
步骤p07:判断选中函数契约的类型约束的后置条件是否满足:如果不满足,则发生类型错误,抛出类型异常;如果满足,则进入步骤p08;
步骤p08:利用JavaScript语言的运行时求解函数eval()检测行为约束的后置条件是否满足:如果不满足,则发生行为错误,抛出行为异常;如果满足,则目标JavaScript函数行为正常,判定目标JavaScript函数被正确调用。
本发明的有益效果是:本发明通过提出函数契约设计、提出函数契约测试代码和提出运行时监控方法,并结合一个函数契约检测算法,当目标JavaScript函数被调用时,按照一定的步骤对目标JavaScript函数的正确性进行测试,能够匹配JavaScript语言的动 态类型和隐式类型转换的语法特征,解决了由于动态类型和隐式类型转换引起的JavaScript函数测试困难问题。
附图说明
图1为本发明提出的使用多函数契约测试JavaScript函数正确性的设计、实现和检测过程框图。
图2为本发明提出的将多函数契约设计转换为JavaScript对象数组,并解析JavaScript对象数组生成目标函数运行时监控代码的步骤框图。
图3为本发明提出的运行时函数契约检测算法步骤,在运行时对JavaScript函数的行为正确性进行检测的流程框图。
具体实施方式
下面结合附图对本发明做进一步的描述。
下面结合图1说明本发明提出使用多函数契约进行JavaScript函数测试的设计、实现和检测过程:
一种使用多函数契约测试JavaScript函数正确性的方法,其特征在于:包括以下步骤:
步骤S01:根据目标JavaScript函数的函数上下文中相关变量在运行时的可能类型和可能值设计多个函数契约,对于目标函数的类型正确性和行为正确性分别进行规约,
步骤S02:将步骤S01设计得到的多个函数契约转换为普通的JavaScript对象数组,并生成对目标函数运行时的监控代码,
步骤S03:当目标JavaScript函数被调用时,运行时监控代码 根据提出的契约检测算法测试目标JavaScript函数的正确性,在发现特定类型的错误时抛出相应的异常。
步骤S02中为了规约目标JavaScript函数的类型正确性和相应的行为正确性,为每一个目标函数设计多个函数契约,每一个函数契约包含函数名称、类型约束和行为约束三个组成部分,类型约束对目标函数的相关变量的可能类型进行规约,行为约束对目标函数的可能行为进行规约,类型约束和行为约束必须是匹配的。类型约束包含两个部分:类型约束的前置条件(pre-condition)和类型约束的后置条件(post-condition),类型约束的前置条件对目标函数执行前的相关变量的可能类型进行规约,类型约束的后置条件对目标函数执行后的相关变量的可能类型进行规约;行为约束也包括两个部分:行为约束的前置条件和行为约束的后置条件,行为约束的前置条件对目标函数执行前的程序状态进行规约,行为约束的后置条件对目标函数执行后的程序状态进行规约。
下面结合图2说明如何将目标函数的多个函数契约设计转换为JavaScript对象数组,并生成目标函数的运行时监控代码。
步骤i01:根据[0017]函数契约设计生成一个JavaScript对象——函数契约对象,函数契约对象由三个部分组成:函数名称、类型约束数组和行为约束数组,类型约束数组包含这个函数的所有类型约束,行为约束数组包含这个函数的所有行为约束,类型约束数组和行为约束数组是一一对应的。
步骤i02:定义一个函数契约对象数组,将步骤i01生成的所有 函数契约对象放在这个数组中,定义一个长度可变的数组,具体语句如下:var moduleContracts=new Array(),
步骤i03:逐个访问步骤i02生成的函数契约对象数组,解析目标函数的类型约束和行为约束,通过字符串连接运算生成一个字符串,字符串是目标函数的监控代码的字符串形式,字符串格式按照jQuery-AOP监控JavaScript函数的around语法形式,具体连接过程如下:
其中变量包括:moduleContract是契约对象数组,i是目标函数 对应的契约对象在契约对象数组中的索引,moduleName是目标函数的函数名称;其它都是字符串常量。
步骤i04:利用JavaScript语言的运行时求解函数eval()求解步骤i03生成的字符串,生成目标JavaScript函数的运行时监控代码,这些运行时监控代码使用JavaScript语言的面向方面扩展库jQuery-AOP监控目标函数的运行。
下面结合图3说明本发明提出的契约检测算法,当目标JavaScript函数被调用时,JavaScript语言的面向方面扩展库jQuery-AOP监控到目标函数被调用,然后按照以下步骤测试目标JavaScript函数的行为正确性。
步骤p01:从函数契约对象数组中取出目标函数的函数契约对象,继续执行步骤p02。
步骤p02:顺序访问函数契约对象的类型约束数组,判断是否还有类型约束没有检测:如果不存在,则说明当前函数上下文无法匹配目标函数的任意一个函数契约,抛出类型异常;如果存在,则从类型约束数组中顺序取出下一个类型约束,继续执行步骤p03。
步骤p03:取出选中类型约束的前置条件,根据函数上下文中相关变量的实际类型,判断类型约束的前置条件是否满足:如果不满足,则说明当前函数契约不匹配当前的函数上下文,返回步骤p02;如果满足,继续执行步骤p04。
步骤p04:根据选中类型约束在类型约束数组中的索引值,取出对应的函数契约对象中的行为约束数组中的行为约束,继续执行步骤 p05。
步骤p05:取出选中行为约束中的前置条件,利用JavaScript语言的运行时求解函数eval()检测行为约束的前置条件是否满足:如果不满足,则发生行为错误,抛出行为异常;如果满足,则继续执行步骤p06。
步骤p06:执行目标JavaScript函数。
步骤p07:判断选中函数契约的类型约束的后置条件是否满足:如果不满足,则发生类型错误,抛出类型异常;如果满足,则进入步骤p08。
步骤p08:利用JavaScript语言的运行时求解函数eval()检测行为约束的后置条件是否满足:如果不满足,则发生行为错误,抛出行为异常;如果满足,则目标JavaScript函数行为正常,判定目标JavaScript函数被正确调用。
以上显示和描述了本发明的基本原理、主要特征及优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
机译: 提出了一种用于确定参数的实验方法,该参数是函数的函数,函数的函数,函数的函数,函数的函数,函数的函数,函数的函数。一个功能。
机译: 多变量测试函数生成器,多变量测试函数生成系统,多变量测试函数生成方法和用于生成多变量测试函数的程序
机译: 在网页上实现输入信息和用户订购后,使用JAVASCRIPT函数记录内容以电子邮件方式进行记录的媒体记录方法