CN1125990A - 软件自动分析的方法与装置 - Google Patents

软件自动分析的方法与装置 Download PDF

Info

Publication number
CN1125990A
CN1125990A CN94192552A CN94192552A CN1125990A CN 1125990 A CN1125990 A CN 1125990A CN 94192552 A CN94192552 A CN 94192552A CN 94192552 A CN94192552 A CN 94192552A CN 1125990 A CN1125990 A CN 1125990A
Authority
CN
China
Prior art keywords
xpd
procedure
termination
unit
incident
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.)
Pending
Application number
CN94192552A
Other languages
English (en)
Inventor
本杰文·V·夏皮罗
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.)
Individual
Original Assignee
Individual
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 Individual filed Critical Individual
Publication of CN1125990A publication Critical patent/CN1125990A/zh
Pending legal-status Critical Current

Links

Images

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/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • 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
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Hardware Redundancy (AREA)
  • Analysing Materials By The Use Of Radiation (AREA)

Abstract

本发明的系统和方法可以减小出错位置或由于有了新的结果期望需要修改的位置的不确定性。这是由集成过程完成的,这些过程类似于对于目标过程的功能的认识理解。目标过程的模型是建立在静态分析的基础上,并且在本发明所引入的“XPD机”进行动态分析期间进行目标过程知识的积累,并且与其执行“伪并行”进行目标过程的分析,XPD代表专家程序诊断(eXpert Program Diagnosis)。本发明提供了一种方法,用于提取出目标过程算法的控制部分放入“算法的XPD构架”中,后者是一确定的形式,已充分而且必要地代表了任一过程的控制结构。所引进的机制是:通过建立连续的“幻像”可以自动地而且方便地计算可访问性,即目标过程的任两个单元之间的“潜在依赖性”,而且作为一个示例,允许识别“确定的不可终结”过程结构——数据独立无终止循环。所引入的机制允许在目标过程和所定义的“过程空间”和“过程时刻”的坐标内建立“因果”关系知识,和各个单元“正确性”或“不确定性”的一种“相对的”和时间“依赖”的测量。本发明引入了XPD机的“知识归纳”和“知识演绎过程”,以及一种用于在用户和所积累的目标过程的知识之间的一种十分高级接口的机制。

Description

软件自动分析的方法与装置
本发明的背景发明领域
本发明与一种静态和动态分析计算机程序的方法有关,本发明能将造成程序出现故障的错误的位置以及在改变需要的情况下需要对程序进行修改的位置等的不确定性减至最小。
所发明的过程也在目标计算机软件系统的用户与其内部过程之间提供了一个有独创性的和非常高级的接口,这种接口允许以一种十分有效的方法去激活该目标软件的分析。
该接口也为系统修改和前期开发引入了一个非常高级的编程语言,称作面向结果的编程(Result OrientedProgramming-ROP)。
下面的描述也通过提出一种XPD目标码(XPD ObjectCode)为传统形式的计算机软件过程目标码提供了一种替换形式,其中XP D代表专家程序诊断(expert Program diagnosis)。
XPD目标码更适合于静态和动态程序分析以及程序维护。作为这种过程修改的结果,它方便了以及有时消除了目标过程代码的重新编译与重新链结。相关技术的描述
计算机软件工程的几十年发展显示出:
a.还没有一种自动方式能证明计算机程序过程将总是产生正确的或期望的结果;
b.因此,没有“无任何错误”的软件,即软件对于它所测试的程度只是“正确”,同时假设该测试是正确的;
c.除了最简单的软件外,穷尽测试是不可行的;
d.当前的软件工程没有提供类似于硬件安全边际(hardwaresafety margin)的任何方法,而且一个错误常常使整个系统停止下来;
e.在测试或者生产期间,在认识到存在错误时,对原因(错误)进行定位常常是极其困难的。
这就是说软件在本质上不同于硬件,因为它不遵循同样的因果规律。即软件错误并不与其表现(故障)相接近,但是它可以位于系统中的几乎任何位置。
对于已经过测试并进行生产的系统,其工业上平均是每1000行代码有5~10个错误。由于难以确定错误,许多故障悬而未决。程序员和他们的管理人员害怕接触代码,因为在试图改进或修改代码时可能会引进新的错误,并且进一步打乱系统。
下面的引用是在1988年提出后,在1993年仍然正确:
“原则上它可以那样工作。对于仔细编制的程序其出错率大约是每1000行5个错误,因此一个一兆行的程序可能有5000个问题。即使假设需要一个测试点以暴露一个问题,数千次的尝试也不是不现实。这种谬误是含糊的,但对于测试我们的直觉而不是我们乐于承认的是:这种测试点可以是十分少,但是我们不知道如何找到这些点。更槽糕的是,我们知道没有一种语义方式去寻找,没有一种方式去评判所选择的点,而且没有方法决定何时停止。因此在尝试了5000个点之后而没有发现错误,我们并不知道是否已无错误,是否还剩10个错误,或5000个错误”……,从技术方面测试最需要的是一个正确的基本理论…”
          Special section on Software testing”
          Communication of the ACM,1988年6月
软件的“再工程”成为1990年的一个时髦词。在IBM SystemJournal(VOL 28,1989年第2期)上有一个标题“Programunderstanding:Challenge for 1990′s”。
根据IBM的研究,全世界在软件维护上花费大约300亿美元,而且随着新软件系统的累积和旧软件的“老化”,这个数字也在上升。
根据MIT(麻省理工学院)的研究,每1美元用于新软件项目,就要花费9美元用于该项目的维护。
Software Magazine1990年11月,第95页提到:PriceWaterhouse的研究表明对于能够对现有系统进行纠错的系统估计一年有1000亿美元的市场。
软件调试的当前技术是基于“控制断点”(control Break)技术。这就是它如何工作的:通过使用下列方法之一通过设置“控制断点”激活对源程序的分析:
a.程序员研究源程序,通过将光标或其它指点设备定位在特定源代码行上手工设定控制断点;或
b.程序员命令一个调试工具通过自动地加亮源代码的当前活动行而激活(跟踪)该代码,这种跟踪是以一种足够慢的速度对代码进行解释从而能够可视地追踪其执行。以这种方式时,在每一被执行源指令之后要有一断点;或
c.命令将一控制断点设置在每一特定类型的指令处,比如在每一输入语句之后,或在每一调用(执行)语句之前。
一个控制断点的目的是暂时暂停一个执行过程从而手动地检查程序变量的值。
在使用“控制断点”时采取了下列假设:
(i)程序员在源代码有关位置处设置控制中断;
(ii)假设(i),程序员知道要查看什么变量;
(iii)假设(i)和(ii),程序员对故障的原因做出正确的判断。
因此正确手工分析的概率是上述(i)(ii)(iii)的概率的乘积。也就是说,比如上述每一步骤的正确判断结果的概率是1%,则手工分析的正确结果的概率是0.1%。
正如我们所理解的,传统的“控制断点”技术试着去确定一个故障的原因是完全不能自动的,它在认识判期间引入了人为出错的可能:
—要检查吗?
—检查什么?
—它说明什么?
在自断确定在测试过程期间什么源代码已被覆盖什么源代码未被覆盖的领域中,人们已经做了一些工作。
授于Horsch的美国专利(第4853851)公开了标题为“Systemfor Determing The Code Coverage of a Tested Program BasedUpon Static and Dynamic Analysis Recording”的发明,其方法是测量在测试期间计算机程序被执行的指令数与该程序的总的指令数的比值。
尽管一般来讲在测试期间覆盖的语句越多越好,但事实是被执行的过程步骤并不提供其正确性信息:
—首先所构造的特定的被执行的语句可能是错误,
—该特定语句可能是在一个错误的地方或在一个错误的时刻被执行;
—另外,该特定语句可能是一个不改变过程结果或对过程结果没有影响的语句;
授予Ward等人的美国专利(专利号为4 802 116)公开了一个名称为“Programmed Controller”的发明,该发明控制一个机器过程并方便其调试。它们的应用程序通过组织成一个或多个独立的循环而被明确地设计成以模拟机器的各部分的特定控制策略。嵌入进的控制机制记录下这些循环的状态,以及影响在这些状态之间转移的条件。
这一技术仅仅限于这样一些应用程序:它们按照非常特殊的语法规则被编码为多个独立的循环,其中跟踪这些循环的状态的方式被预先编码进控制该过程的程序中。通过记录下代表每一语句块的一个序列和连接不同块的每一逻辑条件语句而进行对该过程历史的记录。对系统错误的分析没有自动到XPD机所提供的程度,因为它并不是参考实际的过程结果而进行的(而在XPD机却能做到),而是通过对所记录的程序状态序列进行分析,由此它不象XPD机那样提供一个高级的推理和用户接口。
现有技术并没有提供一般的过程,能自动地确定计算机软件中的逻辑错误的位置,甚至是在一被定义区域内不确定的程度。这是因为根据下列理由一般认为这种自动化是不可行的:
1.正如前面所提及,软件不象硬件那样遵循同样的因果规律,而且造成特定故障的软件错误可以在软件系统中几乎任何位置;
2.软件系统不知道它所预计的结果是什么,因此,除非所预计的结果被编码进该系统中,否则软件系统并不能认识到一个故障(未预料的结果)。这一工作首先显示出预先编码程序规范的任务在复杂性和易出错特性方面与对软件功能进行编程并没有什么不同。
另外,通过预先编码系统需求试图消除软件故障将忽略软件故障的下列特点,因为不能绝对地定义一个软件故障;
—软件故障在输入和输出上与改变了的预期(要求)有关;
—软件故障与改变了的操作环境有关;
—在系统结果不是明确被证明时,软件故障与系统结果的单个预期有关。
在这里需补充的是:确定软件故障的问题在于基本软件过程(程序源语句)的正确性的相关性。
基本过程存在三维世界中。前两维是程序算法空间的两维,通过观察流程图可以理解这一点。静态程序分析就是在这两维中进行的。第三维是程序执行过程的时间。动态分析必须在空间和时间上进行。
程序静态和动态分析之间的差别之大与传统的和现代的结构间的差别是一样的:
由于“除了在某一时刻外没有人会注意一个位置,或除了在某一位置之外,没有人会注意一个时刻(H.Minkowsky,“Spaceand Time”),在一程序(该程序在其算法空间内有自己硬编码位置)内的该基本过程只有在该程序控制将要到达该基本过程时以及如果将要到达时,才具有意义,其意义在该过程内的不同时刻是不同的。
在一基本过程(语句)在该过程内的不同时刻执行之前以及之后,其基本过程意思上的差别是由该执行历史上的可能差别所决定。
先有技术遗漏了为了能自动确定计算机软件中的逻辑错误以及总的提高程序的动态分析的下列主要技术步骤:
I)在自动程序方面引入关联属性以及使自动逻辑分析可行的新的理论;
II)基于上述理论,由运行在关于目标过程单元“正确性”和其“不确定性”的知识之上、具有将这种不确定性降至最小的机制的过程所组成的技术,这些过程可以积累并且在目标过程单元之间传播上述知识,从而自动地增加该目标过程模型的“智能”;
在以后的描述中,我们将用术语“知识”来描述在目标过程的特定实例上对目标过程单元“正确性”或其“不确定性”的认识。
III)基于上述理论,在用户和目标软件系统间提供高级接口的技术,它能考虑所分析的有关目标,即有关的程序语句和有关的系统行为,自动地在有关地点和时间启动分析工具。
(自动分析不可能建立在试图去理解在何处设置断点的认识要求之上)。
我们将上述技术步骤设想为未来操作系统的一个完整部分。类似于编译器的静态语法分析,这种操作系统能将对目标系统行为的动态分析提高到随着确定程度的增加能定位逻辑错误的位置的程度。
类似于不确定性的不同程度也存在于编译器的诊断中:编译器不能检测出在字符′a′的地方应是′b′,相反它只能报告在一个语句或语句组的一特定区域内存在特定类型的问题。
没有编译器的这种部分不确定性分析,我们就不能处理任何相对复杂代码的语法错误。
在逻辑错误分析领域这种自动化是一个长时间的期盼。XPD机在一个更加复杂的范围内提供了这种自动化——确定逻辑错误的位置和类型。
先前提到的技术步骤是建立在十分基本但又是十分严格的模型(表示过程算法的模型)之上的,该模型可以从任一现有的软件系统中提取。
在下面对术语XPD的描述中,我们要了解下列过程的结合,它们还将进一步描述:
—在传统目标码实现中实现XPD模型和目标过程的“伪并行”(即“延迟顺序”或“延迟并行”)同步执行;
或者
将XPD模型作为XPD目标码实现中目标过程目标码的一个部分执行;
—建立系统输入和系统输出过程同步映象;
—运行XPD分析机(XPD Analytical Engine),即:
—为目标过程单元的执行事件建立因果关系和它们的正确性的知识;
—在目标过程单元间传播这一知识;
—使用所积累的目标过程的知识,定义错误位置区域,
或者由于修改了系统要求而必须修改的区域;
下面简要描述XPD机技术的几点基本长处。
为了定位程序中的错误,或者从总体上理解程序,传统上程序员要做大量检测性工作。除了要出现人为错误,以及由于在手工分析中的错误而可能造成的次要错误,因此这种手工程序分析经常是太过于复杂而难以进行。
我们的发明进行检测性工作,并且将大部分手工分析自动化。这种分析随着对目标过程行为的知识的积累而精确地增加。本发明的核心是能够积累和使用这种知识。本发明就是研究目标过程内的事件和它们的结果。
如果一个由其它事件所产生的事件(实际存在的某些情况)被作为一个结果(可以跟踪至一个情况或条件),那么可以说我们的发明是通过研究基本过程事件的结果,即目标过程内的因果关系而工作的。
本发明不是采用传统方式即向前运行(跟踪目标过程)来分析目标过程,而是向后运行从结果进行分析(自动地)。
这一方法极其象人们使用思维的方式,即当看到在我们身边出现的结果时,人们总是试着去建立引起这些结果的内部过程的认识,即向后运行从结果至原因建立因果认识。
事实上,计算机程序是人所编制的,不应该改变我们理解它的方式,即从结果进行分析,而不是仅仅简单地向前跟踪单元步骤。
由于目标过程结果是该目标过程的最终结果,能够从这些最终结果跟踪至其原因使我们得到一个有独创性的接口,其中程序分析是从该程序的输出开始的。
在我们的发明中,“一个期望结果的后果证明中间结果链是正确的”或者“期望结果的事件证明中间事件链是正确的”。
这允许非最理想的计算,其定义不论怎样总是相对的,但是引入了计算批准(结果批准)的基本原则,而且因此在现存过程的基础上引入了前期程序开发的基本原则。
XPD机通过在XPD分析机内产生的过程在后台分析目标程序的结果。
术语“分析机”(Analytical Engine)是由Charles Babbage在大约150年前发明的,指的是(他所致力于研究的)机械式计算机的第一个基本性概念。他的用机械式计算机代替人脑计算机的想法来自于这样一个令他困扰的问题,即人脑计算机易出错。
本发明的XPD机是由人们在现代计算机编程中出现的错误催生的。
XPD分析机通过积累目标过程行为的经验,学会什么是正确的行为,什么是错误的行为,什么行为不要分析,以及什么行为是被错误地分析。
这一过程可以与人类思维的认识学习过程相比—建立联系以及建立下意识反射。
在认识学习过程中,带领我们通向正确结果的步骤在我们学习过程中处于一个特别的地位。如果以后产生了非预料结果,它们是最后一个被怀疑到。如果该分析强迫我们放弃这些先前建立的反射或联系,这总是一个相当痛苦的过程,即强迫我们重新分析先前的第一次建立反射或联系的结果。
在XPD分析机内,这一忘掉知识是由“丧失知识”表示的,并且发生在认识到以前认为是正确的系统结果是一个故障时。
XPD学习过程被目标过程向前执行传播,并且被对系统结果(被认为是正确的(期望的))的积累所激活。因此分析的结果是不依赖于人的因素,但是将人的活动以及因此是人的错误限制到去分析最终结果——可视的结果。
为了对于改变的系统要求允许不同的分析结果,以及在现存过程的基础上允许前期程序开发,这种灵活性是实实在在需要的。在发现了先前遗漏的故障时,或者改变系统期望(需求)时,XPD分析机允许取消先前分析结果的一部分。
XPD分析机的一个基本特征是随着目标过程时间的增加将在计算程序结果的可能出错位置的不确定区域减至最小(通过程序结果(效果)的累积可以看到这一点)。
分析的精确度取决于在上述过程时间的座标内第一个被发现的故障的位置,或是在说明书中第一个要改变的位置,这种精确度是由所积累的系统结果进行度量。本发明的概述
本发明的一个目的是提供一种方法,它能将在一目标过程一个错误的位置或需要修改的地方的不确定性降至最小,其中错误是一个故障(非期望的结果)的原因而且没有为编译器发现,所要求的修改是为了与新的预计结果一致。
这一目的是通过综合多个过程而实现的,类似于对目标过程功能的认识理解。
首先,在对目标过程的静态分析的基础上通过非常严格但一般的规则建立该目标过程的模型,从而在动态分析期间为进一步积累该目标过程的知识建立一个库。在这一模型中,每一个有关的程序语句在两维XPD算法空间内有一个自己的特定位置。
所得到结构的严格性考虑到一种机制,它通过建立连续的“幻像”,能自动地而且方便地对在该目标过程的任两单元之间的可访问性(存在一条路径)进行计算。“可访问性”(“accessibility”)定义了“潜在的依赖性”。如果从语句(a)能访问语句(b),这时(a)的正确性才影响(b)的行为。
现举一例,单元可访问性的自动计算的一个重要结果是能明确地识别“非可终结”过程结构—数据独立无终止循环。
在建立一目标过程的模型时,本方法提供了一种方法,用于将目标过程算法的控制部分提出和放入一个代表该过程的控制结构的结构中(“算法的XPD构架”—XPD Frame ofalgorithm)。“算法的XPD构架”是一个严格的、唯一定义的结构,它充分而必要地表示任一过程的控制结构。
其次,引入了一种机制,它考虑为每一相关的基本过程(程序语句)积累特定的动态信息。这一信息与对基本过程功能的理解有关,并隶属于在对该目标过程模型的先前静态分析期间所建立的模型,以及将目标过程行为的动态知识加进该模型。更进一步,我们将这种特定信息称作基本过程“知识”。所提到的机制允许建立关于“因果”关系的信息,以及过程单元“正确性”的一种“相对的”和“时间依赖性”测量。
因此,本发明的更进一步的目的是提供一种机制,它在本发明所定义的“过程空间”和“过程时刻”{“过程地址”和“本地时刻”}的座标内以及在本发明所定义的过程“正确性”和“不确定性”测量内将一个过程步定义为“正确”或“不确定”。持续地积累所提到的基本过程“知识”,并将之在不同的过程单元间传播。在认识到目标过程故障或与预计结果不同时,就使用这种知识以标识在该目标过程内所需修改的位置。
本发明的另一目的是提供一种手段,该手段通过建立过程的“正确”功能的知识库用于在目标过程维护期间保护该目标过程的“正确”单元不被改变。
本发明的又一目的是在用户和目标过程所积累的知识之间经过XPD机引入一种高级接口机制。
本发明的又一目的是为了方便调试产生目标过程行为的多媒体表示。
本发明的又一目的是引入目标过程目标码的一种独特形式——XPD目标码(XPD Object Code)以及执行它的方法。XPD目标码更适合静态和动态程序分析以及程序维护。它方便了而且有时也消除了传统的目标过程代码的重新编译和重新链接,而为了修改该过程,这通常是必需要做的。
本发明的这些和其它目标是这样实现的:从一目标过程的源代码中提取出关于该目标过程的特定的静态信息,这是建立一个代表该目标过程算法的模型所必须的;在该模型的基础上建立该目标过程行为的动态知识,引进一种机制,用于建立对该目标过程内因果关系的理解;引进一种机制,用于建立该目标过程内基本过程的“时间依赖性”和“相对”“正确—不确定”属性;以及引进一种方法,用于在执行该目标过程期间在目标过程单元间传播该“正确—不确定”知识,并且因此自动提高目标过程模型的智能层次。
本发明也提供了一些其它特点,通过参考下面的详细描述,可以更好地理解。附图的简要描述
图1是示例目标过程的流程图;
图2是图1所示的示例目标过程的算法XPD构架;
图3展示了复杂逻辑条件是如何被简化为两个或多个精减逻辑条件(Reduced Logic Condition)。
图4表示图1所示的示例目标过程的精减流程图(ReducedFlow Chart)。
图5(A)是图1所示的示例目标过程的XPD图(XPDGraph),而图5(B)表示赋给XPD(图5(A))的对应单元的二进制地址(Binary Address)。
图6展示了IF-THEN-ELSE是如何以XPD构架和XPD图表示的。
图7显示了建立XPD模型(XPD Model)、XPD资源库(XPD Repository)和X-Source码的步骤。
图8显示XPD机运行的主要部件。
图9显示了通过以另一示例过程流程图为例建立连续“幻像”定义退出访问指示符(Exit Access Indicator)和定义该目标过程的任两个单元间可访问性的机制。
图10显示了定义一过程终结的“传播幻像点”(PropagatedVision Point—PVP)的机制。
图11的图表示了在实现目标过程期间可能引进的错误的根源。
图12的图表示了三种类型的目标过程故障。
图13的图解释了在向前执行该目标过程中XPD机是如何将错误位置不确定区域减至最小的。
图14显示了如何建立事件定义空间(Event DefinitionSpace)。
图15显示了如何传播正确算法空间(Correct AlgorithmSpace)。
图16显示了在特定过程地址(Process Address—PA)内一个过程单元的正确性“知识”是如何正在被积累的。
图17显示了定义“祖先”事件的机制。
图18(A)显示了执行XPD目标码的过程;图18(B)显示了XPD目标码的两个部分;图18(C)显示了由XPD模型所控制的解释XPD资源库的过程。
图19显示了ACB(分析计算库—Analyzed CalculationBase)结构的实现。
图20显示图21A所显示出的示例过程的XPD图(图20A)和XPD资源库(图20B)。
图21中,示例过程(图21A)和其X-Source(图21B)。较佳实施例的描述
本发明将以下列顺序说明其主要步骤:
1.建立目标过程算法的XPD构架;
2.建立该目标过程的XPD图和精减流程图;
3.定义计算目标过程“正确性”和确定在目标过程中需要修改地方的不确定性的XPD机的原则,这种修改是由于有错或改变了系统要求;
4.定义目标过程知识传播(知识归纳)的XPD机的原则;
5.建立该目标过程的XPD模型;
定义分析计算库(ACB);
建立该目标过程的XPD资源库;
6.建立X—Source码
将获取目标过程行为的开支减至最小;利用递增系统输出过程同步(Incremental System Output Process Synchronized—ISOPS)映象的方式建立用户—XPD机—目标过程之间的接口:
建立系统输入过程同步(System Input ProcessSynchronized—SIPS)映象;
7.目标过程、其XPD模型、XPD资源库和X-Source码的示例;
8.该目标过程模型的“伪并行”(Pseudo Parallel)同步执行;“延迟的顺序”和“延迟的并行”XPD模型的执行;
9.运行XPD分析机。建立在该目标过程内因果关系的分析计算库;
知识归纳;
10.引用ISOPS映象以激活XPD分析机“知识演绎”过程,从而持续地减少不确定性将出错位置或需修改地方的区域集中起来;
11.解释XPD图和XPD资源库;
12.XPD目标码及其执行;
将XPD模型作为该目标过程目标码后的一部分执行;
13.重新编译与重新链接XPD目标码;
14.在测试和生产的所有阶段上实现XPD机过程;
15.面向结果的编程(Result Oriented Programming—ROP);
16.实现程序听诊(Program Stethoscope);
1.建立目标过程算法的XPD构架
在下面的描述中,我们将显示出是如何从XPD图中建立XPD模型的。目标过程的XPD图的构造可以是先于、伴随或后于该过程算法的XPD构架的建立。
虽然可以将建立算法的构架的步骤完全跳过,但为了方便地展示该构架和XPD图之间共有的一些重要属性,我们还是将进行描述。另外,算法的XPD构架可以总是用作该目标过程控制结构的一个十分紧凑和严格(唯一定义)的表示。
在下列描述中将包含几个定义和原理。这些是必须的,因为作为XPD机运行基础的一些目标和术语是先前未曾定义的。
下列是XPD构架、XPD图和XPD模型在其上运行的目标集。我们将这一集合称为XPD目标集。
{[,A,X,L,D,E,W,N,=,R,*,C,+,S,/,!,(,),V,i,}
其中
′[′过程入口;
′A′算术或赋值语句;
′X′函数或子程序调用语句,而不是图形库子程序或函数。例如:CALL,PERFORM;
′L′IF语句(一个输入和两个输出);
′D′循环语句  例如:DO,FOR,WHILE;
′E′输入语句  例如:READ;
′W′输出语句或图形库子程序或函数;
               例如:WRITE(),
                 CALL MOVETO(X,Y,XY),
               其中{x,y}—屏幕座标;
′N′空语句   例如:CONTINUE;
′=′STOP语句;
′R′RETURN语句;
′*′GO TO语句;
′C′假设情况下的循环终结语句或其位置;
                例如:CONTINUE,ENDDO;
′+′被赋值的GO TO语句;
′S′ASSIGN(ALTER)语句;
′/′GO TO的入口或其位置
                例如:由GO TO所引用的标号位置或
                      段名;
′!′在假设情况下的ENDIF或其位置;
′(′LC域的开始;
′)′LC域的闭合;
′V′ELSE;
′i′—不包括′(′和′)′的XPD目标的目标类的过程单
     元的索引;
     —XPD目标′(′和′)′的LC域的级;
在下列叙述中,我们讨论只有一个模块的计算机程序过程,虽然我们的结论可以很容易地扩展到表示一个程序系统的过程中。
我们将模块理解为是一个有一个入口点的主程序或一个子程序(即子程序、函数或程序段)。虽然下面的示例提供了有一个退出的程序,但所描述的实现方式对于有多个退出的模块同样起作用。通过这里所描述的对于只有一个入口的模块的XPD机实现方式,可以很方便地得到用于具有多个入口的模块的XPD机的实现方式。图2表示了图1的流程图所表示的示例目标过程的XPD构架。
定义F1:“精减的逻辑条件”(LC)
         是一具有一个控制输入和两个控制输出的过程单
         元,其两个控制输出根据其布尔(0或1)解确定该过
         程的未来方向。
在XPD目标集中,LC被表示为′L′或′D′目标,我们将称作否定解(negative solution)—0解或低期望解,和肯定解(positive solution)—1解或高期望解。
在目标过程包括具有超过两个输出的控制单元时,在以XPD构架和XPD图表示期间,就自动地将这种控制单元精减为两个或多个LC。参看图3,结果的LC数等于控制输出数减1,因为每有一个LC就将控制输出数增加1。
定义F2:“主分枝”
        是这样一种分枝,在表示沿着过程执行的方向从主
        分枝的开始到其“过程终结”的一个通路,其中所遇
        到的逻辑条件都是经过其低期望解。
主分枝有两类开始:
1.启动“入口主分枝”的过程入口(图1与图4中示为开始(START));
2.LC的高期望解。
定义F3:“过程终结”
         是XPD目标集的下列目标:
          XPD构架的表示
—GO TO       ′*′,′+′
—循环终结    ′C′
—RETURN      ′R′
—STOP        ′=′
有两类过程终结:
定义F4:“退出终结”
         是终结{′R′,′=′},导致从过程中退出。
定义F5:“重绕终结”
         是终结{′*,′+′′C′},它将过程重绕至在同一
         主分枝中定义的单元,或是在XPD图中定义的从当
         前主分枝向左的主分枝中定义的单元。
因此,主分枝的长度依赖于其终结的位置,而终结的位置又取决于主分枝定义的顺序。
表示XPD构架和XPD图的顺序可以用“下一最小期望”(Next Lowest Potential)原理描述。语法分析该算法的“下一最小期望”顺序:
步骤1:定位于开始(START)。
步骤2:对所遇到的LC经由“低期望解”(0-解)对该过程进
       行语法分析,直至到达先前已经历的过程单元,或一
       个退出(EXIT)。
步骤3:如果存在的话,回至经由“低期望解”所遇到的最后一
       个LC;
       定位于其“高期望解”;
       从步骤2进行;
       如果经由“高期望解”已经历所有的LC,则完成了该
       目标过程算法的语法分析。
步骤1的每次执行就建立一个主分枝,该主分枝由“退出终结”或“重绕终结”所终止。因此就从XPD构架和XPD图中消除了向前分枝的那些GO TO结构。
原理:有n个精减LC的过程包括(n+1)个终结和(n+1)个
      主分枝,其中每一主分枝是以用其终结标识。
原理:(n+1)个主分枝的全体对于表示该过程的所有单元是
      充分而且必要的。
说明:在没有LC(即没有条件控制)的过程中,只有一个分枝
      —入口主分枝(ENTRY MAIN BRANCH)。通过经由
    LC的高期望解打开新的主分枝,每个LC就将主分枝
    数增加1。
在XPD图中,每个主分枝和其终结用它们的b-座标标识(图5(A))。该过程算法的构架是在下列布尔表达式的基础上建立的:LAV    !LB
读作:如果L则做A,否则(非L)做B。
在XPD构架中,我们引入括号:′(′,′)′,它们表示逻辑级和终结的范围,它允许循环:{′*,′+′,′C′}和退出:{′R′,′=′}。我们也可省略“!L”,因为很显然,在属于特定L的ELSE符号′V′之后,必然跟着′非L′。因此我们得到(iLAVB)i,其中A和B是LC L的相应的“0-子域”和“1-子域”,而i代表“LC域的级”。
定义如下:
定义F6:“t—经过”
         是从该过程入口至其终结的一次经过。
原理:在任一过程中有(n+1)个t-经过,其中n是该过程中
      LC的个数。每个t-经过唯一地由其终结标识(图5
      (A))。
定义F7:“LC分枝”
          是经由该LC的t-经过的一部分,它位于该LC后
          面。
每一LC有1个或多个0-分枝和1个或多个1-分枝。在图1中,LC L1有2个1-分枝,用′d′和′h′称出。
定义F8:“LC的0-子域”
         是位于该LC的0-分枝上的所有过程单元的组合。
定义F9:“LC的1-子域”
         是位于该LC的1-分枝上的所有过程单元的组合。
定义F10:“LC域”
         是该LC的0-子域和1-子域的组合。
定义F11:“LC域级”(逻辑级)
         是该LC在经过它自己的t-经过中的次序。
举例:在图1中,有下列逻辑级:
L1打开逻辑级1
L2和L3打开逻辑级2
D1打开逻辑级3
在图1中,主分枝用线“a”、“b”、“c”、“d”、“e”标出。在图5(A)中可以看到,它们分别由位于b-座标的1、2、3、4、5的终结所标识。在图1中,LC L1的0-域用虚线“f”示出,LC L的1-域用虚线“g”示出。
XPD构架的建立是通过以一种特定的次序表示主分枝并且将LC显示出其对应的级而进行的。参看图2,XPD构架建立成一种代数表达式形式,它包含几层括号:
(...(...(...)...)...(...)...)
1   2   3   3   2   2   2   1
代数表达式的规则是在内层(较高级)括号封闭之前不能封闭外层(较低级)括号。
在XPD构架中,括号表示逻辑级。也适用同一规则:在较高级(内层)逻辑域封闭之前不能封闭较低级(外层)逻辑域。
定义F12:“打开LC域”
         在我们开始在构架中表示该域时。
定义F13:“封闭LC域”
         当在构架中完成该域的表示时。
定义F14:“LC的活动域”
         是最高的而且仍打开的LC的域。
定义F15:“过程段”
         是主分枝的一部分,它位于下列过程单元:过程入
         口、过程终结和LC之间。
过程终结和LC终止过程段。它们属于自己所终止的段。作为一个过程段的终结,每一LC同时拥有两个其它段:该LC的一个否定段(经由0-解)和该LC的一个肯定段(经由其1-解)。
段具有两个属性:
1.逻辑级,和
2.二进制地址(还要进一步描述)。
定义F16:“过程段的逻辑级”
         等于该LC的逻辑级,该逻辑级是该段所属于的级。
定义F17:“入口段”
         是该过程入口所拥有的过程段。
入口段的逻辑级是0。有(2n+1)个过程段,其中n是过程中LC的个数。每个LC有两个段,另外再加上一个入口段。比如,在图1中,该目标过程包括4个LC和9个过程段。
对于该目标过程的XPD构架和XPD图,对过程单元的加标号是以建立XPD构架或XPD图的次序进行的。
在图1所示的示例目标过程中:
段:    由XPD目标集所表示的过程单元
1:     A1/1 A2L1
2:     /2 A3 L2
3:     *1
4:     A5 X1D1
5:     A4C1
6:     A6W1*2
7:     W2E1L3
8:     A7=
9:     A8*1
图2是图1所表示的该过程的XPD构架。根据先前所定义的下一最小期望次序,开始从该入口主分枝建立算法的构架。
在该过程被下列任一目标:{*,+,C,R,=}所终止,我们就返回到上一个经过其小期望解(NO)的LC,而且开始经历属于该LC的高期望解(YES)的主分枝。以此方式我们顺序地表示该过程的所有(n+1)个主分枝,其中n是该过程内的LC数目。
图6示出了在XPD构架和XPD图中IF-THEN-ELSE结构的表示。L1(P3)的1-域是紧接在L1(P2,P4)的0-域被封闭之后才表示的。
将目标过程的一个算法抽取放进算法XPD构架之中的方法,其中算法的XPD构架采取根据“下一最小期望”规则建立的唯一定义的基本形式:
步骤1:将0赋给活动逻辑级;定位于该过程入口;步骤2:经历主分枝;每一个经历的可执行单元赋给一个名
   字,该名字由XPD目标集的元素构成,其对应的索
   引值增1;(例如:A1,A2,L1,A3,L2,*1表示入口
   主分枝),语句根据被赋给的名字存贮在XPD过程
   资源库中(图7和图8);
   在当前经历的主分枝中遇到LC时,就经过其低期
   望解(NO);
   该LC打开下一逻辑域,将活动逻辑级增加1;在构
   架中,每一个被经历的LC是用左括号带上一个表
   示所打开的逻辑域的级,后跟带有相应索引的符号
   L或D;(i Lj或(i Dj;步骤3:当遇到一个过程终结时,终止该段。
   如果该终结是一重绕终结{*,+},就将一项/i插在
   控制返回的位置上,索引(i)增加1,除非该项已经存
   在;
   将项的索引(i)赋给该重绕终结。步骤4:检查活动逻辑域:
       IF  活动逻辑级为0,则
           完成XPD构架的构造;
           STOP;
       ELSE
           宣布封闭该逻辑域的子域;
       ENDIF步骤5:检查被封闭的子域;
           IF  所封闭的子域是0-子域,则
               将符号′V′(ELSE)放入构架中;
               语法分析从对应的LC的高期望(1-解)处
               开始,以建立该LC的主分枝;
               宣布打开该级的1-子域;
               GO TO步骤2;
            ELSE  (所封闭的子域是1-子域)
                  因为封闭了活动逻辑域的0-子域和1-
                  子域,所以宣布封闭活动逻辑域;
                  通过用带有指示所封闭的逻辑域的级的
                  整数封闭括号,在构架中描述该逻辑域的
                  封闭:′)i′;
                  将活动逻辑级减1;
                  将刚刚封闭的逻辑域(i....)i看作是由
                  相应的LC所终止的段的终结;
                  在封闭该LC的域时,则宣布对应的段被
                  终止;
                  GO TO步骤5;
      ENDIF
上述示例显示出,在XPD构架结构中(图2),较高逻辑级的LC的域位于较低逻辑级的域内。在任一过程中,可以有级N的最大F逻辑域,其中F=2N-1。2.建立目标过程的XPD图和精减流程图。
下面解释建立图1的目标过程的XPD图(图5(A))和精减流程图(图4)。
定义G1:“精减流程图”(图4)
        是流程图形式的XPD图。
精减流程图是在与XPD一样的座标k和b上以及以与XPD图同样原理建立的。下面描述的建立XPD图的规则同样应用于精减流程图的建立。
之所以解释作“精减”流程图,是因为控制方向的所有可能变化被减少到1—向右,即一个LC的高期望解。低期望解通过让控制继续“下落”并不改变控制的方向。跳转只允许向后(向上和向左),而且用调用对{终结-其重绕入口}表示,比如图5(A)中的{*1/1}或{*2/2}或{C1 D1}。
定义G2:LC的否定状态(0-状态)
        是在if(如果)计算时,LC得到0-解的状态。
LC的状态是由在其运算中所涉及的变量状态定义的。
定义G3:LC的肯定状态(1-状态)
       是在if(如果)计算时,LC得到1-解的状态。
定义G4:“二进制地址”(BA)
       是由在t-经历中直至一过程单元的LC的解的1
       和0的组合,其中将过程入口的二进制地址赋为1。
属于同一段的过程单元的BA是相同的。LC的0-段BA是将该LC的BA乘以2而得到的(即在其右端加一个0)。
LC的1-段BA是将该LC的BA乘以2加1得到的(即在其右侧加一个1)。
例如:在图4中,L3的BA是11,A7的BA是110,而A8的BA是111。
XPD图是在两个方向上建立的。在我们的实现方式中它是垂直向下和水平向右建立的。
主分枝垂直向下的,同时表示该过程执行移动的轨迹,除非该轨迹由位于该路径上的一个LC的肯定状态改变。
每一轨迹建立在其b座标上,轨迹永远不会交叉。
LC在其高期望解下具有将控制转移到其它轨迹的可能,其中b座标与该LC的肯定状态有关,并且位于当前轨迹的右侧。这种转移在XPD图中用向右的水平线表示。
从XPD构架开始的方便之处在于主分枝集合在那里已定义为该构架的各部分,它们被用′V′符号分开。在XPD构架中,主分枝已经以右顺序表示。
采用下一最小期望”规则将目标过程的一个算法提取出放入“双向终止的”XPD图(bi-directed terminated XPD Graph)中。
参考图5(A)
步骤1:XPD图从(k,b)座标为(1,1)的过程入口开始;
       将该过程入口的二进制地址赋为1;
       开始入口主分枝;
步骤2:在经历该主分枝时,在XPD图上,用不断递增的k-
       座标和恒定的b-座标表示每一单元;
       每一单元被赋予该单元所属段的一个BA,除非是从
       XPD构架中构造XPD图,否则必须进行下面的(a)
       和(b):
            (a)对该过程单元赋予一个名字,该名字由XPD
       目标集的对应元素和不断递增1的索引构成。
           (b)以所赋给的名字将该语句记录在过程资源
       库中(图7);
步骤3:在经历该主分枝遇到LC时是经过其0-解。
步骤4:在一过程终结停止主分枝的构造时:
        IF 所有LC已经历其1-解则
          建立XPD图
          STOP
        ELSE
            沿着与过程执行相反的方向再次跟踪当前t-
            经历,直至遇到经历其0-解的LC;
        在XPD图座标(next_k,next_b)开始该LC的主分
        枝,
            其中next_k=(LC的k)+1,同时next_b
                是下一可使用的轨迹(座标b)
          GO TO步骤2;
          ENDIF
重要的是要注意:两个XPD图的维数之一,NB,就是作为程序复杂性量度之一。McCabe的理论“A Complexity Measure”发表在IEEE Trans action On Softw are Engineering上(Vol SE-2,No.4,1976年12月,pp308-302)。
McCabe将“循环复杂度”(Cyclomatic Complexity)定义为线性独立路径的最大个数,对于一个入口和一个出口,其“循环复杂度”由下式定义:
V(G)=e-n+2
其中,V(G)一循环复杂度
e—边的个数
n—结点个数(入口结点+退出结点+分支结点)
我们将这个公式称为循环复杂度的McCabe公式。
边是我们所称的段,边数e=2q+1,这也是过程段的个数,其中q是LC的个数;
分枝结点是我们所称的LC,分枝结点的个数是q,其中q是LC的个数。
那么,对于一个入口和一个退出结点,根据循环复杂度的McCabe公式:
e=(2q+1)
n=1+1+q
V(G)=(2q+1)-(q+2)+2=q+1
V(G)=q+1,其中q是LC的数目。
因此,由McCabe的“循环复杂度”所定义的数等于LC的个数加1,也等于NB,其中NB是主分枝的数。
前一公式对应于下一研究工作,这在1989年授予的第4853851号专利中作了描述:“等于线性独立路径的循环数就是在流程图的最宽部分所计的路径数。这一计算循环数的方法未被McCabe描述”。
XPD算法空间的第二维(MK)也可用于描述一个算法的复杂性。MK代表从过程入口到一终结的最长路径,因此等于在最长的t-经过上的基本过程的个数。维[MK,NB]的矩形空间表现为目标过程算法复杂性的一个好的标识。我们将这个空间称为目标过程的“算法空间”(Algorithm Space)。
比如,图1示例中的算法空间是[14×5]
图5(A)显示了XPD图的下列有益特点:
1.每一单元可以由两座标(k,b)唯一寻址;
2.在两个方向上建立图—在我们的实现方式中是向下和向右—其中,向下只被高期望解的向右移动所打断。
3.非“退出”终结(STOP或RETURN)的过程终结能“重绕”该过程。这种重绕只允许向后,即左上。之所以这样,是因为在构造XPD构架和XPD图期间通过定义其主分枝消除了向前跳转。
4.对每一段赋一个二进制地址,它唯一地标识了在目标过程中该段的逻辑位置。
5.XPD图允许简便地确定过程单元间的“可访问性”。
定义G5:“S1可访问单元S2”在从S1到S2有一条路径时。
         即:如果在一些输入组合上,有可能在S1执行之后
         一段时间执行S2,则S2可被S1访问。
两个过程单元之间存在“可访问性”是一个单元正确性影响另一过程单元结果的必要条件,而该“可访问性”是两个过程单元间存在“因果”关系的必要条件。
最近,为了研究程序的结果,提出了程序依赖性的几个定义。两种基本类型的程序依赖性是:“控制依赖”和“数据流依赖”。程序依赖性用于如软件测试、调试和维护这种严格的目的。直到最近,由于看到这种实现方式十分困难,只是非正式地认为使用程序依赖性的大多数建议是合理的。
在A.Podgurski和L.A.Clark的文章“A Formal Model ofProgram Dependencies and Its Implication for Software Testing,Debugging,and Maintenance”IEEE Transaction of SoftwareEngineering16,9,1990年9月pp965-979)中,作者提出了术语“语义依赖性”,认为它是一条语句潜在影响另一条语句执行的行为(而且因此是结果)的必要条件。然而,这篇文章证明:控制和数据流的依赖性的不同概括并不是自动识别程序错误的充分信息,因为它们甚至也不是识别存在“语义依赖性”的充分信息,而后者无论如何也不是以识别程序错误。
对于“语义依赖性”,本发明所介绍的自动确定单元可访问性的方法可定义为在目标过程的任两个单元间计算存在“语义”依赖的必要条件的一种实际方法。
换句话,所介绍的方法实际上计算下列可能性:
1.语句S1造成S2的错误动作;
2.语句S2要受到修改S1的影响;
能够确定过程单元间的可访问性也就是解决了现存的“确定非终止性”数据独立无终止循环(“definite non-terminability”Data Independent Endless Loop)的问题。我们将对于图9的示例,说明如何使用XPD图二进制地址运算方便地确定
—Si和Sj间的可访问性;
—过程中建立数据独立无终止循环的过程部分的存在。
普遍认为程序是否终止的问题是不可解的。我们将过程的“可终止性”(terminability),即能够终止的问题分为两个方面:
—数据独立无终止循环
—数据依赖无终止循环
数据独立无终止循环由不会进入“退出”终结的过程单元构成。
数据依赖无终止循环是这样一种结构,在进入它之后,在某些原因下,而不是在缺少到达这些退出终结的控制路径下,该控制将永远到达不了一个退出(STOP或RETURN)。这种原因是下述任一种:
a.缺少程序变量的操纵,这些变量在特定的控制路径上可能
  会改变控制通路,或
b.沿着取LC值的方向通过在低期望状态与高期望状态改
  变它们的状态而改变这些程序变量。
在a:和b:两种情况下,控制将进入一个无终止循环,以同样的顺序经过同一个终结,而不能到达一个“退出”终结。
定义G6:*bn
        指b座标等于n的终结。
(举例:在图10中,*b3指b=3的GO TO终结,而*b5指b=5的“退出”(exit)终结)。
定义G7:MBn
        指在b座标等于n上建立的一个主分枝。
(举例:在图9中,MB3指在座标b=3上建立的主分枝)。
数据依赖无终止循环的举例:如果在/1和*1之间的路径上没有重新定义将被L2和L3检查的值的单元,则一旦L2和L3第一次取它们的低期望解,终结*b1就产生数据依赖无终止循环(因为在目标过程向前执行过程中L2和L3的状态将一直不改变)
数据独立无终止循环的举例:在图9中,主分枝MB2、MB3、MB4表示数据独立无终止循环,如果对L3肯定解,过程将进入无限循环之中,而不管在那些分枝中有什么数据操纵语句。
虽然数据依赖无终止循环为过程的“非终止性”提供了一种可能,它们并不必然是错误的结构,因为它可能将LC设置为无限循环状态,而输入数据却永远不可能这样。
在图9中项/q不对应任何终结,只是作为这样一个事实的示例而示出:即使在路径/1到*1上L2和L3非数据依赖,L2的否定子域内L3的位置(其中L2的重绕终结*b1直接将过程控制重绕到L2的前面)并不必然是一个错误。这是因为如果L3已经由项/q接收了控制,将控制返回到项/1并不必然导致L2得到否定解,从而产生一个无终止循环。
数据独立无终止循环是在过程构造过程中其它确定性错误造成的。
数据独立无终止循环的检测是通过计算“重绕”终结和“退出”终结之间的可访问性而进行的。同一过程也可以用于计算XPD图的任两个单元间的可访问性。(比如在图9的Si和Sj之间)
XPD图可以对由下列三种期望所确定的单元间的可访问性进行解释:
—一个主分枝内的“自由下落期望”;
—LC的“转移期望”;
—一终结的“重绕期望”;
“自由下落”可能是一个过程单元在另一个之后激活时由顺序过程的自然属性所确定。
定义G8:“LC的转移期望”(Shift Potenfial of LC”)是由于
         该LC的肯定解而增加b-座标的LC的期望。
举例:在图5(A)中LC:L2、D1和L3有转移期望1,而L2有转移期望3。
定义G9:“终结的重绕期望”
            是一终结减少BA的期望。
            BA的值如下确定:
            如果bbb是一个位序列;则bbb0>bbb
                                  bbb1>bbb0
                                  bbb1>bbb00
即:为了进行比较,将BA左对齐,将对应值从左往右进行比较,直至遇到第一个不匹配,其中1>0>_,_是一个空位置,在左边的位位置具有较高权重。
在图5的示例中:
     BA(L2)>BA(L1),因为10>1
     BA(W2)>BA(A3),因为11>10
     BA(W2)>BA(A5),因为11>1010
定义G10:“段地址”(SA)
         是{BA,K}偶,其中BA是该段的一个二进制地
         址,而且k是该段内的k-座标。
段地址可以进行比较。在对SA的{BA,K}进行比较时,BA具有较高的权重,即(11,7)>(10,7),(11,7)>(11,6)。
在图9示例中:/3的段地址是{10010,rk3}。
定义G11:“单元的幻像”
         如果SA(S2)是SA(S1)的后代,则单元S2位于单
         元S1的幻像之内,或者说S2被S1看见,而且S1
         看见S2。
定义G12:“SA(S2)是SA(S1)的一个后代,”
          如果S2的BA是在S1的BA右边后接续二进制
          数字而形成的,或者如果BA(S1)等于BA(S2)而
          且K(S2)大于K(S1)。
如果在一t-经过中有一条从S1到S2的路径,则S2在S1的幻像内。记住:在t-经过不经过终结。
举例:在图4中,A6在A3的幻像内,因为发现10在1011内是左对齐的。(A6被A3看见,而且A3看见A6)
举例:因为101可以左对齐映射到1011,因此段1011内的任何单元:{A6,W1,*b3}位于段101的任一单元:{A4,X1,D1}的幻像内。
举例:X1位于A4的幻像内,因为它们的BA都是101,同时X1的K大于A4的K。
定义G13:“重绕终结的幻像”
         是该重绕入口的幻像;退出终结的幻像为空。
定义G14:“S2可为S1访问”
         如果S2位于S1的“访问域”内。
定义G15:过程单元的“访问域”
          是该过程单元相继拥有的所有幻像的组合。术语
         “相继”指的是幻像被其终结幻像进行传播。
因此,一过程单元的访问域是该单元的幻像+它所看到的终结的幻像+从这些终结所看到的终结的幻像,如此不断进行下去。
“访问域”的更准确的定义将在下面给出,并通过在定义G22所提供的过程终结的“传播幻像点”(PVP)定义而提供。
图9为XPD图的每一终结建立的5个属性。一个终结的属性是:
—终结的二进制地址(TBA);
—终结的重绕二进制地址(RBA);
—终结的rk;
—传播幻像点(Propagated Vision Point-PVP)
—退出访问指示符(EAI)
定义G16:重绕二进制地址(RBA)
         是该重绕终结入口的二进制地址;(退出终结的
          RBA是0);
rk是一重绕终结入口的K-座标,(退出终结的rk等于0)。
定义G17:“退出访问指示符”(EAI)
          是一个指示符,对于“封闭”的终结置为0,而对于
          开放的终结置为1。
定义G18:“开放终结”
          是一退出终结或一能访问该退出终结之一的重绕
          终结。
定义G19:“封闭终结”
         是不访问任一退出终结的一重绕重结。
定义G20:“封闭区”
         是由封闭终结所定义的相邻主分枝的组合。
一旦过程的控制进入一封闭区内部,就不能够从中退出,即该过程将不会终止。
示例:在图9中,{*b2,*b3,*b4}定义一封闭区。
定义G21:一过程终结的“传播幻像点”(PVP)的位置
         由图10进行描述。
图10描述了终结的幻像传播和设置两个或多个过程终结的传播幻像点的原则。在这个图中,用虚线表示一建立的幻像,用实线表示从终结到其重绕入口的路径。
参考图10(A):根据我们的定义,该终结的幻像是其重绕入口的幻像。如果过程终结*n的重绕入口/n能见到另一终结*i,该终结*i的重绕入口/i可以见到重绕入口/n,那么我们说,*n的幻像被*i的幻像传播,*i的幻像成为终结*i和*n的传播幻像点。
一终结的传播幻像点是用一特定重绕入口的段地址所表示。
如果终结幻像不被其它终结的幻像传播,则该终结的传播幻像点是其自身幻像,即其入口的幻像。
终结幻像传播的同一机制在若干传播幻像与另一终结的幻像之间有效。
在图10(A)中,终结*K的重绕入口,即/k,可以看到终结*n,后者有PVP/i。因此*k的PVP被传播到/i。
举例:在图9中*b1的PVP是/i
             *b2、*b3、*b4的PVP是/2
             *b5的PVP是0,即空;
             *b6的PVP是/2
             *b7的PVP是/7;
定义G22:过程单元的“访问域”
         是其自身幻像与位于该单元幻像内的所有终结的
         传播幻像的组合。
参看图9,在示例中,单元Si的访问域是项/1的幻像,因为它是Si的幻像与*b1的PVP、*b2的PVP、*b3的PVP和*b4的PVP的组合,而*b1、*b2、*b3与*b4位于Si的幻像内。
*b1的PVP刚巧是包括Si的幻像和/2的幻像的组合,即(*b2,*b3,*b4)的PVP。
举例:单元Se(属于MB2,K座标<=rk2)的访问域是该单元的幻像,因为它拥有/2的幻像,即是Se的幻像内的*b2、*b3、*b4的PVP。
举例:单元L5的访问域是/2的幻像,因为它是在L5幻像内的*b3和*b4的传播幻像点;L5的幻像由/2的幻像拥有,并不计入在内。
当在一重绕入口的幻像内的所有终结表明该入口为它们的PVP时,其结果表明是一封闭区—(数据独立无终止循环)
举例:*b2、*b3和*b4主张/2为它们的PVP,而/2在其幻像内无其它终结。这就定义了一封闭区,即数据独立无终止循环。
为了找到“封闭”终结和“封闭区”,即表示数据独立无终止循环的结构,我们为XPD图的每一终结建立退出访问指示符(EAI)。建立退出访问指示符(EAI)
参看图9,在完成XPD图的构造后,每一终结的TBA、RBA和rk就已知了。
开始,PVP的值是从终结的重绕入口建立的,即终结的rk和RBA。
最初,所有重绕终结的EAI用0填满(即设置为封闭),所有退出终结的EAI用1填满(即设置为开放)。
从b=1到b=NB的经过,相对于所有其它终结的BA和PVP检查终结的PVP的SA以试图传播(降低)当前所检查终结的PVP,并且若终结仍为封闭则有可能打开该终结。
我们将终结*bi的PVP称为PVP*bi,将*bi的EAI称为EAI*bi。
参看图9示例:
I:开始,将终结的PVP置为它们重绕入口的SA:
PVP*b1的BA置为10;
PVP*b2的BA置为1001;
PVP*b3的BA置为10010;
PVP*b4的BA置为10011;
PVP*b5的BA置为0,因为*b5是一“退出”终结;
PVP*b6的BA置为10011;
PVP*b7的BA置为10;
II传播PVP以及设置EAI
(A)以从*b1到*bn的顺序经历终结时,其中n是NB,它是主分枝的数目,就XPD图所有其它终结检查每一终结,以试图:
a:利用先前描述的规则(G21),传播终结PVP;
b:通过利用下列规则设置EAI为1而开放该终结。
定义G23:如果封闭终结的PVP能看到任一开放终结,就通过将其EAI置为1而宣布所检查的终结为开放的。
PVP*b1{10,rk1}看见,*b2,*b3,*b4,*b5,但这些终结PVP没有一个看见PVP*b1;
PVP*b1不改变。
PVP*b1{10,rk1}看见开放*b5(1010)。
开放*b1:将EAI*b1置为1;
PVP*b2{1001,rk2}看见*b3、*b4,即10010和100111,但是这些终结PVP,即10010和10011没有一个能看见PVP*b2;
*b2的PVP不改变;
在*b1和*b5,即1000和1010时亥,PVP*b2{1001,rk2}见不到任一开放终结;
EAI*b2保持为0;
PVP*b3{10010,rk3}看见*b2(10010),PVP*b2{1001,rk2}看见PVP*b3,即{10010,rk3};
将PVP*b3置为PVP*b2:{1001,rk2};
被传播的PVP*b3仍然见不到任一开放终结;
EAI*b3保持为0;
PVP*b4{10011,rk4}看见*b3(100110),而且PVP*b2{1001,rk2}可看见PVP*b4,即{10011,rk4};
将PVP*b4置为{1001,rk2};
被传播的PVP*b4仍然见不到任一开放终结;
EAI*b4保持为0;
PVP*b5不改变,因为它是一个退出终结;
PVP*b6{10011,rk6}看见*b3和*b4,而后者当前的PVP{1001,rk2}能看见PVP*b6;
将PVP*b6置为{1001,rk2};
被传播的PVP*b6仍然见不到任一被开放的终结;
EAI*b6保持为0;
PVP*b7{10,rk7}能看见从*b1到*b6的终结,而它们中任何一个都看不见PVP*b7;
PVP*b7不改变;
PVP*b7置为{10,rk7}可看见开放终结(1000和1010);
开放*b7:将EAI*b7置为1;
在一些过程中(参看图10(B)),在最终置*n的PVP之前,检查终结*i,其中*i被*n的幻像传播,因为*n的PVP又可能被其它终结的幻像升级,如此等等。
因此,确信进行了所有可能的PVP和EAI的升级的唯一途径是再次重复依从*b1到*bn的顺序检查所有终结的步骤(A)。如果在最后一遍中未进行任何升级,就结束PVP和EAI升级的过程。
在最坏情况下,要求经历终结(即执行步骤(A))的次数等于主分枝NB的数目,因为每一遍将至少最终设置一个终结的PVP和EAI。(在我们的示例中,所有升级是在一遍中进行的,第二遍经过*b1至*b7将不改变任何PVP和EAI)。
因此,我们看见:终结*b2、*b3和*b4的EAI是0,这些终结是封闭的。
终结*b2、*b3、*b4构成一封闭区(数据独立无终止循环)。终结*b6也是一封闭的,其重绕入口在所述的封闭区[*b2-*b4]内。
虚线(a)代表项/1{10,rk1}的幻像域。这一项是*b1的PVP。这意味着主分枝b=1的任一单元能访问{10,rk1}幻像内的任一单元。
(Si)的访问域由虚线(a)表示。
虚线(b)代表项/2{1001,rk2}的幻像域。该项是*b2、*b7、*b4和*b6的PVP。这意味着,主分枝MB2、MB3、MB4和MB6的任一单元可访问{1001,rk2}幻像内的任一单元。
根据我们的定义,一过程单元的一访问域是该单元相继拥有的所有幻像的组合。
因此Sj的一访问域是虚线(c)和(b)所表示的域的组合,因为虚线(c)是Sj的幻像,而虚线(b)是从Sj所看见的*b6的幻像。
在图9中我们看见(Si)可访问(Sj),而(Sj)不能访问(Si)。
建立从过程单元S1到S2的访问性有两个步骤:
1.如果SA(S2)是SA(S1)的后代
(通过比较二进制地址(BA)建立,如果BA相同,则通过比较K-座标建立)则
S2可为S1访问;
2.如果步骤1不成立,则
如果SA(S2)是从S1能看见的任一终结的PVP的后代,则
S2可为S1访问;
见图9示例:检查属性(BA,RBA,PVP),它们是为每一终结建立的,我们可以确定下列情况:
a:Si看不见Sj,因为从100看不见101;然而Si可访问Sj,因为从Si看见的一个终结通过其PVP{10,rk1}能看见Sj,因为101是10的后代;
b:Sj看不见Si,因为100不是101的一个后代;从Sj看见的终结是BA分别为1010和1011的终结;终结1010无RBA和PVP,因为它是一退出终结;终结1011有PVP{1001,rk1},它也不能看见100。因此Sj不能访问Si。
3.定义计算目标过程“正确性”和确定目标过程内的“不确定性”的XPD—机的原则,这种不确定性是目标过程中由于有错或系统需求变化而要修改的位置的不确定性。
图11示出了用于任一计算机软件过程的原则。从这里我们看到,从起始有三类过程错误。这三类错误包括所有可能的过程错误。
第一类(a)是在过程设计期间引进的。其原因是对过程说明的错误理解,或者在设计从预期输入产生预期输出的步骤期间引入的错误。这些是过程算法中的错误。
第二类(c)是在实现设计期间引入的错误。它们是在将设计的算法编码成由编译器编程语言能理解的程序时引入的错误。这些是“逻辑”编码错误。注意,那些能为编译器最后定位的语法错误这里并不计为XPD机地址“逻辑”错误,它们在被编译器检查后,就在代码中表现出来。
在目标过程执行期间,在其测试或生产期间,存在有非法的但并不是预料的输入组合,因此,没有为过程算法所考虑和捕获。我们可以说,这类错误在于输入,即目标过程的外部。它们是输入错误(i)。
图11的目的是示出所有这些错误存在于实现了的(被编码的)目标过程中,而且在一些情况中,表现为过程预期输出的故障(f)。
在此需要下列定义:
定义P1:用(S)指示一基本过程(程序语句)。
定义P2:单元的“过程地址(PA)”{k,b}
        是该单元在“精减流程图”中或在该过程XPD图中
        的位置。
(参看图5(A)和图4),PA由两个座标K和b定义。该过程内的每一语句(S)有其自己的PA,它由{k,b}计算出。
定义P3:“本地时刻”{P}
         是在过程执行内语句(S)当前出现(表现)的一个整
         数值;(即P=1,2…n)
XPD机并不处理物理时间,在本发明中,定义时间是考虑到仅仅在控制经过(S)时(S)的功能才影响该过程,使它暂时变成活跃的。因此我们给执行(S)的每一事件一个自身时间参数。
从过程的调用计数本地时刻。
定义P4:“过程事件”{k,b,p}
     是执行(S)的事件。
在XPD机中,它用三个参数{k,b,p}表示,其中{k,b}标识位置(“过程地址”)而{P}标识时刻“本地时刻”。
定义P5:“过程时刻”
         用过程事件{k,b,p}表示。
这就使得这种分析独立于硬件和操作系统,而后者对于执行特定过程单元是依赖于所需要的物理时间。
我们认为,每一基本过程(S)生存于其自己的时间座标{P}之内。从整个过程的观点来看,时间仅可以由“位置”和“时刻”来测量,即“过程地址”{k,b}和“本地时刻”{P}。
比如,我们想在第三次执行图5(A)和图4中的语句A5时引用过程时刻,我们将这一时刻称为{12,2,3}事件。
首先,过程的输出事件是我们构造过程的原因,首先而且通常仅在这些输出事件不正确时,我们才宣称过程存在故障。
一个计算机过程可以有多个输出,比如一个输出到系统终端,其它输出到不同的文件。XPD分析机(XPD AnalyticalEngine)在使用递增系统输出过程同步(ISOPS)映象(IncrementalSystem Output Process Syschronized map)时被自动激活,下面将详细描述。
在特定输出的过程时刻是用指向它的输出事件序列表示的:
…{ki,bi,pi}{kj,bj,pj}{kl,bl,pl}…
从输出观察该过程,我们看到用输出结果…ri rj rl…表示的过程事件,其中rj的过程时刻在ri之后而在rl之前。
图12示出了在过程时刻(t)产生输出事件(r)中的三类可能的故障。
原理1:对于输出有三类而且只有三类过程故障:
(f1)在特定过程时刻输出事件未产生预期结果;
(f2)在特定过程时刻输出事件产生未预料的结果;
(f3)在特定过程时刻预期的输出结果产生错误值。
XPD机接口包括访问这三类故障的命令,而且因此XPD机能访问任一过程故障。
图13在抽象意义上图示了XPD机如何随时间积累过程知识的原理。下面将参考图7、图8、图14、图15、图16、图17详细描述这些知识的积累。
为了说明图13,下列定义是必需的。
定义P6:“正确过程地址”(Correct Poccess Address-CPA)
         如果该过程地址包括作为“正确”事件而执行的单
         元,即在正确的时刻和地点产生正确结果,则该过
         程地址PA定义为“正确”。
定义P7:“未确定过程地址”(Uncertain Process
         Address-UPA)
         在该过程地址包含的单元还没有执行为一“正
         确”事件时,则该过程地址PA是“未确定的”。
在我们定义过程地址为“正确”时,我们定义其内容在特定事件内是正确的。比如,语句A=B+C仅在该过程的特定地点和时刻可能是正确的。
一定要理解的是,在过程地址间的本地时刻的分布是在过程执行期间动态进行的,而且绝对地由下列两个因素确定;
(1)硬编码的过程控制结构和单元内容;
(2)改变输入值组合。
因此,在未改变过程结构和过程单元内容的情况下,是输入值定义了过程中的本地时刻的分布。注意,我们并不强制“正确”过程单元总是正确的。
这就是将要说明的“正确的相对性”,换句话说,(S)相对于下列情况是正确的:
—地点和时间(过程时刻);
—预期输入,和
—预期输出
这种相对性正是缺乏能提供程序正确性的方法的原因。对于将确定出错位置的过程自动化的问题,其唯一答案是不断将这一位置的不确定性减少。
定义P8:“事件正确性”
         如果一输出事件产生“正确的”,即预期的结果,我
         们定义这一事件是“正确的”。这一期望在于过程时
         刻和值。
         如果一过程事件{k,b,p}参与了产生“正确的”输出
         事件的事件链,我们将该过程事件而不是输出事件
         定义为“正确的”。
         即输出事件之外的事件由“正确的”输出事件宣布
         为“正确的”。
事件可以由多于一个的输出事件宣布为正确的。比如,e1 e2e3 e4 e5 e6 e7代表一过程事件的一个序列,其中e7是正确输出事件,e1和e3是输入事件,而e1、e2、e3、e4和e6与产生e7的值有关。这时我们说从e1到e7除e5之外都是正确的。
事件e5也可以由一些其它输出事件定义为正确的,(在其计算链中产生e5),但是直到其正确性是未确定之前。
通过下述关联性可以很容易理解过程单元“正确性的”定义:比如,一计算机主板与一编码过程有关,而在该主板上的每一集成电路(IC)与编码的基本过程有关,比如程序语句。如果IC没有缺陷而且放在正确的槽内,假定该IC对于先前被测试的输入信号组合参与产生一正确结果,则在将来对于同一输入组合将参与产生同样的正确结果。由于该IC被放在计算机主板上的“正确”位置以及对于“正确的”输入组合有可能产生“正确”结果,因此该IC有可能被定义为“正确”。
原理2:过程功能的“正确性”不依赖于其“最优”实现方式。
原理3:对以前被定义为正确的过程进行优化将不破坏其由XP D机所定义的正确性。
这方面的一个简单证明就是一等价优化不应该改变过程的最终功能。
定义P9:“算法空间”
         是由过程地址{ki,bi}组合成的空间。
参照图5和图4,重要的一点是要注意到在不改变过程结构的条件下,其算法空间是固定的,并由目标过程的XPD图的两维-MK和NB限制。
在图5和图4中,表示示例过程的XPD图和精减流程图的维(MK,NB)是(14,5);
定义P10:“正确算法空间”
         是由目前定义为CPA的PA组成的空间。
定义P11:“不确定算法空间”
         是由目前定义为UPA的PA组成的空间。
我们使用术语“目前定义的”,是因为XPD机具有两方面的能力,宣布和撤销事件和PA的正确性。当在先前被认为是正确的过程输出中认识到故障时,这种部分“失去先前建立的知识”是不可避免的。
定义P12:“事件定义空间”
          对于事件(e),其事件定义空间由(e)的“祖先”事
          件的PA构成。
定义P13:“祖先事件”,“后代事件”
          如果事件e1通过下述方式之一参与产生事件e2,
          则
          e1是e2的一个“祖先”,而e2是e1的“后代”;
          -参与产生e2的值(值祖先事件);或
          -参与产生用于在通向e2后路径上的一条件控制
          事件的一个参数(控制祖先事件)。
见图14:e(a)是在例中所示的e(a)下面及其分枝内的事件的后代;
e(d)是e(i)、e(j)、e(k)、e(l)、e(m)以及为e(j)祖先的事件的一个后代;
e(b)是e(f)和e(g)的最近后代;
e(f)和e(g)是e(b)最近祖先;
见图13:该图的目的仅在于抽象地示出过程的不确定性是如何随时间而减少以及错误的位置如何随着时间而确定。该图有助于从总的方面理解XPD机。对于XPD机的更详细说明将在下面给出。
在这张图4有4个目标,从左到右它们是:
输入空间—输入参数的所有可能组合;即,如果一过程使用4
          个输入参数,则该过程的输入空间是一4维空
          间,
不确定算法空间;
正确算法空间;
预期输出空间—在输出被检查时预期的输出结果的组合。
t0、t1、t2、t3代表不同的过程时刻,其中t0是在过程的开始,这时还没有输出产生,而在t1、t2、t3则不断地积累过程输出。
假设在过程时刻t3发现第一个故障。该图显示出,在使用不确定减少的XPD机方法时,在过程时刻t3与造成该故障的错误的位置有关的不确定区域将小于在过程时刻t2与所产生的故障有关的不确定区域,如此等等。
随着目标过程的执行,真正的输入充填到输入空间,而真正的输出充填到输出空间。
随着输出结果的累积,用进一步描述的方法所建立的XPD机扩展正确算法空间并且减少不确定的算法空间。之所以如此,是因为两者之和等于该目标过程在编码时所定义的算法空间,在目标过程不改变时其保持不变。
我们声明下列情况在由XPD机分析的目标过程向前执行期间是正确的:
a:随着正确算法空间的增加,不确定算法空间持续减少;
b:任一过程输出事件的事件定义空间是有限的;其限制是该过程的整个算法空间。
因此在目标过程的向前执行期间,事件定义空间的持续的越来越少的部分位于不确定算法空间的区域内。
参看图13,如果d(e2)在过程时刻t2是一非预期输出结果的事件定义空间,而d(e3)是另一非预期输出结果的事件定义空间,则在过程时刻t2和t1的错误位置不确定区域分别用d(e2)和d(e3)(它们用“∥”示出)表示。
在过程时刻t3的错误位置不确定区域比在过程时刻t2的小。
虽然一事件定义空间有可能随着目标过程的向前执行而增加,但XPD机容许不断减少错误位置不确定区域。
XPD机分析的结果与我们的正确过程地址(Correct ProcessAddress-CPA)的定义有关,它既时间敏感,而且也输出结果期望敏感。确定错误位置或确定要求修改位置的XPD机的原则:
造成一输出结果的故障的错误或由于有了新的系统需求而需要修改的地点位于输出结果事件定义空间部分中,它们存在于不确定算法空间区域。
在我们谈及错误位置局限于数个UPA时,我们是指所允许的修改在所提到的UPA内。否则,必须通过扩展算法空间,即建立新的PA来建立新的事件定义空间。因此,过程不确定性的定义为目前过程的前期构造建立了基础,即自动的早期程序开发的基础。这意味着,对于XPD机,有可能在过程维护和早期程序开发期间不取消和破坏其“正确”的工作而自动地确定在已有过程上所建立的区域。
比如,假设取在12个过程地址上发生的50个事件以建立输出事件W(k,b,p)。再假设其中45个事件发生在10个过程地址,它们已知是正确的。那么与创建W(k,b,p)有关,有5个事件发生在两个不确定过程地址。
如果W(k,b,p)是正确的(预期的),则这5个事件将被XPD机置为正确(被批准)。这两个语句将升级到“正确的基本过程”状态,它们的过程地址将升级到CPA状态。
如果W(k,b,p)是一不正确(未预计)的结果,那么错误位置的不确定区域将是这两个PA。这意味着所预计的结果可以通过修改这两条语句或为W(k,b,p)建立一新的定义空间。4.定义XPD机的目标过程知识传播(知识归纳)的原则。
目标过程的“知识传播”或“知识归纳”是一个导致正确算法空间扩展的过程。
在XPD目标集中的单元A、L、D、E、X、*、+、C、!、/、R、=、S和W之间的关系是这样的,“被批准的”W单元执行事件有能力去激活第二过程链。这些第二过程将“批准”与产生“被批准的”W-事件有关的那些XPD图单元的执行事件。
定义K1:事件“批准”
        是一由XPD分析机证实事件“正确性”的过程,其
        中在P8中定义了事件正确性。
定义K2:“控制事件”
        是根据XPD图和精减流程图明确地(“无条件控制
        事件”)或潜在地(“条件控制事件”)改变过程向下
        进行的方向的事件。
定义K3:“无条件控制事件”
        是重绕或退出终结{*,+,C,R,=}的执行事件。
定义K4:“条件控制事件”
         是L单元的执行事件或D单元的循环退出条件的
         计算事件。
根据XPD图和精减流程图,条件控制事件的肯定解将产生向右的控制转移,而条件控制事件的否定解将导致控制向下继续。
定义K5:“数据操纵事件”
        是XPD目标集的A或E或D单元的算术部分的
        执行事件。
定义K6:“初始数据操纵事件”
        是E-事件、数据初始化的A-事件或循环索引初
        始化的D-事件之一。
定义K7:“第二数据操纵事件”
        是数据操纵事件而非初始数据操纵事件。
XPD机通过建立ACB分析计算库允许积累关于什么事件构成“正确”过程执行的知识。
隐藏在ACB之后的基本原则是必须保存“正确”执行事件的知识。
“正确性”被理解为对于“正确的”输入事件的条件有可能产生在地点、时间和值事件的“正确”。因此分析计算库允许保存正确执行的可能。
建立分析计算库是这一原则的实现,而我们相信对于任何过程它都是适用的:在目标过程对于正确的输入数据组合产生“正确的”输出事件时,必须保存这些事件定义空间的知识,下列输出事件可以使用,但不能改变已经被批准的结果事件(W-事件)的事件定义空间,而且因此将不改变先前的正确目标过程执行。
定义K8:关于基本过程(S)的一个基本“知识”
        是在批准其一执行事件时得到的。
因此,积累关于基本过程(S)的“知识”意味着在其不同执行事件内积累关于(S)“正确性”或不确定性的信息。
因此基本过程(S)的一个基本“知识”由下列各部分组成:
a—(S)内容正确性知识;
b—过程时刻(过程位置和本地时刻)的知识,其中一个(S)执行事件构成或不构成一个“正确”事件。
定义K9:“基本知识传播”或“基本知识归纳”
我们所知道的事实:一个被批准事件的内容和过程时刻,使得我们通过自动地确定和分析“祖先”事件直至回到“知识传播终结事件”而将这一事件的“基本知识”传播进不同的过程地址中。
定义K10:“知识传播终结”事件(KP终结)
         是下列两类事件之一:
         1)在目标过程内没有祖先的事件,即初始数据操
         作事件。
         2)先前被批准的事件。
先前被批准的事件在目标过程向前执行期间平衡知识传播的过程以及防止随着祖先事件的积累该过程变得日益复杂。一旦“知识传播过程”遇到一先前被批准的事件,我们可以相信所有其祖先事件先前也已批准。
下面对目标过程的“不确定性”进行计算的描述,是与这里所描述的“知识归纳”过程相反的过程,即“知识演绎”过程,同一个“知识传播”终结将成为“不确定终结”。
见图14:在该示例中,有两个W-事件e(a)和e(n),它们都有一些祖先。W-事件是在过程执行方向上被批准的,图14中示为-->。对于两个W-事件中的任一个,只示出了事件定义空间的一部分。
*e代表一个“KP终结”事件,这是一个初始数据操纵事件,#*e代表一个“KP终结”事件,这是一个先前被批准的事件。
在这一例子中,W-事件e(a)的值是从三个参数中计算出的,而这三个参数值又是由下列事件e(b)、e(c)和e(d)产生的。
e(b)的值是从两个参数计算出的,而这两个参数值又是由事件e(f)和e(g)产生;
事件e(f)没有任何祖先,因为它是一个初始数据操纵事件,而且因此是一KP终结。
事件e(g)是先前被批准的,因此也是一KP终结。
我们不试图确定KP终结的祖先,因此它们或是不存在,如e(f)的情况,或先前已被批准如e(g)的情况。这是“被终止的归纳”原则的基础。
由于过程执行方向是从W-事件e(a)的向W-事件e(n),在从W-事件e(n)传播基本知识的过程中事件e(i)成为一个KP终结,这较晚发生,因为在从e(a)进行知识传播期间e(i)及其祖先已被批准。知识传播的规则
批准一个事件的过程产生批准其最近祖先的一个第二过程,除非
a)其最近祖先已被批准,或
b)没有最近祖先(在该事件是初始数据操纵事件情况下)。
因此,基本知识的传播,即“知识归纳”就成为一个链式反应,其扩展由知识传播终结所控制。
参照图17示例:过程时刻(k0,b0,p0)的事件(e0)是第一个被批准的(s0)执行事件,它计算(y)的值,因为语句s0的PA的状态为UPA。因此s0的PA被升级为CPA。
其最近祖先是与计算(y)值有关的参数x1、x2、x3的计算事件。设紧接在事件(k0,b0,t0)之前的x1和x2的值是在过程时刻(k1,b1,p1)和(k2,b2,p2)产生的。再假设它们是先前被批准的,因此,我们将它们当作KP终结,而且不检查它们的祖先。
假设紧接在(k0,b0,p0)之前的计算x3的事件是(k3,b3,p3),而且先前也没有被批准,状态CPA仅意味着这一PA执行的一些其它事件是先前被批准的。我们将继续检查其最近祖先,即紧接在过程时刻(k3,b3,p3)之前的计算x3参数的事件,并且不断进行下去。
由被批准的W-事件所激活的知识传播是沿着与目标过程的执行相反的方向进行的。
定义K11:一事件的“直接拥有者”
         如果e2批准e1,则e2拥有e1。
在图14中,e(i)被e(d)而不被e(0)所拥有。
定义K12:一个事件的“W-拥有者”
         每一被批准的事件都有W-拥有者,它是(e)的
         W-事件后代,它产生批准(e)的基本知识传播
         链。
每一事件仅有一个W-拥有者事件而且仅有一个直接拥有者事件,其中W-拥有者事件也可以是该事件的直接拥有者。
在图14中,e(i)的W-拥有者是e(a)而不是e(n)。W-事件e(a)是e(b)、e(f)、e(d)、e(i)、e(k)、e(m)、e(l)的W-拥有者。
图15示出,在批准一事件(e)时,就检查其PA状态,如果其状态是UPA(不确定过程地址),就将之升级为CPA(正确过程地址)。过程时刻{kW,bW,pW}的(e)的W-拥有者事件成为负责升级该PA状态的那一CPA的一个属性。
图16示出了在不同过程时刻t1、t2、t3、t4、t5的过程地址(k,b)。过程时刻t1、t2、t3、t4和t5指(k,b)单元的一些执行事件。
从时刻t1观察PA(k,b)发现PA(k,b)在(k,b,0)状态,即还未产生任何(k,b)执行事件。
在过程时刻t2,发现PA(k,b)处于状态(k,b,2),即(k,b)已经历了两次其执行事件。它们还都未被批准,PA(k,b)为UPA状态。
在时刻t3,PA(k,b)在(k,b,3)状态,即有3个(k,b)执行事件:(k,b,1),(k,b,2)和(k,b,3),而且事件(k,b,2)被批准了。(k,b)状态被从UPA升级至CPA,其W-拥有者属性是(k,b,2)的W-拥有者。
在进一步批准其它(k,b)执行事件期间,W-拥有者属性保持不变,仍是(k,b,2)的W-拥有者。
在所接受的输出结果发生变化期间,CPA的W-拥有者属性使目标过程的知识保持最新。
当一个先前被批准的W-事件不再被批准时,该目标过程知识就下降了,其下降程度由在目标过程时刻的不被批准的W-拥有者事件的位置所确定。我们将XPD机的这一过程称作“丧失知识”。
5.建立目标过程的XPD模型;
定义分析计算库(ACB);
建立目标过程的XPD资源库(XPD Repository)建立目标过程的XPD模型:
参见图17,XPD模型是以基于三维结构从XPD图中建立起来的,即在所提到的三维基础上加进更多的维,其中第三维是建立在二维XPD图的基础之上。
第三维表现为一个结构,它包括过程地址的属性。根据基本过程类型{A,L,D,W,E,*,/,等},将不同类型的属性赋给不同的过程地址(PA),即不同的{k,b}座标,它们存贮在这一过程地址之下。
对应于可执行语句的XPD模型的每一单元,包括三个属性,它们是
a)目标过程内对应语句的记录号;
b)XPD资源库内对应语句的记录号;以及
c)X-Source码内对应语句的记录号。
这样,就建立了目标过程、XPD模型、XPD资源库以及X-Source码之间的引用。
对于每一可执行过程单元,XPD保持一个本地时刻属性。
在模型中为XPD图每一单元提供一个二进制地址(BA)属性。
为所有过程终结提供返回二进制地址(RBA)属性。
对应于重绕终结(*)、(C)或(+)的PA拥有Rewind ID(ID/)属性。
ID作为过程地址{k,b}的另一种表示。每一{k,b}对可以用一整数值ID表示,它是在从(K=1,b=1)至(k=MK,b=NB)经过XPD图空间以及首先递增K参数时,该PA在XPD图空间上的次序。
ID=(b-1)*MK+K,其中MK是XPD图的K的最大值。因此在图5(A)中,图单元*1,即PA(9,1),其ID=9,图单元A4,即PA(9,2)其ID=23,因为MK=14。
下面是为过程终结,即{*|C|+|R|=}建立XPD模型的第三维的结构的实现方式的示例,接下来是对应于目标过程的可执行单元,即{A|L|D|E|W|X}和改变控制语句{S}的结构的实现方式的示例。
这些结构以及其成员的大小是依赖于具体实现的,在这些例子中只示出了实现XPD机所必需的结构成员。|*|ind|ID/|loc.time|BA|targ.r.#| Repos.r.#|X-Source r.#|RBA|…{C}{+}|R| | |loc.time|BA|targ.r.#| | X-Source r.#| |…{=}
退出终结不具有重绕终结的下列属性:{ind,ID/,Repos.r.#}
ind是在XPD构架与XPD图中对应的过程单元的索引。
对应于图5(A)的PA(14,3)的XPD模型单元:|*|2|6|loc.time|11|targ.r.#|Repos.r.#|X-source r.#|2|…|                                      |
表示为二进制1011               表示为二进制10
其本地时刻将在目标过程执行时填上。
包括过程单元A、L、D、E的PA具有属性“ACB指针”,其中ACB代表分析计算库。|A|ind|ACB-Ptr|loc.time|BA|targ.r.#| Repos.r.#|X-Source r.#|{L}{D}{E}{W}{X}{S}
另外,L和D单元具有一个属性,它定义了表示根据L或D
的肯定解(高期望解)增量b-座标的值。
…|转移期望|…
PA的ACB-Ptr属性是一指向对应的ACB结构的指针,该ACB结构包括关于当前过程单元的“被批准”的执行事件的历史的信息。定义分析计算库(ACB)
在本发明中,有许多内部存贮器的或外部存贮器的结构,每一个对应于目标过程的一个不同单元,并包括将当前单元行为的已知状态建立为随时间的“被批准”或“不确定”的信息,我们将这些结构的集合称为目标过程的分析计算库(Analyzed CalculationBase-ACB)
每一ACB结构对应目标过程的一可执行PA,同时可以实现为一个内部变量结构或一个文件。
唯一规则是:ACB结构的任一成员或元素代表着对应于该结构的目标过程单元的一个执行事件。在该结构内的位置代表该事件的本地时刻。
ACB结构元素的值可设置为两状态之一,“on”与“off”,其中“on”对应被批准的事件,而“off”对应还尚未被批准(即不确定)的事件。
参看图19:
在我们的实现中,ACB-ptr指向被分成两部分的一个二进制文件。第一部分是控制域,它保存两类信息:下一参数字(NextParameter Word-NPW)和不确定偏移字(UncertaintyDisplacement Word-UDW)。第二部分包括信息域,它保存“知识状态”位。建立这一AC B-ptr的单元的每一执行事件由信息域中的一位表示,即“知识状态”位。相对于该文件信息域开始处的位的位置对应该事件的本地时刻,根据该事件“正确性”状态的“知识”的当前状态将该位置为“on”或“off”。
可以使用不同的文件压缩类型。在我们的实现中UDW保存处于状态0的第一位的相对位移。在批准任一单元执行事件之前,UDW等于0,信息域的第一位对应于第一单元执行事件,而且不进行信息域压缩。
在一定时间之后,比如将UDW置为2000,它表示该信息域的第一位位置对应本地时刻2001,已批准了该单元的前2000个执行事件。通过将2000位位置向左移动将对应于所提到的ACB指针的二进制文件进行压缩,因为我们知道前2000个位位置填上了1。
在XPD机分析当前目标过程单元的“知识归纳”或“丧失知识”过程中,UDW的值可能在两个方向上改变。这可通过将相应ACB结构的信息域内的位进行移动而进行。
比如,在“知识归纳”过程中,在D1 ACB信息域的第一位和第4位的位置的状态改变为“on”时,D1的UDW将置为十进制的7,其信息域位将向左移动7个位置。
输入语句{E}的每一参数和Call语句{X}的每一参数用其自己的A CB结构表示。
相应模型单元的ACB-ptr指向对于第一个参数的ACB结构。如果下一参数存在的话,该结构的下一参数字(NPW)将指向下一参数的AC B结构,如此等等。否则,NPW为空。
包含5个可执行单元{A1,A2,D1,E1,X1}的目标过程的ACB看上去如图19所示,其中E1有两个输入参数,X1有三个调用参数。建立目标过程的XPD资源库。
参见图7,在建立XPD图(或者XPD构架,如果实现了这一步骤)的同时建立目标过程的XPD资源库。对应于一条可执行语句(XPD目标集的A、L、D、E、W、X、S单元)的主分枝的每一单元存贮在XPD资源库文件中。
XPD资源库内所包含的代码容量小于对应的目标过程源代码。之所以如此,是因为XPD资源库并不包含任一过程控制语句,控制语句并不涉及数据操纵或验证,其中我们通过过程控制语句理解过程语句,即XPD资源库不包含无条件分枝,停止(stop)、返回(return)、然后(then)、否则(else)、endif等等。
在利用前面提到的“下一最小期望”原则从目标过程中抽取其算法时,其控制结构保存在XPD图和XPD模型的结构中,而后者是在其基础上建立的(图7)。
因此,XPD资源库包含所有的过程单元,但不包括该过程控制的定义,后者由XPD模型保存。
  举例1:对于目标过程语句:if(d<10)go to label

         资源库将包含:if(d<10)

  举例2:对于目标过程语句:if(a.gt.b)then

                               c=d

                           else

                               e=f(g)
				
				<dp n="d65"/>
                      endif

                     return

  资源库将包含:    if(a.gt.b)

                    c=d

                    e=f(g)
在XPD模型内的对应过程地址{k,b}的属性中引用XPD资源库的每一语句。比如,如果资源库被保存为RRDS(相对记录数据集—Relative Record Data Set)则相应的引用属性必须包含该资源库内相应语句的相对记录号。请参看在段落“建立目标过程的XPD模型”中提到的资源库记录号(Repos.r.#)。6.建立X-Source码;
减少捕捉目标过程执行历史的开销;
通过递增系统输出过程同步(ISOPS)映象的方式建立用户-
XPD机-目标过程接口;
建立系统输入过程同步(SIPS)映象;建立X-Source码;
为了用XPD机分析以传统目标码执行的目标过程,我们从程序的目标系统的每一目标过程(主程序、子程序或函数)的XPD模型和XPD资源库建立X-Source码。
建立X-Source码的目的是在目标过程和积累目标过程行为的知识的X PD机过程之间提供同步。除了所提供的同步信号外,X-Source码有可能不同于原始目标过程代码,其不同之处在于X-Source码不包括“死的”代码,即不可到达的代码,以及如果第二次不是根据XPD模型规则构造的,则有可能根据原始目标源码重建X-Source码,即,比如有另外的GO TO的情况下。
参看图7与8:
X-Source是由X-Source产生器(图7中17)根据XPD模型(图7中8)和XPD资源库(图7中10)而产生的,它又通过同步信号(4)“运行”XPD模型,同步信号(4)被发送XPD接口,又通过信号(6)激活分析机,后者通过命令“运行”XPD模型。
由于X-Source码是从XPD模型和XPD资源库中建立的,而后两者又是从目标过程源代码中建立的,因此在目标过程。XPD模型和X-Source码之间功能等价。
为了建立X-Source,需要进行:
—从XPD资源库(图7中10)中提取出用于X-Source的每
一可执行语句的内容;
—从XPD模型(图7中8)中构造控制语句;
—提供目标—模型同步信号;
(参见图20和21的示例)
我们将就“延迟顺序”模型同步的示例对在目标过程和XPD分析机之间建立同步接口进行解释,其中的延迟顺序模型同步将在以下内容中讨论。
在此通过CALL语句(图8中4)产生同步信号,该信号向XPD接口(XPDI)(11)发送三个参数(k,b,m),其中{k,b}是定义该过程地址的对偶,而(m)定义该目标过程的模型,即它定义当前执行哪一目标过程。
该接口可以由两个参数而不是三个参数来实现:{IDT,m},其中IDT是单元的过程地址的另一种表示,是用先前介绍的公式:
IDT=(b-1)*MK+K;(“ID的公式”)
其中MK是目标过程模型的K座标最大值。以相应终结的(k,b)座标计算出的。减少捕捉目标过程执行历史的开销:
在每一表示过程终结(定义F3)的前面增加终结同步调用。
图4示例:假设为一过程建立X-Source,该过程在程序系统中用模型m=2标识,在从分枝b=1的终结表示GO TO终结(a)时:
为    call XPDI(9,1,2)
      go to′LABLE a′
而在从分枝b=5的终结表示GO TO终结(a)时:
为:      call XPDI(10,5,2)
          go to′LABLE a′
在不同的编程语言中“LABLE a”的文法不同。这种记录过程执行历史的方法代表最小开销(最小使用),关于这一点下面将进行解释。
在XPDI接收到一个调用,其PA被XPDI标识为一个终结时,它将这一PA与{m}一起记录在系统执行历史文件中(图8中3),其中{m}是先前描述的模型标识符。
在我们的终结的同步实现方式中,一终结{k,b}座标是用它们的IDT表示的。
参照图8,XPD接口(XPDI)模块用前述的“ID公式”将ID T翻译为(k,b)对。
通过定位在模型中的座标(k,b),XPDI模块标识出哪一终结发送该同步信号。
对于任一给定的目标过程模型,为了重建目标过程行为,被执行的过程终结的顺序是充分而且必要(最小开销)信息。
说明:在我们的模型中,在START(开始)和特定终结之间或在前一终结的一Rewind ID的一个项与下一终结之间只有一遍。在建立一模型时,Rewind ID(ID/)存贮为该XPD模型的每一终结的一个属性。
在XPDI接收到关于下一被执行终结的信息时,它命令分析机(Analytical Engine)再次跟踪目标过程内当前被执行的路径部分,即从前面被执行终结的Rewind ID(或者如果自进入该过程以来当前被执行终结是第一个,则是自START)至当前终结。每一遍经过PA都表示其执行事件,而且将本地时刻属性(P)增加1。
比如,假设在执行X-Source码(它是从图4的XPD图中建立的)期间,XPDI接收到下列信号:45,9,55。
它们是下列PA:{14,3},{9,1}{10,4}的IDT,告诉我们是沿下列路径执行目标过程:
A1 A2 L1(-)A3 L2(+)A4 X1 D1(+)A6 W1A3 L2(-)A2 L1(+)W2 E1 L3(-)A7 STOP
为了表示同一终结的重复,这常出现在DO FOR WHILE等循环中,我们采用一负数。比如27-5 42意味着在从DO循环中退出之前该DO循环D1 6次(到达IDT=27的终结)取否定判断。
在前一示例中,用3个同步信号42、9、52代表该过程行为历史的29个事件。可以选择下列表示过程历史的方法之一:
——在每一被执行的单元之后发送该同步信号,就如一些调
    试程序包所做的,对于我们的例子,要建立29个信号;
    或
——记录由所经过的LC及它们的解所组成的对{L1,0}
    {L2,1}{D1,1}{L2,0}{L1,1}{L3,0},这些是12个
    信号。
我们已经证明,通过记录被执行的过程终结的顺序而记录该过程的执行历史是关于该目标过程动态性的必要而且充分的信息。为了使用传统目标码处理方法捕捉目标过程的动态特点,它实现了在同步信号数和建立插入数上的所需的最小开销。正如我们将进一步展示的,在使用XPD目标码时这一建立不是必须的。通过递增系统输出过程同步(ISOPS)映象方式建立用户-XPD机-目标过程接口。
下面描述通过XPD机在用户和目标过程间的一个接口。正如本发明所确信的,该接口是为了分析目标过程最可能高的接口层次。XPD机的分析是由对系统输出的引用而激活的。
我们编写程序的原因是要得到系统输出结果。也正是系统结果是我们修改程序的原因。在我们试着去理解一个现有过程或试着建立一个新的过程时,也正是系统输出结果(已有或还未有)也是我们在心中所要考虑的。对于系统结果的接受、不接受或引用是进行程序分析或程序构造的一个十分特别的“原因”。
这里所提出的技术使得可以向XPD分析机通知这一“原因”,作以激活这一分析的一个途径,从而进一步消除中间步骤。更进一步描述的方法允许建立用户与XPD分析机之间的一个接口,该XPD分析机用该系统结果作为一引用点,正如我们人类为了激活我们的认识分析直觉上所做的。
递增系统输出过程同步映象(ISOPS映象)是在输出信号和产生这些信号的过程事件之间的一个引用工具。
下面是一示例的ISOPS映象格式。它包括五个类型的项{1.2.3.4.5}
项1:通过{k,b,p,m}过程参数定义W-事件;
项2:在系统输出屏幕上定义当前输出信号的开始处的位置
     {Sl,Sc}(屏幕行,屏幕列);
项3:在系统输出屏幕{l1,c1,l2,c2}上定义一长方形,它是一
     包含用W-事件执行所改变的屏幕区域的最小的长方
     形;
项4:包含一个整数信息,它是对应项5距包含该被改变的图
     象信息(由项5组合的文件)的文件的开始处的偏移量。
项5:包含对应于项3的区域的系统输出缓冲区的实际部分。
由于项5是屏幕缓冲区的被改变区域的图象,是一个大小可变的记录,因此我们将之保存在一个单独的文件—递增图象监视器(图8上的IIM文件)。其它4个ISOPS映象参数,分别对应于项1、项2、项3和项4,都保存在ISOPS映象参数文件中(图8中的ISOPS Pars.)。ISOPS参数文件和IIM文件的组合代表系统结果历史(图8中的2和图7中的2)。
ISOPS映象示例格式:
1.    2.             3.        4.            5.
W-    屏幕位置       所改变    在图象监视    递增图象
事件                 的屏幕    器文件中      监视器
                     区域      的偏移量
\——ISOPS参数文件  ——————/\—IIM文件_/
{k,b,p,m}{sl,sc}{l1,c1,l2,c2}DDDDDD′ xxxxxxxxxxxxxxxxx′
{k,b,p,m){sl,sc}{l1,cl,l2,c2}DDDDDD′ xxxxxxx′
{k,b,p,m}{sl,sc}{l1,c1,l2,c2)DDDDDD′ xxxxxxxxxxxxxx′
{k,b,p,m}{sl,sc}{l1,c1,l2,c2}DDDDDD′ xxxxxxx′
{k,b,p,m}{sl,sc}{l1,c1,l2,c2}DDDDDD′ xxxxxxxxxxx′
下面描述用于建立ISOPS映象的值。
项1.描述W-事件{k,b,p,m}是如下而获得的:{k,b,m}是同步参数(图8上的4),由目标过程送往XPDI(图8上的11);XPDI从模型(8)(对应于{m})获得{P},作为对应于这一{k,b}过程地址的过程单元结构的一个当前时间属性。这一时间属性被分析机(9)保持为当前值,将在下面段落对此进行描述。
项2.在每一系统输出信号的屏幕位置(行与列){Sl,Sc}是如下获得的:对于第一个W-事件项{Sl,Sc}项等于{1,1}。在XPDI接收了由W-事件发送的一同步信号时,XPDI获得当前屏幕位置,它在W-事件执行后发生作用。保存这一屏幕位置用作下一W-事件的{Sl,Sc}项。
项3.是可以在屏幕上给出的最小长方形,它包括从前一W-事件的过程时刻改变的屏幕区域。这一长方形是通过将前一屏幕图象(图8中的15)(它是在前一W-事件之后的过程时刻保存的)与当前系统输出屏幕缓冲区(图8中的5)进行比较而由递增图象提取器/构造器(Incremental Image Extractor/Constructor(图8中的12)定义的。
项4.是递增图象监视器的当前项在IIM文件中的相对字节位置,其位置由递增图象提取器/构造器(IIE/C)(图8中的12)所知晓。IIE/C知道当前位置,因为它知道IIM文件的每一项的字节长度。
项5.是IIM文件的当前项,它是对应于项3的长方形的系统输出缓冲区那部分。建立系统输入过程同步(SIPS)映象:
建立SIPS映象是为了能够进入分析或重放在某一特定过程时刻对系统所作的特定输入。SIPS映象保存在SYSIN历史文件(图8中的1)和(图7中的1)上。对于每一系统输入事件,在SYSIN历史文件中建立一项。该项包括两个记录,一个是实际串,另一个是参数集{k,b,p,m},它描述对应于当前输入串的过程时亥{k,b,p}和模型{m}。
XPD接口模块(图8中的11)从同步参数{ide,m}(图8中的4)和一系统输入缓冲区(m)(图8中的9)建立SYSIN历史文件中的项。用ID公式从{ide}中计算出{k,b}。参数{p}是由XPDI从XPDI模型中的当前过程时刻计算出的。
图21是一个{ide,m}同步调用的示例CALL XPDI(21,2),它是在自终结(图20中的E1)的输入之前建立的。一旦目标程序知道了该系统输入,该系统输入就被所建立的下一语句“WRITE(M,002)CH”记录在缓冲区文件(m)(图7中的19),并且以后被XPDI模块再次记录在SYSIN历史文件中。所建立的记录系统输入的语句是通过将I/O动作从“READ”转换为“WRITE”(它指向监视器文件(m))而创建的。
7.目标过程、其XPD模型、XPD资源库和X-Source码示例:
参见图20、21和7:
图21是一示例子程序。图20A是其XPD图,它是建立XPD模型的基础。图20B是XPD资源库(图7中的10),它是由先前描述的图7中的过程18从示例子程序中提取出来的。图21B是X-Source码,它是由X-Source产生器(图7中的17)从图21A示例的XPD图和XPD资源库中建立的。X-Source包括对XPD接口模型(图7中的11)的调用,这些调用是在每一过程终结(定义F3)之前建立的:
       CALL XPDI(6,2)  

       CALL XPDI(14,2)

       CALL XPDI(24,2)

       CALL XPDI(31,2)

       CALL XPDI(35,2)
在每一系统输入信号之前(从一个终结的Ei):
       CALL XPDI(21,2)
以及每一系统输出信号之后:
       CALL XPDI(20,2)
其中6、1 4、24、31和25是相应的终结C2、*1、C1、=和R的idt,20是W1的idw,21是E1的ide,而2是模型ID m,它在我们的例子中碰巧是2。
对于每一独立目标过程(主过程,函数,或子程序),在由图17的过程18提取其模型和资源库期间,模型ID m是一个以递增1的顺序所赋予的一个整数值。
所提到的{idt,m}、{idw,m}和{ide,m}是图8上的同步参数4。
在图20上我们看到,重绕终结项/1的二进制地址BA(1010)在值上大于相应的重绕入口*1的BA(1001)。这仍然不与先前所定义重绕终结将控制返回到过程单元的原则相矛盾,这已在具有较低二进制地址的过程段中表示了,因为该控制真的将要返回到一DO循环的入口(单元D1),它具有较低二进制地址。虽然,根据在一编程语言中实现一个DO循环的规则,这一控制返回还要经过通过DO终结(单元C1)(它将控制返回到D1)的中间步骤。
8.目标过程模型的“伪并行”执行:“延迟顺序”和“延迟并行”XPD模型执行;
通过执行目标过程的XPD模型,根据目标过程的执行路径,我们理解跟踪其XPD图的过程。XPD模型的延迟顺序执行:
“XPD模型的延迟顺序执行”是由CPU实现的,在两个任务之间有一次或多次CPU切换,其中一个任务是该目标过程的“执行段”,而另一个任务是由XPD分析机在该过程的XPD模型上对第一个任务进行建模。将“执行段”定义为位于XPD目标集的下列单元之间的该目标过程的一部分:过程入口,系统输入点(同步{ide,m})和“过程终结”(同步{idt,m})。XPD模型的延迟并行执行:
“XPD模型的延迟并行执行”是由多于一个的CPU实现的,其中目标过程的“执行段”的任务和由XPD进行的对先前被执行的“执行段”进行建模的任务是并行进行的。
同样XPD模型的“伪并行”执行的方法是由过程终结{idt,m}和系统输入{ide,m}的同步信号实现的,但首先,XPD分析机过程的实现是以CALL语句形式进行的,其中目标过程等待控制从XPDI模型返回,其次,并行过程由同步信号激活。将同步信号{ide,m}和{idt,m}设计成使XPD模型“跟得上”目标过程。将同步信号{idw,m}设计成使ISOPS映象“跟得上”目标过程与XPD模型内的过程时刻。
由于来自过程终结的信号表示最小开销的建立,如先前所讨论的,它们也代表最小开销同步信号,以使该模型跟得上目标过程。在系统输入点的同步是方便的,因为在“操作人员思考期间”,目标过程总是要中断的。
9.运行XPD分析机。
建立和传播目标过程内的因果关系分析计算库。
知识归纳。
参见图8,在XPDI(11)接收一个同步信号时,发生下列过程,其中同步信号采取{id,m}或{k,b,m}(图8中的4)的形式。我们假设采取{id,m}形式。根据先前描述的“ID公式”,XPD将{id}翻译成相应模型{m}的{k,b},并知道模型m的MK值:
          b=(id-1)/mk+1
          k=id-(b-1)*mk
过程地址{k,b}将指向过程终结(定义F3)(这时{id}是{idt})或系统输出信号W(这时{id}为{idw}),或自终结(E)的输入(这时id为{ide}),不再有其它可能。
如果XPDI接收到{idt}同步参数,就将该{idt}写进系统执行历史文件中(图8中的3)。
如果同步信号是{ide,m}或{idt,m},XPDI启动XPDI分析机,并出现下列过程:
——XPD分析机将再次从前一同步信号{k,b}点或从入口
    点起跟踪该模型,直至当前同步信号的{k,b},正如先前
    在我们讨论记录过程执行历史的最小开销方式时所描
    述的;
——在经过XPD模型的每一单元期间,其本地时刻属性{p}
    递增1,因而被保持为当前值。
——在遇到的一(Wi)单元是一系统输出时,XPD分析机启
    动“知识归纳”链周期(权利要求9)(见定义K10:“知识
    传播终结”事件(kp终结)和图1 4),其中如果(Wi)有多
    于一个的输出参数,每一周期由一系统输出参数产生。
知识传播终结稳定“知识传播”过程,否则,随着目标过程的向前执行,这一过程就变成越来越长的第二过程链。通过知识归纳过程(见定义K12:一事件的“W-拥有者”和图14,15,16,17)以及先前描述的“知识传播规则”有可能传播正确算法空间以及建立PA的“W-拥有者”事件。
由“知识归纳过程”每次将一个执行事件从“不确定”升级为“正确”,将对应ACB结构的对应位从0升级到1,从而增加ACB的知识(见ACB定义和图19)。
在{ide,m}同步信号期间,XPDI将一{k,b,p,m}记录放入SIPS映象(图8中的1),其中{p}当前被同一同步信号升级,而{k,b}是由前述的“ID公式”从{ide}中获得的。
参见图21B,语句CALL XPDI(21,2):{k,b,p,m}项将变成{5,3,p,2},其中{p}是当前被升级的本地时刻属性,XPDI可从XPD模型中取得它。下面的语句:WRITE(M,002)CH将实际的输入记录放入监视器文件(单元M)(图7中的19)。在下一同步信号期间XPDI将实际输入记录从暂时监视器文件拷贝到系统输入历史文件,然后再到同步参数{k,b,p,m}。
如果同步信号来自系统输出单元{idw,m},XPDI就启动前述的过程以更新ISOPS映象,然后将控制返回到目标过程。在建立ISOPS映象的{k,b,p,m}参数期间,XPDI从XPD模型的对应Wi单元取出本地时刻参数,并将其增1,因为{idw,m}信号并不进行XPD分析机的模型同步过程。
10.通过引用ISOPS映象激活XPD分析机“知识演绎”过程,以便以不断减少的不确定性确定出错位置区域或需修改的地方。
通过四个座标{k,b,p,m}保证从系统输出中能绝对寻址程序系统内的任一事件。从系统输出中不需要参考程序源代码就能够访问和分析系统内的任一事件-有时对于程序用户或编程人员是可视的,代表了我们所发明的接口的原型,这种接口是在分析工具用户与目标过程之间。
“知识演绎”:参见图13,通过前述的XPD分析机的“知识归纳”过程不断减少不确定算法空间。而“知识演绎”过程实现如下:
XPD机的用户查看系统输出,它是由递增图象提取器/构造器从系统结果历史中再次建立的。通过将光标、鼠标或其它指点设备定位,就可激活ISOPS映象的相应{k,b,p,m}参数。
如果对于该XPD机,所引用的系统输出结果被定义为“未预计的”而且因此是“不正确的”,XPD分析机将开始“知识演绎”过程,它是沿着与目标过程执行相反的方向遵循跟踪事件的同一“知识归纳”规则,直至“知识传播终结”,在此情况下,称之为“知识演绎终结”。唯一的差别在于在恢复该过程期间,在ACB结构上不进行任何知识增加,“不确定算法空间”是所查询的输出事件的“事件定义空间”的一部分。不确定算法空间是在至“知识演绎终结”链上的UPA地址的组合。在图13中,该不确定算法空间在过程时刻t3用d(e3)事件定义空间的∥表示出。正如在图13上所看到的,在目标过程的算术空间不变,正确算法空间不断增加的情况下,事件定义空间的不确定部分持续减少。
W-拥有者事件使得在所接受的输出结果有所变化期间能使目标过程的知识保持最新。
在一个先前被批准的W-事件不再被批准时,该目标过程知识就会下降,其下降程度由不被批准的W-拥有者事件在目标过程时刻内的位置所决定。我们将XPD机的这一过程称作“丧失知识”。在图13中,通过下列的讨论,可以理解什么是“丧失知识”:
1.执行目标过程直至过程时刻(t3),它将正确算法空间增加到在过程时刻(t3)所示的程度。(在该图中用符号+表示CPA)
2.稍晚,在过程时刻(t2)用对结果的引用建立一个故障(或修改结果所需要的)。知识的程度(正确算法空间)将降至过程时刻(t2)所示的程度。这是通过对于过程时刻(t2)后出现W-拥有者事件的PA使其状态从CPA变为UPA而得到的。
根据相对于各个预计或者相对于所改变的单个预计或者相对于所改变的系统需求的故障的定义,能够“丧失知识”使得XPD机过程具有灵活性和实用性。
11.解释XPD图和XPD资源库;
参看图20,用XPD图充分表示一目标过程的控制,该图是一二维结构,目标过程的XPD是在其基础上建立的。在跟踪目标过程XPD图执行XPD模型期间通过解释XPD资源库的语句而执行目标过程(图18c)。在该实现中,图7所示的传统目标码代码实现方式中的下列部件将不需要
—X-Source产生器
—X-Source码
—编译和链结
—X-Object码
参见图18c,在执行(语法分析)XPD模型期间,语言解释器(23)解释XPD资源库语句,XPD驱动器(20)将XPD资源库语句从XPD资源库中提出来。来自解释器的信号(24)返回一个代码,它是下列三个值之一:
(a)所执行的XPD资源库语句不是一逻辑语句(不是L或D);
(b)否定执行为逻辑语句(L或D)的XPD资源库语句;
(c)肯定执行为逻辑语句(L或D)的XPD资源库语句;
在语法分析(执行)XPD模型时,XPD驱动器根据返回的代码采取行动。
见图20和图21,在执行XPD模型期间,XPD驱动器将向XPD模型产生同步信号:{idt,m},{ide,m}和{idw,m}。XPDI模块又以伪并行XPD模型执行期间的同样方式激活XPD分析机。其差别在于在伪并行XPD模型执行期间,在XPD模型上“执行段”后跟再次跟踪同一段的过程。相反,在XPD驱动器执行目标过程期间,执行目标过程和执行其XPD模型是由同一过程实现的。
参见图20A,下列信号可以在不同过程时刻以{id,m}格式产生:
            CALL    XPDI(6,2)

            CALL    XPDI(14,2)

            CALL    XPDI(20,2)

            CALL    XPDI(21,2)

            CALL    XPDI(24,2)

            CALL    XPDI(31,2)

            CALL    XPDI(35,2)
或以{k,b,m}格式:
            CALL    XPDI(6,1,2)

            CALL    XPDI(6,2,2)

            CALL    XPDI(4,3,2)

            CALL    XPDI(5,3,2)

            CALL    XPDI(8,3,2)

            CALL    XPDI(7,4,2)

            CALL    XPDI(3,5,2)
在对过程进行解释的情况下,对于目标过程的修改用此方法更易进行,因为不需要再次编译或再次链接。另外,对于目标过程逻辑的修改和对目标过程可执行部件的修改在这里可以分开进行,这也简化了修改的任务。12.XPD目标码和其执行:
将XPD模型作为目标过程目标码的一部分执行;
参看图18A,XPD目标码包括两部分:
1.在XPD模型内由XPD图表示的控制部分;以及
2.由翻译成机器码XPD资源库语句表示的可执行部
分。
在这种实现中,正如在解释XPD图和XPD资源库的情况,在图7中所示的传统目标码实现中的下列部分将是不需要的。
     —X-Source产生器;
     —X-Source码;
     —编译和链接;
     —X-Object码
XPD目标码的执行包括两个过程:
1.XPD驱动器(20)执行XPD模型,即跟踪XPD图。
2.预先翻译成XPD资源库的机器码语句的、不包括任何控
  制指令的机器码片段由过程(23)执行,提交给XPD驱动
  器执行
正如在解释XPD资源库语句的情况,作为执行代码片段的结果XPD驱动器接收一个信号,并在该信号来自逻辑语句(XPD目标码的L或D语句)时取适当的方向。
在执行XPD模型期间,XPD驱动器向XPDI模块产生同步信号:{idt,m},{ide,m}和{idw,m}。XPDI模块又将以在伪并行XPD模块执行期间的同一方式激活XPD分析机。
其差别在于,在伪并行XPD模块执行的“执行段”其后是再次跟踪X PD模型上的同一段。相反,在XPD驱动器执行目标过程期间,目标过程的执行和其XPD模型的执行实际上是由同一过程实现的。
参见图20A,下列信号是在不同过程时刻以{id,m}格式产生的:
        CALL    XPDI(6,2)

        CALL    XPDI(14,2)

        CALL    XPDI(20,2)

        CALL    XPDI(21,2)

        CALL    XPDI(24,2)

        CALL    XPDI(31,2)

        CALL    XPDI(35,2)
或者是以{k,b,m}格式:
        CALL    XPDI(6,1,2)

        CALL    XPDI(6,2,2)

        CALL    XPDI(4,3,2)

        CALL    XPDI(5,3,2)

        CALL    XPDI(8,3,2)

        CALL    XPDI(7,4,2)

        CALL    XPDI(3,5,2)
参见图18B:
将可执行部分地址(Executable Component Address—ECA)属性加进XPD模型的每一可执行单元PA中。ECA是对应于被翻译的XPD资源库语句的机器码片段在XPD目标码的可执行部分文件的偏移量。每一片段后跟语句分隔符字节(StatementSeparator Byte-SSB)。XPD驱动器(图18中的20)从XPD模型(图18A中的8)中读取ECA的值,读对应的机器码片段的值,并将之送到执行XPD目标码的可执行部分的模块(图18A中的23)供执行。
作为监视系统输入的另一不同方法是这样实现的:在图18的模块21将自系统终结的输入翻译成XPD目标码的可执行部分时,它增加另一条语句,该语句将自系统终结的输入动作转变为向监视器缓冲区文件(M)(图18中的19)的输出。
比如在图21B中,READ(*,002)CH后跟WRITE(M,002)CH。
XPD驱动器在选择送往执行过程(23)的下一代码片段期间可以选择激活或不激活这一第二条语句,以控制对系统输入的监视。13再次编译与链接XPD目标码;
参见图18A和18B。
XPD目标码结构包括两个部分:控制部分和执行部分,它使修改目标过程更加便利。若改变仅仅在于控制,就改变控制部分。若改变在于修改可执行部分,则在可执行部分文件中建立一条新项,更新在控制部分中的ECA引用。
控制和可执行部分通过ECA的链接是在运行时进行的。因此仅对新建立的或修改了的XPD目标码的可执行部分的语句进行编译、重新编译或解释。
对应于新建立的XPD资源库单元,对XPD图单元的插入、删除或修改有可能要重新安排XPD目标码的控制部分。
在一些情况下,在只需要对控制结构重新安排时,对于XPD目标码的修改可以不改变可执行部分,而仅仅重新安排XPD图内的单元的顺序。
在一些情况中,对于XPD目标码的修改可以通过不激活控制部分单元而进行,因此跳过可执行部分的对应单元。
在当控制和可执行XPD目标码部分之间的链接是在运行时进行时,由XPD目标码实现的两个或两个以上目标码的链接或重新链接是通过仅链接XPD目标码的控制部分而进行的。
由于XPD机经过其高级接口能通过引用其系统结果以及后来XPD分析机的分析对任一基本过程,即语句进行寻址,因此有一种途径能够不需使用传统的编译器和链接器进行重新编译和重新链接而实现对目标过程的自动修改。可以通过对XPD图中的单元插入、删除或重新安排而自动修改控制部分,这是在用户指点系统输出事件,以及请求重新安排它们的顺序、条件或无条件地激活或不激活它们的指导之下进行的。可以通过指点已有系统输出结果以及随后用XPD分析机分析它们的同样方法从已有系统输出结果中导出这种条件,正如“知识演绎”方法所做的,其中XPD分析机再次跟踪事件的历史。
这是在此提出面向结果的编程(Result OrientedProgramming-ROP)方法的基础,ROP是一种用于计算机程序前期开发的一种十分高级的语言。实际上,这一方法的级别随着目标过程的前期开发而提高,因为有越来越多的事件可以分析和再次使用。
如果对所调用的过程的外部引用是在运行时解决的,而且没有过程是预先链接在一起,因此DLL(动态链接库-DynamicLink Library)只包括一个过程,而XPD模型和XPD资源库是为此而建立的,因在下列情况时,对于过程的修改不需要任何重新编译或链接:
(a)如果要增加一条新的XPD资源库语句(它是从已有的当前过程可执行部分单元中挑选出来的),或者,如果在可执行部分中找不到它,则当被控制部分的相应单元激活时才解释它;
(b)使用前面的修改XPD图的方式由XPD机自动编辑XPD目标码的控制部分。14.在测试与生产的所有阶段上实现XPD机过程;
我们建议在测试或生产的任一阶段上使用XPD机,任一阶段上可用下列方法之一实现:
在执行目标计算机过程时执行XPD机过程,使XPD机过程是下列过程的组合:
—与传统目标码实现的XPD模型的目标过程执行“伪同
  步”;或
—将XPD模型作为XPD目标码实现方式中的目标过程目
  标码的一部分执行;
—由系统输出事件激活的“基本知识归纳”,它在目标过程单
   元之间传播这种知识,直至“知识传播终结”;
—“知识演绎”过程,它定义在目标过程的XPD模型内的不
   确定区域。15.面向结果的编程(ROP)
面向结果的编程(ROP)的方法允许通过十分高级的接口和不需要与过程源代码人工交互而修改或建立先前创建的过程,它具有
—通过引用SYSOUT事件,而将用户接口限制到引用已有
  系统结果上;
—通过XPD机过程自动地进行添加或修改,其中XPD机过
  程再次利用所引用的SYSOUT事件的事件定义空间;16.实现程序听诊;
结合传统上的视频(图象)分析的声音分析可以实现对程序或程序系统的动态理解。任一目标过程的执行可以被看作(听作)由过程算法所定义的音乐,是输入数据组合的函数。
在理解程序的认识过程中,我们面临着“播放计算机”的任务。根据定义,这是一个动态过程。另一方面,根据定义图象(画面)是一静态目标。通过比较两种再现音乐的方式,可以理解动态过程的图象和声音表示的之间的差别:一种是阅读音乐乐谱,(图象表示),而另一种是实际播放音乐。
在一个好的音乐家阅读乐谱时,他实际上听见了音乐,乐谱的图象表示被声音放大了,即使它仅可以由正在阅读乐谱的专家听到。
通过经由图象结构单元显示控制流,可以改变目标过程的静态特性。这可以通过加亮接收到一个控制的单元以及在图中移动上一个加亮位置而实现。与过程的声音同步本身仍是一种过程诊断机制,而且可以与视频结果诊断结合起来。
在程序分析期间,可以以如下方式实现声音效果:
1.在并行或程序生命后期仿真期间,通过将下一所记录的终结地址{k,b}施加到程序的XPD模型,我们可以在程序算法的XPD图上跟踪程序执行。
2.在跟踪期间,只需加亮当前活跃的XPD图的单元而实现程序执行过程的视频跟踪。
3.通过调用硬件内部功能(其产生音频频率并将它们送往扬声器)而加入声音效果。在用上述方法分析一个系统时,最好是在计算机上添加一副耳机,而不会影响其它编程人员。
频率可计算为两个参数的函数:
(k,b),其中将{k}增1就将频率增加为一度,而将{b}增1就将频率增加一较大的度数,例如八度。而分枝转回将相应地减少频率。
蜂鸣长度,根据跟踪XPD图的一个单一单元,它可以设置为比如可以为人耳所辨别。
这种声音执行仿真的效果是这样的,根据过程硬编码结构和输入数据组合,程序执行的每一过程有其自己的“音乐”,在仿真具有较多循环次数的情况下,可以设置一编码信号,来标识这一循环,从而不必跟踪所有循环。
声音分析的效果是这样的,用户能够听到程序行为,就象医生听到病人的心跳一样。
1.在很长时间没有观察到一个特定的输出结果时,可以激活这种分析,以听见:
—系统死掉;
—程序在循环中;
—在等待一输入;(当最后所执行的单元是一输入语句时,可以产生一个特殊声调)。
2.程序算法的最重要地方可以使用最普通的频率,而且因此也易于识别。
3.可以听见随着不同的输入数据组合程序行为的不同。
4.特殊声调可以指示对于一子函数的调用,而另一特殊声调可以指示从该调用返回。声音分析可以仅限于起先的那些信号,而且可以选择将之扩展到在一特定函数内的过程执行,如果要研究其功能的话。
5.在过程仿真(实际运行或后期运行)期间,可以将声音分析记录下来,而且在脱离实际仿真模式下在向前向后两个方向上重放。
6.可以结合系统结果的重放而进行重放,从而对于那些所得到的结果给予过程所需要的强度。
7.可以将对于同一过程的不同输入数据组合的情况记录下来并重播放之,从而对那些不同输入情况分析其计算强度的差别。
假定程序出错的可能是有关基本过程个数的一个函数,在系统进化到一新的要求时,这一分析将有助于选择较简单的(输入-过程-输出)组合。

Claims (20)

1.一种提取出目标过程的算法放入算法的XPD构架中的方法,其中算法的XPD构架是用“下一最小期望”规则,或相反用“下一最大期望”规则建立的一种确定的普通形式,该方法具有:
一过程单元的“算法期望”是用其二进制地址(BA)确定的,该二进制地址是由二进制0和1组成的,它们是在一“t-经过”的即将产生的部分上的一个“精减逻辑条件”的解,该“t-经过”通过该单元;
“t-经过”是一从过程入口至一“过程终结”的经过;
LC的否定解(NO解)被赋予一“低期望”或“0-期望”,而LC的肯定解(YES解)被赋予一“高期望”或“1-期望”;
将具有多于两个输出的逻辑条件(LC)减少为只具有两个逻辑输出的两个或两个以上精减LC;
在构造主分枝过程中,消除向前的“GO TO”;
在“过程终结”退出目标过程时,将其标识成“退出终结”,而在“过程终结”将控制返回到过程单元时将其标识为“重绕终结”,该过程单元已在过程段中以较低的二进制地址表示;
标识一过程段;
将两个不同二进制地址间的关系进行量化。
2.根据权利要求1的将目标过程中的算法提取出来放入“双向终结的”XPD图的方法,具有:
XPD图沿两个方向建立,其中第一方向由LC的0-期望定义,而另一方向由LC的1-期望定义;
XPD图的每一单元被赋给一个描述该单元的“过程期望”的“二进制地址”(BA)。
3.一种通过确定目标过程的单元间的可访问性而标识该目标过程单元间的“期望依赖性”的方法,包括:
(a)标识逻辑条件的一个域;
(b)标识一XPD图“段”的一个逻辑级;
(c)标识一过程单元的算法地址(AA)和过程地址(PA);
(d)确定一过程的算法空间;
(e)通过确定过程单元的“幻像”和过程单元的“普通幻像”,而确定一过程单元的访问域;
(f)一种传播过程终结的普通幻像的方法。
4.权利要求3的一种方法,通过为一过程终结确定一退出访问指示符,将所确定的过程单元的可访问性用于确定数据独立无终止循环,其中:
在传播终结的“普通幻像”的过程期间,退出访问指示符有可能被从“off”传播到“on”。
5.一种在进行权利要求2的过程期间建立一目标过程的XPD资源库的方法,其中XPD资源库是该目标过程的一种表示,其表示并不包含任何过程控制指令,XPD资源库的每一可执行语句被赋予一个对于XPD图的相应单元的引用。
6.一种通过将属性赋给XPD图单元建立XPD模型的方法,其中将对应于目标过程的每一可执行语句的单元赋予一个动态改变的“本地时刻”属性和“分析计算库”(ACB)属性,其中:
“本地时刻”,是一个整数,它表示在该目标过程内该过程单元的当前出现;
“ACB”,是0和1的二进制结构,对于相应的“过程事件”,该0和1对应于关于“正确性”或其“不确定性”的知识,其中,事件“正确性”的“知识”状态与该算法空间内的“本地时刻”和“过程地址”有关,而且“知识”状态可能由XPD机过程改变。
7.一种建立一目标过程X-Source码的方法,其中X-Source码是对原目标过程的再建造而且在功能上与原目标过程等价。其中建立与XPD接口模块的接口,包括:
(a)在该目标过程的“终结”建立同步信号作为记录目标过程的行为历史的最小开销;
(b)通过建立递增系统输出过程同步映象(ISOPS映象),在目标过程的系统输出单元建立同步信号,以在用户与理解该目标过程功能的XPD机过程之间建立一个十分高级接口;
(c)在目标过程的系统输入单元建立同步信号以建立系统输入过程同步映象(SIPS映象)。
8.一个将一目标过程内的一基本过程,即可执行语句,确定为在其执行的特定“事件”中即在一特定“过程时刻”中是“正确”或“不确定”的方法,其中该特定“过程时刻”是在目标过程内的位置和时刻。
9.一种根据权利要求8的、归纳目标过程“正确性”的基本知识的方法,在该方法中,其归纳过程是通过向后即与目标过程执行相反的方向跟踪“祖先事件”将这一知识传播进“祖先事件”,直至到达“知识传播终结”,该方法包括:
(a)标识过程“事件”或“过程时刻”;
(b)通过系统输出过程事件激活“知识传播过程”;
(c)将系统输出事件标识为“正确”,除非而且直到在未来系统输出结果验证期间或由于有了新的系统需求而将输出事件定义“未预计”或“不确定”;
(d)相对于特定过程时刻,标识“正确过程地址”(CPA)和“不确定过程地址”(UPA);
(e)在一“祖先”事件对当前事件的值有影响时,将该“祖先”事件标识为“值祖先事件”,而在一“祖先”事件对到达当前事件的路径上的LC的值有影响时,将其标识为“控制祖先事件”;
(f)批准一个事件的过程产生批准其最近祖先的第二过程,除非该最近祖先(1)已经被批准,或(2)不存在,在此情况中该事件初始数据操纵事件,用(1)和(2)代表“知识传播终结事件”;
(g)将“知识传播终结”标识为一个当前过程的输入事件,或由本项权利要求所定义的前面的知识归纳过程将当前其基本知识状态定义为“正确”的事件。
10.一种执行XPD模型的方法,其执行是通过传统目标码所实现的、以“延迟顺序”或“延迟并行”XPD模型执行方法与目标过程的“伪并行”,包括:
根据目标过程的执行路径,执行XPD模型作为跟踪XPD图的一个过程;
由一个或多个在两个任务间切换的CPU实现XPD模型的“延迟顺序执行”,其中一个任务是目标过程的“执行段”,而另一个任务是由XPD分析机对该过程XPD模型上的第一个任务进行建模,其中
“执行段”被定义为位于XPD目标集的下列单元之间的过程段的一部分:过程入口,系统输入(同步{ide,m})点和“过程终结”(同步{idt,m});
“XPD模型的延迟并行执行”是由多于一个CPU实现的,目标过程“执行段”的任务和由XPD分析机对先前被执行的“执行段”的建模任务是并行进行的。
11.一种通过执行XPD目标码而执行目标过程的方法,包括:
消除了权利要求7所描述的产生和编译X-Source码的步骤;
XPD目标码包括两个部分:(1)可执行部分,它被翻译成机器码XP D资源库语句,在XPD资源库中不包括任何过程控制命令,和(2)控制部分,它是目标过程的XPD图;
在语法分析XPD图期间,XPD驱动器要判断接下来要执行XPD目标码的可执行部分的哪一语句,该过程实际上是执行目标过程的XPD模型,从而不必进行XPD模型的“伪并行”执行,如在权利要求10所述,其中XPD图是XPD目标码的控制部分。
12.一种解释XPD图和XPD资源库从而消除了权利要求7所描述的产生和编译X-Source码的步骤,其中:
语言解释器在某一时刻通过解释来自该过程的XPD资源库的语句执行目标过程,其中在XPD资源库中不包括任何控制语句;
在对目标过程的XPD图进行语法分析期间,XPD驱动器判断接下来要解释资源库中哪一语句,该过程实际上是执行该目标过程的XPD模型,从而不再需要权利要求10所描述的XPD模型的“伪并行执行”。
13.一种在执行XPD模型期间XPD分析机激活“知识归纳”过程的方法,在传统目标码实现方式中以“伪并行执行”执行XPD模型(权利要求10),或通过解释XPD图和XPD资源库执行(权利要求12)或作为XPD目标码执行的一部分(权利要求11),该方法包括:
在XPD分析机经过指向系统输出的一个W单元时启动“知识归纳”过程;
XPD分析机以权利要求9描述的原则传播知识,其在W输出信号的每一参数上发生。
14.一种通过引用系统输出事件、以不断降低不确定性的激活“知识演绎”过程的方法,包括:
通过在系统输出上定位光标、鼠标或其它指点设备而标识相应系统输出事件,该系统输出是从ISOPS映象,即递增系统输出过程同步映象中重新建立的;
用系统输出“事件定义空间”的相应部分确定要修改的位置,该事件定义空间是在相应于所引用的系统输出事件的“过程时刻”在过程地址(PA)上建立的,该过程地址的状态为UPA,即“不确定过程地址”。
一“事件定义空间”是相应于系统输出事件的“祖先”的“过程地址”的组合;
“知识演绎”过程在任一方向上被“知识演绎终结”所终止,其中知识演绎终结与权利要求9描述的“知识传播终结”具有同样的定义。
15.一种执行如权利要求10、11或12所描述的XPD模型的方法,该方法被应用于计算机过程的测试与生产的多个阶段,其中XPD机过程的执行与目标计算机过程的执行是一起的,XPD过程是下列过程的组合:
如权利要求(10)所描述的,在传统目标码实现中,与XPD模型的目标过程执行“伪并行”;或
如权利要求(11)所叙述的,将XPD模型作为XPD目标码实现方式的一个控制部分而执行,并由XPD驱动器作为目标过程执行的一部分,或
由XPD驱动器在解释XPD模型与XPD资源库期间执行XPD模型;
由系统输出事件通过在目标过程单元之间传播“基本知识”直至权利要求(9)中所述“知识传播终结”而激活“基本知识归纳”;
“知识演绎过程”,它定义在目标过程的XPD模型中的不确定区域,在权利要求(14)中已描述。
16.一种通过在XPD目标码的一个或两个部分上的有限修改而由XP D目标码实现的对目标过程修改的方法,包括:
只对新近建立或修改的XPD目标码的可执行部分的语句进行编译、再编译或解释;
通过对XPD图单元进行插入、删除或修改有可能重新安排XPD目标码的控制部分;
不需要对可执行部分进行改动,而只仅仅重新安排在XPD图内该单元的顺序,也就是重新安排XPD目标码的控制部分,从而进行对XPD目标码的修改;
在一些情况下,通过不激活控制部分单元而进行对XPD目标码的修改,而且因此跳过可执行部分的相应单元。
17.一种链接或再链接由XPD目标码实现的一组两个或多个目标过程的方法,这种链接是仅链接XPD目标码的控制部分,其中在控制和可执行XPD目标码部分的链接是在运行时实现的。
18.一种实现由XPD目标码表示的目标过程修改的方法,其中不进行任何重新链结,通过由XPD分析机进行的XPD目标码的自动修改而消除了重新链接步骤,该方法包括:
对所调用的过程的外部引用是在运行时解决的,没有过程预先链接在一起,从而DLL只包括一个过程,而XPD模型和XPD资源库是为此而建立的;
如果要加入一新的XPD资源库语句,对于当前过程可执行部分单元,它是从已有的单元中挑选出来的,或者,如果在可执行部分找不到它,则在该控制部分的相应单元激活它时才对之进行解释;
XPD分析机自动编辑XPD目标码的控制部分。
19.一种面向结果的编程方法,它通过十分高级接口而且不需要与过程源代码的任何人工交互而对先前建立的过程进行修改或建立,包括:
根据权利要求(14)描述的方法,通过引用系统输出(SYSOUT)事件将用户接口限制到引用已有系统结果;
由XPD机过程再次使用所引用的系统输出(SYSOUT)事件而自动完成添加或修改。
20.一种实现“程序听诊”的方法,它允许对目标过程的声音分析,包括:
将XPD图的算法空间内的XPD图的每一单元的位置赋予一个声音频率,其中该位置由单元的{k,b}座标定义,随着K座标的增加,其频率也逐渐增加,而随着b座标的增加,其频率就增加一个较大的度,比如八度;
在由XPD模型伪并行执行跟踪XPD图期间,或由XPD驱动器执行XPD目标码期间,或在执行后的任一时间重放目标过程执行历史期间,产生对应于目标过程的实际执行行为的声音信号;
有可能只对所选择的XPD目标集的单元,比如只对X单元,即CALL语句单元,设置为产生声音信号,因此只允许只对CALL层或只对I/O层进行声音分析,如此等等;
一种通过对声音信号的基准频率加上不同泛音从而产生不同音色的声音信号,从而区分出XPD目标集内活动单元类型的方法,其中每一类型被赋予其自己音色;
在目标程序分析期间通过“程序听诊”方法使用内部扬声器或外部声音设备,比如耳机。
CN94192552A 1993-05-10 1994-05-10 软件自动分析的方法与装置 Pending CN1125990A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US5920893A 1993-05-10 1993-05-10
US08/059,208 1993-05-10

Publications (1)

Publication Number Publication Date
CN1125990A true CN1125990A (zh) 1996-07-03

Family

ID=22021495

Family Applications (1)

Application Number Title Priority Date Filing Date
CN94192552A Pending CN1125990A (zh) 1993-05-10 1994-05-10 软件自动分析的方法与装置

Country Status (10)

Country Link
US (1) US5522036A (zh)
EP (1) EP0699320B1 (zh)
JP (1) JPH09502034A (zh)
CN (1) CN1125990A (zh)
AT (1) ATE245836T1 (zh)
AU (1) AU682869B2 (zh)
CA (1) CA2162020C (zh)
DE (1) DE69432974T2 (zh)
SG (1) SG63616A1 (zh)
WO (1) WO1994027213A2 (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1821957A (zh) * 2005-02-18 2006-08-23 微软公司 关系建模
CN101689259A (zh) * 2007-06-08 2010-03-31 埃森哲环球服务有限公司 旧有应用的移植
CN101694643B (zh) * 2003-09-30 2012-10-10 明导公司 使用一个或多个自动机的系统验证
CN107832209A (zh) * 2017-10-26 2018-03-23 北京邮电大学 一种基于混合检测结果的Android应用行为分析方法
CN110383238A (zh) * 2016-05-15 2019-10-25 新思科技有限公司 用于基于模型的软件分析的系统和方法
CN112740184A (zh) * 2018-09-27 2021-04-30 美国西门子医学诊断股份有限公司 用于确定性地报告软件系统中的原因和影响的方法

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5822592A (en) * 1994-06-28 1998-10-13 Us West Technologies, Inc. Method and system for determining source code location
US5699507A (en) * 1995-01-17 1997-12-16 Lucent Technologies Inc. Method of identifying similarities in code segments
US5606699A (en) * 1995-04-28 1997-02-25 International Business Machines Corporation Storing and querying execution information for object-oriented programs
US5748878A (en) * 1995-09-11 1998-05-05 Applied Microsystems, Inc. Method and apparatus for analyzing software executed in embedded systems
US6088452A (en) * 1996-03-07 2000-07-11 Northern Telecom Limited Encoding technique for software and hardware
US5950009A (en) * 1997-03-10 1999-09-07 International Business Machines Coporation Method and apparatus for profile-based reordering of program portions in a computer program
US6029004A (en) * 1997-03-17 2000-02-22 International Business Machines Corporation Method and apparatus for modular reordering of portions of a computer program based on profile data
US5926622A (en) * 1997-03-18 1999-07-20 Lucent Technologies Inc. Efficient regression verification
US5960198A (en) * 1997-03-19 1999-09-28 International Business Machines Corporation Software profiler with runtime control to enable and disable instrumented executable
US6026234A (en) * 1997-03-19 2000-02-15 International Business Machines Corporation Method and apparatus for profiling indirect procedure calls in a computer program
US5911073A (en) * 1997-12-23 1999-06-08 Hewlett-Packard Company Method and apparatus for dynamic process monitoring through an ancillary control code system
US6189141B1 (en) 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
US6148437A (en) * 1998-05-04 2000-11-14 Hewlett-Packard Company System and method for jump-evaluated trace designation
US6164841A (en) * 1998-05-04 2000-12-26 Hewlett-Packard Company Method, apparatus, and product for dynamic software code translation system
US6415396B1 (en) * 1999-03-26 2002-07-02 Lucent Technologies Inc. Automatic generation and maintenance of regression test cases from requirements
US6769073B1 (en) * 1999-04-06 2004-07-27 Benjamin V. Shapiro Method and apparatus for building an operating environment capable of degree of software fault tolerance
US6651244B1 (en) * 1999-07-26 2003-11-18 Cisco Technology, Inc. System and method for determining program complexity
US6973417B1 (en) 1999-11-05 2005-12-06 Metrowerks Corporation Method and system for simulating execution of a target program in a simulated target system
US6718485B1 (en) * 1999-11-16 2004-04-06 Parasoft Corporation Software emulating hardware for analyzing memory references of a computer program
JP2001249828A (ja) * 1999-12-28 2001-09-14 Toshiba Lsi System Support Kk 情報処理装置、不具合解析プログラムを格納したコンピュータ読み取り可能な記憶媒体、不具合解析方法、及びアプリケーションプログラム開発支援システム
US6785848B1 (en) * 2000-05-15 2004-08-31 Microsoft Corporation Method and system for categorizing failures of a program module
US6665824B1 (en) * 2000-05-15 2003-12-16 Microsoft Corporation System and method for handling a failure reporting conversation
US6948127B1 (en) * 2001-12-10 2005-09-20 Cisco Technology, Inc. Interface for compressed video data analysis
US7096339B2 (en) * 2003-03-01 2006-08-22 International Business Machines Corporation System and method for detecting memory management programming errors
US20050108562A1 (en) * 2003-06-18 2005-05-19 Khazan Roger I. Technique for detecting executable malicious code using a combination of static and dynamic analyses
US7322027B2 (en) * 2003-06-27 2008-01-22 Microsoft Corporation Detecting termination and providing information related to termination of a computer system process
US7296256B2 (en) * 2003-10-20 2007-11-13 International Business Machines Corporation Method and apparatus for automatic modeling building using inference for IT systems
US7581211B2 (en) * 2004-07-14 2009-08-25 International Business Machines Corporation Method and apparatus for on demand debugging, tracing, and logging of applications
US7975257B2 (en) * 2006-06-13 2011-07-05 Microsoft Corporation Iterative static and dynamic software analysis
US8312415B2 (en) * 2007-04-17 2012-11-13 Microsoft Corporation Using code analysis for requirements management
US20080307397A1 (en) * 2007-06-08 2008-12-11 Bill Angell Program Analysis by Partial Emulation
US8219975B2 (en) * 2007-10-26 2012-07-10 Microsoft Corporation Real-time analysis of performance data of a video game
RU2458386C1 (ru) * 2011-04-07 2012-08-10 Корпорация "САМСУНГ ЭЛЕКТРОНИКС Ко., Лтд." Способ определения ошибочного использования памяти
US9015831B2 (en) * 2012-08-08 2015-04-21 Synopsys, Inc Method and apparatus for static taint analysis of computer program code
US20140130015A1 (en) 2012-11-06 2014-05-08 International Business Machines Corporation Hybrid Program Analysis
JP6070847B2 (ja) * 2013-08-09 2017-02-01 富士通株式会社 検証方法、検証装置および検証プログラム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4720778A (en) * 1985-01-31 1988-01-19 Hewlett Packard Company Software debugging analyzer
DE3577760D1 (de) * 1985-12-30 1990-06-21 Ibm Deutschland Verfahren und einrichtung zur analyse von steuerprogrammen.
JPS62166444A (ja) * 1986-01-20 1987-07-22 Mitsubishi Electric Corp プログラムデバツグ装置
JPH02118852A (ja) * 1988-10-28 1990-05-07 Nec Eng Ltd 高級言語のデバッグの簡易化方式
US5297150A (en) * 1992-06-17 1994-03-22 International Business Machines Corporation Rule-based method for testing of programming segments

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101694643B (zh) * 2003-09-30 2012-10-10 明导公司 使用一个或多个自动机的系统验证
CN1821957A (zh) * 2005-02-18 2006-08-23 微软公司 关系建模
CN1821957B (zh) * 2005-02-18 2014-03-12 微软公司 关系建模
CN101689259A (zh) * 2007-06-08 2010-03-31 埃森哲环球服务有限公司 旧有应用的移植
CN101689259B (zh) * 2007-06-08 2015-07-01 埃森哲环球服务有限公司 旧有应用的移植
CN110383238A (zh) * 2016-05-15 2019-10-25 新思科技有限公司 用于基于模型的软件分析的系统和方法
CN110383238B (zh) * 2016-05-15 2024-01-05 新思科技有限公司 用于基于模型的软件分析的系统和方法
CN107832209A (zh) * 2017-10-26 2018-03-23 北京邮电大学 一种基于混合检测结果的Android应用行为分析方法
CN112740184A (zh) * 2018-09-27 2021-04-30 美国西门子医学诊断股份有限公司 用于确定性地报告软件系统中的原因和影响的方法
CN112740184B (zh) * 2018-09-27 2023-12-22 美国西门子医学诊断股份有限公司 用于确定性地报告软件系统中的原因和影响的方法

Also Published As

Publication number Publication date
JPH09502034A (ja) 1997-02-25
DE69432974T2 (de) 2004-05-27
CA2162020A1 (en) 1994-11-24
DE69432974D1 (de) 2003-08-28
ATE245836T1 (de) 2003-08-15
EP0699320B1 (en) 2003-07-23
US5522036A (en) 1996-05-28
EP0699320A1 (en) 1996-03-06
WO1994027213A2 (en) 1994-11-24
EP0699320A4 (en) 1997-02-12
WO1994027213A3 (en) 1995-01-05
AU6829894A (en) 1994-12-12
AU682869B2 (en) 1997-10-23
SG63616A1 (en) 1999-03-30
CA2162020C (en) 2000-08-01

Similar Documents

Publication Publication Date Title
CN1125990A (zh) 软件自动分析的方法与装置
CN1082208C (zh) 从语言中性源程序产生语言专用接口定义的系统和方法
CN1096637C (zh) 管理类方法名
CN1836268A (zh) 利用高速缓存和可高速缓存对象扩展测试驱动应用程序的功能的基于计算机测试的系统和方法
CN1182467C (zh) 可扩充的分布企业应用集成系统
CN1910601A (zh) 限制条件解决方法、限制条件解决装置、以及限制条件解决系统
CN1027198C (zh) 计算装置
CN1821956A (zh) 用现有内容生成用于执行任务的活动内容向导可执行文件
CN1024954C (zh) 具有调试能力的可编程序控制器
CN1145901C (zh) 一种基于信息挖掘的智能决策支持构造方法
CN1609792A (zh) 计算机程序的编程接口
CN1728153A (zh) 支持配置实体的选择性表示的配置说明语言的方法和系统
CN1591401A (zh) 一种使用应用程序的各个版本进行数据处理的方法
CN1773508A (zh) 把源文档转换成目标网页文件的方法
CN1740970A (zh) 无缝地比较对象的系统和方法
CN1219266C (zh) 一种实现多路对话的人-机汉语口语对话系统的方法
CN1573744A (zh) 进行非结构化信息管理和自动文本分析的系统和方法
CN1271545C (zh) 语言翻译系统
CN1781078A (zh) 硬件加速器个性编译器
CN1745364A (zh) 用于扩展应用程序首选项类的系统和方法
CN1666202A (zh) 管理集成电路设计的装置和方法
CN1794231A (zh) 具有替换格式的上下文无关的文档部分
CN1869989A (zh) 用于从非结构化描述生成结构化表示的系统和方法
CN1672149A (zh) 词联想方法和装置
CN1091536A (zh) 面向目标的结构系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication