CN104885060B - 数据漏更新检查装置、数据漏更新检查方法 - Google Patents
数据漏更新检查装置、数据漏更新检查方法 Download PDFInfo
- Publication number
- CN104885060B CN104885060B CN201380069207.8A CN201380069207A CN104885060B CN 104885060 B CN104885060 B CN 104885060B CN 201380069207 A CN201380069207 A CN 201380069207A CN 104885060 B CN104885060 B CN 104885060B
- Authority
- CN
- China
- Prior art keywords
- brick
- variable
- leakage
- degree
- updates
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
将作为检查对象的计算机程序中所包含的语句,分类为多个程序块(S03),针对每个程序块,提取出在程序块中被更新的变量(S04),确定出与每个程序块对应的更新变量集合,将多个更新变量集合中的至少1个确定为组变量(S05)。使用与程序块对应的更新变量集合与组变量的包含关系,判断程序块的同时更新程度(S06),输出该判断的结果(S10)。
Description
技术领域
本发明涉及一种数据漏更新检查装置、数据漏更新检查方法。
背景技术
作为在利用1个信号量进行管理的多个共有资源(变量组)中,通过源代码的静态解析检测出应该利用独立的信号量管理的共有资源的软件检查装置,已知有在专利文献1中所公开的软件检查装置。在专利文献1中所公开的软件检查装置具有对利用1个信号量进行保护的变量组进行确定的单元,能够对在利用1个信号量进行保护的区间是否同时访问变量组进行确认。
专利文献1:日本特开2010-157147号公报
发明内容
但是,在专利文献1中所公开的软件检查装置,只将利用信号量的保护区间作为检查对象,因此不能对没有利用信号量保护的区间进行检查。因此,在没有利用信号量保护的区间中,对于为了表示出1个状态或信息,需要同时进行访问的变量组(多个变量),不能检测变量的漏更新。
本发明就是鉴于上述课题而提出的,其目的在于提供一种数据漏更新检查装置、数据漏更新检查方法、数据漏更新检查程序,其对于为了表示出1个状态或者信息,需要同时更新的多个变量,能够使用户注意到变量的漏更新的可能性。
本发明的一个方式所涉及的漏更新检查装置,其将作为检查对象的计算机程序中所包含的语句,分类为多个程序块,针对每个程序块,提取出程序块中被更新的变量,确定出与每个程序块对应的更新变量集合,将多个更新变量集合中的至少1个确定为组变量。使用与程序块对应的更新变量集合与组变量的包含关系,判断程序块的同时更新程度,输出该结果。
优选本发明的一个方式所涉及的漏更新检查装置,对判断为同时更新程度是一部分的程序块进行提取,将对提取出的程序块进行确定的信息与判断结果相关联而输出。
优选本发明的一个方式所涉及的漏更新检查装置,计算出下述比例,即,判断为同时更新程度是完全的程序块的数量,相对于判断为同时更新程度是一部分的程序块的数量与判断为同时更新程度是完全的程序块的数量之和的比例,并将计算出的比例与判断结果相关联而输出。
优选本发明的一个方式所涉及的漏更新检查装置,在多个程序块中存在判断为同时更新程度是一部分的程序块的情况下,从组变量的要素中提取出不属于与该程序块对应的更新变量集合的要素,并与判断结果相关联而输出。
优选本发明的一个方式所涉及的漏更新检查装置,在多个程序块中不存在判断为同时更新程度是一部分的程序块的情况下,将对组变量进行确定的信息与判断结果相关联而输出。
附图说明
图1是表示本发明的实施方式所涉及的数据漏更新检查装置的硬件结构的框图。
图2是表示CPU11的功能的构成的框图。
图3是表示利用本发明的实施方式所涉及的数据漏更新检查装置执行的信息处理的流程的流程图。
图4(a)、图4(b)、图4(c)是作为利用源代码输入部21读入的源代码D01,表示利用C语言记述的计算机程序的一个例子的图。
图5是表示程序块确定部31所参照的图2的块分隔符一览D03的一个例子的表。
图6是表示入口点一览D02的一个例子的表。
图7是表示利用执行函数解析部30生成的执行函数对应表的一个例子的表。
图8是表示步骤S03以及步骤S04的详细的处理顺序的一个例子的流程图。
图9是对将图4(a)、图4(b)、图4(c)所示的计算机程序中所包含的语句分类为多个程序块而得到的结果进行汇总而成的表。
图10是表示将从图4(a)、图4(b)、图4(c)所示的计算机程序中所包含的语句中提取出的变量进行登记的更新变量对应表的一个例子的表。
图11是表示在步骤S05中确定出的更新变量集合和组变量的一览、以及更新变量集合和组变量的对应关系的表。
图12是表示步骤S06的详细的处理顺序的一个例子的流程图。
图13是表示对图3的步骤S06的处理结果进行汇总而得到的“变量更新同时性一览”的表。
图14是针对每个组变量,对在图3的步骤S07中提取出的漏更新部分、在步骤S08中计算出的耦合度以及在步骤S09中提取出的漏更新变量的集合进行汇总而得到的表。
图15是表示在步骤S10中输出的判断结果的一个例子的表。
图16是表示作为检查对象的计算机程序的例子的图。
具体实施方式
参照附图,说明本发明的实施方式。在附图的记载中,对相同部分标注相同标号并省略说明。
【数据漏更新检查装置的硬件结构】
本发明的实施方式所涉及的数据漏更新检查装置例如能够应用于利用在车辆上搭载的电子控制装置(ECU)而执行的计算机程序的数据漏更新检查处理。尤其,对于为了表示1个状态或信息,而需要同时更新的多个变量,对变量的漏更新的可能性进行检查。
参照图1,对本发明的第1实施方式所涉及的数据漏更新检查装置的硬件结构进行说明。作为数据漏更新检查装置的硬件结构,能够使用通用计算机。例如,数据漏更新检查装置具有:输入输出装置12,其从存储介质读入作为检查对象的计算机程序(源代码D01)以及检查所需的数据(包含入口点一览D02、块分隔符一览D03);存储装置14,其对利用输入输出装置12读入的源代码D01、解析的中间数据进行存储;CPU(中央处理装置)11,其执行各种运算而对源代码D01进行解析;输入装置13,其用于输入用户输入解析中所必需的信息;以及显示装置15,其对从CPU11输出的检查结果进行显示。检查结果也能够使用输入输出装置12而写入到存储介质中。作为存储装置14,能够列举出存储器、硬盘等,在存储装置14和CPU(中央处理装置)11之间进行数据的输入输出。
此外,数据漏更新检查装置也能够作为客户端服务器模型而实现。例如,经由计算机网络而将通用个人计算机(客户端)连接到服务器上。由此,能够将具有图1中所示的CPU11的置于远程环境中的服务器经由计算机网络,而连接到客户端所具有的输入输出装置12、输入装置13、存储装置14、或者显示装置15上。在该情况下,数据漏更新检查装置主要通过CPU11(服务器)构成,输入输出装置12、输入装置13、存储装置14、或者显示装置15未包含在数据漏更新检查装置中。
参照图2说明CPU11的功能的构成。将用于使具有CPU11的计算机作为数据漏更新检查装置而起作用的计算机程序(数据漏更新检查程序)安装到具有CPU11的计算机上,并执行。由此,CPU11作为以下所示的各信息处理部而起作用。另外,此处表示出利用软件实现数据漏更新检查装置的例子,当然,也可以准备用于执行以下所示的各信息处理的专用的硬件,而构成数据漏更新检查装置。
CPU11作为源代码输入部21、程序块分类部22、更新变量提取部23、组变量确定部24、同时性判断部25、以及检查结果输出部29而起作用。程序块分类部22中包含执行函数解析部30和程序块确定部31。
源代码输入部21从输入输出装置12或输入装置13读取作为检查对象的计算机程序(源代码D01),并存储至存储装置14中。
执行函数解析部30对利用源代码输入部21读入的源代码D01进行解析。具体而言,使用从输入输出装置12或输入装置13输入的入口点一览D02,确定出源代码D01中直接以及间接地调用的函数。对于入口点一览D02,参照图6在后面叙述。
程序块确定部31以块分隔符作为分界,对在利用执行函数解析部30确定出的函数中所包含的语句进行分类。程序块确定部31参照块分隔符一览D03,以块分隔符作为分界,对语句进行分类。块分隔符一览D03从输入输出装置12或输入装置13输入。在用户没有将块分隔符一览D03作为输入而向数据漏更新检查装置赋值的情况下,数据漏更新检查装置将图5中所示的块分隔符一览D03作为块分隔符的默认值进行处理。是用户作为输入而赋值,还是使用默认的块分隔符是任意的。对于块分隔符一览D03,参照图5在后面叙述。“语句”是指源代码上的每1行的处理单位。
利用上述的执行函数解析部30以及程序块确定部31的处理动作,程序块分类部22能够将在源代码D01中包含的有效的所有语句分类为多个程序块。在源代码D01中包含的有效的所有语句被分类为,所属于多个程序块中的至少一个程序块,或者仅所属于多个程序块的某一个程序块。
更新变量提取部23提取在程序块中被更新的变量。更新变量提取部23对于利用程序块分类部22分类出的多个程序块中所包含的各程序块,分别提取上述的变量。由更新变量提取部23进行的处理能够与由程序块确定部31进行的处理同时进行。
组变量确定部24针对每个程序块,使将利用更新变量提取部23提取出的变量(更新变量)作为要素的集合(更新变量集合)与程序块相对应而确定,将多个更新变量集合中的至少一个确定为组变量。另外,在实施方式中,说明针对多个程序块中所包含的所有的程序块而确定出上述的组变量的情况。
同时性判断部25针对每个程序块,对下属于利用组变量确定部24确定出的更新变量集合的要素、和下属于利用组变量确定部24确定出的组变量的要素进行比较。而且,使用更新变量集合和组变量的包含关系,同时性判断部25针对每个程序块,判断程序块的同时更新程度。判断以“完全”、“一部分”、“没有”这3个阶段进行,其判断方法在后面叙述。
检查结果输出部29至少将利用同时性判断部25得到的判断结果作为数据漏更新检查结果D04,而向显示装置15或者***至输入输出装置12中的存储介质输出。对于数据漏更新检查结果D04,参照图15在后面叙述。
CPU11还作为漏更新部分提取部26而起作用。漏更新部分提取部26对利用同时性判断部25判断为同时更新程度是一部分的程序块进行提取。检查结果输出部29将对利用漏更新部分提取部26提取出的程序块进行确定的信息,与利用同时性判断部25得到的判断结果相关联而输出。
CPU11还作为耦合度计算部27而起作用。耦合度计算部27求出利用同时性判断部25判断为同时更新程度是一部分或者完全的程序块的数量(一部分重复程序块数量和完全重复程序块数量的和)。耦合度计算部27还求出利用同时性判断部25判断为同时更新程度是完全的程序块的数量(完全重复程序块数量)。而且,耦合度计算部27计算出完全重复程序块数量相对于一部分重复程序块数量和完全重复程序块数量之和的比例(“耦合度”)。检查结果输出部29将利用耦合度计算部27计算出的比例与利用同时性判断部25得到的判断结果相关联而输出。
CPU11还作为漏更新变量提取部28而起作用。漏更新变量提取部28在多个程序块中,存在有利用同时性判断部25判断为同时更新程度是一部分的程序块的情况下,从组变量的要素中提取出不属于与该程序块对应的更新变量集合的要素。检查结果输出部29将利用漏更新变量提取部28提取出的要素与判断结果相关联而输出。
在多个程序块中,不存在利用同时性判断部25判断为同时更新程度是一部分的程序块的情况下,检查结果输出部29作为确定组变量的信息,将所属于其组变量的变量的一览与判断结果相关联而输出。
【利用数据漏更新检查装置执行的信息处理的顺序】
下面,参照图3~图15,作为本发明的实施方式所涉及的数据漏更新检查方法的一个例子,对利用图1以及图2所示的数据漏更新检查装置执行的信息处理的顺序进行说明。
参照图3的流程图进行说明。首先,在步骤S01中,源代码输入部21将作为检查对象的源代码D01例如从输入输出装置12读入,存储至存储装置14中。另外,源代码D01也可以是预先使用输入输出装置12,而由用户读入数据漏更新检查装置内,并存储在存储装置14中。在该情况下,不需要步骤S01的处理。图4(a)、图4(b)、图4(c)是作为读入的源代码D01,表示出用C语言记述的计算机程序的一个例子。作为检查对象的计算机程序跨越图4(a)、图4(b)、图4(c)所示的3个文件而记述。图4(a)的文件名是“File1.c”,图4(b)的文件名是“File2.c”,图4(c)的文件名是“File3.c”。在用C语言记述的程序的一个例子中,在各文件的左端部记载的从1开始的连续编号表示各文件的“行编号”。
在计算机程序中,记述有4个函数。在图4(a)的“File1.c”中,记述有函数“Task1”。函数“Task1”在调用2个函数“Func1”以及函数“Func2”之后结束。函数“Func1”记述在图4(b)的“File2.c”中。函数“Func2”记述在图4(c)的“File3.c”中。在图4(c)的“File3.c”中,还记述有函数“Func3”。函数“Func3”没有被函数“Task1”调用,因此是不执行的函数。此外,计算机程序中的“Sem_Lock(ID1)”表示利用“ID1”的信号量的保护区间的开始命令,“Sem_UnLock(ID1)”表示利用“ID1”的信号量的保护区间的结束命令。
然后,在步骤S02中,执行函数解析部30使用入口点一览D02,确定出在源代码D01中直接以及间接地调用的函数。对确定出的函数分别赋予函数ID。图6的表表示入口点一览D02的一个例子。“入口点”表示计算机程序开始的部分。在利用搭载于车辆的电子控制装置(ECU)执行的计算机程序中,有时例如与点火开关的开启操作以及空调开关的开启操作相对应,而设定多个不同的入口点。在图6所示的表中,作为入口点,限定出函数“Task1”。执行函数解析部30首先确定出函数“Task1”,然后,确定出通过子程序调用而调用出的函数“Func1”以及函数“Func2”。函数“Func3”不被函数“Task1”调用,因此执行函数解析部30不对函数“Func3”进行确定。执行函数解析部30对确定出的函数“Task1”、“Func1”以及“Func2”作为函数ID而分别赋予函数ID=1、函数ID=2、函数ID=3,并登记至图7所示的执行函数对应表中。
然后,进入步骤S03,程序块确定部31以块分隔符作为分界,针对每个程序块,对函数“Task1”、“Func1”以及“Func2”中所包含的语句进行分类。对于分类出的程序块的各自赋予程序块ID。
通过上述的步骤S02的处理,执行函数解析部30能够确定出在源代码D01中所包含的函数中,以入口点作为基点而调用的所有的函数。此外,通过步骤S03的处理,程序块分类部22能够读入源代码D01中所包含的有效的所有语句,并将源代码D01中所包含的有效的所有语句分类为多个程序块。
然后,进入步骤S04,更新变量提取部23针对利用程序块分类部22分类出的多个程序块中所包含的各程序块,将程序块中被更新的变量分别作为更新变量而提取。
此处,在本例中,能够同时执行图3的流程图中以标号F01表示的步骤S03以及步骤S04。此处,参照图8的流程图,对步骤S03以及步骤S04的详细的处理顺序的一个例子进行说明。
首先,在步骤S101中,对函数ID进行初始化,即,设定为函数ID=1。在步骤S102中,对程序块ID进行初始化,即,设定为程序块ID=1。进入步骤S103,程序块确定部31将利用在步骤S101中初始化的函数ID而确定出的函数(对象函数)中所包含的语句读入存储器中。
进入S104,程序块确定部31参照块分隔符一览D03,对在读入的语句中最初的语句(对象语句)是否与块分隔符匹配进行判断。图5的表表示块分隔符一览D03的一个例子。在块分隔符一览D03中,记载有分隔符ID、处理的内容、以及源代码记述(块分隔符)。在“块分隔符”中,包含有作为源代码D01的处理的阶段分界点的命令,例如包含分支命令、跳转命令。程序块确定部31对对象语句是否与图5的表中所记载的源代码记述(块分隔符)匹配进行判断。
在对象语句与块分隔符不匹配的情况下(步骤S104中NO),进入步骤S105,向对象语句赋予程序块ID。进入步骤S106,更新变量提取部23将对象语句中被更新的变量登记至“更新变量对应表”中。然后,进入步骤S109。
另一方面,在对象语句与块分隔符匹配的情况下(步骤S104中YES),进入步骤S107,判断下一个语句是否与块分隔符匹配。在下一个语句与块分隔符不匹配的情况下(步骤S107中NO),在步骤S108中对程序块ID进行累加,之后进入步骤S109。另一方面,在下一个语句与块分隔符匹配的情况下(步骤S107中YES),直接进入步骤S109。
在步骤S109中,在对象语句不是对象函数中所包含的最后的语句的情况下(步骤S109中NO),将下一个语句设定为对象语句(S110),并返回步骤S104。在步骤S109中,在对象语句是对象函数中所包含的最后的语句的情况下(步骤S109中YES),进入步骤S111。在步骤S111中,在对象函数不是图7所示的最后的函数的情况下(步骤S111中NO),在步骤S112中将函数ID累加。然后,将对象函数设定为下一个函数,将语句读出部分设定至所设定出的函数的起始处(步骤S113),并返回步骤S103。在对象函数是最后的函数,在本实施方式中是图7所示的“Func2”的情况下(步骤S111中YES),图8的流程图结束。
将图4(a)、图4(b)、图4(c)所示的计算机程序中所包含的语句分类为多个程序块,图9是将分类得到的结果汇总而成的表。针对各函数中所包含的所有的语句,将函数ID、文件名、行编号、语句的内容、以及程序块ID相关联。通过执行图8所示的处理,能够对从块分隔符之后的语句到下一个块分隔符之前的语句为止赋予相同的程序块ID。在块分隔符或者跨越连续的块分隔符的时刻,对程序块ID进行累加。能够将从块分隔符之后到下一个块分隔符之前为止的语句作为所属于1个程序块所属的语句进行登记。对所有函数内的所有语句重复进行同样的处理,从而程序块分类部22能够将作为解析对象的源代码D01中的有效的所有语句分类为程序块。
与语句的分类同时地,更新变量提取部23提取在检查对象的语句中进行更新处理的变量,并登记至更新变量对应表中(S106)。对从图4(a)、图4(b)、图4(c)所示的计算机程序中所包含的语句中提取出的变量进行登记,图10是表示该登记而得到的更新变量对应表的一个例子的表。在更新变量对应表中,针对每个利用程序块分类部22所分类出的程序块,登记变量。如图10所示,在步骤S04中提取出的变量按照提取处的顺序进行登记。在相同变量在相同的程序块内被提取大于或等于2次的情况下,该变量被重复登记大于或等于2次。在更新变量对应表中登记的变量作为更新变量进行处理。
在作为解析对象的源代码D01中的有效的所有语句向程序块的分类完成时,源代码D01中的有效的所有语句中的进行更新处理的变量的提取完成。在完成时,提取出的变量在以程序块为单位分类的状态下,成为全部登记至更新变量对应表中的状态。更新变量对应表可以存储在存储装置14中,也可以存储在搭载于CPU11上的注册表等的存储器中。
再次返回图3,并进入步骤S05。此处,组变量确定部24使用图10中所示的更新变量对应表,针对每个程序块,确定出将该程序块中被更新的变量(更新变量)作为要素的集合(称为“更新变量集合”)。更详细而言,组变量确定部24对在更新变量对应表中登记的更新变量的登记的顺序进行调整,排除相同更新变量的重复登记,从而对各个程序块确定出更新变量集合。对与各程序块对应地确定出的更新变量集合赋予表示出程序块ID的变量n,下面,表示为更新变量集合Qn,其中,程序块ID指明其程序块。更新变量集合Qn仅将利用变量n指定出的程序块中被更新的更新变量作为要素,更新变量集合Qn的要素不重复。其中,变量n取自然数,可取值的最大值与源代码内的程序块的个数相等。
然后,在将更新变量集合Qn作为要素的集合中,排除重复的要素(更新变量集合Qn)而重新生成集合。需要注意的是,该集合的要素是将更新变量集合作为要素而具有的集合。在下面,将该重新生成的集合的要素称为组变量。对各组变量赋予表示组变量ID的变量i,并表示为组变量Pi。其中,变量i取自然数,可取值的最大值与前述的排除重复而重新生成的集合的要素数量相等。
在图11中,更具体地说明以上说明的更新变量集合Qn以及组变量Pi的利用组变量确定部24进行的确定。在图11的表所示的例子中,作为更新变量集合Qn,确定出:Q1={X、Y、Z}、Q2={X、Z}、Q3={X、Y、Z}、Q4={W、X、Z}。此处,程序块ID是n=1以及n=3时的更新变量集合Q1和Q3,作为要素只具有相同的更新变量,因此,在将更新变量集合Qn作为要素的集合中,更新变量集合Q1和更新变量集合Q3是重复的要素。因此,在此例中,将更新变量集合Q3排除。利用该操作,将重新生成的集合的要素确定为组变量Pi。因此,在图11的表所示的例子中,组变量确定部24作为组变量Pi,确定出P1={X、Y、Z}、P2={X、Z}、P3={W、X、Z}这3个组变量。
进入步骤S06,同时性判断部25对在步骤S04中针对每个程序块提取出的变量(所属于更新变量集合Qn的变量),与所属于在步骤S05中确定出的组变量的变量进行比较,判断在步骤S04中提取出的变量是否存在漏更新。换言之,同时性判断部25针对各程序块,判断组变量的同时更新程度(同时性)。判断以“完全”、“一部分”、“没有”这3个阶段进行。此处,参照图12的流程图,对步骤S06的详细的处理顺序的一个例子进行说明。
首先,在步骤S201中,将程序块ID初始化。即,设定为n=1。在步骤S202中,获取在步骤S04中针对每个程序块所提取出的变量的集合即更新变量集合Qn。在步骤S203中,将组变量ID初始化,即设定为i=1。在步骤S204中,获取在步骤S05中确定出的组变量Pi。
进入步骤S205,判断组变量Pi是否是更新变量集合Qn的子集合。在组变量Pi是更新变量集合Qn的子集合的情况下(S205中YES),所属于组变量Pi的所有的要素(变量)与所属于更新变量集合Qn的变量重复。因此,在步骤S206中,同时性判断部25将同时更新程度判断为“完全”。然后,进入步骤S210。
另一方面,在存在有不属于更新变量集合Qn的组变量Pi的要素(变量)的情况下,即在组变量Pi不是更新变量集合Qn的子集合的情况下(步骤S205中NO),进入步骤S207。
在步骤S207中,判断组变量Pi和更新变量集合Qn的共同部分是否不是空集合在组变量Pi和更新变量集合Qn的共同部分不是空集合的情况下(步骤S207中YES),在步骤S208中,同时性判断部25将同时更新程度判断为“一部分”。即,在步骤S207中为YES的情况下,所属于组变量Pi的一部分要素(变量)与所属于更新变量集合Qn的变量重复,能够判断出存在不属于更新变量集合Qn的组变量Pi的要素。因此,将同时更新程度判断为“一部分”。然后进入步骤S210。
此外,在组变量Pi和更新变量集合Qn的共同部分是空集合的情况下(步骤S207中NO),在步骤S209中,同时性判断部25将同时更新程度判断为“没有”。即,在步骤S207中为NO的情况下,能够判断为所属于组变量Pi的任意一个要素(变量)均不与所属于更新变量集合Qn的变量重复。因此,将同时更新程度判断为“没有”。然后,进入步骤S210。
在步骤S210中,判断在步骤S204中获取到的组变量Pi是否是最后的组变量。如果组变量Pi是最后的组变量(步骤S210中NO),则对变量i进行累加(步骤S211),返回步骤S204。在表示组变量ID的变量i的值与其可取值的最大值相等时,即在组变量Pi是最后的组变量时(步骤S210中YES),进入步骤S212,判断在步骤S202中获取的更新变量集合Qn是否是最后的更新变量集合。即,判断是否对最后的程序块进行了同时性判断。如果更新变量集合Qn不是最后的更新变量集合(步骤S212中NO),则对变量n进行累加(步骤S213),并返回步骤S202。在表示程序块ID的变量n的值与其可取值的最大值相等时,即在更新变量集合Qn是最后的更新变量集合时(步骤S212中YES),图12所示的流程图结束。以上述方式,能够对所有的程序块以及所有的组变量执行步骤S205~S209的处理。
如参照图12所说明的那样,在图3的步骤S06中,能够执行以下的处理。同时性判断部25对将在步骤S04中提取出的变量作为要素的集合(更新变量集合Qn)、与在步骤S05中确定出的组变量Pi进行比较。然后,能够判断在多个程序块中,是否存在所属于更新变量集合Qn的变量只与所属于组变量Pi的一部分的变量重复的程序块。
对上述的处理内容进行汇总,就是同时性判断部25利用更新变量集合Qn和组变量Pi的彼此的包含关系,对判断对象的程序块的同时更新程度进行判断。
同时性判断部25将所属于更新变量集合Qn的变量只与所属于组变量Pi的一部分的变量重复的程序块,判断为同时更新程度是“一部分”。即,在所属于组变量Pi的一部分的变量属于与判断对象的程序块对应的更新变量集合Qn,且所属于组变量Pi的其它的变量不属于该更新变量集合Qn的情况下,同时性判断部25将该程序块判断为同时更新程度是“一部分”。
此外,同时性判断部25将所属于更新变量集合Qn的变量与所属于组变量Pi的所有的变量重复的程序块,判断为同时更新程度是“完全”。即,在所属于组变量Pi的所有的变量属于与判断对象的程序块对应的更新变量集合Qn的情况下,同时性判断部25将该程序块判断为同时更新程度是“完全”。
此外,同时性判断部25将所属于更新变量集合Qn的变量与所属于组变量Pi的任意的变量均不重复的程序块,判断为同时更新程度是“没有”。即,在所属于组变量Pi的所有的变量均不属于与判断对象的程序块对应的更新变量集合Qn的情况下,同时性判断部25将该程序块判断为同时更新程度是“没有”。
图13的表表示将图3的步骤S06的处理结果汇总而得到的“变量更新同时性一览”。Q1~Q4表示更新变量集合,P1~P3表示组变量,如图10、图11所示,将更新变量作为要素。
返回图3,进入步骤S07。在步骤S07中,漏更新部分提取部26对在步骤S06中判断为存在漏更新的程序块进行提取。具体而言,对在步骤S06中判断为同时更新程度是“一部分”的程序块进行提取。
由此,能够对在步骤S04中提取出的变量只与所属于在步骤S05中确定出的组变量Pi的一部分的要素重复的程序块进行提取。此处,能够通过将同时更新程度判断为“一部分”的步骤S06中的方法理解为,“只与一部分的要素重复”是指,所属于在步骤S05中确定出的组变量Pi的一部分的变量与在步骤S04中提取出的变量(所属于与进行提取的对象的程序块对应的更新变量集合Qn的变量)重复,除了所属于组变量Pi的一部分的变量以外的其它的变量不与在步骤S04中提取出的变量重复。
此处,针对各组变量,如果将判断为同时更新程度是“一部分”的程序块的程序块ID定义为“存在漏更新的程序块ID”,则能够作为确定出漏更新部分的信息而利用。
进入步骤S08,耦合度计算部27求出在步骤S06中判断为同时更新程度是“完全”的程序块的数量(完全重复程序块数量)。然后,耦合度计算部27求出在步骤S06中判断为同时更新程度是“一部分”的程序块的数量(部分重复程序块数量)。完全重复程序块数量与部分重复程序块数量之和,表示在步骤S04中提取出的变量与所属于在步骤S05中确定出的组变量的至少一部分变量重复的程序块的数量,该和表示判断为同时更新程度是“一部分”或者“完全”的程序块的数量。耦合度计算部27将判断为同时更新程度是“完全”的程序块的数量相对于该和的比例计算为“耦合度”。
即,在“耦合度”的计算中,只使用将同时更新程度判断为“一部分”或者“完全”的程序块的数量,将判断为同时更新程度为“没有”的程序块的数量排除。因此,相对于组变量的要素即更新变量没有进行更新的程序块的数量不会对“耦合度”的计算造成影响其结果,“耦合度”成为表示下述比例的指标,该比例是在对组变量的要素即更新变量的至少一部分进行更新的程序块中,对组变量的要素即更新变量的全部进行访问的程序块的比例。
进入步骤S09,漏更新变量提取部28在判断为同时更新程度是“一部分”的程序块中,从所属于组变量的要素中将不属于与该程序块对应的更新变量集合的要素作为“漏更新变量”而提取。
进入步骤S10,检查结果输出部29输出步骤S06中的、是否存在漏更新的判断结果。此时,检查结果输出部29能够将以下三个内容中的至少任意一者与步骤S06中的判断结果相关联而输出,该三个内容是,对在步骤S07中提取出的程序块进行确定的信息、在步骤S08中计算出的耦合度、以及对在步骤S09中确定出的漏更新变量进行确定的信息。
为了作为对漏更新变量进行确定的信息而利用,在步骤S09中,能够将“漏更新变量的集合R”定义为从组变量Pi中除去更新变量集合Qn而得到的差集合(R=Pi\Qn)。即,能够将“漏更新变量的集合R”定义为属于组变量Pi而不属于更新变量集合Qn的要素的集合。
图14的表是针对每个组变量P1~P3,对在图3的步骤S07中提取出的漏更新部分、在步骤S08中计算出的耦合度以及在步骤S09中提取出的漏更新变量进行汇总而得到的表。漏更新部分利用“存在漏更新的程序块ID”进行表示,漏更新变量的一览利用“漏更新变量的集合R”进行表示。上述的“存在漏更新的程序块ID”以及“漏更新变量的集合R”分别只是确定出漏更新部分、漏更新变量的信息的一个例子。
图15的表表示在步骤S10中输出的判断结果的一个例子。检查结果输出部29针对每个组变量P1~P3,输出是否存在漏更新的判断结果。“有无漏更新”表示是否存在漏更新的判断结果。图15的表表示出下述的例子,即,将“耦合度”、作为对漏更新部分进行确定的信息的“程序块ID”、“文件名”以及“行数”、以及“漏更新变量”与是否存在漏更新的判断结果相关联而输出的例子。检查结果输出部29只要针对每个组变量P1~P3,至少输出是否存在漏更新的判断结果即可。
另外,在图15的例子中,输出耦合度是100%,即没有漏更新部分的组变量P2。关于组变量P2没有漏更新部分。即,在多个程序块(程序块ID:n=1~4)中,没有由同时性判断部25判断为与组变量P2={X、Z}的同时更新程度是“一部分”的程序块。在该情况下,也可以是检查结果输出部29将确定出组变量P2的信息,例如所属于组变量P2的变量{X、Z}与判断结果相关联而输出。
基于图15所示的输出例,用户能够在图4(a)的第9行之后追加用于执行Y的更新处理的语句。另外,用户能够发现图4(c)的第4行所示的关于W的更新处理的语句有可能是错误的,而根据需要进行将语句从W的更新处理变更为Y的更新处理的修正。
可知下述内容,即,针对上述的在图4(a)的第9行之后进行语句的追加以及对图4(c)的第4行进行修正而得到的源代码,再次通过本发明即数据漏更新检查装置进行检查,在此情况下,在图15中所示的有无漏更新中表示为“有”的部分全部变为“没有”。其结果,能够消除针对构成组变量的变量的漏更新。
【实施方式的效果】
在计算机程序中,在对2维或3维座标、地址薄等,利用多个变量表现一个状态、信息的数据进行处理的情况下,通常将多个变量作为一个组变量进行管理以及访问。在对组变量进行登记或更新时,始终同时对所属于组变量的所有的要素(变量)进行登记或者更新。这是为了不在变量彼此之间产生值的新旧度的不匹配。但是,如果执行只对一部分的要素(变量)进行更新的处理,然后,在组变量内混合存在具有旧时刻或者地点的更新信息的要素(变量)、和具有新时刻或者地点的更新信息的要素(变量)。其结果,整体表现出不正确的状态或信息。
作为具体的事例,使用图16中所示的计算机程序的例子进行说明。计算机程序中的“Sem_Lock(ID1)”表示利用由ID1识别出的信号量的保护区间的开始命令,“Sem_UnLock(ID1)”表示利用由ID1识别出的信号量的保护区间的结束命令。在图16所示的计算机程序的例子中,进行将变量X、Y、Z作为要素的组变量的更新。原本,所有的要素X、Y、Z应该始终被同时访问。但是,如标号AM1所示,在第21行处遗漏了“Z”的更新,如标号AM2所示,在第25行处遗漏了“Y”的更新。
在本发明的实施方式所涉及的数据漏更新检查装置中,程序块分类部22将作为检查对象的计算机程序中所包含的语句分类为多个程序块(图9),更新变量提取部23对在各程序块中被更新的变量分别进行提取(图10)。而且组变量确定部24确定出与每个程序块对应的更新变量集合,将多个更新变量集合中的至少1个确定为组变量(图11)。同时性判断部25使用与程序块对应的更新变量集合与组变量的包含关系,判断程序块的同时更新程度(图13),检查结果输出部29将该判断结果作为数据漏更新检查结果D04,而输出至输入输出装置12或显示装置15(图15)。通过输出判断结果,能够向用户通知在多个程序块中,是否存在有在组变量中所包含的所有的变量(变量)中没有同时更新的程序块。其结果,能够使用户注意到有可能发生变量的漏更新的程序块的存在。
在存在由同时性判断部25判断为同时更新程度是一部分的程序块的情况下,在多个程序块中,存在有在组变量中所包含的所有的变量(变量)中没有同时更新的程序块。在该情况下,针对为了表示1个状态或信息而需要同时更新的多个变量,有可能发生变量的漏更新。因此,通过输出判断结果,能够检测出在内容耦合度较高的变量(即组变量)中存在一部分的变量没有被同时访问的部分。而且,能够使用户注意到存在没有正确编码的部分。此外,能够使用户从大量的源代码中注意到不能用人眼判断出的变量的漏更新。如遗留代码这种未备齐规格书的代码、由于分散开发等而在其它网点开发的代码等,在与变量之间的内容耦合关系相关的信息不足的情况下,能从源代码自动检测出的效果较为显著。
数据漏更新检查装置具有漏更新部分提取部26,其对利用同时性判断部25判断为同时更新程度是一部分的程序块进行提取(图14)。将对利用漏更新部分提取部26提取出的程序块进行确定的信息与前述判断结果相关联而输出(图15)。在多个程序块中,确定出应该进行检验的程序块,因此能够提高用户的检验作业的效率。
数据漏更新检查装置具有耦合度计算部27,其计算出下述比例作为耦合度(图14),即,利用同时性判断部25判断为同时更新程度是完全的程序块的数量(完全重复程序块数量),相对于利用同时性判断部25判断为同时更新程度是一部分的程序块的数量(部分重复程序块数量)与利用同时性判断部25判断为同时更新程度是完全的程序块的数量(完全重复程序块数量)之和的比例。而且,将利用耦合度计算部27计算出的比例(耦合度)与前述的判断结果相关联而输出(图15)。因此,能够将变量漏更新的可能性数值化。能够从源代码自动地测定出变量之间的内容耦合度。在存在有所提取出的变量只与所属于组变量的一部分的要素重复的程序块的情况下,比例(耦合度)越高,即,越接近100%,变量的漏更新的可能性越高。作为有可能发生变量的漏更新的部分,在输出对多个集合或多个程序块进行确定的信息的情况下,由于能够向用户告知作为检验对象的优先级,因此能够提高用户的检验作业的效率。通过对耦合度小于100%但非常接近100%的值的组变量进行检查,能够高效地发现如下述的问题,即由于遗留代码的移植错误、分散开发的源代码的结合错误而导致一部分的要素(变量)的更新发生遗漏。
数据漏更新检查装置具有漏更新变量提取部28,其在多个程序块中存在利用同时性判断部25判断为同时更新程度是一部分的程序块的情况下,从组变量的要素中提取出不属于与该程序块对应的更新变量集合的要素(图14)。而且,将利用漏更新变量提取部28提取出的变量与判断结果相关联而输出(图15)。因此,能够确定出有可能发生漏更新的要素(变量)。由于用户能够容易确定出应该检验的部分,因此能够提高用户的检验作业的效率。
数据漏更新检查装置在多个程序块中不存在利用同时性判断部25判断为同时更新程度是一部分的程序块的情况下,将用于确定组变量的信息与前述的判断结果相关联而输出。因此,能够在作为检查对象的计算机程序中,确定出没有发生变量的漏更新的要素(变量)的集合。因此,作为应当维持或管理为计算机程序的规格的信息,能够容易得到有用性较高的信息。
上面,对本发明的实施方式进行了说明,但这些实施方式仅是为了便于理解本发明而记载的例示,本发明不限定于该实施方式。本发明的技术范围不限于在上述实施方式中所公开的具体的技术问题,也包含能够容易从其中导出的各种的变形、变更、替代技术等。本领域技术人员从该公开内容能够得到各种的替代实施方式、实施例以及应用技术。
本申请基于2013年1月21日申请的日本专利申请第2013-008353号申请优先权,将该申请的全部内容作为参照引入本说明书中。
工业实用性
根据本发明,对在程序块中被更新的变量进行提取,并对与该程序块对应的更新变量集合进行确定,从该更新变量集合中将至少一个确定为组变量。而且,通过使用更新变量集合与组变量的包含关系,从而针对每个程序组,判断相对于组变量的同时更新程度。通过对判断结果进行输出,能够针对为了表示出1个状态或者信息而需要同时更新的多个变量,使用户注意到变量的漏更新的可能性。
标号的说明
21 源代码输入部
22 程序块分类部
23 更新变量提取部
24 组变量确定部
25 同时性判断部
26 漏更新部分提取部
27 耦合度计算部
28 漏更新变量提取部
29 检查结果输出部
30 执行函数解析部
31 程序块确定部
D01 源代码(计算机程序)
D02 入口点一览
D03 块分隔符一览
D04 数据漏更新检查结果
Pi 组变量
Qn 更新变量集合
Claims (6)
1.一种数据漏更新检查装置,其对计算机程序进行检查,
该数据漏更新检查装置的特征在于,具有:
程序块分类部,其将作为检查对象的所述计算机程序中所包含的语句,分类为多个程序块;
更新变量提取部,其针对每个所述程序块,提取出所述程序块中被更新的变量;
组变量确定部,其确定出与每个所述程序块对应的更新变量集合,将所述多个更新变量集合中的至少1个确定为组变量;
同时性判断部,其使用与所述程序块对应的所述更新变量集合与所述组变量的包含关系,判断所述程序块的同时更新程度;以及
检查结果输出部,其输出利用所述同时性判断部得到的判断结果。
2.根据权利要求1所述的数据漏更新检查装置,其特征在于,
还具有漏更新部分提取部,该漏更新部分提取部提取利用所述同时性判断部判断为同时更新程度是一部分的程序块,
所述检查结果输出部将对利用所述漏更新部分提取部提取出的所述程序块进行确定的信息与所述判断结果相关联而输出。
3.根据权利要求1或2所述的数据漏更新检查装置,其特征在于,
还具有耦合度计算部,该耦合度计算部计算出下述比例,即利用所述同时性判断部判断为同时更新程度是完全的程序块的数量,相对于利用所述同时性判断部判断为同时更新程度是一部分的程序块的数量与利用所述同时性判断部判断为同时更新程度是完全的程序块的数量之和的比例,
所述检查结果输出部将利用所述耦合度计算部计算出的比例与所述判断结果相关联而输出。
4.根据权利要求1或2所述的数据漏更新检查装置,其特征在于,
还具有漏更新变量提取部,该漏更新变量提取部在所述多个程序块中存在利用所述同时性判断部判断为同时更新程度是一部分的程序块的情况下,从所述组变量的要素中提取出不属于与该程序块对应的更新变量集合的要素,
所述检查结果输出部将利用所述漏更新变量提取部提取出的要素与所述判断结果相关联而输出。
5.根据权利要求1或2所述的数据漏更新检查装置,其特征在于,
在所述多个程序块中不存在利用所述同时性判断部判断为同时更新程度是一部分的程序块的情况下,所述检查结果输出部将对所述组变量进行确定的信息与所述判断结果相关联而输出。
6.一种数据漏更新检查方法,其对计算机程序进行检查,
该数据漏更新检查方法的特征在于,
将作为检查对象的所述计算机程序中所包含的语句,分类为多个程序块;
针对每个所述程序块,提取出所述程序块中被更新的变量;
确定出与每个所述程序块对应的更新变量集合,将所述多个更新变量集合中的至少1个确定为组变量;
使用与所述程序块对应的所述更新变量集合与所述组变量的包含关系,判断所述程序块的同时更新程度;以及
输出所述判断的结果。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013008353 | 2013-01-21 | ||
JP2013-008353 | 2013-01-21 | ||
PCT/JP2013/084612 WO2014112303A1 (ja) | 2013-01-21 | 2013-12-25 | データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104885060A CN104885060A (zh) | 2015-09-02 |
CN104885060B true CN104885060B (zh) | 2016-10-12 |
Family
ID=51209405
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380069207.8A Active CN104885060B (zh) | 2013-01-21 | 2013-12-25 | 数据漏更新检查装置、数据漏更新检查方法 |
Country Status (3)
Country | Link |
---|---|
JP (1) | JP5967225B2 (zh) |
CN (1) | CN104885060B (zh) |
WO (1) | WO2014112303A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104899616B (zh) * | 2015-04-10 | 2018-09-07 | 中国科学技术大学先进技术研究院 | 一种基于智能工卡的信息管理方法、***和设备 |
CN109725629B (zh) * | 2018-12-29 | 2020-05-22 | 一汽-大众汽车有限公司 | 一种整车控制器刷新测试*** |
CN112612516B (zh) * | 2020-12-30 | 2024-05-03 | 瑞庭网络技术(上海)有限公司 | 一种代码处理方法及装置 |
CN113176889A (zh) * | 2021-04-28 | 2021-07-27 | 维沃移动通信有限公司 | 程序更新方法、装置和电子设备 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2735698B2 (ja) * | 1991-01-21 | 1998-04-02 | 富士通株式会社 | インタフェース検証処理方式 |
JP2003316615A (ja) * | 2002-04-26 | 2003-11-07 | Nissan Motor Co Ltd | 演算順序チェック装置およびその方法 |
CN100565541C (zh) * | 2005-04-21 | 2009-12-02 | 松下电器产业株式会社 | 程序变换装置和变换方法 |
JP2006331027A (ja) * | 2005-05-25 | 2006-12-07 | Nissan Motor Co Ltd | 検査装置、検査方法、及び検査プログラム |
JP2008090696A (ja) * | 2006-10-04 | 2008-04-17 | Nissan Motor Co Ltd | プログラム解析装置及びプログラム解析方法 |
JP4839424B2 (ja) * | 2008-12-15 | 2011-12-21 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムの解析を支援するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム |
JP2010157147A (ja) * | 2008-12-29 | 2010-07-15 | Sharp Corp | ソフトウェア検査装置、ソフトウェア検査方法およびソフトウェア検査プログラム |
JP5516736B2 (ja) * | 2010-07-20 | 2014-06-11 | 株式会社日立製作所 | ソフトウェア保守支援装置及びそれにより検証した電子制御装置 |
-
2013
- 2013-12-25 WO PCT/JP2013/084612 patent/WO2014112303A1/ja active Application Filing
- 2013-12-25 JP JP2014557376A patent/JP5967225B2/ja active Active
- 2013-12-25 CN CN201380069207.8A patent/CN104885060B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
WO2014112303A1 (ja) | 2014-07-24 |
JP5967225B2 (ja) | 2016-08-10 |
JPWO2014112303A1 (ja) | 2017-01-19 |
CN104885060A (zh) | 2015-09-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104063314B (zh) | 一种测试数据自动生成装置及方法 | |
CN104885060B (zh) | 数据漏更新检查装置、数据漏更新检查方法 | |
CN109543410B (zh) | 一种基于语义映射关联的恶意代码检测方法 | |
CN108345468B (zh) | 基于树和序列相似度的编程语言代码查重方法 | |
CN106062751A (zh) | 对与数据类型有关的数据剖析操作的管理 | |
CN104866764B (zh) | 一种基于对象引用图的Android手机恶意软件检测方法 | |
CN114153962A (zh) | 一种数据匹配方法、装置及电子设备 | |
CN106557420B (zh) | 测试db数据生成方法及装置 | |
CN111581638A (zh) | 一种开源软件的安全分析方法及装置 | |
CN107526970A (zh) | 基于动态二进制平台检测运行时程序漏洞的方法 | |
CN103176905B (zh) | 一种缺陷关联方法及装置 | |
CN113239365A (zh) | 一种基于知识图谱的漏洞修复方法 | |
Accattoli et al. | Multi types and reasonable space | |
CN112948429B (zh) | 一种数据报送方法、装置和设备 | |
Zhang et al. | Permission set mining: Discovering practical and useful roles | |
CN113468524A (zh) | 基于rasp的机器学习模型安全检测方法 | |
CN114090076A (zh) | 应用程序的合规性判别方法和装置 | |
Eyal-Salman et al. | Identifying traceability links between product variants and their features | |
CN107729518A (zh) | 一种关系型数据库的全文检索方法及装置 | |
JP5487078B2 (ja) | ソフトウェア資産整理方法及び装置 | |
CN112948415A (zh) | Sql语句检测方法、装置、终端设备及存储介质 | |
Das Sarma et al. | Building a generic debugger for information extraction pipelines | |
CN114969131B (zh) | 一种信息的查询方法、装置及设备 | |
JPH09292986A (ja) | 部品抽出方法 | |
CN106933657A (zh) | 数据库死锁处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |