第二章 軟件工程
自從1968年首次提出軟件工程一詞以來,軟件工程已成為計算機軟件的一個重要分支和研究方向。軟件工程是指應用計算機科學、數學及管理科學等原理,以工程化的原則和方法來解決軟件問題的工程。其目的是提高軟件生產率、提高軟件質量、降低軟件成本。
一、軟件工程基本概念
早期的軟件主要指程序。程序的開發采用個體工作方式,開發工作主要依賴于開發人員的個人技能和程序設計技巧。當時的軟件通常缺少與程序有關的文檔,軟件開發的實際成本和進度往往與預計的相差甚遠,軟件的質量得不到保證,開發出來的軟件常常不能使用戶滿意。隨著計算機應用的需求不斷增長,軟件的規模也越來越大,然而軟件開發的生產率遠遠跟不上計算機應用的迅速增長。此外,由于軟件開發時缺少好的方法指導和工具輔助,同時又缺少有關的文檔,使得大量已有的軟件難以維護。上述這些問題嚴重地阻礙了軟件的發展,20世紀60年代中期,人們把上述軟件開發和維護中的各種問題稱為“軟件危機”。
1968年在德國召開的NATO會議上,首次提出了“軟件工程”一詞,希望用工程化的原則和方法來克服軟件危機。在此以后,人們開展了軟件開發模型、開發方法、工具與環境的研究,提出了瀑布模型、演化模型、螺旋模型、噴泉模型等開發模型,出現了面向數據流方法、面向數據結構的方法、面向對象方法等開發方法,以及一批CASE(computer aided software engineering)工具和環境。
(一)軟件生存周期
如同人的一生要經歷嬰兒期、少年期、老年期直至死亡這樣一個全過程一樣,任何一個軟件產品或軟件系統也都要經歷軟件定義、軟件開發、軟件維護直至被淘汰這樣一個全過程,我們把軟件的這一全過程稱為軟件生存周期。
軟件定義、軟件開發、軟件維護等階段還可分為若干個階段,每個階段相對獨立又彼此有聯系,上一階段的工作結果是下一階段工作的依據,下一階段是上一階段的進化,它更接近于問題的解。
1.軟件定義
軟件定義階段主要解決的問題是待開發的軟件要“做什么”,也就是要確定軟件的處理對象、軟件與外界的接口、軟件的功能和性能、界面以及有關的約束和限制。軟件定義階段通常可分成系統分析、軟件項目計劃、需求分析等階段。
(1)系統分析
這里講的系統是指計算機系統,包括計算機硬件、軟件和使用計算機的人。系統分析的任務是確定待開發軟件的總體要求和適用范圍,以及與之有關的硬件、支撐軟件的要求。系統分析階段的參加人員有用戶、項目負責人、系統分析員。該階段產生的文檔可合并在軟件項目計劃階段的文檔(項目計劃書)中。
(2)軟件項目計劃
軟件項目計劃的任務是確定待開發軟件的目標,對其進行可行性分析,并對資源分配、進度安排等做出合理的計劃。
軟件項目計劃階段的參加人員有用戶、項目負責人、系統分析員。該階段所產生的文檔有可行性分析報告、項目計劃書。
(3)需求分析
需求分析的任務是確定待開發軟件的功能、性能、數據、界面等要求,從而確定系統的邏輯模型。需求分析階段的參加人員有用戶、項目負責人和系統分析員。該階段產生的文檔有需求規約(requirements specification),習慣上稱它為需求規格說明書。
2.軟件開發
軟件開發階段主要解決的問題是該軟件“怎么做”,包括數據結構和軟件結構的設計,算法設計,編寫程序,測試,最后得到可交付使用的軟件。軟件開發階段通常可分成軟件設計、編碼、軟件測試等階段。
(1)軟件設計
軟件設計通常還可分成概要設計和詳細設計。概要設計的任務是模塊分解,確定軟件的結構、模塊的功能和模塊間的接口,以及全局數據結構的設計。詳細設計的任務是設計每個模塊的實現細節和局部數據結構的設計。
概要設計階段的參加人員有系統分析員和高級程序員,詳細設計階段的參加人員有高級程序員和程序員。設計階段產生的文檔有設計規約(design specification),也稱為設計說明書,它也可分為概要設計說明書和詳細設計說明書。根據需要還可產生數據說明書和模塊開發卷宗。
(2)編碼
編碼的任務是用某種程序語言為每個模塊編寫程序。
編碼階段的參加人員有高級程序員和程序員,產生的文檔有程序清單。
(3)軟件測試
軟件測試的任務是發現軟件中的錯誤,并加以糾正。
軟件測試階段的參加人員通常由另一部門(或單位)的高級程序員或系統分析員承擔,該階段產生的文檔有軟件測試計劃和軟件測試報告。
3.軟件維護
軟件開發階段結束后,軟件即可交付使用。軟件的使用通常要持續幾年甚至幾十年,在整個使用期間,都可能因為某種原因而修改軟件,這便是軟件維護。引起修改軟件的原因主要有三種:一是在軟件運行過程中發現了軟件中隱藏的錯誤而修改軟件;二是為了適應變化了的環境而修改軟件;三是為修改或擴充原有軟件的功能而修改軟件。因此軟件維護的任務就是為使軟件適應外界環境的變化、實現功能的擴充和質量的改善而修改軟件。
軟件維護階段的參加人員是維護人員,該階段產生的文檔有維護計劃和維護報告。
目前,軟件生存周期各階段的劃分尚不統一,有的分得粗些,有的分得細些。許多場合軟件開發階段都是從需求分析階段開始的。本書中,我們也將需求分析看作為軟件開發的開始階段。
(二)軟件開發模型
為了指導軟件的開發,用不同的方式將軟件生存周期中的所有開發活動組織起來,形成不同的軟件開發模型。常見的軟件開發模型有瀑布模型、演化模型、螺旋模型、噴泉模型等。瀑布模型如下圖所示,它是1970年由W.Royce提出的。該模型給出了軟件生存周期各階段的固定順序,上一階段完成后才能進入到下一階段,整個過程就像流水下瀉,故稱之為瀑布模型。圖中的虛線部分表示在某一階段發現錯誤時,其錯誤可能是由上一階段造成的, 因此開發過程可能要反饋到上一階段。
(三)軟件開發方法
軟件開發過程模型規定軟件開發活動的組合應用方式,要保證開發活動的高質量,還需要有相應的軟件開發方法作為技術支持。近10年來,軟件工作者研制出了許多工程化的軟件開發方法,例如70年代初提出的用于編寫程序的結構化程序設計方法,確實起到了提高效率,減少錯誤的效果。但是70年代中期,軟件工作者認識到編寫程序僅僅是軟件開發的一個環節,而合理地建立系統結構比編定程序更為重要。所以研究的重點前移到設計階段,出現了設計階段的結構化設計(SD)方法和JACKSON等方法,到了70年代后期,人們又發現事先對用戶的要求進行分析更為重要,故又把重點前移到分析階段。出現了用于分析階段的結構化分析(SA)方法、結構化分析與設計技術(SADT)等。隨著計算機技術的迅速發展,在80年代初期的實時、并發和網絡等軟件的開發過程中,特別是在第五代計算機研究工作中,又提出了面向對象的設計方法。現在流行的方法有多種,它們的適用范圍也各不相同。有的適用于一般的數據處理系統,如SA、SD(兩者統稱為結構化分析與設計方法,即Yourdon方法)、JACKSON方法;有的適用于大型的復雜系統,如SADT技術;有的適用于實時事務處理系統,如FSM方法;有的適用于并發軟件系統,如PETRI網方法;作為90年代代表作的面向對象方法,其應用已幾乎遍布各個領域。這些方法除了適用范圍不同外,方法形成的基礎、處理規則和對所開發軟件風格的要求等都各有側重。用什么方法來說明用戶的要求、用什么方法來設計軟件以及用什么方法對軟件進行測試和維護,直接影響所開發軟件的質量。
(四)軟件開發工具
早期的軟件開發除了一般的程序設計語言外尚缺少工具的支持,致使編程工作量大,質量和進度卻難以保證,導致人們將很多的精力和時間花費在程序的編制和調試上;相比之下,在更重要的軟件的需求和設計上反而得不到必要的精力和時間投入。軟件開發工具的發展促進了軟件開發的高速度和高質量。工具的發展是從單項工具的開發逐步走向集成的工具發展的。同時,軟件開發方法的有效應用也必須得到相應工具的支持,否則方法將難以有效的實施。
工具的完善和發展將促進軟件開發的進步和完善。原型化方法的實施基礎就是得到了開發工具的支持。快速原型化之所以能夠實現的基礎就是原型化人員在快速建模時得到了工具的支持,否則原型化方法是無法實施的。
(五)軟件開發環境
軟件工程環境或稱軟件開發環境是全面支持軟件開發全過程的軟件工具集合。這些軟件工具按照一定的方法或模式組合起來,并能支持軟件開發生命周期的各個階段和各項任務的完成。CASE,即計算機輔助軟件工程環境是當前軟件開發環境中富于特色的研究工作和發展方向,它的成功將最大限度地降低軟件工程的技術難度并使軟件開發的質量得到保證。
版權聲明:如果計算機等級考試網所轉載內容不慎侵犯了您的權益,請與我們聯系800@exam8.com,我們將會及時處理。如轉載本計算機等級考試網內容,請注明出處。
中國科學院研究生院權威支持(北京) 電 話:010-62168566 傳 真:010-62192699