- 面向對象技術與工具(第2版)
- 陳文宇等編著
- 9字
- 2018-12-27 18:06:48
第1章 軟件工程概述
1.1 軟件工程的產生和發展
軟件工程(Software Engineering)是在克服20世紀60年代末所出現的“軟件危機”的過程中逐漸形成與發展的。自1968年在北大西洋公約組織(NATO)舉行的軟件可靠性學術會議上正式提出“軟件工程”的概念以來,在這40 年的時間里,軟件工程在理論和實踐兩方面都取得了長足的進步。
軟件工程是一門指導計算機軟件系統開發和維護的工程學科,是一門新興的邊緣學科,它涉及計算機科學、工程科學、管理科學、數學等多學科。軟件工程的研究范圍廣,不僅包括軟件系統的開發方法和技術、管理技術,還包括軟件工具、環境及軟件開發的規范。
軟件是信息化的核心,國民經濟、國防建設、社會發展及人民生活都離不開軟件。軟件產業關系到國家經濟發展和文化安全,體現了國家綜合實力,是決定21世紀國際競爭地位的戰略性產業。因此,大力推廣應用軟件工程的開發技術及管理技術,提高軟件工程的應用水平,對促進我國軟件產業與國際接軌,推動軟件產業的迅速發展起著十分重要的作用。
1.1.1 軟件工程的發展過程
軟件工程的產生和發展是與軟件的發展過程緊密相關的。自從第一臺電子計算機誕生以來,就開始了軟件的生產,“軟件工程”提出至今,它的發展經歷了4個重要階段。
1.第一代軟件工程
20世紀60年代末,軟件生產主要采用“生產作坊方式”。隨著軟件需求量、規模及復雜度的迅速增大,生產作坊的方式已不能夠適應軟件生產的需要,出現了所謂“軟件危機”(Software Crisis),其表現為軟件生產效率低,大量質量低劣的軟件涌入市場或在開發過程中夭折。軟件危機不斷擴大,對軟件生產已經產生了嚴重危害。
為了克服軟件危機,在NATO舉行的軟件可靠性會議上第一次提出“軟件工程”這一名詞,將軟件開發納入了工程化的軌道,基本形成了軟件工程的概念、框架、技術和方法。這階段又稱為傳統的軟件工程。
2.第二代軟件工程
從20世紀80年代中期開始,以Smalltalk為代表的面向對象的程序設計語言推出,面向對象的方法與技術得到發展。從20世紀90年代起,研究的重點從程序設計語言逐漸轉移到面向對象的分析與設計,演化為一種完整的軟件開發方法和系統的技術體系。與此同時,出現了許多面向對象的開發方法的流派,面向對象的方法逐漸成為軟件開發的主流。所以這一階段又稱為對象工程。
3.第三代軟件工程
隨著軟件規模的不斷增大,開發人員也隨之增多,開發時間相應持續增長,加之軟件是知識密集型的邏輯思維產品,這些都增加了軟件工程管理的難度。人們在軟件開發的實踐過程中認識到:提高軟件生產率,保證軟件質量的關鍵是對“軟件過程”的控制和管理,是軟件開發和維護中的管理和支持能力。提出對軟件項目管理的計劃、組織、成本估算、質量保證、軟件配置管理等技術與策略,逐步形成了軟件過程工程。
4.第四代軟件工程
從20世紀90年代起,基于構件(Component)的開發方法取得重要進展,軟件系統的開發可通過使用現存的可復用構件組裝完成,而無須從頭開始構造,從而達到提高效率和質量,降低成本的目的。軟件復用技術及構件技術的發展,對克服軟件危機提供了一條有效途徑。將這一階段稱為構件工程。
1.1.2 軟件危機
1.軟件危機的產生
“軟件危機”(Software C risis)的出現是由于軟件的規模越來越大,復雜度不斷增大,而軟件需求量也不斷增大,“生產作坊式”的軟件開發模式及技術已不能滿足軟件發展的需要。
軟件開發過程是一種高密集度的腦力勞動,需要投入大量的人力、物力和財力,如果軟件開發的模式及技術不能適應軟件發展的需要,將致使大量質量低劣的軟件產品涌向市場,有的甚至在開發過程中就夭折了。國外在開發一些大型軟件系統時,遇到了許多困難,有的系統最終徹底失敗了;有的系統則比原計劃推遲了好多年,而且費用大大超過了預算;有的系統不能符合用戶當初的期望;有的系統則無法進行修改維護。典型的例子如下。
IBM公司的OS/360,共約100萬條指令,花費了5000人年,經費達數億美元,而結果卻令人沮喪,錯誤多達2000個以上,系統根本無法正常運行。OS/360系統的負責人Brooks這樣描述開發過程的困難和混亂:“就像野獸在泥潭中做垂死掙扎,掙扎得越猛,陷得越深,最后沒有一個野獸能夠逃脫淹沒在泥潭中的命運……”
1967年,前蘇聯“聯盟一號”載人宇宙飛船,由于其軟件設計時忽略了一個小數點,導致返航時打不開降落傘,當進入大氣層時因摩擦力太大而燒毀,造成機毀人亡的巨大損失。
還有,可以稱為20世紀世界上最精心設計,并花費了巨額投資的美國阿波羅登月飛行計劃使用的軟件,也仍然沒有避免出錯,例如,阿波羅8號由于太空飛船的一個計算機軟件錯誤,造成存儲器的一部分信息丟失;阿波羅14號在飛行的10天中,出現了18個軟件錯誤。
2.軟件危機的表現
20世紀60年代末期所發生的軟件危機,反映在軟件可靠性沒有保障、軟件維護工作量大、費用不斷上升、進度無法預測、成本增長無法控制、程序人員無限度增加等方面,以致形成人們難以控制軟件開發的局面。
軟件危機主要表現在以下兩個方面。
① 軟件產品質量低劣,甚至在開發過程中就夭折。
② 軟件生產率低,不能滿足需要。
軟件危機所造成的嚴重后果已致使世界各國的軟件產業危機四伏,面臨崩潰,克服軟件危機刻不容緩。從NATO會議以來,世界各國的軟件工作者為克服軟件危機進行了許多開創性的工作,在軟件工程的理論研究和工程實踐兩個方面都取得長足的進步,緩解了軟件危機。但距離實現徹底克服軟件危機這個軟件工程的最終目標,仍然任重而道遠,還需要軟件工作者付出長期艱苦的努力。
1.1.3 軟件工程研究的內容
1.軟件工程的定義
自從1968年提出軟件工程這個名詞,對于軟件工程就有了各種各樣的定義,但是它們的基本思想都是強調在軟件開發過程中應用工程化原則的重要性。
1983年,IEEE(美國電氣與電子工程師協會)所下的定義是:軟件工程是開發、運行、維護和修復軟件的系統方法。
1990年,IEEE又將定義更改為:對軟件開發、運作、維護的系統化的、有規范的、可定量的方法之應用,即對軟件的工程化應用。
從軟件工程的定義可見,軟件工程是一門指導軟件開發的工程學科,它以計算機理論及其他相關學科的理論為指導,采用工程化的概念、原理、技術和方法進行軟件的開發和維護,把經過實踐證明的科學的管理措施與最先進的技術方法結合起來。軟件工程研究的目標是“以較少的投資獲取高質量的軟件”。
2.軟件工程研究的內容
軟件工程有方法、工具和過程三個要素。軟件工程方法研究軟件開發是“如何做”的。軟件工具是研究支撐軟件開發方法的工具、為方法的運用提供自動或者半自動的支撐環境。軟件工具的集成環境,又稱為計算機輔助軟件工程(Computer-Aided Software Engineering,CASE)。軟件工程過程則是指將軟件工程方法與軟件工具相結合,實現合理、及時地進行軟件開發的目標,為開發出高質量軟件而規定各項任務的工作步驟。
軟件工程是一門新興的邊緣學科,涉及的學科多,研究的范圍廣。歸結起來,軟件工程研究的主要是以下4個方面的內容。
① 方法與技術。軟件開發方法主要討論軟件開發的各種方法及其工作模型,包括多方面的任務,如軟件系統需求分析、總體設計,以及如何構建良好的軟件結構,數據結構及算法設計等,同時討論具體實現的技術。
② 工具及環境。軟件工具為軟件工程方法提供了支持,研究計算機輔助軟件工程,建立軟件工程環境。
③ 軟件工程管理。軟件工程管理是指對軟件工程全過程的控制和管理,包括計劃安排、成本估算、項目管理、軟件質量管理。
④ 標準與規范。軟件工程的標準化與規范化,使得各項工作有章可循,以保證軟件生產率和軟件質量的提高。軟件工程標準可分為:國際標準、行業標準、企業規范和項目規范。
必須強調的是,隨著人們對軟件系統研究的逐漸深入,軟件工程所研究的內容也不是一成不變的。
3.軟件工程的基本原則
過去,軟件工程的基本原則是抽象化、模塊化、清晰的結構、精確的設計規格說明。但是,今天的認識已經發生了很大的變化。現在提出的軟件工程的四項基本原則如下。
第一,必須認識軟件需求的變動性,以便采取適當措施來保證產品能更好地滿足用戶要求。在軟件設計中,通常要考慮模塊化、抽象與信息隱蔽、局部化、一致性等原則。
第二,穩妥的設計方法大大地方便軟件開發,以達到軟件工程的目標。軟件工具與環境對軟件設計的支持十分重要。
第三,軟件工程項目的質量與經濟開銷直接取決于為該工程提供的支撐的質量與效用。
第四,只有在強調對軟件過程進行有效管理的情況下,才能實現有效的軟件工程。
- 少兒人工智能趣味入門:Scratch 3.0動畫與游戲編程
- Boost.Asio C++ Network Programming(Second Edition)
- C# 2012程序設計實踐教程 (清華電腦學堂)
- Android Application Development Cookbook(Second Edition)
- Hands-On GPU:Accelerated Computer Vision with OpenCV and CUDA
- C語言程序設計
- 零基礎Java學習筆記
- Instant Debian:Build a Web Server
- Python語言科研繪圖與學術圖表繪制從入門到精通
- Learning Ionic
- 深入分析GCC
- 視窗軟件設計和開發自動化:可視化D++語言
- Microsoft Exchange Server 2016 PowerShell Cookbook(Fourth Edition)
- TypeScript全棧開發
- HTML5與CSS3權威指南