1.4 軟件生命周期
1.4.1 軟件生命周期的定義
軟件生命周期(Systems Development Life Cycle,SDLC)是軟件的產生直到報廢或停止使用的生命周期。包括軟件開發過程中:問題定義、可行性分析、總體描述、系統設計、編碼、調試和測試、驗收與運行、維護升級到廢棄等階段,這種按時間分程的思想方法是軟件工程中的一種思想原則,即按部就班、逐步推進,每個階段都要有定義、工作、審查、形成文檔以供交流或備查,以提高軟件的質量。
一項計算機軟件,從出現一個構思之日起,經過這項軟件開發成功投入使用,在使用中不斷增補修訂,直到最后決定停止使用,并被另一項軟件產品代替之時止,被認為是該軟件的一個生命周期。一個軟件產品的生命周期可以劃分為若干個相互區別而又有聯系的階段,每個階段中的工作均以上一階段的結果為依據,并為下一階段的工作提供了前提。經驗表明,失誤造成的差別越是發生在生命周期前期,在系統交付使用時造成的影響和損失越大,要糾正它所花費的代價也越高。因而在前一階段工作沒有做好之前,決不要草率地進入下一階段。軟件生命周期階段的劃分,有助于軟件研制管理人員借助于傳統工程的管理方法(重視工程性文檔的編制,采用專業化分工方法,在不同階段使用不同的人員等),從而有利于明顯提高軟件質量、降低成本、合理使用人才、進而提高軟件開發的勞動生產率。
由于工作的范圍和對象不同、經驗的不同,對軟件生命周期的劃分也不盡相同。但是,這些不同劃分中有許多相同之處。一般來說,軟件的生命周期大體可分為計劃、開發和維護三個時期(見圖1.1),每一時期有可分為若干更小的階段。
生命周期具體階段的劃分,要受到軟件規模、軟件種類、開發方法、開發環境等諸多因素的影響。不同的著作中劃分方法都不盡相同。生命周期階段劃分的目的是:
①利用控制軟件開發工作的復雜度。
②通過有限的步驟,把用戶需要解決的問題從抽象的邏輯概念逐步轉換為具體的物理實現。

圖1.1 軟件生命周期
1.4.2 軟件生命周期的階段
1.問題定義
要求系統分析員與用戶進行交流,弄清“用戶需要計算機解決什么問題”,然后提出關于“系統目標與范圍的說明”,提交用戶審查和確認。
2.可行性研究
一方面在于把待開發的系統的目標以明確的語言描述出來,另一方面從經濟、技術、法律等多方面進行可行性分析。
3.需求分析
弄清用戶對軟件系統的全部需求,編寫需求規格說明書和初步的用戶手冊,提交評審。
4.開發階段
開發階段由三個階段組成:
①設計。
②實現:根據選定的程序設計語言完成源程序的編碼。
③測試。
5.維護
維護包括四個方面:
①改正性維護:在軟件交付使用后,由于開發測試時的不徹底、不完全、必然會有一部分隱藏的錯誤被帶到運行階段,這些隱藏的錯誤在某些特定的使用環境下就會暴露。
②適應性維護:是為適應環境的變化而修改軟件的活動。
③完善性維護:是根據用戶在使用過程中提出的一些建設性意見而進行的維護活動。
④預防性維護:是為了進一步改善軟件系統的可維護性和可靠性,并為以后的改進奠定基礎。
在此上述階段的基礎上,對于軟件研發機構還包括軟件重用和軟件再工程階段。
6.軟件重用
軟件重用是指在兩次或多次不同的軟件開發過程中重復使用相同或相似軟件元素的過程。軟件元素包括程序代碼、測試用例、設計文檔、設計過程、需要分析文檔甚至領域知識。通常,可重用的元素也稱作軟構件,可重用的軟構件越大,重用的粒度越大。
為了能夠在軟件開發過程中重用現有的軟部件,必須在此之前不斷地進行軟部件的積累,并將它們組織成軟部件庫。這就是說,軟件重用不僅要討論如何檢索所需的軟部件以及如何對它們進行必要的修剪,還要解決如何選取軟部件、如何組織軟部件庫等問題。因此,軟件重用方法學,通常要求軟件開發項目既要考慮重用軟部件的機制,又要系統地考慮生產可重用軟部件的機制。這類項目通常被稱為軟件重用項目。
使用軟件重用技術可以減少軟件開發活動中大量的重復性工作,這樣就能提高軟件生產率,降低開發成本,縮短開發周期。同時,由于軟構件大都經過嚴格的質量認證,并在實際運行環境中得到校驗,因此,重用軟構件有助于改善軟件質量。此外,大量使用軟構件,軟件的靈活性和標準化程度也可望得到提高。
7.軟件再工程
軟件再工程是指對既存對象系統進行調查,并將其重構為新形式代碼的開發過程。最大限度地重用既存系統的各種資源是再工程的最重要特點之一。從軟件重用方法學來說,如何開發可重用軟件和如何構造采用可重用軟件的系統體系結構是兩個最關鍵問題。不過對再工程來說前者很大一部分內容是對既存系統中非可重用構件的改造。
軟件再工程是以軟件工程方法學為指導,對程序全部重新設計、重新編碼和測試,為此可以使用CASE工具(逆向工程和再工程工具)來幫助理解原有的設計。CASE(Computer AidedSoftware Engineering)是指用來支持管理信息系統開發的、由各種計算機輔助軟件和工具組成的大型綜合性軟件開發環境,隨著各種工具和軟件技術的產生、發展、完善和不斷集成,逐步由單純的輔助開發工具環境轉化為一種相對獨立的方法論。
軟件再工程的各個階段,軟件的可重用程度都將決定軟件再工程的工作量。重用是軟件工程經濟學最重要原則之一,重用得越多,再工程成本越低,所以逆向工程再分析階段最重要的目的是尋找可重用的對象和重用策略,最終確定的再工程任務和工作量也將依存于可重用對象范圍(重用率)和重用策略。