CN110520850B - 等效性验证装置和计算机能读取的存储介质 - Google Patents

等效性验证装置和计算机能读取的存储介质 Download PDF

Info

Publication number
CN110520850B
CN110520850B CN201780089570.4A CN201780089570A CN110520850B CN 110520850 B CN110520850 B CN 110520850B CN 201780089570 A CN201780089570 A CN 201780089570A CN 110520850 B CN110520850 B CN 110520850B
Authority
CN
China
Prior art keywords
function
program
wrapper
statement
inspection
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201780089570.4A
Other languages
English (en)
Other versions
CN110520850A (zh
Inventor
米持一树
矶田诚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Publication of CN110520850A publication Critical patent/CN110520850A/zh
Application granted granted Critical
Publication of CN110520850B publication Critical patent/CN110520850B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

生成部(110)生成用于检查第1函数与第2函数的等效性的检查封装器。检查封装器包含用于反复调用第1函数和第2函数的循环语句。检查部(130)使用检查封装器进行等效性检查,由此,按照调用了第1函数和所述第2函数的次数,判定第1函数与第2函数的等效性。

Description

等效性验证装置和计算机能读取的存储介质
技术领域
本发明涉及用于检查函数彼此的等效性的技术。
背景技术
由于用于应对多功能化和附加价值提高的控制功能的电子化,搭载于控制装置的控制程序的大规模化和复杂化急速发展。此外,可以预期,由于衍生机种或目的地的不同,控制程序的变化今后也会急剧增加。
在这样的状况下,为了维持或强化盈利能力,在控制程序的开发中需要关注生产性的提高。作为具体的措施可考虑如下方法:通过导入通信处理、计时器处理、调度程序、OS(Operating System:操作系统)以及中间件等程序的执行环境,将程序开发转变成差分开发或衍生开发。另外,在差分开发和衍生开发的运用中,可考虑将用于实现程序的质量确保和作业效率化的程序开发方法和程序开发工具应用于程序开发中。
专利文献1和专利文献2公开有以程序的质量确保为目的的验证技术。
在专利文献1的技术中,作为布尔可满足性问题的限制条件,记述程序的输入值列、程序的内部状态值列、程序的输出值列以及记述有软件要件的检查条件。而且,通过布尔可满足性判定工具检查程序是否违反限制条件。
在专利文献2的技术中,通过验证内部状态值列的转移是否与定义的状态转移相同来检查程序。
非专利文献1公开有等效性检查这样的技术。
等效性检查是以函数为单位判定在2个程序之间在逻辑上运算内容是否相同的技术。
具体而言,在针对一个程序的函数的输入值列与针对另一个程序的函数的输入值列相等这样的条件下,利用布尔可满足性判定工具或模型检查工具判定各个函数的输出值列是否相互一致。在各个函数的输出值列相互一致的情况下,判定为函数彼此等效。
等效性验证不是针对1个程序的验证,而是针对2个程序的验证。
例如,在转移到新的执行环境的前后或者版本变更前后的2个程序之间,为了确定运算内容在逻辑上没有变更的同等部分和运算内容在逻辑上已变更的差异部分,进行等效性验证。
现有技术文献
专利文献
专利文献1:日本特开2016-57969号公报
专利文献2:日本特开平4-236636号公报
非专利文献
非专利文献1:Rupak Majumdar,“Compositional Equivalence Checking forModels and Code of Control Systems,”52nd IEEE Conference on Decision andControl,December 2013.
发明内容
发明要解决的课题
在现有的等效性检查中,将作为检查对象的函数彼此的输入值列和输出值列作为限制条件全面地进行分析。
但是,现有的等效性验证没有考虑在函数内从前一步骤向下一步骤继承的内部状态值列。
例如,在针对相同的输入值列始终返回相同的输出值列的情况下,没有内部状态值列,因此,能够通过现有的等效性检查正确地检查函数的等效性。但是,在输出值列取决于按照每个步骤转移的内部状态值列的函数的情况下,由于具有内部状态值列,因此,不能通过现有的等效性检查正确地检查函数彼此的等效性。步骤是调用并执行函数的工序。
本发明的目的在于,能够正确地检查输出值取决于按照每个步骤转移的内部状态值列的函数彼此的等效性。
用于解决课题的手段
本发明的等效性验证装置具有检查部,该检查部使用检查封装器进行等效性检查,由此,检查第1函数与第2函数的等效性,该检查封装器是包含用于反复调用所述第1函数和所述第2函数的循环语句的程序代码。
发明效果
根据本发明,能够一边反复调用第1函数和第2函数一边检查第1函数与第2函数的等效性。因此,能够正确地检查输出值取决于按照每个步骤转移的内部状态值列的函数彼此的等效性。
附图说明
图1是实施方式1的等效性验证装置100的结构图。
图2是示出实施方式1的第1程序210的图。
图3是示出实施方式1的第2程序220的图。
图4是用于说明实施方式1的步骤的图。
图5是示出实施方式1的对象信息230的图。
图6是用于说明实施方式1的输入值列和输出值列的图。
图7是实施方式1的程序代码的关系图。
图8是实施方式1的等效性验证方法的流程图。
图9是示出实施方式1的检查头240的图。
图10是示出实施方式1的检查封装器250的图。
图11是实施方式1的生成处理(S110)的流程图。
图12是示出实施方式1的第1程序210的图。
图13是示出实施方式1的第2程序220的图。
图14是实施方式1的加工处理(S120)的流程图。
图15是实施方式1的函数名的关系图。
图16是实施方式1的检查处理(S130)的流程图。
图17是示出实施方式1的执行结果260的图。
图18是示出实施方式1的执行结果261的图。
图19是实施方式2的等效性验证装置100的结构图。
图20是示出实施方式2的对象信息231的图。
图21是实施方式2的程序代码的关系图。
图22是实施方式2的等效性验证方法的流程图。
图23是实施方式2的分析处理(S210)的流程图。
图24是示出实施方式2的第1分析封装器270的图。
图25是示出实施方式2的第2分析封装器280的图。
图26是实施方式2的生成处理(S211)的流程图。
图27是实施方式2的加工处理(S212)的流程图。
图28是示出实施方式2的执行结果262的图。
图29是实施方式2的循环数决定处理(S214)的流程图。
图30是实施方式2的检查步骤数决定处理(S215)的流程图。
图31是实施方式的等效性验证装置100的硬件结构图。
具体实施方式
在实施方式和附图中,对相同的要素和对应的要素标注相同标号。适当省略或简化标注有相同标号的要素的说明。图中的箭头主要示出数据流或处理流。
实施方式1
根据图1~图18,对检查第1函数与第2函数的等效性的方式进行说明。
***结构的说明***
根据图1,对等效性验证装置100的结构进行说明。
等效性验证装置100是具有处理器901、存储器902以及辅助存储装置903这样的硬件的计算机。这些硬件经由信号线相互连接。
处理器901是进行运算处理的IC(Integrated Circuit:集成电路),对其他硬件进行控制。例如,处理器901是CPU(Central Processing Unit:中央处理单元)、DSP(DigitalSignal Processor:数字信号处理器)或者GPU(Graphics Processing Unit:图形处理单元)。
存储器902是易失性存储装置。存储器902也被称作主存储装置或主存储器。例如,存储器902是RAM(Random Access Memory:随机存取存储器)。存储于存储器902的数据根据需要而被保存到辅助存储装置903。
辅助存储装置903是非易失性存储装置。例如,辅助存储装置903是ROM(Read OnlyMemory:只读存储器)、HDD(Hard Disk Drive:硬盘驱动器)或闪存。存储于辅助存储装置903的数据根据需要而被载入到存储器902。
等效性验证装置100具有生成部110、加工部120以及检查部130这样的软件要素。软件要素是通过软件实现的要素。
在辅助存储装置903中存储有用于使计算机作为生成部110、加工部120以及检查部130发挥功能的等效性验证程序。向存储器902载入等效性验证程序,并由处理器901执行。
此外,在辅助存储装置903中存储有OS(Operating System:操作系统)。向存储器902载入OS的至少一部分,并由处理器901执行。
即,处理器901一边执行OS一边执行等效性验证程序。
执行等效性验证程序而得到的数据被存储于存储器902、辅助存储装置903、处理器901内的寄存器或处理器901内的高速缓冲存储器这样的存储装置中。
存储器902作为存储数据的存储部191而发挥功能。但也可以是,其他存储装置代替存储器902或与存储器902一起作为存储部191而发挥功能。
等效性验证装置100也可以具有代替处理器901的多个处理器。多个处理器分担处理器901的作用。
等效性验证程序能够以计算机能读取的方式存储于磁盘、光盘或闪存等非易失性的存储介质中。非易失性的存储介质是非暂时的有形介质。
根据图2,对第1程序210进行说明。
第1程序210是第1程序的具体例,预先存储于存储部191。
第1程序是作为等效性检查对象的2个程序中的一个程序。
第1程序210是用c语言记述的程序代码,包含第1函数x。
第1函数x是第1函数的具体例。
第1函数是作为等效性检查对象的2个函数中的一个函数。
第1函数具有如下特征。
第1函数包含于第1程序。例如,第1函数x包含于第1程序210。
在第1程序中多次执行第1函数。例如,在第1程序210的main函数中,在满足特定条件的期间反复执行第1函数x。
第1函数使用第1状态变量,第1状态变量的值在每次执行第1函数时变化。例如,第1函数x使用第1状态变量state_x,第1状态变量state_x的值在每次执行第1函数x时变化。具体而言,第1状态变量state_x的初始值为0。在第1状态变量state_x的值为0的情况下执行第1函数x时,第1状态变量state_x的值变为1。在第1状态变量state_x的值为1的情况下执行第1函数x时,第1状态变量state_x的值变为2。在第1状态变量state_x的值为2的情况下执行第1函数x时,第1状态变量state_x的值变为0。
第1函数输出与第1状态变量对应的值。例如,第1函数x输出与第1状态变量state_x对应的值。具体而言,在第1状态变量state_x的值为0的情况下,第1函数x的输出值是in+1。在第1状态变量state_x的值为1的情况下,第1函数x的输出值是in+2。在第1状态变量state_x的值为2的情况下,第1函数x的输出值是in+3。第1函数中的in是第1函数x的输入值。
第1程序210具有第1初始化函数state_x_init。
第1初始化函数state_x_init是第1初始化函数的具体例。
第1初始化函数是对第1状态变量进行初始化的函数。具体而言,第1初始化函数state_x_init对第1状态变量state_x设定初始值0。
根据图3,对第2程序220进行说明。
第2程序220是第2程序的具体例,预先存储于存储部191。
第2程序是作为等效性检查对象的2个程序中的另一个程序。
第2程序220是用c语言记述的程序代码,包含第2函数y。
第2函数y是第2函数的具体例。
第2函数是作为等效性检查对象的2个函数中的另一个函数。
第2函数具有如下特征。
第2函数包含于第2程序。例如,第2函数y包含于第2程序220。
在第2程序中多次执行第2函数。例如,在第2程序220的main函数中,在满足特定条件的期间反复执行第2函数y。
第2函数使用第2状态变量,第2状态变量的值在每次执行第2函数时变化。例如,第2函数y使用第2状态变量state_y,第2状态变量state_y的值在每次执行第2函数y时变化。具体而言,第2状态变量state_y的初始值为1。在第2状态变量state_y的值为1的情况下执行第2函数y时,第2状态变量state_y的值变为2。在第2状态变量state_y的值为2的情况下执行第2函数y时,第2状态变量state_y的值变为3。在第2状态变量state_y的值为3的情况下执行第2函数y时,第2状态变量state_y的值变为1。
第2函数输出与第2状态变量对应的值。例如,第2函数y输出与第2状态变量state_y对应的值。具体而言,在第2状态变量state_y的值为1的情况下,第2函数y的输出值为in+1。在第2状态变量state_y的值为2的情况下,第2函数y的输出值为in+2。在第2状态变量state_y的值为3的情况下,第2函数y的输出值为in+3。第2函数中的in是第2函数的输入值。
第2程序220具有第2初始化函数state_y_init。
第2初始化函数state_y_init是第2初始化函数的具体例。
第2初始化函数是对第2状态变量进行初始化的函数。具体而言,第2初始化函数state_y_init对第2状态变量state_y设定初始值1。
根据图4,对实施方式1的步骤进行说明。
将作为等效性检查对象的程序称作对象程序。具体而言,对象程序是第1程序210和第2程序220。
将作为等效性检查对象的函数称作对象函数。具体而言,对象函数是第1函数x和第2函数y。
将状态变量的值称作状态值。具体而言,状态值是第1状态变量state_x的值和第2状态变量state_y的值。
步骤是调用并执行对象函数的工序。
步骤数是调用对象函数的次数,即执行对象函数的次数。
在步骤之间继承对象函数的状态值。即,在第2步骤中使用第1步骤结束时的状态值,在第3步骤中使用第2步骤结束时的状态值。在步骤之间不继承输入值和输出值。
根据图5,对对象信息230进行说明。
在存储部191中预先存储对象信息230。
对象信息230示出对象函数的输入变量、输出变量以及初始化函数。
输入变量是设定输入值的变量。输入值是向函数输入的值。
输出变量是设定输出值的变量。输出值是从函数输出的值。
具体而言,对象信息230示出作为第1函数x的信息的第1输入变量in、第1输出变量out以及第1初始化函数state_x_init。此外,对象信息230示出作为第2函数y的信息的第2输入变量in、第2输出变量out以及第2初始化函数stete_y_init。
根据图6,对输入值列和输出值列进行说明。
输入值列是与步骤数相同数量的输入值,由对象函数的每个步骤数的输入值构成。in_x[t]是第1函数x的第t步骤的输入值。in_y[t]是第2函数y的第t步骤的输入值。
输出值列是与步骤数相同数量的输出值,由对象函数的每个步骤数的输出值构成。out_x[t]是第1函数x的第t步骤的输出值。out_y[t]是第2函数y的第t步骤的输出值。
输入值列和输出值列保存于存储部191。
根据图7,对第1程序210、第2程序220、检查头240以及检查封装器250的关系进行说明。
检查头240是为了检查封装器250参照第1函数x、第1初始化函数state_x_init、第2函数y以及第2初始化函数state_y_init而生成的头。检查头240的详细情况容后再述。
检查封装器250是为了检查第1函数x与第2函数y的等效性而生成的检查封装器。检查封装器250的详细情况容后再述。
检查封装器是为了模型检查工具的等效性检查而使用的程序代码。
模型检查工具是进行等效性检查的现有的工具。
在等效性检查中,在事前条件下,检查是否满足事后条件。在事前条件下满足事后条件的情况下,对象函数彼此等效。
***动作的说明***
等效性验证装置100的动作相当于等效性验证方法。另外,等效性验证方法的顺序相当于等效性验证程序的顺序。
根据图8,对等效性验证方法进行说明。
在步骤S110中,生成部110生成检查头240和检查封装器250。
根据图9,对检查头240进行说明。
根据图2的第1程序210和图3的第2程序220生成检查头240。
检查头240包含说明语句241和说明语句242。
说明语句241是用于检查封装器250参照第1函数x和第2函数y的说明语句。
说明语句242是用于检查封装器250参照第1初始化函数state_x_init和第2初始化函数state_y_init的说明语句。
根据图10对检查封装器250进行说明。
检查封装器250具有包含语句251、定义语句252、定义部分253、事前条件语句254、初始化语句255、循环语句256以及事后条件语句257。
包含语句251是对检查头240进行包含的语句。
定义语句252是定义检查步骤数的语句。检查步骤数是在循环语句256中调用第1函数x和第2函数y的次数。
定义部分253是检查函数judge_x_y的定义部分。
事前条件语句254是定义第1函数x与第2函数y的输入值彼此相等这样的事前条件的语句。
初始化语句255是用于对第1状态变量state_x和第2状态变量state_y进行初始化的语句。具体而言,初始化语句255是调用第1初始化函数state_x_init和第2初始化函数state_y_init的语句。初始化语句255被记述成在循环语句256之前执行的语句。
循环语句256是用于反复调用第1函数x和第2函数y的语句。
事后条件语句257是定义第1函数x与第2函数y的输出值彼此相等这样的事后条件的语句。
根据图11,对生成处理(S110)的顺序进行说明。
在步骤S111中,生成部110生成检查头240(图9参照)。
具体而言,生成部110记述说明语句241和说明语句242。记述有说明语句241和说明语句242的文件是检查头240。
生成部110如下所述记述说明语句241。
生成部110通过对第1程序210进行语法分析,从第1程序210提取第1函数x的原型,使用第1函数x的原型生成第1函数x的extern说明。
生成部110通过对第2程序220进行语法分析,从第2程序220提取第2函数y的原型,使用第2函数y的原型生成第2函数y的extern说明。
然后,生成部110记述第1函数x的extern说明和第2函数y的extern说明。
第1函数x的extern说明和第2函数y的extern说明是说明语句241。
生成部110如下所述记述说明语句242。
生成部110通过对第1程序210进行语法分析,从第1程序210提取第1初始化函数state_x_init的原型。生成部110使用第1初始化函数state_x_init的原型生成第1初始化函数state_x_init的extern说明。
生成部110通过对第2程序220进行语法分析,从第2程序220提取第2初始化函数state_y_init的原型。生成部110使用第2初始化函数state_y_init的原型生成第2初始化函数state_y_init的extern说明。
然后,生成部110记述第1初始化函数state_x_init的extern说明和第2初始化函数state_y_init的extern说明。
第1初始化函数state_x_init的extern说明和第2初始化函数state_y_init的extern说明是说明语句242。
通过步骤S112~步骤S118,生成部110生成检查封装器250(参照图10)。
在步骤S112中,生成部110记述包含语句251(参照图10)。
具体而言,生成部110使用检查头240的文件名(analysis.h)生成包含语句251,在检查封装器250的开头记述生成的包含语句251。
在步骤S113中,生成部110记述检查步骤数的定义语句252(参照图10)。
具体而言,生成部110使用步骤变量的变量名(STEP)和检查步骤数(3)来生成定义语句252,在包含语句251的下面记述生成的定义语句252。预先决定步骤变量的变量名和检查步骤数。
在步骤S114中,生成部110记述检查函数judge_x_y的定义部分253(参照图10)。
具体而言,生成部110如下所述生成定义部分253,在定义语句252的下面记述生成的定义部分253。
首先,生成部110记述检查函数judge_x_y的原型。“void judge_x_y(){}”是检查函数judge_x_y的原型。
接下来,生成部110生成与检查步骤数相同数量的第1函数x用的输入变量和第2函数y用的输入变量的组,将生成的输入变量的组作为检查函数judge_x_y的自变量进行记述。in_x1和in_x2是第1函数x用的输入变量。in_y1和in_y2是第2函数y用的输入变量。
然后,生成部110按照定义语句的形式生成定义在检查函数judge_x_y中使用的内部变量的定义语句,在检查函数judge_x_y中记述生成的定义语句。预先决定定义语句的形式。
第1个定义语句是定义内部变量i的语句。内部变量i是在循环语句256中用于控制循环数的变量。
第2个定义语句是定义内部变量in_x[]的语句。内部变量in_x[]是设定第1函数x用的输入变量的值的数组。
第3个定义语句是定义内部变量in_y[]的语句。内部变量in_y[]是第2函数y用的输入变量的数组。
第4个定义语句是定义内部变量out_x[]和内部变量out_y[]的语句。内部变量out_x[]是设定第1函数x的输出值的数组。内部变量out_y[]是设定第2函数y的输出值的数组。
在步骤S115中,生成部110在检查函数judge_x_y中记述事前条件语句254(参照图10)。
具体而言,生成部110按照事前条件语句的形式生成与检查步骤数相同数量的事前条件语句,在定义部分253的4个定义语句的下面记述生成的事前条件语句。生成的事前条件语句是事前条件语句254。预先决定事前条件语句的形式。
第n事前条件语句是定义在第n次调用第1函数x和第2函数y时第1函数x与第2函数y的输入值彼此相等这样的事前条件的语句。n是1以上且检查步骤数以下的整数。
在步骤S116中,生成部110在检查函数judge_x_y中记述初始化语句255(参照图10)。
具体而言,生成部110使用第1初始化函数state_x_init的函数名生成第1初始化语句,使用第2初始化函数state_y_init的函数名生成第2初始化语句。然后,生成部110在事前条件语句254的下面记述第1初始化语句和第2初始化语句。第1初始化语句和第2初始化语句是初始化语句255。第1初始化语句是调用第1初始化函数state_x_init的语句,第2初始化语句是调用第2初始化函数state_y_init的语句。
在步骤S117中,生成部110在检查函数judge_x_y中记述循环语句256(参照图10)。
具体而言,生成部110在初始化语句255的下面记述将内部变量i的值为检查步骤数以下作为反复条件的for语句。然后,生成部110按照调用语句的形式生成第1调用语句和第2调用语句,在for语句中记述第1调用语句和第2调用语句。预先决定调用语句的形式。
第1调用语句是用于在第i次循环中将第1函数x用的内部变量in_x[i]的值作为输入值而调用第1函数x,对第1函数x用的内部变量out_x[i]设定第1函数x的输出值的语句。
第2调用语句是用于在第i次循环中将第2函数y用的内部变量in_y[i]的值作为输入值而调用第2函数y,对第2函数y用的内部变量out_x[i]设定第2函数y的输出值的语句。
在步骤S118中,生成部110在检查函数judge_x_y中记述事后条件语句257(参照图10)。
具体而言,生成部110按照事后条件语句的形式生成与检查步骤数相同数量的事后条件语句,在循环语句256的下面记述生成的事后条件语句。与检查步骤数相同数量的事后条件语句是事后条件语句257。
第n事后条件语句是定义在第n次调用第1函数x和第2函数y时第1函数x与第2函数y的输出值彼此相等这样的事后条件的语句。n是1以上且检查步骤数以下的整数。
返回图8,对步骤S120进行说明。
在步骤S120中,加工部120为了等效性检查而对第1程序210和第2程序220进行加工。
根据图12,对加工后的第1程序210进行说明。
加工后的第1程序210具有包含语句211。
包含语句211是对检查头240进行包含的语句。
根据图13,对加工后的第2程序220进行说明。
加工后的第2程序220具有包含语句221。
包含语句221是对检查头240进行包含的语句。
根据图14,对加工处理(S120)的顺序进行说明。
在步骤S121中,加工部120在第1程序210中记述包含语句211(参照图12)。
此外,加工部120在第2程序220中记述包含语句221(参照图13)。
包含语句211和包含语句221是彼此相同的语句。
具体而言,加工部120使用检查头240的文件名(analysis.h)生成包含语句(211、221)。然后,加工部120在第1程序210的开头记述生成的包含语句211。此外,加工部120在第2程序220的开头记述生成的包含语句221。
在步骤S122中,加工部120判定第1程序210的初始化函数名是否与第2程序220的初始化函数名相同。初始化函数名是初始化函数的名字。
在第1程序210的初始化函数名与第2程序220的初始化函数名相同的情况下,处理进入步骤S123。
在第1程序210的初始化函数名与第2程序220的初始化函数名不同的情况下,处理进入步骤S124。
在步骤S123中,加工部120变更第1程序210的初始化函数名和第2程序220的初始化函数名中的至少一方。
例如,如图15所示,在第1程序210的初始化函数名和第2程序220的初始化函数名都是func的情况下,加工部120对各个初始化函数名附加标识符。具体而言,加工部120将第1程序210的初始化函数名从func变更成func_a,将第2程序220的初始化函数名从func变更成func_b。“_a”和“_b”是附加的标识符。
在步骤S124中,加工部120判定第1程序210的对象函数名是否与第2程序220的对象函数名相同。对象函数名是作为等效性检查对象的函数的名字。
在第1程序210的对象函数名与第2程序220的对象函数名相同的情况下,处理进入步骤S125。
在第1程序210的对象函数名与第2程序220的对象函数名不同的情况下,结束加工处理(S120)。
在步骤S125中,加工部120变更第1程序210的对象函数名和第2程序220的对象函数名中的至少一方。
例如,如图15所示,在第1程序210的对象函数名和第2程序220的对象函数名都是func的情况下,加工部120对各个对象函数名附加标识符。具体而言,加工部120将第1程序210的对象函数名从func变更成func_a,将第2程序220的对象函数名从func变更成func_b。“_a”和“_b”是附加的标识符。
返回图8,对步骤S130进行说明。
在步骤S130中,检查部130检查第1函数x与第2函数y的等效性。
根据图16,对检查处理(S130)的顺序进行说明。
在检查处理(S130)中,第1程序210的意思是加工后的第1程序210,第2程序220的意思是加工后的第2程序220。
在步骤S131中,检查部130使用检查封装器250执行模型检查工具。
由此,按照调用了第1函数x和第2函数y的次数,判定第1函数x与第2函数y的等效性。
模型检查工具是用于进行等效性检查的现有的工具,预先存储于存储部191。
存在具有转换功能的模型检查工具和不具有转换功能的模型检查工具。
转换功能是将对象程序和检查封装器转换成检查代码的功能。
检查代码是等效性检查用的程序代码。
具体而言,如下所述执行模型检查工具。
在模型检查工具具有转换功能的情况下,检查部130将第1程序210、第2程序220以及检查封装器250作为输入,执行模型检查工具。
在执行模型检查工具时,将第1程序210、第2程序220以及检查封装器250转换成检查代码并执行检查代码。在执行检查代码时,输出执行结果260。
在模型检查工具不具有转换功能的情况下,检查部130将第1程序210、第2程序220以及检查封装器250转换成检查代码。转换方法与基于具有转换功能的模型检查工具的方法相同。
然后,检查部130将检查代码作为输入,执行模型检查工具。
在执行模型检查工具时,输出执行结果260。
根据图17,对执行结果260进行说明。
执行结果260是通过使用检查封装器250执行模型检查工具而得到的结果。
执行结果260示出在第1步骤和第2步骤双方中第1函数x与第2函数y是等效的。
输出值n的意思是第n步骤中的第1函数x的输出值,输出值n’的意思是第n步骤的第2函数y的输出值。SUCCESS的意思是满足事后条件。即,SUCCESS的意思是等效。
第n步骤的意思是n次调用了第1函数x和第2函数y的阶段。n是1以上且检查步骤数以下的整数。
返回图16,继续从步骤S132开始进行说明。
在步骤S132中,检查部130根据在步骤S131中得到的结果,判定第1函数x和第2函数y是否直到检查步骤数为止是等效的。
在第1函数x和第2函数y直到检查步骤数为止是等效的的情况下,处理进入步骤S134。
在存在第1函数x和第2函数y不等效的的检查步骤的情况下,处理进入步骤S133。
在步骤S133中,检查部130根据在步骤S131中得到的结果,确定不等效步骤数。
不等效步骤数是第1函数x与第2函数y不等效时的步骤数,即第1函数x与第2函数y不等效时的调用次数。具体而言,不等效步骤数是第1函数x与第2函数y不等效的最初的步骤数。
例如,当在步骤S131中得到的结果是图18的执行结果261的情况下,第1步骤和第2步骤的判定结果是SUCCESS,第3步骤的判定结果是FAILURE,因此,不等效步骤数是3。FAILURE的意思是不满足事后条件。即,FAILURE的意思是不等效。
在步骤S134中,检查部130将检查结果存储于存储部191。
检查结果示出第1函数x与第2函数y是否直到检查步骤数为止是等效的。
在第1函数x与第2函数y不是直到检查步骤数为止是等效的情况下,检查结果还示出不等效步骤数。
***实施方式1的效果***
能够实现保有状态值的函数彼此的等效性检查,该状态值保持从前一步骤向下一步骤的值。具体而言,能够在设定的步骤数中得到等效或不等效这样的判定结果。
***其他结构***
也可以使用c语言以外的编程语言记述对象程序、对象函数、检查封装器以及检查头。如果没有检查头但能够从检查封装器调用对象函数,则不需要检查头。
实施方式2
针对决定检查步骤数的方式,根据图19~图30,主要说明与实施方式1不同的点。
***结构的说明***
根据图19,对等效性验证装置100的结构进行说明。
作为软件要素,等效性验证装置100还具有分析部140。
等效性验证程序还使计算机作为分析部140而发挥功能。
根据图20,对对象信息231进行说明。
对象信息231是对象信息的一例,预先存储于存储部191。
对象信息231除了输入变量、输出变量以及初始化函数之外,还示出状态变量。
根据图21,对第1程序210、检查头240以及第1分析封装器270的关系进行说明。
在第1程序210和第1分析封装器270中包含检查头240。
第1分析封装器270是在用于求出第1循环数的等效性检查中使用的检查封装器。
第1循环数是第1状态变量的值返回初始值时第1函数的调用次数。
第1分析封装器270的详细情况容后再述。
根据图21,对第2程序220、检查头240以及第2分析封装器280的关系进行说明。
在第2程序220和第2分析封装器280中包含检查头240。
第2分析封装器280是在用于求出第2循环数的等效性检查中使用的检查封装器。
第2循环数是第2状态变量的值返回初始值时第2函数的调用次数。
第2分析封装器280的详细情况容后再述。
***动作的说明***
根据图22,对等效性验证方法进行说明。
在步骤S210中,分析部140决定对检查封装器250定义的检查步骤数。决定检查步骤数的方法容后再述。
步骤S220~步骤S240与实施方式1(参照图8)中的步骤S110~步骤S130相同。
但是,在步骤S220中,生成部110将定义在步骤S210中决定的检查步骤数的语句作为定义语句252记述在检查封装器250中。
另外,在步骤S240中判定为第1函数与第2函数等效的的情况下,第1函数与第2函数完全等效。完全等效的意思是函数彼此与步骤数无关地等效。
根据图23,对分析处理(S210)的顺序进行说明。
在步骤S211中,生成部110生成第1分析封装器270和第2分析封装器280。
根据图24,对第1分析封装器270进行说明。
第1分析封装器270具有包含语句271、定义语句272、定义部分273、事前条件语句274、初始化语句275、循环语句276以及事后条件语句277。
包含语句271是对检查头240进行包含的语句。
定义语句272是定义分析步骤数的语句。
定义部分273是检查函数step_judge_x的定义部分。
事前条件语句274是定义第1函数x的第1次输入值与第1函数x的从第2次起的输入值相等这样的第1事前条件的语句。
初始化语句275是用于对第1状态变量state_x进行初始化的语句。具体而言,初始化语句275是调用第1初始化函数state_x_init的语句。作为在循环语句276之前执行的语句而记述初始化语句275。
循环语句276是用于反复调用第1函数x的语句。
事后条件语句277是定义第1函数x的第1次输出值与第1函数x的从第2次起的输出值相同并且第1函数x的第1次第1状态变量的值与第1函数x的从第2次起的第1状态变量的值相等这样的第1事后条件的语句。
根据图25,对第2分析封装器280进行说明。
第2分析封装器280具有包含语句281、定义语句282、定义部分283、事前条件语句284、初始化语句285、循环语句286以及事后条件语句287。
包含语句281是对检查头240进行包含的语句。
定义语句282是定义分析步骤数的语句。
定义部分283是检查函数step_judge_y的定义部分。
事前条件语句284是定义第2函数y的第1次输入值与第2函数y的从第2次起的输入值相等这样的第2事前条件的语句。
初始化语句285是用于对第2状态变量state_y进行初始化的语句。具体而言,初始化语句285是调用第2初始化函数state_y_init的语句。作为在循环语句286之前执行的语句而记述初始化语句285。
循环语句286是用于反复调用第2函数y的语句。
事后条件语句287是定义第2函数x的第1次输出值与第2函数y的从第2次起的输出值相等并且第2函数y的第1次第2状态变量的值与第2函数y的从第2次起的第2状态变量的值相等这样的第2事后条件的语句。
根据图26,对生成处理(S211)的顺序进行说明。
在步骤S2111中,生成部110生成检查头240(参照图9)。
通过步骤S2112~步骤S2118,生成部110生成第1分析封装器270(参照图24)和第2分析封装器280(参照图25)。
在步骤S2112中,生成部110在第1分析封装器270的开头记述包含语句271,在第2分析封装器280的开头记述包含语句281。
在步骤S2113中,生成部110在包含语句271的下面记述定义语句272,在包含语句281的下面记述定义语句282。
在步骤S2114中,生成部110在第1分析封装器270中记述检查函数step_judge_x的定义部分273。
具体而言,生成部110如下所述生成定义部分273,在定义语句272的下面记述生成的定义部分273。
首先,生成部110记述检查函数step_judge_x的原型。“void step_judge_x(){}”是检查函数step_judge_x的原型。
接下来,生成部110生成与分析步骤数相同数量的第1函数x用的输入变量,将生成的输入变量作为检查函数step_judge_x的自变量进行记述。in_x1、in_x2、in_x3是第1函数x用的输入变量。
然后,生成部110按照定义语句的形式生成定义在检查函数step_judge_x中使用的内部变量的定义语句,在检查函数step_judge_x中记述生成的定义语句。预先决定定义语句的形式。
第1个定义语句是定义内部变量i的语句。内部变量i是用于在循环语句276中对循环数进行控制的变量。
第2个定义语句是定义内部变量in_x[]的语句。内部变量in_x[]是设定第1函数x用的输入变量的值的数组。
第3个定义语句是定义内部变量out_x[]的语句。内部变量out_x[]是设定第1函数x的输出值的数组。
第4个定义语句是定义内部变量state_x[]的语句。内部变量state_x[]是设定第1状态变量的值的数组。
同样,生成部110在第2分析封装器280中记述检查函数step_judge_y的定义部分283。
在步骤S2115中,生成部110在检查函数step_judge_x中记述事前条件语句274。
具体而言,生成部110按照事前条件语句的形式生成数量比分析步骤数少1个的事前条件语句,在定义部分273的4个定义语句的下面记述生成的事前条件语句。生成的事前条件语句是事前条件语句274。预先决定事前条件语句的形式。
第m事前条件语句是定义第1函数x的第1次输入值与第1函数x的第m+1次输入值相等这样的事前条件的语句。m是1以上且(分析步骤数-1)以下的整数。
同样,生成部110在检查函数step_judge_y中记述事前条件语句284。
在步骤S2116中,生成部110在检查函数step_judge_x中记述初始化语句275,在检查函数step_judge_y中记述初始化语句285。
具体而言,生成部110使用第1初始化函数state_x_init的函数名生成初始化语句275,在事前条件语句274的下面记述初始化语句275。此外,生成部110使用第2初始化函数state_y_init函数名生成初始化语句285,在事前条件语句284的下面记述初始化语句285。
在步骤S2117中,生成部110在检查函数step_judge_x中记述循环语句276。
具体而言,生成部110在初始化语句275的下面记述将内部变量i的值为分析步骤数以下作为重复条件的for语句。然后,生成部110按照调用语句的形式生成调用语句,按照代入语句的形式生成代入语句,在for语句中记述调用语句和代入语句。预先决定调用语句的形式和代入语句的形式。
调用语句是用于在第i次循环中,将第1函数x用的内部变量in_x[i]的值作为输入值而调用第1函数x,对第1函数x用的内部变量out_x[i]设定第1函数x的输出值的语句。
代入语句是用于在第i次循环中,对第1函数x用的内部变量state_x[i]设定第1状态变量state_x的值的语句。
同样,生成部110在检查函数step_judge_y中记述循环语句286。
在步骤S2118中,生成部110在检查函数step_judge_x中记述事后条件语句277。
具体而言,生成部110按照事后条件语句的形式生成数量比分析步骤数少1个的事后条件语句,在循环语句276的下面记述生成的事后条件语句。生成的事后条件语句是事后条件语句277。
第m事后条件语句是定义第1函数x的第1次输出值与第1函数x的第m+1次输出值相等这样的事后条件的语句。m是1以上且(分析步骤数-1)以下的整数。
同样,生成部110在检查函数step_judge_y中记述事后条件语句287。
返回图23,对步骤S212进行说明。
在步骤S212中,加工部120为了等效性检查而对第1程序210和第2程序220进行加工。
根据图27,对加工处理(S212)的顺序进行说明。
步骤S2121与实施方式1(参照图14)的步骤S121相同。
步骤S2122与实施方式1(参照图14)的步骤S122相同。
步骤S2123与实施方式1(参照图14)的步骤S123相同。
步骤S2124与实施方式1(参照图14)的步骤S124相同。
步骤S2125与实施方式1(参照图14)的步骤S125相同。
返回图23,对步骤S213进行说明。
在步骤S213中,分析部140进行第1等效性检查和第2等效性检查。
第1等效性检查是针对第1函数x的等效性检查。针对第1函数x的等效性检查是用于按照调用了第1函数x的次数判定是否满足第1事后条件的检查。
第2等效性检查是针对第2函数y的等效性检查。针对第2函数y的等效性检查是用于按照调用了第2函数y的次数判定是否满足第2事后条件的检查。
具体而言,分析部140使用第1分析封装器270执行模型检查工具。由此,按照调用了第1函数x的次数判定是否满足第1事后条件。
此外,分析部140使用第2分析封装器280执行模型检查工具。由此,按照调用了第2函数y的次数判定是否满足第2事后条件。
具体而言,如下所述执行模型检查工具。
在模型检查工具具有转换功能的情况下,分析部140将加工后的第1程序210和第1分析封装器270作为输入而执行模型检查工具。由此,将加工后的第1程序210和第1分析封装器270转换成检查代码并执行检查代码。然后,输出针对第1函数x的等效性检查的执行结果。
此外,检查部130将加工后的第2程序220和第2分析封装器280作为输入而执行模型检查工具。由此,将加工后的第2程序220和第2分析封装器280转换成检查代码并执行检查代码。然后,输出针对第2函数y的等效性检查的执行结果。
在模型检查工具不具有转换功能的情况下,分析部140将加工后的第1程序210和第1分析封装器270转换成检查代码。转换方法与基于具有转换功能的模型检查工具的方法相同。然后,分析部140将检查代码作为输入而执行模型检查工具。由此,输出针对第1函数x的等效性检查的执行结果。
此外,分析部140将加工后的第2程序220和第2分析封装器280转换成检查代码。转换方法与基于具有转换功能的模型检查工具的方法相同。然后,分析部140将检查代码作为输入而执行模型检查工具。由此,输出针对第2函数y的等效性检查的执行结果。
根据图28,对执行结果262进行说明。
执行结果262是在步骤S213中得到的执行结果的一例。
(步骤1)输出值的意思是对象函数的第1次输出值。
(步骤m)输出值的意思是对象函数的第m次输出值。
(步骤1)状态值的意思是对象函数的第1次状态值。
(步骤m)状态值的意思是对象函数的第m次状态值。
FAILURE的意思是不满足事后条件。
SUCCESS的意思是满足事后条件。
返回图23,对步骤S214进行说明。
在步骤S214中,分析部140根据第1等效性检查的结果求出第1循环数,根据第2等效性检查的结果求出第2循环数。
根据图29,对循环数决定处理(步骤S214)的顺序进行说明。
在步骤S2140中,分析部140通过参照第1等效性检查的结果,判定是否直到分析步骤数为止是成功的。成功的意思是满足第1事后条件。
在直到分析步骤数为止是成功的情况下,处理进入步骤S2141。
在存在没有成功的分析步骤的情况下,处理进入步骤S2142。
在步骤S2141中,分析部140使第1循环数为2。
在步骤S2141之后,使处理进入步骤S2145。
在步骤S2142中,分析部140通过参照第1等效性检查的结果,判定是否具有第1成功步骤。第1成功步骤是满足第1事后条件的分析步骤。
在具有第1成功步骤的情况下,处理进入步骤S2143。
在没有第1成功步骤的情况下,处理进入步骤S2144。
在步骤S2143中,分析部140使第1循环数为第1成功步骤数。第1成功步骤数是第1成功步骤时的步骤数。
在步骤S2143之后,处理进入步骤S2145。
在步骤S2144中,分析部140使第1循环数为0。
在步骤S2145中,分析部140通过参照第2等效性检查的结果,判定是否直到分析步骤数为止是成功的。
在直到分析步骤数为止是成功的情况下,处理进入步骤S2146。
在存在没有成功的分析步骤的情况下,处理进入步骤S2147。
在步骤S2146中,分析部140使第2循环数为2。
在步骤S2146之后,结束循环数决定处理(S214)。
在步骤S2147中,分析部140通过参照第2等效性检查的结果,判定是否具有第2成功步骤。第2成功步骤是满足第2事后条件的分析步骤。
在具有第2成功步骤的情况下,使处理进入步骤S2148。
在没有第2成功步骤的情况下,使处理进入步骤S2149。
在步骤S2148中,分析部140使第2循环数为第2成功步骤数。第2成功步骤数是第2成功步骤时的步骤数。
在步骤S2148之后,结束循环数决定处理(S214)。
在步骤S2149中,分析部140将第2循环数决定为0。
返回图23,对步骤S215进行说明。
在步骤S215中,分析部140根据第1循环数和第2循环数决定检查步骤数。
根据图30,对检查步骤数决定处理(S215)的顺序进行说明。
在步骤S2151中,分析部140判定第1循环数和第2循环数双方是否为0。
在第1循环数和第2循环数双方不为0的情况下,处理进入步骤S2152。
在第1循环数和第2循环数中的至少任意一方为0的情况下,处理进入步骤S2153。
在步骤S2152中,分析部140计算第1循环数与第2循环数的最小公倍数。
然后,分析部140使检查步骤数为第1循环数与第2循环数的最小公倍数。
在步骤S2153中,分析部140使检查步骤数为规定数。规定数是预先决定的数。
***实施方式2的效果***
能够决定与循环数对应的检查步骤数。而且,通过在与循环数对应的检查步骤数中进行等效性检查,能够判定函数彼此是否完全等效。
***实施方式的补足***
根据图31,对等效性验证装置100的硬件结构进行说明。
等效性验证装置100具有处理电路990。
处理电路990是实现生成部110、加工部120、检查部130以及分析部140的硬件。
处理电路990可以是专用硬件,也可以是执行存储于存储器902的程序的处理器901。
在处理电路990是专用硬件的情况下,处理电路990例如是单一电路、复合电路、程序化的处理器、并行程序化的处理器、逻辑IC、GA、ASIC、FPGA或者它们的组合。
GA是Gate Array(门阵列)的简称,ASIC是Application Specific IntegratedCircuit(面向特定用途的集成电路)的简称,FPGA是Field Programmable Gate Array(现场可编程门阵列)的简称。
等效性验证装置100也可以具有代替处理电路990的多个处理电路。多个处理电路分担处理电路990的作用。
也可以是,对于等效性验证装置100的功能,一部分通过专用硬件实现,剩余通过软件或固件实现。
这样,能够通过硬件、软件、固件或者它们的组合来实现处理电路990。
实施方式只是优选方式的例示,不意图限制本发明的技术范围。可以部分地实施实施方式,也可以与其他方式组合实施实施方式。也可以适当变更使用流程图等说明的顺序。
标号说明
100:等效性验证装置;110:生成部;120:加工部;130:检查部;140:分析部;191:存储部;210:第1程序;211:包含语句;220:第2程序;221:包含语句;230:对象信息;231:对象信息;240:检查头;241:说明语句;242:说明语句;250:检查封装器;251:包含语句;252:定义语句;253:定义部分;254:事前条件语句;255:初始化语句;256:循环语句;257:事后条件语句;260:执行结果;261:执行结果;262:执行结果;270:第1分析封装器;271:包含语句;272:定义语句;273:定义部分;274:事前条件语句;275:初始化语句;276:循环语句;277:事后条件语句;280:第2分析封装器;281:包含语句;282:定义语句;283:定义部分;284:事前条件语句;285:初始化语句;286:循环语句;287:事后条件语句;901:处理器;902:存储器;903:辅助存储装置;990:处理电路。

Claims (10)

1.一种等效性验证装置,该等效性验证装置具有检查部,该检查部使用检查封装器进行等效性检查,由此,检查第1函数与第2函数的等效性,该检查封装器是包含用于反复调用所述第1函数和所述第2函数的循环语句的程序代码,
所述第1函数包含于第1程序,在所述第1程序中多次执行所述第1函数,所述第1函数使用值在每次执行所述第1函数时发生变化的第1状态变量,输出与所述第1状态变量的值对应的值,
所述第2函数包含于第2程序,在所述第2程序中多次执行所述第2函数,所述第2函数使用值在每次执行所述第2函数时发生变化的第2状态变量,输出与所述第2状态变量的值对应的值;
其中,该等效性验证装置具有生成部,该生成部通过记述所述循环语句而生成所述检查封装器,所述生成部还将对调用所述第1函数和所述第2函数的次数进行定义的定义语句记述在所述检查封装器中。
2.根据权利要求1所述的等效性验证装置,其中,
所述检查部按照调用了所述第1函数和所述第2函数的次数,判定所述第1函数与所述第2函数的等效性。
3.根据权利要求2所述的等效性验证装置,其中,
所述检查部根据调用了所述第1函数和所述第2函数的次数每次的判定结果,确定所述第1函数与所述第2函数不等效时的调用次数。
4.根据权利要求1所述的等效性验证装置,其中,
所述生成部还将用于对所述第1状态变量和所述第2状态变量进行初始化的初始化语句作为在所述循环语句之前执行的语句记述在所述检查封装器中。
5.根据权利要求4所述的等效性验证装置,其中,
所述初始化语句是调用对所述第1状态变量进行初始化的第1初始化函数和对所述第2状态变量进行初始化的第2初始化函数的语句。
6.根据权利要求5所述的等效性验证装置,其中,
所述生成部还将用于包含含有说明语句的检查头的包含语句记述在所述检查封装器中,该说明语句用于参照所述第1初始化函数和所述第2初始化函数。
7.根据权利要求1至6中的任意一项所述的等效性验证装置,其中,
所述生成部还将事前条件语句和事后条件语句记述在所述检查封装器中,该事前条件语句对所述第1函数和所述第2函数的输入值彼此相等这样的事前条件进行定义,该事后条件语句对所述第1函数和所述第2函数的输出值彼此相等这样的事后条件进行定义。
8.根据权利要求1所述的等效性验证装置,其中,
所述等效性验证装置具有分析部,该分析部求出第1循环数和第2循环数,根据所述第1循环数和所述第2循环数决定所述检查封装器调用所述第1函数和所述第2函数的次数,该第1循环数是所述第1状态变量的值返回初始值时所述第1函数的调用次数,该第2循环数是所述第2状态变量的值返回初始值时所述第2函数的调用次数,
所述生成部将对所决定的次数进行定义的语句作为所述定义语句记述在所述检查封装器中。
9.根据权利要求8所述的等效性验证装置,其中,
所述分析部通过使用第1分析封装器进行等效性检查而求出所述第1循环数,通过使用第2分析封装器进行等效性检查而求出所述第2循环数,该第1分析封装器是包含用于反复调用所述第1函数的第1循环语句的程序代码,该第2分析封装器是包含用于反复调用所述第2函数的第2循环语句的程序代码。
10.一种存储有等效性验证程序的计算机能读取的存储介质,其中,该等效性验证程序用于使计算机执行检查处理,在该检查处理中使用检查封装器进行等效性检查,由此,检查第1函数与第2函数的等效性,该检查封装器是包含用于反复调用所述第1函数和所述第2函数的循环语句的程序代码,
所述第1函数包含于第1程序,在所述第1程序中多次执行所述第1函数,所述第1函数使用值在每次执行所述第1函数时发生变化的第1状态变量,输出与所述第1状态变量的值对应的值,
所述第2函数包含于第2程序,在所述第2程序中多次执行所述第2函数,所述第2函数使用值在每次执行所述第2函数时发生变化的第2状态变量,输出与所述第2状态变量的值对应的值;
其中,该等效性验证程序还用于使所述计算机执行生成处理,在该生成处理中通过记述所述循环语句而生成所述检查封装器,在该生成处理中还将对调用所述第1函数和所述第2函数的次数进行定义的定义语句记述在所述检查封装器中。
CN201780089570.4A 2017-04-19 2017-04-19 等效性验证装置和计算机能读取的存储介质 Active CN110520850B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2017/015709 WO2018193548A1 (ja) 2017-04-19 2017-04-19 等価性検証装置および等価性検証プログラム

Publications (2)

Publication Number Publication Date
CN110520850A CN110520850A (zh) 2019-11-29
CN110520850B true CN110520850B (zh) 2023-08-11

Family

ID=63855736

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780089570.4A Active CN110520850B (zh) 2017-04-19 2017-04-19 等效性验证装置和计算机能读取的存储介质

Country Status (5)

Country Link
US (1) US20200034280A1 (zh)
JP (1) JP6556410B2 (zh)
CN (1) CN110520850B (zh)
DE (1) DE112017007271T5 (zh)
WO (1) WO2018193548A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6567212B2 (ja) * 2017-02-22 2019-08-28 三菱電機株式会社 等価性検証装置および等価性検証プログラム
WO2021166167A1 (ja) * 2020-02-20 2021-08-26 三菱電機株式会社 検証装置
CN112540787A (zh) * 2020-12-14 2021-03-23 北京知道未来信息技术有限公司 程序逆向分析方法、装置及电子设备
WO2022239148A1 (ja) * 2021-05-12 2022-11-17 三菱電機株式会社 等価性検査システムおよび等価性検査プログラム

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006309666A (ja) * 2005-05-02 2006-11-09 Ricoh Co Ltd プログラム開発支援装置、プログラム動作比較方法および半導体集積回路製造方法
CN104301089A (zh) * 2014-09-23 2015-01-21 电子科技大学 用于对任意变量的两个布尔函数进行仿射等价的判定方法
WO2016038741A1 (ja) * 2014-09-12 2016-03-17 株式会社日立製作所 ソースコード等価性検証装置、および、ソースコード等価性検証方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2803369B2 (ja) 1991-01-21 1998-09-24 日本電気株式会社 対話型システムの検査方法
US20060041873A1 (en) * 2004-08-19 2006-02-23 Cisco Technology, Inc. Computer system and method for verifying functional equivalence
JP5834991B2 (ja) * 2012-02-17 2015-12-24 富士電機株式会社 図式プログラムのテスト網羅性測定装置およびその方法、並びにプログラム
JP2016057969A (ja) 2014-09-11 2016-04-21 日立オートモティブシステムズ株式会社 プログラム検査装置、ソフトウェア検査装置、sat制約条件データ、記憶媒体

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006309666A (ja) * 2005-05-02 2006-11-09 Ricoh Co Ltd プログラム開発支援装置、プログラム動作比較方法および半導体集積回路製造方法
WO2016038741A1 (ja) * 2014-09-12 2016-03-17 株式会社日立製作所 ソースコード等価性検証装置、および、ソースコード等価性検証方法
CN104301089A (zh) * 2014-09-23 2015-01-21 电子科技大学 用于对任意变量的两个布尔函数进行仿射等价的判定方法

Also Published As

Publication number Publication date
WO2018193548A1 (ja) 2018-10-25
JPWO2018193548A1 (ja) 2019-11-07
CN110520850A (zh) 2019-11-29
JP6556410B2 (ja) 2019-08-07
DE112017007271T5 (de) 2019-12-05
US20200034280A1 (en) 2020-01-30

Similar Documents

Publication Publication Date Title
CN110520850B (zh) 等效性验证装置和计算机能读取的存储介质
US10025696B2 (en) System and method for equivalence class analysis-based automated requirements-based test case generation
US9367658B2 (en) Method and apparatus for designing and generating a stream processor
US9235669B2 (en) Method and an apparatus for automatic processor design and verification
US8868976B2 (en) System-level testcase generation
KR101788279B1 (ko) 테스트 기법을 이용한 최악 실행 시간 측정 시스템 및 방법
US20150234966A1 (en) Method and an apparatus for automatic generation of verification environment for processor design and verification
Chinnaiyan et al. An Experimental Study on Reliability Estimation of GNU Compiler Components- A Review
US20180217922A1 (en) Application testing
García-Ferreira et al. A survey on static analysis and model checking
Schmidt et al. Automatic generation of thread communication graphs from SystemC source code
Baranowski et al. Complete formal verification of a family of automotive DSPs
Darvas et al. Conformance checking for programmable logic controller programs and specifications
de Andrade et al. Test Generation from Bounded Algebraic Specifications using Alloy.
Mochizuki et al. Fast translation from LTL to Büchi automata via non-transition-based automata
JP6723483B2 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
Zakharov et al. Compositional environment modelling for verification of GNU C programs
US7447621B1 (en) PLI-less co-simulation of ISS-based verification systems in hardware simulators
Champion et al. Generating property-directed potential invariants by backward analysis
CN113742252A (zh) 一种检测内存乱序的方法及装置
US8042075B2 (en) Method, system and application for sequential cofactor-based analysis of netlists
Kozin et al. Static verification of Linux kernel configurations
JP7309099B2 (ja) 等価性検査システムおよび等価性検査プログラム
Gupta et al. Formally Verifying Graphics FPU: An Intel® Experience
US20240061984A1 (en) A method for an automatic design and verification of a processor's programming and verification tools

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant