複製鏈接
請複製以下鏈接發送給好友

軟件生產

鎖定
軟件生產是知識密集型的智力活動,它是資金密集、勞動密集型工作,軟件項目中包含了許多極易出錯的手工勞動,例如編碼
中文名
軟件生產 [1] 
類    型
經濟術語
四種模式
1.程序設計模式
軟件生產的第一個時期可以説是自從有了計算機以後,一直到20世紀60年代中期以前的這段時期。在這個時期內,軟件生產的主要模式就是程序設計模式。我們知道,計算機的研製來源於龐大而複雜的數學計算,如第一台通用電子數字計算機“埃尼阿克”(ENIAC),它是由美國軍械部撥款研製的,其主要任務就是用於計算和分析炮彈軌道的。在這個時期,軟件的生產主要是基於機器語言彙編語言Fortran語言等編程語言為標誌的算法技術。那時,軟件的生產就是程序設計,由程序設計人員根據特定的要求,通過當時的編程語言提供的算法來編寫相應的程序的。以程序設計模式進行的軟件生產主要有以下一些特點:
(1)軟件的範疇主要是程序。在這種模式下生產的軟件主要就是程序,其中大部分是用來進行數學計算的程序。而且這些程序一般都沒有很好的數據結構,而是程序設計人員根據需要和相關語言提供的算法自由編寫的。
(2)軟件的編寫者和使用者往往為同一個或同一組人。在這個時期,計算機是作為某些特殊領域特殊人員的專用工具的,而這些特殊人員往往都是我們現在所説的領域專家,他們大都具有某些領域的專業知識,而且又需要進行復雜而又龐大的數學計算,於是他們藉助計算機及其語言,進而編寫出適合他們自己需要的程序,即軟件。
(3)軟件基本上都是專用軟件。在這個時期,由於軟件是使用者根據自身的需要而編寫的,只要能夠幫助他們達到目的即可。所以這樣的軟件往往沒有很好的結構和説明,別人看不懂,也不需要別人看得懂,它們往往只屬於個人或僅在少數一些人中間交流,因而不具有通用性,是專用的。(4)軟件的規模很小。由於這個時期的軟件主要就是程序,而且這些程序常常是領域專家為了解決某些特殊的需要而編寫的,如完成某一特殊的計算或算法等,所以這些軟件經常是小規模的,而且是輔助性的。它們僅是幫助領域專家完成某項工程的輔助部分而已。
2.軟件作坊模式
軟件生產的第二個時期是從20世紀60年代中期到70年代中期這段時間,這個時期又叫程序系統時期;而這個時期軟件生產的主要模式就是軟件作坊模式。
早在19世紀50年代,伴隨着第一台電子計算機的誕生和問世,以寫軟件為職業的人已經開始出現了,他們多是經過訓練的數學專家和電氣工程師。然而由於他們人數較少,所以無法構成當時社會軟件生產的主流。到了19世紀60年代,在美國的一些大學裏,開始出現了授予計算機專業學位,教導人們如何去寫軟件;與此同時,軟件的需求也越來越多,軟件開始作為一種產品被廣泛使用了,於是出現了“軟件作坊”。軟件作坊一般是由少數幾個或幾十個人組成的軟件生產團體,他們是專門應別人的要求而編寫軟件的。軟件作坊的出現,極大地推動了當時的軟件生產和發展,進一步確立了軟件作為獨立產業的基礎。然而無論從軟件生產的理論和方法上,軟件作坊並沒有為軟件生產提供什麼系統的方法來遵循,軟件作坊的生產仍然沿用早期的個體化軟件開發方式。這個時期的軟件設計仍然是在某個人頭腦中完成的一個隱蔽的過程,而且軟件開發以後,除了源代碼以外往往沒有軟件的説明書等文檔。以軟件作坊模式進行的軟件生產主要有以下一些特點:
(1)軟件的範疇是:程序+數據。在軟件作坊的生產模式下,軟件已經從早期的簡單的程序,轉換到軟件;程序+數據的模式。程序是按照事先設計的功能和性能要求執行的指令序列;而數據則是程序能正常操縱的數據結構
(2)軟件的編寫者和使用者已逐步分開。隨着軟件作坊的出現,軟件的使用者和軟件的編寫者已逐步的分開了。軟件作坊作為軟件的編寫單位獨立存在,應軟件的使用者的要求而編寫相應的軟件;而軟件的使用者則只需要向軟件作坊提出他們的要求和需要即可。
(3)軟件已經作為產品被廣泛使用。在這個時期,軟件已經成為一種產品了,就和其他的商業產品一樣,被廣泛地使用。軟件使用者向軟件作坊提出要求,並付出相應的價錢,由軟件作坊為他們定製特殊的軟件。這就是我們現在所説的軟件外包的最開始的雛形。
(4)出現了軟件危機。由於軟件作坊仍然沿用早期的個體化軟件開發方式,所以最後生產的軟件仍然是個人或少數幾個人的頭腦風暴的自由實現,充滿了各種別人無法理解的編程技巧;它們往往只具有源程序,而沒有相關的使用説明和各種文檔資料。這就造成軟件的可讀性和可維護性極差,即使是同一個人編寫的軟件在過一段時間之後,自己也無法讀懂。特別是後來,隨着軟件數量的急劇膨脹,軟件的需求越來越複雜,軟件維護的難度也越來越大,軟件開發的成本令人吃驚的高,從而導致越來越多的軟件開發項目失敗,於是產生了軟件危機。
3.軟件工程模式
軟件生產的第三個時期是從20世紀70年代中期之後開始的這段時間,也就是軟件工程模式時期。軟件工程的提出是為了解決軟件危機的。在1968年北大西洋公約組織的計算機科學家在聯邦德國召開的國際學術會議上第一次提出了“軟件危機”(SoftwareCrisis)這個名詞,指出軟件危機是在計算機軟件的開發和維護過程中所遇到的一系列嚴重問題;它主要包括2個方面,一是如何開發軟件來滿足不斷增長、日趨複雜的需求;二是如何維護數量不斷膨脹的軟件產品。軟件危機的出現,使得人們開始對軟件及其特性進行了更深一步的研究,人們改變了早期那些被認為是優秀的,但常常很難被別人看懂,通篇充滿了編程技巧的程序的看法;而普遍認為優秀的軟件除了功能正確、性能優良以外,還應該容易看懂、容易使用、容易修改和擴充。於是在1968年秋季,NATO(北大西洋公約組織)的科技委員會召集了近50名編程人員、計算機科學家和工業界巨頭,召開了一次學術會議,討論和制定擺脱“軟件危機”的對策,並第一次提出了軟件工程(SoftwareEngineering)這個概念。
軟件工程的提出,為人們提供了一種新的系統化規範化、數量化的工程原則和方法去進行軟件的開發和維護,使得人們越來越認識到,按照工程化的原則和方法來組織管理軟件的開發與維護工作,是擺脱軟件危機的一個主要出路。於是從20世紀70年代中期之後一直到現在,以軟件工程為指導思想的軟件工程模式逐漸成為軟件生產的主要模式。以軟件工程模式進行的軟件生產主要有以下一些特點:(1)軟件的範疇是:程序+數據+文檔。其中程序是按照事先設計的功能和性能要求執行的指令序列;數據是程序能正常操縱信息的數據結構;而文檔是與程序開發維護和使用有關的各種圖文文檔資料。
(2)軟件具有生命週期。軟件從提出需求到最後廢止不用,是有一個週期的。雖然説這個週期隨着行業領域和軟件技術的不同而有所不同,但從軟件的開發與維護過程來看,它們都會完成一個週期,經歷過類似的階段。即計劃時期(問題定義階段,可行性研究階段)、開發時期(需求分析階段,軟件設計階段,編碼階段,測試階段)、運行時期(維護階段)。
(3)以工程化的原理和方法來開發和維護軟件。軟件工程的提出為人們提供了一整套的原則和方法來開發和維護軟件,同時也指出軟件工程包括兩個部分,即軟件開發技術和軟件項目管理。軟件開發技術指的是軟件開發方法學、軟件工具和軟件工程環境;而軟件項目管理則是指軟件的度量、項目估算、進度控制、人員安排、配置管理和項目計劃等。
(4)軟件的分工越來越細,需要組織協作。從軟件的生命週期來看,軟件從開發到消亡包括3個時期8個階段,隨着軟件規模的不斷增大和軟件複雜度的急劇膨脹,每個階段都需要具有不同專長的人分工協作,才能得以完成。這將進一步導致軟件的分工越來越細,從而導致出現不同的IT專業從業人員。(5)軟件危機並沒有完全消除。軟件工程的出現,雖然説為消除軟件危機提供了一種新的系統的原理和方法,但它並不能完全消除軟件危機。統計數字表明,到目前為止雖然有很多成功的軟件項目,但也有許多軟件開發項目是失敗的。
4.軟件工廠模式
其實早在1968年伴隨着軟件工程的概念提出,軟件工廠的概念也幾乎在同時被提了出來,最早提出軟件工廠概念的可能就是R.W.Bemer了。他是基於通用電氣公司為了開發一種提高軟件工程師生產力的新的軟件開發模式而提出的。在他的軟件工廠的設計裏,通過使用標準化軟件生產工具、計算機接口和帶有歷史數據的數據庫組成的。而在1969年第一個標榜自己的軟件組織為軟件工廠的公司是日本的日立公司;但是到了1975年以後,軟件工廠的概念才開始逐漸在日本和歐美的一些公司得到發展,如日本的NEC東芝富士通三菱等公司。在此期間,軟件工程得到了快速的發展和提高,而軟件工廠大多都還處於探索和實踐階段,一直到最近幾年,隨着軟件外包的流行,軟件工廠才又被提到學者們和各大軟件公司的面前。筆者認為,軟件工廠主要有2種模式,一種是基於軟件開發的軟件工廠,而另外一種是基於軟件集成的全自動化的軟件工廠。
(1)基於軟件開發的軟件工廠
這種形式的軟件工廠是以軟件工程和軟件的生命週期作為軟件公司的管理和開發的指導思想,着重軟件的開發和管理。其最主要的體現在3個方面,(1)在公司的組織劃分和項目及人員管理上深入貫徹落實軟件工程思想,強調軟件開發的“工程”性,把軟件的設計、開發、測試、維護和管理當作一項系統工程來抓,表明軟件不僅僅是編寫代碼的工作,而需要各個學科的綜合應用和各部門團隊之間的通力合作,才能得以實現。(2)嚴格項目管理和改進軟件過程。承認軟件開發是具有相當風險的工作,為了降低風險,使項目能夠按照預定的成本、進度和質量順利完成,而對軟件開發的成本、人員、進度、質量和風險等進行科學地分析和管理,同時結合先進的管理軟件和工具軟件,如引進先進的國際管理標準ISO9000和CMM等,對公司的工作流程進行分析、整理、改進和完善,形成適合自己公司發展的軟件過程和相關文檔,並指導軟件項目的開發。(3)廣泛地使用軟件複用技術。在公司級別上建立軟件複用類庫,對各知識領域的可複用構件進行分類和提煉,並在全公司上下和各個項目之間廣泛推行和落實,從而提升各個團隊乃至整個公司的軟件生產質量和生產力。
(2)基於軟件集成的軟件工廠
以軟件集成為核心的軟件工廠,強調的是軟件“集成”。就像傳統行業的產品生產線一樣,軟件工廠拿到軟件需求,通過軟件的需求分析和設計,確定要達到相關功能和性能所需要的各種軟件構件,在軟件工廠的集成平台上通過集成而生產出符合用户要求的軟件,它是一個高度自動化的軟件生產模式。基於集成的軟件工廠,它的主要工作大致可以分為2個階段。第一個階段是軟件的需求分析和設計。在這一階段,軟件公司針對不同的軟件需求,集中公司的信息技術專家、管理專家、行業專家和項目開發人員組成項目組,對軟件的需求進行分析,設計出生產工藝方案,繼而按方案對所需要的軟件構件(中間件、模塊等)進行選型和配置。第二個階段是在軟件集成平台上對各種軟件構件進行組裝、集成和客户化,以最終生產出符合客户要求的軟件產品。由此可見,以集成為核心的軟件工廠,它不強調軟件的開發,或者説它不怎麼關心軟件的開發,而是通過使用各種軟件集成工具來搭建軟件集成平台,以領域標準和支持這些標準的領域中間件和構件為原料來實現軟件生產自動化的。 [1] 
參考資料