專利名稱::用于計(jì)算機(jī)應(yīng)用程序開發(fā)和執(zhí)行的方法、系統(tǒng)和數(shù)據(jù)結(jié)構(gòu)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明與計(jì)算機(jī)編程有關(guān),特別地與計(jì)算機(jī)軟件應(yīng)用開發(fā)和執(zhí)行有關(guān)。背景計(jì)算機(jī)應(yīng)用軟件的開發(fā)和修改需要使用編程規(guī)范編寫代碼或軟件目標(biāo)(“對象”),例如使用第三代語言(“3GL”)、第四代語言(“4GL”)或面向?qū)ο蟮拈_發(fā)(“OOD”)方法。這些傳統(tǒng)方法的關(guān)鍵限制之一是它們在軟件開發(fā)和修改中使用時(shí)需要開發(fā)者實(shí)際修改代碼。不僅從編碼涉及的勞動力觀點(diǎn)看,還是從軟件開發(fā)和測試過程中有關(guān)的協(xié)調(diào)計(jì)劃看這都是一種麻煩的限制。近年來出現(xiàn)的面向?qū)ο蟮闹鲗?dǎo)編程方法通過提供高度模塊化、自然且可重新使用的編程結(jié)構(gòu)促進(jìn)了軟件開發(fā)計(jì)算。作為背景,術(shù)語“對象”,正如被面向?qū)ο筌浖途幊填I(lǐng)域技術(shù)人員所使用的那樣,是指以數(shù)據(jù)結(jié)構(gòu)形式出現(xiàn)的軟件組成部分,通過從一個(gè)向另一個(gè)發(fā)送消息它們能互相通信或調(diào)用。相應(yīng)于相同消息的對象被說成具有一個(gè)共同的“類”。對象的“類”描述并實(shí)現(xiàn)捕捉該類的“實(shí)例”(即對象)行為的所有方法。一個(gè)類的實(shí)例的狀態(tài)或結(jié)構(gòu)由模板所規(guī)定,模板可以規(guī)定一個(gè)對象的狀態(tài)包括了其它對象、由OOD引入的模塊性有助于用分治法解決問題,能較容易調(diào)試,允許對現(xiàn)實(shí)世界問題或環(huán)境有效高的保真模型并能產(chǎn)生可重復(fù)使用的代碼。但還是要求編寫和測試代碼。一個(gè)計(jì)算機(jī)“應(yīng)用”就是一個(gè)程序,計(jì)算機(jī)用戶用該程序交互地執(zhí)行一項(xiàng)任務(wù),并且有別于系統(tǒng)軟件其它軟件(它們?yōu)樵O(shè)計(jì)的應(yīng)用軟件創(chuàng)建運(yùn)行的功能環(huán)境)。然后,計(jì)算機(jī)應(yīng)用軟件的開發(fā)者參預(yù)對用戶接口的支持和達(dá)到用戶的目標(biāo)。在許多應(yīng)用環(huán)境中,特別是基于用戶開發(fā)的軟件環(huán)境中,用戶的需求在更新。想滿足這些需要的應(yīng)用軟件最好能跟著更新。然而,用現(xiàn)有的方法修改應(yīng)用軟件--即使由OOD方式提供了模塊方法--需要編寫或修改計(jì)算機(jī)代碼,調(diào)試代碼,且進(jìn)行中要對應(yīng)用的使用造成最小的干擾。然而,這一目標(biāo)已證明難以把握。為了開發(fā)和修改軟件應(yīng)用,除了與需要編寫和集成新代碼有關(guān)的問題外,現(xiàn)行的軟件應(yīng)用開發(fā)或修改方法的另一個(gè)問題是這些代碼還必須適應(yīng)外部事件的處理,例如用戶的輸入/輸出(I/O)或其它事件的發(fā)生。然而,由于這種用戶I/O或其它事件可以在一種用戶環(huán)境和另一種用戶環(huán)境之間變動很大(例如,與字符輸入相對的圖形用戶接口(“GUI”),用現(xiàn)有技術(shù)適應(yīng)這種不同外部事件的能力要求或者(1)費(fèi)時(shí)的客戶軟件開發(fā)、完成調(diào)試的過程,或者(2)開發(fā)一組具有足以處理意外事件能力的代碼以能在各種當(dāng)時(shí)所知的應(yīng)用環(huán)境中能工作。在每一種情況下,對于每個(gè)應(yīng)用環(huán)境要求大量的編碼和測試過程,一旦這種外部事件條件變化發(fā)生時(shí),只有或者與應(yīng)用環(huán)境下要改進(jìn)的軟件缺點(diǎn)共存或者完成艱巨的再編碼和測試過程。發(fā)明概述本發(fā)明是針對一種用于計(jì)算機(jī)應(yīng)用軟件的開發(fā)(包括設(shè)計(jì)、建立、測試、維護(hù)和修改)和執(zhí)行的方法、系統(tǒng)和數(shù)據(jù)結(jié)構(gòu),它能減輕由現(xiàn)行技術(shù)的用戶所遇到的許多應(yīng)用設(shè)計(jì)、測試和修改問題。最值得注意的是,通過用下面將詳述的運(yùn)行時(shí)間事件管理器和以后連接、可重新使用的模塊、方法或其它對象來替換代碼可以排除對被編碼應(yīng)用程序的需要。代替用作應(yīng)用的程序源代碼或目標(biāo)代碼或者任何形式的以后連接或動態(tài)連接的運(yùn)行時(shí)間應(yīng)用代碼,本發(fā)明的一個(gè)實(shí)施例提供了單個(gè)與應(yīng)用無關(guān)的軟件實(shí)體,這里稱之為運(yùn)行時(shí)間事件管理器(“RTEM”)并描述如下。RTEM是在按照本發(fā)明開發(fā)的任何應(yīng)用的運(yùn)行期間存在的單個(gè)控制實(shí)體。任何時(shí)候給定應(yīng)用和輸入/輸出狀態(tài)時(shí)RTEM繼續(xù)確定通過調(diào)用任何可供使用的手段計(jì)算機(jī)所作的什么才是最合適的。然而,RTEM并不實(shí)際完成它所確定的合適的功能,僅是調(diào)用完成這功能所必須的手段-包括對象、應(yīng)用專用對象及工具。(本文檔中所用的“工具”這一術(shù)語,指的是允許或提供對低層或操作系統(tǒng)功能訪問的過程代碼;例如,下述的數(shù)據(jù)庫訪問工具(“DBAC”)向數(shù)據(jù)庫讀寫信息。本文檔中所用術(shù)語“工具使用”指的是允許對工具訪問的模型設(shè)計(jì)對象,即它為工具提供了接口定義,例如使用DBAC進(jìn)行讀或?qū)懙膮?shù))。這些對象和工具(包括方法、I/O工具或其它能在計(jì)算機(jī)上實(shí)現(xiàn)功能性的軟件結(jié)構(gòu))并不獨(dú)立于RTEM的指導(dǎo)而工作。換句話說,它們最好由RTEM且僅由RTEM調(diào)用來實(shí)現(xiàn)RTEM調(diào)用它們所要作的功能。為了由RTEM調(diào)用對象和工具以完成一種功能,按照登錄過程對象和工具必須可供RTEM使用,示例如下所述。例如,根據(jù)本發(fā)明,沒有對象和工具可以被登錄而為包含了將控制從RTEM轉(zhuǎn)移開的指令的RTEM所使用。因此,例如一個(gè)使用由RTEM運(yùn)行的應(yīng)用的操作者可受到保護(hù)不至于不適當(dāng)?shù)爻饺魏螒?yīng)有的特權(quán),否則會因請求了禁用的動作而危及應(yīng)用的整體性。此外,RTEM重復(fù)地檢查諸如操作者的交互操作等外部事件且因而能立即與操作者交互對話,例如提供信息、接收指令、開始應(yīng)用任務(wù)、跟蹤時(shí)間或其它功能。在本發(fā)明的一個(gè)實(shí)施例中,RTEM是一個(gè)模塊,它管理所有的運(yùn)行時(shí)間事件并實(shí)現(xiàn)與操作者的通信。一個(gè)“事件”可定義為任何計(jì)劃發(fā)生的事情,最明顯地包括了以預(yù)定的方式完成一個(gè)應(yīng)用過程中所發(fā)生的事情。根據(jù)本發(fā)明,RTEM最好是應(yīng)用的操作者直接與之通信的唯一軟件,即使操作者要直接與應(yīng)用通信時(shí)亦如此。RTEM將來自操作者的信息中轉(zhuǎn)給要實(shí)現(xiàn)信息的應(yīng)用事件。RTEM也把應(yīng)用給出的信息返回中轉(zhuǎn)給操作者。除了在操作者和應(yīng)用之間中介傳遞外,本發(fā)明實(shí)施例中的RTEM在運(yùn)行時(shí)間任務(wù)期間中介傳遞所有的事件,這是由于如上所述(以下將詳述),對象或工具不能調(diào)用或與另一個(gè)對象通信。根據(jù)本發(fā)明,通過重復(fù)檢驗(yàn)和處理“模型”以執(zhí)行模型中所捕獲的與應(yīng)用有關(guān)的邏輯,RTEM能調(diào)用或與另一對象通信。每個(gè)模型指定了與應(yīng)用有關(guān)的過程。模型最好只包括數(shù)據(jù),即不可執(zhí)行的對象(全部或部分均可)。模型中的數(shù)據(jù)向處理該模型的RTEM提供規(guī)則、工具、格式和RTEM必須調(diào)用的應(yīng)用專用對象以使與應(yīng)用處理有關(guān)的運(yùn)行時(shí)間事件出現(xiàn)。在本發(fā)明的實(shí)施例中,模型是對提出與應(yīng)用有關(guān)的處理的對象和數(shù)據(jù)引用的列表;然而,如下所述,根據(jù)給定時(shí)刻的應(yīng)用或外部條件的狀態(tài),RTEM在合適的時(shí)候可以對由模型表示的處理概要作全部或部分的忽略、更改和/或添加。在缺乏相關(guān)的、有效的認(rèn)可的可替代信息時(shí),在運(yùn)行時(shí)間上模型后面絕對地跟隨著RTEM。根據(jù)本發(fā)明,由RTEM調(diào)用和檢查的模型包括范例模型和與給定的范例模型有關(guān)的派生模型。范例模型描述了與應(yīng)用有關(guān)的“標(biāo)準(zhǔn)”處理過程。派生模型描述了有關(guān)“標(biāo)準(zhǔn)”處理的各種變化。根據(jù)本發(fā)明,兩種模型在經(jīng)過評價(jià)以確定它們的形式(包括它們的構(gòu)成數(shù)據(jù))是否遵照由RTEM處理的有關(guān)的約束后必須被登錄。雖然范例模型可以為應(yīng)用的一部分提出了一組規(guī)則,派生模型則表示了一組子規(guī)則,指明在某種條件下標(biāo)準(zhǔn)的或范例的處理方式可由更改的變化的規(guī)則所替代。在本發(fā)明的實(shí)施例中,派生模型僅指與它有關(guān)的范例模型有所不同或有變化的模型;如所述,RTEM10隨后監(jiān)視應(yīng)用和外部運(yùn)行時(shí)間事件,并且隨著條件變化它識別和檢驗(yàn)在這些條件下所應(yīng)用的派生模型并調(diào)用所應(yīng)用的這些派生模型。根據(jù)本發(fā)明,當(dāng)按照預(yù)先條件把模型登錄為可供RTEM使用,RTEM識別和存儲在運(yùn)行時(shí)間調(diào)用派生模型的邏輯時(shí)所處的一組條件。另外,根據(jù)本發(fā)明,與范例模型有關(guān)的派生模型不用對范例模型或其它派生模型修改即可創(chuàng)建和登錄以建立對派生模型在模型方面的任何引用。通過創(chuàng)建新模型而對應(yīng)用進(jìn)行修改使得對現(xiàn)行模型重新測試的需要最小化,也使在修改期間的擾動影響最小化。任何數(shù)目的另外派生模型均可獨(dú)立地創(chuàng)建以取代相應(yīng)的范例模型而不致于引入與每一模型有關(guān)的邏輯間的互相干擾的危險(xiǎn)性。這一能力反過來又方便了測試;模型可被獨(dú)立地測試而先前開發(fā)的模型的功能不必再重新測試。按照實(shí)際的軟件開發(fā),獨(dú)立的開發(fā)/維護(hù)小組可以創(chuàng)建派生模型而不用知道其它此類小組正在工作的模型。另外,在已配置了該軟件的本地站點(diǎn)上客戶所作的工作也不會受到由原始(非本地)作者建立的升級而受到損害,且因而在升級時(shí)不必重作。還有,對于同一應(yīng)用修改的多個(gè)有沖突的請求也能同時(shí)由非協(xié)調(diào)的開發(fā)或維護(hù)小組或個(gè)人來完成。因此,統(tǒng)一的測試可被減少或免去。在本發(fā)明的實(shí)施例中,RTEM還用工具來對外圍輸出和輸入重新整形或重新格式化,包括持續(xù)的數(shù)據(jù)存儲(數(shù)據(jù)庫)、外部(I/O)媒體、例如屏幕或報(bào)表、以及電子數(shù)據(jù)交換處理(例常規(guī)的“EDI”)。為了這樣做,RTEM使用了工具以及在這里稱之為“超級工具套件”的工具組以處理這類外圍輸入和輸出(1)數(shù)據(jù)庫訪問控制器(“DBAC”)(一個(gè)工具)以及(2)用戶I/O(“UIO”),兩者將進(jìn)一步描述于下。這里所用的術(shù)語“超級工具套件”指的是工具的集合。例如,RTEM訪問UIO超級工具套件以執(zhí)行所有對用戶的表示,包括了經(jīng)鍵盤從用戶處檢索信息的輸入工具,并還包括了以不同的格式(即GUI或字符)的形式顯示信息的表示工具。表示工具可以包括輸入、顯示文本和屏幕工具,它們可以根據(jù)本領(lǐng)域內(nèi)技術(shù)人員所熟知的方法來實(shí)現(xiàn)。在本發(fā)明實(shí)施例中,在一定意義上,RTEM也是一個(gè)工具,它加載模型和調(diào)用其它工具、模型及方法以執(zhí)行特定應(yīng)用所需的行動(即,它調(diào)用表示層工具以可視形式顯示數(shù)據(jù)或調(diào)用數(shù)據(jù)庫訪問工具(DBAC),以從數(shù)據(jù)庫檢索信息。在本發(fā)明的實(shí)施例中,DBAC由RTEM調(diào)用以在使用RTEM的時(shí)期與任何持續(xù)數(shù)據(jù)庫被調(diào)用之間以能邏輯存入和檢索數(shù)據(jù)。在這樣實(shí)施例中,持續(xù)存儲作為表格被瀏覽,該表格每行可具有不同的數(shù)據(jù)元素組成部分(即,或多或少或不同的元素),或甚至具有較多或較少的表格,這取決于給定應(yīng)用時(shí)期的任何給定瞬間RTEM所工作的變異模型。這一持續(xù)存儲的觀點(diǎn)在這里稱之為“彈性數(shù)據(jù)庫”。在本發(fā)明的一個(gè)實(shí)施例中的DBAC由RTEM調(diào)用以填補(bǔ)應(yīng)用的邏輯“彈性”存儲觀點(diǎn)和實(shí)際RDBMS(非彈性)的行和列之間的間隙。DBAC管理有關(guān)跨越多個(gè)常規(guī)受RDBMS控制的表格的彈性數(shù)據(jù)行的存儲和檢索。相同的用于模型的登錄過程(下述)還處理所有其它對象。登錄過程能以常規(guī)RDBMS中不存在的方式定義彈性(或變化的)關(guān)系。出于效率的目的,DBAC的邏輯可以在客戶和服務(wù)器任務(wù)器之間分配。預(yù)先存在的表格不必(最好不要)修改以適應(yīng)隨后的變化,例如通過邏輯上將變化的信息與表格的一些或全部行相連接。根據(jù)本發(fā)明,變化的文件關(guān)系可以在運(yùn)行中,實(shí)時(shí)地更新入數(shù)據(jù)庫,不會破壞正常的生產(chǎn)。在RTEM控制下的DBAC用作中介傳遞應(yīng)用和基于的數(shù)據(jù)庫之間的所有交互作用。這意味著RTEM可以干預(yù)其它情況下為正常的應(yīng)用和其彈性數(shù)據(jù)庫間的交互作用并能改變該交互作用而不需用調(diào)節(jié)方式來修改應(yīng)用或數(shù)據(jù)庫。因此,例如,RTEM可以啟動一“測試周期”,它將使用“現(xiàn)場”的生產(chǎn)數(shù)據(jù)庫,同時(shí)進(jìn)發(fā)運(yùn)行的生產(chǎn)過程又在改動數(shù)據(jù)庫,即使正被測試的應(yīng)用包括了對它的數(shù)據(jù)庫寫入和更新也不會干擾和破壞當(dāng)前運(yùn)行的數(shù)據(jù)。在本發(fā)明的實(shí)施例中,不管應(yīng)用是否處在測試模式還是生產(chǎn)模式,RTEM都可以進(jìn)行任選的確認(rèn)或驗(yàn)證測試。具體說,RTEM可以在調(diào)用每個(gè)模型和方法前后,甚至在調(diào)用一個(gè)模型的每個(gè)步驟(即,元素)前后檢查所有的變量和強(qiáng)制條件。非破壞性測試要求新的對象是變異的或作為命名項(xiàng)目的部分而修改被登錄為測試。這類測試對象只能在一段時(shí)期內(nèi)被RTEM所調(diào)用,該段時(shí)期的運(yùn)行狀態(tài)已被指定為“測試”并在項(xiàng)目定義期間已與適當(dāng)?shù)捻?xiàng)目標(biāo)識相關(guān)聯(lián)。除非已通過了登錄測試期,新修改的對象最好不要在生產(chǎn)過程中被訪問。在本發(fā)明的實(shí)施例中,所有的“寫”均被重定向到測試項(xiàng)目命名的測試目錄數(shù)據(jù)庫。所有的“讀”首先試用測試目錄(如必要,測試目錄的表由DBAC在運(yùn)行中設(shè)定),然后再試用生產(chǎn)數(shù)據(jù)庫。所有用于測試的只讀生產(chǎn)記錄也重新產(chǎn)生在測試目錄中,即使這類記錄要求按照測試的預(yù)先條件改變數(shù)據(jù)的格式也如此。這種方法能產(chǎn)生高保真的測試期記錄并允許繼續(xù)記錄或化最小的力氣從頭開始重做。在本發(fā)明的實(shí)施例中,UIO被RTEM用作在應(yīng)用和其用戶I/O之間傳遞交互作用。用戶I/O包括的I/O不只限于計(jì)算機(jī)和有關(guān)網(wǎng)絡(luò)的I/O,包括了屏幕格式,數(shù)據(jù)輸入設(shè)備、電子數(shù)據(jù)交換(“EDI”)處理和其它I/O。按照本發(fā)明的應(yīng)用的設(shè)計(jì)和修改不必對I/O加以考慮,且不必包括任何與該功能性有關(guān)的邏輯。這種處置代表了對傳統(tǒng)技術(shù)的一種改進(jìn),它更緊密地依賴于應(yīng)用本身。例如,本方法作為特定時(shí)刻的條件的函數(shù)允許靈活的插入,變化的I/O性態(tài)。因此,本發(fā)明還提供了一種開發(fā)應(yīng)用軟件的新方法,它允許以最小的或不作代碼變動而把新的能力加到現(xiàn)在使用的軟件中,對與傳統(tǒng)應(yīng)用軟件開發(fā)有關(guān)的用戶活動干擾最小或不干擾。本發(fā)明還根據(jù)軟件運(yùn)行的局部環(huán)境方面的要求提供具有極其不同處理性能的計(jì)算機(jī)軟件和它處理的特殊數(shù)據(jù)。根據(jù)本發(fā)明的計(jì)算機(jī)可存儲數(shù)據(jù)結(jié)構(gòu)和方法,以及它們允許的軟件開發(fā)方法,按照本發(fā)明還允許把非統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)定義為一組邏輯數(shù)據(jù)結(jié)構(gòu),每個(gè)邏輯數(shù)據(jù)結(jié)構(gòu)在常規(guī)的數(shù)據(jù)庫中被歸一化和定義了,在本發(fā)明的一個(gè)實(shí)施例中,在具有處理器、內(nèi)存儲器和存儲媒體的計(jì)算機(jī)上實(shí)現(xiàn)的運(yùn)行應(yīng)用軟件的系統(tǒng),包括了存儲在存儲媒體中的多個(gè)模型和一個(gè)運(yùn)行時(shí)間事件管理器。每個(gè)模型包含的數(shù)據(jù)包括對一個(gè)或多個(gè)對象的引用,而運(yùn)行時(shí)間事件管理器適用于將所選的多個(gè)模型之一從存儲媒體加載到內(nèi)存、讀取所選模型的數(shù)據(jù)以及當(dāng)對一個(gè)對象的引用被讀取時(shí),調(diào)用并執(zhí)行合適的工具以提供該對象。本發(fā)明為計(jì)算機(jī)的執(zhí)行提供了運(yùn)行時(shí)間事件管理器,它執(zhí)行與指令有關(guān)的處理活動并響應(yīng)通過外部輸入和輸出與計(jì)算機(jī)通信的計(jì)算機(jī)外部事件。計(jì)算機(jī)包括了用于存儲可由運(yùn)行時(shí)間事件管理器訪問的一組模型的存儲媒體。運(yùn)行時(shí)間事件管理器包含了用于從模型庫加載模型的裝置、用于在給定計(jì)算機(jī)狀態(tài)和運(yùn)行時(shí)間事件管理器時(shí)確定模型是否被適當(dāng)?shù)卣{(diào)用的裝置、在給定計(jì)算機(jī)狀態(tài)和運(yùn)行時(shí)間事件管理器時(shí)若確定為合適的話調(diào)用模型的裝置、以及調(diào)用(即,實(shí)現(xiàn)其意圖)模型的裝置。本發(fā)明還提供了利用運(yùn)行時(shí)間事件管理器開發(fā)計(jì)算機(jī)應(yīng)用軟件的方法。該方法包含的步驟包括建議多個(gè)模型,其中每個(gè)這類模型包括至少下述之一i.對模型的引用;ii.對方法的引用;iii.數(shù)據(jù);以及iv.輸入或輸出指令。附加的步驟包括對模型測試以確保在模型中引用的方法沒有一個(gè)能(1)調(diào)用另一個(gè)對象,無論是模型、方法或工具;或(2)對屏幕、文件或任何其它設(shè)備或?qū)ο筮M(jìn)行輸入/輸出(I/O)。另外在測試中合格的模型被登錄以允許運(yùn)行時(shí)間事件管理器訪問。本發(fā)明還提供對登錄為被運(yùn)行時(shí)間事件管理器使用的對象庫的創(chuàng)建。登錄過程包含的步驟為根據(jù)模型的唯一標(biāo)識符調(diào)用對象、掃描對象的內(nèi)容看是否存在限制內(nèi)容、以及只有當(dāng)對象內(nèi)容不包括限制內(nèi)容時(shí)把對象作為庫的一部分而登錄。本發(fā)明還提供了在具有處理器、內(nèi)存儲器和存儲媒體的計(jì)算機(jī)上實(shí)現(xiàn)的數(shù)據(jù)庫系統(tǒng),包含一個(gè)庫文件和一個(gè)可變集,具有編程的系統(tǒng)以實(shí)現(xiàn)可變集運(yùn)行時(shí)間映射,適用于確定哪一個(gè)可變集用于庫文件的特定基本記錄??勺兗挠涗浿辽倬哂信c基本記錄對應(yīng)的一個(gè)附加字段。本發(fā)明還提供了一種方法,用于對具有一個(gè)庫文件和一個(gè)可變集的數(shù)據(jù)庫系統(tǒng)進(jìn)行操作。該方法包含的步驟包括加載基本記錄、檢查可變集運(yùn)行時(shí)間映射是否存在與庫文件對應(yīng)的可變集、以及如果可變集存在則從可變集檢索數(shù)據(jù)。因此,本發(fā)明的一個(gè)目的是提供一種用于開發(fā)和修改應(yīng)用軟件的方法、系統(tǒng)和數(shù)據(jù)結(jié)構(gòu),它免去了需要編寫代碼來實(shí)現(xiàn)與應(yīng)用有關(guān)的功能性。本發(fā)明的另一目的是提供一種利用運(yùn)行時(shí)間事件管理器和一組有關(guān)模型開發(fā)、測試和執(zhí)行應(yīng)用軟件的方法、系統(tǒng)和數(shù)據(jù)結(jié)構(gòu)。本發(fā)明的另一目的是提供一種利用運(yùn)行時(shí)間事件管理器和一組模型開發(fā)、測試和執(zhí)行應(yīng)用軟件的方法、系統(tǒng)和數(shù)據(jù)結(jié)構(gòu),其中模型已被登錄為可供運(yùn)行時(shí)間事件管理器根據(jù)一過程而訪問,該過程排除了調(diào)用未登錄對象或由另一方法調(diào)用一個(gè)方法的操作。本發(fā)明的另一個(gè)目的是提供一種利用運(yùn)行時(shí)間事件管理器和一組有關(guān)模型開發(fā)、測試和執(zhí)行應(yīng)用軟件的方法、系統(tǒng)和數(shù)據(jù)結(jié)構(gòu),其中該模型組包括了范例模型和派生模型。本發(fā)明的另一個(gè)目的是提供一種用于實(shí)現(xiàn)“彈性數(shù)據(jù)庫”的方法、系統(tǒng)和數(shù)據(jù)結(jié)構(gòu),“彈性數(shù)據(jù)庫”允許用變化集中的附加字段來擴(kuò)展其庫文件中的庫記錄。本發(fā)明的另一個(gè)目的是提供一種利用運(yùn)行時(shí)間事件管理器和一組有關(guān)模型開發(fā)、測試和運(yùn)行應(yīng)用軟件的方法、系統(tǒng)和數(shù)據(jù)結(jié)構(gòu),其中模型之一提供了將傳統(tǒng)軟件集成為一新開發(fā)的應(yīng)用的手段。本發(fā)明的其它目的和優(yōu)點(diǎn)在閱讀了下述描述后對于本領(lǐng)域的技術(shù)人員來說將是顯然的。附圖簡述圖1示出了根據(jù)本發(fā)明的一個(gè)系統(tǒng)的實(shí)施例結(jié)構(gòu)。圖2示出了根據(jù)本發(fā)明的應(yīng)用接口和一組模型庫或引擎例子的實(shí)施例。圖3示出了符合本發(fā)明實(shí)施例的運(yùn)行時(shí)間事件管理器、模型、方法和數(shù)據(jù)的組織。圖4所示示例模板表示了根據(jù)本發(fā)明的模型的實(shí)施例的形式。圖4A示出了模型的另一個(gè)模板的示例,比圖4更詳細(xì)。圖4B進(jìn)一步示出了模型數(shù)據(jù)結(jié)構(gòu)的第一部分的定義,顯示了對模型的詳細(xì)處理信息。圖4C進(jìn)一步示出了模型數(shù)據(jù)結(jié)構(gòu)的第二部分的定義(續(xù)圖4B),顯示了對模型附加的詳細(xì)處理信息。圖5示出了根據(jù)本發(fā)明的用于實(shí)現(xiàn)一個(gè)應(yīng)用菜單的模型的具體例子。圖5A示出了根據(jù)本發(fā)明的派生模型的具體示例。圖5B示出了保存派生模型信息的表格。圖6所示流程圖用于在本發(fā)明的一個(gè)實(shí)施例中登錄包括模型的對象。圖6A所示的流程圖用于操作與圖6所示登錄過程有關(guān)的所用的模型設(shè)計(jì)工具。圖7A所示為流程圖的第一部分,該流程用于在本發(fā)明的一個(gè)實(shí)施例中在應(yīng)用開發(fā)或修改過程期間創(chuàng)建測試模型用的測試平臺。圖7B示出了用于在本發(fā)明的一個(gè)實(shí)施例中在應(yīng)用開發(fā)或修改過程期間創(chuàng)建測試模型用的測試平臺的流程圖的第二部分。圖8示出的流程圖描述了本發(fā)明的一個(gè)實(shí)施例中的運(yùn)行時(shí)間事件管理器的一個(gè)實(shí)施例的操作。圖9所示流程圖描述了圖8的運(yùn)行時(shí)間事件管理器實(shí)施例的關(guān)于派生模型的處理部分。圖10所示的流程圖描述了圖8和圖9的運(yùn)行時(shí)間事件管理器實(shí)施例與加載和卸載派生模型有關(guān)的處理部分。圖11所示為對于彈性數(shù)據(jù)庫的庫文件和基本記錄的解釋性示例。圖12所示為對于彈性數(shù)據(jù)庫的二個(gè)可變集定義的解釋性示例。圖13A示出了描述關(guān)于在彈性數(shù)據(jù)庫中定義一新可變集的步驟的流程圖的第一部分。圖13B示出了描述關(guān)于在彈性數(shù)據(jù)庫中定義一新可變集的步驟的流程圖的第二部分。圖13C示出了描述關(guān)于在彈性數(shù)據(jù)庫中定義一新可變集的步驟的流程圖的第三部分。圖14所示流程圖描述了在彈性數(shù)據(jù)庫中打開一數(shù)據(jù)目錄的過程。圖15所示流程圖描述了在彈性數(shù)據(jù)庫中打開一邏輯文件的過程。圖16A所示的流程圖描述了確定把哪一個(gè)可變集加到彈性數(shù)據(jù)庫中所選基本記錄的過程的第一部分。圖16B所示的流程圖描述了確定把哪一個(gè)可變集加到彈性數(shù)據(jù)庫中所選基本記錄的過程的第二部分。圖17A所示的流程圖描述了與數(shù)據(jù)庫訪問工具的“讀”功能有關(guān)的步驟的第一部分。圖17B所示的流程圖描述了與數(shù)據(jù)庫訪問工具的“讀”功能有關(guān)的步驟的第二部分。圖18A所示的流程圖描述了與數(shù)據(jù)庫訪問工具的“提取”功能有關(guān)的步驟的第一部分。圖18B所示的流程圖描述了與數(shù)據(jù)庫訪問工具的“提取”功能有關(guān)的步驟的第二部分。圖19所示流程圖描述了與數(shù)據(jù)庫訪問工具的“證實(shí)”功能有關(guān)的步驟。圖20所示流程圖描述了與數(shù)據(jù)庫訪問工具的“生成”功能有關(guān)的步驟。圖21A所示的流程圖描述了與數(shù)據(jù)庫訪問工具的“寫”功能有關(guān)的步驟的第一部分。圖21B所示的流程圖描述了與數(shù)據(jù)庫訪問工具的“寫”功能有關(guān)的步驟的第二部分。圖22所示的流程圖描述了與數(shù)據(jù)庫訪問工具的“移去”功能有關(guān)的步驟。圖23所示的流程圖描述了與數(shù)據(jù)庫訪問工具的“關(guān)閉”功能有關(guān)的步驟。圖24所示的流程圖描述了與數(shù)據(jù)庫訪問工具的“關(guān)斷”功能有關(guān)的步驟。圖25所示的流程圖描述了與數(shù)據(jù)庫訪問工具的“取關(guān)鍵字”功能有關(guān)的步驟。圖26所示的流程圖描述了與數(shù)據(jù)庫訪問工具的“取第一關(guān)鍵字”功能有關(guān)的步驟。詳細(xì)描述圖1示出了根據(jù)本發(fā)明的一個(gè)系統(tǒng)的實(shí)施例結(jié)構(gòu)。下面結(jié)合圖8-10詳細(xì)描述的運(yùn)行時(shí)間事件管理器(“RTEM”)10是一組負(fù)責(zé)執(zhí)行與應(yīng)用有關(guān)的所有處理的過程。RTEM10可訪問各種數(shù)據(jù)和對象,包括數(shù)據(jù)目錄12、標(biāo)準(zhǔn)模型14、開發(fā)者的任選模型16、本地模型18和本地環(huán)境20?!皹?biāo)準(zhǔn)”或“范例”模型14是由特定應(yīng)用的作者提供的這些用作實(shí)現(xiàn)與該應(yīng)用有關(guān)的處理的模型,并提供規(guī)定該應(yīng)用如何完成的規(guī)則。標(biāo)準(zhǔn)或范例模型14提供為應(yīng)用處理最終的默認(rèn)值。由應(yīng)用的作者提供的開發(fā)者的“任選”模型可作為標(biāo)準(zhǔn)或范例模型的全部或部分替代以考慮到應(yīng)用將調(diào)用的處理,雖然它是對標(biāo)準(zhǔn)或范例的處理。作為例子,在后勤應(yīng)用調(diào)配中,已提供產(chǎn)品調(diào)配模型,只是在某種條件下也可以提供附加的任選模型以執(zhí)行捕獲輸入和更新不同的文件,例如若道路運(yùn)輸模塊已接通。本地模型就是指定給已配置了應(yīng)用軟件的現(xiàn)場的那些模型,且應(yīng)用軟件已被唯一地配置成適合該現(xiàn)場的應(yīng)用要求。例如,本地模型將包括與本地現(xiàn)場有關(guān)的處理,例如在該現(xiàn)場處的相關(guān)的裝備、操作員等等。本地環(huán)境20代表了說明應(yīng)用將工作的特定調(diào)整的數(shù)據(jù)和條件。RTEM10也能對一組控制器訪問。第一個(gè)這種控制器就是構(gòu)架22,如下所述它按照由RTEM處理的模型實(shí)現(xiàn)數(shù)據(jù)處理。包括了應(yīng)用(例模型、方法、數(shù)據(jù)、文本等)和所有支持對象,例如工具的所有登錄的對象稱之為“構(gòu)架”。構(gòu)架22提供了每個(gè)對象和與它有關(guān)的每個(gè)其它對象間的交叉引用,使對象能被開發(fā)者訪問和理解它根據(jù)本領(lǐng)域技術(shù)人員熟知的方法而開發(fā)。RTEM可訪問的第二控制器是數(shù)據(jù)庫訪問控制器(“DBAC”)(客戶側(cè))24。DBAC(客戶側(cè))24允許RTEM10通過(如必要的話)中間件構(gòu)成,例網(wǎng)絡(luò)連路或共享存儲器78獲得對數(shù)據(jù)的訪問。此外,DBAC(服務(wù)器側(cè))30如有必要?jiǎng)t根據(jù)包含給定應(yīng)用的模型允許與商用或者專用數(shù)據(jù)庫互聯(lián)。例如,RTEMDBAC(服務(wù)器側(cè))30可與開放數(shù)據(jù)庫連接(“ODBC”)驅(qū)動器32和OracleRDBMS34,或與SQL3服務(wù)器38和Oracle8面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)(“OODBMS”)40,或與BASIC文件服務(wù)器42和BASIC文件系統(tǒng)44、或與任何適當(dāng)?shù)臄?shù)據(jù)庫軟件交互作用。通過上述數(shù)據(jù)庫軟件,RTEM10可訪問駐留在文件服務(wù)器(未示出)上的數(shù)據(jù)36。代碼和包含RTEM10和對象以及RTEM可訪問的數(shù)據(jù)的數(shù)據(jù)的組織將結(jié)合圖3描述如下。本發(fā)明的解釋實(shí)施例中RTEM10訪問的第三個(gè)控制器是用戶I/O(“UIO”)26,它較佳地是超級工具套件。UIO26被RTEM10用于中介傳遞應(yīng)用和其“外部”輸入和輸出間的交互作用以使得構(gòu)成應(yīng)用的模型(或這些模型中引用的對象)不必做這工作。外部輸入和輸出這里想指的是包括屏蔽格式、數(shù)據(jù)輸入設(shè)備和電子數(shù)據(jù)交換(“EDI”)處理等在內(nèi)的計(jì)算機(jī)和有關(guān)網(wǎng)絡(luò)的外部輸入和輸出。根據(jù)本發(fā)明的解釋實(shí)施例(其中,RTEM10可訪問UIO26的功能)開發(fā)的應(yīng)用和運(yùn)行的設(shè)計(jì)和修改不需考慮,該應(yīng)用的工作存儲器數(shù)據(jù)從哪里檢索以及送往哪里。例如,這類應(yīng)用因而不需要包括把數(shù)據(jù)放在屏幕形式或報(bào)表文檔或放入EDI處理的邏輯;也不需要和與應(yīng)用交換數(shù)據(jù)的設(shè)備或處理過程交互作用。此外,根據(jù)本發(fā)明的數(shù)據(jù)結(jié)構(gòu)最好不包含過程或宣稱代碼以使開發(fā)者能繞過這些規(guī)則。例如,在本發(fā)明的實(shí)施例中,UIO26確定信息何時(shí)、何地在屏幕上刷新。它確定I/O是否應(yīng)為圖形模式或字符模式。它還確定使用何種人類語言。任何這類外部事件均由UIO26適當(dāng)?shù)靥幚?。通過RTEM10使用UIO26對用戶I/O的協(xié)調(diào)允許在特定的時(shí)刻作為條件的函數(shù)靈活地插入各種不同的I/O特性,而不是死板地受應(yīng)用的控制。圖2示出了根據(jù)本發(fā)明的應(yīng)用接口和一組模型庫或引擎示例的實(shí)施例。按本發(fā)明的術(shù)語,“模型”是一種軟件對象,包含了為應(yīng)用環(huán)境指定規(guī)則的數(shù)據(jù),最好不包含代碼。模型,換句話說,是一種數(shù)據(jù)分組,它列出了為與模型有關(guān)的應(yīng)用的特定子集所發(fā)生的處理的列表。該處理包括了規(guī)則的說明,可包含事務(wù)或應(yīng)用處理規(guī)則和機(jī)械規(guī)則。如下所述,當(dāng)一個(gè)模型被運(yùn)行時(shí)間事件管理器調(diào)用時(shí)將使自由待命的、可重復(fù)使用的、被登錄的公共示例對象、包括“模型”、其它模型或工具被調(diào)用。例如,在后勤軟件調(diào)配中,與讀取對一個(gè)產(chǎn)品的所有保存情況有關(guān)的且確定該保存情況對產(chǎn)品可用性影響程度的模型可在其列表中包括1.在保存文件中將指針指向該產(chǎn)品的第一個(gè)記錄;2.如果當(dāng)前記錄是用于該產(chǎn)品;3.讀取當(dāng)前記錄;4.累計(jì)對產(chǎn)品可用性的影響;5.轉(zhuǎn)到2。如上面部分所述和下面要進(jìn)一步描述的那樣,模型可具有若干種變種,它能使用模型構(gòu)成且由RTEM10運(yùn)行的應(yīng)用有最大的靈活性。這里所用的術(shù)語“方法”是指用來完成特定目的所創(chuàng)建的過程代碼塊,類似于傳統(tǒng)程序中的子例程。根據(jù)本發(fā)明,方法被用作為“自由待命的”、可重復(fù)使用的、被登錄的、以及公共示例的。換句話說,每個(gè)方法獨(dú)立位于庫中,它的存在已在庫中被登錄。正如結(jié)合圖6如下詳述的那樣,方法已被登錄,使得它成為庫的可訪問的一部分,可由RTEM按照模型所指定在適當(dāng)?shù)臅r(shí)候被調(diào)用。根據(jù)本發(fā)明,諸如方法之類的對象可以包括父對象、預(yù)處理和后處理,將在下面進(jìn)一步被詳細(xì)定義。圖2示出了對于二個(gè)基本類型的模型的邏輯環(huán)境和它們之間的應(yīng)用接口。模型包含兩種基本類型應(yīng)用處理(或事務(wù)規(guī)則)模型和機(jī)械模型。這兩種類型的不同在于它們所針對的抽象層次不同。應(yīng)用處理或事務(wù)規(guī)則模型執(zhí)行特定于應(yīng)用的處理。例如,在后勤應(yīng)用中,應(yīng)用處理或事務(wù)規(guī)則模塊可以規(guī)定為定單輸入或接收貨物的處理。與應(yīng)用處理或事務(wù)規(guī)則模型有關(guān)的邏輯具體為只是一項(xiàng)應(yīng)用作業(yè),且一般在其它場合下是不可重復(fù)使用的。另一方面,機(jī)械模型一般在抽象的低層次上執(zhí)行處理且在不同的應(yīng)用場合下可重復(fù)使用。例如,在后勤調(diào)配中,在將存貨從庫房中位置A移動到位置B處時(shí)機(jī)械模型會計(jì)算可供使用的存貨或記錄。這里所用的“庫”是有組織的并可供RTEM10訪問的一組對象。一個(gè)“引擎”就是以后連接的、可重復(fù)使用的模型和方法的庫,特別地是指機(jī)械處理模型和一起工作的方法的集合。圖2例子中,示出了與后勤應(yīng)用有關(guān)的一組引擎(52-62,偶數(shù))與該應(yīng)用的接口50之間的關(guān)系。應(yīng)急引擎52定義為對應(yīng)急事件處理必須執(zhí)行的一組機(jī)械處理模型。調(diào)度引擎54是調(diào)度所必須執(zhí)行的一組機(jī)械處理模型。帳單引擎56以及活動引擎58、清單引擎60和其它引擎62分別是執(zhí)行帳單功能等等必須完成的一組機(jī)械處理模型。圖2中僅顯示了一個(gè)引擎的部分內(nèi)容。具體說,帳單引擎56具有一機(jī)械模型70,該模型依次又包含了對方法1、72和方法2、74的引用,這兩種方法都可調(diào)用過程代碼塊78的至少一個(gè)子集。機(jī)械模型70還包含了對另一機(jī)械模型76的引用,模型76本身又引用了二個(gè)方法、方法X(80)和方法(82)。結(jié)合圖6將描述加于模型和方法形式上的約束。圖3所示是根據(jù)本發(fā)明的一個(gè)實(shí)施例的運(yùn)行時(shí)間事件管理器、模型、方法和數(shù)據(jù)的組織。在該實(shí)施例中,內(nèi)存儲器包括四部分任務(wù)存儲器90、任務(wù)專用高速緩存100、服務(wù)器側(cè)公共高速緩存器110及文件系統(tǒng)120。任務(wù)存儲器90包括了RTEM10的一部分對象代碼92。另一部分中,任務(wù)存儲器90包括了一個(gè)或多個(gè)變量表(“VTAB”)94,包含了預(yù)編譯的數(shù)據(jù)排(“PCDB”)指針96和動態(tài)變量表98。根據(jù)本發(fā)明,如下述圖4和5所示,每個(gè)模型包括數(shù)據(jù)且存儲在RTEM10調(diào)用該模型時(shí)加載的預(yù)編譯數(shù)據(jù)排中。格式化模型中的數(shù)據(jù)使得RTEM能根據(jù)該數(shù)據(jù)調(diào)用模型,數(shù)據(jù)最好預(yù)編譯為使RTEM編程所用的語言能容易地理解其內(nèi)容,且根據(jù)識別每個(gè)所引用對象的類型的擴(kuò)展或其它數(shù)據(jù)從適當(dāng)?shù)奈恢脵z索出這類對象。任務(wù)專用高速緩存100包括一組模型102、模型庫對象代碼104以及客戶機(jī)側(cè)的專用數(shù)據(jù)文件高速緩存108。服務(wù)器側(cè)公共高速緩沖110包括一組模型112、模型庫對象代碼114、以及公共數(shù)據(jù)文件高速緩存118。最后,文件系統(tǒng)20包含了以預(yù)編譯數(shù)據(jù)組122形式的模型122(由PCDB指針96所指向)、磁盤124上的對象代碼及數(shù)據(jù)庫表/文件126。RTEM10(見圖1所示)鏈接到任務(wù)的VTAB94的模型‘A’的存儲器塊(見參考號102),它可位于客戶機(jī)側(cè)的專用高速緩存108內(nèi)或位于服務(wù)器側(cè)的公共數(shù)據(jù)文件高速緩存118內(nèi)。模型‘A’中的數(shù)據(jù)是用PCDB指針的形式(見參考號96),它是VTAB94的一個(gè)片段。因此,不管模型的大小和復(fù)雜性,只需幾條機(jī)器指令即可有效地將它鏈接入VTAB94中。例如,假設(shè)模型‘A’的步驟1(未圖示)調(diào)用模型‘B’。設(shè)在任何特定時(shí)刻只有一個(gè)模型可被激活,如下所詳述,RTEM10把模型‘A’“壓入”(在堆棧機(jī)的意義上)且讓它處于非活動鏈接。然后RTEM10活動地鏈接模型‘B’的PCDB指針(見參考號96)。另外,設(shè)在模型‘B’的步驟1(未圖示)在106處指令方法‘X’,(它是對象代碼)被執(zhí)行。在這一事件中,RTEM10把執(zhí)行指針移到方法‘X’,方法‘X’或者在任務(wù)專用高速緩存100內(nèi)或者在服務(wù)器側(cè)的公共高速緩存110內(nèi)。隨后執(zhí)行方法‘X’。當(dāng)完成模型‘B’的所有步驟時(shí),RTEM10“彈出”模型‘B’,讓模型‘A’活動鏈接并指針指向步驟2。圖4所示為模型模板140的示例,它示出了根據(jù)本發(fā)明的模型實(shí)施例的一種形式。模型模板140具有包含了模型(這里為示例一模板)唯一標(biāo)識符(“ID”)的標(biāo)頭141,PCDB指針即指向它(見參考號96)。雖然未示出,但標(biāo)頭141后隨著一組數(shù)據(jù),主要形成了對象的列表,其后是非對象數(shù)據(jù)列表。一般來說,對象包括了方法、輸入/輸出指令、判決指令、工具和數(shù)據(jù)。模型模板140表中的每個(gè)元素可以包括方法的唯一ID,它用于從適當(dāng)?shù)貛煺{(diào)用該方法,且它可以是一字符串(例32個(gè)字符)、提供對方法描述的唯一的語言名、以及在括號中的類型指示符(例(方法)、(輸入)、(判決)、(數(shù)據(jù))等等)。每個(gè)元素根據(jù)模型功能而被調(diào)用的次序列出。例如,由模板140所規(guī)定的模型中,方法-1144和方法-2146首先被依次運(yùn)行。當(dāng)方法-3146完成后,運(yùn)行輸入-1148,接著是判決-1150、方法-n和工具-1154。過程按此順序繼續(xù)進(jìn)行直到檢測到EOL(列表結(jié)束)156。模型模塊140中列出的數(shù)據(jù)元素如數(shù)據(jù)-1158、數(shù)據(jù)-2160、數(shù)據(jù)-3162和數(shù)據(jù)-4164可供模型中列出的方法或其它對象使用。圖4A示出另一個(gè)模型的模板1000A,比圖4所示更詳細(xì)。這里,模型標(biāo)頭信息1001包括了幾個(gè)描述符lvmodel$1002識別模型名字;lvmode_obj$1003識別模型唯一對象ID;sydescriphn$1004提供對模型的描述。模板1000A還包括各種控制信息1005lvsequence$1006提供要被執(zhí)行的父對象列表;lvexitobject$1007識別在退出模型前要執(zhí)行的對象(當(dāng)正要退出模型時(shí),將用其后處理執(zhí)行該對象);lvtabarder$1008提供了以處理順序從一個(gè)字段跳到另一個(gè)字段的字段號列表;lrfirstinput1008提供了當(dāng)完成最后輸入時(shí)開始處理的字段號;lvlastinput1010提供了把處置設(shè)回到第一輸入前要處理的最后字段號;以及l(fā)vdata_list$1011提供了該模型上所用的所有數(shù)據(jù)變量列表。圖4B進(jìn)一步示出了表明模型詳細(xì)處理信息的數(shù)據(jù)結(jié)構(gòu)第一部分1000B的定義。具體說,它提供了定義該模型的多個(gè)對象的識別{objectid}.name$1012提供了對該模型的對象引用的名字;{objectid}.descriptn$1013提供了該對象的描述;{objectid}.condition$1014提出了RTEM10執(zhí)行該對象必須滿足的條件;{objectid}.objecttype1015通知RTEM10關(guān)于本對象的類型(1方法;2工具使用;或3模型;{objectid}.module$1016識別用于工具使用、方法或模型的模塊;{objectid}.repository1017識別用于工具使用或方法的貯存庫;{objectid}.method$1018識別要執(zhí)行的方法;{objectid}.toolusage$1019識別要執(zhí)行的工具使用;{objectid}.model$1020識別要執(zhí)行的模型;{objectid}.performflg1021指令RTEM10如何訪問這個(gè)對象(0指示該對象被調(diào)用,在由modelvars中指定的模型數(shù)據(jù)中傳遞,而1指示該對象被執(zhí)行,在所有模型數(shù)據(jù)中傳遞);{objectid}.modelvars$1021提供了被傳遞入方法、工具使用或模型中的模型變量列表;而{objectid}.obj_var$1023提出了從模型變量(在modelvars中指定的)中要被增加的對象變量的列表。圖4C進(jìn)一步示出了模型數(shù)據(jù)結(jié)構(gòu)的第二部分定義(續(xù)圖4B),表明了模型的附加詳細(xì)處理信息。特別地,它包括了{(lán)objectid}.{modelvariable}_{typeofvariable}.usage$1024,它識別這一變量在方法、工具使用或模型中被傳遞的用途、Model_variable規(guī)定了{(lán)objectid}.modelvar$中規(guī)定的數(shù)據(jù)變量;{typeofvariable}標(biāo)識下列各項(xiàng)C表示字符變量;N表示數(shù)值變量;用途I表示僅表示傳入變量;B表示傳入并往回傳出的變量;F表示作為規(guī)定的默認(rèn)值傳入并往回傳出的變量。{objectid}.{model_variable}_{typeofvarable}1025標(biāo)識了傳遞到方法、工具使用或模型中的默認(rèn)值。{objectid}.action$1026識別對這一對象所附的行動(1預(yù)處理對象;2父對象;或3后處理對象)。{objectid}.parentname$1027識別父對象名字,若對象是預(yù)處理或后處理的話。{objectid}.parent_obj$1028規(guī)定了父對象的對象ID,若為預(yù)處理對象或后處理對象的話;{objectid}.designname$1029識別模型設(shè)計(jì)對象的類型;{objectid}.mandatory1030表示如果對象是一個(gè)輸入,則向輸入指示輸入項(xiàng)是否是強(qiáng)制性的(0,不是強(qiáng)制性的;1,是強(qiáng)制性的);{objectid}.preprocs$1031識別對該父對象的預(yù)處理對象列表;而{objectid}.postprocs$1032識別對該父對象的后處理列表。圖5示出了根據(jù)本發(fā)明的用于實(shí)現(xiàn)應(yīng)用菜單的模型(具體為范例模型)的一個(gè)具體例子170。菜單示例的標(biāo)頭171后跟著一組12個(gè)對象,包括8個(gè)方法,一個(gè)輸入和一個(gè)退出。該模型中的一個(gè)對象,selectval,是一個(gè)“父”對象。在父對象前的對象(也用正斜杠(/)表示)叫做預(yù)處理;對父對象后的對象(由反斜杠(\)表示)叫做后處理。當(dāng)調(diào)用模型時(shí),clr_select方法172被運(yùn)行;它保存將被選的菜單項(xiàng)值的變量清零。menu_active模型173設(shè)置(在與后勤有關(guān)的應(yīng)用場合下當(dāng)前日期、操作員、終端、公司、用于跟蹤菜單活動的系統(tǒng),此后menudflt174方法設(shè)置默認(rèn)值,例如未作選擇就顯示初始菜單。方法menu-displ175加載并顯示菜單。方法save_vals176保存老的值,此后selectVal177讀取并存儲由用戶選擇的值。模型menuselect178確認(rèn)由用戶所作的菜單選擇。模型中下一個(gè)被調(diào)用的對象是menusecure179,它驗(yàn)證菜單的安全性。如果操作員用菜單輸入了非法的選擇或選擇了另一個(gè)菜單顯示,處理在方法cls_select172處重復(fù)。這可由方法menusecure179向RTEM10傳遞一特殊請求(圖8中參考號324)來完成。如果作了合法的選擇(合法作業(yè)),方法隨后運(yùn)行退出(對象)181,它設(shè)定控制變量以告訴RTEM10它已完成執(zhí)行菜單模型(所有退出181的后處理將在RTEM10實(shí)際離開模型前被處理)。如果操作員選擇退出應(yīng)用環(huán)境,他或她可在菜單選擇輸入處(SelectVal177)按動適當(dāng)?shù)念A(yù)先指定鍵(本例中為F4鍵)。這就向退出181發(fā)送處理,它設(shè)定控制變量以告訴RTEMl0它已完成對菜單模型的處理(所有退出181的后處理將在RTEM10實(shí)際離開模型前被處理)。方法menuf4182根據(jù)操作員按動的菜單選擇輸入中的F4鍵(selectVal177)有條件地出現(xiàn)。Menuf4182檢查系統(tǒng)配置標(biāo)記以了解菜單模型如果未在頂層時(shí)是否應(yīng)返回到菜單顯示的上一層,如果在頂層時(shí)退出菜單模型,或如果系統(tǒng)配置標(biāo)記設(shè)置為不用向上移動到菜單顯示的前一層即可立即退出菜單模型則退出菜單模型。如果menuf4182方法決定在菜單顯示中上移一層,在退出181中設(shè)定的控制變量(用于告訴RTEM10它已完成執(zhí)行菜單模型)被復(fù)位且選擇的顯示菜單設(shè)定為先前的菜單。處理然后在方法cls_select172處繼續(xù)。與模型菜單示例170有關(guān)的數(shù)據(jù)變量包括動作184,存儲菜單選擇;空格_5185,存儲5個(gè)空格;cmdcompany186,存儲公司名字;公司187,存儲公司代碼;menu_desc188,存儲菜單說明;oldmenudsp189,存儲先前顯示的菜單的標(biāo)識;pagedisply190,存儲顯示頁面;selectval191,存儲菜單選擇;短_名192,存儲公司的簡短名字;狀態(tài)193,存儲狀態(tài)值;子菜單194;存儲系統(tǒng)子菜單;終端195,標(biāo)識計(jì)算機(jī)終端;tilde196;tilde2197;以及時(shí)間198,存儲特定的時(shí)間。圖5A示出了基于圖5的范例模型170的派生模型170A。派生模型170A幾乎與范例模型170一樣。然而,它包括了范例模型170中不存在的處理,具體說就是后處理,track_al179A,它在驗(yàn)證了菜單安全性后將菜單交互作用寫入一個(gè)日志文件中。派生模型170A的標(biāo)頭171A指示了該模型是派生的并用名字來標(biāo)識。此外,標(biāo)頭列出了“應(yīng)用”派生模型170A并被加載以供潛在的調(diào)用所必要的條件(本例中只有一個(gè)條件)。在這種情況下,track_al派生模型170A的必要條件是公司代碼要等于A1。模型運(yùn)行時(shí)間變化表(它也可稱為是運(yùn)行時(shí)間變化映射)與DBAC24、30運(yùn)行時(shí)間變化表結(jié)構(gòu)相同,下面將結(jié)合彈性數(shù)據(jù)庫予以討論。一個(gè)變化加于模型的表或映射如下所示相應(yīng)的運(yùn)行時(shí)間表示表如下(COMPANY$=“A1”)其中當(dāng)讀取基本記錄后在內(nèi)存中的數(shù)據(jù)為COMPANY$=“A1”使用運(yùn)行時(shí)間表示表,運(yùn)行時(shí)間評價(jià)代碼被生成,本例中,這里當(dāng)(COMPANY$=“A1”)運(yùn)行時(shí)間評價(jià)代碼將為“1”。這個(gè)運(yùn)行時(shí)間評價(jià)代碼與顯示能確定哪些變化是活動的表相比較該活動變化就是與運(yùn)行時(shí)間評價(jià)代碼中相同位置上具有“1”的那些變化變化表對應(yīng)于模型運(yùn)行時(shí)間信息。這變化表伴隨文件存儲了激活所有派生模型的所有條件的表。對于上例,變化表如下LVRTEM>VAR_CHECK$=“(COMPANY$=“A1”)”LVRTEM.VAR_TABLE$=“1”LVRYEM.VARIATION$=“track_al”這里要說明一下上述實(shí)施例中的命名規(guī)則LV(直接用于開頭)指的是局部變量類,其它前綴用作其它變量類,例如SY(系統(tǒng)變量);DD(數(shù)據(jù)字典);DB(數(shù)據(jù)庫);LL(局部標(biāo)記);RT(例程)。一個(gè)派生模型170A的詳細(xì)的說明樣子如圖5B所示,表示當(dāng)公司是“A1”時(shí)派生模型被加載且在每個(gè)菜單選擇后它添加一個(gè)示例工具使用對象以將目期操作符、時(shí)間和SELECTVAL寫入日志文件。在判決調(diào)用退出_菜單前該對象被執(zhí)行。首先,派生模型170A包含了加入到范例模型的對象名。然后它指明把該對象插入到該模型處理序列中那里。具體說,對象(“track_A1”)作為后處理連接到父對象“selectval”上(圖5中參考號177及圖5A中參考號177A),并被插入在退出_菜單處(圖5中參考號180和圖5A中參考號180A)。有關(guān)示例對象(“track_al”處理詳述如下。首先,提供一說明(DESCRIPTN$),它被設(shè)置為串“寫入到日志文件”。對象類型設(shè)置的值指示為工具使用(本示例中,該值為2)。然后,規(guī)定父對象32字符ID(PARENTOBJ$)后隨父對象名(PARENTNAME$)(如上所述為“selectval”)。進(jìn)一步細(xì)節(jié)還包括對象設(shè)計(jì)名(DESGNNAME$)是“工具使用”,及模塊(MODULE$)是“模塊”。詳細(xì)的信息還包括對象駐留的存儲庫標(biāo)識(REPOSITORY$);這是一個(gè)數(shù)據(jù)庫。另外,由于track-al向日志文件寫入,由對象(TOOLUSAGE$)調(diào)用的方法被指定為“寫”。此外,派生模型包括了模型變量(MODEL-VARS$)列表,模型變量包括“Logfile”(在標(biāo)識為“模塊”的模塊內(nèi)的日志文件)、“寫”(它表示操作)、其次派生模型還包括了當(dāng)對對象(即,操作符(ZOPRINFO(1.6)))的必要條件滿足時(shí)要寫入的變量的列表、時(shí)間(TIME$)和菜單選擇(SELECTVAL$)。派生模型還包括若干對象變量(OBJ_VARS),它們是邏輯文件名、(SYLFN$)、請求的動作(SYREQUEST$)、操作符(OPERATOR$)、時(shí)間(TIME$)以及菜單選擇(SELECTVAL$)。派生模型帶有上述參數(shù)而調(diào)用DBAC以進(jìn)行寫操作。圖6是一個(gè)流程圖,示出了對于包括模型的對象的登錄過程的實(shí)施例。登錄過程保證在應(yīng)用軟件開發(fā)項(xiàng)目過程中所有的對象遵守某些約束,這些約束允許它們由RTEM10調(diào)用,也允許它們合適的執(zhí)行。登錄過程200也方便了對象的測試,且最終方便了依賴于該登錄的對象的應(yīng)用軟件的測試。被登錄的對象可以由多于一個(gè)實(shí)用程序引用。登錄過程200從步驟202開始,具有開發(fā)者提供的一列對象的數(shù)據(jù)。該數(shù)據(jù)包括一個(gè)唯一的對象識別碼(“ID”),如一個(gè)32字符的對象登錄ID(未在圖4的模型框中示出)。數(shù)據(jù)還包括一自然語言(如英語)名字,如上面與圖4模型框140有關(guān)的上述“Example-template”。描述還包括一個(gè)唯一的語言名字(在圖4的實(shí)例模型框140的中間列敘述)和圖5中Menu_example模型,以及一類指示器,它指明該對象是模型、方法、工具、數(shù)據(jù)庫元素、字段、元件或其他對象。對象中的數(shù)據(jù)也可包括一個(gè)開發(fā)項(xiàng)目控制單元(DevelopmentProjectControlUNit-“DPCU”)識別碼(ID),對象的權(quán)主,替代或重新定義該對象的ID和自然語言名字,和一個(gè)狀態(tài)標(biāo)志,指明該對象是儲存室(Repository)或者是庫(Library)。一個(gè)DPCU代表一個(gè)開發(fā)工作的邏輯塊,可以是應(yīng)用軟件開發(fā)項(xiàng)目的任一個(gè)子集。按照本發(fā)明的應(yīng)用軟件開發(fā)方法的一個(gè)實(shí)施例,一個(gè)發(fā)明對象登錄具有一個(gè)DPCU,在該登錄成為可用以前給它賦值。DPCU的賦值使對象與一個(gè)特定的開發(fā)者或開發(fā)組相聯(lián)系,保證該開發(fā)對象的完整性和質(zhì)量。DPCU數(shù)據(jù)文件可以包含·該對象的權(quán)主或開發(fā)者表;·該DPCU負(fù)責(zé)的開發(fā)對象表;·該DPCU包括的工作命令表;·對該對象的一個(gè)簡短的工作描述;·對該對象的一個(gè)長的工作描述;·該對象的登錄日期;·該對象的開始日期;·該對象的測試組(Suit)表;和·與該對象結(jié)合的一個(gè)希望得到的波圖(Wave)。測試組本質(zhì)上是一列DPCU,與其相聯(lián)系的對象包括在給定的“測試會話”(“Testsession”-將在后面敘述)中。這就允許多個(gè)應(yīng)用程序開發(fā)項(xiàng)目(因而它們包含的對象)能被同時(shí)測試,即使它們涉及同樣的軟件處理。在本發(fā)明的一個(gè)實(shí)施例中,開發(fā)測試套件文件包括·一列DPCU,因而也隱含一列將包括在該測試套件中的對象;·一列可能有的其他測試套件,它們與給定的測試套件在測試時(shí)相聯(lián)合;·一列登錄的測試器,例如一個(gè)6字符的用戶/相關(guān)碼;·一列已知的測試目錄(在下面敘述);和·對該測試套件負(fù)責(zé)質(zhì)量保證個(gè)人的識別符。測試目錄是持有測試會話輸出的位置。一個(gè)測試會話實(shí)時(shí)被調(diào)用,且涉及任何給定的測試套件。由測試會話所更新的任何文件將被翻錄到測試目錄并更新在它內(nèi)部而不在該文件的產(chǎn)品版本之中的記錄/表。此過程結(jié)合圖7敘述。在多個(gè)測試目錄能應(yīng)用到單個(gè)測試組的情況,各個(gè)測試人員可以獨(dú)立于其他測試同一組的人員作出操作選擇。在本發(fā)明的實(shí)施例的一個(gè)測試目錄包括·一個(gè)測試目錄ID;·一個(gè)測試套件;和·一個(gè)允許的測試員的清單。在給定時(shí)間,如果只有一個(gè)測試目錄對應(yīng)于一個(gè)給定的測試會話,可以激活任意數(shù)量的測試目錄。如下面結(jié)合圖7解釋,一個(gè)測試目錄捕捉所有寫操作并更新到一個(gè)數(shù)據(jù)庫。即使在原始記錄寫在產(chǎn)品環(huán)境而不是測試環(huán)境,且通過規(guī)定測試會話是一個(gè)進(jìn)程允許測試在產(chǎn)品環(huán)境中進(jìn)行的情況下上述也是正確的。數(shù)據(jù)庫訪問控制(圖1的DBAC24,30)將自動拷貝在測試會話中產(chǎn)品文件記錄,只要其格式或元素定義不變。DBAC24,30總是首先閱圖讀測試目錄,但是否則就讀取從數(shù)據(jù)庫的產(chǎn)品部分所要求的記錄。使用測試目錄防止在測試會話過程中更換產(chǎn)品數(shù)據(jù)。如果在測驗(yàn)會話過程中讀出的產(chǎn)品文件記錄改變其格式或元素定義,則讀出或提取的任何產(chǎn)品記錄只有在正常輸出時(shí)被寫入測試目錄中去。在實(shí)時(shí)運(yùn)行過程中,開發(fā)應(yīng)用軟件的操作員在面對菜單時(shí)可能調(diào)用一個(gè)測試會話。從與該操作員相關(guān)的列表中選取測試套件。然后從與附屬于該測試套件以及此操作員的列表中選出所希望的測試目錄。在測試會話中,跟隨著有各種數(shù)據(jù),包括下列數(shù)據(jù)但不限于這些·已經(jīng)運(yùn)行的作業(yè);·已經(jīng)在訪問的數(shù)據(jù)庫字段;·操作員的敲擊鍵;·遇到的錯(cuò)誤;·由操作員輸入的測試說明;和·由操作員記錄的測試記錄。測試目錄在任何時(shí)刻能被清除,即擦掉或復(fù)位,但是為了保存記錄的目的會話的結(jié)果最好保存在永久儲存器中。當(dāng)所有對象被測試以后,它們能做成“產(chǎn)品波圖(Productionwave)”的部分,或在當(dāng)?shù)貞?yīng)用環(huán)境中簡單地可以成為合法的使用。當(dāng)一個(gè)測試套件在測試以后被通過,則與此相關(guān)的所有對象被轉(zhuǎn)到“產(chǎn)品狀態(tài)(productionstatus)”。在某些應(yīng)用范圍,適合于那些范圍的另外的準(zhǔn)則可以在將產(chǎn)品狀態(tài)分派給與測試套件有關(guān)的對象以前強(qiáng)制加入。參照圖6,在步驟204開發(fā)者開始了按步驟206-216的過程構(gòu)筑對象,建立具有合適格式的模型,它的例子結(jié)合圖4和圖5被說明。當(dāng)對象被構(gòu)筑,它可能成為開發(fā)登錄的部分。在開發(fā)登錄中的一個(gè)對象可稱為“開發(fā)對象(DevelopmentObject)’以區(qū)別于在產(chǎn)品的儲存室或庫中登錄的“產(chǎn)品對象(ProductObject)’。登錄過程200的本質(zhì)可以取決被登的對象的類型。模型(規(guī)范的和變種的)按照與方法及工具有些不同的考慮進(jìn)行登錄。例如,模型(規(guī)范的和變種的)可以借助模型設(shè)計(jì)工具208建立和修改。如果對已登錄的模型作了修改,改變將做成變種模型的形式。對應(yīng)于一個(gè)給定的規(guī)范模型可以建立任意數(shù)量的變種模型。對于模型設(shè)計(jì)工具208的一個(gè)實(shí)施例的邏輯,在圖6A中示出一個(gè)流程圖。模型設(shè)計(jì)工具208首先允許應(yīng)用軟件開發(fā)者在步驟2081從現(xiàn)有模型表中選擇一個(gè)模型,或者建立一個(gè)新模型,后者被加到模型表中。如果選擇一個(gè)現(xiàn)有的規(guī)范模型,此模型的改變作為該規(guī)范模型的變種模型而被儲存。模型設(shè)計(jì)工具208然后就開始一個(gè)遞歸的循環(huán),加上所有與所選模型相關(guān)的規(guī)則。此循環(huán)的第一步在步驟2082允許根據(jù)類型選擇一個(gè)對象,作為被選模型的部分。對象可以從被登錄的那些對象中選擇,即那些對象必須如上所述由RTEM10處理過的。在步驟2083,應(yīng)用軟件開發(fā)者將該對象以及與所選對象相關(guān)的參數(shù)加到模型中去。記住,因?yàn)槟P筒话绦虼a,對象不是真正出現(xiàn)在模型中,而是模型包括對所選對象的參照,除了加一個(gè)對象到模型中以外,應(yīng)用軟件開發(fā)者可以修改或刪除與該模型相關(guān)的對象。作為說明,應(yīng)用軟件開發(fā)者可以選擇·數(shù)據(jù)定義-定義此模型中使用的數(shù)據(jù)并將此數(shù)據(jù)定義指向的元素輸入到數(shù)據(jù)字典12中(即一個(gè)字段,指向哪個(gè)文件或哪個(gè)數(shù)據(jù)元素);·輸入-確定用戶輸入,對用戶輸入儲存的數(shù)據(jù),對不同結(jié)果碼采取的特殊操作(若有的話);·按鍵-確定按鍵的定義,顯示的標(biāo)記,對不同可能的結(jié)果碼采取的特殊操作(若有的話);·方法-選擇調(diào)用的方法和傳遞的參數(shù)(若有的話);對不同可能的結(jié)果碼輸入特殊的操作(若有的話);·工具使用-選擇調(diào)用的工具使用和傳遞的參數(shù);對不同可能的結(jié)果碼輸入特殊的操作(若有的話);·模型-選擇調(diào)用的模型及傳遞的參數(shù)(若有的話);對不同可能的結(jié)果碼輸入特殊的操作(若有的話);·決定-輸入此決定步驟的條件(若有的話)和完成的特殊操作(若有的話);·退出·滾屏觸發(fā)-輸入使用的可視滾屏定義(滾屏是在數(shù)據(jù)輸入自動滾動屏幕顯示的功能,特別是涉及在相繼的記錄中重復(fù)的數(shù)據(jù)輸入);對不同的可能結(jié)果碼輸入特殊的操作(若有的話);·滾屏可視定義-定義滾動多少可視行;·方框顯示-輸入方框的標(biāo)題(若有的話);·文字顯示-輸入需顯示的文字。至今,步驟208處理的結(jié)果只是簡單地做了一個(gè)與模型相關(guān)的對象的表。但在這里對象在表中的次序是簡單地按照對象加到模型中的次序排列。下面在步驟2084,應(yīng)用軟件開發(fā)者可以在模型中放一個(gè)可視的對象。例如,如果設(shè)計(jì)對象選擇的一個(gè)可得到的可視的組件(如一個(gè)屏幕按鍵)和應(yīng)用軟件開發(fā)者希望加一個(gè)屏幕按鍵或其他對象到模型中去,則設(shè)計(jì)該模型的應(yīng)用軟件開發(fā)者被提示將此對象以可視的形式“放置”(即指出顯示按鍵的地方,或按鍵方框的大小及位置)。對象從一組已有的選項(xiàng)中選取,這些選項(xiàng)對本領(lǐng)域的專業(yè)人員是熟知的。然后,應(yīng)用軟件開發(fā)者在步驟2085可以在模型中重新將對象排序成這樣的序列,(RTEM10即是按此次序調(diào)用的)按此順序執(zhí)行就實(shí)現(xiàn)了與設(shè)計(jì)的模型相關(guān)的希望的過程。如果上面選擇的對象是一個(gè)處理對象(即它調(diào)用一個(gè)方法),設(shè)計(jì)此模型的應(yīng)用軟件開發(fā)者能將此對象移到相對于其他處理對象的另外位置。默認(rèn)的是把所有新的處理對象加到父序列(ParentSequence)的末端。如果正在設(shè)計(jì)該模型的應(yīng)用軟件開發(fā)者希望使(例如)一個(gè)方法成為對另一個(gè)對象的前處理,這在步驟2085中完成。因此,如果一個(gè)對象是一個(gè)方法,且是對一個(gè)特殊父對象的前處理或后處理,則在步驟2085就強(qiáng)迫加上適當(dāng)?shù)南鄬Υ涡?。步驟2085的處理結(jié)果是一個(gè)控制表。當(dāng)流程圖中A部分的一個(gè)特殊模型設(shè)計(jì)過程已經(jīng)對特殊模型完成,則模型設(shè)計(jì)工具208在流程圖B部分按照已知的方法RTEM10調(diào)用一個(gè)模型,它建立預(yù)編譯數(shù)據(jù)總庫(Pre-compileddatabank)指針(見圖3參照號96),允許RTEM10訪問實(shí)際模型。RTEM10在調(diào)用模型時(shí)將數(shù)據(jù)加載到預(yù)編譯數(shù)據(jù)總庫96,使得RTEM10在調(diào)用一個(gè)模型時(shí)能夠完成在模型設(shè)計(jì)過程中所規(guī)定的規(guī)則。若被維護(hù)的模型是一個(gè)變種模型,只有變種模型信息被儲存,并對于附在更新成變種模型的規(guī)范模型后的變種模型表作出修改。(即,說明存在一個(gè)變種模型,并在什么條件下調(diào)用它)。在模型設(shè)計(jì)工具208的每一個(gè)步驟的功能能根據(jù)已知的方法完成?;氐綀D6,如果在步驟210方法和工具被登錄,對該方法或工具的源程序碼的編輯和維護(hù)在步驟212進(jìn)行。接著在步驟214碼(無論是源程序碼或目標(biāo)程序碼)被掃描,找出非正常操作。在本發(fā)明的實(shí)施例中,掃描非正常操作是讀程序碼,測試關(guān)鍵詞的出現(xiàn),后者是寫此程序碼的語言中非正常操作的名字。一般,當(dāng)遇到執(zhí)行控制轉(zhuǎn)移或I/O操作(即一個(gè)調(diào)用或一個(gè)寫語句等)語言代碼時(shí),這樣的語言代碼被識別為非正常,必須作出修改。例如在商業(yè)BASIC(BussinessBASIC)中非正常操作包括·CALL(調(diào)用)·EXTRACT(提取)·PERFORM(完成)·PRINT(打印)·WRITE(寫)·RUN(運(yùn)行)·READ(讀)·INPUT(輸入)·FIND(尋找)·OBTAIN(獲得)·CLOSE(關(guān)閉)·OPEN(打開)在步驟216,登錄過程還識別在掃描過程引入的參數(shù)。任何賦值的變量將從方法中返回。所有其他變量則傳遞到方法中。所有對象然后經(jīng)過在步驟218開始的測試對象過程,其中確定對象的類型。對模型和變種(220)首先在步驟222建立測試床(TestBed)。測試床允許模型使用真實(shí)的或“活動”的數(shù)據(jù)進(jìn)行測試,但不影響該數(shù)據(jù)的真實(shí)文件。此外所有數(shù)據(jù)若需要時(shí)自動傳送到測試床。圖7A示出測試床方法240的第一個(gè)流程圖。在一個(gè)正在進(jìn)行開發(fā)和測試的應(yīng)用軟件,或特別地一個(gè)作為應(yīng)用軟件的一部分正在建立或修改的模型,需要一個(gè)輸入或輸出(“I/O”)操作,就調(diào)用測試床方法240。在步驟242,測試床方法240確定請求是否為輸入(讀),輸出(寫)或刪除(移去)。如果請求是讀操作請求,則在步驟244中測試床方法確定,需要讀入的數(shù)據(jù)是否在測試床中。若是,方法在步驟250提取所需的數(shù)據(jù)。此時(shí),方法240完成若干步驟維持一個(gè)字段的并發(fā)性(concurrence),該字段累計(jì)或總和多個(gè)記錄的細(xì)目,能稱之為“總計(jì)字段”(“SummaryField”)。這些步驟,252-258(偶數(shù)編號),在方法240中從多于一個(gè)分支調(diào)用,將在下面詳述。在步驟260過程回到應(yīng)用軟件。若在步驟24A通過讀操作尋找的數(shù)據(jù)確定不在測試床中,則測試床方法在步驟R01確定,需讀入的數(shù)據(jù)是否在測試床刪除文件(簡單地稱為“TestBedDeletion”)測試床刪除文件儲存在測試會話過程中由于下列原由已被刪除的記錄。一個(gè)“活動”數(shù)據(jù)庫(包含真實(shí)的而非測試數(shù)據(jù),那個(gè)數(shù)據(jù)庫簡稱“活動”的)在一個(gè)測試會話中不變更。此外,只要記錄不在測試床中,就從活動數(shù)據(jù)庫中索取。因而需要一個(gè)機(jī)構(gòu),來知道在測試會話期間被刪除的記錄,防止在測試會話過程中被刪除的記錄重新出現(xiàn)在測試床中,防止其出現(xiàn)在活動的數(shù)據(jù)庫中。那樣的機(jī)構(gòu)由測試床刪除文件提供,它儲存在測試會話期間被刪除的記錄。如果數(shù)據(jù)出現(xiàn)在測試床刪除文件中,則認(rèn)為所需的數(shù)據(jù)不存在。沒有數(shù)據(jù)得到,在步驟254上處理過程回到應(yīng)用軟件。如果在步驟R01,確定數(shù)據(jù)不在測試床刪除文件中,則測試床方法在步驟R02確定,需讀的文件是父(parent)文件、子(child)文件或獨(dú)立(Standalone)文件。一個(gè)父文件有相關(guān)聯(lián)系信息在一個(gè)或多個(gè)子文件中。在后勤范圍中一個(gè)例子是一個(gè)訂貨(“Order”)文件。訂貨的頭部數(shù)據(jù)可以放在父文件中,而詳細(xì)的產(chǎn)品行,注釋行和專門的費(fèi)用行可以放在與該父文件相關(guān)的一個(gè)或多個(gè)訂貨細(xì)節(jié)子文件中。父數(shù)據(jù)可以不需要子數(shù)據(jù)而存在,但子數(shù)據(jù)不能沒有父數(shù)據(jù)而存在。獨(dú)立文件是缺乏父子數(shù)據(jù)關(guān)系的文件。若在步驟R01上確定,此文件是父文件,處理過程進(jìn)到R05。在步驟R05父數(shù)據(jù)從“活動”文件中被取出,在R06步驟被寫入并鎖定在測試床中。每個(gè)子文件有它的與父數(shù)據(jù)相關(guān)的數(shù)據(jù),在步驟R07從適當(dāng)?shù)摹盎顒印蔽募〕觯懭脒m當(dāng)?shù)臏y試床文件。一旦此過程完成,父數(shù)據(jù)在步驟R08在測試床上打開,在步驟250需要的數(shù)據(jù)從測試床取出。在步驟252-258中維護(hù)總計(jì)字段數(shù)據(jù)的并發(fā)性(如下所討論),此后處理過程在步驟254回到應(yīng)用軟件。如果在步驟R02文件被確定是獨(dú)立的,則在步驟246所需的數(shù)據(jù)從適當(dāng)?shù)摹盎顒印睌?shù)據(jù)庫取出。當(dāng)數(shù)據(jù)取出時(shí),所有總計(jì)字段(在下面敘述)在步驟247被清除。于是,在步驟248將取出的數(shù)據(jù)寫入測試床來更新測試床。然后,在步驟250數(shù)據(jù)從測試床中取出,經(jīng)過步驟252-258(偶數(shù)編號)在總計(jì)字段上維護(hù)活動數(shù)據(jù)與測試床數(shù)據(jù)之間的并發(fā)性以后,處理過程在步驟254回到應(yīng)用軟件。如果在步驟R02確定,文件是子文件,則在步驟R03作出確定,在測試床是否存在父數(shù)據(jù)。若是,數(shù)據(jù)在步驟250從測試床取出。并且在步驟254-258(偶數(shù)編號)(如下面敘述)維護(hù)總計(jì)字段的數(shù)據(jù)并發(fā)性,在步驟254處理過程回到應(yīng)用軟件。若在步驟R03確定對此子文件的父數(shù)據(jù)不在測試床中,則在步驟R04作出確定是否父數(shù)據(jù)在測試床刪除文件中。若在其中,則該數(shù)據(jù)認(rèn)為不存在,在步驟254處理過程回到應(yīng)用軟件。否則,在步驟R05此父數(shù)據(jù)從“活動”文件中取出,且在步驟R06寫入并鎖定在測試床中。每個(gè)子文件有其與父數(shù)據(jù)相關(guān)的數(shù)據(jù),而父數(shù)據(jù)在步驟R07從適當(dāng)?shù)摹盎顒印蔽募〕霾懭脒m當(dāng)?shù)臏y試床文件中。一旦此過程完成,在步驟R08父數(shù)據(jù)在測試床中打開,所需數(shù)據(jù)在步驟250從測試床中取出。處理過程在步驟254回到應(yīng)用軟件。圖7B示出測試床方法240的第二張流程圖。如果請求是寫數(shù)據(jù),如步驟242確定的那樣,則在步驟262與測試床中總計(jì)字段相關(guān)的值減去在活動數(shù)據(jù)庫中總計(jì)字段值。被寫入測試床數(shù)據(jù)庫的數(shù)據(jù)被更新。接著在步驟R09,測試床刪除數(shù)據(jù)庫中的任意數(shù)據(jù)被清除。在步驟266,處理過程回到應(yīng)用軟件。在步驟242,若I/O請求類型被確定是“清除”,在步驟-R10,數(shù)據(jù)更新到測試床刪除文件。在步驟R11數(shù)據(jù)從測試床數(shù)據(jù)庫中清除。最終,在步驟266處理過程返回到應(yīng)用軟件。再回到圖7A,步驟252-258(偶數(shù)編號)旨在按本發(fā)明維護(hù)在活動數(shù)據(jù)和測試床之間總計(jì)變量數(shù)據(jù)的并發(fā)性。在本發(fā)明這方面的一個(gè)實(shí)施例中,此變量是“總計(jì)字段”,它是個(gè)數(shù)值字段,保存多個(gè)包含細(xì)節(jié)數(shù)據(jù)記錄的和。在涉及后勤的一個(gè)例子中,總計(jì)字段是“產(chǎn)品主導(dǎo)”(“ProdnctMaster”)的一個(gè)記錄,它儲存給定產(chǎn)品的總量,即存貨,也即“現(xiàn)貨”(“On-Hand”)?,F(xiàn)貨的細(xì)目儲存在與產(chǎn)品批量(Lot)有關(guān)的記錄中,可能有成千上萬個(gè)批量應(yīng)用于一個(gè)產(chǎn)品記錄。為了很塊地確定在給定時(shí)刻現(xiàn)貨的總量,數(shù)據(jù)設(shè)計(jì)成在產(chǎn)品主導(dǎo)記錄中儲存總的現(xiàn)貨量。每當(dāng)涉及一個(gè)產(chǎn)品批量的細(xì)目記錄改變時(shí),涉及此改變的差值加到產(chǎn)品主導(dǎo)記錄的總計(jì)字段中。當(dāng)運(yùn)行測試床時(shí),在活動數(shù)據(jù)庫中的細(xì)目記錄可能改變,這就導(dǎo)致在活動數(shù)據(jù)庫和測試床數(shù)據(jù)庫中的總計(jì)字段失去平衡,或缺乏并發(fā)性。不正確地反映了不同的值。除非所有的細(xì)目記錄拷貝到測試床中,否則就會發(fā)生此問題。但是這可能需要拷貝細(xì)目記錄成千上萬次來維護(hù)總計(jì)字段的完整性和并發(fā)性,這可能是極其無效率和耗時(shí)的。為針對在活動數(shù)據(jù)庫和測試床數(shù)據(jù)庫的總計(jì)字節(jié)之間缺乏并發(fā)性的問題,測試床將在測試會話過程中發(fā)生的所有細(xì)目記錄的差的總數(shù)記錄在總計(jì)字段中?;顒訑?shù)據(jù)庫的總計(jì)字段中的值加到測試床總計(jì)字段的此數(shù)值中。測試床僅儲存在測試會話中作出的改變。若包含總計(jì)字段的記錄被寫到測試床中,在測試會話中對總計(jì)字段沒有發(fā)生變化,則在測試床的總計(jì)字段值是0,而與對應(yīng)活動數(shù)據(jù)庫總計(jì)字段的值無關(guān)。當(dāng)測試會話請求讀包括一個(gè)或多個(gè)總計(jì)字段的記錄,這些總計(jì)字段將從活動數(shù)據(jù)庫中取出。這些從活動數(shù)據(jù)庫取出的值存入存儲器,為在寫請求時(shí)使用。在這樣的請求下,將從測試床數(shù)據(jù)庫中取出同樣的記錄,且測試床的總計(jì)字段的值加到活動數(shù)據(jù)庫的相應(yīng)總計(jì)字段中。這次相加產(chǎn)生了對測試會話的當(dāng)前值,它替代現(xiàn)有的存儲值。因此返回到應(yīng)用軟件的總計(jì)字段每次是測試床中總計(jì)字段和在活動數(shù)據(jù)庫中相應(yīng)總計(jì)字段之和。當(dāng)測試會話請求寫一個(gè)包含總計(jì)字段的記錄,在請求時(shí)刻的當(dāng)前值從(以前是當(dāng)前值)活動數(shù)據(jù)庫的值減去,后者在讀請求期間已被儲存在存儲器中。減法產(chǎn)生在測試會話中導(dǎo)致的差值。當(dāng)包含總計(jì)字段的一個(gè)記錄從活動數(shù)據(jù)庫中取出,且首次更新到測試庫中,總計(jì)字段設(shè)成0。所有未來的對總計(jì)字段的改變將只儲存測試會話中作出的改變。回到圖7A,在上述達(dá)到步驟250的每種情況,完成與步驟252-258(偶數(shù)編號)的處理過程。在步驟252,確定是否存在總計(jì)字段。若不存在,處理過程在步驟260回到應(yīng)用軟件。若存在總計(jì)字段,則在步驟254從活動數(shù)據(jù)庫中取出之?;顒涌傆?jì)字段值在步驟256存入存儲器,且活動總計(jì)字段值在步驟258被加到測試庫總計(jì)字段值上。處理過程最終在步驟260回到應(yīng)用軟件?;氐綀D6的登錄處理200,當(dāng)在步驟222建立測試床,模型(或變種模型)在步驟224被測試。若在步驟224的模型測試過程中模型未能通過檢驗(yàn),則過程重復(fù);開發(fā)者必須使用如模型設(shè)計(jì)工具208來修改模型,而且對象必須重新測試(步驟218到224)。若在步驟218作出判斷,當(dāng)前在進(jìn)行登錄過程的對象是一個(gè)方法或工具(步驟226),則在步驟228設(shè)置此方法或工具的參數(shù)。一旦參數(shù)被設(shè)定,就測試方法或工具。除RTEM10內(nèi)部的子程序以外(RTEM10在下面敘述),沒有程序代碼塊(例如沒有方法或工具)能直接調(diào)出任何另一個(gè)程序代碼塊。此規(guī)則使得每個(gè)程序代碼塊能獨(dú)立測試,即使程序代碼在制作的期間也如此。本發(fā)明的基本原則的破壞在登錄過程中即被捕捉到,并通過實(shí)例說明予以預(yù)防。某些錯(cuò)誤的方法在登錄過程就被檢測到并標(biāo)志出來,一些例子包括一個(gè)方法中包含修改受保護(hù)變量的程序代碼;調(diào)用另一個(gè)方法的方法;一個(gè)采取離開取RTEM10的控制的方法;和一個(gè)企圖交叉域(crossdomain)(如數(shù)據(jù)庫)表示和交叉處理域的方法。若在進(jìn)行登錄過程的方法或工具不能通過測試過程,則控制回到步驟212,應(yīng)用軟件的開發(fā)者能編輯修改方法或工具的源代碼糾正導(dǎo)致測試失敗的缺陷,登錄過程從此步驟重復(fù)開始。如果對象在步驟224(對模型)或在步驟230(對方法或工具)通過測試,則該對象被做成“公共的”(“Public”),它在運(yùn)行一個(gè)應(yīng)用軟件過程中可以訪問RTEM10。為將一個(gè)對象做成公共的,登錄過程建立了鏈接意見,如“何處使用”(“where-used”),“何時(shí)建立”(“when-created”),“如何使用”(“how-used”)?!昂螘r(shí)刪除”(“whendeleted”)。圖8示出一流程圖300,敘述按照本發(fā)明一個(gè)RTEM10的實(shí)施例的操作。RTEM10可以用第三代編程語言(“3GL”)來實(shí)現(xiàn),如商業(yè)BASIC,C,C++或其他3GL語言。RTEM10監(jiān)視應(yīng)用程序的運(yùn)行,后者由一組根據(jù)如圖6說明的登錄過程登錄的模型所規(guī)定。通過監(jiān)視,RTEM10對應(yīng)用軟件加載一個(gè)初始模型定義初始操作,包括調(diào)用方法、工具和其他模型。當(dāng)在每個(gè)模型中的對象表被讀出,該對象定義的條件被檢驗(yàn)判斷其是否滿足,如果滿足,該對象被調(diào)用。已經(jīng)知道,如上有關(guān)登錄過程的說明,一個(gè)登錄的對象不能夠調(diào)用另外的對象,與當(dāng)前處理的對象有關(guān)的執(zhí)行完成以后控制總是返回到RTEM10。在每個(gè)對象處理之間,RTEM10能校驗(yàn)專門的作用或外部狀態(tài),并更新狀態(tài),使那些組成應(yīng)用軟件的模型能按照它們涉及的狀態(tài)自由地被訪問?,F(xiàn)參照流程圖300,在步驟302第一個(gè)模型被加載到存儲器。參照圖6A,6B,6C中提供的一個(gè)用戶界面應(yīng)用菜單的模型的例子,模型菜單數(shù)據(jù)在步驟302集中存入當(dāng)?shù)卮鎯ζ?即圖1中的任務(wù)存儲器90)。此過程可能涉及使用PCDB指針96(圖3)讀出模型。這也涉及將模型存儲塊的預(yù)編譯數(shù)據(jù)總庫指針96鏈接到任務(wù)存儲器90的VTAB94。在步驟310,RTEM10檢查與剛加載的模型相關(guān)的變種模型的存在。與檢驗(yàn)變種模型存在與否相關(guān)的過程310在圖9中說明。本質(zhì)上,RTEM10將檢驗(yàn)相對于已加載模型的登錄的所有變種模塊的條件,確定在校驗(yàn)時(shí),是否有任何模塊當(dāng)前在應(yīng)用,給出數(shù)據(jù)的狀態(tài);若有一個(gè)變種模塊當(dāng)前在應(yīng)用,它將被加載(通過寫一個(gè)指向它的指針到PCDB96中)帶著當(dāng)前在存儲器中的模型數(shù)據(jù)被合并。圖9示出對此過程的一些流程圖400。當(dāng)在流程圖300中達(dá)到步驟310時(shí),RTEM在步驟402取出第一個(gè)(或取決于迭代,取下一個(gè))與該模型的變種模型有關(guān)的條件,該模型已在圖8的步驟302上被加載。條件是基于模型中的數(shù)據(jù)值。例如條件1client$=“ACME”andproduct$=“BEACH-BALL”條件2product$=“NET”當(dāng)在每個(gè)條件存在時(shí),有一張表將條件與被調(diào)出的變種模型相聯(lián)系。例如VariantModel’A’andVariantModel‘B”areactivedwhenclient$=“ACME”andproduct$=“BEACH-BALL”product$=“BEACH-BALL”VariantModel’C”isactivatedwhenproduct$=“NET”RTEM10將設(shè)被校驗(yàn)的“當(dāng)前條件”為條件1,然后為條件2等等,直至針對該模型中數(shù)據(jù)的當(dāng)前值校驗(yàn)完所有的條件。在步驟404,取出的條件針對當(dāng)前的數(shù)據(jù)值(如圖1所示,存在任務(wù)存儲器的動態(tài)變量表98中)進(jìn)行校驗(yàn),如ifcheckingcondition1andclient$=“ACME”andprodnct$=“BEACH-BALL”thenModels‘A’and‘B’是活動的;ifclient$isnot“ACM”或ifprodnct$isnot“BEACHBALL”thenModels‘A’and‘B’arenotactive。若在步驟404被校驗(yàn)的取出的條件滿足,或“通過”(步驟406),則當(dāng)取出條件被滿足時(shí)調(diào)出的所有變種模型在步驟404被加到由RTEM10處理并存在任務(wù)存儲器10的活動變種模型表中。例如activevariantModels=‘A’and‘B’若取出的條件在步驟404校驗(yàn)不通過,或當(dāng)對應(yīng)當(dāng)前條件的所有變形模型已在步驟410加到表中,則RTEM10在步驟408檢查對該當(dāng)前模型是否還有另外條件必須校驗(yàn)。若有,RTEM10回到步驟402,取出表中的下一個(gè)條件。若沒有,則在步驟412將所有在步驟410加到表中的變種模型按照上述加載方法予以加載。任何當(dāng)前加載的變種模型,若不出現(xiàn)在流程圖400過程中建立的活動變種模型表中就卸載,所以對當(dāng)前規(guī)范模型的變種模型僅由活動變種模型組成。變種模型的加載和卸載過程更詳細(xì)地在圖10的流程圖500上敘述。一旦建立了活動變種模型表(在流程圖400的過程中),它與在步驟502當(dāng)前加載的變種模型表進(jìn)行比較。此比較確定哪些變種模型需要激活(加載),哪些變種模型需要使其不激活(卸載)。在步驟504中完成檢查,確定是否有任何當(dāng)前加載的變種模型不在活動變種模型表中。如果沒有當(dāng)前加載的變種模型不在活動變種模型表中,則不需要使其不激活的工作,控制轉(zhuǎn)到步驟514,如下所述。但是如果有一個(gè)或多個(gè)當(dāng)前加載變種模型不在活動變種模型表中,則在步驟506,不激活的當(dāng)前變種模型設(shè)成那些沒有在活動變種模型表中的當(dāng)前加載變種模型表中的下一個(gè)。在步驟508,對變成不激活的當(dāng)前變種模型的變種模型信息從控制變量組中去除。RTEM10使用一些那樣的控制信息使能識別需處理哪些對象并以適當(dāng)?shù)捻樞蛱幚硭鼈儭?刂谱兞恐饕菍ο蟊怼H粼诓患せ畹漠?dāng)前變形模型表中的任何對象在任何控制變量表中被識別,那些表被修改以除去對那些對象的標(biāo)識。例如,若對象識別符是’M020016TOR1--0000000000400041(32個(gè)字符或其他合適的碼)對應(yīng)于不激活的當(dāng)前變形模型,此識別符出現(xiàn)在父對象序列表(即控制變量)中,它將從此表中除去。接著,所有變種模型的詳細(xì)數(shù)據(jù)將在步驟510從實(shí)時(shí)事件管理器(RunTimeEventmanager)10的當(dāng)?shù)卮鎯ζ?即任務(wù)存儲器90)中除去。例如,若對于規(guī)范模型的一個(gè)變種模型包含一個(gè)不在該規(guī)范模型中的方法,有關(guān)此方法的信息(如模塊、資源、方法名等)在變種模型數(shù)據(jù)中;若該變種模型未被激活,則有關(guān)此方法的信息借助于從任務(wù)存儲器90取消變種模型PCDB指針(參照號96)的鏈接從存儲器中除去。在步驟512作出檢驗(yàn),確定是否還有更多的變形模型需要使其不激活。若有,RTEM10將控制返回到步驟506;否則,或者在步驟504確定沒有變種模型需要使不激活,在步驟514再檢查是否有任何活動的變種模型未在當(dāng)前加載的變種模型表中。若結(jié)果是肯定的,則在步驟516需加載的當(dāng)前變種模型設(shè)成需加載的變種模型表中下一個(gè)變種模型。在步驟518作出一個(gè)測試,檢查該當(dāng)前變種模型是否已經(jīng)加載。若該當(dāng)前變種模型已經(jīng)加載,則不需要做任何事。但是,若當(dāng)前變種模型尚未加載,則在步驟522它將帶著當(dāng)前的控制數(shù)據(jù)被加載。RTEM10使用控制變量識別處理哪些對象和以什么樣的順序處理它們。任何由變種模型引入的新的對象需要與這些控制變量合并。合并發(fā)生在步驟524。為了使RTEM10能確定何時(shí)激活由變種模型引入的新的方法,將該新的方法的對象識別符加到控制變量中。若此方法是一個(gè)前處理,它被加到該對象的前處理表,此對象是該方法的父親(例如,在圖6A-6C的標(biāo)記{parentobjectID}.preprocs$)。一旦與變種模型相關(guān)的任何新對象已經(jīng)與控制變量相合并,或者若在步驟518已經(jīng)確定該當(dāng)前變種模型已經(jīng)加載,則RTEM10測試,是否有更多的活動變種模型需要處理。若是,RTEM10回到步驟516取出下一個(gè)變種模型。否則,或者若在步驟514已經(jīng)確定不存在活動的變種模型,則在步驟526邏輯工作已完成,控制或返回到圖8的步驟310,或返回到步驟322(在下面編址),取決于邏輯轉(zhuǎn)移最初發(fā)生的情況。假設(shè)控制返回到圖8頂層RTEM10循環(huán)的步驟310檢查變種模型,識別當(dāng)前對象的變量在步驟312設(shè)置到該模型的第一個(gè)對象。如上所述,對象可以是另一個(gè)模型,一個(gè)方法,一個(gè)工具或其他對象。RETM10從模型中的父對象表中取出第一個(gè)父對象。使用圖6A-6C的Model_menufirst_object=lvsequence$(1,32)-FirstParentObject(第一個(gè)父對象)RTEM10還檢查對象上的前處理;例如pre_processes={first_object}.preprocs$-Listofpre_processforFirstparentobject(第一個(gè)父對象的前處理表)若存在任何前處理,第一個(gè)對象將設(shè)成前處理表中的第一個(gè)對象,否則它將仍然作為第一個(gè)父對象。例如first_object=pro_processes(1,32)-FirstPre_ProcessObject(第一個(gè)前處理對象)Current_Object=first_object-settingthecurrentobjecttothefirstobject(將當(dāng)前對象設(shè)成第一個(gè)對象)在步驟314,任何相應(yīng)當(dāng)前對象的條件針對于當(dāng)前數(shù)據(jù)檢測,以確定對象是否可以執(zhí)行。若無條件與當(dāng)前對象有關(guān),則RTEM10認(rèn)為滿足條件或通過。例如,使用圖6A-C的menu_model例子evaluate{current_object}.condition$-checkconditionofobject(檢查對象的狀態(tài))若在步驟314對于當(dāng)前對象的條件滿足,則在步驟316RTEM10加載并顯示任何與當(dāng)前對象需要的用戶接口有關(guān)的信息,此步驟相應(yīng)于“聚焦”(“GotFocus”)過程,此術(shù)語取在面向?qū)ο缶幊填I(lǐng)域中的意義。例如,若當(dāng)前對象(用記號current_object表示)是一個(gè)用戶輸入對象,如按鍵或輸入域,RTEM10比較將當(dāng)前顯示的可視形式與當(dāng)前對象顯示的可視形式比較。如果它們是不同的,新的可視形式將被加載關(guān)顯示。當(dāng)前對象在步驟318被調(diào)用,RTEM10檢查對象的類型,且執(zhí)行適當(dāng)?shù)倪壿媮碚{(diào)用,或者在其他情況使用此對象。例如{current-object}.objecttype1=method-setupparametersandinvokeMethod(設(shè)置參數(shù)并調(diào)用方法)2=ToolUsage-setupparametersandinvokeToolUsage(設(shè)置參數(shù)并調(diào)用工具使用)3=model_setupparameterandinvokeModel(設(shè)置參數(shù)并調(diào)用模型)因此,若當(dāng)前對象是一個(gè)模型,則在步驟318a加載該模型。若當(dāng)前對象是一個(gè)方法,則在步驟318b調(diào)用該方法。若當(dāng)前對象是一個(gè)工具,則在步驟318c調(diào)用工具。當(dāng)對象(若是方法或工具)終止執(zhí)行,若需要,在步驟320RTEM10更新用戶界面。RTEM10檢查是否有任何當(dāng)前表格上顯示數(shù)據(jù)已經(jīng)改變。在已經(jīng)改變的當(dāng)前表格上顯示的數(shù)據(jù)將被顯示。如上述,有關(guān)數(shù)據(jù)的狀態(tài)在該對象執(zhí)行過程中可能改變,并且考慮到那些變種的條件,改變的數(shù)據(jù)可以影響到哪個(gè)變種被應(yīng)用,RTEM10在步驟322再次根據(jù)流程圖400的過程檢查變種模型。若有任何數(shù)據(jù)改變,RTEM10完成一個(gè)詳細(xì)的分析,確定當(dāng)前加載的任何變種模型是否需要卸載且加載任何剛被激活的變種模型,如分別結(jié)合圖9和圖10的流程圖400和500所說明的那樣。接著RTEM10在步驟324檢查專門的作用。例如,若一個(gè)工具使用被調(diào)出從數(shù)據(jù)庫中讀信息,且該信息不存在,結(jié)果碼將返回到RTEM10。專門作用能附于結(jié)果碼之后,將下一個(gè)當(dāng)前對象設(shè)置成為對于一個(gè)消息的對象識別碼,此消息通知操作員,此信息在數(shù)據(jù)中不存在。例如{current_object}.result_code_000010=“jump”{current_object}.result_code_000010.resultobj$=objectIDofthemessage{current_object}.result_code_000010.descriptn$=“ifrecordnotonfile,displaymessage”此作用將設(shè)置當(dāng)前對象到在變量{current_object}中規(guī)定的對象識別符resnlt_code000010.resultobj$。此時(shí),步驟326將被跳過,控制轉(zhuǎn)移到步驟314。如果在步驟314檢測當(dāng)前對象的條件時(shí),條件不滿足,或如果在步驟324專門的作用沒有已經(jīng)設(shè)置該當(dāng)前對象,將執(zhí)行步驟326的邏輯。如果RTEM10當(dāng)前正處理對父對象的前處理表,當(dāng)前對象設(shè)成前處理表中的下一個(gè)對象。若沒有更多的前處理對象,當(dāng)前的對象設(shè)成父對象。因?yàn)樵诓襟E328存在一個(gè)對象需處理意味著處理未完成,控制返回到步驟314。若RTEM10當(dāng)前處理一個(gè)父對象,對該對象的任何后處理作出檢驗(yàn)(如{current_object}.postprocs$)。若對當(dāng)前的對象沒有后處理,RTEM10將當(dāng)前對象識到父表中的下一個(gè)對象(lvsequence$)。檢驗(yàn)該對象,確定是否有任何前處理與該對象相關(guān)。若有,當(dāng)前對象設(shè)有前處理表中的第一個(gè)對象)例如,current_object=preproc$(1,32))。若沒有,當(dāng)前對象仍然作為下一個(gè)父對象。若RTEM10當(dāng)前正處理一個(gè)父對象,且若此父對象有與它相關(guān)的后處理,則當(dāng)前的對象將設(shè)置到這些后處理中的第一個(gè)。若RTEM10當(dāng)前正在處理后處理,且無更多的后處理要執(zhí)行,則當(dāng)前的對象被設(shè)成下一個(gè)父對象,它被檢測是否為前處理(如上所述)。若在任何時(shí)刻一個(gè)后處理返回一個(gè)正的結(jié)果碼,沒有一個(gè)專門的作用附屬于該結(jié)果碼(在圖8的參考號324),則當(dāng)前的對象被設(shè)成當(dāng)前對象的父對象。此對象然后被檢測是否前處理。如果存在任何前處理,該當(dāng)前對象被設(shè)成第一個(gè)前處理。并且,存在當(dāng)前對象意味著在步驟328,無論過程是否已經(jīng)完成檢測的結(jié)果被判斷是否定的,因此控制回到步驟314。若在步驟326,不存在更多的對象要執(zhí)行,或者若在步驟324一個(gè)專門的作用導(dǎo)致一條指令退出RTEM10,在步驟328的判斷是肯定的且RTEM10在步驟330退出。伴隨著模型實(shí)時(shí)運(yùn)行信息的一個(gè)伴隨文件儲存一張激活所有變種模型的所有條件的表。所有相對規(guī)范模型登錄的變種模型更新此表。當(dāng)操作員應(yīng)用結(jié)合圖6和6A描述的分類的模型設(shè)計(jì)工具時(shí),在登錄過程中變種模型相對于規(guī)范模型被登錄。該控制表的格式如下LVRTEM.VAR_TABLE$這是對每個(gè)變種條件判斷的表LVRTEM.VARIATIONS$這是對應(yīng)于lvrtrem.var_table$變種名稱的表例如,對給定的規(guī)范模型(未示出)三個(gè)變種模型每個(gè)都在下列條件下應(yīng)用VariantModel‘variant1’COUNTRY$=“US”VariantModel‘variant2’COUNTRY$=“CA”VariantModel‘variant3’COUNTRY$=“ACME”用于激活一個(gè)變種模型的每個(gè)條件的值被存入變量lvrtem.vartable。對每個(gè)用于所有變種的條件有一個(gè)位置標(biāo)志符(placeholder)。在這里提供的例子中,有三個(gè)條件,因而在變種表中有三個(gè)位置標(biāo)志符。為了variant1被激活,COUNTRY$=“US”必須為真(用“1”代表),COUNTRY$=“CA”必須為假(用“0”代表),而CLIENT$=“ACME”可以是真或假,因?yàn)樗挥糜诩せ顅ariant1(用“0”代表)。對variant1的變化表如下述lvrtem.var_table$=“100”為了激活variant2,COUNTRY$=“US”必須為假(用“0”代表),COUNTR$=“CA”必須為真(用“1”代表),而CLIENT$=“ACME”可以是真或假,因?yàn)樗挥糜诩せ顅ariant2(用“0”代表)。對variant2的變化表如下述lvrtem.var_table$=“010”為了激活variant3,COUNTRY$=“US”可以是真或假,因?yàn)樗挥糜诩せ顅ariant3(用“0”代表),COUNTRY$=“CA”可以是真或假,因?yàn)樗挥糜诩せ顅ariant3(用“0”代表),而CLIENT$=“ACME”必須是真(用“1”代表)。對variant3的變化表如下述lvrtem.var_table$=“001”用于得知應(yīng)用哪些變化的變化表通過將所有條件表加在一起構(gòu)筑而成。變化表如下述lvrtem.var_table$=“100”+“010”+“001”或lvrtem.var_table$=“100010001”此變種模型表存入變量lvrtem.variations中。變化的次序與條件表的次序相同。例如lvrtem.variction$=“variant1variant2variant3”審視哪個(gè)變化是活動的條件存入變量lvrtem.var_check中。條件的次序與在條件表中值有相同次序。一個(gè)例子lvrtem.var_check$=“(COUNTRY$=“US”)+COUNTRY=“CA”)+“(CLIENT$=“ACME”)在實(shí)時(shí)運(yùn)行中,設(shè)置一個(gè)變量與變化表比較,知道應(yīng)用哪一個(gè)變化。變量使用lvrtem.var_check和變量在存儲器中的當(dāng)前狀態(tài)來設(shè)置。下面提供一個(gè)例子。在運(yùn)行實(shí)時(shí)給定COUNTRY$=“US”和CLIENT$=“ACME”,將建立下面實(shí)時(shí)運(yùn)行表lvrtem.varcurrent$=str(lvrtem.var_check$)針對變化表估計(jì)存儲器中的變量如下(COUNTRY$=“US”)-True用“1”代表(COUNTRY$=“CA”)-False用“0”代表(CLIENT$=“ACME”)-True用“1”代表給出下述實(shí)時(shí)運(yùn)行表lvrtem.varcurrent$=“101”此實(shí)時(shí)運(yùn)行表與每個(gè)存在lvrtem.var_table$中對此模型的每個(gè)表作比較。已經(jīng)知道,當(dāng)前時(shí)間表的長度是3個(gè)字符,所以變化表三個(gè)一組地檢測比較AND(lvrtem.var_table$,lvrtem.varcurrent$(1,3))是真,則在lvrtem.variations中的第一個(gè)變化(variant1)未被激活。比較AND(lvrtem.var_table$,lvrtem.varcurrent$(4,3)是假,則在lvrtem.variations中的第二個(gè)變化(variant2)未被激活。比較AND(lvrtem.var_table$,lvrtem.varcurrent$(7,3))是真,則在lvrtem.variation中的第三個(gè)變化(variant3)是活動的。在此例中,若在變化表lvrtem.var_table中的“1”與在實(shí)時(shí)運(yùn)行當(dāng)前變化表lvrtem.varcurrent中相應(yīng)位置的“1”相匹配,該變化認(rèn)為是活動的。術(shù)語“彈性數(shù)據(jù)庫”用于本文件中試圖涉及具有動態(tài)可擴(kuò)性的一類數(shù)據(jù)庫。在下面說明中使用傳統(tǒng)的文件和記錄的術(shù)語而不用關(guān)系數(shù)據(jù)庫的術(shù)語。下面敘述的彈性數(shù)據(jù)庫的實(shí)施例是提供那樣數(shù)據(jù)庫的一個(gè)方法的解釋性例子(但不限于此)。在該例中,一個(gè)彈性數(shù)據(jù)庫的庫記錄能擴(kuò)展使包括額外的字段,且每個(gè)庫記錄能具有不同的擴(kuò)展字段組。一個(gè)彈性數(shù)據(jù)庫包括一個(gè)傳統(tǒng)數(shù)據(jù)文件形式的庫文件。在傳統(tǒng)的數(shù)據(jù)庫中,庫文件中的所有記錄具有同樣數(shù)量的字段,且在整個(gè)記錄組中每個(gè)字段具有相同的特征。在彈性數(shù)據(jù)庫中,這被稱為庫記錄。對彈性數(shù)據(jù)庫一個(gè)庫文件和庫記錄的解釋性例子示于圖11之中。一個(gè)彈性數(shù)據(jù)庫的主要優(yōu)點(diǎn)是它能允許用額外的字段擴(kuò)展庫記錄,使每個(gè)庫記錄能有不同的擴(kuò)展字段組。這些擴(kuò)展字段組成“變化組(在下面詳細(xì)說明)以便于維護(hù)與使用。任何庫記錄可以具有0個(gè)或多個(gè)變化組加到其上。加到給定庫記錄的變化組表可以在不同條件下動態(tài)地改變,就如在庫記錄中的數(shù)據(jù)那樣。圖12提供了2個(gè)變化組定義的例子的圖示。庫文件和所有應(yīng)用到該庫文件的變化組的集合稱為“邏輯文件”(“Logicalfile”)。一旦庫文件在數(shù)據(jù)字典12(圖1)中被定義,變化組可以加到邏輯文件定義中。這可以通過數(shù)據(jù)字典的維護(hù)做到。圖13A、13B和13C示出定義新變化組的步驟。每個(gè)變化組由數(shù)據(jù)字典12賦予一個(gè)識別符。對于下面描述的在圖12中圖示的變化組識別符分別是“0001”和“0002”。每個(gè)變化組包括變化組所含的字段清單和每個(gè)那樣字段的屬性。此外,每個(gè)變化組可以具有一個(gè)與其相關(guān)的條件。此條件確定變化組應(yīng)用的庫記錄。若一個(gè)變化組沒有與其相關(guān)的條件,該變化組應(yīng)用到所有庫記錄。每個(gè)條件列出數(shù)據(jù)庫的一個(gè)字段表,它們每個(gè)必須包含一個(gè)值,對此值應(yīng)用變化組。例如,若庫記錄包含一個(gè)稱為“client”(“顧客”)的字段,變化組可以具有一個(gè)條件,它指出,僅當(dāng)字段“client”包含值“BENJAM”時(shí)應(yīng)用該變化組。圖11和圖12提供一個(gè)庫文件和變化組的例子。在圖11中,庫文件相應(yīng)于邏輯文件“sam_client”,此文件儲存顧客名和地址,通過參照數(shù)據(jù)源表名“sam_dbclrent”(相應(yīng)于圖3的數(shù)據(jù)庫表/文件126)訪問。該庫文件的庫記錄包括5個(gè)字段顧客、姓名、國家、街道和城市,每個(gè)具有自己的描述、類型和長度。圖12示出2個(gè)變化組的例子,相應(yīng)于且附屬于邏輯文件“sam_client”,如圖11中示出。第一個(gè)例子是變化組0001,它具有描述“CanadianInformation”(“加拿大信息”)。此變化組應(yīng)用的條件需要庫記錄字段名“Country”(“國家”)具有值“CA”---指出加拿大。在此條件下,庫記錄不僅包括圖11中列出的5個(gè)字段,還包括2個(gè)額外的字段“postal_cd”(6位數(shù)字的郵政編碼)和“province”(2個(gè)字符的省份碼)。換言之,此變化組應(yīng)用到所有滿足此條件的庫記錄,此條件附在變化組后面,并與其相關(guān)。圖12中變化組的第二個(gè)例子被識別為號0002,且具有描述“U.S.Information”(“美國信息”)。應(yīng)用到此變化組的條件是庫記錄字段名“country”(“國家”)具有庫記錄字段值“US”。若是這樣情況,則庫記錄擴(kuò)展到包括2個(gè)新字段“zip_code”(美國的zipcode,即郵政編碼)和州代碼(2字節(jié)的美國州代碼或縮寫)。此例說明了彈性數(shù)據(jù)庫在不同數(shù)據(jù)條件下擴(kuò)展建立新字段的能力。每個(gè)變化組的數(shù)據(jù)存入庫文件的伴隨文件中。這些伴隨文件由數(shù)據(jù)庫存取控制器24,30(圖1)被透明地維護(hù)(需要時(shí)創(chuàng)建)。每個(gè)伴隨文件的主鍵等同于庫文件的主鍵,因?yàn)閺娜魏螏煊涗浀綉?yīng)用到該庫記錄的每個(gè)變形組記錄存在一對一的關(guān)系。DBAC24,30使用一個(gè)稱為變化組實(shí)時(shí)運(yùn)行映射(VRTM)的小表來確定在實(shí)時(shí)運(yùn)行應(yīng)用哪些變化組。DBAC24,30實(shí)時(shí)運(yùn)行變化表與結(jié)合圖5的敘述,上面引入RTEM10模型變化實(shí)時(shí)運(yùn)行表具有同樣的結(jié)構(gòu)。在3個(gè)變化應(yīng)用到邏輯文件的地方,一個(gè)變化組實(shí)時(shí)運(yùn)行映射例子如下所示在此例中,所有估值碼是二進(jìn)制,其中只有一個(gè)數(shù)字為1。實(shí)時(shí)運(yùn)行表達(dá)式表如下(COUNTRY$=“US”+(COUNTRY$=“CA”)+(CLIGNT$=“ACME”)作為一個(gè)例子,假設(shè)下列數(shù)據(jù)保存在存儲器中庫記錄之后面CLIENT=“ACME”COUNTRY=“US”利用估值碼表(EvaluationCodeTable)對估值碼獲得一個(gè)現(xiàn)有的數(shù)據(jù),并將得到的估值碼插入實(shí)時(shí)運(yùn)行表達(dá)式表中(COUNTRY$=“US”)+(COUNTRY$=“CA”)+(CLIENT$=“ACME”)產(chǎn)生一個(gè)實(shí)時(shí)運(yùn)行估值碼“101”。為顯示實(shí)際的二進(jìn)制數(shù)學(xué)操作position1COUNTRY$=“US”是真,表示成“1”position2COUNTRY$=“CA”是假,表示成“0”給定結(jié)果“101”。當(dāng)表達(dá)式表中的一項(xiàng)不滿足--例如此處國家不是加拿大(CA)--估值碼為0。因?yàn)镃OUNTRY=“CA”的估值是第二條件,此條件的估值存入二進(jìn)制輸出的第二位置,101。最終的實(shí)時(shí)運(yùn)行估值碼與一個(gè)表進(jìn)行比較,證明一個(gè)估值碼和給出此碼的活動變化之間的對應(yīng)性。活動變化是在實(shí)時(shí)運(yùn)行估值碼同樣位置上具有1的變化。下面是那樣表的例子一個(gè)那樣表對應(yīng)一個(gè)邏輯文件。變化組可以是二種狀態(tài)之一活動或不活動。新建立的變化組是不活動的,直到明確地使其活動。當(dāng)一個(gè)變化組被激活,有關(guān)此變化組的信息加到VRTM,使DBAC24,30知道此變化組并在適當(dāng)時(shí)候使用它。當(dāng)一個(gè)變化組使得成為不活動,有關(guān)此變化組的信息從VRTM中除去,使DBAC24,30不再知道該變化組,因而對它不再做什么。下面一段信息存入VRTM1)條件字段表(CFL)涉及所有變化組條件的所有字段表。此表用于很快地產(chǎn)生一個(gè)包含涉及變化組條件所有字段的當(dāng)前值的字符串。產(chǎn)生的字符串稱為條件值字符串(ConditionValuesString-CVS)。2)條件組表(CGL)表示可能的數(shù)據(jù)值或圖案(pattern)的字符串組。在實(shí)時(shí)運(yùn)行時(shí),CVS轉(zhuǎn)而與每個(gè)圖案比較。若CVS與該圖案吻合,則在CGL中圖案的位置用作在變化組表中的索引(見下面)。3)變化組表(VGL)一個(gè)變化組號的組的表。檢查此表和與CVS吻合的CGL,給出一張應(yīng)用于當(dāng)前在存儲器內(nèi)的庫記錄的變化組表。VRTM也能包括其他的內(nèi)部處理和狀態(tài)信息。在DBAC24,30能對任何邏輯文件完成任何功能之前,它必須訪問數(shù)據(jù)字典12。DBAC24,30使用數(shù)據(jù)字典12的信息來尋找邏輯文件和它們的物理數(shù)據(jù)源。當(dāng)DBAC24,30被調(diào)出來完成對邏輯文件的請求時(shí),若數(shù)據(jù)字典12尚未打開,則DBAC24,30為此邏輯文件的模塊打開此數(shù)據(jù)字典12。一旦庫數(shù)據(jù)字典12被打開,DBAC24,30檢查一個(gè)變化登錄(variationregistry)和變化組實(shí)時(shí)運(yùn)行映射。上述打開數(shù)據(jù)字典的過程示于圖15之中。從彈性數(shù)據(jù)庫中讀出記錄的過程如下進(jìn)行在實(shí)時(shí)運(yùn)行中,DBAC24,30從庫文件中讀出庫記錄。一旦完成此事,就審視變化組實(shí)時(shí)運(yùn)行映射以決定應(yīng)用哪個(gè)變化組。圖16A和16B示出DBAC24,30用于此任務(wù)的步驟。若存在應(yīng)用的變化組,則對每個(gè)變化組從適當(dāng)?shù)陌殡S文件中讀出數(shù)據(jù)。若在適當(dāng)?shù)陌殡S文件中找不到記錄,則對該變化組的字段設(shè)成空字符(null)。這發(fā)生在變化組被加入以前已經(jīng)存在庫記錄的情況。因?yàn)閼?yīng)用到庫記錄的變化組當(dāng)庫記錄中的數(shù)據(jù)發(fā)生變化時(shí)可以動態(tài)改變,DBAC24,30返回給應(yīng)用軟件的不僅是庫記錄與變化組數(shù)據(jù),而且還有庫記錄中的字段表和變化組應(yīng)用情況信息。這就允許應(yīng)用軟件來確定在邏輯記錄中出現(xiàn)哪些字段,并當(dāng)需要時(shí)將該信息提供給操作員。寫記錄到彈性數(shù)據(jù)庫的過程是如下進(jìn)行根據(jù)圖16A和16B,在實(shí)時(shí)運(yùn)行中DBAC24,30審視變化組實(shí)時(shí)運(yùn)行映象,了解應(yīng)用哪個(gè)變化組。然后DBAC24,30將變化組數(shù)據(jù)寫入伴隨文件中,再將庫記錄寫入庫文件。若在記錄讀出時(shí)應(yīng)用的某些變化組在記錄重寫時(shí)不再應(yīng)用,則DBAC24,30將那些過時(shí)的變化組數(shù)據(jù)從適當(dāng)?shù)陌殡S文件中除去。在彈性數(shù)據(jù)庫中的一個(gè)記錄能用下列過程除去在運(yùn)行時(shí)間DBAC24,30讀出并鎖定要被除去的記錄,并根據(jù)圖16A和16B確定哪些(若有的話)變化組應(yīng)用到該庫記錄中。該變化組數(shù)據(jù)被除去,該庫記錄也被除去。一旦庫文件中數(shù)據(jù)字典12中被定義,變化組可以加到邏輯文件定義中。這可以通過數(shù)據(jù)字典12的維護(hù)來做。每個(gè)變化組由數(shù)據(jù)字典12分配一個(gè)識別符。每個(gè)變化組定義包含一個(gè)變化組包含的字段表,和伴隨的每個(gè)字段的屬性。在本發(fā)明的實(shí)施例中,參照圖13A,一個(gè)變化組可以根據(jù)過程560定義,后者從步驟562開始。首先在步驟564規(guī)定一個(gè)邏輯文件。變量組的描述在步驟566輸入,在步驟568輸入注釋。參照圖13B,在步驟570作一測試,以確定對該變化組是否需要規(guī)定一個(gè)條件。若需要,則對該條件檢測的庫記錄的字段在步驟572上輸入。且在步驟574輸入一個(gè)值到某字段,該字段是為了檢測條件的符合及應(yīng)用該變化組。在步驟574檢查是否存在更多的條件字段。若存在,處理過程返回到步驟572。否則,或者在步驟570不需要指定條件的情況,處理過程進(jìn)到圖13C中步驟578。在步驟578輸入字段信息到包括在當(dāng)前變化組的下一個(gè)字段。然后在步驟580作出判斷,是否包括有更多那樣的字段。若是,處理過程返回到步驟578。若不是,變化組定義在步驟582被儲存,過程560在步驟584結(jié)束。在DBAC24,30能對任何邏輯文件完成任何功能以前,它必須訪問數(shù)據(jù)字典12。DBAC24,30使用數(shù)據(jù)字典12信息尋找邏輯文件和它們的物理數(shù)據(jù)源。當(dāng)DBAC24,30被調(diào)用來完成對邏輯文件的請求時(shí),若數(shù)據(jù)字典尚未打開,則DBAC24,30將對該邏輯模塊打開數(shù)據(jù)字典。一旦庫字典被打開。如圖14所示DBAC12檢索變化登錄和實(shí)時(shí)運(yùn)行映象。參照過程600,如圖14所示在步驟602變化登錄文件在步驟604被打開。接著在步驟606作一檢查,是否存在那樣的文件。若是,過程600在步驟608打開變化實(shí)時(shí)運(yùn)行映象文件。然后在步驟610作一檢查,是否存在變化實(shí)時(shí)運(yùn)行映象文件。若是在步驟612設(shè)置一個(gè)標(biāo)志,指示對此模塊存在活動的變化。若在步驟606或步驟610檢查結(jié)果為否定,過程600在步驟614結(jié)束。在一個(gè)邏輯文件能讀寫訪問以前必須首先打開。當(dāng)一個(gè)邏輯文件被打開,如圖15所示DBAC24,30立即將對于該邏輯文件的變化組實(shí)時(shí)運(yùn)行映象加載到存儲器中。參照此圖,文件的打開能按照過程620從步驟622開始完成。在步驟624作出決定,是否對該邏輯文件存在任何活動變化。若是,在步驟626將與此邏輯文件相關(guān)的變化組實(shí)時(shí)運(yùn)行映象的記錄讀出。如在步驟628所確定,若找到一個(gè)記錄,則在步驟630對此文件的變化組實(shí)時(shí)運(yùn)行映象被存入存儲器。若在步驟628找不到記錄,或如果在步驟624找不到對此邏輯文件存在的活動的變化,處理過程在步驟632停止。在實(shí)時(shí)運(yùn)行中,DBAC24,30從庫文件中讀出庫記錄。一旦完成此操作,它審視變化組實(shí)時(shí)運(yùn)行映象以確定應(yīng)用哪個(gè)變化組。如下面所述,圖16A和16B示出DBAC用于完成此任務(wù)的步驟之例。若應(yīng)用任意的變化組,DBAC24,30對每個(gè)那樣的變化組從適當(dāng)?shù)陌殡S文件中讀出數(shù)據(jù)。若一個(gè)記錄在適當(dāng)?shù)匕殡S文件中未找到,對該變化組的字段設(shè)成空(null)。對于在變化組加入以前已經(jīng)存在庫記錄的情況就是這樣的。因?yàn)閼?yīng)用于一個(gè)庫記錄的變化組在庫記錄中的數(shù)據(jù)改變時(shí)可以動態(tài)地改變,DBAC24,30返回給應(yīng)用軟件的不僅是庫記錄和變化組數(shù)據(jù),而且有在庫記錄中的字段表和變化組應(yīng)用情況信息。這就允許應(yīng)用軟件確定在邏輯記錄中出現(xiàn)哪些字段,并將此信息需要時(shí)提供給操作員。在實(shí)時(shí)運(yùn)行中,DBAC24,30審視變化組實(shí)時(shí)運(yùn)行映象,了解要應(yīng)用那些變化組。如下所述,圖16A和16B提供該過程的一個(gè)例子。然后變化組數(shù)據(jù)寫到適當(dāng)?shù)陌殡S文件,且?guī)煊涗洈?shù)據(jù)寫入庫文件。當(dāng)記錄讀出時(shí)應(yīng)用的某些變化組如果在記錄重寫時(shí)不再應(yīng)用,則DBAC24,30將該過時(shí)的變化組數(shù)據(jù)從適當(dāng)?shù)陌殡S文件中除去。在實(shí)時(shí)運(yùn)行時(shí)DBAC24,30讀出并鎖定需除去的記錄,并決定哪些變化組(若有的話)應(yīng)用于該庫記錄,如圖16A及16B的例子中所說明。此變化組數(shù)據(jù)被除去,然后該庫記錄被除去?,F(xiàn)參照圖16A,說明以前的過程640的例子。在步驟642開始后,過程640在步驟644清除應(yīng)用的變化組表。接著,在步驟646從存儲器中取出對當(dāng)前文件的變化組實(shí)時(shí)運(yùn)行映象。若在步驟648找到對當(dāng)前文件的變化組實(shí)時(shí)運(yùn)行映象,則在步驟650對庫記錄產(chǎn)生一個(gè)CVS(當(dāng)前變化組)。CVS是條件的當(dāng)前實(shí)時(shí)運(yùn)行二進(jìn)制映象估值,該條件用于決定應(yīng)用什么變化。這類似于上述的lvrtem.varcurrent,但在此例中被稱為lvdbac.varcurrent。換言之,CVS是當(dāng)前數(shù)據(jù)的值,用于相對變化表進(jìn)行檢驗(yàn),了解當(dāng)前應(yīng)用什么變化。接著,在步驟652當(dāng)前CGL(條件組表)設(shè)到第一個(gè)CGL元素。CGL類似于上述lvrtem.var_table,在本例中稱為lvdbc.var_table.CVS與此表比較,了解應(yīng)用什么變化。參照圖16B,在步驟654在CVS和CGL的元素之間作出比較。若在步驟656中確定,比較是吻合的,則在步驟658,一個(gè)VGL(變化組表)元素被加到所應(yīng)用的變化的表中。若在步驟656中發(fā)現(xiàn)不吻合,則在步驟660作出檢驗(yàn),以確定是否有其他的CGL元素。若有,則在步驟662當(dāng)前CGL元素被設(shè)成下一個(gè)CGL元素,且處理過程回到步驟654。若在步驟660無其他CGL元素被找到,則處理過程在步驟664終止。若在圖16A中步驟648,未找到變化組實(shí)時(shí)運(yùn)行映象,則對此邏輯文件無當(dāng)前活動的變化。此時(shí),處理過程也在步驟664終止。結(jié)合圖1上述的超級工具包(Supertoolkit)有若干入口點(diǎn)。每一個(gè)入口點(diǎn)相當(dāng)于DBAC24,30提供的一個(gè)功能,和RTEM10調(diào)用DBAC24,30完成的功能。在一個(gè)實(shí)施例中,DBAC24,30有10個(gè)入口點(diǎn);每個(gè)入口點(diǎn)的例子的邏輯將依次敘述。功能READ(讀)READ1200從初始化1205與驗(yàn)證參數(shù)1208開始。READ然后查詢是否有別名(Alias)已經(jīng)打開1210。若別名已被打開,READ查詢當(dāng)前請求READ中的邏輯文件名是否與已經(jīng)以別名打開的邏輯文件名吻合1215。若是,READ繼續(xù);否則READ退出,指出故障1218。若發(fā)現(xiàn)別名尚未打開,READ打開文件,如有需要打開并讀數(shù)據(jù)字典12,1220。若打開成功,READ繼續(xù)1225;否則退出,指示故障1228。若請求RTEM10從環(huán)境數(shù)據(jù)建立該記錄的讀的主鍵1230,則從環(huán)境數(shù)據(jù)產(chǎn)生一個(gè)鍵1235,若產(chǎn)生鍵成功1240則READ繼續(xù)。若產(chǎn)生鍵失敗,READ退出指示故障1242。若在上面不請求RTEM10從環(huán)境數(shù)據(jù)建立該記錄的讀的主鍵1230,則READ簡單地繼續(xù)。除非它提前退出,READ隨后從盤中讀出庫記錄信息1245。若該記錄存在1250,READ繼續(xù)。若讀失敗,且其原因不是“沒有這樣的記錄”1260則READ退出,指示故障1262。若讀未失敗,它繼續(xù)。一個(gè)數(shù)據(jù)變化實(shí)時(shí)運(yùn)行映象被檢驗(yàn)1265,若存在應(yīng)用于該記錄的數(shù)據(jù)變化組1270,則該變化數(shù)據(jù)從盤中讀出1275。若不存在那樣的數(shù)據(jù)變化組,則READ繼續(xù)。若“nosuchrecord”(無那樣的記錄)指示器被設(shè)置1280,則READ繼續(xù);但是若不是,則READ從盤中讀出任何適當(dāng)二進(jìn)制大對象(binarylargeobject-“BLOB”或存儲器字段數(shù)據(jù)1285。當(dāng)此過程完成,READ退出1290,指出或者成功,或者“nosuchrecord”(無那樣記錄)。圖17A和17B以圖的形式表示上述的步驟。功能EXTRCT(提出)EXTRACT由初始化及驗(yàn)證參數(shù)1305,1308開始。EXTRACT然后詢問是否已有別名打開1310。若別名已打開,EXTRACT詢問,當(dāng)前對EXTRACT請求的邏輯文件名是否與在別名上已經(jīng)打開的邏輯文件名吻合1315。若是,EXTRACT繼續(xù);否則EXTRACT退出1318,指示故障。若發(fā)現(xiàn)別名尚未打開,EXTRACT打開文件且若有需要?jiǎng)t打開并讀數(shù)據(jù)字典12,1320。若打開成功,EXTRACT繼續(xù);否則退出1328,指出故障。若請求RTEM10從環(huán)境數(shù)據(jù)中建立該記錄的讀的主鍵1330,則一個(gè)鍵從環(huán)境數(shù)據(jù)中產(chǎn)生1335,且若該鍵產(chǎn)生成功1340,EXTRACT繼續(xù)。若該鍵產(chǎn)生不成功,則EXTRACT退出,指示故障1342。若在前面不要求RTEM10從環(huán)境數(shù)據(jù)建立該記錄的讀的主鍵1330,則EXTRACT直接繼續(xù)。除非提前退出,EXTRACT隨后從盤中讀出庫記錄信息1345。若該記錄存在1350,則EXTRACT繼續(xù);否則它設(shè)置“nosuchrecord”(無那樣的記錄)指示器1355并繼續(xù)。若讀失敗,其原因不是“nosuchrecord”1360,則EXTRACT退出,指示故障1362。若讀并未失敗,它繼續(xù)。檢驗(yàn)數(shù)據(jù)變化實(shí)時(shí)運(yùn)行映象1365,若存在應(yīng)用該記錄數(shù)據(jù)變化組1370,則從盤中讀出變化數(shù)據(jù)1375。若不存在那樣的數(shù)據(jù)變化組,則EXTRACT繼續(xù)。若已設(shè)置了“nosuchrecord”指示器1380,則EXTRACT繼續(xù);但是若未設(shè),則EXTRACT從盤中讀出適當(dāng)?shù)亩M(jìn)制大對象(“BLOB”)或存儲器字段數(shù)據(jù)1385。若此過程完成,EXTRACT退出1390,指示或者成功或者“nosuchrecord”。EXTRACT和READ操作的不同是EXTRACT為寫的目的鎖定數(shù)據(jù)。在多用戶應(yīng)用軟件中,同樣的數(shù)據(jù)可同時(shí)由多個(gè)操作所請求。為保護(hù)數(shù)據(jù)庫的崩潰,需更新的數(shù)據(jù)庫首先EXTRACTED(鎖定)。若當(dāng)EXTRACT請求發(fā)生時(shí)數(shù)據(jù)已被EXTRACTED,DBAC24,30在繼續(xù)處理過程以前等待數(shù)據(jù)成為未鎖定狀態(tài)。這可以在1秒以后再次試圖作出EXTRACT請求。顯示一個(gè)信息給操作員,警告此情況。操作員然后可以請求退出EXTRACT請求,送一個(gè)特殊結(jié)果碼返回給RTEM10。功能VERIFYKEY(驗(yàn)證鍵)VERIFYKEY由初始化及驗(yàn)證參數(shù)1405,1408開始。VERIFYKEY然后詢問是否已有別名打開1410。若別名已打開,VERIFYKEY詢問,當(dāng)前對VERIFYKEY請求的邏輯文件名是否與在別名上已經(jīng)打開的邏輯文件名吻合1415。若是,VERIFYKEY繼續(xù);否則VERIFYKEY退出1418,指示故障。若發(fā)現(xiàn)別名尚未打開,VERIFYKEY打開文件,且若有需要?jiǎng)t打開并讀數(shù)據(jù)字典12,1420。若打開成功,VERIFYKEY繼續(xù);否則退出1428,指示故障。若請求RTEM10從環(huán)境數(shù)據(jù)中建立該記錄的讀的主鍵1430,則一個(gè)鍵從環(huán)境數(shù)據(jù)中產(chǎn)生1435,且若該鍵產(chǎn)生成功1440,VERIFYKEY繼續(xù)。若該鍵產(chǎn)生不成功,則VERIFYKEY退出1442,指示故障。若在前面不尋求RTEM10建立記錄的主鍵而從環(huán)境數(shù)據(jù)讀出它,則VERIFYKEY直接繼續(xù)。除非提前退出,VERIFYKEY隨后帶此鍵從數(shù)據(jù)庫中讀1445。若記錄存在1450,VERIFYKEY繼續(xù);否則設(shè)置“nosuchrecord”指示器并繼續(xù)1460。功能GENERATEKEY(產(chǎn)生鍵)GENERATEKEY1500由初始化及驗(yàn)證參數(shù)1505,1508開始。GENERATEKEY然后詢問是否已有別名打開1510。若別名已打開,GENERATEKEY詢問,當(dāng)前對GENERATEKEY請求的邏輯文件名是否與在別名上已經(jīng)打開的邏輯文件名吻合1515。若是,GENERATEKEY繼續(xù);否則GENERATEKEY退出1518,指示故障。若發(fā)現(xiàn)別名尚未打開,GENERATEKEY打開文件,且若有需要?jiǎng)t打開并讀出數(shù)據(jù)字典12,1520。若打開成功1525,GENERATEKEY繼續(xù);否則它退出,指示故障1528。GENERATEKEY隨后從環(huán)境數(shù)據(jù)產(chǎn)生一個(gè)鍵1530。若鍵產(chǎn)生成功1535,則該功能退1540,指示成功。另外若鍵產(chǎn)生失敗,功能退出1545,指示故障。功能WRITE(寫)功能WRITE1600從初始化1605和參數(shù)驗(yàn)證1608開始。然后WRITE功能查詢是否有別名已被打開1610,若別名已被打開,WRITE功能查詢當(dāng)前請求WRITE功能中的邏輯文件名是否與已經(jīng)以別名打開的邏輯文件名吻合1615。若是,WRITE功能繼續(xù);否則WRITE功能退出,指示故障1618。若發(fā)現(xiàn)別名尚未打開,WRITE功能打開文件,若有必要打開并讀數(shù)據(jù)字典12,1620。若打開成功1625,WRITE功能繼續(xù);否則退出1628,指示故障。若請求RTEM10從環(huán)境數(shù)據(jù)建立該記錄的主鍵1630,WRITE功能試圖這樣做1635。若主鍵產(chǎn)生成功1640,則WRITE功能繼續(xù);否則退出,指示故障1642。但是如果RTEM10不請求從環(huán)境數(shù)據(jù)建立該記錄的主鍵,WRITE功能繼續(xù)。若存在一個(gè)非空主鍵1645,WRITE功能繼續(xù);否則退出1648,指示故障。假設(shè)WRITE功能繼續(xù),它在邏輯文件1650上設(shè)置寫鎖定1650。于是,如果在此別名上重寫當(dāng)前取出的記錄1655,WRITE功能繼續(xù)。若不是,檢驗(yàn)要寫的記錄是否已經(jīng)存在1660。若該記錄存在,WRITE功能釋放寫鎖定,退出并指示故障1665。若該記錄不存在,WRITE功能繼續(xù)。假設(shè)WRITE功能繼續(xù),它得到當(dāng)前應(yīng)用于現(xiàn)在記錄的擴(kuò)展表1670。它賦值給順序符(sequencer)字段1675,它將任何適當(dāng)?shù)腂LOB或Memo字段數(shù)據(jù)和任何適當(dāng)?shù)臄U(kuò)展組數(shù)據(jù)寫到盤中1680。WRITE功能還將庫記錄數(shù)據(jù)寫到盤上1685。然后,它校驗(yàn),是否有在取出記錄時(shí)應(yīng)用,而現(xiàn)在已不再應(yīng)用的擴(kuò)展1690。若有,WRITE功能將它們除去1692;否則它繼續(xù),清除寫鎖定并退出1695。功能REMOVE(除去)REMOVE功能1700從初始化1705和參數(shù)驗(yàn)證1708開始。然后REMOVE功能查詢是否有別名已被打開1710。若別名已被打開,REMOVE功能查詢當(dāng)前請求REMOVE功能中的邏輯文件名是否與已經(jīng)以別名打開的邏輯文件名吻合1715。若是,REMOVE功能繼續(xù);否則REMOVE功能退出1718,指示故障。若發(fā)現(xiàn)別名尚未打開,REMOVE功能打開文件,若有必要打開并讀數(shù)據(jù)字典12,1720。若打開成功1725,REMOVE功能繼續(xù);否則退出,指示故障1728。若請求RTEM10從環(huán)境數(shù)據(jù)建立該記錄的主鍵1730,REMOVE功能試圖這樣做1735。若主鍵產(chǎn)生成功1740,則REMOVE功能繼續(xù);否則退出,1742,指示故障。但是,如果RTEM10不請求從環(huán)境數(shù)據(jù)建立該記錄的主鍵,REMOVE功能繼續(xù)。假如REMOVE功能繼續(xù),它檢查是否除去當(dāng)前從現(xiàn)在的別名中取出的記錄1745。若是,REMOVE功能繼續(xù);但若不是,REMOVE功能取出庫記錄數(shù)據(jù)1750。若取出成功1755,則REMOVE功能繼續(xù)。否則退出,指示故障1758。假如REMOVE功能繼續(xù),它從盤中除去庫記錄數(shù)據(jù)1760,從盤中除去任何適當(dāng)?shù)臄U(kuò)展數(shù)據(jù)組數(shù)據(jù)1765,并從盤中除去任何適當(dāng)?shù)腂LOB或Memo數(shù)據(jù),然后退出1775。功能CLOSE(關(guān)閉)CLOSE功能1800在初始化1805和參數(shù)驗(yàn)證1808以后查詢,RTEM10是否請求關(guān)閉所有別名1810。若是,CLOSE功能取出所有別名的一個(gè)總表1815,否則帶著RTEM10提供的別名表繼續(xù)1820。對以前步驟中獲得的清單中的每個(gè)別名,CLOSE功能關(guān)閉庫記錄物理文件,關(guān)閉任何可應(yīng)用的擴(kuò)展組記錄文件,清除所有儲存的有關(guān)此別名的狀態(tài)信息1825且退出1830。指不成功。功能SHUTDOWN(停止)在初始化1855和參數(shù)驗(yàn)證1858以后,SHUTDOWN功能1850調(diào)用CLOSE功能1800且請求它關(guān)閉所有別名1860。SHUTDOWN功能隨即關(guān)閉所有打開的數(shù)據(jù)字典1865并清除所有緩沖的數(shù)據(jù)字典信息1870,和退出1875,指示成功。功能GETKEY(取鍵)GETKEY功能1900初始化1905和參數(shù)驗(yàn)證1908,并查詢別名是否已打開1910。若是,GETKEY功能查詢,在現(xiàn)在的別名上的最近的操作是否為成功的EXTRACT1915。若是,則GETKEY取出一當(dāng)前鍵1920。若不是,GETKEY取出下一個(gè)鍵1925。若取出下一鍵的試圖成功1930,則GETKEY退出1935,指示成功;否則,或若在此別名上的最近操作不理成功的取出,GETKEY退出1940,1942,指示故障。功能GETFIRSTKEY(取首鍵)GETFIRSTKEY功能1950在初始化和參數(shù)驗(yàn)證955,1958以后,查詢該別名是否已打開1960。若是,GETFIRSTKEY取出第一個(gè)鍵1965。若取出第一個(gè)鍵成功1970,則GETFIRSTKEY退出1975,指示成功;否則退出1980,指示故障。若發(fā)現(xiàn)該別名尚未打開,GETFIRSTKEY退出1985,指示錯(cuò)誤。若干其他功能,尤其是GETPREVIOUSKEY,GETCURRENTKEY,GETNEXTKEY,GETLASTKEY,其功能幾乎等同于GETFIRSTKEY功能,但差別在于它們返回的鍵。本發(fā)明的一個(gè)優(yōu)點(diǎn)是能與現(xiàn)存的傳統(tǒng)(Legacy)程序碼共同工作。“傳統(tǒng)”是在本發(fā)明的教導(dǎo)以前存在的應(yīng)用軟件,并且它必須作些修改,為了能在RTEM/Model環(huán)境下與使用本發(fā)明專門開發(fā)的模型一起運(yùn)行。為了修改傳統(tǒng)軟件,程序碼需轉(zhuǎn)換成可以為DBAC24,30所接受。為實(shí)現(xiàn)從傳統(tǒng)軟件到混合傳統(tǒng)軟件(帶有調(diào)用與RTEM10兼容的模型與方法的傳統(tǒng)軟件)的初始轉(zhuǎn)換,所有數(shù)據(jù)庫的訪問改變成鏈接到DBAC24,30。可用性的校驗(yàn)用調(diào)用“寫前文件元素可用性”(pre-writefile-elementvalidation)來替代,后者基于對數(shù)據(jù)字典12的字典段的預(yù)編譯數(shù)據(jù)總庫。寫入一個(gè)文件借助于使用由有效測試程序編譯的文件表的單個(gè)DBAC24,34訪問來完成。所有表示性輸入輸出轉(zhuǎn)換成使用UIO26。程序碼也轉(zhuǎn)換成使用數(shù)據(jù)字典12。文件使用信息(例如讀、寫、抽取或刪除的文件)放在數(shù)據(jù)字典12中。傳統(tǒng)程序碼中的變量重新定義成在數(shù)據(jù)字典12中使用的字符識別符,例如32(二進(jìn)制)位的識別符。參照到何處(例如程序/行)和如何(例如估值,打印(屏蔽值),級聯(lián)的,傳送的,變暗的,輸入,更新)。在傳統(tǒng)軟件轉(zhuǎn)換的過程中,只允許對傳統(tǒng)軟件作出錯(cuò)誤校正改變;不允許加上新的邏輯。對RTEM10可以使用的文件邏輯對象建立一個(gè)傳統(tǒng)軟件引擎(庫)。在從傳統(tǒng)軟件轉(zhuǎn)換到與RTEM10應(yīng)用的方法兼容的軟件期間建立的“過程對象”可以耦合到傳統(tǒng)程序碼來建立“混合傳統(tǒng)程序”。耦合通過使用“門-Gates”來實(shí)現(xiàn)。如上所述,門放在傳統(tǒng)軟件中在程序碼語句的間隙中,如上述與傳統(tǒng)軟件轉(zhuǎn)換過程相聯(lián)系。假定沒有新的邏輯可以加到傳統(tǒng)程序碼,按照本發(fā)明的實(shí)施例改變到涉及新邏輯的程序碼必須借助于插入門來調(diào)用,此門將使能或禁止那樣的新邏輯。新邏輯本身體現(xiàn)在模型和/或方法中。對格式化用于RTEM10的邏輯的條件門的一個(gè)例子是nnnnnDPCU-123456;perform“Getlist_of_active_Gates”;IFACTIVE_GATE>0THENPERFORM“Gate-Control”調(diào)用“Get_list_of_active_gates”將構(gòu)筑所有門的表(或“門控-gate_controlled”邏輯)這對當(dāng)前用戶有用;此估值將包括所有public(公共)和test(測試)對象,后者是該用戶登錄使用的。當(dāng)邏輯修改對生產(chǎn)是可接受時(shí),對象簡單地做成公共的;不需要對應(yīng)用軟件作改變。以前的方法允許混合傳統(tǒng)軟件在進(jìn)行中分析和“修改”。例如,用此方法,能對混合傳統(tǒng)軟件作出下列改變?!?shù)據(jù)字典12的修改,以實(shí)現(xiàn)固定;·能建立變量屏蔽表;·能完成2000年日期轉(zhuǎn)換;·能修改時(shí)間單位;·能替換舊的屏蔽;·潛在的疊印(例在修改的報(bào)告上)可以被提交。此外,可以做出下列混合傳統(tǒng)軟件修改1.輸入字段和它們相關(guān)的邏輯可以加入、忽視或默認(rèn),或者通過使用門,或者通過其他方法;2.新字段可以加到現(xiàn)有的文件記錄a.使用彈性數(shù)據(jù)庫能力(結(jié)合DBAC24,30的功能描);b.在現(xiàn)存文件記錄中的字段可被除去;例如過時(shí)的字段應(yīng)借助DBAC24,30默認(rèn)一個(gè)值,且不立即除去,而是在以后使用彈性數(shù)據(jù)庫的能力來除去。3.即使在使用條件調(diào)用的測試過程中可以加入新文件的讀、寫、抽取和其他操作(新文件定義作為新對象);和4.傳統(tǒng)邏輯可以使用正常的條件測試邏輯截?cái)?,使無效或忽視和轉(zhuǎn)移開。上面說明了用于軟件開發(fā)的方法、系統(tǒng)和數(shù)據(jù)結(jié)構(gòu)的一個(gè)實(shí)施例,它解釋了本發(fā)明的原則。本發(fā)明的其他方面、特征和優(yōu)點(diǎn)對那些熟悉本專業(yè)的人員是十分明確的。權(quán)利要求1.一個(gè)用于運(yùn)行應(yīng)用軟件的計(jì)算機(jī)執(zhí)行系統(tǒng),所述系統(tǒng)具有一個(gè)處理器,一個(gè)存儲器和一個(gè)存儲介質(zhì),所述系統(tǒng)包括儲存在存儲介質(zhì)中的多個(gè)模型,每個(gè)模型包含的數(shù)據(jù)中包括對一個(gè)或多個(gè)對象的參照;和一個(gè)實(shí)時(shí)運(yùn)行事件管理器,用于將從多個(gè)模型中選定的一個(gè)從存儲介質(zhì)加載到存儲器中,讀出所述所選模型的數(shù)據(jù),且當(dāng)讀入對一個(gè)對象的參照時(shí),調(diào)用并執(zhí)行所述對象。2.如權(quán)利要求1所述的計(jì)算機(jī)執(zhí)行系統(tǒng),其特征在于所述模型是按照登錄過程建立的一組模型的部分,且實(shí)時(shí)運(yùn)行事件管理器只能訪問按照登錄過程登錄的模型。3.如權(quán)利要求2所述的計(jì)算機(jī)執(zhí)行系統(tǒng),其特征在于,模型只有在不包含對能夠調(diào)用其他方法的方法的參照的情況才被登錄。4.如權(quán)利要求1所述的計(jì)算機(jī)執(zhí)行系統(tǒng),其特征在于所述模型包含a.形成規(guī)范的第一類模型;和b.第二類模型是規(guī)范模型的變種。5.如權(quán)利要求4所述的計(jì)算機(jī)執(zhí)行系統(tǒng),其特征在于,變種模型有一個(gè)或多個(gè)與其相關(guān)的條件,它們對于由實(shí)時(shí)運(yùn)行事件管理處理的變種模型是必須滿足的。6.如權(quán)利要求5所述的計(jì)算機(jī)執(zhí)行系統(tǒng),其特征在于,所述實(shí)時(shí)運(yùn)行事件管理器進(jìn)一步適應(yīng)于a.當(dāng)調(diào)用一個(gè)規(guī)范模型時(shí),檢驗(yàn)對所述規(guī)范模型是否存在變種模型;b.若存在一個(gè)變種模型,取出所述模型;c.檢驗(yàn)對所述取出的變種模型的條件是否存在;且d.若所述取出的變種模型的條件存在,處理所述變種模型。7.如權(quán)利要求6所述的計(jì)算機(jī)執(zhí)行系統(tǒng),其特征在于,所述實(shí)時(shí)運(yùn)行事件管理器適應(yīng)于重復(fù)步驟b-d,直至沒有更多的變種模型與規(guī)范模型有關(guān),并對于那些變種模型存在相關(guān)的條件。8.如權(quán)利要求1所述的計(jì)算機(jī)執(zhí)行系統(tǒng),其特征在于,所述實(shí)時(shí)運(yùn)行事件管理器適應(yīng)于在處理一個(gè)模型中的每個(gè)對象以后適應(yīng)于處理所述模型外部的作用。9.一種實(shí)時(shí)運(yùn)行事件管理器,借助于計(jì)算機(jī)執(zhí)行實(shí)現(xiàn)處理與指令相關(guān)的活動,處理在計(jì)算機(jī)外且通過外部輸入、輸出與計(jì)算機(jī)通信的事件的響應(yīng),所述計(jì)算機(jī)包括一個(gè)存儲介質(zhì),其中儲存一組對實(shí)時(shí)運(yùn)行事件管理器可以訪問的模型,管理器包含從模型庫中加載一個(gè)模型的裝置;給定計(jì)算機(jī)和實(shí)時(shí)運(yùn)行事件管理器的狀態(tài)確定一個(gè)加模型是否被適當(dāng)調(diào)用的裝置;和給定計(jì)算機(jī)和實(shí)時(shí)運(yùn)行事件管理器狀態(tài),若認(rèn)定模型是適當(dāng)?shù)膭t調(diào)用所述模型的裝置。10.如權(quán)利要求9所述的實(shí)時(shí)運(yùn)行事件管理器,其特征在于,執(zhí)行模型的方法包括在使一個(gè)模型的一個(gè)給定元素有效以前檢測和響應(yīng)外部的事件的方法。11.一個(gè)使用實(shí)時(shí)運(yùn)行事件管理器開發(fā)計(jì)算應(yīng)用軟件的方法,其特征在于包括下列步驟a.建立多個(gè)模型,每個(gè)包括至少下列中之一i.一個(gè)對模型的參照;ii.一個(gè)對方法的參照;iii.數(shù)據(jù);和iv.輸入或輸出指令;b.檢驗(yàn)所述模型,保證沒有由一個(gè)模型參照的方法能調(diào)用另外的方法;和c.登錄所述模型,使允許由所述實(shí)時(shí)運(yùn)行事件管理器來訪問。12.開發(fā)如權(quán)利要求1的計(jì)算機(jī)應(yīng)用軟件的方法,其特征在于所述步驟借助運(yùn)行一個(gè)實(shí)時(shí)運(yùn)行事件管理器結(jié)合一組模型來完成。13.在計(jì)算機(jī)應(yīng)用程序中使用且包含計(jì)算機(jī)可讀介質(zhì)中的一個(gè)軟件模型,包括一個(gè)模型識別碼;對軟件對象的多個(gè)參照;和數(shù)據(jù)。14.如權(quán)利要求13所述的軟件模型,其特征在于,對軟件對象的參照包括一個(gè)父對象和由前處理及后處理對象組成的組中選取的一個(gè)對象。15.如權(quán)利要求13所述的軟件模型,其特征在于,模型是一個(gè)規(guī)范模型的一個(gè)變種模型,它具有對軟件對象的一組參照,且在變種模型中參照的軟件對象不同于在規(guī)范模型中參照的對象。16.如權(quán)利要求15所述的軟件模型,其特征在于,僅當(dāng)一組條件滿足時(shí),模型可以由實(shí)時(shí)運(yùn)行事件管理器調(diào)用。17.建立一個(gè)為實(shí)時(shí)運(yùn)行事件管理器使用而登錄的對象的庫的方法,它包括步驟a.調(diào)用一個(gè)基于唯一模型識別符的對象;b.掃描所述對象的內(nèi)容,是否存在被限止的內(nèi)容;和c.僅當(dāng)一個(gè)對象不包含被限止的內(nèi)容,登錄所述對象作為所述庫的部分。18.如權(quán)利要求17所述的方法,其特征在于,受限止的內(nèi)容包括在一個(gè)對象中對一個(gè)尚未登錄對象的參照。19.如權(quán)利要求17所述的方法,其特征在于,受限止的內(nèi)容包括對一個(gè)方法對象的參照,該方法對象又包括對另一個(gè)方法對象的參照。20.一個(gè)計(jì)算機(jī)執(zhí)行數(shù)據(jù)庫系統(tǒng),所述系統(tǒng)具有一個(gè)處理器,一個(gè)存儲器,和一個(gè)存儲介質(zhì),所述系統(tǒng)包含一個(gè)存在存儲介質(zhì)中的庫文件,所述庫文件包含多個(gè)庫記錄,每個(gè)庫記錄具有一個(gè)或多個(gè)字段;對應(yīng)于所述庫文件至少有一個(gè)變化組存在存儲介質(zhì)中;和所述編程的系統(tǒng)實(shí)現(xiàn)一變化組實(shí)時(shí)運(yùn)行映象,適用于確定應(yīng)用哪個(gè)變化組到特定的庫記錄中。21.如權(quán)利要求20所述的計(jì)算機(jī)執(zhí)行數(shù)據(jù)庫系統(tǒng),其特征在于,所述變化組有一個(gè)或多個(gè)相關(guān)的條件,為了變化組應(yīng)用到特殊的庫記錄,這些條件必須滿足。22.如權(quán)利要求21所述的計(jì)算機(jī)執(zhí)行數(shù)據(jù)庫系統(tǒng),其特征在于變化組實(shí)時(shí)運(yùn)行映象包括一個(gè)條件字段表,一個(gè)條件組表,和一個(gè)變化組表。23.一個(gè)運(yùn)行數(shù)據(jù)庫的方法包括步驟a.從庫文件加載一個(gè)具有一個(gè)或多個(gè)字段的庫記錄;b.檢驗(yàn)一個(gè)變化組實(shí)時(shí)運(yùn)行映象,是否存在相應(yīng)于所述庫文件的變化組;和c.若一個(gè)變化組存在,從所述變化組取出數(shù)據(jù)。24.運(yùn)行權(quán)利要求23的一個(gè)數(shù)據(jù)庫系統(tǒng)的方法,其特征在于,從變化組中取出數(shù)據(jù)的步驟進(jìn)一步包含步驟檢測是否存在對所述變化組的條件;和若對所述取出的變化組的所述條件存在且滿足,從應(yīng)用到庫記錄的所述變化組中取出數(shù)據(jù)。全文摘要對軟件開發(fā)和執(zhí)行的一個(gè)方法、系統(tǒng)和數(shù)據(jù)結(jié)構(gòu)包括一個(gè)實(shí)時(shí)事件管理器和一組模型。一個(gè)模型是一類數(shù)據(jù)結(jié)構(gòu),它們不包含程序碼,而是一個(gè)有序的參照組,參照其他模型、方法或其他對象。一旦滿足一組條件,將模型登錄,它們就能被實(shí)時(shí)事件管理器訪問。在本發(fā)明的一個(gè)實(shí)施例中,實(shí)時(shí)事件管理器是一個(gè)用程序代碼執(zhí)行的調(diào)入-執(zhí)行循環(huán),它在每個(gè)循環(huán)中操作一組模型,校驗(yàn)外部輸入/輸出狀態(tài),且在這種條件下可以處理不同的或變種的模型,而不是具有默認(rèn)條件的標(biāo)準(zhǔn)的或規(guī)范的模型。且按本發(fā)明可以實(shí)現(xiàn)一個(gè)彈性數(shù)據(jù)庫,以允許動態(tài)地?cái)U(kuò)展數(shù)據(jù)庫的功能。文檔編號G06F9/46GK1240522SQ97180597公開日2000年1月5日申請日期1997年12月12日優(yōu)先權(quán)日1996年12月13日發(fā)明者W·馬韋,F·麥格克,J·貝內(nèi)特,M·克拉克申請人:馬維斯國際軟件股份有限公司