軟件工程:實踐者的研究方法第2章過程

字號:

第2章 過程
    軟件過程是過去十年中人們關(guān)注的焦點。但準確講什么是軟件過程呢?在本書中,我們定義軟件過程為建造高質(zhì)量軟件需要完成的任務的框架?!斑^程”與軟件工程同義嗎?答案是“是也不是”。一個軟件過程定義了軟件開發(fā)中采用的方法,但軟件工程還包含該過程中應用的技術(shù)——技術(shù)方法和自動化工具。
    更重要的一點,軟件工程是有創(chuàng)造力、有知識的人在定義好的、成熟的軟件過程框架中進行的。本章的目的就是探討軟件過程的研究現(xiàn)狀,并為在本書以后的章節(jié)中更詳細地討論關(guān)于管理和技術(shù)方面的話題提供指導。
    2.1軟件工程——一種層次化技術(shù)
    雖然有很多作者都給出了軟件工程的定義,但Fritz Bauer[NAU69]在NATO會議上給出的定義仍是進一步展開討論的基礎(chǔ):
    軟件工程 是為了經(jīng)濟地獲得可靠的和能在實際機器上高效運行的軟件而建立和使用的好的工程原則。
    幾乎每一個讀者都忍不住想在這個定義上增加點什么。它沒有提到軟件質(zhì)量的技術(shù)層面,也沒有直接談到用戶滿意度或按時交付產(chǎn)品的要求,它忽略了測度和度量的重要性,甚至沒有闡明一個成熟的過程的重要性。但Bauer的定義給我們提供了一個基線。什么是可以應用到計算機軟件開發(fā)中的“好的工程原則”?我們?nèi)绾巍敖?jīng)濟地”建造軟件使得其可靠性高?如何才能創(chuàng)建出能夠在多個、而不是一個不同的實際機器上“高效運行”的程序?這些都是進一步挑戰(zhàn)軟件工程師的問題。
    IEEE[IEE93]給出了一個更加綜合的定義:
    軟件工程:(1)將系統(tǒng)化的、規(guī)范的、可度量的方法應用于軟件的開發(fā)、運行和維護的過程,即將工程化應用于軟件中。(2)(1)中所述方法的研究。
    2.1.1過程、方法和工具
    軟件工程是一種層次化的技術(shù)(如圖2-1所示)。任何工程方法(包括軟件工程)必須以有組織的質(zhì)量保證為基礎(chǔ)。全面的質(zhì)量管理和類似的理念刺激了不斷的過程改進,正是這種改進導致了更加成熟的軟件工程方法的不斷出現(xiàn)。支持軟件工程的根基就在于對質(zhì)量的關(guān)注。
    軟件工程的基層是過程層。軟件工程過程是將技術(shù)層結(jié)合在一起的凝聚力,使得計算機軟件能夠被合理地和及時地開發(fā)出來。過程定義了一組關(guān)鍵過程區(qū)域的框架(KPAs)[PAY93],這對于軟件工程技術(shù)的有效應用是必須的。關(guān)鍵過程區(qū)域構(gòu)成了軟件項目的管理控制的基礎(chǔ),并且確立了上下各區(qū)域之間的關(guān)系,其中規(guī)定了技術(shù)方法的采用、工程產(chǎn)品(模型、文檔、數(shù)據(jù)、報告、表格等)的產(chǎn)生、里程碑的建立、質(zhì)量的保證及變化的適當管理。
    軟件工程的方法層提供了建造軟件在技術(shù)上需要“如何做”。方法涵蓋了一系列的任務:需求分析、設計、編程、測試和維護。軟件工程方法依賴于一組基本原則,這些原則控制了每一個技術(shù)區(qū)域,且包含建?;顒雍推渌枋黾夹g(shù)。
    軟件工程的工具層對過程和方法提供了自動的或半自動的支持。當這些工具被集成起來使得一個工具產(chǎn)生的信息可被另外一個工具使用時,一個支持軟件開發(fā)的系統(tǒng)就建立了,稱為計算機輔助軟件工程(CASE)。CASE集成了軟件、硬件和一個軟件工程數(shù)據(jù)庫(一個倉庫,其中包含了關(guān)于分析、設計、編程和測試的重要信息),從而形成了一個軟件工程環(huán)境,它類似于硬件的CAD/CAE(計算機輔助設計/工程)。
    2.1.2軟件工程的一般視圖
    工程是對技術(shù)(或社會)實體的分析、設計、建造、驗證和管理。拋開要工程化的實體,下列問題是必須首先回答的:
    ·要解決的問題是什么?
    ·要用于解決該問題的實體具有什么特點?
    ·如何實現(xiàn)該實體(解決方案)?
    ·如何建造該實體?
    ·采用什么方法去發(fā)現(xiàn)該實體設計和建造過程中產(chǎn)生的錯誤?
    ·當該實體的用戶要求修改、適應和增強時,如何支持這些活動?
    本書全文只針對一個實體——計算機軟件。要適當?shù)亟ㄔ煲粋€軟件,軟件開發(fā)過程是必須定義的。本節(jié)給出了軟件過程的一般性特點,本章的以后幾節(jié)進一步闡述了特定的過程模型。
    如果不考慮應用領(lǐng)域、項目規(guī)模和復雜性,與軟件工程相關(guān)的工作可分為三個一般的階段。每一個階段回答了上述的一個或幾個問題。
    定義階段集中于“做什么”。即在定義過程中,軟件開發(fā)人員試圖弄清楚要處理什么信息,預期完成什么樣的功能和性能,希望有什么樣的系統(tǒng)行為,建立什么樣的界面,有什么設計約束,以及定義一個成功系統(tǒng)的確認標準是什么。即定義系統(tǒng)和軟件的關(guān)鍵需求。雖然在定義階段采用的方法取決于使用的軟件工程范型(或范型的組合),但在某種程度上均有三個主要任務:系統(tǒng)或信息工程(見第10章),軟件項目計劃(第3章到第7章),和需求分析(第11,12和20章)。
    開發(fā)階段集中于“如何做”。即在開發(fā)過程中,軟件工程師試圖定義數(shù)據(jù)如何結(jié)構(gòu)化,功能如何轉(zhuǎn)換為軟件體系結(jié)構(gòu),過程細節(jié)如何實現(xiàn),界面如何表示,設計如何轉(zhuǎn)換成程序設計語言(或非過程語言),測試如何執(zhí)行。在開發(fā)階段采用的方法可以不同,但都有三個特定的任務:軟件設計(第14、15和21章),代碼生成,和軟件測試(第16、17和22章)。
    維護階段集中于“改變”,與以下幾種情況相關(guān):糾正錯誤;隨著軟件環(huán)境的演化,而要求的適應性修改;及由于用戶需求的變化而帶來的增強性修改。維護階段重復定義和開發(fā)階段的步驟,但卻是在已有軟件的基礎(chǔ)上發(fā)生的。在維護階段可能遇到四類修改要完成: