1. 程式人生 > >a report about the history of pragrem

a report about the history of pragrem

第一個寫軟體的人是Ada(Augusta Ada Lovelace),在1860年代她嘗試為 Babbage(Charles Babbage)的機械式計算機寫軟體。儘管他們的努力失敗了,但他們的名字永遠載入了計算機發展的史冊。她的父親就是那個狂熱的,不趨炎附勢的激進詩人和冒險家拜倫。她本身也是一個光彩照人的人物—數學尖子和某種程度上的賭徒。她最重要的貢獻來自於與發明家Charles Babbage的合作,從而設計出世界上首批大型計算機—Difference Engine和Analytical Engine。她甚至認為如果有正確的指令,Babbage的機器可以用來作曲,這是一個多麼瘋狂的想法,因為當時大多數人只把它看成是一個機械化算盤,而她卻有渲染力和感召力來傳播她的思想。
20世紀50年代,軟體伴隨著第一臺電子計算機的問世誕生了。

也誕生了第一次分離:主程式和子程式的分離

程式結構模型是樹狀模型,子程式可先於主程式編寫。

通過使用庫函式來簡化程式設計,實現最初的程式碼重用。

產生基本的軟體開發過程:分析—設計—編碼—測試,使大型軟體系統的開發成為可能

以寫軟體為職業的人也開始出現,他們多是經過訓練的數學家和電子工程師。1960年代美國大學裡開始出現授予計算機專業的學位,教人們寫軟體。

在計算機系統發展的初期,硬體通常用來執行一個單一的程式,而這個程式又是為一個特定的目的而編制的。早期當通用硬體成為平常事情的時候,軟體的通用性卻是很有限的。大多數軟體是由使用該軟體的個人或機構研製的,軟體往往帶有強烈的個人色彩。早期的軟體開發也沒有什麼系統的方法可以遵循,軟體設計是在某個人的頭腦中完成的一個隱藏的過程。而且,除了原始碼往往沒有軟體說明書等文件。

60年代中期到70年代中期是計算機系統發展的第二個時期,在這一時期軟體開始作為一種產品被廣泛使用,出現了“軟體作坊”專職應別人的需求寫軟體。這一軟體開發的方法基本上仍然沿用早期的個體化軟體開發方式,但軟體的數量急劇膨脹,軟體需求日趨複雜,維護的難度越來越大,開發成本令人吃驚地高,而失敗的軟體開發專案卻屢見不鮮。“軟體危機”就這樣開始了!

“軟體危機”使得人們開始對軟體及其特性進行更深一步的研究,人們改變了早期對軟體的不正確看法。早期那些被認為是優秀的程式常常很難被別人看懂,通篇充滿了程式技巧。現在人們普遍認為優秀的程式除了功能正確,效能優良之外,還應該容易看懂、容易使用、容易修改和擴充。
1968年

北大西洋公約組織的電腦科學家在聯邦德國召開的國際學術會議上第一次提出了“軟體危機”(software crisis)這個名詞。 概括來說,軟體危機包含兩方面問題:一、如何開發軟體,以滿足不斷增長,日趨複雜的需求;二、如何維護數量不斷膨脹的軟體產品。
為迎接軟體危機的挑戰,人們進行了不懈的努力。這些努力大致上是沿著兩個方向同時進行的。

一是從管理的角度,希望實現軟體開發過程的工程化。這方面最為著名的成果就是提出了大家都很熟悉的“瀑布式”生命週期模型。它是在60年代末“軟體危機”後出現的第一個生命週期模型。如下所示:

分析 → 設計 → 編碼 → 測試 → 維護

後來,又有人針對該模型的不足,提出了快速原型法、螺旋模型、噴泉模型等對“瀑布式”生命週期模型進行補充。現在,它們在軟體開發的實踐中被廣泛採用。

這方面的努力,還使人們認識到了文件的標準以及開發者之間、開發者與使用者之間的交流方式的重要性。一些重要文件格式的標準被確定下來,包括變數、符號的命名規則以及原始碼的規範式。

軟體工程發展的第二個方向,側重與對軟體開發過程中分析、設計的方法的研究。這方面的重要成果就是在70年代風靡一時的結構化開發方法,即PO(面向過程的開發或結構化方法)以及結構化的分析、設計和相應的測試方法。

1975—1980年代,第二次分離,規格說明(Spec)和體(body)的分離

說明是型別定義和操作描述,體是操作的具體實現。

(具體的例子就是C++,Java等面嚮物件語言的類說明與類實現的分離。)

解決方案設計只關注說明,實現時引用或者設計體。

體的更改、置換不影響規格說明,保證了可移植性。

支援多機系統,但要同樣環境。

此時產生了劃時代的面向物件技術

 1995—2000年代,第三次分離,物件使用和物件實現的分離

軟體不是純物化的東西,其中包含著人的因素,於是就有很多變動的東西,不可能像理想的物質生產過程,基於物理學等的原理來做。早期的軟體開發僅考慮人的因素,傳統的軟體工程強調物性的規律,現代軟體工程最根本的就是人跟物的關係,就是人和機器(工具、自動化)在不同層次的不斷迴圈發展的關係。
面向物件的分析、設計方法(OOA和OOD)的出現使傳統的開發方法發生了翻天覆地的變化。隨之而來的是面向物件建模語言(以UML為代表)、軟體複用、基於元件的軟體開發等新的方法和領域。
與之相應的是從企業管理的角度提出的軟體過程管理。即關注於軟體生存週期中所實施的一系列活動並通過過程度量、過程評價和過程改進等涉及對所建立的軟體過程及其例項進行不斷優化的活動使得軟體過程迴圈往復、螺旋上升式地發展。其中最著名的軟體過程成熟度模型是美國卡內基梅隆大學軟體工程研究所(SEI)建立的CMM(Capability Maturity Model),即能力成熟度模型。此模型在建立和發展之初,主要目的是為大型軟體專案的招投標活動提供一種全面而客觀的評審依據,而發展到後來,又同時被應用於許多軟體機構內部的過程改進活動中。

軟體工程的目標是研製開發與生產出具有良好的軟體質量和費用合算的產品。費用合算是指軟體開發執行整個開銷能滿足使用者要求的程度,軟體質量是指該軟體能滿足明確的和隱含的需求能力有關特徵和特性的總和。軟體質量可用六個特性來作評價,即功能性、可靠性、易使用性、效率、維護性、易移植性。