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