一种c语言核心语句转换到一阶公式的方法

文档序号:6585243阅读:314来源:国知局
专利名称:一种c语言核心语句转换到一阶公式的方法
技术领域
本发明涉及基于R演算的软件测试机械化的前期技术中,一种把C语言核心语句 转换到一阶公式的方法。
背景技术
软件测试是软件开发不可缺少的重要环节,只有经过严格测试的软件才能被使 用。学术界和产业界研制了大量测试工具,包括对规格说明的测试、对代码的黑盒、白盒测 试等等。但到目前为止,测试样例的设计和对软件错误的定位和修改,仍需大量人力投入, 测试质量仍与测试人员的经验紧密相关,软件测试仍被视为一门“工艺”技术。为了提高软 件测试的效率,尤其是提高软件错误定位的准确性和效率,在国内外开展了大量的研究工 作。主要有程序语义理论、软件需求工程技术、基于模型检查的软件测试技术和工具、程序 切片技术以及R演算系统理论。R演算系统由李未院士于1994年在LNCS发表的论文中首次提出。其提出在软件 需求说明层次,即在一阶语言中,建立错误定位和需求说明修正的形式演算系统。之后,围 绕软件测试过程的形式化、测试样例的设计、软件错误的定位和修正的机械化等问题,展开 了深入的研究。对R演算系统进行了实质性改进,取得了原创性理论成果。理论上证明了 软件测试机械化的可能。R演算系统是一个关于一阶语言的形式演算系统,它所处理的都是一阶语言中由 逻辑连接词符号和量词符号组成的公式。所以要构建基于R演算的软件测试机械化系统, 首先必须将我们所针对的目标形式语言的语句转换为R演算所能处理的一阶语言的公式。 事情需要从最基本的做起,所以研究一种C语言核心语句转换到一阶公式的方法,对于软 件测试的机械化,有着重要的意义。

发明内容
本发明要解决的技术问题填补了现有技术的空白,提供一种C语言核心语句转 换到一阶公式的方法。基于c程序核心语句的一种语义解释,把程序语言转换成R演算可 以处理的一阶公式,为软件测试的机械化提供必要的技术支持。本发明采用的技术方案一种C语言核心语句转换到一阶公式的方法,其特征在 于步骤如下(1)输入C语言程序,该程序仅由C语言核心语句构成,即只涉及赋值语句、条件语 句、while语句和过程调用语句,各语句之间的连接使用顺序语句,同时判断条件只是单个 条件,并且只跟零作比较。此外程序中的变元和常元都是定义在自然数集合上,并且涉及的 运算只包括加、减和乘。使用现有的编译技术统计程序中使用的不同变元的个数k,给这些 变元按字典排序法排序,记为v= {、,…,vk},所述v= {、,…,vk}为按字典排序法排序 的程序中所使用的不同变元的有序集合;(2)全局变量count用来标记当前已经使用过的有序状态变元集合的个数,初始 值为0 ;全局变量While_Coimt用来标记当前已经处理过的while语句个数,初始值为0 ;变量CurFormula用来存储当前的一阶公式,初始值为空;变量NewFormula用来存储返回的新 公式,初始值为空;(3)输入程序的第一条语句;(4)判断当前输入的语句的类型,根据判断结果调用相应的转换模块,包括赋值语 句转换模块,条件语句转换模块,while语句转换模块,过程调用语句转换模块,各模块根据 相应语句的语义解释进行转换,并返回生成的新公式NewFormula ;(5)处理完当前输入的语句后,使用顺序语句规则,把当前返回的新公式 NewFormula与当前的一阶公式CurFormula合并,结果存储在CurFormula中。判断程 序是否结束,若没有,则输入程序的下一条语句,然后转到步骤(4),否则,返回当前的 CurFormula。1、根据本发明的又一个方面,其中步骤(2)中的全局变量count将作为生成有序 状态变元集合的函数GenSymbolO的参数,以确保生成的有序状态变元集合跟之前产生的 有序状态变元集合都不同,以保证生成的公式中使用的变元不会混淆;所述有序状态变元 集合的不同指相应位置上的元素均不同。2、根据本发明的又一个方面,其中所述的步骤(2)中的全局变量while_COimt将 作为生成有序变量集合的函数GenVarO的参数,以确保生成的有序变量集合跟之前产生 的有序变量集合都不同,以保证对于不同的while语句,其对应的矩阵数m,循环次数1,中 间存储状态标记j均不同。3、根据本发明的又一个方面,其中所述的步骤(4)进一步包括A.转换赋值语句的模块ASSign(a ‘,x)Al. X作为赋值语句对应的一阶公式的初始有序状态变元集合;A2.对count的值加1,用来生成新的有序状态变元集合;A3.调用函数GenSymbol (count),产生赋值语句对应的一阶公式的终止有序状态 变元集合,&—};A4.根据赋值语句的语义,如果赋值语句是Vi = e,那么对应于赋值语句的公式如 下,其中= v(COtt"',即此时的状态变元集合相应位置上的变元
另外,表达式e在一阶语言中的表示(e)T归纳定义如下,其中S是后继函数,Sm0表示0的 m次后继. B.转换条件语句的模块C0nditi0n(a ‘,x)Bl. t作为条件语句对应的一阶公式的初始有序状态变元集合;B2.在条件语句形式为if(0 < Vi)then a else a 2的前提下,我们递归地得到指令、和%对应的一阶公式和,其中τ ‘是、和α 2中使用有序状态
变元集合个数多的那一个对应的终止状态变元集合。则对应于此条件语句的公式为
((O < (V1Ot) "> Tai (r,r')) Λ Γ(0 < (Vi)r) -> Ta2 (Τ, τ 丨)).C.转换 while 语句的模块 While(a ‘,τ)Cl.在while语句为while 0< Vi do a i时,其对应的一阶公式由下述四步得到, 首先使用函数GenVar (while_count)生成表征此条while语句的变量矩阵数mwhile。_t,循 环次数1 while_count, 中间存储状态标记 Jwhile_count >C2.循环体循环过程的表示F^ ip^whne^count 5 ^while_count) — ^Jwhile__count ^Jwhile__count < ^whiIe_couni “>
(G(r氣娜 ο, jwMe_coum,τJλ0,SjwMle_comt,rJ λ0 < (ν,.\)λTai(zu,rj)其中(ν) τ表示集合ν在有序状态变元集合τ下的有序排列,S卩(V1) τ··· (Vk)1 ; 为循环体Q1在初始和终止状态变元集合分别为%和、时递归得到的的一阶
公式;公式 G(m,i,τ) =C(m,i,S0,(V1) τ) Λ…Λ C(m,i,Sk0,(vk) τ)为 k 个公式的合取; 而 C(m,i,j,z) = B(m,i · SkO+j+SO, z);其中 B(x,y, z)是函数 ζ = β (χ, y)在一阶语言 中的表示,而函数ζ = β (X,y)使得对任意一个自然数中的序列彻, ,…,^v1,存在一个 自然数a使得β (a, i) = a,;C3.循环体初始状态的表示τ作为while语句对应的一阶公式的初始有序状态 变元集合,则有尽脑—=Q,τ),公式意义同上;C4.循环体终止状态的表示对count的值加1,调用函数GenSymbo 1 (count), 产生while语句对应的一阶公式的终止有序状态变元集合τ ‘,则有 F3(rnwhile_countJwhi!e_count,T') =‘ OJwhilecomtiT^A,< (Vi)r,),公式意义同上;C5.循环次数及变元个数的表示
权rn_e圓,Jwhilec则)= B(Sm--_ 丨C6.综合上述四步,可以得到循环语句对应的一阶公式
^mwhile_count ^ ^while_count (^l imwhile_count,^while_count)八巧 i^while_count,
Λ F3 ^mwMe_count,^while_count,7 )八巧 ^mwhile_count,Khile_count ))'D.转换过程调用语句的模块ProCedure(a ‘,τ)Dl.在过程调用语句为F(V\{Vi},Vi),其中Vi为输出参数,其过程体为Ci1的前提 下,递归地得到过程体a !对应的一阶公式为&0",^);D2.对count的值加1,调用函数GenSymbol (count),产生赋值语句对应的一阶公 式的终止有序状态变元集合τ “;D3.过程调用语句对应的一阶公式为
其中{V \ v,}r. = {v \ V,丄表示变量集合v的元素中除Vi外的对 应位置在两个有序状态 变元集合下的表示相等。4、根据本发明的又一个方面,其中所述的步骤(5)进一步包括A.设置局部变量count',由于程序包含递归调用,所以count'只在它所属于的 那一阶段起作用;B.如果count' = 0,表明此时返回的公式为在此阶段生成的第一个公式,所以 CurFormula = NewFormula ;C.如果count'兴0,表明此时返回的公式已经不是在此阶段生成的第一个公式,
所以要与前面的公式根据顺序语句规则进行合并,所以有 此时的t为本阶段开始时的初始状态变元集合。


图1为本发明的一种C语言核心语句转换到一阶公式的方法的基本流程图。
具体实施例方式下面参考附图,对本发明的实施例进行详细的说明。首先对本发明的方法原理进行说明。一个程序状态由当前指令和当前的存储状态决定。一条语句的执行使当前程序状 态转换为一个新的程序状态,所以语句的计算行为可以用这两个程序状态之间的转换关系 来定义。如果我们可以找到存储状态和程序状态转换关系式在一阶语言中的表示,那我们 就可以找到语句在一阶语言中的表示,也就是把程序语句转换为一阶公式。本发明的方法 根据程序的这种语义解释,使用不同的有序状态变元集合表示不同的存储状态,使用语句 的初始状态变元与终止状态变元之间的关系表示程序状态转换关系式,由此得到程序语句 对应的一阶公式。具体而言,本发明所提出的方法的基本流程如图1所示。本发明主要包括的核心思想根据程序语义的一种解释,把赋值语句、条件语句、 while语句和过程调用语句根据相应的语义解释,使用相应的规则转换为对应的一阶公式, 然后根据顺序语句规则,把得到的该条语句对应的公式同之前得到的公式进行合并。其中 赋值语句的转换可以看成是原子转换,其他语句的转换均要使用赋值语句的转换。在描述方法前先定义如下变量及方法1. v = {Vl,…,vk}为按字典排序法排序的程序中所使用的不同变量的有序集合;2. t以及T带有上下标,比如飞‘,X “ , T u,、等表示有序状态变元集合,上 下标的不同表示有序状态变元集合的不同;3.全局变量count用来标记当前已经使用过的有序状态变元集合的个数,初始值 为0;
4.方法 GenSymbol(count)定义如下1) Set T =',…,vckount};2) Return x ;5. (v,)r 表示变量Vi在有序状态变元集合t下在一阶语言中的表示;6. (v) T表示集合v在有序状态变元集合t下的有序排列,即(Vl) T…(vk) T ;7. {V\v山:山表示变量集合v的元素中除Vi外的对应位置在两个有序状态 变元集合下的表示相等;8.算数表达式e在有序状态变元集合T下在一阶语言中的表示(e) T归纳定义 如下其中s是后继函数,Sm0表示0的m次后继; 9.全局变量while_COunt用来标记当前已经处理过的while语句的个数,初始值 为0;10. mwhile count表示第while_count个while语句对应的变量矩阵数,lwhile—。_t表示 此循环语句对应的循环次数,jwhil6—。_t表示此循环语句对应的中间存储状态标;11.方法 GenVar (count)定义如下1) Set ff = {mwhile
_count ‘ lwhile—count,Jwhile_count-^ 2) return ff ;12.局部变量CurFormula用来存储本阶段当前的一阶公式,初始值为空;13.局部变量NewFormula用来存储本阶段返回的新公式,初始值为空;14.Ta(x, X ‘)表示语句a在初始和终止状态变元集合分别为t和T ‘时对 应的一阶公式;15.公式 G(m,i,x) = C(m, i, SO, (v) T)八…A C(m,i,Sk0,(vk) T)表示 k 个公 式的合取;而公式 C(m,i,j,z) =B(m,i Sk0+j+S0,z);其中 B(x,y,z)是函数 z = 3 (x, y)在一阶语言中的表示,而函数z = 0 (x,y)使得对任意一个自然数中的序列aQ,ai,…, an_i,存在一个自然数a,使得0 (a, i) = a,;16.方法 TransForm( a )定义如下1) Formula CurFormula, NewFormula ;2) count ‘ = 0 ;3)while(a ‘ = ReadStatement ()) ! = EOF4)HandleStatement(a ‘,count');5) count ‘ ++ ;6)endwhile7)Return CurFormula;其中ReadStatement ()用于读入a中的下一条赋值语句、条件语句、while语句或过程调用语句;17.方法 HandleStatement(a ‘,count')的定义如下1) τ = GenSymbol (count);2) switch (a ‘)3) Case assignstatement :NewFormula = Assign (α ‘ , τ) ;break ;4) Case ifstatement :NewFormula = Condition (α ‘ , τ) ;break ;5) Case whi lestatement :NewFormula = While (α ' , τ) ;break ;6) Case cal 1 statement :NewFormula = Procedure ( α ‘,τ) ;break ;7)endswitch8) if count' == Othen9) CurFormula = NewFormula10)else11) CwFonmda =彐(v)r (CurFormula λ NewFormula)12)endif其中 Assign (α ‘ , τ ) , Condition (α ‘ , τ)、While (α ‘ , τ )禾口 Procedure ( α ‘,τ )分别为转换赋值语句、条件语句、while语句和过程调用语句为一阶 公式的模块。本发明的方法描述如下(1)输入C语言程序,使用现有的编译技术统计程序中使用的不同变元的个数k, 给这些变元按字典排序法排序,记为V= Iv1,…,Vk},所述V= Iv1,…,Vk}为按字典排序 法排序的程序中所使用的不同变元的有序集合;(2)对整个程序,调用方法TransForm(Ci),即逐条输入语句,对当前输入的语句, 调用方法HandleStatementh ‘ , count'),判断语句的类型,根据判断结果调用相应的 转换模块,包括赋值语句转换模块ASSign(a ‘,τ),条件语句转换模块C0nditi0n(a ‘,
τ),while语句转换模块While(a ‘,τ ),过程调用语句转换模块Procedure ( a ‘,τ), 各模块返回生成的新公式NewFormula,此公式即是当前语句对应的一阶公式;(3)处理完当前语句后,使用顺序语句规则,把当前返回的新公式NewFormula与 当前一阶公式CurFormula合并,结果存储在CurFormula中,然后转到步骤(2);(4)需要详细说明的是步骤(2)中涉及的四种语句转换模块A.转换赋值语句的模块ASSign(a ‘,τ)Al. τ作为赋值语句对应的一阶公式的初始有序状态变元集合;Α2.对count的值加1,用来生成新的有序状态变元集合;A3.调用方法GenSymbol (count),产生赋值语句对应的一阶公式的终止有序状态 变元集合 r’ = {Vl_,A4.根据赋值语句的语义,如果赋值语句是Vi = e,那么对应于赋值语句的公式如 下 B.转换条件语句的模块Conditi0n(a ‘,x)Bl. X作为条件语句对应的一阶公式的初始有序状态变元集合;B2.在条件语句形式为if(0 < Vi)then else a 2的前提下,我们递归调用 方法TransForm( a 和TransForm( a 2),得到指令a :和a 2对应的一阶公式?;(r,T)和
其中t ‘的获得需要重点考虑。由于在分别处理a工和a2中使用有序状态变元 集合的个数可能不一样,就会导致在相同的初始状态变元集合的前提下,最后的终止状态 变元集合不一样,而条件语句作为一个基本语句,其终止状态变元集合应该唯一;同时还要 考虑的一个问题是count是一个全局变量,调用方法TransForm ( a )后,其值已经改变,而 TransForm(a2)需要的仍是调用TransForm( a )之前的count值。所以我们采用多设置 几个变量的方法,用countl记录调用方法TransForm (a》之前的count值,用Acountl记 录TransForm ( a 使用的状态变元集合的个数,跟coimtl —起就可以确定a 的终止状态 变元集合。在调用TransForm( a 2)之前,重置count的值,即令count = count 1 ;同样,用 count2 记录调用方法 TransForm( a 2)之前的 count 值,用 A count2 记录 TransForm( a 2) 使用的状态变元集合的个数,跟coimt2 —起就可以确定a 2的终止状态变元集合;通过比 较Acountl和A count2的大小,根据其中值大的那一个就可以确定条件语句最终的终止 状态变元集合t ‘。B3.得到对应于此条件语句的公式为
((0 < (V,),) -> Tai (r,o) A r(0 < (v;)7) Tai (r,r )).C.转换 while 语句的模块 While(a ‘,t)CI.在while语句为while 0<Vi do a :时,其对应的一阶公式由下述四步得到, 首先使用函数GenVar (while_count)生成表征此条while语句的变量矩阵数mwhile。_t,循 环次数1 while_count, 中间存储状态标记 Jwhile_count >C2.循环体循环过程的表示将当前的count值加1,调用方法GenSymbol (count) 产生循环体a i的初始状态变元集合。然后调用方法TranSF0rm(ai),得到循环体在初 始和终止状态变元集合分别为、和、时对应的一阶公式、(、,。),则循环体的循环过程 的表示为 F4 (jnwhiie_count,^whik_count) = ^Jwhile_count Uwhile_counl < ^while_count 彐(V)r 彐
哪0, jwhile_coum ,tm)a G(Sm— 0, Sj—, rw) A 0 < 0;入)A 7; (ru,rj);C3.循环体初始状态的表示t作为条件语句对应的一阶公式的初始有序状态变 元集合,则有巧( A,7e, ,,r) =0,0,r) ’C4.循环体终止状态的表示对count的值加1,调用函数GenSymbo 1 (count), 产生赋值语句对应的一阶公式的终止有序状态变元集合T ‘,则有
(mwhile_count ‘ Khile^count ->T ) = G{S ~ ^Jwhile_count^T ) A< (V/ )r') ,C5.循环次数及变元个数的表示
F} (rnwhile—cmmt, /■一 ) = B{Sm— 0’ 0, 丨+10) a B(Sm— 0,50, Sk 0);
C6.综合上述四步,可以得到while语句对应的一阶公式
while count^^while countcount ‘ ^whilecount 9 '
while count,^while count ? ) ^ (爪whiie coun£,^while count )) D.转换过程调用语句的模块ProCedure(a ‘,x)D1.在过程调用语句为F(V\{Vi},Vi),其中Vi为输出参数,其过程体为%的前提 下,通过调用方法TransF0rm(ai),得到过程体在初始和终止状态变元集合分别为T和 飞‘时对应的一阶公式0,0 ,D2.由于过程调用语句只是改变变量Vi的值,而其他变量的值应该保持不变,所以 过程体a工的终止状态变元集合T ‘不是过程调用语句的终止状态变元集合。过程调用语 句的终止状态变元集合中的变量Vi对应的状态变元跟过程体a !的终止状态变元集合中 Vi对应的状态变元一样,而其他变元应该跟过程调用语句的初始状态变元一样。所以要对 count的值加1,调用函数GenSymbol (count),产生过程调用语句对应的一阶公式的终止有 序状态变元集合t “;
D3.此时,过程调用语句的表示为 (5)还需要详细说明的是步骤(3)中合并公式的方法A.设置局部变量count',由于程序包含递归调用,所以count'只在它所属于的 那一阶段起作;B.如果count' = 0,表明此时返回的公式为在此阶段生成的第一个公式,所以 CurFormula = NewFormula ;C.如果count'兴0,表明此时返回的公式已经不是在此阶段生成的第一个公式,
所以要与前面的公式根据顺序语句规则进行合并,所以有 此时的t为本阶段开始时的初始状态变元集合。综上所述,根据程序语义的一种解释,四种语句赋值语句、条件语句、while语句 和过程调用语句转换为一阶公式的方法是本发明的核心。通过顺序语句转换规则,可以把 各个语句转换成的一阶公式进行合并,最终把整个程序转换成一阶公式。此方法把C语言 核心语句转换到一阶公式,为基于R演算的软件测试机械化提供了前期技术支持。对于本领域的普通技术人员来说可显而易见的得出其重要作用和应用前景。因 此,具有更广方面的本发明并不局限于这里所示出的并且所描述的具体说明及示例性实施 例。因此,在不脱离由随后权利要求及其等价体所定义的一般发明构思的精神和范围的情 况下,可对其作出各种修改。
权利要求
一种C语言核心语句转换到一阶公式的方法,其特征在于步骤如下(1)输入C语言程序,该程序仅由C语言核心语句构成,即只涉及赋值语句、条件语句、while语句和过程调用语句,各语句之间的连接使用顺序语句,同时判断条件只是单个条件,并且只跟零作比较;此外程序中的变元和常元都是定义在自然数集合上,并且涉及的运算只包括加、减和乘;使用现有的编译技术统计程序中使用的不同变元的个数k,给这些变元按字典排序法排序,记为v={v1,…,vk},所述v={v1,…,vk}为按字典排序法排序的程序中所使用的不同变元的有序集合;(2)全局变量count用来标记当前已经使用过的有序状态变元集合的个数,初始值为0;全局变量while_count用来标记当前已经处理过的while语句个数,初始值为0;变量CurFormula用来存储当前的一阶公式,初始值为空;变量NewFormula用来存储返回的新公式,初始值为空;(3)输入程序的第一条语句;(4)判断当前输入的语句的类型,根据判断结果调用相应的转换模块,包括赋值语句转换模块,条件语句转换模块,while语句转换模块,过程调用语句转换模块,各模块根据相应语句的语义解释进行转换,并返回生成的新公式NewFormula;(5)处理完当前输入的语句后,使用顺序语句规则,把当前返回的新公式NewFormula与当前的一阶公式CurFormula合并,结果存储在CurFormula中。判断程序是否结束,若没有,则输入程序的下一条语句,然后转到步骤(4),否则,返回当前的CurFormula。
2.根据权利要求1的C语言核心语句转换到一阶公式的方法,其特征在于,步骤(2)中 的全局变量count将作为生成有序状态变元集合的函数GenSymbol ()的参数,以确保生成 的有序状态变元集合跟之前产生的有序状态变元集合都不同,以保证生成的公式中使用的 变元不会混淆;所述有序状态变元集合的不同指相应位置上的元素均不同。
3.根据权利要求1的C语言核心语句转换到一阶公式的方法,其特征在于,所述的步骤 (2)中的全局变量while_COimt将作为生成有序变量集合的函数GenVarO的参数,以确保 生成的有序变量集合跟之前产生的有序变量集合都不同,以保证对于不同的while语句, 其对应的矩阵数m,循环次数1,中间存储状态标记j均不同。
4.根据权利要求1的C语言核心语句转换到一阶公式的方法,其特征在于,所述的步骤 (4)进一步包括A.转换赋值语句的模块Assign^ ‘,x)Al. X作为赋值语句对应的一阶公式的初始有序状态变元集合;A2.对count的值加1,用来生成新的有序状态变元集合;A3.调用函数GenSymbol (count),产生赋值语句对应的一阶公式的终止有序状态变元 集合r’ = {Vi_,…A4.根据赋值语句的语义,如果赋值语句是Vi = e,那么对应于赋值语句的公式如下, 其中(v丄,=v;0""',即此时的状态变元集合相应位置上的变元 ((n), ^(vO^A-AC^X. ^(V.O^A^),A((vw另外,表达式e在一阶语言中的表示(e)T归纳定义如下,其中S是后继函数,Sm0表示 0的m次后继. B.转换条件语句的模块C0nditi0n(a‘,τ)Bi. τ作为条件语句对应的一阶公式的初始有序状态变元集合; Β2.在条件语句形式为if (0< Vi) then Ci1 else α 2的前提下,我们递归地得到指令α工 和%对应的一阶公式 ;(7,0和7;20,0,其中τ ‘是、和Ci2中使用有序状态变元集合 个数多的那一个对应的终止状态变元集合;则对应于此条件语句的公式为 C.转换while语句的模块While(a‘,τ)Cl.在while语句为while 0 < Vi do a i时,其对应的一阶公式由下述四步得到,首 先使用函数GenVar (while_COimt)生成表征此条while语句的变量矩阵数Hiwhile。_t,循环 次数 lwhile_.count ‘ 中间存储状态标记 Jwhile_count >C2.循环体循环过程的表示 其中(ν)τ表示集合V在有序状态变元集合τ下的有序排列,S卩(νι)τ…(vk),; ?;氏,为循环体Q1在初始和终止状态变元集合分别为%和、时递归得到的的一阶 公式;公式 G(m,i,τ) =C(m,i,S0,(V1) τ) Λ…Λ C(m,i,Sk0,(vk) τ)为 k 个公式的合取; 而 C(m,i,j,z) = B(m,i · SkO+j+SO, z);其中 B(x,y, z)是函数 ζ = β (χ, y)在一阶语言 中的表示,而函数ζ = β (X,y)使得对任意一个自然数中的序列彻, ,…,^v1,存在一个 自然数a使得β (a, i) = a,;C3.循环体初始状态的表示τ作为while语句对应的一阶公式的初始有序状态变元 集合,则有 公式意义同上;C4.循环体终止状态的表示对count的值加1,调用函数GenSymbo 1 (count), 产生while语句对应的一阶公式的终止有序状态变元集合τ ’,则有 C5.循环次数及变元个数的表示 C6.综合上述四步,可以得到循环语句对应的一阶公式 D.转换过程调用语句的模块Procedure^‘,τ)D1.在过程调用语句为F(V\{Vi},Vi),其中Vi为输出参数,其过程体为a工的前提下, 递归地得到过程体a !对应的一阶公式为K^r’);D2.对count的值加1,调用函数GenSymbol (count),产生赋值语句对应的一阶公式的 终止有序状态变元集合T “;D3.过程调用语句对应的一阶公式为 其中{v\v,}, 二{vW丄表示变量集合v的元素中除Vi外的对应位置在两个有序状态变 元集合下的表示相等。
5.根据权利要求1的C语言核心语句转换到一阶公式的方法,其特征在于,所述的步骤 (5)进一步包括A.设置局部变量count',由于程序包含递归调用,所以count'只在它所属于的那一 阶段起作用;B.如果count'=0,表明此时返回的公式为在此阶段生成的第一个公式,所以 CurFormula = NewFormula ;C.如果count'兴0,表明此时返回的公式已经不是在此阶段生成的第一个公式,所以 要与前面的公式根据顺序语句规则进行合并,所以有 此时的T为本阶段开始时的初始状态变元集合。
全文摘要
一种C语言核心语句转换到一阶公式的方法(1)使用现有的编译技术统计输入的C语言程序中使用的不同变量,将用于有序状态变元集合的生成;(2)逐条输入语句,判断语句的类型,并根据判断结果调用相应的转换模块,包括赋值语句转换模块,条件语句转换模块,while语句转换模块,过程调用语句转换模块,各模块根据相应语句的语义解释进行转换,并返回生成的新公式NewFormula;(3)处理完该条语句后,使用顺序语句规则,把得到的新公式NewFormula同当前公式CurFormula合并,结果存储在CurFormula中,然后转到步骤2。本发明根据程序语义的一种解释方法,把C语言核心语句转换成一阶公式,为基于R演算的软件测试机械化提供了前期的技术支持。
文档编号G06F9/44GK101876941SQ20091024303
公开日2010年11月3日 申请日期2009年12月22日 优先权日2009年12月22日
发明者余韡, 刘祥龙, 李未, 李贺, 罗杰 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1