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










