◆牟 楊
(上海體育學院 上海 200438)
仿生學的誕生和發展給人類解決各種問題提供了獨特的視角和方案,人類發展史上的許多重大工程發明都源自仿生學。“軟件工程是開發、運行、維護和修復軟件的系統方法”[1]。北京大學楊芙清教授曾指出,軟件具有生物特性,應用軟件的生產模式應該模擬生物的生產模式而非硬件的生產模式[2]。仿生軟件開發研究在國內外尚屬新興領域,不是現在人工智能研究方向的熱點,目前還沒有出現系統的、具有突破意義的研究成果,從事相關領域的研究人員和學者也還處在摸索階段。

圖1 知網摘錄國內人工智能發展方向檢索圖
通過搜索知網相關條目,可以看到基于仿生學模擬人體大腦結構的交叉學科即人工神經網絡方面的論文發表熱度很高,而對于智能化軟件開發,以及基于仿生學的仿生軟件工程方面的文章,產出量及關注度都比較低。筆者就仿生學應用于智能化軟件開發,特別是應用于軟件誕生之初的結構設計,作了一點初步實踐與探索,錯訛失妥之處必多,敬希方家指正。
根據先行研究的成果,仿生軟件工程可分為如下三類:仿微生物軟件、仿植物軟件、仿動物軟件[3]。此分類以生物的相關特性對相應的軟件系統,并根據其復雜程度、更新頻次以及與互聯網的交互作用進行了劃分,這種劃分進一步明確了軟件與各種生命體的相似性。在軟件的發展中既然顯示出與生命體越來越多的相同點,那么生命體產生的過程對于智能化軟件開發自然有可借鑒和學習之處。
本文討論的重點不在于進一步對軟件進行分類來探尋與生命體的相似性,因為動植物千差萬別的根本原因在于他們的遺傳基因不同,即使是最簡單的單細胞動物也對軟件開發有著借鑒意義。正如Frederick P.Brooks在《人月神話》所指出的,在增量開發時生物的復雜性令人敬畏,它自我更新能力異常強壯[4]。
如何將生命產生初期的特點應用到軟件開發中,即如何將生命科學應用于智能化軟件的開發是本文討論的重點。下文將對智能化軟件的開發和生命體產生進行類比,本文討論及實踐的范圍,限于智能化仿動物軟件的開發,而以受精卵到動物出生的過程作為軟件開發的學習階段。
既然要借鑒生命產生中的優點來對軟件開發進行優化與革新,確定何種生物的哪個階段作為軟件開發的借鑒對象尤為重要。從已有研究成果來看,石富源《仿動物軟件工程方法基因模型研究》[5]將“軟件開發”和“物種產生”相對應,李朝霞《仿植物軟件工程方法研究》[6]則提出了“軟件開發”對應的是“生物體產生”。
如上文所述,一款“軟件的開發”即是一特定“物種的產生”,仿生軟件的開發和升級,即是新的生命體誕生、進化、成長、生長的過程。生命的起源到現在仍然沒有定論,一種論點認為新的物種是生命由原始低級的生命體經過千百萬年進化而來,仿生軟件的開發正是或許未來是有如軟件病毒(注:病毒正是屬于生物鏈中比較初級、簡單的微生物)中一段低級的程序代碼或程序基因,被程序開發者賦予生命,并投放到Internet平臺中去,經過或長或短時間的優勝劣汰,進化出或者說升級為一款智能軟件,在這種意義上“仿生軟件開發”就被賦予了全新的含義,軟件工程師便成為“上帝”一般的造物主角色。
這種“軟件開發”和“物種產生”的對應關系在理論上是正確的,但它在實踐中所需要的條件卻是未來模式,由于生成時間、存儲空間、檢驗標準的不確定性,注定它在目前的軟硬件條件下無法付諸實踐。如果說軟件工程師是孕生軟件的“上帝”,那么當下Internet環境則有如推促軟件升級的“上帝之手”——它通過用戶體驗對各種軟件進行著優勝劣汰,不過從事軟件開發的普通程序員相較于“上帝”來說他們更像孕育、分娩的“孕婦”,根據客戶的需求開發出各種各樣特定的軟件。
既然當今程序員不是“上帝”還是從事“孕婦”一樣的工作,而軟件與生命體的對應關系是多方面的,可以從宏觀上去定義,也可以從微觀上去模仿,因此我們需要對智能化軟件開發與生命成長階段進行重新定義,以便在當前條件下模仿生物產生來進行軟件開發的實踐應用,本文是以動物從受精卵到出生的過程作為學習和模仿對象,對軟件開發進行借鑒與指導。
軟件開發只是軟件工程的一個環節,細分下去軟件需求、軟件設計等諸多環節如何與生命體產生過程相對應,卻是一個難題,這勢必影響到生物體產生諸階段與軟件開發諸階段二者對應的完整性。我們假設生命如“上帝創造論”學說一樣,是造物主在地球上放置了一段原始的生物DNA片段,最終使地球生機盎然,依然不能解釋地球為什么需要生命,換言之與軟件需求相對應的生命體的產生依然是未解之謎。基因儲存著生命的種族、血型、孕育、生長、凋亡等過程的全部信息,那么軟件設計對應的是各種物種的基因編制。表1試對生物體產生階段與軟件開發諸階段的對照關系做了梳理。

表1 生物體產生階段與軟件開發諸階段對照表
就上文對軟件開發和生命過程的對應關系的梳理,確定了“個體軟件實現與編碼”對應的是“從受精卵到出生的過程”,那么本節筆者將梳理動物胚胎過程的發育過程及其特點對軟件編碼的借鑒意義。
“從受精卵到出生的過程”也可以細分為很多階段。雖然動物的種類繁多,胚胎發育過程復雜,但依然擁有相似的過程:可分成受精、卵裂、桑葚胚、囊胚、原腸胚與器官形成等階段,即受精卵發育成胚胎,胚胎繼續細胞分裂、分化,產生各種細胞,組建各種組織、器官,最終形成動物幼體。
從生命體的誕生來看,在個體基因設計完成之后,個體的孕育誕生是一次成型的,這一點和傳統軟件模型中的瀑布模型比較相近,即軟件設計之后就是軟件編碼,不會像螺旋模型需要重新設計,這好比在雞蛋孵化過程中不會發生重新編制或修改設計以至孵出小鴨來。這是生命體誕生中一次成型而不會變化的特點,對于變更需求比較頻繁的軟件行業來說,或許不是一個可以借鑒的特征,但還是有不少值得軟件編碼借鑒、學習的地方。
(1)優勢一:全周期生命態,通過細胞分裂的成長來保持一致性、兼容性.
人類的胚胎在孕育過程中經歷了“有絲分裂”,所有器官以及系統都是一個小小的受精卵孕育而來,有絲分裂讓母子細胞含有相同的遺傳信息,保證了整個生命個體成長過程中的一致性和兼容性。
軟件開發中的編碼階段,往往會發生參數不匹配,環境不兼容,運行版本不一致等各種問題,究其根源還是現階段的軟件編碼是從函數、模塊到整體系統構架的集成與整合這一拼裝特性所導致。當今軟件項目的規模日漸增大,系統日趨復雜,如Windows 7大約含有50,000,000行代碼,對于復雜程度超乎想象的軟件工程來說,類似樂高積木般集成起來的模塊拼裝方式難以滿足質量標準日趨嚴格的軟件開發要求,拼裝而成的系統往往存在隱患。而反觀生命體,如小雞的構造要比一款大型的企業軟件復雜得多,健壯得多,智能得多;成本和制造時間卻很少。既然軟件日趨復雜、規模不斷增大、仿生程度愈益提高的趨勢是不可逆轉的。那么,軟件編碼去向更為復雜的生命體構成學習,應該是解決軟件開發諸多難題的一條出路。
“全周期生命態”的含義是指生命孕育從“從受精卵到出生的過程”都是活體狀態,它是自發的按照固有的分子級的構造在孕育生命,它的正確性也是由自發的功能性來檢測的。但網站系統直到系統上線的最后一步,整個系統才算是運行起來,只有運行起來的網站才是“生命態”的。當在“百度”等搜索網站上進行查詢,如同和一個“智者”交流,這時網站是擬生命態的,當服務器宕機沒有任何反應時,剛才還在交流的“智者”如突然逝去一般。軟件開發歷經設計、編碼、單元測試、系統測試,最后才上線運行;如果軟件編碼是和生命孕育過程及結構相一致的話,需要最開始就建立上線運行系統,把這一段最開始與“受精卵”對應的程序片段放入到運行環境中去,讓它通過細胞自發分裂似地自我復制和自我構建,最后形成一個完整的軟件系統,由于軟件成長過程中所有的構建標準都是一致的,也就不會存在不兼容等各種問題。
(2)優勢二:全周期生命態,通過自身構建情況反映成長進度。
軟件的另一大問題就是軟件進度估算困難,通過軟件代碼編寫進度來預估完成時間,在代碼運行之前難以確定隱藏了多少錯誤,軟件糾錯時間往往含有不確定性從而讓開發時間難以把控。如果軟件開發是全周期運行狀態的話,軟件中的錯誤和Bug將會充分暴露,也會更易于了解軟件的開發進度,能大大降低管理和估算成本。
(3)優勢三:全周期自動化,自動生成無人干預。
如果能像生命孕育階段的全周期自動孵化那樣,實現智能軟件開發階段的全自動化,則將完全省去所有人工開發成本以及項目管理成本,給軟件行業帶來革命性的飛躍。
(4)優勢四:全周期生命態在生命構建過程中的自我測試與中止。
胚胎發育的過程是按階段循序進行生物合成和細胞分化;由組織發生到器官發生,最終在形態建立的基礎上出現功能分化。胚胎發育不會對每個細胞進行檢查,而是通過它不斷地分類,演變成組織來證明它是健康的。軟件開發卻不能像胚胎發育過程那樣自我檢測每一步的發育步驟是否正常,而需要專門的測試組來驗證每個模塊或組件是否正確。當然,在生命體自我構建過程中,一旦早期細胞出現問題,那么會發生孕育中止或出生缺陷的問題,而無法在孕育過程中發現問題并進行彌補與糾錯。但另一方面這種自我檢測的方式和孕育過程之自行中止,仍極大地節省了測試成本、時間成本、資源成本,從而值得軟件開發引為借鑒。
(5)優勢五:神經網絡在生命初期開始構建。
在人類胚胎過程第7周神經管出現,后端部分形成脊髓,前端部分稍膨大,為腦的原基,由此可見人類神經形成是在于胚胎早期,正因為有了神經網絡這樣一個傳達中樞,人類可以通過感覺神經感知外界避免機體受到傷害。
人類的神經系統也對軟件開發有著深刻的啟示。現在的軟件一般要借助其他安全工具如“WAF”等來進行防護,自身沒有安全檢測功能,在網頁篡改或是網站資源惡意刪除時都無法感知,處在一個人為監控和被動發現的狀態,如果軟件系統自身就如一個生命體一樣有一套完整的“感覺神經”系統,隨時對于網絡入侵者或黑客進行恢復和阻斷,那對于網站的網絡安全防護能力將是一個極大的提升。
(6)優勢六:全能干細胞具有形成完整個體分化潛能。
從克隆技術可以看出,個體的某些體細胞包含了所有個體的全部信息。如果軟件系統有相應的類似種子程序或DNA程序片段存在的話,將完全改變軟件開發的現有形態,也有助于對軟件系統的復原和備份。當軟件系統變得殘缺不全時,甚至是在遭受火災地震等重大災害時,只要一部分DNA程序片段便能復原整個軟件系統。
在開發中如何借鑒生命科學的精髓是極為困難的事,軟件作為隸屬于計算機科學的工學學科,在應用過程中受制于當今的軟硬件條件限制有時不得不有所妥協。筆者曾在仿生軟件開發方面做過初步嘗試,愿將其中的經驗教訓與讀者分享。
如上文的“全能干細胞具有形成完整個體分化潛能”,即通過一個DNA程序片段生成或恢復整個軟件系統,當今技術條件下筆者認為只有理論參考價值,尚無實現之可能。因為遺傳基因信息的存儲介質是分子級,而IT技術的信息存儲是0/1格式,相對于基因信息的存儲介質要簡單得多。如人類基因組是由23對染色體(共46個)所構成,而組成染色體的堿基對共含有30億個。將如此復雜的構造體凝聚于一個軟件組件之中,當今的IT技術還無法實現。
為了將上文討論的有關設想付諸實踐,在軟硬件允許的條件下筆者設計了一個“仿生命科學系統網站”,該系統網站和生物的對應關系,請參見表2。

表2 生物體產生階段與“仿生命科學系統網站”對照表
限于篇幅下面簡單介紹一下該系統的開發過程。
(1)“仿生命科學系統網站”的軟件設計以及自動生成系統準備。
為了完成“全周期生命態的自動編程”,需要預先構建以下生成“仿生命科學系統網站”的輔助模塊與系統,如軟件系統生成流程模塊、網頁控件生成及測試系統、系統事務性操作執行系統、網頁整合集成模塊以及模擬測試數據等系統及模塊。
(2)在網站系統運行狀態下對一個網頁控件進行軟件編程。
首先調試好數據庫以及網絡發布容器,在第一個網頁的第一個控件測試成功后,才能生成第二個網頁控件。當第一個控件測試失敗時,整個系統生成過程終止,如果所有開發測試過程成功,最終將是完成一個完整的網站系統供用戶使用,其間無須任何人為干預和輔助。這是對生命孕育中的細胞分裂、自我生成與測試過程的模擬實踐。
(3)網頁控件監控系統用來感知目前正在開發的網頁控件。
通過網頁監控模塊來確定當前正在構建的控件,并記錄光標所在位置,那么這個監控模塊在系統構建時能確定當前的構建網頁和組件,還能記錄網站所有事項操作和頁面跳轉路徑圖,最終形成此網站的導航圖。將監控系統最終與網站系統一起發布,能對使用者當前正在使用的控件做監控,即用戶行為監控系統,是對感知神經的實踐模仿,能提高網站系統的智能安全防御功能。
(4)網站系統的開發完成以及與傳統軟件開發時間比較。
在各個模塊以及網頁拼裝完成后,最后進行自動的整合測試,那么一個網站從一個控件到最后系統整合,這樣一款仿生智能軟件系統也就宣告完成。雖然這個自動生成過程只耗時46分鐘左右,但前期各個生成系統的設計以及數據庫調試等,卻花費了大約11個月(見圖2)。
從本例看出同等規模的軟件開發,如果是按普通的軟件開發通常在2個月內可以完成。但本款智能化軟件試圖將生命科學運用于軟件開發中,故耗時11個月之久,主要是因為各種軟件自動生成及測試系統的開發頗費精力,但這一實驗性的自動開發軟件一旦成功并順利運行,則仿生智能化軟件開發中的編碼以及測試步驟,只需要不到一個小時就能完成。從人類工業的發展史來看,測試與準備系統應屬于開發工具和裝備,從手工作坊到智能生成流水線,人類工業的制造設備都是在逐漸升級中變得更加復雜與精密,制造時間卻是大大縮短,從這個角度來看將生命科學運用于智能軟件開發,是符合未來智能化軟件的發展趨勢的。

圖2 仿生軟件開發過程時間圖
針對生命科學之應用于軟件科學的熱點在于機器學習,即智能仿生軟件的開發與應用,而對軟件的誕生過程失于關注,筆者認為研究人員應關注如何全自動化、智能化地來生產軟件,因為生命科學對于仿生智能軟件開發的借鑒意義,應該是全生命周期的,即貫穿于軟件開發的全過程,尤其是軟件誕生初期,只有在其設計模式與開發理念都符合未來智能化發展趨勢的前提下,軟件才能擁有更高的智慧,并通過后期機器學習成為高智慧的仿生命體。軟件孕育誕生即早期設計的重要性絕不亞于后期的機器學習。本文研究和歸納了一些仿生學對智能化軟件開發可以借鑒的優點,對于軟件開發與生命成長各階段的對應關系進行了重新定義,最后也以自己設計的一個小的軟件系統為例進行了初步實踐和探索,拋磚以引玉。本文如果能給生命科學應用于智能化軟件開發提供一個思路或實例,引起大家的思考,也就達到了初衷。總之,仿生軟件必將是軟件智能化的一個發展方向,生命科學應用于軟件開發仍然是一塊有待開發的寶藏之地,值得我們去探索和研究。