新四季網

適配演進的計算機軟體產品的製作方法

2023-10-08 12:35:39 2

專利名稱:適配演進的計算機軟體產品的製作方法
技術領域:
本發明涉及一種使電腦程式產品自動適配於環境的方法、自動適配的電腦程式產品,和用於製造所述自動適配的電腦程式產品的方法。
本發明基於優先權申請,歐洲專利05106615.7,在此將其引入作為參考。
背景技術:
在早期計算的原始設置中,程序複雜度很小,以至於一個人的思想就能完全包括整個程序的活動,直到最小的細節。現在,儘管計算機的能力已經以持續的幾何級數增加,然而人的能力卻沒有進展。為了從技術進步中獲益,必須開發並使用更抽象的概念工具和程式語言。
儘管單個程式設計師可以做出很大貢獻,然而複雜度級別已經遠遠超出一個人可以構思整個程序的範圍,這個程序能夠充分利用現有計算機。因此開發交換、協作、積累、構造的方法以精心製作複雜的程序非常重要;這是軟體工程的領域。
在2001年10月中期,IBM發布了聲明,指出管理當今計算系統的困難超過了單個軟體環境的管理。將幾個異構環境集成到公司範圍的(corporate-wide)計算系統中的需要、以及超過公司邊界而將其擴展到網際網路的需要,引入了新的複雜度級別。計算系統的複雜度似乎接近人的能力的限制,然而朝向增加的互連通性和集成的步伐,毫不減弱地快速前進。
在2003年1月IEE Computer Society發表的Jeffrey O.Kephart和David M.Chess的論文「The Vision of Autonomic Computing」中,建議創建根據管理者目標管理自身的系統。如新的細胞在生物系統中建立自身一樣不費力地集成新的組件。自動計算系統的本質是自管理,其意圖是從系統操作和維護的細節中解放系統管理者,並為用戶提供以最高性能運行的機器。如它們的生物學的同名物,在面對改變組件、工作量、要求和額外條件時,以及在面對無意或惡意的硬體或軟體故障時,自動系統將維護並調節它們的操作。
自動系統可以持續監控它自己的使用,並且檢查組件升級。如果它認為升級的公開性能(advertised feature)是值得的,則系統將安裝它們,如果必要就重新配置自身,並且運行回歸測試,以確保一切正常。當它檢測到錯誤時,系統將回到較舊的版本,同時其自動問題確定算法試圖隔離錯誤源。作者引用了自管理的四個方面表1

例如在普遍計算中發現的多個應用情景具有一個共同方面軟體將面臨持續改變的執行環境。為了保證無縫服務,協議、結構和應用必須能夠適配於在例如網絡、系統配置、可用資源、變化的策略中的改變。換言之,適配必須是任何移動軟體系統的關鍵性能。
通過用於使電腦程式產品自動適配於環境的方法,解決了自動計算的顯示(vision)以及去除後天的功能和結構需求的問題。
電腦程式通常包括可執行部分和數據部分,所述使電腦程式產品自動適配於環境的方法包括以下步驟針對環境配置電腦程式產品,並且在該環境中執行軟體,其中在程序內部觀測執行的效果(effect),即行為本身,即可執行部分;利用軟體分析被觀測效果的相互關係,並基於規則修改可執行部分以減小不期望的效果。
通過一種自動適配於環境的電腦程式產品而達到所述目的,所述電腦程式產品包括可執行部分和數據部分,所述電腦程式產品包括針對環境配置電腦程式產品以在該環境中執行該電腦程式產品的配置裝置,其中所述電腦程式產品包括觀測裝置,其用於觀測執行的效果,即可執行部分的行為;推斷裝置,其用於利用所述電腦程式產品來分析被觀測效果的相互關係;以及重新構造裝置,其用於基於規則修改可執行部分以減小不期望的效果。
通過一種製造這種自動適配的電腦程式產品的方法而達到所述目的,所述方法包括以下步驟通過集成用於觀測執行的效果(即可執行部分的行為)的觀測裝置,來配置(furnishing)所述可執行部分;通過用於利用軟體分析觀測效果的相互關係的推斷裝置,來配置所述可執行部分;以及通過用於基於規則而修改可執行部分以減小不期望的效果的重新構造裝置,來配置所述可執行部分。
換言之,建議用這樣的設計來替換通常的靜態軟體設計通過應用程式轉換技術、解釋器、抽象(虛擬)機、編譯技術、智能代理技術和高階編程來允許演進的需求,其中該靜態軟體設計不適合例如每天改變的環境中的普遍計算。例如代理(個體、自主服務,即獨立的軟體片段)的適配、修改和重新構造,使其能夠在演進(改變)的需求的環境中運行。應當指出,在本上下文中,配置和適配以及修改這些詞語變為同義詞。

發明內容
基本思想是變形(morphing)能力,這是指動態修改其運行時間的能力。變形(或演進)是一種實際效果,其中個體(實例、代理)的集合涉及執行特定的任務,訓練它們自己來增強它們解決任務的能力。
本發明也是一種優選地作為計算機軟體而被實現的製造方法,以及一種具有系統結構的計算機軟體產品,其中組件或部分被看作是自組織的獨立實體,該實體重新構造通過內部觀測的外部交互所激勵的自身。因此,計算機軟體產品包括可觀測且演進的組件用於觀測行為並改變自己。
這具有這樣的優勢產品是自演進的軟體。所述製造方法實現了改進的有效快速的原型化(prototyping)。產品本身能夠動態適配於改變的環境和需求。這導致針對必要適配和修改的開發工作的減少,並且提高了開發速度。所述技術允許創建自修復的軟體。通常的開發過程被簡化並且變得更具交互性和迭代性。最後一項要點是,動態演進的軟體組件將加速軟體和聯網技術,例如作為語義網絡的基礎,這是因為在代理團體中存在遺漏的技術,即除了對特定功能性的請求的刪除之外,該功能性到請求實體的實際轉移。本發明也適於自動減小軟體熵,這產生了改進的軟體設計。以變形環境和計算資源為代價,通過應用本發明可以達到所有所述及許多其它優勢。
下面將通過比較傳統應用的技術和根據本發明的方法來實現本發明的目的,以及它們的應用在根據本發明的計算機軟體產品中導致怎樣的結果。


圖1概略地示出了根據現有技術和根據本發明的製造方法;圖2示出了迭代製造過程的不同階段的工作;圖3概略地示出了根據本發明的計算機軟體產品的粗結構;圖4概略地示出了說明根據本發明方法的粗結構的組件的協作;
圖5概略地示出了演進歷史。
具體實施例方式
通常計算機軟體產品包括兩個部分用於存儲並呈現信息的數據部分,和執行功能狀態。在通常的程式語言中,這些例如呈現為變量值。目前,數據部分通常是基於數據類型、對象以及甚至是資料庫,該資料庫能夠使對象持續。更高級的程序語言以及特別是非命令式語言,如ProLog或LISP,模糊了這兩部分的隔離。然而,在有助於存儲狀態的部分(即特定的程序配置)和有助於被評估(執行的另一個術語)時改變這些狀態的部分之間進行區分幾乎是可能的,參見例如任何種類的正式語義描述,如可操作語義、邏輯語義或甚至是聲明語義。
例如代碼轉換,以及高階編程或自修改代碼的任何應用,在這個定義中是例外的情況,所述轉換似乎是可執行部分,並且所述代碼是數據部分,儘管代碼是可執行的。所述部分的定義具有這樣的上下文部分實際上被執行,即從可操作語義角度來說能夠改變(抽象的)機器配置。模型在下面被簡化並且被理解為操作,能夠改變機器狀態的代碼部分,數據部分。簡單來說操作導致在狀態變化時變得明顯的動作。
自修改代碼稱為軟體片段,它通過在進行時重寫自身來達到它的目的。目前,這普遍被認為非常有害且嚴峻的,但是它通常是編程者工具箱中一種極佳的手段。
圖1在左邊示出了示例性迭代軟體創建過程。其開始於初始規劃1,接著是需求分析2和設計3,即或多或少將所需功能性轉換為體系結構描述。可以在4實現結果,即就編程環境再形成所述結果,這導致可以在5對照需求而被測試的實現,即對照預期功能性。最終在6分析並評估差異,其導致額外的需求。另一個循環開始。最終,當如此完成需求的覆蓋時,在7部署軟體產品,即針對可以被看作是從創建階段P1向可操作階段P2轉變的操作來分配該軟體產品。
在如問題陳述中所指出的可操作階段P2中,通常出現其它需求,而另外幾個需求消失。假設軟體產品自身能夠建立其它迭代以適配於改變的需求,過程繼續進行到另一個需求分析8,然後是重新設計9,以及重新實現10。可以在11針對測試和度量來執行這個重新實現,並且如果在覆蓋額外需求時成功進行了修改,則最終在12進行評估。顯然,所述過程也是迭代的,這產生了演進的軟體產品。所述重新實現是軟體產品的版本,並且為了實現演進跟蹤並反向追蹤演進,使重新實現持續是優選的,即凍結中間部署13。
構建軟體的任何過程的中心是程序編碼。為了增強這些過程,將程式設計師從所有重複且概念上冗餘的動作中解放出來,以使程式設計師可以專注於編程的本質,即關注沒有被解決的問題。
讀取、轉換或寫其它程序的編程領域的理論,包括概念函數式編程、宏編程,自然地出現在軟體開發鏈中,其中它扮演了很重要的角色,它僅是編譯器、解釋器、調試器的形式。然而,元編程(meta-programming)從未被集成到開發過程中,並且獲得其角色的感知(即軟體內部的可觀測屬性)是這個領域中的一個進步。
添加(編程)對象的正交持續(orthogonal persistence)是另一個進步。開發凍結13強制所述正交持續,其中該正交持續是一種其中對象持續直到不再被需要的屬性,利用動態優化代碼的自動一致性管理的程序二進位碼的編譯和管理,利用結構驅動的用戶連接的用戶接口驅動的編程,利用隱式自動分發的顯式人工聯網。
可操作階段需要元編程。元編程是操縱程序的活動性,其反過來操縱程序。所述階段也需要反映(reflection)。反映是系統充分認識自己的能力,從而動態元編程它們自己的行為、使它們自己適配於改變的環境、並將程式設計師和管理員從當前需要人工完成的許多任務中解放出來。
反映允許系統結構的動態擴展、如果沒有反映,則必須重新構造新的系統,並且例如每次結構改變時重新啟動。
在技術的級別,以上內容都意味著服務的中斷、服務的不可靠、服務的拒絕和進展的未知;但是在社會心理的級別,反映的缺乏也意味著人們必須進行不可逆轉的靜態結構選擇,並且不考慮結構改變。反映是一種技術優勢,但是也是一種社會心理的需求,其允許通過演進概念結構而不管歷史選擇的個體進展,以及通過統一用戶情況而不管個體和非共享背景的多樣性的團體進展。
實際挑戰是構建這樣的系統可以一致地調整單獨開發的性能,其中每個性能關於其它性能而處理計算的不同方面。如LISP的高級程式語言能夠表達邏輯推理(包括商數)和計算反映二者,即能夠指定、實現並任意檢驗分離軟體組件之間複雜的後天關係。
圖3示出了粗結構,其能夠解決元編程和反映。作為通常開發的軟體產品,假設程序P由觀測器O來觀測,這由程序P和觀測器O之間的箭頭表示。觀測器具有一種對執行程序時所發生事情的警覺或感知。只要觀測匹配於元編程規則,就從觀測器O觸發效應器E以重新構造程序P。這個通用結構和通用協作實現了自修改代碼的顯示。
圖4精煉了所述結構。程序P包括可執行部分EX,其被配置(intrumented)用於由構成觀測器O一部分的測量組件ME所執行的測量。例如通過比較識別器RE處的重構試探法(re-factoring heuristics)和所述測量,來評估該測量。當指示重構時,觸發作為效應器E一部分的重構部件,來重新構造例如代碼CO,可以從該代碼得出新的可執行部分。重構部件可以記錄它的動作,並且使得舊的和新的版次(revision)持續,其是由版次管理部件RM來管理的。
下面示例性地概述了如何配置LISP程序P以示出觀測器O的可行性。所述技術的創新在於僅在可觀測軟體屬性上限制了觀測器,並且沒有試圖觀測軟體如何適合於軟體環境。
將所述技術轉換到如邏輯編程的另一編程範例十分直觀,以例如使用以謂語構建的「再斷言」來重新構造邏輯程序並通過添加合適的約束變量給ProLog中的謂語來配置從句。在代表面向對象的編程範例的Smalltalk中,配置(instrumentation)可以被集成到開發環境或對象元類中。
在LISP中,定義操作符適於配置LISP代碼,例如通過觀測作為軟體屬性的數據部分,其在所述例子中是LISP變量的觀測。
表10

DEFVAR類具有對變量的示例屬性建模的幾個槽(slot),以及修改這些標記的幾個方法,即維護所述描述對象的一致性。
表11

通過宏defvar*增強編程環境,其在定義變量時創建描述對象。
典型地,變量的一致重命名,關於是否正確初始化變量的檢測,或變量的使用,是難於處理的。這個相當原始的觀測器能夠應付所述困難,並且允許例如通過(morph-var-statistic『x』value)來探索(explore)變量的初始值。
觀測器DEFVAR類是能夠存儲變量屬性的數據結構,所述屬性例如它們的位置、它們的使用、值-通常是所有內在的可觀測屬性,甚至是變量之間的關係。
當定義變量時通過配置觀測器的宏defvar*來擴展語言本身。觀測在通過下一個代碼引用(excerpt)所示例性示出的函數之間的關係是很困難的。
為了實現動態、適配的軟體系統,擴展程式語言來支持反映;這稱作感知。其包括對行為的動態修改的支持,即自修改代碼,或易變的元對象協議。LISP中的宏似乎是進行上述操作的適當工具。
DEFUN類對defun所定義的函數進行建模。DEFUN類的實例「知道」其依據語法的形式(名稱、籤名、主體...),其文件位置。此外,觸發所述函數的函數名稱,和由該函數觸發的函數名稱,作為關係的例子。任何時候用宏defun*定義函數,所述類的實例被創建並被插入類-變量函數列表的協議。在程序開發期間,所述類的實例獲取關於它們自己的知識,並提供信息給「感知「層,以支持關於當前程序結構的推理。以下作為例子而說明了應用。
表12








感知類對函數的觀測屬性進行建模,即角色,與其它部分的關係,和軟體中的角色,例如調用方、被調用方和調用數目等。為了探索所述觀測器的能力,建議在LISP執行環境中測試所述代碼。
表13



這說明可以配置程序以測量可觀測的執行事件,並且基於編程環境內的測量,動態推導在程序部分之間的可觀測(相互)關係,例如調用方函數、被調用方函數、調用的數量、變量的使用等。顯然,在上述例子中,最好使用FIB的可存儲版本,這是因為對於所有調用,耗用的時間似乎更短,即(fib 19)0.125s,(fib 30)23.72s。
本發明的下一部分是能夠控制代碼修改的觀測器O的功能性。
表14

顯然,存在這樣的實例其具有gensym#DEFUN-CLASS 206A1B84,它承載了如由上述檢查所說明的編程邏輯。其可以被命令以改變代碼為存儲版本。
表15

結果是現在當前版本的通常評估和存儲版本之間的時差為0s。
程式語言上的每個FAQ包括代碼改進建議的較大集合;存在許多關於代碼優化和構建技術的書籍,例如參見在1993年8月的Lisp users andVendors conference出版的Peter Norvig和Kent Pitman的「Tutorial onGood LISP programming Style」中好的和不好的編程例子;這可以從http//www.iiia.csic.es/~puyol/TAPIA/transpas/Norvig-luv-slides.pdf下載。
函數預留代碼修改的例子例如是動態編程,即為了重新使用而存儲函數結果。這需要多數情況下是統一的軟體的數據部分適配。這意味著要存儲的結果應當滿足以下所有標準函數的返回值不應該從調用到調用改變,函數不應具有副作用,並且函數不應使用易變的自變量(argument)。顯然,存儲每次調用時都會改變的函數是無用的。同樣,不存儲具有故意副作用的函數是重要的(以某種方式更新狀態的函數-這是可觀測的屬性,並且可以由上述觀測器技術來統計地檢測),這是因為針對後續調用不會重複副作用。存儲具有易變自變量的函數是危險的,這是由於相同原因,即存儲易變的類在散列表中是危險的。如果利用自變量調用存儲函數一次,使自變量對象轉變,則第二次調用函數,存儲器可能將其看作是緩存命中(cache hit)並且不重新計算所述值。簡言之,可能返回錯誤值。不幸的是,判斷代碼是否可以受益於存儲的唯一方式是對它進行概要(profile),即,令觀測器確定函數是否可以存儲。
通常(如上所示的)稱作存儲的這個技術,允許「記住」先前調用的函數,如果利用與先前執行完全相同的自變量而進行調用則返回先前計算的值(而不是重新計算)。「自動」存儲是指現有函數可以被轉換為存儲函數,而無需針對函數自身進行代碼中的任何改變。如果計算在程序執行的各個點上被重複,則這可以導致巨大的加速,同時仍對代碼的用戶保留一定程度的透明。至少存在四種存儲的基本應用。函數調用內的重複下面所說明的這個情況是當單個例程超過需要地調用一些子例程時(或遞歸地調用其本身)時,這導致額外的計算。通過存儲,利用動態編程的效應,這些結果立即被返回用於後續的調用。實際上,所述第一種情況可以被認為是用於自動動態編程的工具,但是無需以正確的順序構建子片段(sub-piece)。這通常會將指數算法的時間縮減至多項式或甚至線性時間。給定足夠的考慮,這可以通過以下操作而無需自動存儲便利(facility)地被解決以適當順序構建子片段,或維護專用本地數據結構以保留結果。自動進行所述操作的優勢在於如果已經測試了簡單算法則需要較少的調試和測試,本發明允許運行時來回地改變,這更加透明,並且簡單容易地使用。時間上的重複第二種情況針對時間上重複的、但是從程序中的離散位置的函數的調用,或甚至當用戶在交互式程序中重複地取消(revoke)時。這通常通過常數因子而產生了加速,但是所述因子可能較大。無需自動存儲便利,僅有的可選方案是維護專用全局數據結構,這需要測試和調試,以及針對最多與存儲一樣有效的事情的許多額外工作。離線(off-line)運行第三種情況是當函數太複雜,以致於執行離線計算並為稍後的會話保留結果需要一定的付出(pay-off)。自動存儲便利提供了簡單透明的方法來保留結果,並且在稍後的會話中將所述結果自動關聯於函數。定時和概要最後的情況是當在傳統的性能概要和優化中將存儲用作工具時。觀測器可以提供某種度量(metering)系統,並且這可以用於主要測試實例。通過使用存儲時間或利用存儲,用戶可以存儲正討論的例程,然後多次運行相同的測試實例。如果相同的測試實例在第二存儲運行期間運行僅快了5%,則這表明正討論的例程中沒有存儲會在測試實例的性能中產生多於5%的差異,並且這可能不是開始優化工作的位置。
存儲僅對於作為真函數(true function)的例程有意義,而不是過程。即,輸出必須完全由輸入所確定,並且全局變量上不存在內在相關性,或其它副作用。如果存儲函數返回稍後被破壞地修改的值,則隨後期望初始值的調用替代地得到被修改值。例如,一種用於在列表上執行破壞操作(nconc,指定位置上的setf,sort等)的憑經驗規則(rule of thumb)是,僅當列表是最近被構造(cons)時才是安全的即,你可以保證為你提供列表的函數已經構建了它,並且因此它不與別處使用的列表共享結構。然而,如果構建列表的函數被存儲,則不再重新構造所述列表,並且破壞操作可能導致發生問題。存儲使用EQUAL來比較當前自變量列表與以前的列表。如果自變量列表包含一些條目,其中僅EQUALP可以識別兩個不同對象具有相同的內部值,則可能產生不適當的重複。SAVE-MEMO-TABLE代碼取決於具有READ可以再次解釋的對象的列印表示。這對於列表、符號、數字和字符串是正確的,但是對於數組、散列表、CLOS實例等是不正確的。在一些所述情況下,可以定義客戶列印函數,但是通常在可以在要保存到磁碟的存儲函數中的值類型(輸入或輸出)上有所限制。
默認地使用EQUAL,通過在自變量列表上進行準確匹配來執行存儲。類似地,當自變量是浮點數時一個人可以具有違反直覺的結果,例如忘記2不等於2.0,1.234567不等於1.23456等,即使你的函數可能等同地對待它們。在多數情況下,存儲是時間和存儲器的折衷。在極端情況下,其中頻繁重複的函數生成了較大的結構,存儲可能實際上節省了存儲空間(沒有無用信息),但是在大多數情況下,犧牲空間以獲得速度。應當仔細評估這些折衷,這通過使用觀測器來了解函數實際重複的頻率,WITH-MEMORIZATION和MEMORIZED-TIME(針對存儲和未存儲版本二者報告時間和空間)。幸運地,所有這些屬性都是可觀測的,例如通過簡單地模擬存儲和未存儲的函數的測試實例集合。可以在例如Proceedings of the Sixth International Symposium on Artificial Intelligence中Marty Hall和James Mayfield的「Improving Performance of AISoftware」中找到有關存儲的其它細節。
然而,將存儲包裝(memorizing wrapper)應用於現有代碼十分容易,並且重要的是,這正如去除包裝一樣容易。這意味著以下簡單的優化策略(半)自動地選擇作為存儲候選的函數。添加存儲包裝到函數。觀察函數(和整個系統)的行為。如果性能提升很小或沒有性能提升,則去除存儲包裝。用新的(存儲)代碼(真正變形)來替代函數。理想地,由於僅可以確定添加是值得的,因此可以分析自動添加存儲對整個系統的影響。一些方法即使本身計算上很複雜,也可能沒有受益於被存儲,例如簡單地由於從來不超過一次地利用相同自變量調用所述方法。
通過應用所述技術,觀測器例如可以觸發所述宏的應用,如果存在許多重複計算的、複雜的、例如時間上複雜的函數調用。不像在上述代碼片段中,執行能夠動態適配自身以記住函數調用,不僅是統一的,即針對所有調用,而是取決於實際執行。
例如,假設如貨幣轉換的簡單應用,假設還有兩個不同的用戶配置,第一配置是商店中價格的重複轉換。由於重複而存儲所述價格集合以及所述轉換。第二配置可能是旅行者的偶爾使用。在所述配置中,不太可能發生重複。因此幾乎沒有要存儲的。針對更複雜的轉換,例如速度識別器或用戶接口的任何反應行為,類似的自變量支持不同使用配置的使用。通常,重複的輸入序列可以通過應用所述方法來被存儲,並且大大增加反應和處理速度。
另一個功能上不等同的十分簡單的重構策略是動態代碼減少。只要觀測器識別到在很長的操作時間內沒有調用方法,則可以移除這個操作的代碼。結果是所述代碼修改產生了更小的代碼大小,以及更短的啟動時間,代價是只要偶爾使用函數就要進行版次反向跟蹤。動態識別並消除無用代碼。應當指出,在創建階段P1不能執行所述優化,這是因為針對任何執行,代碼是無用的還是有效的是個不確定問題。
在實際應用情景中,軟體清除未使用的組件,例如可以移除字處理器中長期未使用的專用格式化組件,而不會影響有效(實際使用)的功能性。
例如在William F.Opdyke的論文「Refactoring Object-orientedFrameworks」中,可以找到具有針對程序轉換的自動應用和應用的指示的、保守的重構策略的較大集合。
硬編碼的行為將為表達為高級目的的行為讓步,例如「最大化這個有用(utility)函數」,或「發現著名的消息轉換服務」。元素之中的硬布線(Hardwired)連接將為逐漸不直接的元素合作方的規範讓步-從物理地址的規範到名稱的規範,以及最終到函數的規範,其中合作方的身份僅在被需要時才被解決。硬布線關係將發展成通過協商建立的靈活關係。元素將無需人工幹預地自動處理新的故障模式,例如提供商違反合同。
根據本發明的方法非常適用於面向服務的體系結構概念,例如web和grid服務或軟體代理。通過將自主元素看作代理並且將自主系統看作多代理系統,應當清楚,面向代理的體系結構概念是非常重要的,這是因為可以交換功能性而不僅是調用或交互。在部署之後,在面向對象的環境中的典型的高度調用的web服務或對象可以例如有利地被自動集成或聚集。為了知道服務更新,可以增強觀測器以檢測集成代碼和外部服務之間的功能分歧;優選地是靜態的並且與實際使用同時進行。
自主元素具有複雜的生命周期,持續地進行多個活動線程,並且持續感知並響應它們所處的環境。與它們環境的自主、前攝及有意圖的交互可以引導開發者,例如通過觀察軟體的兩個部分之間的特定關係,並且利用它們的優點和缺點來自動建議重新構造的可選方案。
一旦檢測到故障,可以遍及軟體的所有實例來分配所述知識,並且通過代碼修改來阻塞功能性。在必要的情況下,這種自主軟體可以甚至請求作者進行更新或修補。
統計模型可以支持觀測器的元編程知識,例如識別情景的上下文中哪些修改是有用的。通常,編程規則本身變得透明,這是計算機科學的新的方面。重新構造或高階編程,即將函數用作值的能力,即作為其它函數的自變量的函數以及可以是其它函數的返回值的函數,很少被應用並且相當理論化。這個類型的編程大多用於功能性編程,但是其在「規律的」面向對象的編程中也非常有用,並且它在應用本發明時通過工程方法以自然的方式被支持時也非常有用。
綜上所述,主要特徵是充分深思熟慮的體系結構。圍繞這個深思熟慮的結構而構建的顯著特徵將包括功能性抽象的統一、基於來自能力所控制的明確協商的公理的正式證明的安全性、高階函數、紋理細密的構成、分布式聯網、正交持續的存儲、容錯計算、版本感知、動態代碼重新生成、封裝的高級模型,這優選地利用高度執行的動態編譯集合。
具有演進的需求的每天改變的環境中普遍存在的計算,是一項技術挑戰。應付它的已知技術是程序轉換、解釋和抽象(虛擬)機、編譯技術、智能代理技術、演進的及動態的代數,以及高階程式語言。
技術上來說,適配演進(改變)的環境的第一技術之一,是作業系統和無用信息收集器中的存儲調度程序。它們使操作環境適配於靜態程序資源的需要。
儘管發生程序演進,然而程序資源本身至今都被看作是靜態固定的。開發階段和執行階段之間存在嚴格的距離。
即時(just in time)編譯器技術和高階程式語言環境,允許動態編譯和優化。如LISP和ProLog的高級環境甚至支持執行時的代碼修改。直到現在還不知道支持代碼變形的控制實例。(系統的變形能力是指動態修改其運行時間的能力)。
代數概念「演進代數」(EA,Evolving Algebra)提供針對本發明的必要語義學基礎。可以如下說明EA論點可以通過合造的EA來在每個算法的自然抽象級別上模擬所述算法。演進代數方法的主要目的是提供簡潔且可執行的算法的正式規範。
改變環境將在以後發生。已經知道結果損壞的參考或連結、遺漏資源、不相容等等。由於多種變型,應用到當前系統中的靜態代碼產生了(在徹底的(完全的)需求覆蓋的情況下)巨大的不易處理的軟體包。當兩個軟體片段之間的交互接口改變時,所述軟體丟失。由於相當靜態的軟體世界,當前方法可以應付改變的需求,但是其遠不是理想的巧妙解決方案。
另外的解決方案是這樣的系統其中組件或部分被看作是自組織的單獨實體,其重新構造由外部交互所激勵的本身。系統包括可觀測且演進的組件以改變自身。系統的一個重要部分是通過標識其上實現程序演進的「編程構建塊」來定義可執行的語義。
建議的技術實現了可以「學習」的算法,並且通過比較它的動作的結果與要達到的目的而改變它的行為。算法是一個程序,其可以被寫成一組步驟,用於從給定輸入產生指定的輸出。所建議的反饋控制是一種過程,機器或系統的輸出或行為通過該過程來改變其操作,以持續減少輸出和目標值之差。變形軟體個體,即基於結構動態修改其運行時間的能力(或就代理通信系統而言,代理的責任),是定義軟體系統的框架,所述軟體系統能夠在解釋的程序語言的級別上自修改並重新產生。
抽象地說,自修改系統包括觀測器實例、演進歷史和當前圖像(image),其中觀測器能夠檢查動態方面,如運行的、歷史的軟體部分之間的交互,即如版次或版本的演進快照(snap shot)的收集,並且圖像是(現行)運行時間。所述系統中的計算導致可觀測的事件並觸發了圖像的修改。
為了說明所述方法的動態,下面描述了一組使用實例。假設對象系統環境包含用於持續的對象歷史的面向對象的資料庫基本管理系統,即凍結實例,以及圖像內的現行實例。對象,即如變量、方法、類、實例、關係、消息、聚集等,具有屬性。觀測器檢測到當執行更新這些屬性時所發生的特定事件所導致的結果。所述系統也包括到外界的接口,其中(可觀測的)與系統邊界的交互發生,並且將變得可觀測-激勵了反應行為。
進一步假設類的對象實例的系統,其包括類和實例變量、具有選擇、判決、迭代、遞歸(方法調用)和其它通常的面向對象的構造的類方法和實例方法。持續在可操作狀態更新屬性的觀測器觀測這些構造中的每一個,所述屬性例如通過變量屬性而被說明該變量屬性例如是訪問數目、訪問實例、或更新(修改)數目等。
事件(存儲於屬性中)的模式可以觸發修改,如將對於所有實例通用的實例變量遷移到類變量中,或將全局變量遷移到實例或類變量中,或交換類(包含相關性)之間的槽等。
由於分布式(複雜)系統的組件中甚至較小的結構改變會導致不可預見的系統行為,因此建議逐步增長的小的改進。演進歷史可以用來以自動方式執行衰退測試,以增加對程序轉換歷史正確性的信心。
存在一組探索法的改進,例如丟棄幾乎不使用的代碼段,或聚集類或對象關係。此外,存在從編譯技術所知的多組(保守的)程序轉換。在(探索法)修改之前,環境可能凍結圖像的演進狀態以實現後向跟蹤。
所述技術能夠在個體中累積執行知識,所述個體如組件、實例或代理。例如,如果僅代理B經常使用(在運行時刻)代理A的特定行為,則代理A決定通過添加涉及的方法以及方案(類)到代理B,來將所述行為移至代理B。反之亦然,代理C可能需要代理A的第一能力,而代理B需要代理A的第二能力。觀測器從統計觀測識別情況,並且觸發A劃分為A1和A2;在該劃分之後,這些部分被融入代理B和C中。
圖5中示出了所述情景,示出了軟體S1、S2的演進歷史H。軟體S1、S2被示為多邊形的三角形,其中三角形是軟體的模型組件C、C』。多邊形可以被看作是軟體的邊界。歷史開始於初始演進軟體S1,除了其它組件C,該軟體S1包括改進組件IC。假設可觀測的屬性是三角形的協調性,其中區域是一種針對組件的某種(可測量的)複雜度的測量,如耗用時間。在軟體S2的演進版本中,三角形似乎更為諧調,即組件被變形為一種改進的配置/分布/安排。
本發明實現了方法(函數)行為的優化和重組織的智能且自動的應用,如存儲器(通用緩存包裝)。它們的先決條件是不應當從調用到調用改變方法的返回值並且所述方法不應具有副作用。所述方法不應採用易變的自變量。有效的緩存包裝大大地增強了反應性。另一個重組織是(動態)部分評估。部分評估創建了通用程序的專用版本。專用程序可能更有效並且比通用版本運行更快。令P是程序,其採用兩個輸入D1和D2。通常,在一個步驟中評估P對(D1,D2)的應用用輸入(D1,D2)評估P以產生結果res。然而,可選地,它可以根據Curry-Howard(柯裡-霍華德)同構在兩個步驟中被評估首先用輸入D1部分評估P,其產生新的程序R,即P的參數化版本。然後,用輸入D2評估R以產生結果。程序R是P的專用版本(針對第一輸入的特定值D1),並且稱為剩餘(residual)程序。產生R的過程稱為部分評估,或程序專用化。部分評估的一個優勢在於執行速度專用程序R通常相比通用程序P更快,另一個優勢在於接口效率和聚集的簡化。
實現變形代理,必須使用支持動態的面向對象的編程的程式語言,其通過提供強大的元對象協議而包括在運行時間改變程序(類)和結構的能力。動態的面向對象的編程是一種軟體開發技術,其實現了在開發期間且在部署之後調整應用而無需訪問原始碼。建議的環境因此包括動態對象(運行時間改變=演進)、對象持續(存儲/檢索對象結構和方法=版本化)、(交互的)代碼操縱(逐漸增加的change-eval/compile-run循環),建議了元對象協議(關於對象的反映/推理)。
對照程序合成(從描述產生程序的宏步驟),本發明處理「代碼演進的環境」的兩級結構(通過演進增強程序的微步驟)。第1級稱作「環境」,其負責觀測個體(程序構造)、微改變的個體(程序轉換),度量行為(統計以及探索法)、學習新規則、更新規則、對象庫(=知識)更新或推斷(例如編程)源更新(具有產生的評論)事件、知識庫等。
第2層稱作「目標程序」(要開發的軟體的當前版本)。所述目標具有如包、類、實例等的組件,下至每個程序構造,其中每個所述構造具有環境中的「模型」。所述模型以及修改、觀測規則,使得環境能夠建議演進步驟。下面是概念/方法/條件的列表,其導致(半自動)程序修改。
如果系統判定可以通過更有效地重新構造參與個體(實例、代理)的知識來改進任務性能,則個體本身可以執行重新構造。
由於分布式(複雜)系統的組件中小的結構改變會導致不可預見的系統行為,建議了逐漸增加的小的改進。
自主程序操縱的概念大規模地(in the large)允許全面影響程序的操縱,而不僅是本地上在一個模塊中。兩個大規模的例子是模塊間重命名和重組織。為了找到引導重組織已知(靜態)軟體的應用的使用的標準,建議了度量。所述度量可以基於詞彙隱匿和測量過度可見性的原理。存在越大的過度可見性,即沒有使用的可見項越多,度量值就越小。發展靜態軟體度量的數量以增加軟體質量。這些度量用作較差結構的項目部分的好的指示符。
權利要求
1.一種用於使電腦程式自動適配於環境的方法,所述電腦程式產品包括可執行部分和數據部分,所述方法包括以下步驟針對環境配置所述電腦程式產品,並且在該環境中執行軟體,其中,所述方法還包括以下步驟觀測執行的效果,即度量所述可執行部分的行為;利用所述軟體分析被觀測效果的相互關係;並且基於規則修改可執行部分以減小如低效或故障的不期望的被觀測效果。
2.根據權利要求1的方法,還包括配置和改變管理,即代碼部分持續的修改或狀態。
3.根據權利要求1的方法,其中,所述被觀測效果是無用代碼的檢測,並且所述修改包括被標識無用代碼的消除。
4.根據權利要求1的方法,其中,所述被觀測效果是兩個部分之間緊密關係的檢測,並且所述修改包括將所述兩個部分重新構造在一起,例如將交互對象置於相同組件中、聚集外來調用方法、將變量置於合適的範圍中等。
5.根據權利要求1的方法,其中,所述被觀測效果是重複行為,並且所述修改包括添加對該重複行為的存儲。
6.根據權利要求1的方法,其中,所述被觀測效果是部分評估,並且所述修改包括柯裡-霍華德態射的應用,即針對每個x存在更有效的f_x,其中f(x,y)=f_x(y)。
7.根據權利要求1的方法,其中,當執行所述軟體時,執行所述觀測、分析和適配,其中優選地在背景中執行所述適配。
8.根據權利要求2的方法,其中,關於不期望的效果和功能等價,將先前版本與當前版本進行比較。
9.一種自動適配於環境的電腦程式產品,所述電腦程式產品包括可執行部分和數據部分,所述電腦程式產品包括配置裝置,該配置裝置用於針對環境而配置所述電腦程式產品,以在該環境中執行該電腦程式產品,其中,所述電腦程式產品包括觀測裝置,其用於觀測所述執行的效果,即所述可執行部分的行為;推斷裝置,其用於利用所述電腦程式產品來分析被觀測效果的相互關係;以及重新構造裝置,其基於規則修改可執行部分以減小如低效或故障的不期望的效果。
10.根據權利要求9的電腦程式產品,還包括實現根據權利要求1到7中任一個的方法的編程裝置。
11.一種用於製造根據權利要求9的自動適配的電腦程式產品的方法,其中,所述方法包括以下步驟通過集成觀測裝置來配置所述可執行部分,其中該觀測裝置用於觀測所述可執行部分的執行效果,即行為;通過用於利用所述軟體分析被觀測效果的相互關係的推斷裝置來配置所述可執行部分;並且通過用於基於規則修改可執行部分以減小不期望的效果的重新構造裝置來配置所述可執行部分。
12.根據權利要求11的方法,其中,將所述觀測、分析和/或適配通知給開發者。
全文摘要
本發明涉及一種用於使電腦程式產品自動適配於環境的方法,所述電腦程式產品包括可執行部分和數據部分,所述方法包括以下步驟針對環境配置所述電腦程式產品,並在該環境中執行軟體。此外,所述方法包括以下步驟觀測可執行部分的執行效果(即度量行為);利用軟體分析被觀測效果的相互關係;並且基於規則修改可執行部分以減小如低效或故障的不期望的觀測效果。本發明也涉及自動適配的電腦程式產品,以及用於製造所述自動適配的電腦程式產品的方法。
文檔編號G06F9/44GK1900907SQ20061010144
公開日2007年1月24日 申請日期2006年7月13日 優先權日2005年7月19日
發明者M·W·霍赫, H·勒斯勒爾, P·薩博 申請人:阿爾卡特公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀