2017年全國計算機考試四級復習綱要:軟件工程基本概念

字號:


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