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