源代码等价性验证装置以及源代码等价性验证方法_3

文档序号:9650596阅读:来源:国知局
号执行实施判定部1700接受结构比较结果1008,在结构比较结果1008中,若结构为“一致”,则向等价非等价输出步骤S105转移,通过输出部1500输出验证结果0004来作为源代码等价。
[0129]在输出了源代码等价这样的结果时,用户能够判定为进行的重构是正当的。
[0130]符号执行实施判定部1700接受结构比较结果1008,在结构比较结果1008中,若结构为“不一致”,则生成符号执行开始指示1009。
[0131]接着,进行源代码信息的抽象化(S1044)。
[0132]在此,源代码信息的抽象化表示针对各个源代码信息进行了符号执行时,在维持赋予相同输入而输出相同结果的状态下,简化源代码信息。
[0133]接着,对抽象化后的重构前的源代码信息和抽象化后的重构后的源代码信息进行符号执行(S1045)。
[0134]然后,逻辑性比较符号执行的结果(符号执行一览),在对相同输入得到相同结果时,判定为原始的源代码等价,在输出(符号执行一览)不同时,判定为原始的源代码非等价(S1046)而进行等价非等价的结果输出。
[0135]比较重构前和重构后的符号执行的结果即符号执行一览,通过使用SAT解法或SMT解法或被称为决定手续等的方法来进行逻辑上是否等价的判定。针对构成符号执行一览的各叶节点求出其路径制约和变量状态的逻辑积,通过计算它们的逻辑和能够生成用于表现符号执行一览的逻辑式。通过SAT解法判定由重构前的符号执行一览生成的逻辑式和由重构后的符号执行一览生成的逻辑式等价,由此能够判定符号执行一览的等价性。
[0136]在此,当输出源代码为等价的结果时,用户可以判断为所进行的重构是正当的,当输出源代码为非等价的结果时,用户可以判断为所进行的重构是不当的。然后,用户在判断为所进行的重构不当时,能够重新评价所进行的重构,开始修正为正当的作业。
[0137]符号执行验证处理部1400接受符号执行开始指示1009并开始源代码抽象化步骤S1044。在源代码抽象化步骤S1044中,使用存储在存储部1600的抽象化DB1602中的抽象化信息1010,接受重构前正规化源代码信息和变更位置信息1004并进行抽象化,生成重构前抽象化源代码信息1403。此外,在源代码抽象化步骤S1044中,使用存储在存储部1600的抽象化DB1602中的抽象化信息1010,接受重构后正规化源代码信息和变更位置信息1004并进行抽象化,生成重构后抽象化源代码信息1404。在此,存储在抽象化DB中的抽象化信息1010是与以下的处理方法相关的信息:针对正规化后的源代码信息置换与变更位置信息1004无关的位置和循环或递归调用的位置,在进行之后的符号执行步骤S1045时,变换为不对与变更位置信息1004无关的位置和循环或递归调用的位置进行符号执行。
[0138]在符号执行步骤S1045中,在符号执行部1402对重构前抽象化源代码信息1403和重构后抽象化源代码信息1404进行符号执行,分别得到重构前符号执行结果1405和重构后符号执行结果1406。在符号执行结果比较步骤S1046中,在符号执行结果比较部1407比较判定重构前符号执行结果1405与重构后符号执行结果1406是否相同。在符号执行结果比较部1407中,在重构前符号执行结果1405与重构后符号执行结果1406相同的情况下,向等价非等价输出步骤S105转移,作为等价而向输出部1500输出验证结果0004。在符号执行结果比较部1407中,在重构前符号执行结果1405与重构后符号执行结果1406不同的情况下,向等价非等价输出步骤S105转移,作为非等价而向输出部1500输出验证结果0004ο
[0139]根据本实施方式的源代码等价性验证装置,在进行计算量容易爆发的符号执行前,分别对重构前后的各个源代码信息进行正规化后进行结构比较,在判定为成为其原始的源代码等价的情况下,不进行符号执行。
[0140]此外,通过结构比较判定为成为原始的源代码非等价的情况下,进行源代码信息的抽象化,缩减源代码信息后进行符号执行,因此能够削减符号执行的计算。
[0141]实施例2
[0142]以下,参照上述图5,使用图11至图14,对本发明一实施方式的源代码等价性验证装置的处理的具体例进行说明。该例子是通过图5的符号执行实施判定S1047的处理,判定为源代码信息即结构图的结构一致的例子。
[0143]图11是表示重构前后的源代码的例子的图(之一)。
[0144]图12是表示与重构前后的源代码对应的源代码信息的例子的图(之一)。
[0145]图13是表示针对源代码信息进行的正规化的例子的图。
[0146]图14是表示用于显示通过结构比较对正规化后的结构图进行了等价性验证而得的结果的输出部的显示例的图。
[0147]在该例子中,作为针对源代码的重构,说明进行基于重构模式提取方法(Extractmethod)的重构的情况。重构模式提取方法是在多个位置进行相同处理的源代码中,将该相同处理作为函数来提取,将在多个位置进行相同处理的位置置换为向所提取的函数的调用,对存在于多个位置的源代码进行共有化的重构模式。也可以将该重构模式提取方法用作在一个函数中源代码的记述量较多的情况下,为了提高函数的可读性,将该函数内的源代码的一部分作为其他函数提取的重构。
[0148]以下,根据图11说明通过重构模式提取方法进行源代码的重构的例子。
[0149]源代码C001是应用重构模式提取方法前的源代码,是在主(main)函数中对全局变量global—var代入10的程序。对于该源代码C001,应用了重构模式提取方法的源代码成为C002。源代码C002将源代码C001中的global — var = 10 ;这种向全局变量的赋值语句作为函数foo提取,将作为global — var = 10 ;的记述部分的位置置换为函数foo的调用。
[0150]首先,说明图11所示的重构例子中的、图5的重构前源代码输入S101、重构后源代码输入S102以及重构模式S10的步骤。
[0151]在输入部1100中,通过源代码输入部1101接受重构前源代码0001和重构后源代码0002来生成对应的重构前源代码信息1001和重构后源代码信息。在此,重构前源代码0001对应于源代码C001,重构后源代码0002对应于源代码C002。
[0152]在源代码等价性验证装置1000中,通过源代码输入部1101对重构前源代码0001和重构后源代码0002进行字句解析和句法解析,变换为图12的例子中所示的在内部处理的结构图。在重构模式提取方法的例子中,源代码C001变换为结构图M001,源代码C002变换为结构图M002。在此,重构前源代码信息1001对应于结构图M001,重构后源代码信息1002对应于结构图M002。
[0153]在输入部1100中,在重构模式输入部1102接受重构模式输入信息0003来生成重构模式信息1003。在该例子中,例如当重构模式输入信息0003为表示重构模式提取方法的字符串“表示重构模或画面菜单中的选择编号时,在内部生成用于指示重构模式提取方法的代码作为重构模式信息1003。
[0154]接着,对图5的变更位置确定S1041的步骤进行说明。
[0155]在正规化部1200的变更位置确定部1201中,根据重构前源代码信息1001、重构后源代码信息1002以及重构模式信息1003,参照与存储在正规化DB1601中的对应的变更位置确定信息1007b,从结构图上确定变更了源代码上的哪些地方并输出变更位置信息
1004。在该重构模式提取方法的例子中,重构模式提取方法根据在重构后源代码信息1002中函数(entry foo)增加的特征,比较重构前源代码信息1001和重构后源代码信息1002的函数的声明,将仅在重构后源代码信息1002出现的函数确定为变更位置。在图12中,在重构前源代码信息1001的结构图M001和重构后源代码信息1002的结构图M002中比较表示函数的进入(entry),节点M003指示的进入的foo函数增加,因此节点M003和调用foo函数的节点M004相当于变更位置信息1004。
[0156]接着,对图5的源代码信息正规化S1042的步骤进行说明。在正规化部1200的源代码正规化部1202中,根据变更位置信息1004和重构前源代码信息1001使用与存储在正规化DB1601中的对应的正规化信息1007a进行正规化,生成重构前正规化源代码信息
1005。重构后源代码信息1002也同样地进行正规化,生成重构后正规化源代码信息1006。表示该重构模式提取方法的源代码正规化部1202的例子时,成为如图13所示。首先,从正规化DB1601取得重构模式信息1003即与重构模式提取方法对应的正规化信息1007a。根据与重构模式信息1003的提取方法对应的正规化信息1007a,正规化方法将提取的重构后源代码信息0002中的变更位置1004的函数设为表示进行内联扩展而返回到原始时的源代码的结构。
[0157]图13中的变更位置信息1004是重构后源代码信息1002的结构图M002中的节点M003和节点M004,这些节点是通过重构生成并被提取的函数foo,因此若对该函数foo进行正规化而返回到原始,则成为结构图M006。其成为重构后正规化源代码信息1006。重构前正规化源代码信息1005对重构模式提取方法没有进行正规化处理,因此图13中的重构前源代码信息0001的结构图M001在正规化中没有任何变更,而直接成为结构图M005。
[0158]接着,对图5的构造比较S1043的步骤进行说明。
[0159]在结构比较验证处理部1300中接受重构前正规化源代码信息1005和重构后正规化源代码信息1006,进行源代码信息的结构的比较,将其结果生成为结构比较结果1008。在进行了基于重构模式提取方法的重构的图13的例子中,因重构前正规化源代码信息1005的图M005和重构后正规化源代码信息1006的图M006两个图是相同结构且各个节点相同,因此作为结构比较结果1008,结构比较验证处理部1300判定源代码C001和源代码C002等价。
[0160]接着,对图5的符号执行实施判定S1047的步骤进行说明。
[0161]在进行了基于重构模式提取方法的重构的图11的例子中,作为结构比较结果1008,符号执行实施判定部1700判定重构前后的源等价,因此向等价非等价输出步骤S105转移,输出部1500接受结构比较验证处理部1300判定为等价的结果,作为验证结果0004输出等价。
[0162]在进行了基于重构模式提取方法的重构的图11的例子中,符号执行实施判定部1700根据基于正规化部1200的变换和结构比较验证处理部1300的判定处理能够判定为重构前后的源代码分别等价,因此不需要通过符号执行验证处理部1400进行符号执行的计算,不增加不必要的计算量地能够进行迅速的等价判定。
[0163]图14表示通过结构比较验证处理部1300的判定处理判定为等价时的基于输出部1500的验证结果0004的显示例。在图14所示的显示例中示出了作为判定结果P100通过结构比较进行判定的情况以及判定为其结果等价的情况。此外,作为在结构比较中使用的结构图数据,显示实施了正规化后的重构前正规化源代码信息的结构图P111和重构后正规化源代码信息的结构图P112。并且,作为重构应用信息P120显示了应用的重构模式名即提取方法、通过提取方法提取的函数名即foo,作为应用该重构模式的位置信息对重构应用前源代码显示文件名sample, c和行编号3,对重构应用后源代码显示文件名sample, c和行编号6。
[0164]通过观察图14所示的重构应用信息P120,能够确认等价性验证装置识别出的重构模式和位置与开发者所意图的重构一致。
[0165]实施例3
[0166]以下,参照上述图5,使用图15至图20,对本发明一实施方式的源代码等价性验证装置的处理的具体例进行说明。该例子是通过图5的符号执行实施判定的处理,在被实施了不依赖于重构模式的重构的源代码中,判定为源代码信息即结构图的结构不一致的例子。
[0167]图15是表示重构前后的源代码的例子的图(之二)。
[0168]图16是表示与重构前后的源代码对应的源代码信息的例子的图(之二)。
[0169]图17是表示抽象化后的源代码信息的例子的图。
[0170]图18是表示针对重构前源代码和重构后源代码进行了符号执行时的执行树的例子。
[0171]图19是为了说明符号执行的一例,表示源代码和由其派生的数据结构的图。
[0172]图20是表示用于显示通过符号执行验证处理部进行了等价性验证而得的结果的显示部的显示例的图。
[0173]在该例子中,作为针对源代码的重构,说明不变更源代码的条件式地进行整理向变量的代入的重构的情况。
[0174]在图15中示出了重构前的源代码C003和重构后的源代码C004,在源代码C003和源代码C004之间应用不变更源代码的条件式地整理向变量的代入的重构。具体而言,在重构前的源代码C003中,在源代码部分C005所示的位置,针对变量a代入值,在源代码部分C006所示的位置,使用变量a(右边)的值进行运算并代入到变量a(左边)。在重构后的源代码C004中,在源代码部分C007所示的位置,针对变量b代入值,在源代码部分C008所示的位置,使用变量b的值进行运算并代入到变量a。在重构前后,存在于源代码部分C005所示的位置和源代码部分C007所示的位置的条件式与存在于源代码部分C006所示的位置和源代码部分C008所示的位置的条件式一致,但变更使用的变量,源代码C004的源代码行数少可读性高。图15的例子所示的重构不符合非专利文献4所记载的72种重构模式,在本实施方式的源代码等价性验证装置1000中,也没有作为模式登录在数据库中。
[0175]首先,说明图15所示的重构例子中的、图5的重构前源代码输入S101和重构后源代码输入S102。在该重构的例子中,重构前源代码0001对应于源代码C003,重构后源代码0002对应于源代码C004。在输入部1100中,通过源代码输入部1101接受重构前源代码0001和重构后源代码0002来生成对应的重构前源代码信息1001和重构后源代码信息1002。在图15的重构例子中,源代码输入部1101接受源代码C003作为重构前源代码0001,进行字句解析和句法解析,作为重构前源代码信息1001变换为图16的结构图M008。此外,源代码输入部1101接受源代码C004作为重构后源代码0002,进行字句解析和句法解析,作为重构后源代码信息1002变换为图16的结构图M009。在此,重构前源代码信息1001对应于结构图M008,重构后源代码信息1002对应于结构图M009。
[0176]接着,对输入与重构模式相关的信息的S103的步骤进行说明。
[0177]在输入部1100中,在重构模式输入部1102接受重构模式输入信息0003来生成重构模式信息1003。在该重构例子中,假定没有登录重构模式,因此向重构模式输入部1102输入表示“入符合”的字符串或菜单的选择编号,重构模式输入部生成表示“无符合”的代码作为重构模式信息1003。
[0178]接着,对图5的变更位置确定S1041的步骤进行说明。
[0179]在正规化部1200的变更位置确定部1201中,根据重构前源代码信息1001和重构后源代码信息1002确定变更了源代码中的哪个位置,输出变更位置信息1004。在该重构例子中,比较重构前源代码信息1001即结构图M008与重构后源代码信息0002即结
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1