源代码等价性验证装置以及源代码等价性验证方法制造方法及图纸

技术编号:13017427 阅读:46 留言:0更新日期:2016-03-16 17:47
通过符号执行进行针对由人工实施的重构的等价性验证时,能够不使计算量爆发,而迅速地进行。在验证源代码的等价性时,进行基于解析源代码而得的结构图的结构比较的验证和符号执行的验证这两种验证。并且,在通过基于结构图的结构比较能够判定为结构一致的情况下,不进行符号执行。此外,在进行基于结构比较的验证前,对于重构前后的各个源代码,根据对每个重构模式决定的正规化信息对结构图进行正规化,在重构正当时,调整为结构一致。并且,对将重构前后的各个结构图进行抽象化而得的图进行符号执行来进行验证,由此限定进行符号执行的位置。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及一种,尤其涉及一种在软件重构中为了防止因重构实施导致的不良混入,在通过符号执行方法验证作为程序的动作等价的情况下,用于防止计算量的爆发式增加,迅速验证重构的正当性的优选的。
技术介绍
近年来,随着信息处理社会发展,软件系统浸透到一般社会,对于软件要求的可靠性成为非常高的问题。另一方面,软件随着常年的差异/派生开发而踏上复杂化且大规模化的方向,软件的易扩展性或易理解性等维护性下降成为问题。重构是在非专利文献1至3中所公开的方法,通过不改变软件的动作地变更内部结构来改善软件的设计品质的方法的总称,是减轻复杂度提高维护性的方法。该重构的方法是对于确保踏上复杂化以及大规模化的方向的软件的维护性有希望的技术,但由于变更源代码,因此存在新混入不良的可能性。具体而言,在重构中存在被分类为多个模式的方法,明示或暗示地决定各源代码的变更顺序以及针对用于保证通过该变更不会改变软件的动作的源代码的条件。在不按照该变更顺序地变更了源代码的情况下,或者,变更了不遵从这样的条件的源代码的情况下,不保证不改变成为对象的软件动作,因此有可能在软件中混入不良。因此,软件开发者在软件的维护阶段,有担心因重构原因而在准确地动作的软件中混入不良,而做出不进行重构的判断的可能性。因此,在软件的维护阶段,为了积极地进行重构,要求验证没有由重构导致的不良的混入的方法。在非专利文献3中,定义了 72种典型使用的重构模式(以下,简单称为“重构模式”)。在本说明书中,将两个源代码外在的动作相同,即针对相同输入在执行时得到相同输出定义为两个源代码“等价”,将验证重构实施前的源代码和重构实施后的源代码等价称为“等价性验证”。作为验证重构实施前的源代码和重构实施后的源代码等价的方法所要求的条件,有如下的条件。(1) 一个条件是其作业的大部分被自动化,基于人工的作业较少。以往,通过基于人工的评价或测试来验证源代码的等价性。通过对其实现基于工具的自动性验证,削减验证用时,促进重构。(2)另一个条件是通过重构验证方法判断为动作等价或非等价的情况下,向开发者提示成为其根据的信息。通过向开发者提示易懂的成为判定基准的信息,开发者自身能够进行再验证,针对工具的可靠性提高,促进重构。作为等价性验证的方法,有:通过专利文献1公开的源代码比较,对产生差异的部分实施测试,比较其结果的方法;通过图表表现非专利文献1公开的源代码,每次重构时验证图表否满足所决定的事先条件的方法;以及使用非专利文献2公开的符号执行,来验证动作被保持的方法。现有技术文献专利文献专利文献1:美国专利申请公开第2007/0033576号说明书非专利文献非专利文献1:T.Mens, S.Demeyer, D.Janssens, "Formalising Behav1ur Preserving Program Transformat1ns^, Proceedings of the First Internat1nal Conferenceon Graph Transformat1n, USA,2002非专利文献2:S.Person, Μ.B.Dwyer, S.Elbaum, C.S.Pasareanu, "Differential Symbolic Execut1n", Proc.0f ACM SIGS0FT Symposium on the Foundat1ns of SoftwareEngineering 2008, USA,2008非专利文献3:M.Fowler et al.,“Refactoring:1mproving the Design of Existing Code,,,USA, Addison-Wesley Profess1nal, ledit1n, July 8, 1999
技术实现思路
专利技术要解决的课题在非专利文献1中公开了如下的方法:用图表表现程序的方法调用关系,每次重构时验证是否满足所决定的事先条件。在该方法中,通过结构上的验证实现动作的验证,因此每次重构时,严密地定义其操作后收罗不会对动作产生影响的条件。因此,事实上,存在必须通过工具使重构自动化,不能用于通过可能错误进行重构操作其本身的人工的重构验证的问题。在专利文献1中公开了通过使用符号执行,生成针对成为对象的源代码的测试用例的方法。并且,在专利文献1中公开了使用不同的抽象度来抑制符号执行的计算量的爆发并生成测试用例的方法。为了将这些方法应用于重构前后的等价性验证,生成与重构前和重构后的源代码相关的测试,实施对各源代码生成的测试,验证它们的结果。这些在实施重构时不需要特别的过程,但存在几个问题。根据重构位置影响波及范围较广,仅通过所生成的测试还存在无法完全验证等价性的可能性。此外,即使是没有影响的波及的仅差异部分的验证,也存在因测试的覆盖率产生验证遗漏等可能性。此外,基于测试的等价性验证有验证遗漏等可能性,因此不完全。此外,作为等价性的判断根据,对开发者提示所实施的测试用例。但是,存在仅通过测试用例的举例,开发者无法判断这些是否是充分的测试用例的问题。在非专利文献2中,作为对重构前后的源代码进行等价性验证的技术,公开了使用符号执行的方法。符号执行是作为对象的程序输入,代替赋予数值,而通过赋予符号来网罗解析程序的动作的方法。以下,使用图19说明符号执行的一例。图19是为了说明符号执行的一例,表示源代码和由此派生的数据结构的图。在符号执行中,使用被称为符号变量的符号来表现输入变量的值,解析该符号变量在程序中如何被参照/更新。在此,以记载于用C语言记述的源代码E001中的函数foo为对象实施符号执行。在对成为符号执行的对象的源代码E001进行符号执行时,首先,与对通常的源代码进行编译时同样地,实施字句解析或句法解析。根据该结果得到从源代码E001提取了控制流程或控制依存图、数据依存图等的结构图E002。在符号执行中,使用结构图E002来生成执行树E020。执行树E020中的各节点由通过用于达到该节点的符号变量所表现的路径制约和通过符号变量变现了该节点中的各变量的值的变量状态构成。在图19的执行树E020中,在各节点的上侧表现路径制约,在下侧表现变量状态。以下,详细说明执行树E020的生成过程。在符号执行的开始阶段,在源代码E001中,对成为程序的输入的变量分配符号变量。在源代码E001的例子中,全局变量a、b、c是成为输入的变量,因此分别对它们分配α、β、Τ这样的符号变量。在结构图Ε002上,在与节点Ε003对应的开始状态,执行树Ε020是仅由单一的节点Ε010构成的执行树。节点Ε010的路径制约EOlOa成为表示无制约(对任意的变量状态满足制约)的真(true),变量状态EOlOb按照符号变量的分配表示与各变量对应的符号变量相等。在结构图E002上,接着节点E003执行节点E004。与之相伴,在执行树中也生成E010的子节点E011。关于子节点E011中的路径制约EOlla以及变量状态EOllb,复制母节点E010的路径制约EOlOa以及变量状态EOlOb后,执行结构图E002上的节点E004。在节点E004中,对变量a代入0。因此,将针对执行树的节点E011的变量状态EOllb中的变量a的状态更新为本文档来自技高网
...
<a href="http://www.xjishu.com/zhuanli/55/CN105408872.html" title="源代码等价性验证装置以及源代码等价性验证方法原文来自X技术">源代码等价性验证装置以及源代码等价性验证方法</a>

【技术保护点】
一种源代码等价性验证装置,其验证最初的源代码和重构实施后的源代码的等价性,该源代码等价性验证装置的特征在于,具有:源代码输入单元,其输入重构前的源代码和重构后的源代码;重构模式输入单元,其输入所述源代码的重构模式信息;源代码信息生成单元,其进行所述重构前的源代码和所述重构后的源代码各自的字句解析/句法解析,并变换为结构图,生成重构前源代码信息和重构后源代码信息;正规化单元,其参照对重构模式信息定义的正规化信息,对所述重构前源代码信息和所述重构后源代码信息进行正规化,分别生成重构前正规化源代码信息和重构后正规化源代码信息;结构比较单元,其比较所述重构前正规化源代码信息和所述重构后正规化源代码信息的结构;符号执行单元,其对所述重构前正规化源代码信息和所述重构后正规化源代码信息进行符号执行;以及等价性判定单元,其比较基于所述符号执行单元的符号执行的结果,来判定所述重构前源代码和所述重构后源代码的等价性。

【技术特征摘要】
【国外来华专利技术】

【专利技术属性】
技术研发人员:铃木康文新原敦介市井诚野口秀人
申请(专利权)人:株式会社日立制作所
类型:发明
国别省市:日本;JP

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1