實(shí)現軟件編程工廠(chǎng)化
FO方法是指面向事實(shí)的分析(Fact-Oriented Analysis)、面向結構的設計(Frame-Oriented Design)、面向形式的編程(Form-Oriented Programming) 的軟件開(kāi)發(fā)方法。
本文引用地址:http://dyxdggzs.com/article/202212/441579.htm幾百行代碼,完成了傳統軟件開(kāi)發(fā)需要幾十萬(wàn)行代碼的軟件系統。這并不是理論上的研究,而是一個(gè)正在使用的軟件系統——云計算農村數據服務(wù)平臺中的果業(yè)數據服務(wù)平臺。
該平臺目前包括果業(yè)產(chǎn)銷(xiāo)服務(wù),農資服務(wù),物流服務(wù),農機服務(wù),分析預測等近200個(gè)系統。并可根據需求,按照全國行政區域劃分,為每個(gè)村都配置一個(gè)獨立的果業(yè)數據服務(wù)平臺。今后云計算農村數據服務(wù)平臺還可擴展到蔬菜業(yè),養豬業(yè)等等。該農村數據服務(wù)平臺所管理的數據可無(wú)限多,且數據查尋時(shí)間快速,及乎不受數據增加的影響。如此龐大的巨復雜軟件系統,所需編制的數千萬(wàn)行、數億行代碼,都可由FO方發(fā)法的幾百行代碼簡(jiǎn)便自如地生成。
FO方法在業(yè)內率先實(shí)現軟件編程的工廠(chǎng)化,使軟件復用在龐大的巨復雜軟件系統成功應用,是軟件工程的具有里程碑意義的創(chuàng )新技術(shù)。
當今的計算機硬件發(fā)展是如此之快,軟件的開(kāi)發(fā)已經(jīng)遠遠地落在后面。人類(lèi)面臨太多的難題需要通過(guò)軟件來(lái)幫助分析解決。
全球金融危機爆發(fā)之前,盡管人們希望開(kāi)發(fā)一些復雜的系統來(lái)滿(mǎn)足人們的需要,但是這種需求并不迫切。然而金融危機爆發(fā)之后,人類(lèi)經(jīng)濟發(fā)生了全球性衰退,沒(méi)有一個(gè)國家能夠幸免于難。20國集團領(lǐng)導人倫敦峰會(huì )前后的一系列應對國際金融危機的措施表明,"一場(chǎng)全球性的危機,需要全球性的解決方案";發(fā)端于國際金融危機的全球應對,將使世界經(jīng)濟形勢、全球治理模式、國際關(guān)系格局等都出現新的變化,并產(chǎn)生遠遠超出危機應對本身的影響。
一個(gè)模擬全球金融體系的巨復雜軟件系統將會(huì )更加有效的進(jìn)行金融監管。然而目前的軟件技術(shù)卻無(wú)法完成如此復雜、龐大的軟件系統。
能否找到開(kāi)啟軟件開(kāi)發(fā)的新方法,從根本上解決目前的軟件危機難題,幫助人類(lèi)開(kāi)發(fā)出模擬現實(shí)的真正解決人類(lèi)難題的軟件系統?幾十年來(lái),國內外的計算機專(zhuān)家一直在尋找這個(gè)答案,并且提出了很多創(chuàng )新的思想方法,比如軟件工程的面向對象方法,構件方法,敏捷開(kāi)發(fā)等等。但是始終沒(méi)有找到一種方法來(lái)解決軟件的根本問(wèn)題——軟件危機。雖然,軟件工程的某一種創(chuàng )新方法的出現,解決了部分編程的眼前問(wèn)題,但是當軟件的復雜度增加、軟件系統更加龐大后,新的危機又出現了。而且這種危機比以前更加嚴重。
有沒(méi)有銀彈?
圖靈獎的獲得者Fred Brooks博士在1987年所發(fā)表的一篇關(guān)于軟件工程的經(jīng)典論文《沒(méi)有銀彈》中,把能給軟件產(chǎn)業(yè)帶來(lái)本質(zhì)上突變的技術(shù)稱(chēng)為“銀彈”,并且明確地強調真正的銀彈并不存在。他認為沒(méi)有任何一項技術(shù)或方法可以能讓軟件工程的生產(chǎn)力在十年內提高十倍。這個(gè)論斷在這二十多年里一直沒(méi)有被打破。
按照Brooks博士的觀(guān)點(diǎn),所有軟件活動(dòng)包括兩個(gè)部分,即根本任務(wù):打造由抽象軟件實(shí)體構成的復雜概念結構;次要任務(wù) :使用編程語(yǔ)言表達這些抽象實(shí)體,在空間和時(shí)間限制內將它們映射成機器語(yǔ)言。
一個(gè)相互牽制關(guān)聯(lián)的概念結構,是軟件實(shí)體必不可少的部分,它包括:數據集合、數據條目之間的關(guān)系、算法、功能調用等等。這些要素本身是抽象的,體現在相同的概念構架中,可以存在不同的表現形式。盡管如此,它仍然是內容豐富和高度精確的。
所以Fred Brooks博士認為軟件開(kāi)發(fā)中最困難的部分是規格化、設計和測試這些概念上的結構,而不是對概念進(jìn)行表達和對實(shí)現逼真程度進(jìn)行驗證。當然,程序員還是會(huì )犯一些語(yǔ)法錯誤,但是和絕大多數系統中的概念錯誤相比,它們是微不足道的。
事實(shí)上,現代軟件系統中存在的一些無(wú)法規避的內在特性,即復雜度、一致性、可變性和不可見(jiàn)性,讓軟件開(kāi)發(fā)總是非常困難。因此Fred Brooks博士得到一個(gè)結論,天生就沒(méi)有銀彈。
目前我們無(wú)法確定FO軟件開(kāi)發(fā)方法是否就是真正的“銀彈”,因為只有在更多的實(shí)踐中驗證后才能得到明確的結論。但是它可以使用有限的少量代碼實(shí)現傳統方法需要數百萬(wàn)行、數千萬(wàn)行代碼才能實(shí)現的軟件功能,以及它可以建立任意空間復雜度的軟件架構體系,并且這個(gè)架構體系結構是可以根據需要隨意調整的。因此至少我們可以認為它是一種高效的軟件開(kāi)發(fā)方法。
FO方法是如何解決“概念結構”難題的?
云計算時(shí)代,軟件系統的復雜度比目前已經(jīng)開(kāi)發(fā)的軟件系統要復雜得多,或許其復雜程度比 Brooks博士想象的還要復雜,而且我們幾乎無(wú)法預先知道最終的系統到底有多復雜。開(kāi)發(fā)一個(gè)不能預先知道復雜度的軟件系統,聽(tīng)起來(lái)似乎在講一個(gè)天方夜談里的故事,然而不幸的是,在云計算時(shí)代,它的確是真實(shí)的。在西方所有恐怖民間傳說(shuō)的妖怪中,人狼之所以是最可怕的,是因為我們不知道他們的面孔會(huì )變成什么樣的。
為了對付人狼,我們在尋找可以消滅它們的銀彈。這種銀彈是存在的。
那么對于具有人狼特性的軟件,是否也存在銀彈?盡管二十多年前圖靈獎獲得者布魯克斯博士得出了“沒(méi)有銀彈”的結論,但是國內外的計算機人員并沒(méi)有放棄對“銀彈”的尋找,對希望的渴求以及永不放棄的精神是人類(lèi)的天性。
作為哲學(xué)和軟件技術(shù)相結合的產(chǎn)物,FO軟件開(kāi)發(fā)方法是北京乾坤化物數字技術(shù)有限公司在多年的實(shí)戰中總結出來(lái)的方法。而環(huán)境的生存壓力是形成這種方法的最大動(dòng)力。我們不得不考慮如何讓不同行業(yè)的軟件使用同樣的代碼,也必須考慮如何用最少而且有限的代碼來(lái)構建任意多的功能模塊,以及如何應對不同行業(yè)的用戶(hù)變化不定的需求。
FO方法是指面向事實(shí)的分析、面向結構的設計、面向形式的編程的軟件開(kāi)發(fā)方法。
面向事實(shí)的分析是哲學(xué)話(huà)題而非技術(shù)話(huà)題。是由行業(yè)專(zhuān)家對客戶(hù)需求進(jìn)行邏輯分析,而這種分析是完全不考慮軟件技術(shù)的,只是單純地按照哲學(xué)方式進(jìn)行分析,然后建立邏輯模型。因此嚴格來(lái)講,它不屬于軟件技術(shù)范疇。因為分析人員幾乎不需要和程序員做任何交流,只需要把創(chuàng )建好的邏輯模型交給程序員就可以了。
采用面向結構的設計方法,我們可以得到一個(gè)復雜的空間邏輯結構,它將用來(lái)處理軟件系統內在特性引發(fā)的一些問(wèn)題,即復雜度、一致性、可變性和不可見(jiàn)性。
復雜度問(wèn)題。任何一個(gè)復雜的現實(shí)模型,可以采用哲學(xué)方法,分解為簡(jiǎn)單對象的連接,而這種連接方式就是結構。因此對一個(gè)任意復雜模型的處理就轉換成了對連接方式的處理,也就是對結構的處理。把連接方式進(jìn)行分類(lèi),這樣一個(gè)復雜的連接方式就轉換成了由一系列不同類(lèi)型的簡(jiǎn)單連接方式的組合。即得到了一系列的簡(jiǎn)單結構。
以云計算農村數據服務(wù)平臺為例,得到了樹(shù)狀地名分層結構,行業(yè)分類(lèi)結構,表現形式結構,產(chǎn)品分類(lèi),服務(wù)分類(lèi),人員分類(lèi),工作類(lèi)型等等。這些結構組合在一起,就得到了云計算農村數據服務(wù)平臺的對象連接方式。
一致性問(wèn)題。 正如Fred Brooks博士在其論文中所闡述的,并不是只有軟件工程師才面對復雜問(wèn)題,物理學(xué)家甚至在非?!盎A”的級別上面對異常復雜的事物。不過(guò),物理學(xué)家堅信必定存在著(zhù)某種通用原理,或者在夸克中,或者在統一場(chǎng)論中。愛(ài)因斯坦曾不斷地重申自然界一定存在著(zhù)簡(jiǎn)化的解釋?zhuān)驗樯系鄄皇菍?zhuān)橫武斷或反復無(wú)常的。
但是Fred Brooks博士卻悲觀(guān)地認為軟件工程師根本無(wú)法用簡(jiǎn)單的方法來(lái)解決軟件的這些復雜特性。甚至無(wú)法象物理學(xué)家那樣從信念中獲得安慰。而這種復雜度是人設計的結果,是隨心所欲、毫無(wú)規則可言的,這種復雜性引起了軟件的一致性問(wèn)題。
如同解決軟件復雜度一樣,既然FO方法已經(jīng)把復雜度問(wèn)題解決了,自然其一致性問(wèn)題也就不存在了。因為在每個(gè)最簡(jiǎn)單的連接方式中,比如行業(yè)分類(lèi),盡管不同的設計人員在命名或者結構的處理上有差別,但是其本質(zhì)是一致的。比如我們對果業(yè)產(chǎn)品的分類(lèi),我們把獼猴桃又劃分為早熟、中熟、晚熟三類(lèi),然后對早熟再進(jìn)行細分,而很多的人沒(méi)有增加早熟這一層分類(lèi),但是這兩種分類(lèi)方式在結構上具有一致性。
可變性問(wèn)題。FO方法把軟件系統分為兩個(gè)獨立部分,對象和連接方式(即結構)。軟件結構是一個(gè)多維空間架構,每個(gè)維是由一組位置數據元素組成。對象又分為兩個(gè)獨立的部分,對象的內部特性——形式,對象的外部特性——配置,形式是程序代碼,配置是一組描述數據的集合。
形式作為對象的內部特性,是固定不變的。但是作為外部特性的配置以及作為連接方式的結構是可以變化的。FO方法將通過(guò)調整配置和結構來(lái)改變軟件,使它更加適應用戶(hù)的需求。這種改變不涉及程序代碼,只是對描述數據進(jìn)行調整,不會(huì )增加軟件開(kāi)發(fā)維護的難度。因此可以根據需要隨意改變軟件的功能,以便更加適應環(huán)境的需要。
不可見(jiàn)性問(wèn)題。軟件是不可見(jiàn)的和無(wú)法可視化的。軟件的客觀(guān)存在不具有空間的形體特征。因此,沒(méi)有已有的表達方式,就像陸地海洋有地圖、硅片有膜片圖、計算機有電路圖一樣。當我們試圖用圖形來(lái)描述軟件結構時(shí),我們發(fā)現它不僅僅包含一個(gè),而是很多相互關(guān)聯(lián)、重疊在一起的圖形。這些圖形可能描繪控制流程、數據流、依賴(lài)關(guān)系、時(shí)間序列、名字空間的相互關(guān)系等等。
FO方法采用具有遺傳特性的無(wú)限分層的樹(shù)以及線(xiàn)性方式來(lái)展示描述軟件的空間形體特征,我們無(wú)法描繪軟件的復雜空間結構圖形,但是可以顯示每個(gè)維的圖形,比如在云計算農村數據服務(wù)軟件平臺里,地名結構樹(shù),分類(lèi)樹(shù)等分別代表軟件空間結構的地名維,分類(lèi)維,這些是可以采用幾何方式展示的。
幾百行代碼是如何構建傳統方法需要幾十萬(wàn)行代碼的軟件系統的
面向形式的編程方法(Form-Oriented Programming)的核心思想在于對象的內部特性即對象的存在形式是固定不變的,其外部特性即配置(描述)是可以變化不定的。這種觀(guān)點(diǎn)在哲學(xué)上已經(jīng)有明確的推論,比如《邏輯哲學(xué)論》等。
對于固定不變的“形式”,我們采用程序代碼方式來(lái)完成,即使用一組指令,按照邏輯順序進(jìn)行排列。配置采用數據描述方式來(lái)完成,即制定一種“規定”,用特定的符號來(lái)完成對象外部特性的描述。程序只對“規定”里的符號本身做處理,而對符號所代表的具體含義不關(guān)心,所以當符號所代表的含義發(fā)生改變時(shí),對于程序本身來(lái)說(shuō),它仍然在做同樣的處理,但是展示給用戶(hù)的結果卻發(fā)生了改變,是另外一種不同的東西。這是由于人的主觀(guān)意識決定的,因為人在大多數時(shí)候,是通過(guò)外部特性來(lái)判斷這個(gè)東西是什么,那個(gè)東西是什么的,而計算機是通過(guò)內部特性來(lái)判斷東西的所屬的。
比如在云計算農村數據服務(wù)平臺里,物流數據的統計和果品銷(xiāo)售數據的統計,對于人來(lái)說(shuō),是兩個(gè)不同的東西,但是對于計算機來(lái)說(shuō),它們是一樣的,是對符號做同樣的處理,不同的是作為由符號構成的群,是由不同的同類(lèi)符號子群構成,每個(gè)子群的元素具有相同的構造(處理方法),但是元素的數量可能會(huì )有差異。
基于這個(gè)特性,就可以采用相同的程序代碼,采用不同的配置(描述),構造出不同行業(yè)的大量軟件系統了。比如在我們的“云計算果業(yè)數據服務(wù)平臺”中,采用幾百行代碼,就已經(jīng)完成了近200個(gè)不同的應用程序,如物流貨運服務(wù),果品銷(xiāo)售服務(wù),農機服務(wù)等。而采用傳統的軟件開(kāi)發(fā)方式,完成這樣的系統,如果每個(gè)系統使用2000行代碼,至少也需要四十萬(wàn)行代碼。
接下來(lái)我們將開(kāi)發(fā)“云計算蔬菜數據服務(wù)平臺”、“云計算養牛數據服務(wù)平臺”、“云計算養魚(yú)數據服務(wù)平臺”、“云計算農村醫療數據服務(wù)平臺”、“云計算人口數據服務(wù)平臺”等,采用系統同構特性,這些軟件系統將同樣使用這幾百行程序代碼。而采用傳統的軟件開(kāi)發(fā)方法,可能需要幾千萬(wàn)行代碼。
FO方法的意義
FO方法的意義大致有幾個(gè)方面。
一是解決了軟件復雜度問(wèn)題。FO方法可以快速搭建任意復雜的軟件體系結構,同時(shí)可以根據需要隨意修改調整軟件體系結構。這種調整修改可以發(fā)生在軟件生命周期的全過(guò)程,即開(kāi)發(fā)初期,或者軟件使用過(guò)程中。體系結構的調整將形成全新的軟件系統。
從這種意義上講,FO方法使軟件具有可以進(jìn)化的功能。因為調整的目的是為了讓軟件系統更加適合客戶(hù)的需求,每次的調整都可能更加逼近目標。
由于FO方法可以處理任意復雜的模型,所以從理論上講,FO方法可以搭建和現實(shí)地球對應的數字地球,在這個(gè)數字地球里,有金融體系、商務(wù)體系、氣象體系等等。
二是減少了程序代碼的數量。程序代碼的減少,大大增強了軟件的可讀性,可維護性,同時(shí)減少的BUG存在的可能性。比如目前的操作系統的代碼達到了數億行,如果采用FO方法,使其代碼的數量限制在幾萬(wàn)行,那么其維護以及功能的調整修改就容易很多。
三是提高了軟件的安全性。軟件的復雜度以及軟件代碼是導致安全問(wèn)題的重要因素。大量的安全隱患存在于程序代碼里面。從程序代碼里發(fā)現問(wèn)題并進(jìn)行處理,是解決安全性的根本途徑。然而在傳統的軟件開(kāi)發(fā)中,由于程序代碼的數量過(guò)于龐大,因此預先知道問(wèn)題的所在是很難的。同時(shí)由于軟件的復雜度,有時(shí)候即便找到了問(wèn)題所在,也無(wú)法從根本上加以解決,因為這個(gè)地方的問(wèn)題可能已經(jīng)關(guān)聯(lián)了N個(gè)程序,而我們無(wú)法準確的知道那些地方和這個(gè)錯誤有關(guān)聯(lián)。
FO方法通過(guò)把復雜的問(wèn)題轉換為一系列獨立的簡(jiǎn)單問(wèn)題,然后采用解決簡(jiǎn)單問(wèn)題的方法來(lái)提高軟件系統的安全性。
四是提高了軟件開(kāi)發(fā)的進(jìn)度。FO方法采用哲學(xué)方法來(lái)分析用戶(hù)需求模型,采用命題形式來(lái)建立邏輯需求模型。程序代碼的編寫(xiě)過(guò)程實(shí)際上是對命題的翻譯過(guò)程。比如對一個(gè)簡(jiǎn)單對象的形式進(jìn)行代碼編寫(xiě),實(shí)際上已經(jīng)有了一個(gè)哲學(xué)上對這個(gè)形式的邏輯描述,程序員只需要把這種描述翻譯成計算機語(yǔ)言就可以了,而計算機語(yǔ)言的選擇可以根據需要來(lái)選擇,比如java,c等。
和傳統的軟件開(kāi)發(fā)方法比較,FO方法對于大型軟件系統的開(kāi)發(fā),效果會(huì )更加明顯,開(kāi)發(fā)周期可以縮短70%左右。
五是減少了軟件開(kāi)發(fā)成本。軟件開(kāi)發(fā)成本主要是程序員的成本,在一個(gè)大型的軟件系統開(kāi)發(fā)中,傳統的方法對程序員的素質(zhì)以及人員數量的要求很高,軟件是程序員思維過(guò)程的記錄,因此人力成本也就很高。同時(shí)由于程序代碼的龐大,導致了后期維護成本的不可控,也大大增加了總體成本。
FO方法把軟件開(kāi)發(fā)轉換成為一個(gè)簡(jiǎn)單的勞動(dòng),軟件是現實(shí)用戶(hù)需求模型在計算機世界的映射。邏輯模型的建立由行業(yè)專(zhuān)家采用哲學(xué)的方法來(lái)建立,程序員只是在完成翻譯工作。因此人力成本相對較低。同時(shí)由于代碼數量的減少,后期維護成本也就相對減少很多。
對于大型、復雜的軟件系統開(kāi)發(fā),FO方法的軟件開(kāi)發(fā)成本會(huì )更低,和傳統的軟件開(kāi)發(fā)方法比較,大約會(huì )減少60%左右的成本。
六是軟件可以滿(mǎn)足用戶(hù)不斷變化的需求。FO方法只把形式部分采用程序代碼方式來(lái)實(shí)現,而反映對象外部特性的配置部分采用數據描述方式來(lái)實(shí)現。因此用戶(hù)可以根據現實(shí)環(huán)境的變化來(lái)修改軟件配置,以便獲得滿(mǎn)足自己需要的軟件系統。
2010年2月22日
注:此文是中國嵌入式系統產(chǎn)業(yè)聯(lián)盟網(wǎng)絡(luò )空間命運共同體研究會(huì )交流文
愿意加入我們研究會(huì )和微信群進(jìn)行共同研討的人士,可掃下面的網(wǎng)絡(luò )空間研究會(huì )微信群二維碼入和后補填入會(huì )豋記表。如您已是中國嵌入式系統產(chǎn)業(yè)聯(lián)盟理事或會(huì )員,只需掃研究會(huì )二維碼入群,聯(lián)盟秘書(shū)處就會(huì )為您辦加入研究會(huì )的豋記。謝謝!
評論