1、軟件及其特性
第一個(gè)寫軟件的人是Ada(Augusta Ada Lovelace),在1860年代他嘗試為Babbage(Charles Babbage)的機(jī)械式計(jì)算機(jī)寫軟件。盡管他們的努力失敗了,但他們的名字永遠(yuǎn)載入了計(jì)算機(jī)發(fā)展的史冊。
在1950年代,軟件伴隨著第一臺電子計(jì)算機(jī)的問世誕生了。以寫軟件為職業(yè)的人也開始出現(xiàn),他們多是經(jīng)過訓(xùn)練的數(shù)學(xué)家和電子工程師。1960年代美國大學(xué)里開始出現(xiàn)授予計(jì)算機(jī)專業(yè)的學(xué)位,教人們寫軟件。
本世紀(jì)中葉軟件產(chǎn)業(yè)從零開始起步,在短短的50年的時(shí)間里迅速發(fā)展成為推動人類社會發(fā)展的龍頭產(chǎn)業(yè),并造就了一批百萬、億萬富翁。隨著信息產(chǎn)業(yè)的發(fā)展,軟件對人類社會性越來越重要。
那么,如何給軟件定義哪?軟件是什么?
首先要說明的是,軟件對于人類而言是一個(gè)全新的東西,其發(fā)展歷史不過四、五十年。人們對軟件的認(rèn)識經(jīng)歷了一個(gè)由淺到深的過程。
在計(jì)算機(jī)系統(tǒng)發(fā)展的初期,硬件通常用來執(zhí)行一個(gè)單一的程序,而這個(gè)程序又是為一個(gè)特定的目的而編制的。早期當(dāng)通用硬件成為平常事情的時(shí)候,軟件的通用性卻是很有限的。大多數(shù)軟件是由使用該軟件的個(gè)人或機(jī)構(gòu)研制的,軟件往往帶有強(qiáng)烈的個(gè)人色彩。早期的軟件開發(fā)也沒有什么系統(tǒng)的方法可以遵循,軟件設(shè)計(jì)是在某個(gè)人的頭腦中完成的一個(gè)隱藏的過程。而且,除了源代碼往往沒有軟件說明書等文檔。
從60年代中期到70年代中期是計(jì)算機(jī)系統(tǒng)發(fā)展的第二個(gè)時(shí)期,在這一時(shí)期軟件開始作為一種產(chǎn)品被廣泛使用,出現(xiàn)了“軟件作坊”專職應(yīng)別人的需求寫軟件。這一軟件開發(fā)的方法基本上仍然沿用早期的個(gè)體化軟件開發(fā)方式,但軟件的數(shù)量急劇膨脹,軟件需求日趨復(fù)雜,維護(hù)的難度越來越大,開發(fā)成本令人吃驚地高,而失敗的軟件開發(fā)項(xiàng)目卻屢見不鮮?!败浖C(jī)”就這樣開始了!
“軟件危機(jī)”使得人們開始對軟件及其特性進(jìn)行更深一步的研究,人們改變了早期對軟件的不正確看法。早期那些被認(rèn)為是優(yōu)秀的程序常常很難被別人看懂,通篇充滿了程序技巧?,F(xiàn)在人們普遍認(rèn)為優(yōu)秀的程序除了功能正確,性能優(yōu)良之外,還應(yīng)該容易看懂、容易使用、容易修改和擴(kuò)充。
現(xiàn)在,被普遍接受的軟件的定義是:
軟件(software)是計(jì)算機(jī)系統(tǒng)中與硬件(hardware)相互依存的另一部分,它包括程序(program)、相關(guān)數(shù)據(jù)(data)及其說明文檔(document)。
其中程序是按照事先設(shè)計(jì)的功能和性能要求執(zhí)行的指令序列;數(shù)據(jù)是是程序能正常操縱信息的數(shù)據(jù)結(jié)構(gòu);文檔是與程序開發(fā)維護(hù)和使用有關(guān)的各種圖文資料。
軟件同傳統(tǒng)的工業(yè)產(chǎn)品相比,有其獨(dú)特的特性:
1)軟件是一種邏輯實(shí)體,具有抽象性。這個(gè)特點(diǎn)使它與其它工程對象有著明顯的差異。人們可以把它記錄在紙上、內(nèi)存、和磁盤、光盤上,但卻無法看到軟件本身的形態(tài),必須通過觀察、分析、思考、判斷,才能了解它的功能、性能等特性。
2)軟件沒有明顯的制造過程。一旦研制開發(fā)成功,就可以大量拷貝同一內(nèi)容的副本。所以對軟件的質(zhì)量控制,必須著重在軟件開發(fā)方面下工夫。
3)軟件在使用過程中,沒有磨損、老化的問題。軟件在生存周期后期不會因?yàn)槟p而老化,但會為了適應(yīng)硬件、環(huán)境以及需求的變化而進(jìn)行修改,而這些修改有不可避免的引入錯(cuò)誤,導(dǎo)致軟件失效率升高,從而似的軟件退化。當(dāng)修改的成本變得難以接受時(shí),軟件就被拋棄。
4)軟件對硬件和環(huán)境有著不同程度的依賴性。這導(dǎo)致了軟件移植的問題。
5)軟件的開發(fā)至今尚未完全擺脫手工作坊式的開發(fā)方式,生產(chǎn)效率低。
6)軟件是復(fù)雜的,而且以后會更加復(fù)雜。軟件是人類有史以來生產(chǎn)的復(fù)雜度最高的工業(yè)產(chǎn)品。軟件涉及人類社會的各行各業(yè)、方方面面,軟件開發(fā)常常涉及其它領(lǐng)域的專門知識,這對軟件工程師提出了很高的要求。
7)軟件的成本相當(dāng)昂貴。軟件開發(fā)需要投入大量、高強(qiáng)度的腦力勞動,成本非常高,風(fēng)險(xiǎn)也大?,F(xiàn)在軟件的開銷已大大超過了硬件的開銷。 [NextPage]
8)軟件工作牽涉到很多社會因素。許多軟件的開發(fā)和運(yùn)行涉及機(jī)構(gòu)、體制和管理方式等問題,還會設(shè)計(jì)到人們的觀念和心理。這些人的因素,常常成為軟件開發(fā)的困難所在,直接影響到項(xiàng)目的成敗。
2、軟件危機(jī)及其原因
軟件危機(jī)指的是在計(jì)算機(jī)軟件的開發(fā)和維護(hù)過程中所遇到的一系列嚴(yán)重問題。
1968年北大西洋公約組織的計(jì)算機(jī)科學(xué)家在聯(lián)邦德國召開的國際學(xué)術(shù)會議上第一次提出了“軟件危機(jī)”(software crisis)這個(gè)名詞。
概括來說,軟件危機(jī)包含兩方面問題:一、如何開發(fā)軟件,以滿足不斷增長,日趨復(fù)雜的需求;二、如何維護(hù)數(shù)量不斷膨脹的軟件產(chǎn)品。
具體地說,軟件危機(jī)主要有以下表現(xiàn):
?。?)對軟件開發(fā)成本和進(jìn)度的估計(jì)常常不準(zhǔn)確。開發(fā)成本超出預(yù)算,實(shí)際進(jìn)度比預(yù)定計(jì)劃一再拖延的現(xiàn)象并不罕見。
?。?)用戶對“已完成”系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。
(3)軟件產(chǎn)品的質(zhì)量往往靠不住。Bug一大堆,Patch一個(gè)接一個(gè)。
(4)軟件的可維護(hù)程度非常之低。
?。?)軟件通常沒有適當(dāng)?shù)奈臋n資料。
?。?)軟件的成本不斷提高。
?。?)軟件開發(fā)生產(chǎn)率的提高趕不上硬件的發(fā)展和人們需求的增長。
軟件危機(jī)的原因,一方面是與軟件本身的特點(diǎn)有關(guān);另一方面是由軟件開發(fā)和維護(hù)的方法不正確有關(guān)。
軟件的特點(diǎn)前面已經(jīng)有一個(gè)簡單介紹。軟件開發(fā)和維護(hù)的不正確方法主要表現(xiàn)為忽視軟件開發(fā)前期的需求分析;開發(fā)過程沒有統(tǒng)一的、規(guī)范的方法論的指導(dǎo),文檔資料不齊全,忽視人與人的交流;忽視測試階段的工作,提交用戶的軟件質(zhì)量差;輕視軟件的維護(hù)。這些大多數(shù)都是軟件開發(fā)過程管理上的原因。
3、軟件工程
1968年秋季,NATO(北約)的科技委員會召集了近50名一流的編程人員、計(jì)算機(jī)科學(xué)家和工業(yè)界巨頭,討論和制定擺脫“軟件危機(jī)”的對策。在那次會議上第一次提出了軟件工程(software engineering)這個(gè)概念。到今年(1998),軟件工程整整走過了30年的歷程。
在這30年的發(fā)展中,人們針對軟件危機(jī)的表現(xiàn)和原因,經(jīng)過不斷的實(shí)踐和總結(jié),越來越認(rèn)識到:按照工程化的原則和方法組織軟件開發(fā)工作,是擺脫軟件危機(jī)的一個(gè)主要出路。
今天,盡管“軟件危機(jī)”并未被徹底解決,但軟件工程30年的發(fā)展仍可以說是碩果累累。
下面我們給出一個(gè)軟件工程的定義,然后簡單討論一下軟件工程所包括的內(nèi)容:
軟件工程是一門研究如何用系統(tǒng)化、規(guī)范化、數(shù)量化等工程原則和方法去進(jìn)行軟件的開發(fā)和維護(hù)的學(xué)科。
軟件工程包括兩方面內(nèi)容:軟件開發(fā)技術(shù)和軟件項(xiàng)目管理。
軟件開發(fā)技術(shù)包括軟件開發(fā)方法學(xué)、軟件工具和軟件工程環(huán)境。
軟件項(xiàng)目管理包括軟件度量、項(xiàng)目估算、進(jìn)度控制、人員組織、配置管理、項(xiàng)目計(jì)劃等。
統(tǒng)計(jì)數(shù)據(jù)表明,大多數(shù)軟件開發(fā)項(xiàng)目的失敗,并不是由于軟件開發(fā)技術(shù)方面的原因。它們的失敗是由于不適當(dāng)?shù)墓芾碓斐傻?。遺憾的是,盡管人們對軟件項(xiàng)目管理重要性的認(rèn)識有所提高,但在軟件管理方面的進(jìn)步遠(yuǎn)比在設(shè)計(jì)方法學(xué)和實(shí)現(xiàn)方法學(xué)上的進(jìn)步小,至今還提不出一套管理軟件開發(fā)的通用指導(dǎo)原則。










