軟體生產
出自 MBA智库百科(https://wiki.mbalib.com/)
目錄 |
軟體生產是知識密集型的智力活動,它是資金密集、勞動密集型工作,軟體項目中包含了許多極易出錯的手工勞動,例如編碼。
軟體生產的四種模式[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個階段。第一個階段是軟體的需求分析和設計。在這一階段,軟體公司針對不同的軟體需求,集中公司的信息技術專家、管理專家、行業專家和項目開發人員組成項目組,對軟體的需求進行分析,設計出生產工藝方案,繼而按方案對所需要的軟體構件(中間件、模塊等)進行選型和配置。第二個階段是在軟體集成平臺上對各種軟體構件進行組裝、集成和客戶化,以最終生產出符合客戶要求的軟體產品。由此可見,以集成為核心的軟體工廠,它不強調軟體的開發,或者說它不怎麼關心軟體的開發,而是通過使用各種軟體集成工具來搭建軟體集成平臺,以領域標準和支持這些標準的領域中間件和構件為原料來實現軟體生產自動化的。
- ↑ 周傳生.探究軟體生產的四種模式[J].沈陽師範大學學報:自然科學版.2005,4