CN104937558A - 变量访问一贯性检查装置、变量访问一贯性检查方法、变量访问一贯性检查程序 - Google Patents
变量访问一贯性检查装置、变量访问一贯性检查方法、变量访问一贯性检查程序 Download PDFInfo
- Publication number
- CN104937558A CN104937558A CN201380071044.7A CN201380071044A CN104937558A CN 104937558 A CN104937558 A CN 104937558A CN 201380071044 A CN201380071044 A CN 201380071044A CN 104937558 A CN104937558 A CN 104937558A
- Authority
- CN
- China
- Prior art keywords
- variable
- program block
- branch process
- branched program
- write
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/28—Error detection; Error correction; Monitoring by checking the correct order of processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
访问一贯性检查装置确定由基于规定的条件而切换并执行多个分支处理的一组语句构成的分支程序块,检测在分支程序块内进行写入的变量(S01)。检测能够在分支程序块内切换的分支处理的数量,检测对变量进行写入的分支处理的数量(S04),判断能够在分支程序块内切换的分支处理的数量是否与对变量进行写入的分支处理的数量一致(S06)。而且,在判断为能够在分支程序块内切换的分支处理的数量与对变量进行写入的分支处理的数量不一致的情况下,将变量以及分支程序块的至少一方输出(D07)。
Description
技术领域
本发明涉及一种变量访问一贯性检查装置、变量访问一贯性检查方法、变量访问一贯性检查程序。
背景技术
当前,已知对由编程语言所记述的源程序中的控制流、数据流以不执行该源程序的方式进行分析的静态分析方法(参照专利文献1)。
专利文献1:日本特开平09-282173号公报
发明内容
根据专利文献1的静态分析方法,能够明确输入和输出的关系而使程序的构造可视化。但是,无法使用户注意到实现了可视化的程序构造中的有可能产生缺陷的位置。
本发明就是鉴于上述课题而提出的,其目的在于提供能够使用户注意到程序构造中的有可能产生缺陷的位置的变量访问一贯性检查装置、变量访问一贯性检查方法、变量访问一贯性检查程序。
本发明的一个实施方式所涉及的变量访问一贯性检查装置,对能够在分支程序块内切换的分支处理的数量进行检测,检测出对变量进行写入的分支处理的数量,判断能够在分支程序块内切换的分支处理的数量是否与对变量进行写入的分支处理的数量一致。而且,在判断为能够在分支程序块内切换的分支处理的数量与对所述变量进行写入的分支处理的数量不一致的情况下,将变量以及分支程序块的至少一方输出。
附图说明
图1是表示本发明的第1实施方式所涉及的变量访问一贯性检查装置的硬件结构的框图。
图2是表示CPU11的功能结构的框图。
图3是表示由本发明第1实施方式所涉及的变量访问一贯性检查装置执行的信息处理的流程、以及在信息处理过程中生成的中间数据的数据流图。
图4(a)、(b)、(c)是表示作为读入的源代码D01而由C语言记述的程序的一个例子的图。
图5(a)、(b)、(c)是表示由分支程序块确定部21确定的分支程序块ID1、ID2的图。
图6是表示将变量检测部22所进行的处理的结果汇总而得到的“分支程序块变量访问一览”的表。
图7(a)、(b)是表示将语句编号分配处理的结果汇总而得到的“语句编号分配一览(D03)”的表。
图8是表示将变量访问顺序确定处理的结果汇总而得到的“变量访问顺序一览(D04)”的表。
图9(a)、(b)、(c)是用于说明路径数量确定处理(S04)的内容的图。
图10是表示将路径数量确定处理(S04)的结果汇总而得到的“路径数量和变量访问顺序一览(D05)”的表。
图11是表示将访问比例判定(S05)的结果汇总而得到的“访问比例一览(D06)”的表。
图12是表示将访问一贯性判定处理(S06)的结果汇总而得到的“访问一贯性判定结果(D07)”的表。
图13(a)、(b)、(c)是表示图4(a)、(b)、(c)的程序修正例的图。
图14(a)、(b)是表示根据规格方面的条件而将值改变并写入的情况下的例子的流程图。
图15是表示变量的写入处理在确定的分支处理中遗漏的例子的流程图。
图16是表示第2实施方式所涉及的CPU11’的功能结构的框图。
图17是表示由本发明的第2实施方式所涉及的变量访问一贯性检查装置执行的信息处理的流程、以及在信息处理的过程中生成的中间数据的数据流图。
图18是表示将临界值判定处理(S07)的结果汇总而得到的“临界值判定结果(D09)”的表。
图19(a)、(b)是表示由比率计算部25计算出的比率不同的情况的流程图。
具体实施方式
参照附图,对本发明的实施方式进行说明。在附图的记载中,对相同部分标注相同标号并省略说明。
(第1实施方式)
[变量访问一贯性检查装置的硬件结构]
本发明的第1实施方式所涉及的变量访问一贯性检查装置,例如能够应用于由搭载于车辆上的电子控制装置(ECU)执行的计算机程序的变量访问一贯性检查处理。特别是对因计算机程序的规格遗漏或者编码遗漏而引起的缺陷的可能性进行检查。
参照图1,对本发明的第1实施方式所涉及的变量访问一贯性检查装置的硬件结构进行说明。作为变量访问一贯性检查装置的硬件结构,能够使用通用的计算机。例如,变量访问一贯性检查装置具有:输入输出装置12,其从存储介质读入作为检查对象的计算机程序(源代码D01);存储装置14,其存储由输入输出装置12读入的源代码D01、分析的中间数据;CPU(中央处理装置)11,其执行各种运算并分析源代码D01;输入装置13,其用于使用户将分析所需的信息输入;以及显示装置15,其对从CPU11输出的检查结果进行显示。还能够利用输入输出装置12将检查结果写入至存储介质。
另外,变量访问一贯性检查装置还能够作为客户服务器模型而实现。例如,经由计算机网络将通用的个人计算机(客户端)与服务器连接。由此,能够经由计算机网络而将具有图1所示的CPU11的服务器与输入输出装置12、输入装置13、存储装置14、或者显示装置15连接。在该情况下,变量访问一贯性检查装置主要由CPU11(服务器)构成,在变量访问一贯性检查装置中不包含输入输出装置12、输入装置13、存储装置14、或者显示装置15。在该情况下,只要取代存储装置14而在服务器11所具有的内部硬盘暂时存储分析的过程中所生成的中间数据即可。
参照图2,对CPU11的功能结构进行说明。在具有CPU11的计算机中,安装并执行用于使具有CPU11的计算机作为变量访问一贯性检查装置而起作用的计算机程序(变量访问一贯性检查程序)。由此,CPU11构成以下所示的各信息处理部。此外,在这里,示出了通过软件实现变量访问一贯性检查装置的例子,但是,当然还能够准备用于执行以下所示的各信息处理的专用硬件而构成变量访问一贯性检查装置。
CPU11构成分支程序块确定部21、变量检测部22、总分支数量检测部23、写入分支数量检测部24、分支数量判断部26、以及检查结果输出部28。
分支程序块确定部21从存储装置14读入源代码D01,从成为检查对象的计算机程序中确定分支程序块。分支程序块由基于规定的条件而切换并执行多个分支处理的一组语句构成。“语句”是指源代码中的每1行的处理单位。具体而言,例如在C语言的情况下,分支程序块是指通过if语句或者switch语句等条件进行判定并切换并执行多个处理(分支处理)的语句内的、由括号“{”和“}”包围的处理单位。作为能够判定为条件分支的位置,例如预先对“if”以及“switch”进行规定。分支程序块确定部21从成为分析对象的源代码D01中确定能够判定为条件分支的位置,将在其后续接的由“{”和“}”包围的部位确定为分支程序块。例如,在if语句的情况下,分支程序块确定部21将if语句的条件语句“()”结束之后的“{”判断为分支程序块的开始。然后,在检测出“}”、且在其后并未续接有else语句的情况下,将该“}”判断为分支程序块的结尾。另一方面,在其后续接有else语句的情况下,再次检测出接下来的“}”,并将该“}”判断为分支程序块的结尾。在if语句的情况下,在其后续接的处理在1行中结束时,有时也省略“{”、“}”,但是,在该情况下,判断为在这1行的开头存在“{”、且在这1行的末尾存在“}”,进行相同的处理。另外,在switch语句的情况下,将由“{”和“}”包围的部分理解为分支程序块。由分支程序块确定部21确定的分支程序块暂时存储于存储部14中。
变量检测部22从存储部14读入分支程序块,检测出在分支程序块内进行写入的变量。具体而言,变量检测部22针对分支程序块内的每个分支处理而检测出被写入的变量。例如,在C语言的情况下,检测出由“=”表示的式子的左边的所有变量。在确定了多个分支程序块的情况下,变量检测部22针对每个分支程序块而检测出变量。由变量检测部22检测出的变量暂时存储于存储部14中。
总分支数量检测部23从存储部14读入分支程序块,对能够在分支程序块内切换的分支处理的数量(称为“总路径数量”)进行检测。例如,在由“if”确定的分支程序块的情况下,在“if”之后续接的由“{”和“}”包围的部位表示分支处理。总分支数量检测部23将分支程序块内所包含的、由“{”和“}”包围的部位的数量作为总路径数量而进行检测。在由“switch”确定的分支程序块的情况下,总分支数量检测部23将“switch”之后续接的“case”的数量作为总路径数量而进行检测。在确定了多个分支程序块的情况下,总分支数量检测部23针对各分支程序块而检测总路径数量。由总分支数量检测部23检测出的总路径数量暂时存储于存储部14中。
写入分支数量检测部24从存储部14读入分支程序块,检测对变量进行写入的分支处理的数量(称为“写入路径数量”)。具体而言,写入分支数量检测部24将分支程序块内所包含的分支处理中的、对变量进行写入的分支处理的数量作为写入路径数量而进行检测。在确定了多个分支程序块的情况下,写入分支数量检测部24针对每个分支程序块而检测写入路径数量。并且,在1个分支程序块中检测出多个变量的情况下,写入分支数量检测部24针对各变量而检测写入路径数量。由写入分支数量检测部24检测出的写入路径数量暂时存储于存储部14中。
分支数量判断部26从存储部14读入总路径数量以及写入路径数量。并且,分支数量判断部26判断能够在分支程序块内切换的分支处理的数量(总路径数量)与对变量进行写入的分支处理的数量(写入路径数量)是否一致。在确定或者检测出多个分支程序块或者多个变量的情况下,写入分支数量检测部24针对每个分支程序块且针对每个变量进行判断。例如,分支数量判断部26可以判断图2所示的比率计算部25计算出的比率是否为100%。分支数量判断部26的判断结果暂时存储于存储部14中。
检查结果输出部28从存储部14读入分支数量判断部26的判断结果。并且,在分支数量判断部26判断为能够在分支程序块内切换的分支处理的数量与对变量进行写入的分支处理的数量不一致的情况下,检查结果输出部28将由变量检测部22检测出的变量、以及由分支程序块确定部21确定的分支程序块中的至少一方输出。
CPU11还构成非写入分支确定部27。非写入分支确定部27从存储部14读入分支数量判断部26的判断结果。并且,在能够在分支程序块内切换的分支处理的数量与对变量进行写入的分支处理的数量不一致的情况下,非写入分支确定部27确定对变量不进行写入的分支处理。确定对变量不进行写入的分支处理的信息暂时存储于存储部14中。检查结果输出部28将确定对变量不进行写入的分支处理的信息,与变量以及分支程序块中的至少一方相关联而输出。
CPU11还构成比率计算部25。比率计算部25从存储部14读入分支数量判断部26的判断结果。并且,比率计算部25计算对变量进行写入的分支处理的数量相对于能够在分支程序块内切换的分支处理的数量的比率(访问比例)。由比率计算部25计算出的比率暂时存储于存储部14中。检查结果输出部28将由比率计算部25计算出的比率,与变量以及分支程序块中的至少一方相关联而输出。
[由变量访问一贯性检查装置执行的信息处理的次序]
下面,作为本发明的第1实施方式所涉及的变量访问一贯性检查方法的一个例子,参照图3~图13,对由图1以及图2所示的变量访问一贯性检查装置执行的信息处理的次序进行说明。
首先,CPU11从输入输出装置12读入成为检查对象的源代码D01。此外,也可以预先由用户利用输入输出装置12而将源代码D01读入至变量访问一贯性检查装置内,并将该源代码D01存储于存储装置14中。作为读入的源代码D01,图4(a)、(b)、(c)示出由C语言记述的计算机程序的一个例子。成为检查对象的计算机程序记述于图4(a)、(b)、(c)所示的3个文件中。图4(a)的文件名是“Task1.c”,图4(b)的文件名是“Task2.c”,图4(c)的文件名是“foo.c”。在由C语言记述的程序的一个例子中,在各文件的左端部记载的从1开始的连续编号表示各文件的“行号”。
然后,分支程序块确定部21执行图3所示的“变量访问分析”处理(S01)。首先,分支程序块确定部21从图4(a)、(b)、(c)所示的计算机程序中确定分支程序块。具体而言,作为分支程序块的开始位置,确定“if”以及“switch”。并且,将在所确定的“if”以及“switch”之后续接的、由“{”和“}”包围的部位确定为分支程序块,并对所确定的分支程序块依次赋予识别编号。图5(a)、(b)、(c)表示由分支程序块确定部21确定的分支程序块ID1、ID2。在“Task1.c”中确定了分支程序块ID1,在“Task2.c”中确定了分支程序块ID2。所确定的分支程序块ID1、ID2暂时存储于存储部14中。
然后,变量检测部22从存储部14读入分支程序块ID1、ID2,并检测在分支程序块ID1、ID2内进行写入的变量。具体而言,检测出由“=”表示的式子的左边的所有变量。变量检测部22针对每个分支程序块ID1、ID2而检测变量。在未写入有变量的分支程序块中,检测“if”、“else”、以及“case”等分支语句。
另外,无论是否处于分支程序块内,变量检测部22都对在写入变量之后读入该变量的位置进行检测。可以不对读入该变量的位置标注分支程序块ID。
图6的表中示出将上述的变量访问分析处理(S01)的结果汇总而得到的“变量访问一览(D02)”。在图6的表中,将在分支程序块内进行写入的变量名、文件名、行号、语句、分支程序块ID、以及R/W输出。在R/W中,“W”表示对变量进行写入,“R”表示进行变量的读出。如果在检测出“if”、“else”、以及“case”等分支语句但未对变量进行写入的情况下,将“No W”输出。这里,对变量进行访问包含对变量进行写入和读入变量。图6的表中示出从图5(a)所示的分支程序块ID1中确定变量“SW1”,并从图5(b)所示的分支程序块ID2中确定变量“V1_Out”的情况。“变量访问一览(D02)”暂时存储于存储部14。
然后,变量访问一贯性检查装置执行图3所示的“语句编号分配”处理(S02)。在语句编号分配处理(S02)中,从存储部14读入源代码D01,针对每项任务(Task1.c、Task2.c)分析语句的执行顺序,对各语句赋予执行顺序编号。图7(a)、(b)表示将语句编号分配处理的结果汇总而得到的“语句编号分配一览(D03)”。在图7(a)、(b)中,“语句编号”表示语句的执行顺序。在语句编号分配处理(S02)中,从各任务的上游开始分析语句,确定程序被执行的顺序。在存在分支语句的情况下,以从上游开始依次执行所有分支的方式添加语句编号。在存在循环处理的情况下,以执行1次该循环处理的方式添加语句编号。另外,在存在子函数(子程序处理)的情况下,以执行该子程序处理的方式确定语句的执行顺序。“语句编号分配一览(D03)”暂时存储于存储部14中。
然后,变量访问一贯性检查装置执行图3所示的“变量访问顺序确定”处理(S03)。在变量访问顺序确定处理(S03)中,首先,从存储部14读入“分支程序块变量访问一览(D02)”以及“语句编号分配一览(D03)”。对图6所示的“分支程序块变量访问一览(D02)”和图7(a)、(b)所示的“语句编号分配一览(D03)”进行比较。并且,确定在分支程序块内进行访问的变量的执行顺序(语句编号)。图8表示将变量访问顺序确定处理(S03)的结果汇总而得到的“变量访问顺序一览(D04)”。根据变量访问顺序一览(D04)可知在各分支程序块中被访问的变量按照何种执行顺序被访问。“变量访问顺序一览(D04)”暂时存储于存储部14中。
接下来,变量访问一贯性检查装置执行图3所示的“路径数量确定处理”(S04)。在路径数量确定处理(S04)中,针对每个分支程序块ID1、ID2而检测总路径数量和写入路径数量。具体而言,总分支数量检测部23从存储部14读入“变量访问顺序一览(D04)”,将“if”之后续接的、由“{”和“}”包围的分支处理的数量作为总路径数量而进行检测。另外,总分支数量检测部23将“switch”之后续接的“case”的数量作为总路径数量而进行检测。
另外,写入分支数量检测部24将分支程序块内所包含的分支处理中的、对变量进行写入的分支处理的数量作为写入路径数量而进行检测。在1个分支程序块中检测出多个变量的情况下,写入分支数量检测部24针对各变量检测写入路径数量。
参照图9(a)、(b)、(c),对路径数量确定处理(S04)的内容进行说明。在图9(a)的“Task1.c”中,分支程序块ID1的总路径数量为5,变量“SW1”的写入路径数量为5。另外,在图9(b)的“Task2.c”中,分支程序块ID2的总路径数量为6,变量“V1_Out”的写入路径数量为5。图10的表中示出将图9所示的路径数量确定处理(S04)的结果汇总而得到的“路径数量和变量访问顺序一览(D05)”。相对于图6的表,图10的表中针对每个变量追加有总路径数量和写入路径数量。“路径数量和变量访问顺序一览(D05)”暂时存储于存储部14中。
然后,变量访问一贯性检查装置执行图3所示的“访问比例判定”处理(S05)。在访问比例判定处理(S05)中,对每个分支程序块的访问比例进行计算。具体而言,比率计算部25从存储部14读入“路径数量和变量访问顺序一览(D05)”,计算出写入路径数量相对于总路径数量的比率(访问比例)即写入路径数量(B)/所有路径数量(A)。该比率是表示进行写入的分支处理相对于分支程序块所包含的所有分支处理占有多大比例的数值。
图11的表中示出将访问比例判定处理(S05)的结果汇总而得到的“访问比例一览(D06)”。相对于图10的表,图11的表中追加有访问比例(比率)。变量“SW1”的比率为5/5=100%。即,在分支程序块ID1所包含的所有分支处理中,毫无遗漏地对变量“SW1”进行写入处理。另一方面,变量“V1_Out”的比率为5/6=83%。不存在对变量“V1_Out”的写入处理的比例为17%。“访问比例一览(D06)”暂时存储于存储部14中。
接下来,变量访问一贯性检查装置执行图3所示的“访问一贯性判定(S06)”处理。在访问一贯性判定处理(S06)中,检测并输出所有路径数量与写入路径数量不一致的部位。具体而言,首先,分支数量判断部26从存储部14读入“访问比例一览(D06)”,判断通过访问比例判定处理(S05)而计算出的比率是否为100%。并且,在分支数量判断部26判断为总路径数量与写入路径数量不一致的情况下,检查结果输出部28将由变量检测部22检测出的变量、以及由分支程序块确定部21确定的分支程序块中的至少一方输出。
图12的表中示出将访问一贯性判定处理(S06)的结果汇总而得到的“访问一贯性判定结果(D07)”。图12的表中示出从图11的表中提取的总路径数量与写入路径数量不一致的变量“V1_Out”的内容。如图12所示,检查结果输出部28将总路径数量与写入路径数量不一致的变量名、文件名、行号、语句编号、语句、分支程序块ID、总路径数量、写入路径数量、访问比例、以及R/W输出。
用户(设计者)能够通过访问一贯性判定处理(S06)而确定总路径数量与写入路径数量不一致的变量。另外,在文件“Task2.c”的第18行的语句“case 4:”之后,保持未对变量“V1_Out”进行写入的状态,在文件“Task2.c”的第5行读入变量“V1_Out”。由此,用户能够复查是否存在规格以及编码的遗漏。设计者能够通过该复查而注意到规格以及编码的遗漏并追加处理。图13(a)、(b)、(c)中示出图4(a)、(b)、(c)所示的程序的修正例。在图4(b)的文件“Task2.c”的第18行的语句“case 4:”之后,如图13(b)的标号AM1所示,追加对变量“V1_Out”写入26的语句。
[第1实施方式的效果]
在软件的处理中对变量进行访问时,大多根据规格方面的条件而写入不同的值。例如,存在在汽车等中使用的空调。手动进行设定的空调,能够将风量、温度分别划分为几个等级,并阶梯式地调整输出。在该情况下,作为软件的处理而嵌入设置如下逻辑,即,从端口读入风量、温度的各开关的状态,并对空调的输出变量进行设定。图14(a)、(b)是表示根据规格方面的条件而写入不同的值的情况下的例子的流程图。在图14(a)中,示出根据变量“SW1”的值而使对“V1_Out”写入的值发生变化的例子。在图14(b)中,示出根据变量“SW2”的值而使对“V2_Out”写入的值发生变化的例子。这样,这种根据“条件”而“必须改写变量的值”的规格在软件中频繁地出现。
但是,如果因存在较多的条件而导致处理变得复杂,则有时会忘记针对分支程序块内的某个路径(分支处理)而记述变量的写入处理。其原因在于,存在未针对所有分支处理而妥当地考虑规格的情况,或者存在因分支处理的数量过多而导致无法对所有分支处理都进行测试的情况。因此,在分支程序块内存在变量的写入处理的情况下,需要进行检查,以使得变量的写入处理不会在确定的分支处理中遗漏。
图15是表示在确定的分支处理中遗漏了变量的写入处理的例子的流程图。根据表示空调的温度开关的状态的变量“SW1”的状态而切换空调的设定。变量“SW1”能够从0~4中取值。在变量“SW1”为0~3的情况下,分别进行对“V1_Out”写入18、20、22、24的处理,然后,分支收敛。在变量“SW1”为4的情况下,需要进行对“V1_Out”写入26的处理,但是,分支在未进行该写入处理的状态下收敛。在该情况下,如果详细的规格书中对变量“SW1”为4时的路径(分支处理)的规格进行了定义、且针对变量“SW1”为0~4时的所有路径(分支处理)实施了单体测试,则会注意到变量“SW1”为4的情况下的写入处理的遗漏。但是,在制作详细规格的阶段,在未考虑变量“SW1”为4时的路径(分支处理)的规格的情况下,即使实施单体测试,也无法检测出写入处理的遗漏。其原因在于,并未考虑变量“SW1”为4时的路径(分支处理)的规格。另外,即使在考虑了变量“SW1”为4时的路径(分支处理)的规格的情况下,在分支处理的数量较多从而无法对所有分支处理都实施单体测试的情况下,也有可能无法检测出写入处理的遗漏。这样,在现有的规格的制作、单体测试的实施过程中,难以抑制因写入处理的遗漏而引起的缺陷。另外,还不存根据这种观点而进行检测的工具。即,在通过分支处理而将值写入的情况下,必须验证是否在所有路径(分支处理)进行了变量的写入处理(访问的一贯性)。
根据第1实施方式,在分支数量判断部26判断为总路径数量与写入路径数量不一致的情况下,如图12所示,检查结果输出部28将变量以及分支程序块的至少一方输出。在总路径数量与写入路径数量不一致的情况下,存在规格遗漏或者编码遗漏的可能性。因此,通过将变量或者分支程序块的至少一方输出,能够使用户注意到程序构造中的有可能产生缺陷的部位。对于需要在所有的分支处理中对变量进行写入的程序构造,能够提示产生缺陷的可能性。这样,在从设计阶段开始便在规格中遗漏了处理的情况下,或者在即使在规格中进行了定义但却无法实施单体测试的程序构造的情况下,能够抑制写入处理遗漏的缺陷。另外,能够使用户注意到无法根据大量的源代码而凭借人眼进行判断的变量访问的一贯性未得到保持的情况。另外,能够预先防止无法通过在软件开发流程中使用的测试(单体测试、综合测试、系统测试)而发现的、变量访问一贯性未得到保持的程序的错误。
在总路径数量与写入路径数量不一致的情况下,非写入分支确定部27确定对变量不进行写入的分支处理,如图12所示,检查结果输出部28将确定对变量不进行写入的分支处理的信息,与变量以及分支程序块的至少一方相关联而输出。在程序构造中应该进行验证的部分得到确定,因此,能够提高由用户进行的验证作业的效率。此外,在“确定分支处理的信息”中包含文件名、行号、语句编号、以及语句。
比率计算部25计算出写入路径数量相对于总路径数量的比率,检查结果输出部28将计算出的比率,与变量以及分支程序块的至少一方相关联而输出。在总路径数量与写入路径数量不一致的情况下,比率(访问比例)越高即越接近100%,规格遗漏或者编码遗漏的可能性越高。因此,将比率与变量以及分支程序块的至少一方相关联而输出。由此,能够使缺陷的可能性实现数值化。作为有可能产生缺陷的部位,在输出多个变量或者多个分支程序块的情况下,能够向用户告知作为验证对象的优先级,因此,能够提高由用户进行的验证作业的效率。这样,在源代码内存在大量的分支处理的情况下,针对每个分支程序块而计算出比率(访问比例),并向用户通知该比率。由此,能够使用户注意到未产生规格的遗漏、编码的遗漏的情况,能够预先防止缺陷。
(第2实施方式)
在第2实施方式中,对还具有利用预先规定的阈值而判定由比率计算部25计算出的比率的功能的变量访问一贯性检查装置进行说明。参照图16,对第2实施方式所涉及的CPU11’的功能结构进行说明。此外,第2实施方式所涉及的变量访问一贯性检查装置的硬件结构与图1相同,将说明省略。如图16所示,除了图2所示的功能结构(21~28)以外,CPU11’还具有比率判断部29,该比率判断部29判断由比率计算部25计算出的比率是否比预先规定的阈值高。
参照图17,对由本发明的第2实施方式所涉及的变量访问一贯性检查装置执行的信息处理的流程以及在信息处理的过程中生成的中间数据进行说明。直至访问一贯性判定处理(S06)为止的信息处理(S01~S06)、源代码D01、以及直至访问一贯性判定结果D07为止的中间数据(D02~D07)与图3相同,将说明省略。
在访问一贯性判定处理(S06)之后,变量访问一贯性检查装置执行图17所示的“临界值判定”处理(S07)。在临界值判定处理(S07)中,比率判断部29判断由比率计算部25计算出的比率是否比预先规定的阈值高。比率判断部29从存储部14读入图12所示的访问一贯性判定结果(D07)以及由用户预先设定的临界值(D08),利用访问一贯性判定结果(D07)以及临界值(D08)进行判断。并且,如图18的表所示,检查结果输出部28将比率判断部29的判断结果,与变量以及分支程序块的至少一方相关联而输出。
图19(a)、(b)表示由比率计算部25计算出的比率不同的情况。如图19(a)所示,在变量“V1_Out”的写入处理中,总路径数量为6,与此相对,写入路径数量为5,因此,访问比例(比率)为83%。与此相对,如图19(b)所示,在变量“V2_Out”的写入处理中,总路径数量为3,与此相对,写入路径数量为2,因此,访问比例(比率)为66%。在图19(b)所示的情况下,变量“V2_Out”的访问比例(比率)较低,因此,规格的遗漏或者编码的遗漏的可能性较低。因此,用户预先设定阈值。并且,比率判断部29判断由比率计算部25计算出的比率是否比预先规定的阈值高。而且,对于比阈值大的比率,能够输出警告。由此,在即将出厂之前等,在用户的验证时间较少时,用户能够重点验证危险性较高的部位。
图18的表中示出将临界值判定处理(S07)的结果汇总而得到的“临界值判定结果(D09)”。对于总路径数量与写入路径数量不一致的变量“V1_Out”以及“V2_Out”,图18的表中还追加有访问比例(比率)的判断结果以及阈值(80%)。变量“V2_Out”的访问比例(67%)比阈值(0.8)低。另一方面,变量“V1_Out”的访问比例(83%)比阈值(0.8)高。
即便是一眼就能发现访问一贯性未得到保持的程序构造,实际上也存在按照预想而设计的情况。因此,直至查明真正的缺陷为止的验证效率有时会降低。因此,比率判断部29判断比率是否比预先规定的阈值高,检查结果输出部28将比率判断部29的判断结果,与变量以及分支程序块的至少一方相关联而输出。由此,对于作为验证对象的优先级,能够得到基于阈值的判定结果,因此,能够明确验证对象而进一步提高验证作业的效率。
如上所述,对本发明的实施方式进行了记载,但构成本公开的一部分的记述以及附图不应被理解为用于对本发明进行限定。对于本领域技术人员而言,根据本公开而实现的各种各样的代替的实施方式、实施例以及应用技术是显而易见的。
在即便是在分支处理(路径)中进行了写入的变量,也在分支收敛之后不进行变量的读入的情况下,变量检测部22可以不对该变量进行检测。其原因在于,如果在分支收敛之后不进行变量的读入,则即使写入路径数量与总路径数量不一致,规格的遗漏、编码的遗漏的可能性也较低。
标号的说明
21 分支程序块确定部
22 变量检测部
23 总分支数量检测部
24 写入分支数量检测部
25 比率计算部
26 分支数量判断部
27 非写入分支确定部
28 检查结果输出部
29 比率判断部
Claims (6)
1.一种变量访问一贯性检查装置,其对计算机程序进行检查,
该变量访问一贯性检查装置的特征在于,具有:
分支程序块确定部,其从成为检查对象的所述计算机程序中确定分支程序块,该分支程序块由基于规定的条件而切换并执行多个分支处理的一组语句构成;
变量检测部,其检测在所述分支程序块内进行写入的变量;
总分支数量检测部,其检测能够在所述分支程序块内切换的分支处理的数量;
写入分支数量检测部,其检测对所述变量进行写入的分支处理的数量;
分支数量判断部,其判断能够在所述分支程序块内切换的分支处理的数量是否与对所述变量进行写入的分支处理的数量一致;以及
检查结果输出部,其在所述分支数判断部判断为能够在所述分支程序块内切换的分支处理的数量与对所述变量进行写入的分支处理的数量不一致的情况下,将所述变量以及所述分支程序块的至少一方输出。
2.根据权利要求1所述的变量访问一贯性检查装置,其特征在于,
还具有非写入分支确定部,在能够在所述分支程序块内切换的分支处理的数量与对所述变量进行写入的分支处理的数量不一致的情况下,该非写入分支确定部确定对所述变量不进行写入的分支处理,
所述检查结果输出部将确定对所述变量不进行写入的分支处理的信息,与所述变量以及所述分支程序块的至少一方相关联而输出。
3.根据权利要求1或2所述的变量访问一贯性检查装置,其特征在于,
还具有比率计算部,该比率计算部计算对所述变量进行写入的分支处理的数量相对于能够在所述分支程序块内切换的分支处理的数量的比率,
所述检查结果输出部将所述比率,与所述变量以及所述分支程序块的至少一方相关联而输出。
4.根据权利要求3所述的变量访问一贯性检查装置,其特征在于,
还具有比率判断部,该比率判断部判断所述比率是否比预先规定的阈值高,
所述检查结果输出部将所述比率判断部的判断结果,与所述变量以及所述分支程序块的至少一方相关联而输出。
5.一种变量访问一贯性检查方法,其对计算机程序进行检查,
所述变量访问一贯性检查方法的特征在于,
从成为检查对象的所述计算机程序中确定分支程序块,该分支程序块由基于规定的条件而切换并执行多个分支处理的一组语句构成,
检测在所述分支程序块内进行写入的变量,
检测能够在所述分支程序块内切换的分支处理的数量,
检测对所述变量进行写入的分支处理的数量,
判断能够在所述分支程序块内切换的分支处理的数量是否与对所述变量进行写入的分支处理的数量一致,
在判断为能够在所述分支程序块内切换的分支处理的数量与对所述变量进行写入的分支处理的数量不一致的情况下,将所述变量以及所述分支程序块的至少一方输出。
6.一种变量访问一贯性检查程序,其用于对计算机程序进行检查,
所述变量访问一贯性检查程序的特征在于,使计算机实现下述功能:
从成为检查对象的所述计算机程序中确定分支程序块的功能,该分支程序块由基于规定的条件而切换并执行多个分支处理的一组语句构成;
检测在所述分支程序块内进行写入的变量的功能;
检测能够在所述分支程序块内切换的分支处理的数量的功能;
检测对所述变量进行写入的分支处理的数量的功能;
判断能够在所述分支程序块内切换的分支处理的数量是否与对所述变量进行写入的分支处理的数量一致的功能;以及
在判断为能够在所述分支程序块内切换的分支处理的数量与对所述变量进行写入的分支处理的数量不一致的情况下,将所述变量以及所述分支程序块的至少一方输出的功能。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013008352 | 2013-01-21 | ||
JP2013-008352 | 2013-01-21 | ||
PCT/JP2013/084883 WO2014112317A1 (ja) | 2013-01-21 | 2013-12-26 | 変数アクセス一貫性検査装置、変数アクセス一貫性検査方法、変数アクセス一貫性検査プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104937558A true CN104937558A (zh) | 2015-09-23 |
CN104937558B CN104937558B (zh) | 2016-11-09 |
Family
ID=51209419
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380071044.7A Active CN104937558B (zh) | 2013-01-21 | 2013-12-26 | 变量访问一贯性检查装置、变量访问一贯性检查方法 |
Country Status (3)
Country | Link |
---|---|
JP (1) | JP6015778B2 (zh) |
CN (1) | CN104937558B (zh) |
WO (1) | WO2014112317A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7480082B2 (ja) | 2021-03-08 | 2024-05-09 | 株式会社東芝 | ソフトウェア開発支援装置、方法及びプログラム |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003316615A (ja) * | 2002-04-26 | 2003-11-07 | Nissan Motor Co Ltd | 演算順序チェック装置およびその方法 |
JP2006331027A (ja) * | 2005-05-25 | 2006-12-07 | Nissan Motor Co Ltd | 検査装置、検査方法、及び検査プログラム |
JP2008090696A (ja) * | 2006-10-04 | 2008-04-17 | Nissan Motor Co Ltd | プログラム解析装置及びプログラム解析方法 |
CN101937395A (zh) * | 2010-09-20 | 2011-01-05 | 南京大学 | 一种用于漏洞检测的检测对象程序特征提取方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62118448A (ja) * | 1985-11-18 | 1987-05-29 | Nec Corp | 不定値参照の検出方式 |
JP2661562B2 (ja) * | 1994-10-11 | 1997-10-08 | 日本電気株式会社 | プログラム評価装置 |
-
2013
- 2013-12-26 CN CN201380071044.7A patent/CN104937558B/zh active Active
- 2013-12-26 WO PCT/JP2013/084883 patent/WO2014112317A1/ja active Application Filing
- 2013-12-26 JP JP2014557382A patent/JP6015778B2/ja active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003316615A (ja) * | 2002-04-26 | 2003-11-07 | Nissan Motor Co Ltd | 演算順序チェック装置およびその方法 |
JP2006331027A (ja) * | 2005-05-25 | 2006-12-07 | Nissan Motor Co Ltd | 検査装置、検査方法、及び検査プログラム |
JP2008090696A (ja) * | 2006-10-04 | 2008-04-17 | Nissan Motor Co Ltd | プログラム解析装置及びプログラム解析方法 |
CN101937395A (zh) * | 2010-09-20 | 2011-01-05 | 南京大学 | 一种用于漏洞检测的检测对象程序特征提取方法 |
Also Published As
Publication number | Publication date |
---|---|
JPWO2014112317A1 (ja) | 2017-01-19 |
WO2014112317A1 (ja) | 2014-07-24 |
JP6015778B2 (ja) | 2016-10-26 |
CN104937558B (zh) | 2016-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108829593B (zh) | 代码覆盖率计算分析方法、装置、设备及存储介质 | |
US20150347268A1 (en) | Bottleneck Detector Application Programming Interface | |
US7698690B2 (en) | Identifying code that wastes time performing redundant computation | |
EP2838016A1 (en) | Automated augmented model extension for robust system design | |
CN110543420B (zh) | 一种软件测试方法、系统、终端及存储介质 | |
KR20200007133A (ko) | 차량 ecu 소프트웨어 검증을 위한 동적 결함 주입 방법 및 장치 | |
CN113568839A (zh) | 软件测试和统计测试覆盖率的方法、装置、设备及介质 | |
GB2460407A (en) | Using coverage data to choose software regression tests | |
CN111913878A (zh) | 基于程序分析结果的字节码插桩方法、装置及存储介质 | |
CN104937558A (zh) | 变量访问一贯性检查装置、变量访问一贯性检查方法、变量访问一贯性检查程序 | |
US20130318499A1 (en) | Test script generation | |
US10229029B2 (en) | Embedded instruction sets for use in testing and error simulation of computing programs | |
CN103293410B (zh) | 服务器功耗检测方法与装置 | |
WO2014112303A1 (ja) | データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム | |
CN106127052B (zh) | 恶意程序的识别方法及装置 | |
CN109032930A (zh) | 系统测试方法及装置 | |
CN115080426A (zh) | 程序文件的检测方法及装置、存储介质和电子设备 | |
CN104937559B (zh) | 标志访问缺陷检查装置和标志访问缺陷检查方法 | |
CN113672638A (zh) | 一种查询数据的方法、系统及电子设备 | |
CN105556484A (zh) | 软件检查装置、软件检查方法、软件检查程序 | |
US10417110B2 (en) | Method for verifying traceability of first instructions in a procedural programming language generated from second instructions in a modelling language | |
KR101674787B1 (ko) | 프로그램의 성능 측정 시스템 및 방법 | |
JP6037034B2 (ja) | ソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラム | |
CN110674031B (zh) | 一种基于受限集的程序语义缺陷自动修复方法 | |
CN109800155B (zh) | 一种基于Probe的QTE联锁应用软件测试方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |