CN102207902B - 用于分析包含校准值的软件的方法和设备 - Google Patents
用于分析包含校准值的软件的方法和设备 Download PDFInfo
- Publication number
- CN102207902B CN102207902B CN201110076549.5A CN201110076549A CN102207902B CN 102207902 B CN102207902 B CN 102207902B CN 201110076549 A CN201110076549 A CN 201110076549A CN 102207902 B CN102207902 B CN 102207902B
- Authority
- CN
- China
- Prior art keywords
- node
- variable
- limit
- chosen elements
- select
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及用于分析包含校准值的软件的方法和设备,具体是一种用于评测机器可执行软件代码规范的计算机实施方法,该方法包括利用计算机生成与软件代码规范相对应的***依赖关系图。所述***依赖关系图包括含有节点和边的元素。计算机评测***依赖关系图,该评测包括选择在软件代码规范中被修正的变量,给与软件代码规范中的控制语句相对应的***依赖关系图的控制运算节点提供优选校准状态,遍历到***依赖关系图的选定元素,其中选定元素与选定变量和控制运算节点的优选校准状态相关,仅评测***依赖关系图的选定元素,以及标识在选定变量的状态被修正的位置处的那些选定元素。
Description
技术领域
本发明涉及嵌入式***设计的设计自动化,特别是涉及使用计算机的软件编程代码规范的结构分析。
背景技术
本节内容仅提供涉及本发明的背景信息,可能不构成现有技术。
已知的控制***包括具有控制模块的嵌入式***,所述控制模块配置成执行嵌入式软件程序以便实现一个或多个规定功能。所述控制模块和嵌入式软件程序能够同时设计和开发,通常被称为协同设计过程。该控制模块能包含可编程处理设备,其包括专用集成电路(ASIC)、电子电路和中央处理单元-例如微处理器中的一种。可编程处理设备包括存储器和存储设备,或信号性地且可操作地连接到存储器和存储设备。示例性的存储器和存储设备包括例如只读存储器(ROM)、可编程只读存储器(PROM)、随机存取存储器(RAM)和硬盘驱动器。可编程处理设备配置成执行一个或多个嵌入式软件或固件程序。控制模块可包括组合逻辑电路、输入/输出电路和信号性地且可操作地连接到处理器的设备。控制模块包括适当的信号调节和缓存电路,以及其他合适的用以实现规定功能的部件。
嵌入式软件能够利用编程语言开发和细化,这种编程语言能够编译成适于存储和被控制模块的可编程处理设备执行的机器代码。已知的软件分析方法包括用以标识能够在程序中的特定点处影响计算的程序语句子集的程序切片。这个程序点可定义为语句或在语句处使用的特定变量,且被称作切片准则。在单入口、单出口程序的简单实例中,通过寻找全部传播数据流和导致切片准则的控制依赖性来确定切片。切片可以用作一些活动的维护或复用工具,如程序理解、调试、回归测试和从现有代码中的功能提取。作为交互工具,程序切片通过将源代码直接转换为简化的规范来促进对软件相关部分的理解。
程序切片由那些可能影响准则变量的值的语句组成,包括该语句是否执行。通过交互地解析数据和基于软件程序的控制流程图示的控制流等式来计算一种已知的切片。
控制流图表是适用于***分析的程序表示法,其利用标准技术从必要的语言源代码规范得来。控制流图表包括被称为节点的运算,以及被称为边的介于各运算之间的控制和数据通路。流程图表是等价图示,其由基本规程和基本规程之间的控制通路组成。基本规程是总是成组执行的一串运算。控制流图表是源代码分析的普通图示,并且采用标准技术来查找控制依赖关系和数据流依赖关系。
在基于控制流图表的方法中,***依赖关系图概括整个程序或部分程序的控制和数据依赖性。***依赖关系图由一个或多个规程依赖关系图组成,其中每个规程依赖关系图概括过程内的控制和数据流依赖性。程序依赖图(程序内的每个规程对应一个)在***依赖关系图内与表示规程内数据和控制依赖关系的边连接。通过基于图形的方法能够更准确地计算切片,而且包含的语句更少。能够界定多线程控制流程图,使得能够在单控制流图中明确地标示出所有并行的线程,之后分析该图以找出干扰依赖性,这是并行软件线程之间的数据流依赖性,也是多个软件线程的可行的执行次序。
发明内容
一种用于评测机器可执行软件代码规范的计算机实施方法包括用计算机生成与软件代码规范对应的***依赖关系图。***依赖关系图中所含的元素包括节点和边。计算机评测该***依赖关系图,该评测包括:选择在软件代码规范中被修正的变量,给与软件代码规范中的控制语句对应的***依赖关系图的控制运算节点提供优选校准状态,遍历至***依赖关系图的选定元素,其中选定元素与选定变量和控制运算节点的优选校准状态相关联,仅对***依赖关系图的选定元素进行评测,以及标识选定变量的状态被修正的位置处的那些选定元素。
方案1. 一种用于评测机器可执行软件代码规范的计算机实施方法,包括:
用计算机生成与所述软件代码规范相对应的***依赖关系图,所述***依赖关系图所含的元素包括节点和边,其中计算机评测所述***依赖关系图,所述***依赖关系图的评测包括:
选择在所述软件代码规范中被修正的变量;
给所述***依赖关系图的、与所述软件代码规范中的控制语句相对应的控制运算节点提供优选校准状态;
遍历到所述***依赖关系图的选定元素,所述选定元素与所述选定变量和所述控制运算节点的优选校准状态相关联;
仅评测所述***依赖关系图的选定元素;和
标识所述选定变量的状态被修正的位置处的那些选定元素。
方案2. 如方案1所述的方法,进一步包括标识所述选定变量和相关变量之一的状态被修正的位置处的那些选定元素。
方案3. 如方案1所述的方法,进一步包括标识所述相关变量被使用的位置处的那些选定元素。
方案4. 如方案1所述的方法,其中仅评测所述***依赖关系图的选定元素还包括忽略所述***依赖关系图的未选定元素。
方案5. 如方案1所述的方法,其中遍历到所述***依赖关系图的与所述选定变量相关的选定元素包括执行依赖关系分析,以选择所述选定元素。
方案6. 如方案5所述的方法,其中执行依赖关系分析以选出所述选定元素包括:
标识每个包含作为数据边和控制边中的一种边的元素;和
选择包含数据边和控制边中的一种的元素。
方案7. 如方案5所述的方法,其中执行依赖关系分析以选出所述选定元素包括:
标识每个包含作为数据边和控制边中的一种边的元素;和
选择既包含数据边又包含控制边的元素。
方案8. 如方案5所述的方法,其中执行依赖关系分析以选择所述选定元素包括:
标识每个包含作为持续节点和末端节点中的一种节点的元素,和
选择仅包含持续节点的元素。
方案9. 如方案8所述的方法,进一步包括忽略包含末端节点的元素。
方案10. 如方案5所述的方法,其中执行依赖关系分析以选择所述选定元素包括:
将与每个包含节点的元素相关的变量标识为全局变量和局部变量中的一种;和
选择包含具有全局变量的节点的元素。
方案11. 如方案10所述的方法,进一步包括跳过包含具有局部变量的节点的元素。
方案12. 如方案5所述的方法,其中执行依赖关系分析以选择所述选定元素包括:
标识包含具有调用规程的节点的元素;和
仅当所述调用规程修正了所述选定变量时,选择包含具有所述调用规程的节点的元素。
方案13. 如方案12所述的方法,进一步包括当所述调用规程没有修正所述选定变量时,跳过包含具有所述调用规程的节点的元素。
方案14. 一种用于静态评测嵌入式***的机器可执行软件代码规范的计算机实施方法,包括:
用计算机生成与所述软件代码规范相对应的***依赖关系图,所述***依赖关系图包括含有节点和边的元素,其中节点中的一个包括与所述软件代码规范中的控制语句相对应的控制运算节点;
选择在所述软件代码规范中被修正的变量;
给所述控制运算节点提供优选校准状态;
遍历到所述***依赖关系图的选定元素,所述选定元素与所述选定变量和所述控制运算节点的优选校准状态相关;
仅评测所述***依赖关系图的选定元素以标识在所述选定变量的状态被修正的位置处的那些选定元素;和
生成数据输出,所述数据输出指示所述***依赖关系图的、在所述选定变量的状态被修正的位置处的被标识选定元素。
方案15. 如方案14所述的方法,进一步包括标识所述选定元素中的一些元素,所述一些元素位于所述选定变量和相关变量中的一种的状态被修正的位置。
方案16. 如方案14所述的方法,进一步包括标识在使用相关变量的位置处的那些选定元素。
方案17. 如方案14所述的方法,其中遍历到所述***依赖关系图的与所述选定变量相关的选定元素包括执行依赖关系分析以选出所述选定元素。
方案18. 如方案17所述的方法,其中执行依赖关系分析以选出所述选定元素包括:
标识每个包含作为数据边和控制边中的一种边的元素;和
选择包含数据边和控制边中的一种的元素。
方案19. 如方案17所述的方法,其中执行依赖关系分析以选择所述选定元素包括:
标识每个包含作为持续节点和末端节点中的一种节点的元素;和
选择只包含持续节点的元素。
方案20. 如方案17所述的方法,其中执行依赖关系分析以选择所述选定元素包括:
将与每个包含节点的元素相关的变量标识为全局变量和局部变量中的一种;和
选择包含具有全局变量的节点的元素。
附图说明
现在将参照附图通过示例来描述一个或多个实施例,附图中:
图1示意性地示出了根据本发明用于评测软件代码规范的过程,其中软件代码可执行以实现的预定功能;
图2示意性地示出了利用选定变量V来遍历***依赖关系图的选定元素以执行根据本发明的依赖关系分析的过程;
图3示意性地示出了已针对软件代码生成的用以实现规定功能的根据本发明的***依赖关系图;
图3A示出了根据本发明的参照图3所示且与软件主体部分关联的***依赖关系图的一部分;
图3B示出了根据本发明的参照图3所示且与软件的第一规程部分关联的***依赖关系图的一部分;
图3C示出了根据本发明的参照图3所示且与软件的第二规程部分关联的***依赖关系图的一部分;
图3D示出了根据本发明的参照图3所示且与软件的第一功能部分关联的***依赖关系图的一部分;
图3E示出了根据本发明的参照图3所示且与软件的第二功能部分关联的***依赖关系图的一部分;和
图4是根据本发明的示例性屏幕显示图,其包括与采用图3所示的关联***依赖关系图进行的软件代码选定元素的遍历相对应的输出。
具体实施方式
现在参照附图,其中图示的目的只是为了说明某些示例性的实施例,而不是对本发明进行限制,图1示意性地描绘了用于评测软件代码规范的过程10,其中软件代码可在编程控制模块中执行以实现规定的功能。
程序员用计算机生成软件代码规范,该规范被编译成机器可执行代码,该代码存储在控制模块中,并在那里执行以实现预定功能(15)。可理解的是,软件代码规范通过编程语言生成。已知的一种编程语言是C语言。本领域普通技术人员还知道其他一些编程语言。示例性的软件代码如下文参照表1所示。控制模块意指下列各项中的一个或多个的任何合适的组合:专用集成电路、电子电路、配置成用来执行软件代码的中央处理单元(例如微处理器)和所关联的存储器及存储设备(例如只读存储器、可编程只读存储器、随机存取存储器、硬盘驱动器)、组合逻辑电路、输入/输出电路和设备、适当的信号调节和缓存电路、以及其他适合的能够提供所述功能的部件。计算机被编程用以执行下列评测软件代码规范的过程。这包括执行依赖关系分析以标识所有直接或间接影响选定变量的状态或值的全部数据实体,并标识能够明显表现这种效果的代码通路,从而帮助程序员评测软件代码规范。
为软件代码规范生成***依赖关系图(以下简称SDG),以实现规定功能(20)。所述SDG可包括一个或多个规程依赖关系图(以下简称PDG)。示例性的SDG如参照图3所示的。PDG是适于进行***分析的软件代码规范的图形表示,并且能够利用已知技术从必要语言源代码规范中导出。PDG由元素构成,所述元素是运算中的一个-即节点和运算之间的控制通路-即边。PDG是包括通过边来连接的节点的等价表示。可理解的是,节点描述的是或表示的是一种计算,即在一行软件代码规范中表示的表达式或语句,并且能够包括实际运算或形式运算。通过示例可知,节点的类型能包括数据节点、形式节点、规程调用节点、入口节点、出口节点。具体的一类节点是控制运算节点,也被称作控制点,它与作为控制语句-例如在其中进行决策的控制语句的一行软件代码相关联。一个控制语句是if/then/else语句的形式。另一种控制语句是switch/case的形式。可以理解的是,还有其他形式的控制语句和关联的控制运算节点。边描述的是选定边之间的控制或数据依赖关系,并且通过箭头指示的方向来表示方向。
SDG包括一个或多个在成组执行的运算序列中用作基本规程的PDG。边是为数据相关的依赖传送数据的任一个数据边(数据),以及为控制相关的依赖传送控制信号的控制边(控制)。边还可包括规程内的边和过程间的边。PDG是已知的可用于分析软件代码规范的工具,其包括标识控制依赖关系和数据流依赖关系的已知技术。与图3的SDG的关联的示例性PDG参照图3A、3B、3C、3D和3E示出。
软件代码规范包括一个或多个变量。每个变量是用字符串命名的元素。除了其他方面,每个变量被定义为字符、整数和浮点小数中的一种,即一个实数。每个变量是局部变量和全局变量中的一种。局部变量是只在规程内存取和使用的变量,即被单个PDG定义的运算。因而,局部变量的状态只能在规程内修正。全局变量是由多个基本规程使用的变量,即由多个PDG定义的多个运算和变量。因而,全局变量的状态能够在多个基本规程中的每个内修正。
选择一个与SDG关联的变量V来进行分析(25)。用选定的变量V为基础来执行依赖关系分析,用于遍历SDG的选定元素(30)。参照图2详细地描述了这一点。执行依赖关系分析可标识所有直接或间接影响选定变量V的状态或数值的数据实体。依赖关系分析还可标识明显表现出效果的代码通路。
依赖关系分析可通过利用选定变量V来遍历SDG的选定元素而标识所有元素-即影响选定变量V的值的节点和边。
与通过利用选定变量V遍历SDG的选定元素的依赖关系分析相关联的结果被生成并存储(40)。所述结果可由从业者通过应用程序(应用)获得,并且包括对SDG中直接或间接影响选定变量V的状态或值的所有元素的标识(50)。对选定变量V的状态或值的影响可包括修正选定变量V、修正与选定变量V有关的变量、和利用有关变量。对与利用选定变量V遍历SDG的选定元素有关的结果的说明参照图4示出。
图2所示为利用选定变量V遍历SDG的选定元素以执行依赖关系分析的过程。遍历意在描述下列过程:从起始点-例如选定变量V被修正的位置跟踪选定变量V,并沿着边以向后或逆向分析的方式运行,直至到达起点。遍历SDG的选定元素包括从其起始点跟踪选定变量V并沿着选定节点和选定边以向后或逆向分析的方式运行,直至到达起点。
修正了选定变量V的位置处的节点被标识并将其选定为选定变量V在SDG上的起始点(210)。
考虑用当前元素-即当前节点和关联的边进行分析(215)。最初,当前元素是节点,在该节点处选定变量V被修正,并且关联的边包括任意导向当前节点的边。在后续迭代期间,当前元素是通过下述方式确定的SDG的另一元素:从其起始点跟踪选定变量V并沿选定节点和选定边以向后或逆向分析的方式运行,直至到达起点为止。
采用与选定变量V关联的预定准则执行依赖关系分析以评测当前元素(220)。当评测显示当前元素符合预定准则时,当前元素就被选定(230)。生成与遍历到SDG的当前元素相关的结果并存储(235)。所存储的结果标识或以其他方式表示选定变量V或相关变量是否已在SDG的当前元素处被修正或存取。在当前元素没有被选定时,或者当生成并存储了与利用选定变量V遍历SDG的选定元素相关的结果时,该过程遍历到与选定变量V相关的后续元素,同时当前节点被更新到后续元素(240)。
评测更新的当前节点以确定其是否为控制运算节点,包括含有校准值的控制运算节点(245)。在这些情况下,选定的或优选的校准值被***控制运算节点(250)。从而,检查在所述控制运算节点或控制点处的表达式,以确定哪个分支-即从控制运算节点出来的边,可以应用***的优选校准值。任何不可行的分支都不会被选择。这种选择与标识和选择每个节点和边的具体类型相似(221A),并且在控制点节点处用优选的校准值检查控制条件从而忽略或不考虑其他具体类型的节点和关联的边(221B)。这样,作为分析的一部分,就能向与软件代码规范中的控制语句相对应的***依赖关系图的控制运算节点提供优选的校准状态。考虑用所述更新的与选定变量V相关的当前元素进行分析(215),包括将其暴露于这里所述的依赖关系分析(230)。
应当理解的是,遍历到与选定变量V相关的后续元素可包括选择与节点相关联的邻边,包括事先评测的边还未被评测的情形。应当理解的是,在先前已经评测过的边被评测时,遍历SDG到与选定变量V相关的后续元素能够包括选择与被评测边相连的后续节点,包括使用任意控制运算节点,该节点含有选定或优选的校准值作为后续SDG遍历的基础。所述过程优选地被重复,直到评测了在依赖关系分析中详细解释并使用预定准则确定(220)且在SDG中与选定变量V相关的所有可选元素。
执行依赖关系分析(220)以评测SDG的与选定变量V相关且采用预定准则的每个当前元素。具体的元素-即与选定变量V相关的SDG的节点和边被选定、忽略或跳过。这包括忽略或根本不考虑具体类型的节点和相关的边,选择具体类型的边进行遍历,选择或以其他方式决定是否选择步入被调用规程的节点或汇总与该节点相关的被调用规程。这也包括决定局部遍历策略和根据具体变量存储类型做出输出决定。
利用预定准则(220A)评测SDG的当前元素,包括标识和选择每个节点和边的具体类型(221A)以及忽略或根本不考虑其他具体类型的节点及相关的边(221B)。举例来说,被忽略的节点可包括含调度程序的节点。应当理解的是,也可以忽略其他节点。
用预定准则评测SDG的当前元素(220)包括标识每个节点为持续节点和末端节点中的一种(225A),并且在忽略末端节点和导向该节点的相关边的同时只选择持续节点(225B)。末端节点被定义为只有导入边而没有导出边的节点。持续节点被定义为既有导入边也有导出边的节点。一种具体类型的持续节点是具有决策制定能力-例如使用if/then/else分支的软件代码。
用预定准则评测SDG的当前元素(220)包括将用在节点内的变量标识为全局变量和局部变量中的一种(222A)。选择使用全局变量的节点元素,并且跳过使用局部变量的节点元素,即不评测该元素(222B)。但是,当元素是使用局部变量的节点时,可选遍历过程将遍历到没有被选择的节点,并且通过在其所连接的边上执行依赖关系分析而从该节点继续进行下去。当元素是使用全局变量的节点时,当前元素被定义为字符、整数和浮点小数中的一个(223A),并依其自身类型被评测(223B)。用预定准则评测SDG的当前元素还包括标识域专用的变量存储装置类型,包括校准值、易失存储位置、局部存储位置和非易失性存储位置及与变量V相关的类型。
用预定准则评测SDG的当前元素(220)包括标识每个边作为具体类型的边(227A)并选择具体类型的边进行遍历,以及相应地选择忽略或不遍历的具体类型的边(227B)。如前所述,边是用于传送数据信号的数据边和用于传送控制信号的控制边中的一种。边还能包括过程内的边和过程间的边。这样,选择具体类型的边进行遍历可包括只选择数据边,只选择控制边或数据和控制边两种都选择。此外,选择具体类型的边进行遍历还可包括对过程内边和过程间边都只忽略数据边并只选择控制边。本领域技术人员能够设想出其他边遍历的组合,包括过程内的边和过程间的边。
用预定准则评测SDG的当前元素(220)包括标识与节点相关的被调用规程(229A),和当被调用规程影响到所标识的与当前节点相关的变量-即当变量被标识为全局变量时,只选择发生这种影响的那些节点(229B)。其中被调用规程影响与当前节点关联的被标识变量的那些节点,包括与当前节点相关的被标识变量是全局变量并且之前已被标识的那些节点(222A)。
参照下文表1所列的软件程序中示出且与图3所示的SDG相关的软件代码规范,对参照图1和图2所示的操作进行详细地说明。与软件程序列表中的每行相关的行号包括在内,并且参引图4示出。表1中的软件程序列表是对本发明的说明。
表1
行 | 软件程序 |
proc.c | |
2 | float Ve_f_dat 1; |
3 | float Be_f_dat 2; |
4 | |
5 | short Ke_b_call |
6 | /*Ke_b_call*/ |
7, 8 | /*value will be inserted here */; |
9 | |
10 | extern float read_sensor(); |
11 | |
12 | Void func 1() |
13 | { |
14 | float Le_f_var2; |
15 | Le_f_var2 = read_sensor(); |
16 | if (Ke_b_call != 0) |
17 | Be_f_dat2 = Le_f_var2 + Be_f_dat2; |
18 | Else |
19, 20 | Be_f_dat2 = Le_f_var2; } |
21 | Void func2() |
22 | Float func2(int Lp_i_par1) |
23 | { |
24,25 | return (Lp_i_par 1 > 10)? Be_f_dat2 * 12.3 : Be_f_dat2;} |
26 | |
27 | Void proc2() |
28 | { |
29 | int Le_i_var 1; |
30 | Le_i_var 1 = 8; |
31 | func 1(); |
32, 33 | Ve_f_dat 1 = func2(Le_i_var 1); } |
34 | |
35 | void proc 1() |
36 | { |
37, 38 | Be_f_dat2 = read_sensor(); } |
39 | |
40 | int main() |
41 | { |
42 | /* scheduling the different top-level procs. |
43 | *iterate through a |
44 | * list of function pointers */ |
45 | proc 1(); |
46, 47 | Proc 2(); } |
图3所示为与表1的软件程序列表相对应的SDG 300。正如所理解的那样,SDG 300能够在撰写和编译表1的软件程序列表之后生成。所述SDG 300包括多个具有控制依赖关系和数据流依赖关系的PDG,这些依赖关系如图3A、3B、3C、3D和3E所示。每个节点都描绘为一个椭圆形元素。每个边都描绘为方向线,所示的有控制边和数据边。所述控制边和数据边包括过程内边和过程间边。
图3A所示为与软件的主要部分[entry main()]相对应的SDG 300的一部分,其描绘为“int main()”,且开始于表1的行40处。图3B所示为与软件的第一规程部分[entry proc1()]相关的SDG 300的一部分,其描绘为“void proc 1()”,且开始于表1的行35处。图3C所示为与软件的第二规程部分[entry proc2()]相对应的SDG 300的一部分,其描绘为“void proc2()”,且开始于表1的行27处。图3D所示为与软件的第一功能部分[entry func1()]相对应的SDG 300的一部分,其描绘为“void func 1()”,且开始于表1的行12处。图3E所示为与软件的第二功能部分[entry func2()]相对应的SDG 300的一部分,其描绘为“void func2()”,且开始于表1的行21处。图3A-3E中描绘的各个元素在图4中被描述。
图4是示例性显示屏的视图,该显示屏示出了与利用选定变量V遍历SDG的选定元素相关的结果,其中显示了参照表1的软件代码并使用了参照图3所示的相关SDG。应当理解的是,图4示出了这里所述的概念,并且无意对本发明进行限制。所述显示屏显示了与使用上文参照图2的元素220所述的上述依赖关系分析相关的结果,用以评测选定变量V,该选定变量V是示出的变量Ve_f_dat 1。依赖关系分析用于遍历***依赖关系图中与选定变量相关的选定元素,且包括遍历表1的软件代码,该软件代码已用于生成参照图3所示的相关SDG。图4中的相关项包括每个SDG节点的描述符(Descriptor)和在选择期间遇到的相关元素以及在遇到的SDG节点处被提及的遍历数据项、数据输出(Data Item)、数据输出的相应文件名(File)、以及软件代码的相关行(Line No.),如上文表1中的第1列所示。
当选定变量V或相关变量的状态已经在使用“Killed”标志符的操作期间被改变或修正时,数据输出(Data Item)提供标志以对其进行描述。举例来说,数据输出的顶行包括标识为Killed的数据项:“Ve_f_dat 1”,它表明由于执行表1所示的代码的第32行处的规程,变量Ve_f_dat 1已经被改变。
当选定变量V或相关变量在使用“Used”和“Vars”标志符的操作期间已经被使用时,数据输出(Data Item)提供标志以对其进行描述。举例而言,数据输出的后续行包括标识为Used的数据项:“Le_i_var 1-16”,它表示作为执行表1所示代码的第32行处的规程的结果,相关变量Le_i_var 1-16已经被使用但没有被改变。
用于评测的一部分步骤包括提供与软件代码规范中具有优选校准状态的控制语句相对应的***依赖关系图的控制运算节点。在所述实施例中,控制运算节点是图3D上的元素810,并且给它提供的用以评测的校准值为0。
变量Ve_f_dat 1的评测开始的点是其被修正的点,如图3C上的元素610所示。如图2中的元素220所示的依赖关系分析用于利用预定准则评测SDG的每个当前元素。利用预定准则评测SDG的当前元素包括遍历***依赖关系图中与选定变量相关的选定元素,以及指定每个与选定变量V相关的遍历元素为选定、忽略或跳过。
如图所示,选择分析过程从元素610向元素612遍历,之后再到元素618遍历,其标示调用第一功能(func2)。所调用的功能(func2)被具体描绘为图3D中的元素700。所调用的功能(func2)700没有被进入,即被跳过,但变量Be_f_dat2的返回值得到了利用,其被捕捉为Vars:“Be_f_dat2”。做出这一不进入被调用功能(func2)700的决定是因为所调用的功能(func2)700不修正或使用选定变量,即Ve_f_dat1或与当前节点相关的相关变量,如参照执行图2所示的依赖关系分析(220)的一部分(229A,229B)所描述的。
如图所示,选择分析过程也从元素612通过元素620向元素622遍历,其表明调用第二功能(func1)。所调用的功能(func1)具体描绘为图3E中的元素800。所调用的功能(func1)800被进入,即被选择和遍历。做出这种决定是因为所调用的功能(func1)800使用修正了相关变量Be_f_dat2的全局变量,如参照执行图2所示的依赖关系分析(220)的一部分(222A,222B)所描述的。
如图所示,选择分析过程遍历图3D所示并在表1中的行12-20处详述的调用功能(func1)800。所调用的功能(func1)800包括在元素810处具有控制运算节点的软件代码。元素810处的控制运算节点是if/then/else节点,并且在表1中的行16-20处被详述。图3D中的元素810和820处的控制运算节点被进入,即被选择和遍历。做出该决定是因为当优选校准值被设置到0时,如前所述,如表1的相应行16所示,即如果(Ke_b_call != 0),则810处的控制运算节点被校准以前进到元素820,这表示对校准值作出响应而前进到行17。由于在元素810处为Ke_b_call选择的校准值,相关元素830没有被进入。元素810因此被选定,如参照执行图2所示的依赖关系分析(220)的一部分(225A,225B)所描述的。
此外,图中示出了被报告的相关变量,包括Be_f_dat2和Ke_b_call(430)。此外,在选择分析过程中要求选择控制边和数据边,如参照执行图2(420)所述的依赖关系分析(220)的一部分(229A,229B)所描述的。此外,调度节点被忽略,如参照执行图2(410)所示依赖关系分析(220)的一部分(221A,221B)所描述的。
这样一来,提供了一种用于静态计算或者以其他方式确定数据实体集的方法,所述数据实体修正或使用选定变量或相关变量的值,其中所述变量用在软件代码中,例如嵌入式软件程序,并且标识选定变量的值在其中会受影响的代码通路,包括遍历与使用优选校准状态的软件代码规范中的控制语句相对应的***依赖关系图的控制运算节点。
本申请已描述了一些优选实施例和对它们的改型。在阅读和理解了本说明书之后,其他人可以作出进一步的改型和替代方案。因而,本发明将不局限于作为执行本发明的最佳模式而公开的特定实施例;相反,本发明将包括落入所附权利要求书的范围内的所有实施例。
Claims (20)
1.一种用于评测机器可执行软件代码规范的计算机实施方法,包括:
用计算机生成与所述软件代码规范相对应的***依赖关系图,所述***依赖关系图所含的元素包括节点和边,其中计算机评测所述***依赖关系图,所述***依赖关系图的评测包括:
选择在所述软件代码规范中被修正的变量;
给所述***依赖关系图的、与所述软件代码规范中的控制语句相对应的控制运算节点提供优选校准状态;
遍历所述***依赖关系图的选定元素,所述选定元素与所选择的变量和所述控制运算节点的优选校准状态相关联,遍历所述***依赖关系图的选定元素包括从所选择的变量被修正的起始点跟踪所选择的变量并沿着选定节点和选定边以逆向分析的方式运行,直至到达所选择的变量的起点;
仅评测所述***依赖关系图的选定元素;和
标识所述所选择的变量的状态被修正的位置处的那些选定元素。
2.如权利要求1所述的方法,进一步包括标识所述所选择的变量和相关变量之一的状态被修正的位置处的那些选定元素。
3.如权利要求2所述的方法,进一步包括标识所述相关变量被使用的位置处的那些选定元素。
4.如权利要求1所述的方法,其中仅评测所述***依赖关系图的选定元素还包括忽略所述***依赖关系图的未选定元素。
5.如权利要求1所述的方法,其中遍历到所述***依赖关系图的与所选择的变量相关的选定元素包括执行依赖关系分析,以选择所述选定元素。
6.如权利要求5所述的方法,其中执行依赖关系分析以选出所述选定元素包括:
标识每个包含作为数据边和控制边中的一种边的元素;和
选择包含数据边和控制边中的一种的元素。
7.如权利要求5所述的方法,其中执行依赖关系分析以选出所述选定元素包括:
标识每个包含作为数据边和控制边中的一种边的元素;和
选择既包含数据边又包含控制边的元素。
8.如权利要求5所述的方法,其中执行依赖关系分析以选择所述选定元素包括:
标识每个包含作为持续节点和末端节点中的一种节点的元素,和
选择仅包含持续节点的元素。
9.如权利要求8所述的方法,进一步包括忽略包含末端节点的元素。
10.如权利要求5所述的方法,其中执行依赖关系分析以选择所述选定元素包括:
将与每个包含节点的元素相关的变量标识为全局变量和局部变量中的一种;和
选择包含具有全局变量的节点的元素。
11.如权利要求10所述的方法,进一步包括跳过包含具有局部变量的节点的元素。
12.如权利要求5所述的方法,其中执行依赖关系分析以选择所述选定元素包括:
标识包含具有调用规程的节点的元素;和
仅当所述调用规程修正了所选择的变量时,选择包含具有所述调用规程的节点的元素。
13.如权利要求12所述的方法,进一步包括当所述调用规程没有修正所选择的变量时,跳过包含具有所述调用规程的节点的元素。
14.一种用于静态评测嵌入式***的机器可执行软件代码规范的计算机实施方法,包括:
用计算机生成与所述软件代码规范相对应的***依赖关系图,所述***依赖关系图包括含有节点和边的元素,其中节点中的一个包括与所述软件代码规范中的控制语句相对应的控制运算节点;
选择在所述软件代码规范中被修正的变量;
给所述控制运算节点提供优选校准状态;
遍历所述***依赖关系图的选定元素,所述选定元素与所选择的变量和所述控制运算节点的优选校准状态相关,遍历所述***依赖关系图的选定元素包括从所选择的变量被修正的起始点跟踪所选择的变量并沿着选定节点和选定边以逆向分析的方式运行,直至到达所选择的变量的起点;
仅评测所述***依赖关系图的选定元素以标识在所选择的变量的状态被修正的位置处的那些选定元素;和
生成数据输出,所述数据输出指示所述***依赖关系图的、在所选择的变量的状态被修正的位置处的被标识选定元素。
15.如权利要求14所述的方法,进一步包括标识所述选定元素中的一些元素,所述一些元素位于所选择的变量和相关变量中的一种的状态被修正的位置。
16.如权利要求14所述的方法,进一步包括标识在使用相关变量的位置处的那些选定元素。
17.如权利要求14所述的方法,其中遍历到所述***依赖关系图的与所选择的变量相关的选定元素包括执行依赖关系分析以选出所述选定元素。
18.如权利要求17所述的方法,其中执行依赖关系分析以选出所述选定元素包括:
标识每个包含作为数据边和控制边中的一种边的元素;和
选择包含数据边和控制边中的一种的元素。
19.如权利要求17所述的方法,其中执行依赖关系分析以选择所述选定元素包括:
标识每个包含作为持续节点和末端节点中的一种节点的元素;和
选择只包含持续节点的元素。
20.如权利要求17所述的方法,其中执行依赖关系分析以选择所述选定元素包括:
将与每个包含节点的元素相关的变量标识为全局变量和局部变量中的一种;和
选择包含具有全局变量的节点的元素。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/748,525 US8589898B2 (en) | 2010-03-29 | 2010-03-29 | Method and apparatus for analyzing software including a calibrated value |
US12/748525 | 2010-03-29 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102207902A CN102207902A (zh) | 2011-10-05 |
CN102207902B true CN102207902B (zh) | 2015-02-25 |
Family
ID=44657824
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110076549.5A Active CN102207902B (zh) | 2010-03-29 | 2011-03-29 | 用于分析包含校准值的软件的方法和设备 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8589898B2 (zh) |
CN (1) | CN102207902B (zh) |
DE (1) | DE102011014831A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8412668B2 (en) * | 2009-10-14 | 2013-04-02 | GM Global Technology Operations LLC | Offline formal verification of executable models |
US20140195208A1 (en) * | 2013-01-09 | 2014-07-10 | GM Global Technology Operations LLC | Efficient partition refinement based reachability checking for simulinks/stateflow models |
CN103559122B (zh) | 2013-10-14 | 2016-04-27 | 西安交通大学 | 基于程序行为切片的测试案例约减方法 |
CN104199658B (zh) * | 2014-08-28 | 2017-07-28 | 北京航空航天大学 | 一种提高软件通路可靠性的实现方法 |
CN105427695B (zh) * | 2015-11-03 | 2018-11-02 | 中国农业大学 | 编程类考题自动测评方法和*** |
US9940212B2 (en) * | 2016-06-09 | 2018-04-10 | Google Llc | Automatic qubit calibration |
JP7188198B2 (ja) * | 2019-03-13 | 2022-12-13 | オムロン株式会社 | グラフ表示装置、グラフ表示方法、及びグラフ表示プログラム |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1804803A (zh) * | 2005-01-14 | 2006-07-19 | 微软公司 | 具有对异步程序流程建模的软件工具 |
CN1908893A (zh) * | 2005-08-01 | 2007-02-07 | 王彤 | 程序逻辑结构图示方法及程序路径统计方法 |
WO2008047351A2 (en) * | 2006-10-19 | 2008-04-24 | Checkmarx Ltd. | Locating security vulnerabilities in source code |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5161216A (en) * | 1989-03-08 | 1992-11-03 | Wisconsin Alumni Research Foundation | Interprocedural slicing of computer programs using dependence graphs |
US7302707B1 (en) * | 2002-01-18 | 2007-11-27 | Cigital, Inc. | Systems and methods for detecting software buffer security vulnerabilities |
US7620946B2 (en) * | 2003-05-05 | 2009-11-17 | Jeffry Thomas Russell | Program slicing for codesign of embedded systems |
US20070214391A1 (en) * | 2006-03-10 | 2007-09-13 | International Business Machines Corporation | Method and apparatus for testing software |
-
2010
- 2010-03-29 US US12/748,525 patent/US8589898B2/en active Active
-
2011
- 2011-03-23 DE DE102011014831A patent/DE102011014831A1/de not_active Withdrawn
- 2011-03-29 CN CN201110076549.5A patent/CN102207902B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1804803A (zh) * | 2005-01-14 | 2006-07-19 | 微软公司 | 具有对异步程序流程建模的软件工具 |
CN1908893A (zh) * | 2005-08-01 | 2007-02-07 | 王彤 | 程序逻辑结构图示方法及程序路径统计方法 |
WO2008047351A2 (en) * | 2006-10-19 | 2008-04-24 | Checkmarx Ltd. | Locating security vulnerabilities in source code |
Also Published As
Publication number | Publication date |
---|---|
CN102207902A (zh) | 2011-10-05 |
US8589898B2 (en) | 2013-11-19 |
DE102011014831A1 (de) | 2011-11-10 |
US20110239203A1 (en) | 2011-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102207902B (zh) | 用于分析包含校准值的软件的方法和设备 | |
CN102207901B (zh) | 用于分析软件的方法和设备 | |
US8839210B2 (en) | Program performance analysis apparatus | |
KR100921514B1 (ko) | 성능 예측 기능을 제공하는 소프트웨어 개발 장치 및 방법 | |
US20150286203A1 (en) | System and method for an optimized operation of real-time embedded solutions in industrial automation | |
US20140365990A1 (en) | Software evaluation device and method | |
US20080320457A1 (en) | Intermediate Code Metrics | |
KR20090092617A (ko) | 프로세서 및 컴파일 방법 | |
US20120185820A1 (en) | Tool generator | |
EP3835944A1 (en) | Apparatus and method for source code optimisation | |
US20170235670A1 (en) | Method for tracking high-level source attribution of generated assembly language code | |
US20120331448A1 (en) | Coverage measurement apparatus and method and medium | |
KR100935685B1 (ko) | 소프트웨어 개발 장치 및 그 방법 | |
US10824402B2 (en) | Bytecode generation from UML models | |
EP2529303A2 (en) | Method and apparatus for enhancing comprehension of code time complexity and flow | |
US20120096420A1 (en) | Intelligent architecture creator | |
Rentschler et al. | Interactive visual analytics for efficient maintenance of model transformations | |
Davidsson et al. | Gert: An empirical reliability estimation and testing feedback tool | |
Tarhan et al. | A proposal on requirements for cosmic FSM automation from source code | |
JPH0773044A (ja) | 最適化コンパイル方法及び最適化コンパイル装置 | |
Grech et al. | Static energy consumption analysis of LLVM IR programs | |
CN103782245A (zh) | 技术***的操控 | |
WO2020080519A1 (en) | Systems and methods for selectively instrumenting a program according to performance characteristics | |
JP6544013B2 (ja) | 情報処理装置、消費電力計測プログラムおよび消費電力計測方法 | |
Ungan | A functional software measurement approach bridging the gap between problem and solution domains |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
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 |