陳珺
摘 要:本文分析了軟件工程化開發,介紹了軟件工程概論,軟件開發模型等內容。
關鍵詞:軟件工程;開發;模型
經過幾十年的實踐與探索,軟件工程正在逐步發展成為一門成熟的專業學科,在軟件產業的發展中起到重要的技術保障和促進作用。本章論述軟件工程的基礎理論,包括軟件開發模型、軟件開發方法、軟件開發工具與環境以及軟件項目管理等幾個主要方面。
1 軟件工程概論
1968 年在德國召開的NATO 會議上,首次提出了“軟件工程”一詞,希望用工程化的原則和方法來克服軟件危機。在此以后,人們開展了軟件開發模型、開發方法、工具與環境、軟件項目管理的研究,提出了瀑布模型、演化模型、螺旋模型、噴泉模型等開發模型,出現了結構化方法、面向數據結構方法、原型化方法、面向對象方法等開發方法,一批CASE(ComputerAided Software Engineering,計算機輔助軟件工程) 工具和環境,以及一些成功的軟件項目管理方法。
1.1 軟件工程概念
軟件工程是用工程、科學和數學的原則與方法研制、維護計算機軟件的有關技術及管理方法。它由方法、工具和過程三部分組成。近年來,人們又將用于開發軟件的軟、硬件工具和軟件工程數據庫集成在一起,建立集成化的計算機輔助軟件工程(CASE)環境。軟件工程中的過程貫穿于軟件開發的各個環節。管理者在軟件工程過程中,要對軟件開發的質量、進度、成本進行評估、管理和控制,包括人員組織、計劃跟蹤與控制、成本估算、質量保證、配置管理等。軟件工程的方法、工具、過程構成了軟件工程的三要素。
軟件工程的目標是:在給定成本、進度的前提下,開發出具有可修改性、有效性、可靠性、可理解性、可維護性、可重用性、可適應性、可移植性、可追蹤性和可互操作性并滿足用戶需求的軟件產品。
追求這些目標有助于提高軟件產品的質量和開發效率,減少維護的困難,最終獲得項目的成功。成功的軟件開發應該達到以下幾個主要目標:①付出較低的開發成本;②達到要求的軟件功能;③取得較好的軟件性能;④開發的軟件易于移植;⑤需要較低的維護費用;⑥能按時完成開發工作,及時交付使用。
在實際的系統開發中,軟件工程的幾個目標都達到理想的程度往往是非常困難的,有些目標存在著互補關系,而有一些目標可能是互相沖突的。為了開發高質量的軟件產品并便于維護,人們提出了圍繞工程設計、工程支持以及工程管理的4條基本原則,以幫助開發人員利用這些技術和經驗來生產和維護高質量的軟件:
(1) 選取適宜的開發模型。在系統設計中,軟件需求、硬件需求以及其他因素是相互制約和相互影響的,經常需要權衡。因此,必須認識需求定義的易變性,并采取變性,并采取適當的措施予以控制,以保證軟件產品能夠滿足用戶的要求。
(2) 采用合適的設計方法。在軟件設計中,通常要遵循軟件的模塊化、抽象化、信息隱蔽、局部化、一致性以及適應性等原則。選擇合適的設計方法有助于這些特性的實現,以達到軟件工程的目標。
(3) 提供高質量的工程支撐。在軟件工程中,軟件工具與環境對軟件工程的支持非常重要。軟件項目的質量與開銷直接取決于對軟件工程所提供的支撐質量和效用。
1.2 軟件工程的發展
自1968年NATO 會議上提出軟件工程這一概念以來,人們一直在尋求更先進的軟件開發方法和技術。每當出現一種先進的方法和技術時,就會使軟件危機得到一定程度的緩解,然而這種進步又促使人們把更多、更復雜的問題交給計算機去解決,于是又需要探索更先進的方法和技術。幾十年來,軟件工程研究的范圍和內容也隨著軟件技術的發展不斷變化和拓展。軟件工程的發展可分為3 個階段。
第一階段:20 世紀70 年代,為了解決軟件項目失敗率高、錯誤率高以及軟件維護任務重等問題,人們提出軟件生產工程化的思想,希望使軟件生產走上正規化的道路,并努力克服軟件危機。基本形成了軟件工程的概念、框架、方法和手段,成為軟件工程的第一代――傳統軟件工程時代。
第二階段:20 世紀80 年代,面向對象的方法與技術受到廣泛的重視,Smalltalk-80 的出現標志著面向對象的程序設計進入實用和成熟階段。軟件生產開始進入以過程為中心的第二階段。在這個時期人們認識到,應從軟件生存周期的總費用及總價值來決定軟件開發方案。在重視發展軟件開發技術的同時,人們提出軟件能力成熟度模型、個體軟件過程和群組軟件過程等概念。在軟件定量研究方面提出了軟件工作量估計COCOMO 模型等。軟件開發過程從目標管理轉向過程管理,形成了軟件工程的第二代――過程軟件工程時代。
第三階段:進入20 世紀90 年代以后,軟件開發技術的主要處理對象為網絡計算和支持多媒體信息的WWW。這一時期軟件工程的目的在于不僅提高個人生產率,而且通過支持跨地區、跨部門、跨時空的群組共享信息,協同工作來提高群組、集團的整體生產效率。因整體性軟件系統難以更改、難以適應變化,所以提倡基于部件(構件)的開發方法――即部件互連及集成。軟件復用和軟件構件技術正逐步成為主流軟件技術,軟件工程也由此進入了一個新的發展階段——構件軟件工程時代。
2 軟件開發模型
在整個軟件開發過程中,為了從宏觀上管理軟件的開發和維護,就必須對軟件的開發過程有總體的認識和描述,即要建立軟件開發模型。軟件開發模型是軟件開發全部過程、活動和任務的結構框架。模型能夠清晰、直觀地表達軟件開發的全過程,明確規定了要完成的主要活動和任務,是軟件項目工作的基礎。常見的軟件開發模型有瀑布模型、演化模型、螺旋模型、噴泉模型等。
2.1 軟件生存周期
如同人的一生要經歷嬰兒期、少年期、青年期、老年期直至死亡這樣一個全過程一樣,任何一個軟件產品或軟件系統也都要經歷軟件定義、軟件開發、軟件維護直至被淘汰這樣一個全過程,我們把軟件的這一全過程稱為軟件生存周期。軟件定義、軟件開發、軟件維護等階段還可分別分成若干個階段,每個階段相對獨立又彼此有聯系。上一階段的工作結果是下一階段工作的依據,下一階段是上一階段的進化,它更接近于問題的解。項目定義階段主要解決的問題是待開發的軟件要“做什么”,也就是要確定軟件的處理對象、軟件與外界的接口、軟件的功能和性能、軟件界面以及有關的約束和限制。目前,軟件生存周期各階段的劃分尚不統一,有的分得粗些,有的分得細些。在許多場合,軟件開發階段都是從需求分析階段開始的。本文也將需求分析看作為軟件開發的一個階段。
2.2 瀑布模型
瀑布模型將軟件生存周期中的各個軟件工程活動自上而下進行排列,各個活動之間相互銜接,次序固定,構成如同瀑布流水、逐級下落的結構框架,每個階段任務完成后都要提交相應的文檔資料,進行評審和復審,審查通過后再進入到下一個階段的工作,逐步完成各階段的開發任務。其中前兩個階段可稱為軟件的定義時期,中間的幾個階段稱為軟件的開發時期,最后的一個階段稱為維護時期。瀑布模型的優點主要是簡單、便于分工協作、降低開發難度、開發成功率高、保證質量等。
2.3 演化模型
演化模型是針對瀑布模型的缺點而提出的。大量的軟件開發實踐表明,許多開發項目在開始時對軟件需求的認識是模糊的,因此很難一次開發成功。為了減少因對軟件需求的了解不夠確切而給開發工作帶來的風險,可以在獲取了一組基本的需求后,通過快速分析構造出該軟件的一個初始可運行版本,這個初始的軟件通常稱之為原型,然后根據用戶在試用原型的過程中提出的意見和建議對原型進行改進,獲得原型的新版本。重復這一過程,最終可得到令用戶滿意的軟件產品。采用演化模型的開發過程,實際上就是從初始的原型逐步演化成最終軟件產品的過程。演化模型特別適用于對軟件需求缺乏準確認識的情況。采用原型模型進行軟件開發需要有快速建立原型模型的軟件工具與環境。