新聞中心

        EEPW首頁 > 嵌入式系統 > 業界動態 > FO開發,一種解決軟件危機的創新方法

        FO開發,一種解決軟件危機的創新方法

        作者:北京乾坤化物數字技術有限公司總經理 趙文銀 時間:2022-12-13 來源:電子產品世界 收藏

        一、,云計算時代無法回避的問題

        本文引用地址:http://www.104case.com/article/202212/441578.htm

        1、背景介紹

        60年代中期,大容量、高速度計算機的出現,使計算機的應用范圍迅速擴大,軟件開發急劇增長。高級語言開始出現;操作系統的發展引起了計算機應用方式的變化;大量數據處理導致第一代數據庫管理系統的誕生。軟件系統的規模越來越大,復雜程度越來越高,軟件可靠性問題也越來越突出。原來的個人設計、個人使用的方式不再能滿足要求,迫切需要改變軟件生產方式,提高軟件生產率,開始爆發。

        1968北大西洋公約組織的計算機科學家在聯邦德國召開國際會議,第一次討論問題,并正式提出一個新的名詞:軟件工程從此出現了一門新興的工程學科——軟件工程學,目的就是研究和克服軟件危機。

        2、軟件工程不能解決軟件危機

        剛開始的時候,軟件工程的確解決了一些問題。

        然而進入上世紀80年代以后,盡管軟件工程研究與實踐取得了較大的成就,軟件技術水平有了長足的進展,但是軟件生產水平依然遠遠落后于硬件生產水平的發展速度。當需求比較復雜的時候,軟件工程本身也出現了危機。比如當一個需求需要1億個模塊的時候,缺乏必要的文檔資料或者文檔資料不合格,將給軟件開發和維護帶來許多嚴重的困難和問題。

        3、云計算必須面對“軟件危機”

        軟件開發商很少提“軟件危機”的事情,架構設計師根據用戶的需求,制定出開發方案后,軟件人員只需要按照要求編寫代碼就可以了。事實上國內的很多軟件人員好象不知道有“軟件危機”這回事。

        傳統的軟件開發可以回避談論“軟件危機”,畢竟是一個簡單的系統,比如ERP,也只是一個簡單系統,即便出現軟件危機,影響也不會太大,最多是影響一個大型企業。

        然而開發云計算產品的時候,軟件危機就成了繞不過去的坎了。同樣是提供企業資源管理服務,影響的就不是一個企業,也是很多的企業,以及和這些企業相關聯的政府部門,比如稅務局、工商局、商業局、統計局等,因為這些部門從企業的“數據云”里獲得相關的信息。

        二、軟件危機的本質難題

        圖靈獎獲得者Fred Brooks1987年所發表一篇關于軟件工程的經典論文——《沒有銀彈》。認為沒有任何一項技術或方法可以能讓軟件工程的生產力在十年內提高十倍。這篇經典論文的核心論述通常被解釋為復雜的軟件工程問題無法靠簡單的答案來解決。而他的結論到目前為止是對的。

        軟件危機的本質難題在于軟件的體系結構和軟件的程序代碼數量。1、體系結構是指數據、算法、功能在軟件系統中的連接形式,盡管數據、算法、功能本身是精確的,但是其連接形式是多樣的,也就是說每個構成成員,是通過多條路徑和其它成員連接的。比如ERP中庫存管理里的家電產品信息,會關聯到商業銷售、物流運輸等。

        image.png

        2、程序是完成一個功能所需要的邏輯過程的集合。程序代碼是記錄邏輯過程的符號。由于程序員自身的問題,邏輯不清晰或者所使用符號的不準確,將導致程序存在“BUG”。代碼的數量越多,隱藏的“BUG”就越多。

        三、只有采用革命性的方法才有解決軟件危機的可能

        以軟件工程為核心的傳統軟件開發方法,經過幾十年的發展,已經達到了一定的高度,而且也出現了大量的創新方法和思想。比如高級語言的出現,面向對象編程,圖形化編程,程序驗證,構件技術,UMLMDASOA,敏捷開發等等。

        1Model Driven Architecture 模型驅動架構

        UMLMDA所使用的關鍵技術,任何使用MDA創建的應用程序都基于標準化的,平臺無關的UML模型。這樣,就意味著應用程序被定義為平臺無關,所以這樣應用程序就是可移植的。這很容易讓人想到Java所宣稱的“write once run anywhere”,試圖去構建一個平臺無關的框架,如Swing UI。但是這種想法必須在性能和平臺集成上作出折衷,在過去這種折衷是很多產品失敗的根源,由于這些失敗,業界仍然非常懷疑MDA的宣言。

        2、敏捷開發

        AM是一種態度,而不是一個說明性的過程。AM是敏捷建模者們堅持的價值觀、敏捷建模者們相信的原則、敏捷建模者們應用的實踐組成的集合。 AM描述了一種建模的風格。當它應用于敏捷的環境中時,能夠提高開發的質量和速度,同時能夠避免過度簡化和不切實際的期望。

        AM是對已有方法的補充,而不是一個完整的方法論。

        AM并不是要反對文檔。文檔的創建和維護都會增大項目涉眾的投資。敏捷文檔盡可能的簡單,盡可能的小,目的只集中在和目前開發的系統有直接關系的事情上,充分了解受眾的需要。

        AM也不是要反對CASE工具。敏捷建模者使用那些能夠幫助開發人員提高效果,提升價值的工具。而且,他們還盡力使用那些能夠勝任工作的最簡單的工具。

        一直以來,國外優秀的軟件工程師和軟件研究人員殫盡竭慮,尋找提高軟件開發效率的方法和思想。然而這些優秀的方法仍然無法解決軟件危機難題。由此可見,如果只在傳統的軟件開發思想上進行創新,將很難找到解決軟件危機的“銀彈”。只有在思想上發生革命性的改變,才有可能尋找到解決“軟件危機”的根本方法。

        四、FO方法的幾個假設條件

        FO軟件編程思想是北京乾坤化物數字技術有限公司經過8年的探索實踐提出來的。這是一個哲學和技術相結合的范例。FO軟件開發方法是建立在以下的幾個假設之上的:

        1、軟件的復雜度是可以通過軟件的體系架構來描述的,任何體系架構是可以通過維來構建的。

        2、任何一個復雜的用戶需求都是分解的,我們把不能再分解的構成部分叫“對象”

        3、任何一個對象包含而且必須包含兩個部分,即對象的外部屬性和對象的內部屬性。

        4、對象的連接方式即結構,就是該用戶需求的體系架構。

        五、FO軟件開發方法

        1、什么是FO軟件開發方法

        FO軟件開發方法是以哲學方法論為指導的新一代軟件開發方法。包含三個部分,即面向事實的分析(Fact-Oriented Analysis)、面向結構的設計(Frame-Oriented Design)、面向形式的編程(Form-Oriented Programming)

        (1)面向事實的分析。把客戶需求當成存在的事實,采用哲學的方法進行分析。比如“教育云”的客戶需求就是把現實中的教育體系模擬出來,我們采用哲學的方法來進行分析,首先按照行政區域分解,全球,中國,省,地級城市,縣、鄉鎮、村。然后以一個具體的地區來分析,比如東莞市,包含教育門戶,教育軟件功能服務,教育工具等。不能再進行分解的實體就是對象。對象包含內部特性——形式,和外部特性——配置兩部分。

        (2)面向結構的設計。把上述分析過程中得到的對象的連接形式整理出來,并采用維的方式表述。這樣就得到了軟件的體系結構。比如地名維,欄目維,分類維等。

        (3)面向形式的編程。對形式部分編寫程序代碼,即得到一個無具體含義的功能模塊。該模塊和配置(描述參數)結合,就得到一個對象。

        2、軟件產品的構成

        按照FO軟件開發方法的規則,軟件包括四部分:數據,功能模塊,表現程序,連接方式(體系結構)。

        在傳統的軟件開發方法里,軟件由數據、程序兩部分組成,廣義上講,相關文檔也可以作為軟件的一部分。

        比較這兩個方法,在FO方法里,軟件=功能模塊+表現程序+連接方式(體系結構),變為三個獨立的部分。

        六、在教育云CMS系統中的應用

        目前在教育云的CMS系統里,已經完成了10個功能系統的開發,未來將擴充到幾十個甚至幾百個系統。

        教育云里的CMS系統是采用FO方法開發的,數據、功能模塊的設計和行業應用類型無關,也與平臺無關。是按照軟件工廠的標準來設計的。

        這種方式的最大特點是系統開發效率高,維護效率高。比如在內容發布管理系統里,10個不同系統使用的是同樣的功能模塊,也就是說只使用了幾百行代碼,就開發了10個不同需求的內容管理系統。未來增加的幾百個系統,使用的代碼仍然是這幾百行,而采用傳統的軟件開發方法,這幾百個系統則可能需要幾十萬行代碼。

        代碼減少的原因如下:

        1、數據表設計的規范化。按照同構群的方式來設計數據表,把表里的字段分為文本類、數字類、日期類、邏輯類等。每種類是由包含0個以上字段構成的集合。利用同構群的特性,只要是內容發布管理,就屬于同構群的一個,其處理方法是完全相同的。

        集合S={文本類、數字類、日期類、邏輯類}和對這些字段的處理運算構成了一個群G

        2、采用非線性邏輯單元構造方式來設計功能模塊。一個功能模塊是有一系列邏輯單元按照一定的排列順序構成的。如下圖所示,對于一個指定的功能模塊來說,存在至少一個以上的獨立邏輯單元入口,每個邏輯單元入口就規定了一個運算路徑。同一層面的邏輯結點的排列順序可能有時序要求或者沒有時序要求。

        采用傳統的軟件開發方法開發下圖所示的功能模塊時,開發商無法預先知道功能模塊的實際模樣,因為不同的軟件工程師,或者同一個軟件工程師在不同的時間段,編寫的軟件代碼是不同的。也就是說無法得到一個基本規范的軟件程序。

        image.png

        FO軟件開發方法采用非線性方式,對功能模塊的邏輯單元進行分析處理,沿邏輯單元的路徑獨立編寫代碼,最后根據需要排列第一層邏輯結點位置,就得到了功能模塊。

        按照FO開發方法,如果最小邏輯單元所完成的功能相同,那么其代碼也是一樣的,也就是說在最小的邏輯單元層面,代碼是完全共用的。

        七、FO軟件開發方法的意義

        8年的實踐應用里,通過不斷摸索調整,FO軟件開發方法已經基本成型,并在一些具體應用中得到驗證。在云計算時代,面對社會需求的重大改變以及更加殘酷的IT技術競爭,FO方法的推廣應用將具有一定的積極意義。

        1、在基本上由國外控制核心技術的IT領域,出現了具有完全自主知識產權的軟件開發方法,對提高國內企業的競爭力具有積極地推動意義。

        2、由于解決了軟件危機的本質難題,極大地提高了軟件開發速度,為解決巨復雜軟件需求提供了保證,因此為加快“復雜系統”的應用起到一定的推動作用。

         

        此文是中國嵌入式系統產業聯盟網絡空間命運共同體研究會交流文

        愿意加入我們研究會和微信群進行共同研討的人士,可掃下面的網絡空間研究會微信群二維碼入和后補填入會豋記表。如您已是中國嵌入式系統產業聯盟理事或會員,只需掃研究會二維碼入群,聯盟秘書處就會為您辦加入研究會的豋記。謝謝! 

        1670911205337405.png




        關鍵詞: FO開發 軟件危機

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 如皋市| 烟台市| 舒城县| 邵东县| 广州市| 浑源县| 会理县| 迁西县| 东阳市| 东阿县| 荥阳市| 张家界市| 弥勒县| 建湖县| 苏尼特右旗| 从江县| 鲁甸县| 乐山市| 双流县| 那坡县| 新蔡县| 湖州市| 嘉善县| 秦安县| 沙湾县| 开平市| 霍林郭勒市| 达日县| 扶绥县| 巴林右旗| 昭觉县| 西乌珠穆沁旗| 库车县| 霍邱县| 稻城县| 酉阳| 黎城县| 洛阳市| 湖北省| 陆川县| 晋宁县|