FO開(kāi)發(fā),一種解決軟件危機的創(chuàng )新方法
一、軟件危機,云計算時(shí)代無(wú)法回避的問(wèn)題
本文引用地址:http://dyxdggzs.com/article/202212/441578.htm1、背景介紹
60年代中期,大容量、高速度計算機的出現,使計算機的應用范圍迅速擴大,軟件開(kāi)發(fā)急劇增長(cháng)。高級語(yǔ)言開(kāi)始出現;操作系統的發(fā)展引起了計算機應用方式的變化;大量數據處理導致第一代數據庫管理系統的誕生。軟件系統的規模越來(lái)越大,復雜程度越來(lái)越高,軟件可靠性問(wèn)題也越來(lái)越突出。原來(lái)的個(gè)人設計、個(gè)人使用的方式不再能滿(mǎn)足要求,迫切需要改變軟件生產(chǎn)方式,提高軟件生產(chǎn)率,軟件危機開(kāi)始爆發(fā)。
1968年,北大西洋公約組織的計算機科學(xué)家在聯(lián)邦德國召開(kāi)國際會(huì )議,第一次討論軟件危機問(wèn)題,并正式提出一個(gè)新的名詞:軟件工程。從此出現了一門(mén)新興的工程學(xué)科——軟件工程學(xué),目的就是研究和克服軟件危機。
2、軟件工程不能解決軟件危機
剛開(kāi)始的時(shí)候,軟件工程的確解決了一些問(wèn)題。
然而進(jìn)入上世紀80年代以后,盡管軟件工程研究與實(shí)踐取得了較大的成就,軟件技術(shù)水平有了長(cháng)足的進(jìn)展,但是軟件生產(chǎn)水平依然遠遠落后于硬件生產(chǎn)水平的發(fā)展速度。當需求比較復雜的時(shí)候,軟件工程本身也出現了危機。比如當一個(gè)需求需要1億個(gè)模塊的時(shí)候,缺乏必要的文檔資料或者文檔資料不合格,將給軟件開(kāi)發(fā)和維護帶來(lái)許多嚴重的困難和問(wèn)題。
3、云計算必須面對“軟件危機”
軟件開(kāi)發(fā)商很少提“軟件危機”的事情,架構設計師根據用戶(hù)的需求,制定出開(kāi)發(fā)方案后,軟件人員只需要按照要求編寫(xiě)代碼就可以了。事實(shí)上國內的很多軟件人員好象不知道有“軟件危機”這回事。
傳統的軟件開(kāi)發(fā)可以回避談?wù)摗败浖C”,畢竟是一個(gè)簡(jiǎn)單的系統,比如ERP,也只是一個(gè)簡(jiǎn)單系統,即便出現軟件危機,影響也不會(huì )太大,最多是影響一個(gè)大型企業(yè)。
然而開(kāi)發(fā)云計算產(chǎn)品的時(shí)候,軟件危機就成了繞不過(guò)去的坎了。同樣是提供企業(yè)資源管理服務(wù),影響的就不是一個(gè)企業(yè),也是很多的企業(yè),以及和這些企業(yè)相關(guān)聯(lián)的政府部門(mén),比如稅務(wù)局、工商局、商業(yè)局、統計局等,因為這些部門(mén)從企業(yè)的“數據云”里獲得相關(guān)的信息。
二、軟件危機的本質(zhì)難題
圖靈獎獲得者Fred Brooks在1987年所發(fā)表了一篇關(guān)于軟件工程的經(jīng)典論文——《沒(méi)有銀彈》。認為沒(méi)有任何一項技術(shù)或方法可以能讓軟件工程的生產(chǎn)力在十年內提高十倍。這篇經(jīng)典論文的核心論述通常被解釋為復雜的軟件工程問(wèn)題無(wú)法靠簡(jiǎn)單的答案來(lái)解決。而他的結論到目前為止是對的。
軟件危機的本質(zhì)難題在于軟件的體系結構和軟件的程序代碼數量。1、體系結構是指數據、算法、功能在軟件系統中的連接形式,盡管數據、算法、功能本身是精確的,但是其連接形式是多樣的,也就是說(shuō)每個(gè)構成成員,是通過(guò)多條路徑和其它成員連接的。比如ERP中庫存管理里的家電產(chǎn)品信息,會(huì )關(guān)聯(lián)到商業(yè)銷(xiāo)售、物流運輸等。
2、程序是完成一個(gè)功能所需要的邏輯過(guò)程的集合。程序代碼是記錄邏輯過(guò)程的符號。由于程序員自身的問(wèn)題,邏輯不清晰或者所使用符號的不準確,將導致程序存在“BUG”。代碼的數量越多,隱藏的“BUG”就越多。
三、只有采用革命性的方法才有解決軟件危機的可能
以軟件工程為核心的傳統軟件開(kāi)發(fā)方法,經(jīng)過(guò)幾十年的發(fā)展,已經(jīng)達到了一定的高度,而且也出現了大量的創(chuàng )新方法和思想。比如高級語(yǔ)言的出現,面向對象編程,圖形化編程,程序驗證,構件技術(shù),UML,MDA,SOA,敏捷開(kāi)發(fā)等等。
1、Model Driven Architecture 模型驅動(dòng)架構
UML是MDA所使用的關(guān)鍵技術(shù),任何使用MDA創(chuàng )建的應用程序都基于標準化的,與平臺無(wú)關(guān)的UML模型。這樣,就意味著(zhù)應用程序被定義為與平臺無(wú)關(guān),所以這樣的應用程序就是可移植的。這很容易讓人想到Java所宣稱(chēng)的“write once run anywhere”,試圖去構建一個(gè)平臺無(wú)關(guān)的框架,如Swing UI庫。但是這種想法必須在性能和平臺集成上作出折衷,而在過(guò)去這種折衷是很多產(chǎn)品失敗的根源,由于這些失敗,業(yè)界仍然非常懷疑MDA的宣言。
2、敏捷開(kāi)發(fā)
AM是一種態(tài)度,而不是一個(gè)說(shuō)明性的過(guò)程。AM是敏捷建模者們堅持的價(jià)值觀(guān)、敏捷建模者們相信的原則、敏捷建模者們應用的實(shí)踐組成的集合。 AM描述了一種建模的風(fēng)格。當它應用于敏捷的環(huán)境中時(shí),能夠提高開(kāi)發(fā)的質(zhì)量和速度,同時(shí)能夠避免過(guò)度簡(jiǎn)化和不切實(shí)際的期望。
AM是對已有方法的補充,而不是一個(gè)完整的方法論。
AM并不是要反對文檔。文檔的創(chuàng )建和維護都會(huì )增大項目涉眾的投資。敏捷文檔盡可能的簡(jiǎn)單,盡可能的小,目的只集中在和目前開(kāi)發(fā)的系統有直接關(guān)系的事情上,充分了解受眾的需要。
AM也不是要反對CASE工具。敏捷建模者使用那些能夠幫助開(kāi)發(fā)人員提高效果,提升價(jià)值的工具。而且,他們還盡力使用那些能夠勝任工作的最簡(jiǎn)單的工具。
一直以來(lái),國外優(yōu)秀的軟件工程師和軟件研究人員殫盡竭慮,尋找提高軟件開(kāi)發(fā)效率的方法和思想。然而這些優(yōu)秀的方法仍然無(wú)法解決軟件危機難題。由此可見(jiàn),如果只在傳統的軟件開(kāi)發(fā)思想上進(jìn)行創(chuàng )新,將很難找到解決軟件危機的“銀彈”。只有在思想上發(fā)生革命性的改變,才有可能尋找到解決“軟件危機”的根本方法。
四、FO方法的幾個(gè)假設條件
FO軟件編程思想是北京乾坤化物數字技術(shù)有限公司經(jīng)過(guò)8年的探索實(shí)踐而提出來(lái)的。這是一個(gè)哲學(xué)和技術(shù)相結合的范例。FO軟件開(kāi)發(fā)方法是建立在以下的幾個(gè)假設之上的:
1、軟件的復雜度是可以通過(guò)軟件的體系架構來(lái)描述的,任何體系架構是可以通過(guò)維來(lái)構建的。
2、任何一個(gè)復雜的用戶(hù)需求都是分解的,我們把不能再分解的構成部分叫“對象”
3、任何一個(gè)對象包含而且必須包含兩個(gè)部分,即對象的外部屬性和對象的內部屬性。
4、對象的連接方式即結構,就是該用戶(hù)需求的體系架構。
五、FO軟件開(kāi)發(fā)方法
1、什么是FO軟件開(kāi)發(fā)方法
FO軟件開(kāi)發(fā)方法是以哲學(xué)方法論為指導的新一代軟件開(kāi)發(fā)方法。包含三個(gè)部分,即面向事實(shí)的分析(Fact-Oriented Analysis)、面向結構的設計(Frame-Oriented Design)、面向形式的編程(Form-Oriented Programming)。
(1)面向事實(shí)的分析。把客戶(hù)需求當成存在的事實(shí),采用哲學(xué)的方法進(jìn)行分析。比如“教育云”的客戶(hù)需求就是把現實(shí)中的教育體系模擬出來(lái),我們采用哲學(xué)的方法來(lái)進(jìn)行分析,首先按照行政區域分解,全球,中國,省,地級城市,縣、鄉鎮、村。然后以一個(gè)具體的地區來(lái)分析,比如東莞市,包含教育門(mén)戶(hù),教育軟件功能服務(wù),教育工具等。不能再進(jìn)行分解的實(shí)體就是對象。對象包含內部特性——形式,和外部特性——配置兩部分。
(2)面向結構的設計。把上述分析過(guò)程中得到的對象的連接形式整理出來(lái),并采用維的方式表述。這樣就得到了軟件的體系結構。比如地名維,欄目維,分類(lèi)維等。
(3)面向形式的編程。對形式部分編寫(xiě)程序代碼,即得到一個(gè)無(wú)具體含義的功能模塊。該模塊和配置(描述參數)結合,就得到一個(gè)對象。
2、軟件產(chǎn)品的構成
按照FO軟件開(kāi)發(fā)方法的規則,軟件包括四部分:數據,功能模塊,表現程序,連接方式(體系結構)。
在傳統的軟件開(kāi)發(fā)方法里,軟件由數據、程序兩部分組成,廣義上講,相關(guān)文檔也可以作為軟件的一部分。
比較這兩個(gè)方法,在FO方法里,軟件=功能模塊+表現程序+連接方式(體系結構),變?yōu)槿齻€(gè)獨立的部分。
六、在教育云CMS系統中的應用
目前在教育云的CMS系統里,已經(jīng)完成了10個(gè)功能系統的開(kāi)發(fā),未來(lái)將擴充到幾十個(gè)甚至幾百個(gè)系統。
教育云里的CMS系統是采用FO方法開(kāi)發(fā)的,數據、功能模塊的設計和行業(yè)應用類(lèi)型無(wú)關(guān),也與平臺無(wú)關(guān)。是按照軟件工廠(chǎng)的標準來(lái)設計的。
這種方式的最大特點(diǎn)是系統開(kāi)發(fā)效率高,維護效率高。比如在內容發(fā)布管理系統里,10個(gè)不同系統使用的是同樣的功能模塊,也就是說(shuō)只使用了幾百行代碼,就開(kāi)發(fā)了10個(gè)不同需求的內容管理系統。未來(lái)增加的幾百個(gè)系統,使用的代碼仍然是這幾百行,而采用傳統的軟件開(kāi)發(fā)方法,這幾百個(gè)系統則可能需要幾十萬(wàn)行代碼。
代碼減少的原因如下:
1、數據表設計的規范化。按照同構群的方式來(lái)設計數據表,把表里的字段分為文本類(lèi)、數字類(lèi)、日期類(lèi)、邏輯類(lèi)等。每種類(lèi)是由包含0個(gè)以上字段構成的集合。利用同構群的特性,只要是內容發(fā)布管理,就屬于同構群的一個(gè),其處理方法是完全相同的。
集合S={文本類(lèi)、數字類(lèi)、日期類(lèi)、邏輯類(lèi)}和對這些字段的處理運算構成了一個(gè)群G。
2、采用非線(xiàn)性邏輯單元構造方式來(lái)設計功能模塊。一個(gè)功能模塊是有一系列邏輯單元按照一定的排列順序構成的。如下圖所示,對于一個(gè)指定的功能模塊來(lái)說(shuō),存在至少一個(gè)以上的獨立邏輯單元入口,每個(gè)邏輯單元入口就規定了一個(gè)運算路徑。同一層面的邏輯結點(diǎn)的排列順序可能有時(shí)序要求或者沒(méi)有時(shí)序要求。
采用傳統的軟件開(kāi)發(fā)方法開(kāi)發(fā)下圖所示的功能模塊時(shí),開(kāi)發(fā)商無(wú)法預先知道功能模塊的實(shí)際模樣,因為不同的軟件工程師,或者同一個(gè)軟件工程師在不同的時(shí)間段,編寫(xiě)的軟件代碼是不同的。也就是說(shuō)無(wú)法得到一個(gè)基本規范的軟件程序。
FO軟件開(kāi)發(fā)方法采用非線(xiàn)性方式,對功能模塊的邏輯單元進(jìn)行分析處理,沿邏輯單元的路徑獨立編寫(xiě)代碼,最后根據需要排列第一層邏輯結點(diǎn)位置,就得到了功能模塊。
按照FO開(kāi)發(fā)方法,如果最小邏輯單元所完成的功能相同,那么其代碼也是一樣的,也就是說(shuō)在最小的邏輯單元層面,代碼是完全共用的。
七、FO軟件開(kāi)發(fā)方法的意義
在8年的實(shí)踐應用里,通過(guò)不斷摸索調整,FO軟件開(kāi)發(fā)方法已經(jīng)基本成型,并在一些具體應用中得到驗證。在云計算時(shí)代,面對社會(huì )需求的重大改變以及更加殘酷的IT技術(shù)競爭,FO方法的推廣應用將具有一定的積極意義。
1、在基本上由國外控制核心技術(shù)的IT領(lǐng)域,出現了具有完全自主知識產(chǎn)權的軟件開(kāi)發(fā)方法,對提高國內企業(yè)的競爭力具有積極地推動(dòng)意義。
2、由于解決了軟件危機的本質(zhì)難題,極大地提高了軟件開(kāi)發(fā)速度,為解決巨復雜軟件需求提供了保證,因此為加快“復雜系統”的應用起到一定的推動(dòng)作用。
此文是中國嵌入式系統產(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ì )的豋記。謝謝!
評論