一种复杂符号运算的等价变换方法
【专利摘要】本发明涉及一种复杂符号运算的等价变换方法,包括:S1:定义简单运算和复杂运算,其中,简单运算为+、-、×,复杂运算为除去简单运算以外的所有其他运算;S2:依据预设变换原则进行变换及处理。本发明能处理符号表达式中的复杂运算,由于复杂的运算在逻辑上可以转化为简单运算,因此,提出等价变换的方法,将复杂运算转化为逻辑等价的简单运算。即只要能处理简单运算,就能处理复杂运算,从而大大降低了符号表达式的处理难度,然后进一步进行简单符号运算的处理方法,具有处理的简易型。本发明还提出了一种复杂符号运算的等价变换装置。
【专利说明】一种复杂符号运算的等价变换方法
【技术领域】
[0001]本发明涉及软件测试中的符号执行【技术领域】,尤其涉及一种复杂符号运算的等价变换方法。
【背景技术】
[0002]1976年,James C.King等人提出符号执行技术用于判断程序的正确性。符号执行使用符号作为输入,执行程序,输出符号表达式。由于符号可以代表任意输入,因此,每个符号执行的结果等同于大量的、同属于一类的测试用例。这样就可以将所有的测试用例按照符号执行的结果进行划分。如果符号执行的结果全都是正确的,则所有的测试用例都是正确的,从而路径不可达判定和测试用例生成,但无论怎么应用符号执行技术,分析符号执行结果的语义都是一个重要的问题。
[0003]符号执行的结果表现为一组符号表达式,表达式中包含各种运算,例如,+、_、X、/、%、>、>>等等,分析符号表达式的语义非常困难,特别是一些复杂的运算,故现有的方式增加了符号表达式的处理难度。
【发明内容】
[0004]本发明所要解决的技术问题是如何充分降低符号表达式的处理难度的关键问题。
[0005]为此目的,本发明提出了一种复杂符号运算的等价变换方法,包括具体以下步骤:
[0006]S1:定义简单运算和复杂运算,其中,简单运算为+、_、X,复杂运算为除去所述简单运算以外的所有其他运算;
[0007]S2:依据预设变换原则进行变换及处理。
[0008]具体地,所述预设变换原则包括:变换前后逻辑等价以及复杂运算变换为简单运
笪
ο
[0009]进一步地,所述步骤S2进一步包括:利用乘法交换律、乘法分配率、消去相同项、指数表示和/或消去括号的方式将变换后的所述简单运算转换为规范的符号表达式。
[0010]为此目的,本发明提出了一种复杂符号运算的等价变换装置,包括:
[0011]定义模块,用于定义简单运算和复杂运算,其中,简单运算为+、-、X,复杂运算为除去所述简单运算以外的所有其他运算;
[0012]变换及处理模块,用于依据预设变换原则进行变换及处理。
[0013]具体地,所述预设变换原则包括:变换前后逻辑等价以及复杂运算变换为简单运
笪
ο
[0014]进一步地,还包括转换模块,用于利用乘法交换律、乘法分配率、消去相同项、指数表示和/或消去括号的方式将变换后的所述简单运算转换为规范的符号表达式。
[0015]通过采用本发明所公开一种复杂符号运算的等价变换方法,由于复杂的运算在逻辑上可以转化为简单运算,因此,提出等价变换的方法,将复杂运算转化为逻辑等价的简单运算。即只要能处理简单运算,就能处理复杂运算,从而大大降低了符号表达式的处理难度,然后进一步进行简单符号运算的处理方法,具有处理的简易型。本发明还公开了一种复杂符号运算的等价变换装置。
【专利附图】
【附图说明】
[0016]通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
[0017]图1示出了本发明实施例中的一种复杂符号运算的等价变换方法的步骤流程图;
[0018]图2示出了本发明实施例中的一种复杂符号运算的等价变换装置的结构示意图;
[0019]图3示出了本发明实施例中的示例程序片段对应的控制流程图。
【具体实施方式】
[0020]下面将结合附图对本发明的实施例进行详细描述。
[0021]符号执行时一种重要的静态分析技术,即以符号作为输入,模拟程序的执行,并以符号表达式作为输出,在应用符号执行技术时,必然要分析符号表达式的语义,所以必须考虑到表达式中出现的所有运算,而其中的复杂运算更是分析的难点。由于复杂运算在语义上等同于简单运算的组合,所以本文提出等价变换的方法,将复杂运算转换为简单运算,这样只需实现简单运算的处理,就可以处理所有的运算,从而大大降低了符号表达式的处理难度。
[0022]为了更好的理解与应用本发明提出的一种复杂符号运算的等价变换方法,下面以图示进行示例。
[0023]如图1所示,本发明提供了一种复杂符号运算的等价变换方法,包括具体以下步骤:
[0024]步骤S1:定义简单运算和复杂运算,其中,简单运算为+、_、X,复杂运算为除去简单运算以外的所有其他运算;
[0025]步骤S2:依据预设变换原则进行变换及处理。其中,预设变换原则包括:变换前后逻辑等价以及复杂运算变换为简单运算。
[0026]进一步地,步骤S2进一步包括:利用乘法交换律、乘法分配率、消去相同项、指数表示和/或消去括号的方式将变换后的简单运算转换为规范的符号表达式。
[0027]如图2所示,本发明提供了一种复杂符号运算的等价变换装置,包括:定义模块201以及变化及处理模块202。
[0028]具体地,定义模块201用于定义简单运算和复杂运算,其中,简单运算为+、_、X,复杂运算为除去简单运算以外的所有其他运算;变换及处理模块202用于依据预设变换原则进行变换及处理。其中,预设变换原则包括:变换前后逻辑等价以及复杂运算变换为简单运算。
[0029]进一步地,还包括转换模块203用于利用乘法交换律、乘法分配率、消去相同项、指数表示和/或消去括号的方式将变换后的简单运算转换为规范的符号表达式。
[0030]为了更好的理解与应用本发明提出的一种复杂符号运算的等价变换方法,以C语言为例,下表为符号表达式中的所有复杂运算对应的变换规则,本示例为但不限于本发明所提出的方法。
[0031]其中,X,Y都是符号表达式:
[0032]
【权利要求】
1.一种复杂符号运算的等价变换方法,其特征在于,包括具体以下步骤: S1:定义简单运算和复杂运算,其中,简单运算为+、-、X,复杂运算为除去所述简单运算以外的所有其他运算; S2:依据预设变换原则进行变换及处理。
2.如权利要求1所述的方法,其特征在于,所述预设变换原则包括:变换前后逻辑等价以及复杂运算变换为简单运算。
3.如权利要求1所述的方法,其特征在于,所述步骤S2进一步包括:利用乘法交换律、乘法分配率、消去相同项、指数表示和/或消去括号的方式将变换后的所述简单运算转换为规范的符号表达式。
4.一种复杂符号运算的等价变换装置,其特征在于,包括: 定义模块,用于定义简单运算和复杂运算,其中,简单运算为+、_、X,复杂运算为除去所述简单运算以外的所有其他运算; 变换及处理模块,用于依据预设变换原则进行变换及处理。
5.如权利要求4所述的装置,其特征在于,所述预设变换原则包括:变换前后逻辑等价以及复杂运算变换为简单运算。
6.如权利要求3所述的装置,其特征在于,还包括转换模块,用于利用乘法交换律、乘法分配率、消去相同项、指数表示和/或消去括号的方式将变换后的所述简单运算转换为规范的符号表达式。
【文档编号】G06F9/44GK103914301SQ201410119795
【公开日】2014年7月9日 申请日期:2014年3月27日 优先权日:2014年3月27日
【发明者】黄俊飞, 李峰, 宫云战, 王雅文, 金大海 申请人:北京邮电大学