原文地址:http://blog.csdn.net/emag_se/archive/2005/03/05/312317.aspx
1.世界上第一個電腦程式員
第一個寫軟體的人是Ada(Augusta Ada Lovelace),在1860年代她嘗試為 Babbage(Charles Babbage)的機械式電腦寫軟體。儘管他們的努力失敗了,但他們的名字永遠載入了電腦發展的史冊。她的父親就是那個狂熱的,不趨炎附勢的激進詩人和冒險家拜倫。她本身也是一個光彩照人的人物—數學尖子和某種程度上的賭徒。她最重要的貢獻來自於與發明家Charles Babbage的合作,從而設計出世界上首批大型電腦—Difference Engine和Analytical Engine。她甚至認為如果有正確的指令,Babbage的機器可以用來作曲,這是一個多麼瘋狂的想法,因為當時大多數人只把它看成是一個機械化算盤,而她卻有渲染力和感召力來傳播她的思想。
2.現代電腦軟體的出現
20世紀50年代,軟體伴隨著第一台電子電腦的問世誕生了。以寫軟體為職業的人也開始出現,他們多是經過訓練的數學家和電子工程師。1960年代美國大學裡開始出現授予電腦專業的學位,教人們寫軟體。
在電腦系統發展的初期,硬體通常用來執行一個單一的程式,而這個程式又是為一個特定的目的而編製的。早期當通用硬體成為平常事情的時候,軟體的通用性卻是很有限的。大多數軟體是由使用該軟體的個人或機構研製的,軟體往往帶有強烈的個人色彩。早期的軟體開發也沒有什麼系統的方法可以遵循,軟體設計是在某個人的頭腦中完成的一個隱藏的過程。而且,除了原始碼往往沒有軟體說明書等文檔。
3.軟體危機
從60年代中期到70年代中期是電腦系統發展的第二個時期,在這一時期軟體開始作為一種產品被廣泛使用,出現了“軟體作坊”專職應別人的需求寫軟體。這一軟體開發的方法基本上仍然沿用早期的個體化軟體開發方式,但軟體的數量急劇膨脹,軟體需求日趨複雜,維護的難度越來越大,開發成本令人吃驚地高,而失敗的軟體開發項目卻屢見不鮮。“軟體危機”就這樣開始了!
“軟體危機”使得人們開始對軟體及其特性進行更深一步的研究,人們改變了早期對軟體的不正確看法。早期那些被認為是優秀的程式常常很難被別人看懂,通篇充滿了程式技巧。現在人們普遍認為優秀的程式除了功能正確,效能優良之外,還應該容易看懂、容易使用、容易修改和擴充。
1968年北大西洋公約組織的電腦科學家在聯邦德國召開的國際學術會議上第一次提出了“軟體危機”(software crisis)這個名詞。 概括來說,軟體危機包含兩方面問題:一、如何開發軟體,以滿足不斷增長,日趨複雜的需求;二、如何維護數量不斷膨脹的軟體產品。
4.軟體工程的提出
1968年秋季,NATO(北約)的科技委員會召集了近50名一流的編程人員、電腦科學家和工業界巨頭,討論和制定擺脫“軟體危機”的對策。在那次會議上第一次提出了軟體工程(software engineering)這個概念。
軟體工程是一門研究如何用系統化、正常化、數量化等工程原則和方法去進行軟體的開發和維護的學科。軟體工程包括兩方面內容:軟體開發技術和軟體專案管理。軟體開發技術包括軟體開發方法學、軟體工具和軟體工程環境。軟體專案管理包括軟體度量、項目估算、進度控制、人員組織、組態管理、專案計劃等。
5.傳統軟體工程
為迎接軟體危機的挑戰,人們進行了不懈的努力。這些努力大致上是沿著兩個方向同時進行的。
一是從管理的角度,希望實現軟體開發過程的工程化。這方面最為著名的成果就是提出了大家都很熟悉的“瀑布式”生命週期模型。它是在60年代末“軟體危機”後出現的第一個生命週期模型。如下所示:
分析 → 設計 → 編碼 → 測試 → 維護
後來,又有人針對該模型的不足,提出了快速原型法、螺旋模型、噴泉模型等對“瀑布式”生命週期模型進行補充。現在,它們在軟體開發的實踐中被廣泛採用。
這方面的努力,還使人們認識到了文檔的標準以及開發人員之間、開發人員與使用者之間的交流方式的重要性。一些重要文檔格式的標準被確定下來,包括變數、符號的命名規則以及原代碼的規範式。
軟體工程發展的第二個方向,側重與對軟體開發過程中分析、設計的方法的研究。這方面的重要成果就是在70年代風靡一時的結構化開發方法,即PO(面向過程的開發或結構化方法)以及結構化的分析、設計和相應的測試方法。
軟體工程的目標是研製開發與生產出具有良好的軟體品質和費用合算的產品。費用合算是指軟體開發啟動並執行整個開銷能滿足使用者要求的程度,軟體品質是指該軟體能滿足明確的和隱含的需求能力有關特徵和特性的總和。軟體品質可用六個特性來作評價,即功能性、可靠性、易使用性、效率、維護性、易移植性。
6.現代軟體工程
軟體不是純物化的東西,其中包含著人的因素,於是就有很多變動的東西,不可能像理想的物質生產過程,基於物理學等的原理來做。早期的軟體開發僅考慮人的因素,傳統的軟體工程強調物性的規律,現代軟體工程最根本的就是人跟物的關係,就是人和機器(工具、自動化)在不同層次的不斷迴圈發展的關係。
物件導向的分析、設計方法(OOA和OOD)的出現使傳統的開發方法發生了翻天覆地的變化。隨之而來的是物件導向建模語言(以UML為代表)、軟體複用、基於組件的軟體開發等新的方法和領域。
與之相應的是從企業管理的角度提出的軟體過程管理。即關注於軟體生存周期中所實施的一系列活動並通過過程度量、過程評價和流程改善等涉及對所建立的軟體過程及其執行個體進行不斷最佳化的活動使得軟體過程迴圈往複、螺旋上升式地發展。其中最著名的軟體過程成熟度等級模型是美國卡內基梅隆大學軟體工程研究所(SEI)建立的CMM(Capability Maturity Model),即能力成熟度等級模型。此模型在建立和發展之初,主要目的是為大型軟體項目的招投標活動提供一種全面而客觀的評審依據,而發展到後來,又同時被應用於許多軟體機構內部的流程改善活動中。
作者簡介:
網名:天地一沙鷗
複旦大學軟體工程實驗室
研究方向:軟體體繫結構、基於構件的軟體開發、組態管理、再工程