軟件工程:實踐者的研究方法第14章設計方法

字號:

第14章 設計方法
    設計通常被描述為一個多步的過程,其主要任務是從信息需求中綜合出數(shù)據結構的表示、程序結構、接口特征和過程細節(jié)。Freeman在[FRE80]中對設計有較為詳細的描述:
    設計是一項主要考慮進行重要決策的活動,這些決策通常都與結構有關。設計與編程都要考慮抽象信息表示,但其詳細程度與編程有很大的不同。設計的結果是一個一致的、合理計劃的程序表示,主要描述高層各部分的相互關系和低層所需的邏輯操作…
    在前一章我們已經指出,設計是由信息驅動的。各種軟件設計方法主要考慮分析模型中的三個域,因此數(shù)據、功能和行為三個域是整個設計創(chuàng)建活動的指南。
    本章將討論多種用于創(chuàng)建設計模型(見圖13-1)的各個層次的方法,本章的目標是提供一個系統(tǒng)地完成設計的方法,設計的結果就是構造軟件的藍圖。
    14.1 數(shù)據設計
    數(shù)據設計是實施軟件工程中的四個設計活動的第一個(有人也認為是最重要的一個)。由于數(shù)據結構對程序結構和過程復雜性都有影響,數(shù)據結構對軟件質量的影響是很深遠的。信息隱蔽和抽象數(shù)據的概念為數(shù)據設計提供了基礎。
    Wasserman在參考文獻[WAS80]中總結了數(shù)據設計的過程:
    數(shù)據設計的主要活動是選擇對需求定義和規(guī)約過程中找出來的數(shù)據對象(數(shù)據結構)的邏輯表示。選擇過程可以包括對候選結構進行算法分析,以決定出效率的結構;選擇過程也可以只使用一組模塊(一個包),在對象的某種表示上提供需要的操作。
    設計中的另一個相關的活動是標識要直接作用于邏輯數(shù)據結構的程序模塊,這樣,各個數(shù)據設計決策的影響域就受到了約束。
    無論采用哪種設計技術,好的數(shù)據設計將改善程序結構和模塊劃分,降低過程復雜性。
    Wasserman[WAS80]提出了一組用于數(shù)據規(guī)約和設計的原則。在實際應用中,數(shù)據設計在創(chuàng)建分析模型(見第12章)就已經開始了,考慮到需求分析和設計經常要重疊,我們主要考慮以下一組數(shù)據規(guī)約原則[WAS80]:
    1.用于功能和行為的系統(tǒng)分析原則也應用于數(shù)據。我們通常要在導出、復審和刻畫功能需求和初步設計上花很多時間和工作量;數(shù)據對象及其關系、數(shù)據流和內容的表示也應該按步驟進行開發(fā)和復審,其他可選的數(shù)據組織結構也應加以考慮,數(shù)據模型對于軟件設計的影響也應得到正確的評估,例如,一個多環(huán)鏈表可能可以很好地滿足數(shù)據需求,但它也可能導致過于復雜的軟件設計,而其他替代的數(shù)據組織結構可能會得到更好的結果。
    2.應該標識所有的數(shù)據結構以及其上的操作。設計一個高效的數(shù)據結構必須考慮其上的操作(見參考文獻[AHO83]),例如,考慮一個由不同數(shù)據元素組成的數(shù)據結構,在許多重要的軟件功能中都要操作這個數(shù)據結構。通過評估該數(shù)據結構上的操作,可定義一個抽象數(shù)據類型,以便在以后的軟件設計中使用。抽象數(shù)據類型的規(guī)約將大大簡化軟件設計。
    3.應當建立數(shù)據字典,并用于數(shù)據設計和程序設計。數(shù)據字典的概念在第12章中已經介紹,數(shù)據字典明確表示了數(shù)據對象間的關系以及對數(shù)據結構中的元素的約束。如果有一個類似字典的數(shù)據規(guī)約存在,那些必須利用某些特定關系的優(yōu)秀算法的定義將得到簡化。
    4.低層的設計決策應該推遲到設計過程的后期。數(shù)據設計可以采用逐步求精的過程,也就是說,總體的數(shù)據組織可以在需求分析階段定義,在概要設計中進行精化,并在以后的設計迭代中進行詳細描述。在數(shù)據設計中應用自頂向下方法的優(yōu)點與在軟件設計中應用自頂向下方法的優(yōu)點類似:主要的結構屬性要首先進行設計和評估,以便建立數(shù)據的體系結構。
    5.只有那些需要直接使用數(shù)據結構內部數(shù)據的模塊才能看到該數(shù)據結構的表示。信息隱蔽的概念以及相關的耦合概念為軟件設計質量的評估提供了依據。本原則不但強調了這兩個概念的重要性,還強調了“將數(shù)據對象的邏輯視圖和物理視圖分開的重要性”[WAS80]。
    6.應該開發(fā)一個由有用的數(shù)據結構和應用于其上的操作組成的庫。數(shù)據結構和操作都應被看作可用于軟件設計的資源,數(shù)據結構的設計可以考慮到復用。數(shù)據結構模板(抽象數(shù)據類型)庫可以減少數(shù)據規(guī)約和設計的工作量。
    7.軟件設計和程序設計語言應該支持抽象數(shù)據類型的規(guī)約和實現(xiàn)。如果沒有辦法對已有的數(shù)據結構直接進行規(guī)約,復雜數(shù)據結構的實現(xiàn)(以及對應的設計)將變得非常困難。例如,如果目標語言是Fortran的話,實現(xiàn)(或設計)一個鏈表或多層異構數(shù)組將是非常困難的,因為Fortran不支持直接對這些數(shù)據結構進行規(guī)約。
    以上這些原則為數(shù)據設計提供了基礎,它們既可以應用在軟件工程的定義階段,也可以應用在開發(fā)階段。在本書的其他部分我們已經指出,清晰的信息定義是軟件開發(fā)成功的關鍵。
    14.2 體系結構設計
    體系結構設計的主要目標是開發(fā)一個模塊化的程序結構,并表示出模塊間的控制關系。此外,體系結構設計將程序結構和數(shù)據結構相結合,為數(shù)據在程序中的流動定義了接口。
    為了理解體系結構設計的重要性,這里給出一個日常生活的小例子:
    你存了一筆錢,買了一塊土地,準備蓋一幢自己夢想中的房子。由于沒有這方面的經驗,你拜訪了一位建筑師,向建筑師解釋了自己的要求:房間的大小和數(shù)目、流行的式樣、溫泉、教堂式的屋頂、大量的玻璃窗等等。建筑師仔細的聽了,問了幾個問題,然后表示需要花幾個星期進行設計。