專利名稱::軟件自動分析的方法與裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明的背景發(fā)明領(lǐng)域本發(fā)明與一種靜態(tài)和動態(tài)分析計算機程序的方法有關(guān),本發(fā)明能將造成程序出現(xiàn)故障的錯誤的位置以及在改變需要的情況下需要對程序進(jìn)行修改的位置等的不確定性減至最小。所發(fā)明的過程也在目標(biāo)計算機軟件系統(tǒng)的用戶與其內(nèi)部過程之間提供了一個有獨創(chuàng)性的和非常高級的接口,這種接口允許以一種十分有效的方法去激活該目標(biāo)軟件的分析。該接口也為系統(tǒng)修改和前期開發(fā)引入了一個非常高級的編程語言,稱作面向結(jié)果的編程(ResultOrientedProgramming-ROP)。下面的描述也通過提出一種XPD目標(biāo)碼(XPDObjectCode)為傳統(tǒng)形式的計算機軟件過程目標(biāo)碼提供了一種替換形式,其中XPD代表專家程序診斷(expertProgramdiagnosis)。XPD目標(biāo)碼更適合于靜態(tài)和動態(tài)程序分析以及程序維護(hù)。作為這種過程修改的結(jié)果,它方便了以及有時消除了目標(biāo)過程代碼的重新編譯與重新鏈結(jié)。相關(guān)技術(shù)的描述計算機軟件工程的幾十年發(fā)展顯示出a.還沒有一種自動方式能證明計算機程序過程將總是產(chǎn)生正確的或期望的結(jié)果;b.因此,沒有“無任何錯誤”的軟件,即軟件對于它所測試的程度只是“正確”,同時假設(shè)該測試是正確的;c.除了最簡單的軟件外,窮盡測試是不可行的;d.當(dāng)前的軟件工程沒有提供類似于硬件安全邊際(hardwaresafetymargin)的任何方法,而且一個錯誤常常使整個系統(tǒng)停止下來;e.在測試或者生產(chǎn)期間,在認(rèn)識到存在錯誤時,對原因(錯誤)進(jìn)行定位常常是極其困難的。這就是說軟件在本質(zhì)上不同于硬件,因為它不遵循同樣的因果規(guī)律。即軟件錯誤并不與其表現(xiàn)(故障)相接近,但是它可以位于系統(tǒng)中的幾乎任何位置。對于已經(jīng)過測試并進(jìn)行生產(chǎn)的系統(tǒng),其工業(yè)上平均是每1000行代碼有5~10個錯誤。由于難以確定錯誤,許多故障懸而未決。程序員和他們的管理人員害怕接觸代碼,因為在試圖改進(jìn)或修改代碼時可能會引進(jìn)新的錯誤,并且進(jìn)一步打亂系統(tǒng)。下面的引用是在1988年提出后,在1993年仍然正確“原則上它可以那樣工作。對于仔細(xì)編制的程序其出錯率大約是每1000行5個錯誤,因此一個一兆行的程序可能有5000個問題。即使假設(shè)需要一個測試點以暴露一個問題,數(shù)千次的嘗試也不是不現(xiàn)實。這種謬誤是含糊的,但對于測試我們的直覺而不是我們樂于承認(rèn)的是這種測試點可以是十分少,但是我們不知道如何找到這些點。更槽糕的是,我們知道沒有一種語義方式去尋找,沒有一種方式去評判所選擇的點,而且沒有方法決定何時停止。因此在嘗試了5000個點之后而沒有發(fā)現(xiàn)錯誤,我們并不知道是否已無錯誤,是否還剩10個錯誤,或5000個錯誤”……,從技術(shù)方面測試最需要的是一個正確的基本理論…”SpecialsectiononSoftwaretesting”CommunicationoftheACM,1988年6月軟件的“再工程”成為1990年的一個時髦詞。在IBMSystemJournal(VOL28,1989年第2期)上有一個標(biāo)題“ProgramunderstandingChallengefor1990′s”。根據(jù)IBM的研究,全世界在軟件維護(hù)上花費大約300億美元,而且隨著新軟件系統(tǒng)的累積和舊軟件的“老化”,這個數(shù)字也在上升。根據(jù)MIT(麻省理工學(xué)院)的研究,每1美元用于新軟件項目,就要花費9美元用于該項目的維護(hù)。SoftwareMagazine1990年11月,第95頁提到PriceWaterhouse的研究表明對于能夠?qū)ΜF(xiàn)有系統(tǒng)進(jìn)行糾錯的系統(tǒng)估計一年有1000億美元的市場。軟件調(diào)試的當(dāng)前技術(shù)是基于“控制斷點”(controlBreak)技術(shù)。這就是它如何工作的通過使用下列方法之一通過設(shè)置“控制斷點”激活對源程序的分析a.程序員研究源程序,通過將光標(biāo)或其它指點設(shè)備定位在特定源代碼行上手工設(shè)定控制斷點;或b.程序員命令一個調(diào)試工具通過自動地加亮源代碼的當(dāng)前活動行而激活(跟蹤)該代碼,這種跟蹤是以一種足夠慢的速度對代碼進(jìn)行解釋從而能夠可視地追蹤其執(zhí)行。以這種方式時,在每一被執(zhí)行源指令之后要有一斷點;或c.命令將一控制斷點設(shè)置在每一特定類型的指令處,比如在每一輸入語句之后,或在每一調(diào)用(執(zhí)行)語句之前。一個控制斷點的目的是暫時暫停一個執(zhí)行過程從而手動地檢查程序變量的值。在使用“控制斷點”時采取了下列假設(shè)(i)程序員在源代碼有關(guān)位置處設(shè)置控制中斷;(ii)假設(shè)(i),程序員知道要查看什么變量;(iii)假設(shè)(i)和(ii),程序員對故障的原因做出正確的判斷。因此正確手工分析的概率是上述(i)(ii)(iii)的概率的乘積。也就是說,比如上述每一步驟的正確判斷結(jié)果的概率是1%,則手工分析的正確結(jié)果的概率是0.1%。正如我們所理解的,傳統(tǒng)的“控制斷點”技術(shù)試著去確定一個故障的原因是完全不能自動的,它在認(rèn)識判期間引入了人為出錯的可能—要檢查嗎?—檢查什么?—它說明什么?在自斷確定在測試過程期間什么源代碼已被覆蓋什么源代碼未被覆蓋的領(lǐng)域中,人們已經(jīng)做了一些工作。授于Horsch的美國專利(第4853851)公開了標(biāo)題為“SystemforDetermingTheCodeCoverageofaTestedProgramBasedUponStaticandDynamicAnalysisRecording”的發(fā)明,其方法是測量在測試期間計算機程序被執(zhí)行的指令數(shù)與該程序的總的指令數(shù)的比值。盡管一般來講在測試期間覆蓋的語句越多越好,但事實是被執(zhí)行的過程步驟并不提供其正確性信息—首先所構(gòu)造的特定的被執(zhí)行的語句可能是錯誤,—該特定語句可能是在一個錯誤的地方或在一個錯誤的時刻被執(zhí)行;—另外,該特定語句可能是一個不改變過程結(jié)果或?qū)^程結(jié)果沒有影響的語句;授予Ward等人的美國專利(專利號為4802116)公開了一個名稱為“ProgrammedController”的發(fā)明,該發(fā)明控制一個機器過程并方便其調(diào)試。它們的應(yīng)用程序通過組織成一個或多個獨立的循環(huán)而被明確地設(shè)計成以模擬機器的各部分的特定控制策略。嵌入進(jìn)的控制機制記錄下這些循環(huán)的狀態(tài),以及影響在這些狀態(tài)之間轉(zhuǎn)移的條件。這一技術(shù)僅僅限于這樣一些應(yīng)用程序它們按照非常特殊的語法規(guī)則被編碼為多個獨立的循環(huán),其中跟蹤這些循環(huán)的狀態(tài)的方式被預(yù)先編碼進(jìn)控制該過程的程序中。通過記錄下代表每一語句塊的一個序列和連接不同塊的每一邏輯條件語句而進(jìn)行對該過程歷史的記錄。對系統(tǒng)錯誤的分析沒有自動到XPD機所提供的程度,因為它并不是參考實際的過程結(jié)果而進(jìn)行的(而在XPD機卻能做到),而是通過對所記錄的程序狀態(tài)序列進(jìn)行分析,由此它不象XPD機那樣提供一個高級的推理和用戶接口?,F(xiàn)有技術(shù)并沒有提供一般的過程,能自動地確定計算機軟件中的邏輯錯誤的位置,甚至是在一被定義區(qū)域內(nèi)不確定的程度。這是因為根據(jù)下列理由一般認(rèn)為這種自動化是不可行的1.正如前面所提及,軟件不象硬件那樣遵循同樣的因果規(guī)律,而且造成特定故障的軟件錯誤可以在軟件系統(tǒng)中幾乎任何位置;2.軟件系統(tǒng)不知道它所預(yù)計的結(jié)果是什么,因此,除非所預(yù)計的結(jié)果被編碼進(jìn)該系統(tǒng)中,否則軟件系統(tǒng)并不能認(rèn)識到一個故障(未預(yù)料的結(jié)果)。這一工作首先顯示出預(yù)先編碼程序規(guī)范的任務(wù)在復(fù)雜性和易出錯特性方面與對軟件功能進(jìn)行編程并沒有什么不同。另外,通過預(yù)先編碼系統(tǒng)需求試圖消除軟件故障將忽略軟件故障的下列特點,因為不能絕對地定義一個軟件故障;—軟件故障在輸入和輸出上與改變了的預(yù)期(要求)有關(guān);—軟件故障與改變了的操作環(huán)境有關(guān);—在系統(tǒng)結(jié)果不是明確被證明時,軟件故障與系統(tǒng)結(jié)果的單個預(yù)期有關(guān)。在這里需補充的是確定軟件故障的問題在于基本軟件過程(程序源語句)的正確性的相關(guān)性。基本過程存在三維世界中。前兩維是程序算法空間的兩維,通過觀察流程圖可以理解這一點。靜態(tài)程序分析就是在這兩維中進(jìn)行的。第三維是程序執(zhí)行過程的時間。動態(tài)分析必須在空間和時間上進(jìn)行。程序靜態(tài)和動態(tài)分析之間的差別之大與傳統(tǒng)的和現(xiàn)代的結(jié)構(gòu)間的差別是一樣的由于“除了在某一時刻外沒有人會注意一個位置,或除了在某一位置之外,沒有人會注意一個時刻(H.Minkowsky,“SpaceandTime”),在一程序(該程序在其算法空間內(nèi)有自己硬編碼位置)內(nèi)的該基本過程只有在該程序控制將要到達(dá)該基本過程時以及如果將要到達(dá)時,才具有意義,其意義在該過程內(nèi)的不同時刻是不同的。在一基本過程(語句)在該過程內(nèi)的不同時刻執(zhí)行之前以及之后,其基本過程意思上的差別是由該執(zhí)行歷史上的可能差別所決定。先有技術(shù)遺漏了為了能自動確定計算機軟件中的邏輯錯誤以及總的提高程序的動態(tài)分析的下列主要技術(shù)步驟I)在自動程序方面引入關(guān)聯(lián)屬性以及使自動邏輯分析可行的新的理論;II)基于上述理論,由運行在關(guān)于目標(biāo)過程單元“正確性”和其“不確定性”的知識之上、具有將這種不確定性降至最小的機制的過程所組成的技術(shù),這些過程可以積累并且在目標(biāo)過程單元之間傳播上述知識,從而自動地增加該目標(biāo)過程模型的“智能”;在以后的描述中,我們將用術(shù)語“知識”來描述在目標(biāo)過程的特定實例上對目標(biāo)過程單元“正確性”或其“不確定性”的認(rèn)識。III)基于上述理論,在用戶和目標(biāo)軟件系統(tǒng)間提供高級接口的技術(shù),它能考慮所分析的有關(guān)目標(biāo),即有關(guān)的程序語句和有關(guān)的系統(tǒng)行為,自動地在有關(guān)地點和時間啟動分析工具。(自動分析不可能建立在試圖去理解在何處設(shè)置斷點的認(rèn)識要求之上)。我們將上述技術(shù)步驟設(shè)想為未來操作系統(tǒng)的一個完整部分。類似于編譯器的靜態(tài)語法分析,這種操作系統(tǒng)能將對目標(biāo)系統(tǒng)行為的動態(tài)分析提高到隨著確定程度的增加能定位邏輯錯誤的位置的程度。類似于不確定性的不同程度也存在于編譯器的診斷中編譯器不能檢測出在字符′a′的地方應(yīng)是′b′,相反它只能報告在一個語句或語句組的一特定區(qū)域內(nèi)存在特定類型的問題。沒有編譯器的這種部分不確定性分析,我們就不能處理任何相對復(fù)雜代碼的語法錯誤。在邏輯錯誤分析領(lǐng)域這種自動化是一個長時間的期盼。XPD機在一個更加復(fù)雜的范圍內(nèi)提供了這種自動化——確定邏輯錯誤的位置和類型。先前提到的技術(shù)步驟是建立在十分基本但又是十分嚴(yán)格的模型(表示過程算法的模型)之上的,該模型可以從任一現(xiàn)有的軟件系統(tǒng)中提取。在下面對術(shù)語XPD的描述中,我們要了解下列過程的結(jié)合,它們還將進(jìn)一步描述—在傳統(tǒng)目標(biāo)碼實現(xiàn)中實現(xiàn)XPD模型和目標(biāo)過程的“偽并行”(即“延遲順序”或“延遲并行”)同步執(zhí)行;或者將XPD模型作為XPD目標(biāo)碼實現(xiàn)中目標(biāo)過程目標(biāo)碼的一個部分執(zhí)行;—建立系統(tǒng)輸入和系統(tǒng)輸出過程同步映象;—運行XPD分析機(XPDAnalyticalEngine),即—為目標(biāo)過程單元的執(zhí)行事件建立因果關(guān)系和它們的正確性的知識;—在目標(biāo)過程單元間傳播這一知識;—使用所積累的目標(biāo)過程的知識,定義錯誤位置區(qū)域,或者由于修改了系統(tǒng)要求而必須修改的區(qū)域;下面簡要描述XPD機技術(shù)的幾點基本長處。為了定位程序中的錯誤,或者從總體上理解程序,傳統(tǒng)上程序員要做大量檢測性工作。除了要出現(xiàn)人為錯誤,以及由于在手工分析中的錯誤而可能造成的次要錯誤,因此這種手工程序分析經(jīng)常是太過于復(fù)雜而難以進(jìn)行。我們的發(fā)明進(jìn)行檢測性工作,并且將大部分手工分析自動化。這種分析隨著對目標(biāo)過程行為的知識的積累而精確地增加。本發(fā)明的核心是能夠積累和使用這種知識。本發(fā)明就是研究目標(biāo)過程內(nèi)的事件和它們的結(jié)果。如果一個由其它事件所產(chǎn)生的事件(實際存在的某些情況)被作為一個結(jié)果(可以跟蹤至一個情況或條件),那么可以說我們的發(fā)明是通過研究基本過程事件的結(jié)果,即目標(biāo)過程內(nèi)的因果關(guān)系而工作的。本發(fā)明不是采用傳統(tǒng)方式即向前運行(跟蹤目標(biāo)過程)來分析目標(biāo)過程,而是向后運行從結(jié)果進(jìn)行分析(自動地)。這一方法極其象人們使用思維的方式,即當(dāng)看到在我們身邊出現(xiàn)的結(jié)果時,人們總是試著去建立引起這些結(jié)果的內(nèi)部過程的認(rèn)識,即向后運行從結(jié)果至原因建立因果認(rèn)識。事實上,計算機程序是人所編制的,不應(yīng)該改變我們理解它的方式,即從結(jié)果進(jìn)行分析,而不是僅僅簡單地向前跟蹤單元步驟。由于目標(biāo)過程結(jié)果是該目標(biāo)過程的最終結(jié)果,能夠從這些最終結(jié)果跟蹤至其原因使我們得到一個有獨創(chuàng)性的接口,其中程序分析是從該程序的輸出開始的。在我們的發(fā)明中,“一個期望結(jié)果的后果證明中間結(jié)果鏈?zhǔn)钦_的”或者“期望結(jié)果的事件證明中間事件鏈?zhǔn)钦_的”。這允許非最理想的計算,其定義不論怎樣總是相對的,但是引入了計算批準(zhǔn)(結(jié)果批準(zhǔn))的基本原則,而且因此在現(xiàn)存過程的基礎(chǔ)上引入了前期程序開發(fā)的基本原則。XPD機通過在XPD分析機內(nèi)產(chǎn)生的過程在后臺分析目標(biāo)程序的結(jié)果。術(shù)語“分析機”(AnalyticalEngine)是由CharlesBabbage在大約150年前發(fā)明的,指的是(他所致力于研究的)機械式計算機的第一個基本性概念。他的用機械式計算機代替人腦計算機的想法來自于這樣一個令他困擾的問題,即人腦計算機易出錯。本發(fā)明的XPD機是由人們在現(xiàn)代計算機編程中出現(xiàn)的錯誤催生的。XPD分析機通過積累目標(biāo)過程行為的經(jīng)驗,學(xué)會什么是正確的行為,什么是錯誤的行為,什么行為不要分析,以及什么行為是被錯誤地分析。這一過程可以與人類思維的認(rèn)識學(xué)習(xí)過程相比—建立聯(lián)系以及建立下意識反射。在認(rèn)識學(xué)習(xí)過程中,帶領(lǐng)我們通向正確結(jié)果的步驟在我們學(xué)習(xí)過程中處于一個特別的地位。如果以后產(chǎn)生了非預(yù)料結(jié)果,它們是最后一個被懷疑到。如果該分析強迫我們放棄這些先前建立的反射或聯(lián)系,這總是一個相當(dāng)痛苦的過程,即強迫我們重新分析先前的第一次建立反射或聯(lián)系的結(jié)果。在XPD分析機內(nèi),這一忘掉知識是由“喪失知識”表示的,并且發(fā)生在認(rèn)識到以前認(rèn)為是正確的系統(tǒng)結(jié)果是一個故障時。XPD學(xué)習(xí)過程被目標(biāo)過程向前執(zhí)行傳播,并且被對系統(tǒng)結(jié)果(被認(rèn)為是正確的(期望的))的積累所激活。因此分析的結(jié)果是不依賴于人的因素,但是將人的活動以及因此是人的錯誤限制到去分析最終結(jié)果——可視的結(jié)果。為了對于改變的系統(tǒng)要求允許不同的分析結(jié)果,以及在現(xiàn)存過程的基礎(chǔ)上允許前期程序開發(fā),這種靈活性是實實在在需要的。在發(fā)現(xiàn)了先前遺漏的故障時,或者改變系統(tǒng)期望(需求)時,XPD分析機允許取消先前分析結(jié)果的一部分。XPD分析機的一個基本特征是隨著目標(biāo)過程時間的增加將在計算程序結(jié)果的可能出錯位置的不確定區(qū)域減至最小(通過程序結(jié)果(效果)的累積可以看到這一點)。分析的精確度取決于在上述過程時間的座標(biāo)內(nèi)第一個被發(fā)現(xiàn)的故障的位置,或是在說明書中第一個要改變的位置,這種精確度是由所積累的系統(tǒng)結(jié)果進(jìn)行度量。本發(fā)明的概述本發(fā)明的一個目的是提供一種方法,它能將在一目標(biāo)過程一個錯誤的位置或需要修改的地方的不確定性降至最小,其中錯誤是一個故障(非期望的結(jié)果)的原因而且沒有為編譯器發(fā)現(xiàn),所要求的修改是為了與新的預(yù)計結(jié)果一致。這一目的是通過綜合多個過程而實現(xiàn)的,類似于對目標(biāo)過程功能的認(rèn)識理解。首先,在對目標(biāo)過程的靜態(tài)分析的基礎(chǔ)上通過非常嚴(yán)格但一般的規(guī)則建立該目標(biāo)過程的模型,從而在動態(tài)分析期間為進(jìn)一步積累該目標(biāo)過程的知識建立一個庫。在這一模型中,每一個有關(guān)的程序語句在兩維XPD算法空間內(nèi)有一個自己的特定位置。所得到結(jié)構(gòu)的嚴(yán)格性考慮到一種機制,它通過建立連續(xù)的“幻像”,能自動地而且方便地對在該目標(biāo)過程的任兩單元之間的可訪問性(存在一條路徑)進(jìn)行計算?!翱稍L問性”(“accessibility”)定義了“潛在的依賴性”。如果從語句(a)能訪問語句(b),這時(a)的正確性才影響(b)的行為。現(xiàn)舉一例,單元可訪問性的自動計算的一個重要結(jié)果是能明確地識別“非可終結(jié)”過程結(jié)構(gòu)—數(shù)據(jù)獨立無終止循環(huán)。在建立一目標(biāo)過程的模型時,本方法提供了一種方法,用于將目標(biāo)過程算法的控制部分提出和放入一個代表該過程的控制結(jié)構(gòu)的結(jié)構(gòu)中(“算法的XPD構(gòu)架”—XPDFrameofalgorithm)?!八惴ǖ腦PD構(gòu)架”是一個嚴(yán)格的、唯一定義的結(jié)構(gòu),它充分而必要地表示任一過程的控制結(jié)構(gòu)。其次,引入了一種機制,它考慮為每一相關(guān)的基本過程(程序語句)積累特定的動態(tài)信息。這一信息與對基本過程功能的理解有關(guān),并隸屬于在對該目標(biāo)過程模型的先前靜態(tài)分析期間所建立的模型,以及將目標(biāo)過程行為的動態(tài)知識加進(jìn)該模型。更進(jìn)一步,我們將這種特定信息稱作基本過程“知識”。所提到的機制允許建立關(guān)于“因果”關(guān)系的信息,以及過程單元“正確性”的一種“相對的”和“時間依賴性”測量。因此,本發(fā)明的更進(jìn)一步的目的是提供一種機制,它在本發(fā)明所定義的“過程空間”和“過程時刻”{“過程地址”和“本地時刻”}的座標(biāo)內(nèi)以及在本發(fā)明所定義的過程“正確性”和“不確定性”測量內(nèi)將一個過程步定義為“正確”或“不確定”。持續(xù)地積累所提到的基本過程“知識”,并將之在不同的過程單元間傳播。在認(rèn)識到目標(biāo)過程故障或與預(yù)計結(jié)果不同時,就使用這種知識以標(biāo)識在該目標(biāo)過程內(nèi)所需修改的位置。本發(fā)明的另一目的是提供一種手段,該手段通過建立過程的“正確”功能的知識庫用于在目標(biāo)過程維護(hù)期間保護(hù)該目標(biāo)過程的“正確”單元不被改變。本發(fā)明的又一目的是在用戶和目標(biāo)過程所積累的知識之間經(jīng)過XPD機引入一種高級接口機制。本發(fā)明的又一目的是為了方便調(diào)試產(chǎn)生目標(biāo)過程行為的多媒體表示。本發(fā)明的又一目的是引入目標(biāo)過程目標(biāo)碼的一種獨特形式——XPD目標(biāo)碼(XPDObjectCode)以及執(zhí)行它的方法。XPD目標(biāo)碼更適合靜態(tài)和動態(tài)程序分析以及程序維護(hù)。它方便了而且有時也消除了傳統(tǒng)的目標(biāo)過程代碼的重新編譯和重新鏈接,而為了修改該過程,這通常是必需要做的。本發(fā)明的這些和其它目標(biāo)是這樣實現(xiàn)的從一目標(biāo)過程的源代碼中提取出關(guān)于該目標(biāo)過程的特定的靜態(tài)信息,這是建立一個代表該目標(biāo)過程算法的模型所必須的;在該模型的基礎(chǔ)上建立該目標(biāo)過程行為的動態(tài)知識,引進(jìn)一種機制,用于建立對該目標(biāo)過程內(nèi)因果關(guān)系的理解;引進(jìn)一種機制,用于建立該目標(biāo)過程內(nèi)基本過程的“時間依賴性”和“相對”“正確—不確定”屬性;以及引進(jìn)一種方法,用于在執(zhí)行該目標(biāo)過程期間在目標(biāo)過程單元間傳播該“正確—不確定”知識,并且因此自動提高目標(biāo)過程模型的智能層次。本發(fā)明也提供了一些其它特點,通過參考下面的詳細(xì)描述,可以更好地理解。附圖的簡要描述圖1是示例目標(biāo)過程的流程圖;圖2是圖1所示的示例目標(biāo)過程的算法XPD構(gòu)架;圖3展示了復(fù)雜邏輯條件是如何被簡化為兩個或多個精減邏輯條件(ReducedLogicCondition)。圖4表示圖1所示的示例目標(biāo)過程的精減流程圖(ReducedFlowChart)。圖5(A)是圖1所示的示例目標(biāo)過程的XPD圖(XPDGraph),而圖5(B)表示賦給XPD(圖5(A))的對應(yīng)單元的二進(jìn)制地址(BinaryAddress)。圖6展示了IF-THEN-ELSE是如何以XPD構(gòu)架和XPD圖表示的。圖7顯示了建立XPD模型(XPDModel)、XPD資源庫(XPDRepository)和X-Source碼的步驟。圖8顯示XPD機運行的主要部件。圖9顯示了通過以另一示例過程流程圖為例建立連續(xù)“幻像”定義退出訪問指示符(ExitAccessIndicator)和定義該目標(biāo)過程的任兩個單元間可訪問性的機制。圖10顯示了定義一過程終結(jié)的“傳播幻像點”(PropagatedVisionPoint—PVP)的機制。圖11的圖表示了在實現(xiàn)目標(biāo)過程期間可能引進(jìn)的錯誤的根源。圖12的圖表示了三種類型的目標(biāo)過程故障。圖13的圖解釋了在向前執(zhí)行該目標(biāo)過程中XPD機是如何將錯誤位置不確定區(qū)域減至最小的。圖14顯示了如何建立事件定義空間(EventDefinitionSpace)。圖15顯示了如何傳播正確算法空間(CorrectAlgorithmSpace)。圖16顯示了在特定過程地址(ProcessAddress—PA)內(nèi)一個過程單元的正確性“知識”是如何正在被積累的。圖17顯示了定義“祖先”事件的機制。圖18(A)顯示了執(zhí)行XPD目標(biāo)碼的過程;圖18(B)顯示了XPD目標(biāo)碼的兩個部分;圖18(C)顯示了由XPD模型所控制的解釋XPD資源庫的過程。圖19顯示了ACB(分析計算庫—AnalyzedCalculationBase)結(jié)構(gòu)的實現(xiàn)。圖20顯示圖21A所顯示出的示例過程的XPD圖(圖20A)和XPD資源庫(圖20B)。圖21中,示例過程(圖21A)和其X-Source(圖21B)。較佳實施例的描述本發(fā)明將以下列順序說明其主要步驟1.建立目標(biāo)過程算法的XPD構(gòu)架;2.建立該目標(biāo)過程的XPD圖和精減流程圖;3.定義計算目標(biāo)過程“正確性”和確定在目標(biāo)過程中需要修改地方的不確定性的XPD機的原則,這種修改是由于有錯或改變了系統(tǒng)要求;4.定義目標(biāo)過程知識傳播(知識歸納)的XPD機的原則;5.建立該目標(biāo)過程的XPD模型;定義分析計算庫(ACB);建立該目標(biāo)過程的XPD資源庫;6.建立X—Source碼將獲取目標(biāo)過程行為的開支減至最小;利用遞增系統(tǒng)輸出過程同步(IncrementalSystemOutputProcessSynchronized—ISOPS)映象的方式建立用戶—XPD機—目標(biāo)過程之間的接口建立系統(tǒng)輸入過程同步(SystemInputProcessSynchronized—SIPS)映象;7.目標(biāo)過程、其XPD模型、XPD資源庫和X-Source碼的示例;8.該目標(biāo)過程模型的“偽并行”(PseudoParallel)同步執(zhí)行;“延遲的順序”和“延遲的并行”XPD模型的執(zhí)行;9.運行XPD分析機。建立在該目標(biāo)過程內(nèi)因果關(guān)系的分析計算庫;知識歸納;10.引用ISOPS映象以激活XPD分析機“知識演繹”過程,從而持續(xù)地減少不確定性將出錯位置或需修改地方的區(qū)域集中起來;11.解釋XPD圖和XPD資源庫;12.XPD目標(biāo)碼及其執(zhí)行;將XPD模型作為該目標(biāo)過程目標(biāo)碼后的一部分執(zhí)行;13.重新編譯與重新鏈接XPD目標(biāo)碼;14.在測試和生產(chǎn)的所有階段上實現(xiàn)XPD機過程;15.面向結(jié)果的編程(ResultOrientedProgramming—ROP);16.實現(xiàn)程序聽診(ProgramStethoscope);1.建立目標(biāo)過程算法的XPD構(gòu)架在下面的描述中,我們將顯示出是如何從XPD圖中建立XPD模型的。目標(biāo)過程的XPD圖的構(gòu)造可以是先于、伴隨或后于該過程算法的XPD構(gòu)架的建立。雖然可以將建立算法的構(gòu)架的步驟完全跳過,但為了方便地展示該構(gòu)架和XPD圖之間共有的一些重要屬性,我們還是將進(jìn)行描述。另外,算法的XPD構(gòu)架可以總是用作該目標(biāo)過程控制結(jié)構(gòu)的一個十分緊湊和嚴(yán)格(唯一定義)的表示。在下列描述中將包含幾個定義和原理。這些是必須的,因為作為XPD機運行基礎(chǔ)的一些目標(biāo)和術(shù)語是先前未曾定義的。下列是XPD構(gòu)架、XPD圖和XPD模型在其上運行的目標(biāo)集。我們將這一集合稱為XPD目標(biāo)集。{[,A,X,L,D,E,W,N,=,R,*,C,+,S,/,!,(,),V,i,}其中′[′過程入口;′A′算術(shù)或賦值語句;′X′函數(shù)或子程序調(diào)用語句,而不是圖形庫子程序或函數(shù)。例如CALL,PERFORM;′L′IF語句(一個輸入和兩個輸出);′D′循環(huán)語句例如DO,F(xiàn)OR,WHILE;′E′輸入語句例如READ;′W′輸出語句或圖形庫子程序或函數(shù);例如WRITE(),CALLMOVETO(X,Y,XY),其中{x,y}—屏幕座標(biāo);′N′空語句例如CONTINUE;′=′STOP語句;′R′RETURN語句;′*′GOTO語句;′C′假設(shè)情況下的循環(huán)終結(jié)語句或其位置;例如CONTINUE,ENDDO;′+′被賦值的GOTO語句;′S′ASSIGN(ALTER)語句;′/′GOTO的入口或其位置例如由GOTO所引用的標(biāo)號位置或段名;′!′在假設(shè)情況下的ENDIF或其位置;′(′LC域的開始;′)′LC域的閉合;′V′ELSE;′i′—不包括′(′和′)′的XPD目標(biāo)的目標(biāo)類的過程單元的索引;—XPD目標(biāo)′(′和′)′的LC域的級;在下列敘述中,我們討論只有一個模塊的計算機程序過程,雖然我們的結(jié)論可以很容易地擴展到表示一個程序系統(tǒng)的過程中。我們將模塊理解為是一個有一個入口點的主程序或一個子程序(即子程序、函數(shù)或程序段)。雖然下面的示例提供了有一個退出的程序,但所描述的實現(xiàn)方式對于有多個退出的模塊同樣起作用。通過這里所描述的對于只有一個入口的模塊的XPD機實現(xiàn)方式,可以很方便地得到用于具有多個入口的模塊的XPD機的實現(xiàn)方式。圖2表示了圖1的流程圖所表示的示例目標(biāo)過程的XPD構(gòu)架。定義F1“精減的邏輯條件”(LC)是一具有一個控制輸入和兩個控制輸出的過程單元,其兩個控制輸出根據(jù)其布爾(0或1)解確定該過程的未來方向。在XPD目標(biāo)集中,LC被表示為′L′或′D′目標(biāo),我們將稱作否定解(negativesolution)—0解或低期望解,和肯定解(positivesolution)—1解或高期望解。在目標(biāo)過程包括具有超過兩個輸出的控制單元時,在以XPD構(gòu)架和XPD圖表示期間,就自動地將這種控制單元精減為兩個或多個LC。參看圖3,結(jié)果的LC數(shù)等于控制輸出數(shù)減1,因為每有一個LC就將控制輸出數(shù)增加1。定義F2“主分枝”是這樣一種分枝,在表示沿著過程執(zhí)行的方向從主分枝的開始到其“過程終結(jié)”的一個通路,其中所遇到的邏輯條件都是經(jīng)過其低期望解。主分枝有兩類開始1.啟動“入口主分枝”的過程入口(圖1與圖4中示為開始(START));2.LC的高期望解。定義F3“過程終結(jié)”是XPD目標(biāo)集的下列目標(biāo)XPD構(gòu)架的表示—GOTO′*′,′+′—循環(huán)終結(jié)′C′—RETURN′R′—STOP′=′有兩類過程終結(jié)定義F4“退出終結(jié)”是終結(jié){′R′,′=′},導(dǎo)致從過程中退出。定義F5“重繞終結(jié)”是終結(jié){′*,′+′′C′},它將過程重繞至在同一主分枝中定義的單元,或是在XPD圖中定義的從當(dāng)前主分枝向左的主分枝中定義的單元。因此,主分枝的長度依賴于其終結(jié)的位置,而終結(jié)的位置又取決于主分枝定義的順序。表示XPD構(gòu)架和XPD圖的順序可以用“下一最小期望”(NextLowestPotential)原理描述。語法分析該算法的“下一最小期望”順序步驟1定位于開始(START)。步驟2對所遇到的LC經(jīng)由“低期望解”(0-解)對該過程進(jìn)行語法分析,直至到達(dá)先前已經(jīng)歷的過程單元,或一個退出(EXIT)。步驟3如果存在的話,回至經(jīng)由“低期望解”所遇到的最后一個LC;定位于其“高期望解”;從步驟2進(jìn)行;如果經(jīng)由“高期望解”已經(jīng)歷所有的LC,則完成了該目標(biāo)過程算法的語法分析。步驟1的每次執(zhí)行就建立一個主分枝,該主分枝由“退出終結(jié)”或“重繞終結(jié)”所終止。因此就從XPD構(gòu)架和XPD圖中消除了向前分枝的那些GOTO結(jié)構(gòu)。原理有n個精減LC的過程包括(n+1)個終結(jié)和(n+1)個主分枝,其中每一主分枝是以用其終結(jié)標(biāo)識。原理(n+1)個主分枝的全體對于表示該過程的所有單元是充分而且必要的。說明在沒有LC(即沒有條件控制)的過程中,只有一個分枝—入口主分枝(ENTRYMAINBRANCH)。通過經(jīng)由LC的高期望解打開新的主分枝,每個LC就將主分枝數(shù)增加1。在XPD圖中,每個主分枝和其終結(jié)用它們的b-座標(biāo)標(biāo)識(圖5(A))。該過程算法的構(gòu)架是在下列布爾表達(dá)式的基礎(chǔ)上建立的LAV!LB讀作如果L則做A,否則(非L)做B。在XPD構(gòu)架中,我們引入括號′(′,′)′,它們表示邏輯級和終結(jié)的范圍,它允許循環(huán){′*,′+′,′C′}和退出{′R′,′=′}。我們也可省略“!L”,因為很顯然,在屬于特定L的ELSE符號′V′之后,必然跟著′非L′。因此我們得到(iLAVB)i,其中A和B是LCL的相應(yīng)的“0-子域”和“1-子域”,而i代表“LC域的級”。定義如下定義F6“t—經(jīng)過”是從該過程入口至其終結(jié)的一次經(jīng)過。原理在任一過程中有(n+1)個t-經(jīng)過,其中n是該過程中LC的個數(shù)。每個t-經(jīng)過唯一地由其終結(jié)標(biāo)識(圖5(A))。定義F7“LC分枝”是經(jīng)由該LC的t-經(jīng)過的一部分,它位于該LC后面。每一LC有1個或多個0-分枝和1個或多個1-分枝。在圖1中,LCL1有2個1-分枝,用′d′和′h′稱出。定義F8“LC的0-子域”是位于該LC的0-分枝上的所有過程單元的組合。定義F9“LC的1-子域”是位于該LC的1-分枝上的所有過程單元的組合。定義F10“LC域”是該LC的0-子域和1-子域的組合。定義F11“LC域級”(邏輯級)是該LC在經(jīng)過它自己的t-經(jīng)過中的次序。舉例在圖1中,有下列邏輯級L1打開邏輯級1L2和L3打開邏輯級2D1打開邏輯級3在圖1中,主分枝用線“a”、“b”、“c”、“d”、“e”標(biāo)出。在圖5(A)中可以看到,它們分別由位于b-座標(biāo)的1、2、3、4、5的終結(jié)所標(biāo)識。在圖1中,LCL1的0-域用虛線“f”示出,LCL的1-域用虛線“g”示出。XPD構(gòu)架的建立是通過以一種特定的次序表示主分枝并且將LC顯示出其對應(yīng)的級而進(jìn)行的。參看圖2,XPD構(gòu)架建立成一種代數(shù)表達(dá)式形式,它包含幾層括號(...(...(...)...)...(...)...)12332221代數(shù)表達(dá)式的規(guī)則是在內(nèi)層(較高級)括號封閉之前不能封閉外層(較低級)括號。在XPD構(gòu)架中,括號表示邏輯級。也適用同一規(guī)則在較高級(內(nèi)層)邏輯域封閉之前不能封閉較低級(外層)邏輯域。定義F12“打開LC域”在我們開始在構(gòu)架中表示該域時。定義F13“封閉LC域”當(dāng)在構(gòu)架中完成該域的表示時。定義F14“LC的活動域”是最高的而且仍打開的LC的域。定義F15“過程段”是主分枝的一部分,它位于下列過程單元過程入口、過程終結(jié)和LC之間。過程終結(jié)和LC終止過程段。它們屬于自己所終止的段。作為一個過程段的終結(jié),每一LC同時擁有兩個其它段該LC的一個否定段(經(jīng)由0-解)和該LC的一個肯定段(經(jīng)由其1-解)。段具有兩個屬性1.邏輯級,和2.二進(jìn)制地址(還要進(jìn)一步描述)。定義F16“過程段的邏輯級”等于該LC的邏輯級,該邏輯級是該段所屬于的級。定義F17“入口段”是該過程入口所擁有的過程段。入口段的邏輯級是0。有(2n+1)個過程段,其中n是過程中LC的個數(shù)。每個LC有兩個段,另外再加上一個入口段。比如,在圖1中,該目標(biāo)過程包括4個LC和9個過程段。對于該目標(biāo)過程的XPD構(gòu)架和XPD圖,對過程單元的加標(biāo)號是以建立XPD構(gòu)架或XPD圖的次序進(jìn)行的。在圖1所示的示例目標(biāo)過程中段由XPD目標(biāo)集所表示的過程單元1A1/1A2L12/2A3L23*14A5X1D15A4C16A6W1*27W2E1L38A7=9A8*1圖2是圖1所表示的該過程的XPD構(gòu)架。根據(jù)先前所定義的下一最小期望次序,開始從該入口主分枝建立算法的構(gòu)架。在該過程被下列任一目標(biāo){*,+,C,R,=}所終止,我們就返回到上一個經(jīng)過其小期望解(NO)的LC,而且開始經(jīng)歷屬于該LC的高期望解(YES)的主分枝。以此方式我們順序地表示該過程的所有(n+1)個主分枝,其中n是該過程內(nèi)的LC數(shù)目。圖6示出了在XPD構(gòu)架和XPD圖中IF-THEN-ELSE結(jié)構(gòu)的表示。L1(P3)的1-域是緊接在L1(P2,P4)的0-域被封閉之后才表示的。將目標(biāo)過程的一個算法抽取放進(jìn)算法XPD構(gòu)架之中的方法,其中算法的XPD構(gòu)架采取根據(jù)“下一最小期望”規(guī)則建立的唯一定義的基本形式步驟1將0賦給活動邏輯級;定位于該過程入口;步驟2經(jīng)歷主分枝;每一個經(jīng)歷的可執(zhí)行單元賦給一個名字,該名字由XPD目標(biāo)集的元素構(gòu)成,其對應(yīng)的索引值增1;(例如A1,A2,L1,A3,L2,*1表示入口主分枝),語句根據(jù)被賦給的名字存貯在XPD過程資源庫中(圖7和圖8);在當(dāng)前經(jīng)歷的主分枝中遇到LC時,就經(jīng)過其低期望解(NO);該LC打開下一邏輯域,將活動邏輯級增加1;在構(gòu)架中,每一個被經(jīng)歷的LC是用左括號帶上一個表示所打開的邏輯域的級,后跟帶有相應(yīng)索引的符號L或D;(iLj或(iDj;步驟3當(dāng)遇到一個過程終結(jié)時,終止該段。如果該終結(jié)是一重繞終結(jié){*,+},就將一項/i插在控制返回的位置上,索引(i)增加1,除非該項已經(jīng)存在;將項的索引(i)賦給該重繞終結(jié)。步驟4檢查活動邏輯域IF活動邏輯級為0,則完成XPD構(gòu)架的構(gòu)造;STOP;ELSE宣布封閉該邏輯域的子域;ENDIF步驟5檢查被封閉的子域;IF所封閉的子域是0-子域,則將符號′V′(ELSE)放入構(gòu)架中;語法分析從對應(yīng)的LC的高期望(1-解)處開始,以建立該LC的主分枝;宣布打開該級的1-子域;GOTO步驟2;ELSE(所封閉的子域是1-子域)因為封閉了活動邏輯域的0-子域和1-子域,所以宣布封閉活動邏輯域;通過用帶有指示所封閉的邏輯域的級的整數(shù)封閉括號,在構(gòu)架中描述該邏輯域的封閉′)i′;將活動邏輯級減1;將剛剛封閉的邏輯域(i....)i看作是由相應(yīng)的LC所終止的段的終結(jié);在封閉該LC的域時,則宣布對應(yīng)的段被終止;GOTO步驟5;ENDIF上述示例顯示出,在XPD構(gòu)架結(jié)構(gòu)中(圖2),較高邏輯級的LC的域位于較低邏輯級的域內(nèi)。在任一過程中,可以有級N的最大F邏輯域,其中F=2N-1。2.建立目標(biāo)過程的XPD圖和精減流程圖。下面解釋建立圖1的目標(biāo)過程的XPD圖(圖5(A))和精減流程圖(圖4)。定義G1“精減流程圖”(圖4)是流程圖形式的XPD圖。精減流程圖是在與XPD一樣的座標(biāo)k和b上以及以與XPD圖同樣原理建立的。下面描述的建立XPD圖的規(guī)則同樣應(yīng)用于精減流程圖的建立。之所以解釋作“精減”流程圖,是因為控制方向的所有可能變化被減少到1—向右,即一個LC的高期望解。低期望解通過讓控制繼續(xù)“下落”并不改變控制的方向。跳轉(zhuǎn)只允許向后(向上和向左),而且用調(diào)用對{終結(jié)-其重繞入口}表示,比如圖5(A)中的{*1/1}或{*2/2}或{C1D1}。定義G2LC的否定狀態(tài)(0-狀態(tài))是在if(如果)計算時,LC得到0-解的狀態(tài)。LC的狀態(tài)是由在其運算中所涉及的變量狀態(tài)定義的。定義G3LC的肯定狀態(tài)(1-狀態(tài))是在if(如果)計算時,LC得到1-解的狀態(tài)。定義G4“二進(jìn)制地址”(BA)是由在t-經(jīng)歷中直至一過程單元的LC的解的1和0的組合,其中將過程入口的二進(jìn)制地址賦為1。屬于同一段的過程單元的BA是相同的。LC的0-段BA是將該LC的BA乘以2而得到的(即在其右端加一個0)。LC的1-段BA是將該LC的BA乘以2加1得到的(即在其右側(cè)加一個1)。例如在圖4中,L3的BA是11,A7的BA是110,而A8的BA是111。XPD圖是在兩個方向上建立的。在我們的實現(xiàn)方式中它是垂直向下和水平向右建立的。主分枝垂直向下的,同時表示該過程執(zhí)行移動的軌跡,除非該軌跡由位于該路徑上的一個LC的肯定狀態(tài)改變。每一軌跡建立在其b座標(biāo)上,軌跡永遠(yuǎn)不會交叉。LC在其高期望解下具有將控制轉(zhuǎn)移到其它軌跡的可能,其中b座標(biāo)與該LC的肯定狀態(tài)有關(guān),并且位于當(dāng)前軌跡的右側(cè)。這種轉(zhuǎn)移在XPD圖中用向右的水平線表示。從XPD構(gòu)架開始的方便之處在于主分枝集合在那里已定義為該構(gòu)架的各部分,它們被用′V′符號分開。在XPD構(gòu)架中,主分枝已經(jīng)以右順序表示。采用下一最小期望”規(guī)則將目標(biāo)過程的一個算法提取出放入“雙向終止的”XPD圖(bi-directedterminatedXPDGraph)中。參考圖5(A)步驟1XPD圖從(k,b)座標(biāo)為(1,1)的過程入口開始;將該過程入口的二進(jìn)制地址賦為1;開始入口主分枝;步驟2在經(jīng)歷該主分枝時,在XPD圖上,用不斷遞增的k-座標(biāo)和恒定的b-座標(biāo)表示每一單元;每一單元被賦予該單元所屬段的一個BA,除非是從XPD構(gòu)架中構(gòu)造XPD圖,否則必須進(jìn)行下面的(a)和(b)(a)對該過程單元賦予一個名字,該名字由XPD目標(biāo)集的對應(yīng)元素和不斷遞增1的索引構(gòu)成。(b)以所賦給的名字將該語句記錄在過程資源庫中(圖7);步驟3在經(jīng)歷該主分枝遇到LC時是經(jīng)過其0-解。步驟4在一過程終結(jié)停止主分枝的構(gòu)造時IF所有LC已經(jīng)歷其1-解則建立XPD圖STOPELSE沿著與過程執(zhí)行相反的方向再次跟蹤當(dāng)前t-經(jīng)歷,直至遇到經(jīng)歷其0-解的LC;在XPD圖座標(biāo)(next_k,next_b)開始該LC的主分枝,其中next_k=(LC的k)+1,同時next_b是下一可使用的軌跡(座標(biāo)b)GOTO步驟2;ENDIF重要的是要注意兩個XPD圖的維數(shù)之一,NB,就是作為程序復(fù)雜性量度之一。McCabe的理論“AComplexityMeasure”發(fā)表在IEEETransactionOnSoftwareEngineering上(VolSE-2,No.4,1976年12月,pp308-302)。McCabe將“循環(huán)復(fù)雜度”(CyclomaticComplexity)定義為線性獨立路徑的最大個數(shù),對于一個入口和一個出口,其“循環(huán)復(fù)雜度”由下式定義V(G)=e-n+2其中,V(G)一循環(huán)復(fù)雜度e—邊的個數(shù)n—結(jié)點個數(shù)(入口結(jié)點+退出結(jié)點+分支結(jié)點)我們將這個公式稱為循環(huán)復(fù)雜度的McCabe公式。邊是我們所稱的段,邊數(shù)e=2q+1,這也是過程段的個數(shù),其中q是LC的個數(shù);分枝結(jié)點是我們所稱的LC,分枝結(jié)點的個數(shù)是q,其中q是LC的個數(shù)。那么,對于一個入口和一個退出結(jié)點,根據(jù)循環(huán)復(fù)雜度的McCabe公式e=(2q+1)n=1+1+qV(G)=(2q+1)-(q+2)+2=q+1V(G)=q+1,其中q是LC的數(shù)目。因此,由McCabe的“循環(huán)復(fù)雜度”所定義的數(shù)等于LC的個數(shù)加1,也等于NB,其中NB是主分枝的數(shù)。前一公式對應(yīng)于下一研究工作,這在1989年授予的第4853851號專利中作了描述“等于線性獨立路徑的循環(huán)數(shù)就是在流程圖的最寬部分所計的路徑數(shù)。這一計算循環(huán)數(shù)的方法未被McCabe描述”。XPD算法空間的第二維(MK)也可用于描述一個算法的復(fù)雜性。MK代表從過程入口到一終結(jié)的最長路徑,因此等于在最長的t-經(jīng)過上的基本過程的個數(shù)。維[MK,NB]的矩形空間表現(xiàn)為目標(biāo)過程算法復(fù)雜性的一個好的標(biāo)識。我們將這個空間稱為目標(biāo)過程的“算法空間”(AlgorithmSpace)。比如,圖1示例中的算法空間是[14×5]圖5(A)顯示了XPD圖的下列有益特點1.每一單元可以由兩座標(biāo)(k,b)唯一尋址;2.在兩個方向上建立圖—在我們的實現(xiàn)方式中是向下和向右—其中,向下只被高期望解的向右移動所打斷。3.非“退出”終結(jié)(STOP或RETURN)的過程終結(jié)能“重繞”該過程。這種重繞只允許向后,即左上。之所以這樣,是因為在構(gòu)造XPD構(gòu)架和XPD圖期間通過定義其主分枝消除了向前跳轉(zhuǎn)。4.對每一段賦一個二進(jìn)制地址,它唯一地標(biāo)識了在目標(biāo)過程中該段的邏輯位置。5.XPD圖允許簡便地確定過程單元間的“可訪問性”。定義G5“S1可訪問單元S2”在從S1到S2有一條路徑時。即如果在一些輸入組合上,有可能在S1執(zhí)行之后一段時間執(zhí)行S2,則S2可被S1訪問。兩個過程單元之間存在“可訪問性”是一個單元正確性影響另一過程單元結(jié)果的必要條件,而該“可訪問性”是兩個過程單元間存在“因果”關(guān)系的必要條件。最近,為了研究程序的結(jié)果,提出了程序依賴性的幾個定義。兩種基本類型的程序依賴性是“控制依賴”和“數(shù)據(jù)流依賴”。程序依賴性用于如軟件測試、調(diào)試和維護(hù)這種嚴(yán)格的目的。直到最近,由于看到這種實現(xiàn)方式十分困難,只是非正式地認(rèn)為使用程序依賴性的大多數(shù)建議是合理的。在A.Podgurski和L.A.Clark的文章“AFormalModelofProgramDependenciesandItsImplicationforSoftwareTesting,Debugging,andMaintenance”IEEETransactionofSoftwareEngineering16,9,1990年9月pp965-979)中,作者提出了術(shù)語“語義依賴性”,認(rèn)為它是一條語句潛在影響另一條語句執(zhí)行的行為(而且因此是結(jié)果)的必要條件。然而,這篇文章證明控制和數(shù)據(jù)流的依賴性的不同概括并不是自動識別程序錯誤的充分信息,因為它們甚至也不是識別存在“語義依賴性”的充分信息,而后者無論如何也不是以識別程序錯誤。對于“語義依賴性”,本發(fā)明所介紹的自動確定單元可訪問性的方法可定義為在目標(biāo)過程的任兩個單元間計算存在“語義”依賴的必要條件的一種實際方法。換句話,所介紹的方法實際上計算下列可能性1.語句S1造成S2的錯誤動作;2.語句S2要受到修改S1的影響;能夠確定過程單元間的可訪問性也就是解決了現(xiàn)存的“確定非終止性”數(shù)據(jù)獨立無終止循環(huán)(“definitenon-terminability”DataIndependentEndlessLoop)的問題。我們將對于圖9的示例,說明如何使用XPD圖二進(jìn)制地址運算方便地確定—Si和Sj間的可訪問性;—過程中建立數(shù)據(jù)獨立無終止循環(huán)的過程部分的存在。普遍認(rèn)為程序是否終止的問題是不可解的。我們將過程的“可終止性”(terminability),即能夠終止的問題分為兩個方面—數(shù)據(jù)獨立無終止循環(huán)—數(shù)據(jù)依賴無終止循環(huán)數(shù)據(jù)獨立無終止循環(huán)由不會進(jìn)入“退出”終結(jié)的過程單元構(gòu)成。數(shù)據(jù)依賴無終止循環(huán)是這樣一種結(jié)構(gòu),在進(jìn)入它之后,在某些原因下,而不是在缺少到達(dá)這些退出終結(jié)的控制路徑下,該控制將永遠(yuǎn)到達(dá)不了一個退出(STOP或RETURN)。這種原因是下述任一種a.缺少程序變量的操縱,這些變量在特定的控制路徑上可能會改變控制通路,或b.沿著取LC值的方向通過在低期望狀態(tài)與高期望狀態(tài)改變它們的狀態(tài)而改變這些程序變量。在a和b兩種情況下,控制將進(jìn)入一個無終止循環(huán),以同樣的順序經(jīng)過同一個終結(jié),而不能到達(dá)一個“退出”終結(jié)。定義G6*bn指b座標(biāo)等于n的終結(jié)。(舉例在圖10中,*b3指b=3的GOTO終結(jié),而*b5指b=5的“退出”(exit)終結(jié))。定義G7MBn指在b座標(biāo)等于n上建立的一個主分枝。(舉例在圖9中,MB3指在座標(biāo)b=3上建立的主分枝)。數(shù)據(jù)依賴無終止循環(huán)的舉例如果在/1和*1之間的路徑上沒有重新定義將被L2和L3檢查的值的單元,則一旦L2和L3第一次取它們的低期望解,終結(jié)*b1就產(chǎn)生數(shù)據(jù)依賴無終止循環(huán)(因為在目標(biāo)過程向前執(zhí)行過程中L2和L3的狀態(tài)將一直不改變)數(shù)據(jù)獨立無終止循環(huán)的舉例在圖9中,主分枝MB2、MB3、MB4表示數(shù)據(jù)獨立無終止循環(huán),如果對L3肯定解,過程將進(jìn)入無限循環(huán)之中,而不管在那些分枝中有什么數(shù)據(jù)操縱語句。雖然數(shù)據(jù)依賴無終止循環(huán)為過程的“非終止性”提供了一種可能,它們并不必然是錯誤的結(jié)構(gòu),因為它可能將LC設(shè)置為無限循環(huán)狀態(tài),而輸入數(shù)據(jù)卻永遠(yuǎn)不可能這樣。在圖9中項/q不對應(yīng)任何終結(jié),只是作為這樣一個事實的示例而示出即使在路徑/1到*1上L2和L3非數(shù)據(jù)依賴,L2的否定子域內(nèi)L3的位置(其中L2的重繞終結(jié)*b1直接將過程控制重繞到L2的前面)并不必然是一個錯誤。這是因為如果L3已經(jīng)由項/q接收了控制,將控制返回到項/1并不必然導(dǎo)致L2得到否定解,從而產(chǎn)生一個無終止循環(huán)。數(shù)據(jù)獨立無終止循環(huán)是在過程構(gòu)造過程中其它確定性錯誤造成的。數(shù)據(jù)獨立無終止循環(huán)的檢測是通過計算“重繞”終結(jié)和“退出”終結(jié)之間的可訪問性而進(jìn)行的。同一過程也可以用于計算XPD圖的任兩個單元間的可訪問性。(比如在圖9的Si和Sj之間)XPD圖可以對由下列三種期望所確定的單元間的可訪問性進(jìn)行解釋—一個主分枝內(nèi)的“自由下落期望”;—LC的“轉(zhuǎn)移期望”;—一終結(jié)的“重繞期望”;“自由下落”可能是一個過程單元在另一個之后激活時由順序過程的自然屬性所確定。定義G8“LC的轉(zhuǎn)移期望”(ShiftPotenfialofLC”)是由于該LC的肯定解而增加b-座標(biāo)的LC的期望。舉例在圖5(A)中LCL2、D1和L3有轉(zhuǎn)移期望1,而L2有轉(zhuǎn)移期望3。定義G9“終結(jié)的重繞期望”是一終結(jié)減少BA的期望。BA的值如下確定如果bbb是一個位序列;則bbb0>bbbbbb1>bbb0bbb1>bbb00即為了進(jìn)行比較,將BA左對齊,將對應(yīng)值從左往右進(jìn)行比較,直至遇到第一個不匹配,其中1>0>_,_是一個空位置,在左邊的位位置具有較高權(quán)重。在圖5的示例中BA(L2)>BA(L1),因為10>1BA(W2)>BA(A3),因為11>10BA(W2)>BA(A5),因為11>1010定義G10“段地址”(SA)是{BA,K}偶,其中BA是該段的一個二進(jìn)制地址,而且k是該段內(nèi)的k-座標(biāo)。段地址可以進(jìn)行比較。在對SA的{BA,K}進(jìn)行比較時,BA具有較高的權(quán)重,即(11,7)>(10,7),(11,7)>(11,6)。在圖9示例中/3的段地址是{10010,rk3}。定義G11“單元的幻像”如果SA(S2)是SA(S1)的后代,則單元S2位于單元S1的幻像之內(nèi),或者說S2被S1看見,而且S1看見S2。定義G12“SA(S2)是SA(S1)的一個后代,”如果S2的BA是在S1的BA右邊后接續(xù)二進(jìn)制數(shù)字而形成的,或者如果BA(S1)等于BA(S2)而且K(S2)大于K(S1)。如果在一t-經(jīng)過中有一條從S1到S2的路徑,則S2在S1的幻像內(nèi)。記住在t-經(jīng)過不經(jīng)過終結(jié)。舉例在圖4中,A6在A3的幻像內(nèi),因為發(fā)現(xiàn)10在1011內(nèi)是左對齊的。(A6被A3看見,而且A3看見A6)舉例因為101可以左對齊映射到1011,因此段1011內(nèi)的任何單元{A6,W1,*b3}位于段101的任一單元{A4,X1,D1}的幻像內(nèi)。舉例X1位于A4的幻像內(nèi),因為它們的BA都是101,同時X1的K大于A4的K。定義G13“重繞終結(jié)的幻像”是該重繞入口的幻像;退出終結(jié)的幻像為空。定義G14“S2可為S1訪問”如果S2位于S1的“訪問域”內(nèi)。定義G15過程單元的“訪問域”是該過程單元相繼擁有的所有幻像的組合。術(shù)語“相繼”指的是幻像被其終結(jié)幻像進(jìn)行傳播。因此,一過程單元的訪問域是該單元的幻像+它所看到的終結(jié)的幻像+從這些終結(jié)所看到的終結(jié)的幻像,如此不斷進(jìn)行下去。“訪問域”的更準(zhǔn)確的定義將在下面給出,并通過在定義G22所提供的過程終結(jié)的“傳播幻像點”(PVP)定義而提供。圖9為XPD圖的每一終結(jié)建立的5個屬性。一個終結(jié)的屬性是—終結(jié)的二進(jìn)制地址(TBA);—終結(jié)的重繞二進(jìn)制地址(RBA);—終結(jié)的rk;—傳播幻像點(PropagatedVisionPoint-PVP)—退出訪問指示符(EAI)定義G16重繞二進(jìn)制地址(RBA)是該重繞終結(jié)入口的二進(jìn)制地址;(退出終結(jié)的RBA是0);rk是一重繞終結(jié)入口的K-座標(biāo),(退出終結(jié)的rk等于0)。定義G17“退出訪問指示符”(EAI)是一個指示符,對于“封閉”的終結(jié)置為0,而對于開放的終結(jié)置為1。定義G18“開放終結(jié)”是一退出終結(jié)或一能訪問該退出終結(jié)之一的重繞終結(jié)。定義G19“封閉終結(jié)”是不訪問任一退出終結(jié)的一重繞重結(jié)。定義G20“封閉區(qū)”是由封閉終結(jié)所定義的相鄰主分枝的組合。一旦過程的控制進(jìn)入一封閉區(qū)內(nèi)部,就不能夠從中退出,即該過程將不會終止。示例在圖9中,{*b2,*b3,*b4}定義一封閉區(qū)。定義G21一過程終結(jié)的“傳播幻像點”(PVP)的位置由圖10進(jìn)行描述。圖10描述了終結(jié)的幻像傳播和設(shè)置兩個或多個過程終結(jié)的傳播幻像點的原則。在這個圖中,用虛線表示一建立的幻像,用實線表示從終結(jié)到其重繞入口的路徑。參考圖10(A)根據(jù)我們的定義,該終結(jié)的幻像是其重繞入口的幻像。如果過程終結(jié)*n的重繞入口/n能見到另一終結(jié)*i,該終結(jié)*i的重繞入口/i可以見到重繞入口/n,那么我們說,*n的幻像被*i的幻像傳播,*i的幻像成為終結(jié)*i和*n的傳播幻像點。一終結(jié)的傳播幻像點是用一特定重繞入口的段地址所表示。如果終結(jié)幻像不被其它終結(jié)的幻像傳播,則該終結(jié)的傳播幻像點是其自身幻像,即其入口的幻像。終結(jié)幻像傳播的同一機制在若干傳播幻像與另一終結(jié)的幻像之間有效。在圖10(A)中,終結(jié)*K的重繞入口,即/k,可以看到終結(jié)*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過程單元的“訪問域”是其自身幻像與位于該單元幻像內(nèi)的所有終結(jié)的傳播幻像的組合。參看圖9,在示例中,單元Si的訪問域是項/1的幻像,因為它是Si的幻像與*b1的PVP、*b2的PVP、*b3的PVP和*b4的PVP的組合,而*b1、*b2、*b3與*b4位于Si的幻像內(nèi)。*b1的PVP剛巧是包括Si的幻像和/2的幻像的組合,即(*b2,*b3,*b4)的PVP。舉例單元Se(屬于MB2,K座標(biāo)<=rk2)的訪問域是該單元的幻像,因為它擁有/2的幻像,即是Se的幻像內(nèi)的*b2、*b3、*b4的PVP。舉例單元L5的訪問域是/2的幻像,因為它是在L5幻像內(nèi)的*b3和*b4的傳播幻像點;L5的幻像由/2的幻像擁有,并不計入在內(nèi)。當(dāng)在一重繞入口的幻像內(nèi)的所有終結(jié)表明該入口為它們的PVP時,其結(jié)果表明是一封閉區(qū)—(數(shù)據(jù)獨立無終止循環(huán))舉例*b2、*b3和*b4主張/2為它們的PVP,而/2在其幻像內(nèi)無其它終結(jié)。這就定義了一封閉區(qū),即數(shù)據(jù)獨立無終止循環(huán)。為了找到“封閉”終結(jié)和“封閉區(qū)”,即表示數(shù)據(jù)獨立無終止循環(huán)的結(jié)構(gòu),我們?yōu)閄PD圖的每一終結(jié)建立退出訪問指示符(EAI)。建立退出訪問指示符(EAI)參看圖9,在完成XPD圖的構(gòu)造后,每一終結(jié)的TBA、RBA和rk就已知了。開始,PVP的值是從終結(jié)的重繞入口建立的,即終結(jié)的rk和RBA。最初,所有重繞終結(jié)的EAI用0填滿(即設(shè)置為封閉),所有退出終結(jié)的EAI用1填滿(即設(shè)置為開放)。從b=1到b=NB的經(jīng)過,相對于所有其它終結(jié)的BA和PVP檢查終結(jié)的PVP的SA以試圖傳播(降低)當(dāng)前所檢查終結(jié)的PVP,并且若終結(jié)仍為封閉則有可能打開該終結(jié)。我們將終結(jié)*bi的PVP稱為PVP*bi,將*bi的EAI稱為EAI*bi。參看圖9示例I開始,將終結(jié)的PVP置為它們重繞入口的SAPVP*b1的BA置為10;PVP*b2的BA置為1001;PVP*b3的BA置為10010;PVP*b4的BA置為10011;PVP*b5的BA置為0,因為*b5是一“退出”終結(jié);PVP*b6的BA置為10011;PVP*b7的BA置為10;II傳播PVP以及設(shè)置EAI(A)以從*b1到*bn的順序經(jīng)歷終結(jié)時,其中n是NB,它是主分枝的數(shù)目,就XPD圖所有其它終結(jié)檢查每一終結(jié),以試圖a利用先前描述的規(guī)則(G21),傳播終結(jié)PVP;b通過利用下列規(guī)則設(shè)置EAI為1而開放該終結(jié)。定義G23如果封閉終結(jié)的PVP能看到任一開放終結(jié),就通過將其EAI置為1而宣布所檢查的終結(jié)為開放的。PVP*b1{10,rk1}看見,*b2,*b3,*b4,*b5,但這些終結(jié)PVP沒有一個看見PVP*b1;PVP*b1不改變。PVP*b1{10,rk1}看見開放*b5(1010)。開放*b1將EAI*b1置為1;PVP*b2{1001,rk2}看見*b3、*b4,即10010和100111,但是這些終結(jié)PVP,即10010和10011沒有一個能看見PVP*b2;*b2的PVP不改變;在*b1和*b5,即1000和1010時亥,PVP*b2{1001,rk2}見不到任一開放終結(jié);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仍然見不到任一開放終結(jié);EAI*b3保持為0;PVP*b4{10011,rk4}看見*b3(100110),而且PVP*b2{1001,rk2}可看見PVP*b4,即{10011,rk4};將PVP*b4置為{1001,rk2};被傳播的PVP*b4仍然見不到任一開放終結(jié);EAI*b4保持為0;PVP*b5不改變,因為它是一個退出終結(jié);PVP*b6{10011,rk6}看見*b3和*b4,而后者當(dāng)前的PVP{1001,rk2}能看見PVP*b6;將PVP*b6置為{1001,rk2};被傳播的PVP*b6仍然見不到任一被開放的終結(jié);EAI*b6保持為0;PVP*b7{10,rk7}能看見從*b1到*b6的終結(jié),而它們中任何一個都看不見PVP*b7;PVP*b7不改變;PVP*b7置為{10,rk7}可看見開放終結(jié)(1000和1010);開放*b7將EAI*b7置為1;在一些過程中(參看圖10(B)),在最終置*n的PVP之前,檢查終結(jié)*i,其中*i被*n的幻像傳播,因為*n的PVP又可能被其它終結(jié)的幻像升級,如此等等。因此,確信進(jìn)行了所有可能的PVP和EAI的升級的唯一途徑是再次重復(fù)依從*b1到*bn的順序檢查所有終結(jié)的步驟(A)。如果在最后一遍中未進(jìn)行任何升級,就結(jié)束PVP和EAI升級的過程。在最壞情況下,要求經(jīng)歷終結(jié)(即執(zhí)行步驟(A))的次數(shù)等于主分枝NB的數(shù)目,因為每一遍將至少最終設(shè)置一個終結(jié)的PVP和EAI。(在我們的示例中,所有升級是在一遍中進(jìn)行的,第二遍經(jīng)過*b1至*b7將不改變?nèi)魏蜳VP和EAI)。因此,我們看見終結(jié)*b2、*b3和*b4的EAI是0,這些終結(jié)是封閉的。終結(jié)*b2、*b3、*b4構(gòu)成一封閉區(qū)(數(shù)據(jù)獨立無終止循環(huán))。終結(jié)*b6也是一封閉的,其重繞入口在所述的封閉區(qū)[*b2-*b4]內(nèi)。虛線(a)代表項/1{10,rk1}的幻像域。這一項是*b1的PVP。這意味著主分枝b=1的任一單元能訪問{10,rk1}幻像內(nèi)的任一單元。(Si)的訪問域由虛線(a)表示。虛線(b)代表項/2{1001,rk2}的幻像域。該項是*b2、*b7、*b4和*b6的PVP。這意味著,主分枝MB2、MB3、MB4和MB6的任一單元可訪問{1001,rk2}幻像內(nèi)的任一單元。根據(jù)我們的定義,一過程單元的一訪問域是該單元相繼擁有的所有幻像的組合。因此Sj的一訪問域是虛線(c)和(b)所表示的域的組合,因為虛線(c)是Sj的幻像,而虛線(b)是從Sj所看見的*b6的幻像。在圖9中我們看見(Si)可訪問(Sj),而(Sj)不能訪問(Si)。建立從過程單元S1到S2的訪問性有兩個步驟1.如果SA(S2)是SA(S1)的后代(通過比較二進(jìn)制地址(BA)建立,如果BA相同,則通過比較K-座標(biāo)建立)則S2可為S1訪問;2.如果步驟1不成立,則如果SA(S2)是從S1能看見的任一終結(jié)的PVP的后代,則S2可為S1訪問;見圖9示例檢查屬性(BA,RBA,PVP),它們是為每一終結(jié)建立的,我們可以確定下列情況aSi看不見Sj,因為從100看不見101;然而Si可訪問Sj,因為從Si看見的一個終結(jié)通過其PVP{10,rk1}能看見Sj,因為101是10的后代;bSj看不見Si,因為100不是101的一個后代;從Sj看見的終結(jié)是BA分別為1010和1011的終結(jié);終結(jié)1010無RBA和PVP,因為它是一退出終結(jié);終結(jié)1011有PVP{1001,rk1},它也不能看見100。因此Sj不能訪問Si。3.定義計算目標(biāo)過程“正確性”和確定目標(biāo)過程內(nèi)的“不確定性”的XPD—機的原則,這種不確定性是目標(biāo)過程中由于有錯或系統(tǒng)需求變化而要修改的位置的不確定性。圖11示出了用于任一計算機軟件過程的原則。從這里我們看到,從起始有三類過程錯誤。這三類錯誤包括所有可能的過程錯誤。第一類(a)是在過程設(shè)計期間引進(jìn)的。其原因是對過程說明的錯誤理解,或者在設(shè)計從預(yù)期輸入產(chǎn)生預(yù)期輸出的步驟期間引入的錯誤。這些是過程算法中的錯誤。第二類(c)是在實現(xiàn)設(shè)計期間引入的錯誤。它們是在將設(shè)計的算法編碼成由編譯器編程語言能理解的程序時引入的錯誤。這些是“邏輯”編碼錯誤。注意,那些能為編譯器最后定位的語法錯誤這里并不計為XPD機地址“邏輯”錯誤,它們在被編譯器檢查后,就在代碼中表現(xiàn)出來。在目標(biāo)過程執(zhí)行期間,在其測試或生產(chǎn)期間,存在有非法的但并不是預(yù)料的輸入組合,因此,沒有為過程算法所考慮和捕獲。我們可以說,這類錯誤在于輸入,即目標(biāo)過程的外部。它們是輸入錯誤(i)。圖11的目的是示出所有這些錯誤存在于實現(xiàn)了的(被編碼的)目標(biāo)過程中,而且在一些情況中,表現(xiàn)為過程預(yù)期輸出的故障(f)。在此需要下列定義定義P1用(S)指示一基本過程(程序語句)。定義P2單元的“過程地址(PA)”{k,b}是該單元在“精減流程圖”中或在該過程XPD圖中的位置。(參看圖5(A)和圖4),PA由兩個座標(biāo)K和b定義。該過程內(nèi)的每一語句(S)有其自己的PA,它由{k,b}計算出。定義P3“本地時刻”{P}是在過程執(zhí)行內(nèi)語句(S)當(dāng)前出現(xiàn)(表現(xiàn))的一個整數(shù)值;(即P=1,2…n)XPD機并不處理物理時間,在本發(fā)明中,定義時間是考慮到僅僅在控制經(jīng)過(S)時(S)的功能才影響該過程,使它暫時變成活躍的。因此我們給執(zhí)行(S)的每一事件一個自身時間參數(shù)。從過程的調(diào)用計數(shù)本地時刻。定義P4“過程事件”{k,b,p}是執(zhí)行(S)的事件。在XPD機中,它用三個參數(shù){k,b,p}表示,其中{k,b}標(biāo)識位置(“過程地址”)而{P}標(biāo)識時刻“本地時刻”。定義P5“過程時刻”用過程事件{k,b,p}表示。這就使得這種分析獨立于硬件和操作系統(tǒng),而后者對于執(zhí)行特定過程單元是依賴于所需要的物理時間。我們認(rèn)為,每一基本過程(S)生存于其自己的時間座標(biāo){P}之內(nèi)。從整個過程的觀點來看,時間僅可以由“位置”和“時刻”來測量,即“過程地址”{k,b}和“本地時刻”{P}。比如,我們想在第三次執(zhí)行圖5(A)和圖4中的語句A5時引用過程時刻,我們將這一時刻稱為{12,2,3}事件。首先,過程的輸出事件是我們構(gòu)造過程的原因,首先而且通常僅在這些輸出事件不正確時,我們才宣稱過程存在故障。一個計算機過程可以有多個輸出,比如一個輸出到系統(tǒng)終端,其它輸出到不同的文件。XPD分析機(XPDAnalyticalEngine)在使用遞增系統(tǒng)輸出過程同步(ISOPS)映象(IncrementalSystemOutputProcessSyschronizedmap)時被自動激活,下面將詳細(xì)描述。在特定輸出的過程時刻是用指向它的輸出事件序列表示的…{ki,bi,pi}{kj,bj,pj}{kl,bl,pl}…從輸出觀察該過程,我們看到用輸出結(jié)果…rirjrl…表示的過程事件,其中rj的過程時刻在ri之后而在rl之前。圖12示出了在過程時刻(t)產(chǎn)生輸出事件(r)中的三類可能的故障。原理1對于輸出有三類而且只有三類過程故障(f1)在特定過程時刻輸出事件未產(chǎn)生預(yù)期結(jié)果;(f2)在特定過程時刻輸出事件產(chǎn)生未預(yù)料的結(jié)果;(f3)在特定過程時刻預(yù)期的輸出結(jié)果產(chǎn)生錯誤值。XPD機接口包括訪問這三類故障的命令,而且因此XPD機能訪問任一過程故障。圖13在抽象意義上圖示了XPD機如何隨時間積累過程知識的原理。下面將參考圖7、圖8、圖14、圖15、圖16、圖17詳細(xì)描述這些知識的積累。為了說明圖13,下列定義是必需的。定義P6“正確過程地址”(CorrectPoccessAddress-CPA)如果該過程地址包括作為“正確”事件而執(zhí)行的單元,即在正確的時刻和地點產(chǎn)生正確結(jié)果,則該過程地址PA定義為“正確”。定義P7“未確定過程地址”(UncertainProcessAddress-UPA)在該過程地址包含的單元還沒有執(zhí)行為一“正確”事件時,則該過程地址PA是“未確定的”。在我們定義過程地址為“正確”時,我們定義其內(nèi)容在特定事件內(nèi)是正確的。比如,語句A=B+C僅在該過程的特定地點和時刻可能是正確的。一定要理解的是,在過程地址間的本地時刻的分布是在過程執(zhí)行期間動態(tài)進(jìn)行的,而且絕對地由下列兩個因素確定;(1)硬編碼的過程控制結(jié)構(gòu)和單元內(nèi)容;(2)改變輸入值組合。因此,在未改變過程結(jié)構(gòu)和過程單元內(nèi)容的情況下,是輸入值定義了過程中的本地時刻的分布。注意,我們并不強制“正確”過程單元總是正確的。這就是將要說明的“正確的相對性”,換句話說,(S)相對于下列情況是正確的—地點和時間(過程時刻);—預(yù)期輸入,和—預(yù)期輸出這種相對性正是缺乏能提供程序正確性的方法的原因。對于將確定出錯位置的過程自動化的問題,其唯一答案是不斷將這一位置的不確定性減少。定義P8“事件正確性”如果一輸出事件產(chǎn)生“正確的”,即預(yù)期的結(jié)果,我們定義這一事件是“正確的”。這一期望在于過程時刻和值。如果一過程事件{k,b,p}參與了產(chǎn)生“正確的”輸出事件的事件鏈,我們將該過程事件而不是輸出事件定義為“正確的”。即輸出事件之外的事件由“正確的”輸出事件宣布為“正確的”。事件可以由多于一個的輸出事件宣布為正確的。比如,e1e2e3e4e5e6e7代表一過程事件的一個序列,其中e7是正確輸出事件,e1和e3是輸入事件,而e1、e2、e3、e4和e6與產(chǎn)生e7的值有關(guān)。這時我們說從e1到e7除e5之外都是正確的。事件e5也可以由一些其它輸出事件定義為正確的,(在其計算鏈中產(chǎn)生e5),但是直到其正確性是未確定之前。通過下述關(guān)聯(lián)性可以很容易理解過程單元“正確性的”定義比如,一計算機主板與一編碼過程有關(guān),而在該主板上的每一集成電路(IC)與編碼的基本過程有關(guān),比如程序語句。如果IC沒有缺陷而且放在正確的槽內(nèi),假定該IC對于先前被測試的輸入信號組合參與產(chǎn)生一正確結(jié)果,則在將來對于同一輸入組合將參與產(chǎn)生同樣的正確結(jié)果。由于該IC被放在計算機主板上的“正確”位置以及對于“正確的”輸入組合有可能產(chǎn)生“正確”結(jié)果,因此該IC有可能被定義為“正確”。原理2過程功能的“正確性”不依賴于其“最優(yōu)”實現(xiàn)方式。原理3對以前被定義為正確的過程進(jìn)行優(yōu)化將不破壞其由XPD機所定義的正確性。這方面的一個簡單證明就是一等價優(yōu)化不應(yīng)該改變過程的最終功能。定義P9“算法空間”是由過程地址{ki,bi}組合成的空間。參照圖5和圖4,重要的一點是要注意到在不改變過程結(jié)構(gòu)的條件下,其算法空間是固定的,并由目標(biāo)過程的XPD圖的兩維-MK和NB限制。在圖5和圖4中,表示示例過程的XPD圖和精減流程圖的維(MK,NB)是(14,5);定義P10“正確算法空間”是由目前定義為CPA的PA組成的空間。定義P11“不確定算法空間”是由目前定義為UPA的PA組成的空間。我們使用術(shù)語“目前定義的”,是因為XPD機具有兩方面的能力,宣布和撤銷事件和PA的正確性。當(dāng)在先前被認(rèn)為是正確的過程輸出中認(rèn)識到故障時,這種部分“失去先前建立的知識”是不可避免的。定義P12“事件定義空間”對于事件(e),其事件定義空間由(e)的“祖先”事件的PA構(gòu)成。定義P13“祖先事件”,“后代事件”如果事件e1通過下述方式之一參與產(chǎn)生事件e2,則e1是e2的一個“祖先”,而e2是e1的“后代”;-參與產(chǎn)生e2的值(值祖先事件);或-參與產(chǎn)生用于在通向e2后路徑上的一條件控制事件的一個參數(shù)(控制祖先事件)。見圖14e(a)是在例中所示的e(a)下面及其分枝內(nèi)的事件的后代;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機的更詳細(xì)說明將在下面給出。在這張圖4有4個目標(biāo),從左到右它們是輸入空間—輸入?yún)?shù)的所有可能組合;即,如果一過程使用4個輸入?yún)?shù),則該過程的輸入空間是一4維空間,不確定算法空間;正確算法空間;預(yù)期輸出空間—在輸出被檢查時預(yù)期的輸出結(jié)果的組合。t0、t1、t2、t3代表不同的過程時刻,其中t0是在過程的開始,這時還沒有輸出產(chǎn)生,而在t1、t2、t3則不斷地積累過程輸出。假設(shè)在過程時刻t3發(fā)現(xiàn)第一個故障。該圖顯示出,在使用不確定減少的XPD機方法時,在過程時刻t3與造成該故障的錯誤的位置有關(guān)的不確定區(qū)域?qū)⑿∮谠谶^程時刻t2與所產(chǎn)生的故障有關(guān)的不確定區(qū)域,如此等等。隨著目標(biāo)過程的執(zhí)行,真正的輸入充填到輸入空間,而真正的輸出充填到輸出空間。隨著輸出結(jié)果的累積,用進(jìn)一步描述的方法所建立的XPD機擴展正確算法空間并且減少不確定的算法空間。之所以如此,是因為兩者之和等于該目標(biāo)過程在編碼時所定義的算法空間,在目標(biāo)過程不改變時其保持不變。我們聲明下列情況在由XPD機分析的目標(biāo)過程向前執(zhí)行期間是正確的a隨著正確算法空間的增加,不確定算法空間持續(xù)減少;b任一過程輸出事件的事件定義空間是有限的;其限制是該過程的整個算法空間。因此在目標(biāo)過程的向前執(zhí)行期間,事件定義空間的持續(xù)的越來越少的部分位于不確定算法空間的區(qū)域內(nèi)。參看圖13,如果d(e2)在過程時刻t2是一非預(yù)期輸出結(jié)果的事件定義空間,而d(e3)是另一非預(yù)期輸出結(jié)果的事件定義空間,則在過程時刻t2和t1的錯誤位置不確定區(qū)域分別用d(e2)和d(e3)(它們用“∥”示出)表示。在過程時刻t3的錯誤位置不確定區(qū)域比在過程時刻t2的小。雖然一事件定義空間有可能隨著目標(biāo)過程的向前執(zhí)行而增加,但XPD機容許不斷減少錯誤位置不確定區(qū)域。XPD機分析的結(jié)果與我們的正確過程地址(CorrectProcessAddress-CPA)的定義有關(guān),它既時間敏感,而且也輸出結(jié)果期望敏感。確定錯誤位置或確定要求修改位置的XPD機的原則造成一輸出結(jié)果的故障的錯誤或由于有了新的系統(tǒng)需求而需要修改的地點位于輸出結(jié)果事件定義空間部分中,它們存在于不確定算法空間區(qū)域。在我們談及錯誤位置局限于數(shù)個UPA時,我們是指所允許的修改在所提到的UPA內(nèi)。否則,必須通過擴展算法空間,即建立新的PA來建立新的事件定義空間。因此,過程不確定性的定義為目前過程的前期構(gòu)造建立了基礎(chǔ),即自動的早期程序開發(fā)的基礎(chǔ)。這意味著,對于XPD機,有可能在過程維護(hù)和早期程序開發(fā)期間不取消和破壞其“正確”的工作而自動地確定在已有過程上所建立的區(qū)域。比如,假設(shè)取在12個過程地址上發(fā)生的50個事件以建立輸出事件W(k,b,p)。再假設(shè)其中45個事件發(fā)生在10個過程地址,它們已知是正確的。那么與創(chuàng)建W(k,b,p)有關(guān),有5個事件發(fā)生在兩個不確定過程地址。如果W(k,b,p)是正確的(預(yù)期的),則這5個事件將被XPD機置為正確(被批準(zhǔn))。這兩個語句將升級到“正確的基本過程”狀態(tài),它們的過程地址將升級到CPA狀態(tài)。如果W(k,b,p)是一不正確(未預(yù)計)的結(jié)果,那么錯誤位置的不確定區(qū)域?qū)⑹沁@兩個PA。這意味著所預(yù)計的結(jié)果可以通過修改這兩條語句或為W(k,b,p)建立一新的定義空間。4.定義XPD機的目標(biāo)過程知識傳播(知識歸納)的原則。目標(biāo)過程的“知識傳播”或“知識歸納”是一個導(dǎo)致正確算法空間擴展的過程。在XPD目標(biāo)集中的單元A、L、D、E、X、*、+、C、!、/、R、=、S和W之間的關(guān)系是這樣的,“被批準(zhǔn)的”W單元執(zhí)行事件有能力去激活第二過程鏈。這些第二過程將“批準(zhǔn)”與產(chǎn)生“被批準(zhǔn)的”W-事件有關(guān)的那些XPD圖單元的執(zhí)行事件。定義K1事件“批準(zhǔn)”是一由XPD分析機證實事件“正確性”的過程,其中在P8中定義了事件正確性。定義K2“控制事件”是根據(jù)XPD圖和精減流程圖明確地(“無條件控制事件”)或潛在地(“條件控制事件”)改變過程向下進(jìn)行的方向的事件。定義K3“無條件控制事件”是重繞或退出終結(jié){*,+,C,R,=}的執(zhí)行事件。定義K4“條件控制事件”是L單元的執(zhí)行事件或D單元的循環(huán)退出條件的計算事件。根據(jù)XPD圖和精減流程圖,條件控制事件的肯定解將產(chǎn)生向右的控制轉(zhuǎn)移,而條件控制事件的否定解將導(dǎo)致控制向下繼續(xù)。定義K5“數(shù)據(jù)操縱事件”是XPD目標(biāo)集的A或E或D單元的算術(shù)部分的執(zhí)行事件。定義K6“初始數(shù)據(jù)操縱事件”是E-事件、數(shù)據(jù)初始化的A-事件或循環(huán)索引初始化的D-事件之一。定義K7“第二數(shù)據(jù)操縱事件”是數(shù)據(jù)操縱事件而非初始數(shù)據(jù)操縱事件。XPD機通過建立ACB分析計算庫允許積累關(guān)于什么事件構(gòu)成“正確”過程執(zhí)行的知識。隱藏在ACB之后的基本原則是必須保存“正確”執(zhí)行事件的知識?!罢_性”被理解為對于“正確的”輸入事件的條件有可能產(chǎn)生在地點、時間和值事件的“正確”。因此分析計算庫允許保存正確執(zhí)行的可能。建立分析計算庫是這一原則的實現(xiàn),而我們相信對于任何過程它都是適用的在目標(biāo)過程對于正確的輸入數(shù)據(jù)組合產(chǎn)生“正確的”輸出事件時,必須保存這些事件定義空間的知識,下列輸出事件可以使用,但不能改變已經(jīng)被批準(zhǔn)的結(jié)果事件(W-事件)的事件定義空間,而且因此將不改變先前的正確目標(biāo)過程執(zhí)行。定義K8關(guān)于基本過程(S)的一個基本“知識”是在批準(zhǔn)其一執(zhí)行事件時得到的。因此,積累關(guān)于基本過程(S)的“知識”意味著在其不同執(zhí)行事件內(nèi)積累關(guān)于(S)“正確性”或不確定性的信息。因此基本過程(S)的一個基本“知識”由下列各部分組成a—(S)內(nèi)容正確性知識;b—過程時刻(過程位置和本地時刻)的知識,其中一個(S)執(zhí)行事件構(gòu)成或不構(gòu)成一個“正確”事件。定義K9“基本知識傳播”或“基本知識歸納”我們所知道的事實一個被批準(zhǔn)事件的內(nèi)容和過程時刻,使得我們通過自動地確定和分析“祖先”事件直至回到“知識傳播終結(jié)事件”而將這一事件的“基本知識”傳播進(jìn)不同的過程地址中。定義K10“知識傳播終結(jié)”事件(KP終結(jié))是下列兩類事件之一1)在目標(biāo)過程內(nèi)沒有祖先的事件,即初始數(shù)據(jù)操作事件。2)先前被批準(zhǔn)的事件。先前被批準(zhǔn)的事件在目標(biāo)過程向前執(zhí)行期間平衡知識傳播的過程以及防止隨著祖先事件的積累該過程變得日益復(fù)雜。一旦“知識傳播過程”遇到一先前被批準(zhǔn)的事件,我們可以相信所有其祖先事件先前也已批準(zhǔn)。下面對目標(biāo)過程的“不確定性”進(jìn)行計算的描述,是與這里所描述的“知識歸納”過程相反的過程,即“知識演繹”過程,同一個“知識傳播”終結(jié)將成為“不確定終結(jié)”。見圖14在該示例中,有兩個W-事件e(a)和e(n),它們都有一些祖先。W-事件是在過程執(zhí)行方向上被批準(zhǔn)的,圖14中示為-->。對于兩個W-事件中的任一個,只示出了事件定義空間的一部分。*e代表一個“KP終結(jié)”事件,這是一個初始數(shù)據(jù)操縱事件,#*e代表一個“KP終結(jié)”事件,這是一個先前被批準(zhǔn)的事件。在這一例子中,W-事件e(a)的值是從三個參數(shù)中計算出的,而這三個參數(shù)值又是由下列事件e(b)、e(c)和e(d)產(chǎn)生的。e(b)的值是從兩個參數(shù)計算出的,而這兩個參數(shù)值又是由事件e(f)和e(g)產(chǎn)生;事件e(f)沒有任何祖先,因為它是一個初始數(shù)據(jù)操縱事件,而且因此是一KP終結(jié)。事件e(g)是先前被批準(zhǔn)的,因此也是一KP終結(jié)。我們不試圖確定KP終結(jié)的祖先,因此它們或是不存在,如e(f)的情況,或先前已被批準(zhǔn)如e(g)的情況。這是“被終止的歸納”原則的基礎(chǔ)。由于過程執(zhí)行方向是從W-事件e(a)的向W-事件e(n),在從W-事件e(n)傳播基本知識的過程中事件e(i)成為一個KP終結(jié),這較晚發(fā)生,因為在從e(a)進(jìn)行知識傳播期間e(i)及其祖先已被批準(zhǔn)。知識傳播的規(guī)則批準(zhǔn)一個事件的過程產(chǎn)生批準(zhǔn)其最近祖先的一個第二過程,除非a)其最近祖先已被批準(zhǔn),或b)沒有最近祖先(在該事件是初始數(shù)據(jù)操縱事件情況下)。因此,基本知識的傳播,即“知識歸納”就成為一個鏈?zhǔn)椒磻?yīng),其擴展由知識傳播終結(jié)所控制。參照圖17示例過程時刻(k0,b0,p0)的事件(e0)是第一個被批準(zhǔn)的(s0)執(zhí)行事件,它計算(y)的值,因為語句s0的PA的狀態(tài)為UPA。因此s0的PA被升級為CPA。其最近祖先是與計算(y)值有關(guān)的參數(shù)x1、x2、x3的計算事件。設(shè)緊接在事件(k0,b0,t0)之前的x1和x2的值是在過程時刻(k1,b1,p1)和(k2,b2,p2)產(chǎn)生的。再假設(shè)它們是先前被批準(zhǔn)的,因此,我們將它們當(dāng)作KP終結(jié),而且不檢查它們的祖先。假設(shè)緊接在(k0,b0,p0)之前的計算x3的事件是(k3,b3,p3),而且先前也沒有被批準(zhǔn),狀態(tài)CPA僅意味著這一PA執(zhí)行的一些其它事件是先前被批準(zhǔn)的。我們將繼續(xù)檢查其最近祖先,即緊接在過程時刻(k3,b3,p3)之前的計算x3參數(shù)的事件,并且不斷進(jìn)行下去。由被批準(zhǔn)的W-事件所激活的知識傳播是沿著與目標(biāo)過程的執(zhí)行相反的方向進(jìn)行的。定義K11一事件的“直接擁有者”如果e2批準(zhǔn)e1,則e2擁有e1。在圖14中,e(i)被e(d)而不被e(0)所擁有。定義K12一個事件的“W-擁有者”每一被批準(zhǔn)的事件都有W-擁有者,它是(e)的W-事件后代,它產(chǎn)生批準(zhǔn)(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示出,在批準(zhǔn)一事件(e)時,就檢查其PA狀態(tài),如果其狀態(tài)是UPA(不確定過程地址),就將之升級為CPA(正確過程地址)。過程時刻{kW,bW,pW}的(e)的W-擁有者事件成為負(fù)責(zé)升級該PA狀態(tài)的那一CPA的一個屬性。圖16示出了在不同過程時刻t1、t2、t3、t4、t5的過程地址(k,b)。過程時刻t1、t2、t3、t4和t5指(k,b)單元的一些執(zhí)行事件。從時刻t1觀察PA(k,b)發(fā)現(xiàn)PA(k,b)在(k,b,0)狀態(tài),即還未產(chǎn)生任何(k,b)執(zhí)行事件。在過程時刻t2,發(fā)現(xiàn)PA(k,b)處于狀態(tài)(k,b,2),即(k,b)已經(jīng)歷了兩次其執(zhí)行事件。它們還都未被批準(zhǔn),PA(k,b)為UPA狀態(tài)。在時刻t3,PA(k,b)在(k,b,3)狀態(tài),即有3個(k,b)執(zhí)行事件(k,b,1),(k,b,2)和(k,b,3),而且事件(k,b,2)被批準(zhǔn)了。(k,b)狀態(tài)被從UPA升級至CPA,其W-擁有者屬性是(k,b,2)的W-擁有者。在進(jìn)一步批準(zhǔn)其它(k,b)執(zhí)行事件期間,W-擁有者屬性保持不變,仍是(k,b,2)的W-擁有者。在所接受的輸出結(jié)果發(fā)生變化期間,CPA的W-擁有者屬性使目標(biāo)過程的知識保持最新。當(dāng)一個先前被批準(zhǔn)的W-事件不再被批準(zhǔn)時,該目標(biāo)過程知識就下降了,其下降程度由在目標(biāo)過程時刻的不被批準(zhǔn)的W-擁有者事件的位置所確定。我們將XPD機的這一過程稱作“喪失知識”。5.建立目標(biāo)過程的XPD模型;定義分析計算庫(ACB);建立目標(biāo)過程的XPD資源庫(XPDRepository)建立目標(biāo)過程的XPD模型參見圖17,XPD模型是以基于三維結(jié)構(gòu)從XPD圖中建立起來的,即在所提到的三維基礎(chǔ)上加進(jìn)更多的維,其中第三維是建立在二維XPD圖的基礎(chǔ)之上。第三維表現(xiàn)為一個結(jié)構(gòu),它包括過程地址的屬性。根據(jù)基本過程類型{A,L,D,W,E,*,/,等},將不同類型的屬性賦給不同的過程地址(PA),即不同的{k,b}座標(biāo),它們存貯在這一過程地址之下。對應(yīng)于可執(zhí)行語句的XPD模型的每一單元,包括三個屬性,它們是a)目標(biāo)過程內(nèi)對應(yīng)語句的記錄號;b)XPD資源庫內(nèi)對應(yīng)語句的記錄號;以及c)X-Source碼內(nèi)對應(yīng)語句的記錄號。這樣,就建立了目標(biāo)過程、XPD模型、XPD資源庫以及X-Source碼之間的引用。對于每一可執(zhí)行過程單元,XPD保持一個本地時刻屬性。在模型中為XPD圖每一單元提供一個二進(jìn)制地址(BA)屬性。為所有過程終結(jié)提供返回二進(jìn)制地址(RBA)屬性。對應(yīng)于重繞終結(jié)(*)、(C)或(+)的PA擁有RewindID(ID/)屬性。ID作為過程地址{k,b}的另一種表示。每一{k,b}對可以用一整數(shù)值ID表示,它是在從(K=1,b=1)至(k=MK,b=NB)經(jīng)過XPD圖空間以及首先遞增K參數(shù)時,該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。下面是為過程終結(jié),即{*|C|+|R|=}建立XPD模型的第三維的結(jié)構(gòu)的實現(xiàn)方式的示例,接下來是對應(yīng)于目標(biāo)過程的可執(zhí)行單元,即{A|L|D|E|W|X}和改變控制語句{S}的結(jié)構(gòu)的實現(xiàn)方式的示例。這些結(jié)構(gòu)以及其成員的大小是依賴于具體實現(xiàn)的,在這些例子中只示出了實現(xiàn)XPD機所必需的結(jié)構(gòu)成員。|*|ind|ID/|loc.time|BA|targ.r.#|Repos.r.#|X-Sourcer.#|RBA|…{C}{+}|R|||loc.time|BA|targ.r.#||X-Sourcer.#||…{=}退出終結(jié)不具有重繞終結(jié)的下列屬性{ind,ID/,Repos.r.#}ind是在XPD構(gòu)架與XPD圖中對應(yīng)的過程單元的索引。對應(yīng)于圖5(A)的PA(14,3)的XPD模型單元|*|2|6|loc.time|11|targ.r.#|Repos.r.#|X-sourcer.#|2|…||表示為二進(jìn)制1011表示為二進(jìn)制10其本地時刻將在目標(biāo)過程執(zhí)行時填上。包括過程單元A、L、D、E的PA具有屬性“ACB指針”,其中ACB代表分析計算庫。|A|ind|ACB-Ptr|loc.time|BA|targ.r.#|Repos.r.#|X-Sourcer.#|{L}{D}{E}{W}{X}{S}另外,L和D單元具有一個屬性,它定義了表示根據(jù)L或D的肯定解(高期望解)增量b-座標(biāo)的值?!D(zhuǎn)移期望|…PA的ACB-Ptr屬性是一指向?qū)?yīng)的ACB結(jié)構(gòu)的指針,該ACB結(jié)構(gòu)包括關(guān)于當(dāng)前過程單元的“被批準(zhǔn)”的執(zhí)行事件的歷史的信息。定義分析計算庫(ACB)在本發(fā)明中,有許多內(nèi)部存貯器的或外部存貯器的結(jié)構(gòu),每一個對應(yīng)于目標(biāo)過程的一個不同單元,并包括將當(dāng)前單元行為的已知狀態(tài)建立為隨時間的“被批準(zhǔn)”或“不確定”的信息,我們將這些結(jié)構(gòu)的集合稱為目標(biāo)過程的分析計算庫(AnalyzedCalculationBase-ACB)每一ACB結(jié)構(gòu)對應(yīng)目標(biāo)過程的一可執(zhí)行PA,同時可以實現(xiàn)為一個內(nèi)部變量結(jié)構(gòu)或一個文件。唯一規(guī)則是ACB結(jié)構(gòu)的任一成員或元素代表著對應(yīng)于該結(jié)構(gòu)的目標(biāo)過程單元的一個執(zhí)行事件。在該結(jié)構(gòu)內(nèi)的位置代表該事件的本地時刻。ACB結(jié)構(gòu)元素的值可設(shè)置為兩狀態(tài)之一,“on”與“off”,其中“on”對應(yīng)被批準(zhǔn)的事件,而“off”對應(yīng)還尚未被批準(zhǔn)(即不確定)的事件。參看圖19在我們的實現(xiàn)中,ACB-ptr指向被分成兩部分的一個二進(jìn)制文件。第一部分是控制域,它保存兩類信息下一參數(shù)字(NextParameterWord-NPW)和不確定偏移字(UncertaintyDisplacementWord-UDW)。第二部分包括信息域,它保存“知識狀態(tài)”位。建立這一ACB-ptr的單元的每一執(zhí)行事件由信息域中的一位表示,即“知識狀態(tài)”位。相對于該文件信息域開始處的位的位置對應(yīng)該事件的本地時刻,根據(jù)該事件“正確性”狀態(tài)的“知識”的當(dāng)前狀態(tài)將該位置為“on”或“off”。可以使用不同的文件壓縮類型。在我們的實現(xiàn)中UDW保存處于狀態(tài)0的第一位的相對位移。在批準(zhǔn)任一單元執(zhí)行事件之前,UDW等于0,信息域的第一位對應(yīng)于第一單元執(zhí)行事件,而且不進(jìn)行信息域壓縮。在一定時間之后,比如將UDW置為2000,它表示該信息域的第一位位置對應(yīng)本地時刻2001,已批準(zhǔn)了該單元的前2000個執(zhí)行事件。通過將2000位位置向左移動將對應(yīng)于所提到的ACB指針的二進(jìn)制文件進(jìn)行壓縮,因為我們知道前2000個位位置填上了1。在XPD機分析當(dāng)前目標(biāo)過程單元的“知識歸納”或“喪失知識”過程中,UDW的值可能在兩個方向上改變。這可通過將相應(yīng)ACB結(jié)構(gòu)的信息域內(nèi)的位進(jìn)行移動而進(jìn)行。比如,在“知識歸納”過程中,在D1ACB信息域的第一位和第4位的位置的狀態(tài)改變?yōu)椤皁n”時,D1的UDW將置為十進(jìn)制的7,其信息域位將向左移動7個位置。輸入語句{E}的每一參數(shù)和Call語句{X}的每一參數(shù)用其自己的ACB結(jié)構(gòu)表示。相應(yīng)模型單元的ACB-ptr指向?qū)τ诘谝粋€參數(shù)的ACB結(jié)構(gòu)。如果下一參數(shù)存在的話,該結(jié)構(gòu)的下一參數(shù)字(NPW)將指向下一參數(shù)的ACB結(jié)構(gòu),如此等等。否則,NPW為空。包含5個可執(zhí)行單元{A1,A2,D1,E1,X1}的目標(biāo)過程的ACB看上去如圖19所示,其中E1有兩個輸入?yún)?shù),X1有三個調(diào)用參數(shù)。建立目標(biāo)過程的XPD資源庫。參見圖7,在建立XPD圖(或者XPD構(gòu)架,如果實現(xiàn)了這一步驟)的同時建立目標(biāo)過程的XPD資源庫。對應(yīng)于一條可執(zhí)行語句(XPD目標(biāo)集的A、L、D、E、W、X、S單元)的主分枝的每一單元存貯在XPD資源庫文件中。XPD資源庫內(nèi)所包含的代碼容量小于對應(yīng)的目標(biāo)過程源代碼。之所以如此,是因為XPD資源庫并不包含任一過程控制語句,控制語句并不涉及數(shù)據(jù)操縱或驗證,其中我們通過過程控制語句理解過程語句,即XPD資源庫不包含無條件分枝,停止(stop)、返回(return)、然后(then)、否則(else)、endif等等。在利用前面提到的“下一最小期望”原則從目標(biāo)過程中抽取其算法時,其控制結(jié)構(gòu)保存在XPD圖和XPD模型的結(jié)構(gòu)中,而后者是在其基礎(chǔ)上建立的(圖7)。因此,XPD資源庫包含所有的過程單元,但不包括該過程控制的定義,后者由XPD模型保存。<prelisting-type="program-listing"><![CDATA[ 舉例1對于目標(biāo)過程語句if(d<10)gotolabel 資源庫將包含if(d<10) 舉例2對于目標(biāo)過程語句if(a.gt.b)then c=d else e=f(g)endif return 資源庫將包含if(a.gt.b) c=d e=f(g)]]></pre>在XPD模型內(nèi)的對應(yīng)過程地址{k,b}的屬性中引用XPD資源庫的每一語句。比如,如果資源庫被保存為RRDS(相對記錄數(shù)據(jù)集—RelativeRecordDataSet)則相應(yīng)的引用屬性必須包含該資源庫內(nèi)相應(yīng)語句的相對記錄號。請參看在段落“建立目標(biāo)過程的XPD模型”中提到的資源庫記錄號(Repos.r.#)。6.建立X-Source碼;減少捕捉目標(biāo)過程執(zhí)行歷史的開銷;通過遞增系統(tǒng)輸出過程同步(ISOPS)映象的方式建立用戶-XPD機-目標(biāo)過程接口;建立系統(tǒng)輸入過程同步(SIPS)映象;建立X-Source碼;為了用XPD機分析以傳統(tǒng)目標(biāo)碼執(zhí)行的目標(biāo)過程,我們從程序的目標(biāo)系統(tǒng)的每一目標(biāo)過程(主程序、子程序或函數(shù))的XPD模型和XPD資源庫建立X-Source碼。建立X-Source碼的目的是在目標(biāo)過程和積累目標(biāo)過程行為的知識的XPD機過程之間提供同步。除了所提供的同步信號外,X-Source碼有可能不同于原始目標(biāo)過程代碼,其不同之處在于X-Source碼不包括“死的”代碼,即不可到達(dá)的代碼,以及如果第二次不是根據(jù)XPD模型規(guī)則構(gòu)造的,則有可能根據(jù)原始目標(biāo)源碼重建X-Source碼,即,比如有另外的GOTO的情況下。參看圖7與8X-Source是由X-Source產(chǎn)生器(圖7中17)根據(jù)XPD模型(圖7中8)和XPD資源庫(圖7中10)而產(chǎn)生的,它又通過同步信號(4)“運行”XPD模型,同步信號(4)被發(fā)送XPD接口,又通過信號(6)激活分析機,后者通過命令“運行”XPD模型。由于X-Source碼是從XPD模型和XPD資源庫中建立的,而后兩者又是從目標(biāo)過程源代碼中建立的,因此在目標(biāo)過程。XPD模型和X-Source碼之間功能等價。為了建立X-Source,需要進(jìn)行—從XPD資源庫(圖7中10)中提取出用于X-Source的每一可執(zhí)行語句的內(nèi)容;—從XPD模型(圖7中8)中構(gòu)造控制語句;—提供目標(biāo)—模型同步信號;(參見圖20和21的示例)我們將就“延遲順序”模型同步的示例對在目標(biāo)過程和XPD分析機之間建立同步接口進(jìn)行解釋,其中的延遲順序模型同步將在以下內(nèi)容中討論。在此通過CALL語句(圖8中4)產(chǎn)生同步信號,該信號向XPD接口(XPDI)(11)發(fā)送三個參數(shù)(k,b,m),其中{k,b}是定義該過程地址的對偶,而(m)定義該目標(biāo)過程的模型,即它定義當(dāng)前執(zhí)行哪一目標(biāo)過程。該接口可以由兩個參數(shù)而不是三個參數(shù)來實現(xiàn){IDT,m},其中IDT是單元的過程地址的另一種表示,是用先前介紹的公式IDT=(b-1)*MK+K;(“ID的公式”)其中MK是目標(biāo)過程模型的K座標(biāo)最大值。以相應(yīng)終結(jié)的(k,b)座標(biāo)計算出的。減少捕捉目標(biāo)過程執(zhí)行歷史的開銷在每一表示過程終結(jié)(定義F3)的前面增加終結(jié)同步調(diào)用。圖4示例假設(shè)為一過程建立X-Source,該過程在程序系統(tǒng)中用模型m=2標(biāo)識,在從分枝b=1的終結(jié)表示GOTO終結(jié)(a)時為callXPDI(9,1,2)goto′LABLEa′而在從分枝b=5的終結(jié)表示GOTO終結(jié)(a)時為callXPDI(10,5,2)goto′LABLEa′在不同的編程語言中“LABLEa”的文法不同。這種記錄過程執(zhí)行歷史的方法代表最小開銷(最小使用),關(guān)于這一點下面將進(jìn)行解釋。在XPDI接收到一個調(diào)用,其PA被XPDI標(biāo)識為一個終結(jié)時,它將這一PA與{m}一起記錄在系統(tǒng)執(zhí)行歷史文件中(圖8中3),其中{m}是先前描述的模型標(biāo)識符。在我們的終結(jié)的同步實現(xiàn)方式中,一終結(jié){k,b}座標(biāo)是用它們的IDT表示的。參照圖8,XPD接口(XPDI)模塊用前述的“ID公式”將IDT翻譯為(k,b)對。通過定位在模型中的座標(biāo)(k,b),XPDI模塊標(biāo)識出哪一終結(jié)發(fā)送該同步信號。對于任一給定的目標(biāo)過程模型,為了重建目標(biāo)過程行為,被執(zhí)行的過程終結(jié)的順序是充分而且必要(最小開銷)信息。說明在我們的模型中,在START(開始)和特定終結(jié)之間或在前一終結(jié)的一RewindID的一個項與下一終結(jié)之間只有一遍。在建立一模型時,RewindID(ID/)存貯為該XPD模型的每一終結(jié)的一個屬性。在XPDI接收到關(guān)于下一被執(zhí)行終結(jié)的信息時,它命令分析機(AnalyticalEngine)再次跟蹤目標(biāo)過程內(nèi)當(dāng)前被執(zhí)行的路徑部分,即從前面被執(zhí)行終結(jié)的RewindID(或者如果自進(jìn)入該過程以來當(dāng)前被執(zhí)行終結(jié)是第一個,則是自START)至當(dāng)前終結(jié)。每一遍經(jīng)過PA都表示其執(zhí)行事件,而且將本地時刻屬性(P)增加1。比如,假設(shè)在執(zhí)行X-Source碼(它是從圖4的XPD圖中建立的)期間,XPDI接收到下列信號45,9,55。它們是下列PA{14,3},{9,1}{10,4}的IDT,告訴我們是沿下列路徑執(zhí)行目標(biāo)過程A1A2L1(-)A3L2(+)A4X1D1(+)A6W1A3L2(-)A2L1(+)W2E1L3(-)A7STOP為了表示同一終結(jié)的重復(fù),這常出現(xiàn)在DOFORWHILE等循環(huán)中,我們采用一負(fù)數(shù)。比如27-542意味著在從DO循環(huán)中退出之前該DO循環(huán)D16次(到達(dá)IDT=27的終結(jié))取否定判斷。在前一示例中,用3個同步信號42、9、52代表該過程行為歷史的29個事件??梢赃x擇下列表示過程歷史的方法之一——在每一被執(zhí)行的單元之后發(fā)送該同步信號,就如一些調(diào)試程序包所做的,對于我們的例子,要建立29個信號;或——記錄由所經(jīng)過的LC及它們的解所組成的對{L1,0}{L2,1}{D1,1}{L2,0}{L1,1}{L3,0},這些是12個信號。我們已經(jīng)證明,通過記錄被執(zhí)行的過程終結(jié)的順序而記錄該過程的執(zhí)行歷史是關(guān)于該目標(biāo)過程動態(tài)性的必要而且充分的信息。為了使用傳統(tǒng)目標(biāo)碼處理方法捕捉目標(biāo)過程的動態(tài)特點,它實現(xiàn)了在同步信號數(shù)和建立插入數(shù)上的所需的最小開銷。正如我們將進(jìn)一步展示的,在使用XPD目標(biāo)碼時這一建立不是必須的。通過遞增系統(tǒng)輸出過程同步(ISOPS)映象方式建立用戶-XPD機-目標(biāo)過程接口。下面描述通過XPD機在用戶和目標(biāo)過程間的一個接口。正如本發(fā)明所確信的,該接口是為了分析目標(biāo)過程最可能高的接口層次。XPD機的分析是由對系統(tǒng)輸出的引用而激活的。我們編寫程序的原因是要得到系統(tǒng)輸出結(jié)果。也正是系統(tǒng)結(jié)果是我們修改程序的原因。在我們試著去理解一個現(xiàn)有過程或試著建立一個新的過程時,也正是系統(tǒng)輸出結(jié)果(已有或還未有)也是我們在心中所要考慮的。對于系統(tǒng)結(jié)果的接受、不接受或引用是進(jìn)行程序分析或程序構(gòu)造的一個十分特別的“原因”。這里所提出的技術(shù)使得可以向XPD分析機通知這一“原因”,作以激活這一分析的一個途徑,從而進(jìn)一步消除中間步驟。更進(jìn)一步描述的方法允許建立用戶與XPD分析機之間的一個接口,該XPD分析機用該系統(tǒng)結(jié)果作為一引用點,正如我們?nèi)祟悶榱思せ钗覀兊恼J(rèn)識分析直覺上所做的。遞增系統(tǒng)輸出過程同步映象(ISOPS映象)是在輸出信號和產(chǎn)生這些信號的過程事件之間的一個引用工具。下面是一示例的ISOPS映象格式。它包括五個類型的項{1.2.3.4.5}項1通過{k,b,p,m}過程參數(shù)定義W-事件;項2在系統(tǒng)輸出屏幕上定義當(dāng)前輸出信號的開始處的位置{Sl,Sc}(屏幕行,屏幕列);項3在系統(tǒng)輸出屏幕{l1,c1,l2,c2}上定義一長方形,它是一包含用W-事件執(zhí)行所改變的屏幕區(qū)域的最小的長方形;項4包含一個整數(shù)信息,它是對應(yīng)項5距包含該被改變的圖象信息(由項5組合的文件)的文件的開始處的偏移量。項5包含對應(yīng)于項3的區(qū)域的系統(tǒng)輸出緩沖區(qū)的實際部分。由于項5是屏幕緩沖區(qū)的被改變區(qū)域的圖象,是一個大小可變的記錄,因此我們將之保存在一個單獨的文件—遞增圖象監(jiān)視器(圖8上的IIM文件)。其它4個ISOPS映象參數(shù),分別對應(yīng)于項1、項2、項3和項4,都保存在ISOPS映象參數(shù)文件中(圖8中的ISOPSPars.)。ISOPS參數(shù)文件和IIM文件的組合代表系統(tǒng)結(jié)果歷史(圖8中的2和圖7中的2)。ISOPS映象示例格式1.2.3.4.5.W-屏幕位置所改變在圖象監(jiān)視遞增圖象事件的屏幕器文件中監(jiān)視器區(qū)域的偏移量\——ISOPS參數(shù)文件——————/\—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}是同步參數(shù)(圖8上的4),由目標(biāo)過程送往XPDI(圖8上的11);XPDI從模型(8)(對應(yīng)于{m})獲得{P},作為對應(yīng)于這一{k,b}過程地址的過程單元結(jié)構(gòu)的一個當(dāng)前時間屬性。這一時間屬性被分析機(9)保持為當(dāng)前值,將在下面段落對此進(jìn)行描述。項2.在每一系統(tǒng)輸出信號的屏幕位置(行與列){Sl,Sc}是如下獲得的對于第一個W-事件項{Sl,Sc}項等于{1,1}。在XPDI接收了由W-事件發(fā)送的一同步信號時,XPDI獲得當(dāng)前屏幕位置,它在W-事件執(zhí)行后發(fā)生作用。保存這一屏幕位置用作下一W-事件的{Sl,Sc}項。項3.是可以在屏幕上給出的最小長方形,它包括從前一W-事件的過程時刻改變的屏幕區(qū)域。這一長方形是通過將前一屏幕圖象(圖8中的15)(它是在前一W-事件之后的過程時刻保存的)與當(dāng)前系統(tǒng)輸出屏幕緩沖區(qū)(圖8中的5)進(jìn)行比較而由遞增圖象提取器/構(gòu)造器(IncrementalImageExtractor/Constructor(圖8中的12)定義的。項4.是遞增圖象監(jiān)視器的當(dāng)前項在IIM文件中的相對字節(jié)位置,其位置由遞增圖象提取器/構(gòu)造器(IIE/C)(圖8中的12)所知曉。IIE/C知道當(dāng)前位置,因為它知道IIM文件的每一項的字節(jié)長度。項5.是IIM文件的當(dāng)前項,它是對應(yīng)于項3的長方形的系統(tǒng)輸出緩沖區(qū)那部分。建立系統(tǒng)輸入過程同步(SIPS)映象建立SIPS映象是為了能夠進(jìn)入分析或重放在某一特定過程時刻對系統(tǒng)所作的特定輸入。SIPS映象保存在SYSIN歷史文件(圖8中的1)和(圖7中的1)上。對于每一系統(tǒng)輸入事件,在SYSIN歷史文件中建立一項。該項包括兩個記錄,一個是實際串,另一個是參數(shù)集{k,b,p,m},它描述對應(yīng)于當(dāng)前輸入串的過程時亥{k,b,p}和模型{m}。XPD接口模塊(圖8中的11)從同步參數(shù){ide,m}(圖8中的4)和一系統(tǒng)輸入緩沖區(qū)(m)(圖8中的9)建立SYSIN歷史文件中的項。用ID公式從{ide}中計算出{k,b}。參數(shù){p}是由XPDI從XPDI模型中的當(dāng)前過程時刻計算出的。圖21是一個{ide,m}同步調(diào)用的示例CALLXPDI(21,2),它是在自終結(jié)(圖20中的E1)的輸入之前建立的。一旦目標(biāo)程序知道了該系統(tǒng)輸入,該系統(tǒng)輸入就被所建立的下一語句“WRITE(M,002)CH”記錄在緩沖區(qū)文件(m)(圖7中的19),并且以后被XPDI模塊再次記錄在SYSIN歷史文件中。所建立的記錄系統(tǒng)輸入的語句是通過將I/O動作從“READ”轉(zhuǎn)換為“WRITE”(它指向監(jiān)視器文件(m))而創(chuàng)建的。7.目標(biāo)過程、其XPD模型、XPD資源庫和X-Source碼示例參見圖20、21和7圖21是一示例子程序。圖20A是其XPD圖,它是建立XPD模型的基礎(chǔ)。圖20B是XPD資源庫(圖7中的10),它是由先前描述的圖7中的過程18從示例子程序中提取出來的。圖21B是X-Source碼,它是由X-Source產(chǎn)生器(圖7中的17)從圖21A示例的XPD圖和XPD資源庫中建立的。X-Source包括對XPD接口模型(圖7中的11)的調(diào)用,這些調(diào)用是在每一過程終結(jié)(定義F3)之前建立的<prelisting-type="program-listing"><![CDATA[ CALLXPDI(6,2) CALLXPDI(14,2) CALLXPDI(24,2) CALLXPDI(31,2) CALLXPDI(35,2)]]></pre>在每一系統(tǒng)輸入信號之前(從一個終結(jié)的Ei)<prelisting-type="program-listing"><![CDATA[ CALLXPDI(21,2)]]></pre>以及每一系統(tǒng)輸出信號之后<prelisting-type="program-listing"><![CDATA[ CALLXPDI(20,2)]]></pre>其中6、14、24、31和25是相應(yīng)的終結(jié)C2、*1、C1、=和R的idt,20是W1的idw,21是E1的ide,而2是模型IDm,它在我們的例子中碰巧是2。對于每一獨立目標(biāo)過程(主過程,函數(shù),或子程序),在由圖17的過程18提取其模型和資源庫期間,模型IDm是一個以遞增1的順序所賦予的一個整數(shù)值。所提到的{idt,m}、{idw,m}和{ide,m}是圖8上的同步參數(shù)4。在圖20上我們看到,重繞終結(jié)項/1的二進(jìn)制地址BA(1010)在值上大于相應(yīng)的重繞入口*1的BA(1001)。這仍然不與先前所定義重繞終結(jié)將控制返回到過程單元的原則相矛盾,這已在具有較低二進(jìn)制地址的過程段中表示了,因為該控制真的將要返回到一DO循環(huán)的入口(單元D1),它具有較低二進(jìn)制地址。雖然,根據(jù)在一編程語言中實現(xiàn)一個DO循環(huán)的規(guī)則,這一控制返回還要經(jīng)過通過DO終結(jié)(單元C1)(它將控制返回到D1)的中間步驟。8.目標(biāo)過程模型的“偽并行”執(zhí)行“延遲順序”和“延遲并行”XPD模型執(zhí)行;通過執(zhí)行目標(biāo)過程的XPD模型,根據(jù)目標(biāo)過程的執(zhí)行路徑,我們理解跟蹤其XPD圖的過程。XPD模型的延遲順序執(zhí)行“XPD模型的延遲順序執(zhí)行”是由CPU實現(xiàn)的,在兩個任務(wù)之間有一次或多次CPU切換,其中一個任務(wù)是該目標(biāo)過程的“執(zhí)行段”,而另一個任務(wù)是由XPD分析機在該過程的XPD模型上對第一個任務(wù)進(jìn)行建模。將“執(zhí)行段”定義為位于XPD目標(biāo)集的下列單元之間的該目標(biāo)過程的一部分過程入口,系統(tǒng)輸入點(同步{ide,m})和“過程終結(jié)”(同步{idt,m})。XPD模型的延遲并行執(zhí)行“XPD模型的延遲并行執(zhí)行”是由多于一個的CPU實現(xiàn)的,其中目標(biāo)過程的“執(zhí)行段”的任務(wù)和由XPD進(jìn)行的對先前被執(zhí)行的“執(zhí)行段”進(jìn)行建模的任務(wù)是并行進(jìn)行的。同樣XPD模型的“偽并行”執(zhí)行的方法是由過程終結(jié){idt,m}和系統(tǒng)輸入{ide,m}的同步信號實現(xiàn)的,但首先,XPD分析機過程的實現(xiàn)是以CALL語句形式進(jìn)行的,其中目標(biāo)過程等待控制從XPDI模型返回,其次,并行過程由同步信號激活。將同步信號{ide,m}和{idt,m}設(shè)計成使XPD模型“跟得上”目標(biāo)過程。將同步信號{idw,m}設(shè)計成使ISOPS映象“跟得上”目標(biāo)過程與XPD模型內(nèi)的過程時刻。由于來自過程終結(jié)的信號表示最小開銷的建立,如先前所討論的,它們也代表最小開銷同步信號,以使該模型跟得上目標(biāo)過程。在系統(tǒng)輸入點的同步是方便的,因為在“操作人員思考期間”,目標(biāo)過程總是要中斷的。9.運行XPD分析機。建立和傳播目標(biāo)過程內(nèi)的因果關(guān)系分析計算庫。知識歸納。參見圖8,在XPDI(11)接收一個同步信號時,發(fā)生下列過程,其中同步信號采取{id,m}或{k,b,m}(圖8中的4)的形式。我們假設(shè)采取{id,m}形式。根據(jù)先前描述的“ID公式”,XPD將{id}翻譯成相應(yīng)模型{m}的{k,b},并知道模型m的MK值b=(id-1)/mk+1k=id-(b-1)*mk過程地址{k,b}將指向過程終結(jié)(定義F3)(這時{id}是{idt})或系統(tǒng)輸出信號W(這時{id}為{idw}),或自終結(jié)(E)的輸入(這時id為{ide}),不再有其它可能。如果XPDI接收到{idt}同步參數(shù),就將該{idt}寫進(jìn)系統(tǒng)執(zhí)行歷史文件中(圖8中的3)。如果同步信號是{ide,m}或{idt,m},XPDI啟動XPDI分析機,并出現(xiàn)下列過程——XPD分析機將再次從前一同步信號{k,b}點或從入口點起跟蹤該模型,直至當(dāng)前同步信號的{k,b},正如先前在我們討論記錄過程執(zhí)行歷史的最小開銷方式時所描述的;——在經(jīng)過XPD模型的每一單元期間,其本地時刻屬性{p}遞增1,因而被保持為當(dāng)前值?!谟龅降囊?Wi)單元是一系統(tǒng)輸出時,XPD分析機啟動“知識歸納”鏈周期(權(quán)利要求9)(見定義K10“知識傳播終結(jié)”事件(kp終結(jié))和圖14),其中如果(Wi)有多于一個的輸出參數(shù),每一周期由一系統(tǒng)輸出參數(shù)產(chǎn)生。知識傳播終結(jié)穩(wěn)定“知識傳播”過程,否則,隨著目標(biāo)過程的向前執(zhí)行,這一過程就變成越來越長的第二過程鏈。通過知識歸納過程(見定義K12一事件的“W-擁有者”和圖14,15,16,17)以及先前描述的“知識傳播規(guī)則”有可能傳播正確算法空間以及建立PA的“W-擁有者”事件。由“知識歸納過程”每次將一個執(zhí)行事件從“不確定”升級為“正確”,將對應(yīng)ACB結(jié)構(gòu)的對應(yīng)位從0升級到1,從而增加ACB的知識(見ACB定義和圖19)。在{ide,m}同步信號期間,XPDI將一{k,b,p,m}記錄放入SIPS映象(圖8中的1),其中{p}當(dāng)前被同一同步信號升級,而{k,b}是由前述的“ID公式”從{ide}中獲得的。參見圖21B,語句CALLXPDI(21,2){k,b,p,m}項將變成{5,3,p,2},其中{p}是當(dāng)前被升級的本地時刻屬性,XPDI可從XPD模型中取得它。下面的語句WRITE(M,002)CH將實際的輸入記錄放入監(jiān)視器文件(單元M)(圖7中的19)。在下一同步信號期間XPDI將實際輸入記錄從暫時監(jiān)視器文件拷貝到系統(tǒng)輸入歷史文件,然后再到同步參數(shù){k,b,p,m}。如果同步信號來自系統(tǒng)輸出單元{idw,m},XPDI就啟動前述的過程以更新ISOPS映象,然后將控制返回到目標(biāo)過程。在建立ISOPS映象的{k,b,p,m}參數(shù)期間,XPDI從XPD模型的對應(yīng)Wi單元取出本地時刻參數(shù),并將其增1,因為{idw,m}信號并不進(jìn)行XPD分析機的模型同步過程。10.通過引用ISOPS映象激活XPD分析機“知識演繹”過程,以便以不斷減少的不確定性確定出錯位置區(qū)域或需修改的地方。通過四個座標(biāo){k,b,p,m}保證從系統(tǒng)輸出中能絕對尋址程序系統(tǒng)內(nèi)的任一事件。從系統(tǒng)輸出中不需要參考程序源代碼就能夠訪問和分析系統(tǒng)內(nèi)的任一事件-有時對于程序用戶或編程人員是可視的,代表了我們所發(fā)明的接口的原型,這種接口是在分析工具用戶與目標(biāo)過程之間?!爸R演繹”參見圖13,通過前述的XPD分析機的“知識歸納”過程不斷減少不確定算法空間。而“知識演繹”過程實現(xiàn)如下XPD機的用戶查看系統(tǒng)輸出,它是由遞增圖象提取器/構(gòu)造器從系統(tǒng)結(jié)果歷史中再次建立的。通過將光標(biāo)、鼠標(biāo)或其它指點設(shè)備定位,就可激活I(lǐng)SOPS映象的相應(yīng){k,b,p,m}參數(shù)。如果對于該XPD機,所引用的系統(tǒng)輸出結(jié)果被定義為“未預(yù)計的”而且因此是“不正確的”,XPD分析機將開始“知識演繹”過程,它是沿著與目標(biāo)過程執(zhí)行相反的方向遵循跟蹤事件的同一“知識歸納”規(guī)則,直至“知識傳播終結(jié)”,在此情況下,稱之為“知識演繹終結(jié)”。唯一的差別在于在恢復(fù)該過程期間,在ACB結(jié)構(gòu)上不進(jìn)行任何知識增加,“不確定算法空間”是所查詢的輸出事件的“事件定義空間”的一部分。不確定算法空間是在至“知識演繹終結(jié)”鏈上的UPA地址的組合。在圖13中,該不確定算法空間在過程時刻t3用d(e3)事件定義空間的∥表示出。正如在圖13上所看到的,在目標(biāo)過程的算術(shù)空間不變,正確算法空間不斷增加的情況下,事件定義空間的不確定部分持續(xù)減少。W-擁有者事件使得在所接受的輸出結(jié)果有所變化期間能使目標(biāo)過程的知識保持最新。在一個先前被批準(zhǔn)的W-事件不再被批準(zhǔn)時,該目標(biāo)過程知識就會下降,其下降程度由不被批準(zhǔn)的W-擁有者事件在目標(biāo)過程時刻內(nèi)的位置所決定。我們將XPD機的這一過程稱作“喪失知識”。在圖13中,通過下列的討論,可以理解什么是“喪失知識”1.執(zhí)行目標(biāo)過程直至過程時刻(t3),它將正確算法空間增加到在過程時刻(t3)所示的程度。(在該圖中用符號+表示CPA)2.稍晚,在過程時刻(t2)用對結(jié)果的引用建立一個故障(或修改結(jié)果所需要的)。知識的程度(正確算法空間)將降至過程時刻(t2)所示的程度。這是通過對于過程時刻(t2)后出現(xiàn)W-擁有者事件的PA使其狀態(tài)從CPA變?yōu)閁PA而得到的。根據(jù)相對于各個預(yù)計或者相對于所改變的單個預(yù)計或者相對于所改變的系統(tǒng)需求的故障的定義,能夠“喪失知識”使得XPD機過程具有靈活性和實用性。11.解釋XPD圖和XPD資源庫;參看圖20,用XPD圖充分表示一目標(biāo)過程的控制,該圖是一二維結(jié)構(gòu),目標(biāo)過程的XPD是在其基礎(chǔ)上建立的。在跟蹤目標(biāo)過程XPD圖執(zhí)行XPD模型期間通過解釋XPD資源庫的語句而執(zhí)行目標(biāo)過程(圖18c)。在該實現(xiàn)中,圖7所示的傳統(tǒng)目標(biāo)碼代碼實現(xiàn)方式中的下列部件將不需要—X-Source產(chǎn)生器—X-Source碼—編譯和鏈結(jié)—X-Object碼參見圖18c,在執(zhí)行(語法分析)XPD模型期間,語言解釋器(23)解釋XPD資源庫語句,XPD驅(qū)動器(20)將XPD資源庫語句從XPD資源庫中提出來。來自解釋器的信號(24)返回一個代碼,它是下列三個值之一(a)所執(zhí)行的XPD資源庫語句不是一邏輯語句(不是L或D);(b)否定執(zhí)行為邏輯語句(L或D)的XPD資源庫語句;(c)肯定執(zhí)行為邏輯語句(L或D)的XPD資源庫語句;在語法分析(執(zhí)行)XPD模型時,XPD驅(qū)動器根據(jù)返回的代碼采取行動。見圖20和圖21,在執(zhí)行XPD模型期間,XPD驅(qū)動器將向XPD模型產(chǎn)生同步信號{idt,m},{ide,m}和{idw,m}。XPDI模塊又以偽并行XPD模型執(zhí)行期間的同樣方式激活XPD分析機。其差別在于在偽并行XPD模型執(zhí)行期間,在XPD模型上“執(zhí)行段”后跟再次跟蹤同一段的過程。相反,在XPD驅(qū)動器執(zhí)行目標(biāo)過程期間,執(zhí)行目標(biāo)過程和執(zhí)行其XPD模型是由同一過程實現(xiàn)的。參見圖20A,下列信號可以在不同過程時刻以{id,m}格式產(chǎn)生<prelisting-type="program-listing"><![CDATA[ CALLXPDI(6,2) CALLXPDI(14,2) CALLXPDI(20,2) CALLXPDI(21,2) CALLXPDI(24,2) CALLXPDI(31,2) CALLXPDI(35,2)]]></pre>或以{k,b,m}格式<prelisting-type="program-listing"><![CDATA[ CALLXPDI(6,1,2) CALLXPDI(6,2,2) CALLXPDI(4,3,2) CALLXPDI(5,3,2) CALLXPDI(8,3,2) CALLXPDI(7,4,2) CALLXPDI(3,5,2)]]></pre>在對過程進(jìn)行解釋的情況下,對于目標(biāo)過程的修改用此方法更易進(jìn)行,因為不需要再次編譯或再次鏈接。另外,對于目標(biāo)過程邏輯的修改和對目標(biāo)過程可執(zhí)行部件的修改在這里可以分開進(jìn)行,這也簡化了修改的任務(wù)。12.XPD目標(biāo)碼和其執(zhí)行將XPD模型作為目標(biāo)過程目標(biāo)碼的一部分執(zhí)行;參看圖18A,XPD目標(biāo)碼包括兩部分1.在XPD模型內(nèi)由XPD圖表示的控制部分;以及2.由翻譯成機器碼XPD資源庫語句表示的可執(zhí)行部分。在這種實現(xiàn)中,正如在解釋XPD圖和XPD資源庫的情況,在圖7中所示的傳統(tǒng)目標(biāo)碼實現(xiàn)中的下列部分將是不需要的?!猉-Source產(chǎn)生器;—X-Source碼;—編譯和鏈接;—X-Object碼XPD目標(biāo)碼的執(zhí)行包括兩個過程1.XPD驅(qū)動器(20)執(zhí)行XPD模型,即跟蹤XPD圖。2.預(yù)先翻譯成XPD資源庫的機器碼語句的、不包括任何控制指令的機器碼片段由過程(23)執(zhí)行,提交給XPD驅(qū)動器執(zhí)行正如在解釋XPD資源庫語句的情況,作為執(zhí)行代碼片段的結(jié)果XPD驅(qū)動器接收一個信號,并在該信號來自邏輯語句(XPD目標(biāo)碼的L或D語句)時取適當(dāng)?shù)姆较颉T趫?zhí)行XPD模型期間,XPD驅(qū)動器向XPDI模塊產(chǎn)生同步信號{idt,m},{ide,m}和{idw,m}。XPDI模塊又將以在偽并行XPD模塊執(zhí)行期間的同一方式激活XPD分析機。其差別在于,在偽并行XPD模塊執(zhí)行的“執(zhí)行段”其后是再次跟蹤XPD模型上的同一段。相反,在XPD驅(qū)動器執(zhí)行目標(biāo)過程期間,目標(biāo)過程的執(zhí)行和其XPD模型的執(zhí)行實際上是由同一過程實現(xiàn)的。參見圖20A,下列信號是在不同過程時刻以{id,m}格式產(chǎn)生的<prelisting-type="program-listing"><![CDATA[ CALLXPDI(6,2) CALLXPDI(14,2) CALLXPDI(20,2) CALLXPDI(21,2) CALLXPDI(24,2) CALLXPDI(31,2) CALLXPDI(35,2)]]></pre>或者是以{k,b,m}格式<prelisting-type="program-listing"><![CDATA[ CALLXPDI(6,1,2) CALLXPDI(6,2,2) CALLXPDI(4,3,2) CALLXPDI(5,3,2) CALLXPDI(8,3,2) CALLXPDI(7,4,2) CALLXPDI(3,5,2)]]></pre>參見圖18B將可執(zhí)行部分地址(ExecutableComponentAddress—ECA)屬性加進(jìn)XPD模型的每一可執(zhí)行單元PA中。ECA是對應(yīng)于被翻譯的XPD資源庫語句的機器碼片段在XPD目標(biāo)碼的可執(zhí)行部分文件的偏移量。每一片段后跟語句分隔符字節(jié)(StatementSeparatorByte-SSB)。XPD驅(qū)動器(圖18中的20)從XPD模型(圖18A中的8)中讀取ECA的值,讀對應(yīng)的機器碼片段的值,并將之送到執(zhí)行XPD目標(biāo)碼的可執(zhí)行部分的模塊(圖18A中的23)供執(zhí)行。作為監(jiān)視系統(tǒng)輸入的另一不同方法是這樣實現(xiàn)的在圖18的模塊21將自系統(tǒng)終結(jié)的輸入翻譯成XPD目標(biāo)碼的可執(zhí)行部分時,它增加另一條語句,該語句將自系統(tǒng)終結(jié)的輸入動作轉(zhuǎn)變?yōu)橄虮O(jiān)視器緩沖區(qū)文件(M)(圖18中的19)的輸出。比如在圖21B中,READ(*,002)CH后跟WRITE(M,002)CH。XPD驅(qū)動器在選擇送往執(zhí)行過程(23)的下一代碼片段期間可以選擇激活或不激活這一第二條語句,以控制對系統(tǒng)輸入的監(jiān)視。13再次編譯與鏈接XPD目標(biāo)碼;參見圖18A和18B。XPD目標(biāo)碼結(jié)構(gòu)包括兩個部分控制部分和執(zhí)行部分,它使修改目標(biāo)過程更加便利。若改變僅僅在于控制,就改變控制部分。若改變在于修改可執(zhí)行部分,則在可執(zhí)行部分文件中建立一條新項,更新在控制部分中的ECA引用??刂坪涂蓤?zhí)行部分通過ECA的鏈接是在運行時進(jìn)行的。因此僅對新建立的或修改了的XPD目標(biāo)碼的可執(zhí)行部分的語句進(jìn)行編譯、重新編譯或解釋。對應(yīng)于新建立的XPD資源庫單元,對XPD圖單元的插入、刪除或修改有可能要重新安排XPD目標(biāo)碼的控制部分。在一些情況下,在只需要對控制結(jié)構(gòu)重新安排時,對于XPD目標(biāo)碼的修改可以不改變可執(zhí)行部分,而僅僅重新安排XPD圖內(nèi)的單元的順序。在一些情況中,對于XPD目標(biāo)碼的修改可以通過不激活控制部分單元而進(jìn)行,因此跳過可執(zhí)行部分的對應(yīng)單元。在當(dāng)控制和可執(zhí)行XPD目標(biāo)碼部分之間的鏈接是在運行時進(jìn)行時,由XPD目標(biāo)碼實現(xiàn)的兩個或兩個以上目標(biāo)碼的鏈接或重新鏈接是通過僅鏈接XPD目標(biāo)碼的控制部分而進(jìn)行的。由于XPD機經(jīng)過其高級接口能通過引用其系統(tǒng)結(jié)果以及后來XPD分析機的分析對任一基本過程,即語句進(jìn)行尋址,因此有一種途徑能夠不需使用傳統(tǒng)的編譯器和鏈接器進(jìn)行重新編譯和重新鏈接而實現(xiàn)對目標(biāo)過程的自動修改??梢酝ㄟ^對XPD圖中的單元插入、刪除或重新安排而自動修改控制部分,這是在用戶指點系統(tǒng)輸出事件,以及請求重新安排它們的順序、條件或無條件地激活或不激活它們的指導(dǎo)之下進(jìn)行的??梢酝ㄟ^指點已有系統(tǒng)輸出結(jié)果以及隨后用XPD分析機分析它們的同樣方法從已有系統(tǒng)輸出結(jié)果中導(dǎo)出這種條件,正如“知識演繹”方法所做的,其中XPD分析機再次跟蹤事件的歷史。這是在此提出面向結(jié)果的編程(ResultOrientedProgramming-ROP)方法的基礎(chǔ),ROP是一種用于計算機程序前期開發(fā)的一種十分高級的語言。實際上,這一方法的級別隨著目標(biāo)過程的前期開發(fā)而提高,因為有越來越多的事件可以分析和再次使用。如果對所調(diào)用的過程的外部引用是在運行時解決的,而且沒有過程是預(yù)先鏈接在一起,因此DLL(動態(tài)鏈接庫-DynamicLinkLibrary)只包括一個過程,而XPD模型和XPD資源庫是為此而建立的,因在下列情況時,對于過程的修改不需要任何重新編譯或鏈接(a)如果要增加一條新的XPD資源庫語句(它是從已有的當(dāng)前過程可執(zhí)行部分單元中挑選出來的),或者,如果在可執(zhí)行部分中找不到它,則當(dāng)被控制部分的相應(yīng)單元激活時才解釋它;(b)使用前面的修改XPD圖的方式由XPD機自動編輯XPD目標(biāo)碼的控制部分。14.在測試與生產(chǎn)的所有階段上實現(xiàn)XPD機過程;我們建議在測試或生產(chǎn)的任一階段上使用XPD機,任一階段上可用下列方法之一實現(xiàn)在執(zhí)行目標(biāo)計算機過程時執(zhí)行XPD機過程,使XPD機過程是下列過程的組合—與傳統(tǒng)目標(biāo)碼實現(xiàn)的XPD模型的目標(biāo)過程執(zhí)行“偽同步”;或—將XPD模型作為XPD目標(biāo)碼實現(xiàn)方式中的目標(biāo)過程目標(biāo)碼的一部分執(zhí)行;—由系統(tǒng)輸出事件激活的“基本知識歸納”,它在目標(biāo)過程單元之間傳播這種知識,直至“知識傳播終結(jié)”;—“知識演繹”過程,它定義在目標(biāo)過程的XPD模型內(nèi)的不確定區(qū)域。15.面向結(jié)果的編程(ROP)面向結(jié)果的編程(ROP)的方法允許通過十分高級的接口和不需要與過程源代碼人工交互而修改或建立先前創(chuàng)建的過程,它具有—通過引用SYSOUT事件,而將用戶接口限制到引用已有系統(tǒng)結(jié)果上;—通過XPD機過程自動地進(jìn)行添加或修改,其中XPD機過程再次利用所引用的SYSOUT事件的事件定義空間;16.實現(xiàn)程序聽診;結(jié)合傳統(tǒng)上的視頻(圖象)分析的聲音分析可以實現(xiàn)對程序或程序系統(tǒng)的動態(tài)理解。任一目標(biāo)過程的執(zhí)行可以被看作(聽作)由過程算法所定義的音樂,是輸入數(shù)據(jù)組合的函數(shù)。在理解程序的認(rèn)識過程中,我們面臨著“播放計算機”的任務(wù)。根據(jù)定義,這是一個動態(tài)過程。另一方面,根據(jù)定義圖象(畫面)是一靜態(tài)目標(biāo)。通過比較兩種再現(xiàn)音樂的方式,可以理解動態(tài)過程的圖象和聲音表示的之間的差別一種是閱讀音樂樂譜,(圖象表示),而另一種是實際播放音樂。在一個好的音樂家閱讀樂譜時,他實際上聽見了音樂,樂譜的圖象表示被聲音放大了,即使它僅可以由正在閱讀樂譜的專家聽到。通過經(jīng)由圖象結(jié)構(gòu)單元顯示控制流,可以改變目標(biāo)過程的靜態(tài)特性。這可以通過加亮接收到一個控制的單元以及在圖中移動上一個加亮位置而實現(xiàn)。與過程的聲音同步本身仍是一種過程診斷機制,而且可以與視頻結(jié)果診斷結(jié)合起來。在程序分析期間,可以以如下方式實現(xiàn)聲音效果1.在并行或程序生命后期仿真期間,通過將下一所記錄的終結(jié)地址{k,b}施加到程序的XPD模型,我們可以在程序算法的XPD圖上跟蹤程序執(zhí)行。2.在跟蹤期間,只需加亮當(dāng)前活躍的XPD圖的單元而實現(xiàn)程序執(zhí)行過程的視頻跟蹤。3.通過調(diào)用硬件內(nèi)部功能(其產(chǎn)生音頻頻率并將它們送往揚聲器)而加入聲音效果。在用上述方法分析一個系統(tǒng)時,最好是在計算機上添加一副耳機,而不會影響其它編程人員。頻率可計算為兩個參數(shù)的函數(shù)(k,b),其中將{k}增1就將頻率增加為一度,而將增1就將頻率增加一較大的度數(shù),例如八度。而分枝轉(zhuǎn)回將相應(yīng)地減少頻率。蜂鳴長度,根據(jù)跟蹤XPD圖的一個單一單元,它可以設(shè)置為比如可以為人耳所辨別。這種聲音執(zhí)行仿真的效果是這樣的,根據(jù)過程硬編碼結(jié)構(gòu)和輸入數(shù)據(jù)組合,程序執(zhí)行的每一過程有其自己的“音樂”,在仿真具有較多循環(huán)次數(shù)的情況下,可以設(shè)置一編碼信號,來標(biāo)識這一循環(huán),從而不必跟蹤所有循環(huán)。聲音分析的效果是這樣的,用戶能夠聽到程序行為,就象醫(yī)生聽到病人的心跳一樣。1.在很長時間沒有觀察到一個特定的輸出結(jié)果時,可以激活這種分析,以聽見—系統(tǒng)死掉;—程序在循環(huán)中;—在等待一輸入;(當(dāng)最后所執(zhí)行的單元是一輸入語句時,可以產(chǎn)生一個特殊聲調(diào))。2.程序算法的最重要地方可以使用最普通的頻率,而且因此也易于識別。3.可以聽見隨著不同的輸入數(shù)據(jù)組合程序行為的不同。4.特殊聲調(diào)可以指示對于一子函數(shù)的調(diào)用,而另一特殊聲調(diào)可以指示從該調(diào)用返回。聲音分析可以僅限于起先的那些信號,而且可以選擇將之?dāng)U展到在一特定函數(shù)內(nèi)的過程執(zhí)行,如果要研究其功能的話。5.在過程仿真(實際運行或后期運行)期間,可以將聲音分析記錄下來,而且在脫離實際仿真模式下在向前向后兩個方向上重放。6.可以結(jié)合系統(tǒng)結(jié)果的重放而進(jìn)行重放,從而對于那些所得到的結(jié)果給予過程所需要的強度。7.可以將對于同一過程的不同輸入數(shù)據(jù)組合的情況記錄下來并重播放之,從而對那些不同輸入情況分析其計算強度的差別。假定程序出錯的可能是有關(guān)基本過程個數(shù)的一個函數(shù),在系統(tǒng)進(jìn)化到一新的要求時,這一分析將有助于選擇較簡單的(輸入-過程-輸出)組合。權(quán)利要求1.一種提取出目標(biāo)過程的算法放入算法的XPD構(gòu)架中的方法,其中算法的XPD構(gòu)架是用“下一最小期望”規(guī)則,或相反用“下一最大期望”規(guī)則建立的一種確定的普通形式,該方法具有一過程單元的“算法期望”是用其二進(jìn)制地址(BA)確定的,該二進(jìn)制地址是由二進(jìn)制0和1組成的,它們是在一“t-經(jīng)過”的即將產(chǎn)生的部分上的一個“精減邏輯條件”的解,該“t-經(jīng)過”通過該單元;“t-經(jīng)過”是一從過程入口至一“過程終結(jié)”的經(jīng)過;LC的否定解(NO解)被賦予一“低期望”或“0-期望”,而LC的肯定解(YES解)被賦予一“高期望”或“1-期望”;將具有多于兩個輸出的邏輯條件(LC)減少為只具有兩個邏輯輸出的兩個或兩個以上精減LC;在構(gòu)造主分枝過程中,消除向前的“GOTO”;在“過程終結(jié)”退出目標(biāo)過程時,將其標(biāo)識成“退出終結(jié)”,而在“過程終結(jié)”將控制返回到過程單元時將其標(biāo)識為“重繞終結(jié)”,該過程單元已在過程段中以較低的二進(jìn)制地址表示;標(biāo)識一過程段;將兩個不同二進(jìn)制地址間的關(guān)系進(jìn)行量化。2.根據(jù)權(quán)利要求1的將目標(biāo)過程中的算法提取出來放入“雙向終結(jié)的”XPD圖的方法,具有XPD圖沿兩個方向建立,其中第一方向由LC的0-期望定義,而另一方向由LC的1-期望定義;XPD圖的每一單元被賦給一個描述該單元的“過程期望”的“二進(jìn)制地址”(BA)。3.一種通過確定目標(biāo)過程的單元間的可訪問性而標(biāo)識該目標(biāo)過程單元間的“期望依賴性”的方法,包括(a)標(biāo)識邏輯條件的一個域;(b)標(biāo)識一XPD圖“段”的一個邏輯級;(c)標(biāo)識一過程單元的算法地址(AA)和過程地址(PA);(d)確定一過程的算法空間;(e)通過確定過程單元的“幻像”和過程單元的“普通幻像”,而確定一過程單元的訪問域;(f)一種傳播過程終結(jié)的普通幻像的方法。4.權(quán)利要求3的一種方法,通過為一過程終結(jié)確定一退出訪問指示符,將所確定的過程單元的可訪問性用于確定數(shù)據(jù)獨立無終止循環(huán),其中在傳播終結(jié)的“普通幻像”的過程期間,退出訪問指示符有可能被從“off”傳播到“on”。5.一種在進(jìn)行權(quán)利要求2的過程期間建立一目標(biāo)過程的XPD資源庫的方法,其中XPD資源庫是該目標(biāo)過程的一種表示,其表示并不包含任何過程控制指令,XPD資源庫的每一可執(zhí)行語句被賦予一個對于XPD圖的相應(yīng)單元的引用。6.一種通過將屬性賦給XPD圖單元建立XPD模型的方法,其中將對應(yīng)于目標(biāo)過程的每一可執(zhí)行語句的單元賦予一個動態(tài)改變的“本地時刻”屬性和“分析計算庫”(ACB)屬性,其中“本地時刻”,是一個整數(shù),它表示在該目標(biāo)過程內(nèi)該過程單元的當(dāng)前出現(xiàn);“ACB”,是0和1的二進(jìn)制結(jié)構(gòu),對于相應(yīng)的“過程事件”,該0和1對應(yīng)于關(guān)于“正確性”或其“不確定性”的知識,其中,事件“正確性”的“知識”狀態(tài)與該算法空間內(nèi)的“本地時刻”和“過程地址”有關(guān),而且“知識”狀態(tài)可能由XPD機過程改變。7.一種建立一目標(biāo)過程X-Source碼的方法,其中X-Source碼是對原目標(biāo)過程的再建造而且在功能上與原目標(biāo)過程等價。其中建立與XPD接口模塊的接口,包括(a)在該目標(biāo)過程的“終結(jié)”建立同步信號作為記錄目標(biāo)過程的行為歷史的最小開銷;(b)通過建立遞增系統(tǒng)輸出過程同步映象(ISOPS映象),在目標(biāo)過程的系統(tǒng)輸出單元建立同步信號,以在用戶與理解該目標(biāo)過程功能的XPD機過程之間建立一個十分高級接口;(c)在目標(biāo)過程的系統(tǒng)輸入單元建立同步信號以建立系統(tǒng)輸入過程同步映象(SIPS映象)。8.一個將一目標(biāo)過程內(nèi)的一基本過程,即可執(zhí)行語句,確定為在其執(zhí)行的特定“事件”中即在一特定“過程時刻”中是“正確”或“不確定”的方法,其中該特定“過程時刻”是在目標(biāo)過程內(nèi)的位置和時刻。9.一種根據(jù)權(quán)利要求8的、歸納目標(biāo)過程“正確性”的基本知識的方法,在該方法中,其歸納過程是通過向后即與目標(biāo)過程執(zhí)行相反的方向跟蹤“祖先事件”將這一知識傳播進(jìn)“祖先事件”,直至到達(dá)“知識傳播終結(jié)”,該方法包括(a)標(biāo)識過程“事件”或“過程時刻”;(b)通過系統(tǒng)輸出過程事件激活“知識傳播過程”;(c)將系統(tǒng)輸出事件標(biāo)識為“正確”,除非而且直到在未來系統(tǒng)輸出結(jié)果驗證期間或由于有了新的系統(tǒng)需求而將輸出事件定義“未預(yù)計”或“不確定”;(d)相對于特定過程時刻,標(biāo)識“正確過程地址”(CPA)和“不確定過程地址”(UPA);(e)在一“祖先”事件對當(dāng)前事件的值有影響時,將該“祖先”事件標(biāo)識為“值祖先事件”,而在一“祖先”事件對到達(dá)當(dāng)前事件的路徑上的LC的值有影響時,將其標(biāo)識為“控制祖先事件”;(f)批準(zhǔn)一個事件的過程產(chǎn)生批準(zhǔn)其最近祖先的第二過程,除非該最近祖先(1)已經(jīng)被批準(zhǔn),或(2)不存在,在此情況中該事件初始數(shù)據(jù)操縱事件,用(1)和(2)代表“知識傳播終結(jié)事件”;(g)將“知識傳播終結(jié)”標(biāo)識為一個當(dāng)前過程的輸入事件,或由本項權(quán)利要求所定義的前面的知識歸納過程將當(dāng)前其基本知識狀態(tài)定義為“正確”的事件。10.一種執(zhí)行XPD模型的方法,其執(zhí)行是通過傳統(tǒng)目標(biāo)碼所實現(xiàn)的、以“延遲順序”或“延遲并行”XPD模型執(zhí)行方法與目標(biāo)過程的“偽并行”,包括根據(jù)目標(biāo)過程的執(zhí)行路徑,執(zhí)行XPD模型作為跟蹤XPD圖的一個過程;由一個或多個在兩個任務(wù)間切換的CPU實現(xiàn)XPD模型的“延遲順序執(zhí)行”,其中一個任務(wù)是目標(biāo)過程的“執(zhí)行段”,而另一個任務(wù)是由XPD分析機對該過程XPD模型上的第一個任務(wù)進(jìn)行建模,其中“執(zhí)行段”被定義為位于XPD目標(biāo)集的下列單元之間的過程段的一部分過程入口,系統(tǒng)輸入(同步{ide,m})點和“過程終結(jié)”(同步{idt,m});“XPD模型的延遲并行執(zhí)行”是由多于一個CPU實現(xiàn)的,目標(biāo)過程“執(zhí)行段”的任務(wù)和由XPD分析機對先前被執(zhí)行的“執(zhí)行段”的建模任務(wù)是并行進(jìn)行的。11.一種通過執(zhí)行XPD目標(biāo)碼而執(zhí)行目標(biāo)過程的方法,包括消除了權(quán)利要求7所描述的產(chǎn)生和編譯X-Source碼的步驟;XPD目標(biāo)碼包括兩個部分(1)可執(zhí)行部分,它被翻譯成機器碼XPD資源庫語句,在XPD資源庫中不包括任何過程控制命令,和(2)控制部分,它是目標(biāo)過程的XPD圖;在語法分析XPD圖期間,XPD驅(qū)動器要判斷接下來要執(zhí)行XPD目標(biāo)碼的可執(zhí)行部分的哪一語句,該過程實際上是執(zhí)行目標(biāo)過程的XPD模型,從而不必進(jìn)行XPD模型的“偽并行”執(zhí)行,如在權(quán)利要求10所述,其中XPD圖是XPD目標(biāo)碼的控制部分。12.一種解釋XPD圖和XPD資源庫從而消除了權(quán)利要求7所描述的產(chǎn)生和編譯X-Source碼的步驟,其中語言解釋器在某一時刻通過解釋來自該過程的XPD資源庫的語句執(zhí)行目標(biāo)過程,其中在XPD資源庫中不包括任何控制語句;在對目標(biāo)過程的XPD圖進(jìn)行語法分析期間,XPD驅(qū)動器判斷接下來要解釋資源庫中哪一語句,該過程實際上是執(zhí)行該目標(biāo)過程的XPD模型,從而不再需要權(quán)利要求10所描述的XPD模型的“偽并行執(zhí)行”。13.一種在執(zhí)行XPD模型期間XPD分析機激活“知識歸納”過程的方法,在傳統(tǒng)目標(biāo)碼實現(xiàn)方式中以“偽并行執(zhí)行”執(zhí)行XPD模型(權(quán)利要求10),或通過解釋XPD圖和XPD資源庫執(zhí)行(權(quán)利要求12)或作為XPD目標(biāo)碼執(zhí)行的一部分(權(quán)利要求11),該方法包括在XPD分析機經(jīng)過指向系統(tǒng)輸出的一個W單元時啟動“知識歸納”過程;XPD分析機以權(quán)利要求9描述的原則傳播知識,其在W輸出信號的每一參數(shù)上發(fā)生。14.一種通過引用系統(tǒng)輸出事件、以不斷降低不確定性的激活“知識演繹”過程的方法,包括通過在系統(tǒng)輸出上定位光標(biāo)、鼠標(biāo)或其它指點設(shè)備而標(biāo)識相應(yīng)系統(tǒng)輸出事件,該系統(tǒng)輸出是從ISOPS映象,即遞增系統(tǒng)輸出過程同步映象中重新建立的;用系統(tǒng)輸出“事件定義空間”的相應(yīng)部分確定要修改的位置,該事件定義空間是在相應(yīng)于所引用的系統(tǒng)輸出事件的“過程時刻”在過程地址(PA)上建立的,該過程地址的狀態(tài)為UPA,即“不確定過程地址”。一“事件定義空間”是相應(yīng)于系統(tǒng)輸出事件的“祖先”的“過程地址”的組合;“知識演繹”過程在任一方向上被“知識演繹終結(jié)”所終止,其中知識演繹終結(jié)與權(quán)利要求9描述的“知識傳播終結(jié)”具有同樣的定義。15.一種執(zhí)行如權(quán)利要求10、11或12所描述的XPD模型的方法,該方法被應(yīng)用于計算機過程的測試與生產(chǎn)的多個階段,其中XPD機過程的執(zhí)行與目標(biāo)計算機過程的執(zhí)行是一起的,XPD過程是下列過程的組合如權(quán)利要求(10)所描述的,在傳統(tǒng)目標(biāo)碼實現(xiàn)中,與XPD模型的目標(biāo)過程執(zhí)行“偽并行”;或如權(quán)利要求(11)所敘述的,將XPD模型作為XPD目標(biāo)碼實現(xiàn)方式的一個控制部分而執(zhí)行,并由XPD驅(qū)動器作為目標(biāo)過程執(zhí)行的一部分,或由XPD驅(qū)動器在解釋XPD模型與XPD資源庫期間執(zhí)行XPD模型;由系統(tǒng)輸出事件通過在目標(biāo)過程單元之間傳播“基本知識”直至權(quán)利要求(9)中所述“知識傳播終結(jié)”而激活“基本知識歸納”;“知識演繹過程”,它定義在目標(biāo)過程的XPD模型中的不確定區(qū)域,在權(quán)利要求(14)中已描述。16.一種通過在XPD目標(biāo)碼的一個或兩個部分上的有限修改而由XPD目標(biāo)碼實現(xiàn)的對目標(biāo)過程修改的方法,包括只對新近建立或修改的XPD目標(biāo)碼的可執(zhí)行部分的語句進(jìn)行編譯、再編譯或解釋;通過對XPD圖單元進(jìn)行插入、刪除或修改有可能重新安排XPD目標(biāo)碼的控制部分;不需要對可執(zhí)行部分進(jìn)行改動,而只僅僅重新安排在XPD圖內(nèi)該單元的順序,也就是重新安排XPD目標(biāo)碼的控制部分,從而進(jìn)行對XPD目標(biāo)碼的修改;在一些情況下,通過不激活控制部分單元而進(jìn)行對XPD目標(biāo)碼的修改,而且因此跳過可執(zhí)行部分的相應(yīng)單元。17.一種鏈接或再鏈接由XPD目標(biāo)碼實現(xiàn)的一組兩個或多個目標(biāo)過程的方法,這種鏈接是僅鏈接XPD目標(biāo)碼的控制部分,其中在控制和可執(zhí)行XPD目標(biāo)碼部分的鏈接是在運行時實現(xiàn)的。18.一種實現(xiàn)由XPD目標(biāo)碼表示的目標(biāo)過程修改的方法,其中不進(jìn)行任何重新鏈結(jié),通過由XPD分析機進(jìn)行的XPD目標(biāo)碼的自動修改而消除了重新鏈接步驟,該方法包括對所調(diào)用的過程的外部引用是在運行時解決的,沒有過程預(yù)先鏈接在一起,從而DLL只包括一個過程,而XPD模型和XPD資源庫是為此而建立的;如果要加入一新的XPD資源庫語句,對于當(dāng)前過程可執(zhí)行部分單元,它是從已有的單元中挑選出來的,或者,如果在可執(zhí)行部分找不到它,則在該控制部分的相應(yīng)單元激活它時才對之進(jìn)行解釋;XPD分析機自動編輯XPD目標(biāo)碼的控制部分。19.一種面向結(jié)果的編程方法,它通過十分高級接口而且不需要與過程源代碼的任何人工交互而對先前建立的過程進(jìn)行修改或建立,包括根據(jù)權(quán)利要求(14)描述的方法,通過引用系統(tǒng)輸出(SYSOUT)事件將用戶接口限制到引用已有系統(tǒng)結(jié)果;由XPD機過程再次使用所引用的系統(tǒng)輸出(SYSOUT)事件而自動完成添加或修改。20.一種實現(xiàn)“程序聽診”的方法,它允許對目標(biāo)過程的聲音分析,包括將XPD圖的算法空間內(nèi)的XPD圖的每一單元的位置賦予一個聲音頻率,其中該位置由單元的{k,b}座標(biāo)定義,隨著K座標(biāo)的增加,其頻率也逐漸增加,而隨著b座標(biāo)的增加,其頻率就增加一個較大的度,比如八度;在由XPD模型偽并行執(zhí)行跟蹤XPD圖期間,或由XPD驅(qū)動器執(zhí)行XPD目標(biāo)碼期間,或在執(zhí)行后的任一時間重放目標(biāo)過程執(zhí)行歷史期間,產(chǎn)生對應(yīng)于目標(biāo)過程的實際執(zhí)行行為的聲音信號;有可能只對所選擇的XPD目標(biāo)集的單元,比如只對X單元,即CALL語句單元,設(shè)置為產(chǎn)生聲音信號,因此只允許只對CALL層或只對I/O層進(jìn)行聲音分析,如此等等;一種通過對聲音信號的基準(zhǔn)頻率加上不同泛音從而產(chǎn)生不同音色的聲音信號,從而區(qū)分出XPD目標(biāo)集內(nèi)活動單元類型的方法,其中每一類型被賦予其自己音色;在目標(biāo)程序分析期間通過“程序聽診”方法使用內(nèi)部揚聲器或外部聲音設(shè)備,比如耳機。全文摘要本發(fā)明的系統(tǒng)和方法可以減小出錯位置或由于有了新的結(jié)果期望需要修改的位置的不確定性。這是由集成過程完成的,這些過程類似于對于目標(biāo)過程的功能的認(rèn)識理解。目標(biāo)過程的模型是建立在靜態(tài)分析的基礎(chǔ)上,并且在本發(fā)明所引入的“XPD機”進(jìn)行動態(tài)分析期間進(jìn)行目標(biāo)過程知識的積累,并且與其執(zhí)行“偽并行”進(jìn)行目標(biāo)過程的分析,XPD代表專家程序診斷(eXpertProgramDiagnosis)。本發(fā)明提供了一種方法,用于提取出目標(biāo)過程算法的控制部分放入“算法的XPD構(gòu)架”中,后者是一確定的形式,已充分而且必要地代表了任一過程的控制結(jié)構(gòu)。所引進(jìn)的機制是通過建立連續(xù)的“幻像”可以自動地而且方便地計算可訪問性,即目標(biāo)過程的任兩個單元之間的“潛在依賴性”,而且作為一個示例,允許識別“確定的不可終結(jié)”過程結(jié)構(gòu)——數(shù)據(jù)獨立無終止循環(huán)。所引入的機制允許在目標(biāo)過程和所定義的“過程空間”和“過程時刻”的坐標(biāo)內(nèi)建立“因果”關(guān)系知識,和各個單元“正確性”或“不確定性”的一種“相對的”和時間“依賴”的測量。本發(fā)明引入了XPD機的“知識歸納”和“知識演繹過程”,以及一種用于在用戶和所積累的目標(biāo)過程的知識之間的一種十分高級接口的機制。文檔編號G06F11/36GK1125990SQ94192552公開日1996年7月3日申請日期1994年5月10日優(yōu)先權(quán)日1993年5月10日發(fā)明者本杰文·V·夏皮羅申請人:思想軟件公司