




已閱讀5頁,還剩131頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
軟件工程學(xué),中國科學(xué)技術(shù)大學(xué)網(wǎng)絡(luò)學(xué)院,4.1 軟件設(shè)計(jì)的目標(biāo)和任務(wù) 4.2 軟件設(shè)計(jì)基礎(chǔ) 4.3 模塊獨(dú)立性 4.4 結(jié)構(gòu)化設(shè)計(jì)方法 4.5 數(shù)據(jù)設(shè)計(jì)和文件設(shè)計(jì) 4.6 過程設(shè)計(jì),第4章 軟件設(shè)計(jì)方法,4.1軟件設(shè)計(jì)的目標(biāo)和任務(wù),根據(jù)用信息域表示的軟件需求,以及功能和性能需求,進(jìn)行 數(shù)據(jù)設(shè)計(jì) 系統(tǒng)結(jié)構(gòu)設(shè)計(jì) 接口設(shè)計(jì) 過程設(shè)計(jì)。,數(shù)據(jù)設(shè)計(jì)需求分析階段創(chuàng)建的信息模型轉(zhuǎn)變成實(shí)現(xiàn)軟件所需要的數(shù)據(jù)結(jié)構(gòu)。 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)確定程序由哪些模塊組成以及這些模塊相互間的關(guān)系。 接口設(shè)計(jì)的結(jié)果描述了軟件內(nèi)部、軟件與協(xié)作系統(tǒng)之間以及軟件與使用它的人之間的通信方式。 過程設(shè)計(jì)則是把結(jié)構(gòu)成份轉(zhuǎn)換成軟件的過程性描述。在編碼步驟,根據(jù)這種過程性描述,生成源程序代碼,然后通過測試最終得到完整有效的軟件。,開發(fā)階段的信息流,程序模塊,測試,編碼,設(shè)計(jì),信息域需求,功能與性能需求,數(shù)據(jù)設(shè)計(jì),過程設(shè)計(jì),系統(tǒng)結(jié)構(gòu)設(shè)計(jì),組裝好的有效的軟件,軟件設(shè)計(jì)是后續(xù)開發(fā)步驟及軟件維護(hù)工作的基礎(chǔ)。如果沒有設(shè)計(jì),只能建立一個不穩(wěn)定的系統(tǒng)結(jié)構(gòu),軟件設(shè)計(jì)任務(wù),從工程管理的角度來看,軟件設(shè)計(jì)分兩步完成。 概要設(shè)計(jì),將軟件需求轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)和軟件的系統(tǒng)結(jié)構(gòu)。 詳細(xì)設(shè)計(jì),即過程設(shè)計(jì)。通過對結(jié)構(gòu)表示進(jìn)行細(xì)化,得到軟件的詳細(xì)的數(shù)據(jù)結(jié)構(gòu)和算法。,軟件設(shè)計(jì)過程,1. 制定規(guī)范 在進(jìn)入軟件開發(fā)階段之初,首先應(yīng)為軟件開發(fā)組制定在設(shè)計(jì)時應(yīng)該共同遵守的標(biāo)準(zhǔn),以便協(xié)調(diào)組內(nèi)各成員的工作。包括:,閱讀和理解軟件需求說明書,確認(rèn)用戶要求能否實(shí)現(xiàn),明確實(shí)現(xiàn)的條件,從而確定設(shè)計(jì)的目標(biāo),以及它們的優(yōu)先順序 根據(jù)目標(biāo)確定最合適的設(shè)計(jì)方法 規(guī)定設(shè)計(jì)文檔的編制標(biāo)準(zhǔn) 規(guī)定編碼的信息形式,與硬件,操作系統(tǒng)的接口規(guī)約,命名規(guī)則,2. 軟件系統(tǒng)結(jié)構(gòu)的總體設(shè)計(jì),基于功能層次結(jié)構(gòu)建立系統(tǒng)。 采用某種設(shè)計(jì)方法,將系統(tǒng)按功能劃分成模塊的層次結(jié)構(gòu) 確定每個模塊的功能 建立與已確定的軟件需求的對應(yīng)關(guān)系 確定模塊間的調(diào)用關(guān)系 確定模塊間的接口 評估模塊劃分的質(zhì)量,3. 處理方式設(shè)計(jì),確定為實(shí)現(xiàn)系統(tǒng)的功能需求所必需的算法,評估算法的性能 確定為滿足系統(tǒng)的性能需求所必需的算法和模塊間的控制方式 周轉(zhuǎn)時間 響應(yīng)時間 吞吐量 精度 確定外部信號的接收發(fā)送形式,4. 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),確定軟件涉及的文件系統(tǒng)的結(jié)構(gòu)以及數(shù)據(jù)庫的模式、子模式,進(jìn)行數(shù)據(jù)完整性和安全性的設(shè)計(jì) 確定輸入,輸出文件的詳細(xì)的數(shù)據(jù)結(jié)構(gòu) 結(jié)合算法設(shè)計(jì),確定算法所必需的邏輯數(shù)據(jù)結(jié)構(gòu)及其操作 確定對邏輯數(shù)據(jù)結(jié)構(gòu)所必需的那些操作的程序模塊(軟件包),限制和確定各個數(shù)據(jù)設(shè)計(jì)決策的影響范圍 若需要與操作系統(tǒng)或調(diào)度程序接口所必須的控制表等數(shù)據(jù)時,確定其詳細(xì)的數(shù)據(jù)結(jié)構(gòu)和使用規(guī)則 數(shù)據(jù)的保護(hù)性設(shè)計(jì) 防衛(wèi)性設(shè)計(jì):在軟件設(shè)計(jì)中就插入自動檢錯,報錯和糾錯的功能,一致性設(shè)計(jì): 保證軟件運(yùn)行過程中所使用的數(shù)據(jù)的類型和取值范圍不變 在并發(fā)處理過程中使用封鎖和解除封鎖機(jī)制保持?jǐn)?shù)據(jù)不被破壞 冗余性設(shè)計(jì):針對同一問題,由兩個開發(fā)者采用不同的程序設(shè)計(jì)風(fēng)格不同的算法設(shè)計(jì)軟件,當(dāng)兩者運(yùn)行結(jié)果之差不在允許范圍內(nèi)時,利用檢錯系統(tǒng)予以糾正,或使用表決技術(shù)決定一個正確結(jié)果。,5.可靠性設(shè)計(jì),可靠性設(shè)計(jì)也叫做質(zhì)量設(shè)計(jì) 在運(yùn)行過程中,為了適應(yīng)環(huán)境的變化和用戶新的要求,需經(jīng)常對軟件進(jìn)行改造和修正。在軟件開發(fā)的一開始就要確定軟件可靠性和其它質(zhì)量指標(biāo),考慮相應(yīng)措施,以使得軟件易于修改和易于維護(hù)。,6.編寫概要設(shè)計(jì)階段的文檔,概要設(shè)計(jì)階段完成時應(yīng)編寫以下文檔: 概要設(shè)計(jì)說明書 數(shù)據(jù)庫設(shè)計(jì)說明書 用戶手冊 制定初步的測試計(jì)劃,7.概要設(shè)計(jì)評審,可追溯性:確認(rèn)該設(shè)計(jì)是否復(fù)蓋了所有已確定的軟件需求,軟件每一成份是否可追溯到某一項(xiàng)需求 接口:確認(rèn)該軟件的內(nèi)部接口與外部接口是否已經(jīng)明確定義。模塊是否滿足高內(nèi)聚和低耦合的要求。模塊作用范圍是否在其控制范圍之內(nèi) 風(fēng)險:確認(rèn)該設(shè)計(jì)在現(xiàn)有技術(shù)條件下和預(yù)算范圍內(nèi)是否能按時實(shí)現(xiàn),實(shí)用性:確認(rèn)該設(shè)計(jì)對于需求的解決方案是否實(shí)用 技術(shù)清晰度:確認(rèn)該設(shè)計(jì)是否以一種易于翻譯成代碼的形式表達(dá) 可維護(hù)性:確認(rèn)該設(shè)計(jì)是否考慮了方便未來的維護(hù) 質(zhì)量:確認(rèn)該設(shè)計(jì)是否表現(xiàn)出良好的質(zhì)量特征,各種選擇方案:看是否考慮過其它方案,比較各種選擇方案的標(biāo)準(zhǔn)是什么 限制:評估對該軟件的限制是否現(xiàn)實(shí),是否與需求一致 其它具體問題:對于文檔、可測試性、設(shè)計(jì)過程等進(jìn)行評估,在詳細(xì)設(shè)計(jì)過程中,需要完成的工作是: 確定軟件各個組成部分內(nèi)的算法以及各部分的內(nèi)部數(shù)據(jù)組織 選定某種過程的表達(dá)形式來描述各種算法。 進(jìn)行詳細(xì)設(shè)計(jì)的評審,詳細(xì)設(shè)計(jì),4.2軟件設(shè)計(jì)基礎(chǔ),自頂向下,逐步細(xì)化 軟件結(jié)構(gòu) 程序結(jié)構(gòu) 結(jié)構(gòu)圖 模塊化 抽象化 信息隱蔽,自頂向下,逐步細(xì)化,將軟件的體系結(jié)構(gòu)按自頂向下方式,對各個層次的過程細(xì)節(jié)和數(shù)據(jù)細(xì)節(jié)逐層細(xì)化,直到用程序設(shè)計(jì)語言的語句能夠?qū)崿F(xiàn)為止,從而最后確立整個的體系結(jié)構(gòu)。,軟件結(jié)構(gòu),軟件結(jié)構(gòu)包括兩部分。程序的模塊結(jié)構(gòu)和數(shù)據(jù)的結(jié)構(gòu) 軟件的體系結(jié)構(gòu)通過一個劃分過程來完成。該劃分過程從需求分析確立的目標(biāo)系統(tǒng)的模型出發(fā),對整個問題進(jìn)行分割,使其每個部分用一個或幾個軟件成份加以解決,整個問題就解決了,程序結(jié)構(gòu),程序結(jié)構(gòu)表明了程序各個部件(模塊)的組織情況,是軟件的過程表示。,結(jié)構(gòu)圖,結(jié)構(gòu)圖反映程序中模塊之間的層次調(diào)用關(guān)系和聯(lián)系:它以特定的符號表示模塊、模塊間的調(diào)用關(guān)系和模塊間信息的傳遞, 模塊:模塊用矩形框表示,并用模塊的名字標(biāo)記它。, 模塊的調(diào)用關(guān)系和接口:模塊之間用單向箭頭聯(lián)結(jié),箭頭從調(diào)用模塊指向被調(diào)用模塊。, 模塊間的信息傳遞:當(dāng)一個模塊調(diào)用另一個模塊時,調(diào)用模塊把數(shù)據(jù)或控制信息傳送給被調(diào)用模塊,以使被調(diào)用模塊能夠運(yùn)行。而被調(diào)用模塊在執(zhí)行過程中又把它產(chǎn)生的數(shù)據(jù)或控制信息回送給調(diào)用模塊, 在模塊A的箭頭尾部標(biāo)以一個菱形符號,表示模塊A有條件地調(diào)用另一個模塊B。當(dāng)一個在調(diào)用箭頭尾部標(biāo)以一個弧形符號,表示模塊A反復(fù)調(diào)用模塊C和模塊D。,程序的系統(tǒng)結(jié)構(gòu)圖,模塊化,軟件系統(tǒng)的模塊化是指整個軟件被劃分成若干單獨(dú)命名和可編址的部分,稱之為模塊。這些模塊可以被組裝起來以滿足整個問題的需求。 把問題子問題的分解與軟件開發(fā)中的系統(tǒng)子系統(tǒng)或系統(tǒng)模塊對應(yīng)起來,就能夠把一個大而復(fù)雜的軟件系統(tǒng)劃分成易于理解的比較單純的模塊結(jié)構(gòu)。,抽象化,軟件系統(tǒng)進(jìn)行模塊設(shè)計(jì)時,可有不同的抽象層次。 在最高的抽象層次上,可以使用問題所處環(huán)境的語言概括地描述問題的解法。 在較低的抽象層次上,則采用過程化的方法。,(1) 過程的抽象 在軟件工程中,從系統(tǒng)定義到實(shí)現(xiàn),每進(jìn)展一步都可以看做是對軟件解決方法的抽象化過程的一次細(xì)化。 在軟件需求分析階段,用“問題所處環(huán)境的為大家所熟悉的術(shù)語”來描述軟件的解決方法。 在從概要設(shè)計(jì)到詳細(xì)設(shè)計(jì)的過程中,抽象化的層次逐次降低。當(dāng)產(chǎn)生源程序時到達(dá)最低抽象層次。,(2) 數(shù)據(jù)抽象 抽象是人類在認(rèn)識復(fù)雜現(xiàn)象、解決復(fù)雜問題的過程中使用的最強(qiáng)有用的思維工具。 在現(xiàn)實(shí)世界中,一定事物、狀態(tài)或過程之間總會存在某些相似的方面(共性),把這些相似的方面集中和概括起來,暫時忽略它們之間的差異,這就是抽象。 或者說抽象就是提取出事物的本質(zhì)特性而暫時不考慮它們的細(xì)節(jié)。,由于人數(shù)思維能力的限制,如果一次面臨的因素太多,是不可能做出精確思維的 設(shè)計(jì)復(fù)雜系統(tǒng)的惟一有效的方法是用層次的方式分析和構(gòu)造它 一個復(fù)雜的軟件系統(tǒng)應(yīng)該首先用一些高級的抽象概念來理解和構(gòu)造,這些高級概念又可以用一些較低級的概念來理解和構(gòu)造,如此進(jìn)行下去,直至最低層的具體元素,信息隱蔽,由 parnas 方法提倡的信息隱蔽是指,每個模塊的實(shí)現(xiàn)細(xì)節(jié)對于其它模塊來說是隱蔽的。也就是說,模塊中所包含的信息(包括數(shù)據(jù)和過程)不允許其它不需要這些信息的模塊使用。,模塊的獨(dú)立性,模塊(Module) “模塊”,又稱“組件”。它一般具有如下三個基本屬性: 功能:描述該模塊實(shí)現(xiàn)什么功能 邏輯:描述模塊內(nèi)部怎么做 狀態(tài):該模塊使用時的環(huán)境和條件,在描述一個模塊時,還必須按模塊的外部特性與內(nèi)部特性分別描述 模塊的外部特性 模塊的模塊名、參數(shù)表、其中的輸入?yún)?shù)和輸出參數(shù),以及給程序以至整個系統(tǒng)造成的影響 模塊的內(nèi)部特性 完成其功能的程序代碼和僅供該模塊內(nèi)部使用的數(shù)據(jù),4.3模塊獨(dú)立性 模塊獨(dú)立性, 是指軟件系統(tǒng)中每個模塊只涉及軟件要求的具體的子功能, 而和軟件系統(tǒng)中其它的模塊的接口是簡單的 例如, 若一個模塊只具有單一的功能且與其它模塊沒有太多的聯(lián)系, 則稱此模塊具有模塊獨(dú)立性 一般采用兩個準(zhǔn)則度量模塊獨(dú)立性。即模塊間耦合和模塊內(nèi)聚,耦合是模塊之間的互相連接的緊密程度的度量。 內(nèi)聚是模塊功能強(qiáng)度(一個模塊內(nèi)部各個元素彼此結(jié)合的緊密程度)的度量。 模塊獨(dú)立性比較強(qiáng)的模塊應(yīng)是高內(nèi)聚低耦合的模塊。,模塊間的耦合,非直接耦合(Nondirect Coupling) 兩個模塊之間沒有直接關(guān)系,它們之 間的聯(lián)系完全是通過主模塊的控制和 調(diào)用來實(shí)現(xiàn)的。 非直接耦合的 模塊獨(dú)立性最 強(qiáng)。,數(shù)據(jù)耦合 (Data Coupling) 一個模塊訪問另一個模塊時,彼此之間是通過簡單數(shù)據(jù)參數(shù) (不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量) 來交換輸入、輸出信息的。 標(biāo)記耦合 (Stamp Coupling) 一組模塊通過參數(shù)表傳遞記錄信息,就是標(biāo)記耦合。這個記錄是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡單變量。,控制耦合 (Control Coupling) 如果一個模 塊通過傳送開 關(guān)、標(biāo)志、名 字等控制信息, 明顯地控制選 擇另一模塊的 功能,就是控 制耦合。,外部耦合(External Coupling) 一組模塊都訪問同一全局簡單變量而不是同一全局?jǐn)?shù)據(jù)結(jié)構(gòu),而且不是通過參數(shù)表傳遞該全局變量的信息,則稱之為外部耦合。 公共耦合(Common Coupling) 若一組模塊都訪問同一個公共數(shù)據(jù)環(huán)境,則它們之間的耦合就稱為公共耦合。公共的數(shù)據(jù)環(huán)境可以是全局?jǐn)?shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)等。,公共耦合的復(fù)雜程度隨耦合模塊的個數(shù)增加而顯著增加。若只是兩模塊間有公共數(shù)據(jù)環(huán)境,則公共耦合有兩種情況。松散公共耦合和緊密公共耦合。,內(nèi)容耦合 (Content Coupling) 如果發(fā)生下列情形,兩個模塊之間就發(fā)生了內(nèi)容耦合 (1) 一個模塊直接訪問另一個模塊的內(nèi)部數(shù)據(jù); (2) 一個模塊不通過正常入口轉(zhuǎn)到另一模塊內(nèi)部; (3) 兩個模塊有一部分程序代碼重迭(只可能出現(xiàn)在匯編語言中); (4) 一個模塊有多個入口。,c,模塊內(nèi)聚,功能內(nèi)聚 (Functional Cohesion) 一個模塊中各個部分都是完成某一具體功能必不可少的組成部分,或者說該模塊中所有部分都是為了完成一項(xiàng)具體功能而協(xié)同工作,緊密聯(lián)系,不可分割的。則稱該模塊為功能內(nèi)聚模塊。,信息內(nèi)聚 (Informational Cohesion) 這種模塊完成多個功能,各個功能都在同一數(shù)據(jù)結(jié)構(gòu)上操作,每一項(xiàng)功能有一個唯一的入口點(diǎn)。這個模塊將根據(jù)不同的要求,確定該執(zhí)行哪一個功能。由于這個模塊的所有功能都是基于同一個數(shù)據(jù)結(jié)構(gòu)(符號表),因此,它是一個信息內(nèi)聚的模塊。,信息內(nèi)聚模塊可以看成是多個功能內(nèi)聚模塊的組合,并且達(dá)到信息的隱蔽。即把某個數(shù)據(jù)結(jié)構(gòu)、資源或設(shè)備隱蔽在一個模塊內(nèi),不為別的模塊所知曉。,通信內(nèi)聚 (Communication Cohesion) 如果一個模塊內(nèi)各功能部分都使用了相同的輸入數(shù)據(jù),或產(chǎn)生了相同的輸出數(shù)據(jù),則稱之為通信內(nèi)聚模塊。通常,通信內(nèi)聚模塊是通過數(shù)據(jù)流圖來定義的。,過程內(nèi)聚 (Procedural Cohesion) 使用流程圖做為工具設(shè)計(jì)程序時,把流程圖中的某一部分劃出組成模塊,就得到過程內(nèi)聚模塊。例如,把流程圖中的循環(huán)部分、判定部分、計(jì)算部分分成三個模塊,這三個模塊都是過程內(nèi)聚模塊。,時間內(nèi)聚 (Classical Cohesion) 時間內(nèi)聚又稱為經(jīng)典內(nèi)聚。這種模塊大多為多功能模塊,但模塊的各個功能的執(zhí)行與時間有關(guān),通常要求所有功能必須在同一時間段內(nèi)執(zhí)行。例如初始化模塊和終止模塊。,邏輯內(nèi)聚(Logical Cohesion) 這種模塊把幾種 相關(guān)的功能組合 在一起,每次被 調(diào)用時,由傳送 給模塊的判定參 數(shù)來確定該模塊 應(yīng)執(zhí)行哪一種功 能。,巧合內(nèi)聚(Coincidental Cohesion) 巧合內(nèi)聚 (偶然內(nèi)聚)。當(dāng)模塊內(nèi)各部分之間沒有聯(lián)系,或者即使有聯(lián)系,這種聯(lián) 系也很松散, 則稱這種模 塊為巧合內(nèi) 聚模塊,它 是內(nèi)聚程度 最低的模塊。,4.4結(jié)構(gòu)化設(shè)計(jì)方法,首先研究、分析和審查數(shù)據(jù)流圖。 從軟件的需求規(guī)格說明中弄清數(shù)據(jù)流加工的過程,對于發(fā)現(xiàn)的問題及時解決。 然后根據(jù)數(shù)據(jù)流圖決定問題的類型。數(shù)據(jù)處理問題典型的類型有兩種:變換型和事務(wù)型。針對兩種不同的類型分別進(jìn)行分析處理。,由數(shù)據(jù)流圖推導(dǎo)出系統(tǒng)的初始結(jié)構(gòu)圖。 利用一些啟發(fā)式原則來改進(jìn)系統(tǒng)的初始結(jié)構(gòu)圖,直到得到符合要求的結(jié)構(gòu)圖為止。 修改和補(bǔ)充數(shù)據(jù)詞典。 制定測試計(jì)劃。,在系統(tǒng)結(jié)構(gòu)圖中的模塊,傳入模塊 從下屬模塊取得數(shù)據(jù),經(jīng)過某些處理,再將其傳送給上級模塊。它傳送的數(shù)據(jù)流叫做邏輯輸入數(shù)據(jù)流。 傳出模塊 從上級模塊獲得數(shù)據(jù),進(jìn)行某些處理,再將其傳送給下屬模塊。它傳送的數(shù)據(jù)流叫做邏輯輸出數(shù)據(jù)流。,變換模塊 它從上級模塊取得數(shù)據(jù),進(jìn)行特定的處理,轉(zhuǎn)換成其它形式,再傳送回上級模塊。它加工的數(shù)據(jù)流叫做變換數(shù)據(jù)流。 協(xié)調(diào)模塊 對所有下屬模塊進(jìn)行協(xié)調(diào)和管理的模塊。,變換型系統(tǒng)結(jié)構(gòu)圖,變換型數(shù)據(jù)處理問題的工作過程大致分為三步,即取得數(shù)據(jù),變換數(shù)據(jù)和給出數(shù)據(jù)。 相應(yīng)于取得數(shù)據(jù)、變換數(shù)據(jù)、給出數(shù)據(jù),變換型系統(tǒng)結(jié)構(gòu)圖由輸入、中心變換和輸出等三部分組成。,事務(wù)型系統(tǒng)結(jié)構(gòu)圖,它接受一項(xiàng)事務(wù),根據(jù)事務(wù)處理的特點(diǎn)和性質(zhì),選擇分派一個適當(dāng)?shù)奶幚韱卧?,然后給出結(jié)果。 在事務(wù)型系統(tǒng)結(jié)構(gòu)圖中,事務(wù)中心模塊按所接受的事務(wù)的類型,選擇某一事務(wù)處理模塊執(zhí)行。各事務(wù)處理模塊并列。每個事務(wù)處理模塊可能要調(diào)用若干個操作模塊,而操作模塊又可能調(diào)用若干個細(xì)節(jié)模塊。,變換分析,變換分析方法由以下四步組成: 重畫數(shù)據(jù)流圖; 區(qū)分有效(邏輯)輸入、有效(邏輯)輸出和中心變換部分; 進(jìn)行一級分解,設(shè)計(jì)上層模塊; 進(jìn)行二級分解,設(shè)計(jì)輸入、輸出和中心變換部分的中、下層模塊。, 在選擇模塊設(shè)計(jì)的次序時,必須對一個模塊的全部直接下屬模塊都設(shè)計(jì)完成 之后,才 能轉(zhuǎn)向另 一個模塊 的下層模 塊的設(shè)計(jì)。, 在設(shè)計(jì)下層模塊時,應(yīng)考慮模塊的耦合和內(nèi)聚問題,以提高初始結(jié)構(gòu)圖的質(zhì)量。 使用“黑箱”技術(shù): 在設(shè)計(jì)當(dāng)前模塊時,先把這個模塊的所有下層模塊定義成“黑箱”,在設(shè)計(jì)中利用它們時,暫時不考慮其內(nèi)部結(jié)構(gòu)和實(shí)現(xiàn)。在這一步定義好的“黑箱”,在下一步就可以對它們進(jìn)行設(shè)計(jì)和加工。這樣,又會導(dǎo)致更多的“黑箱”。最后,全部“黑箱”的內(nèi)容和結(jié)構(gòu)應(yīng)完全被確定。, 在模塊劃分時,一個模塊的直接下屬模塊一般在5個左右。如果直接下屬模塊超過10個,可設(shè)立中間層次。 如果出現(xiàn)了以下情況,就停止模塊的功能分解: 當(dāng)模塊不能再細(xì)分為明顯的子任務(wù)時; 當(dāng)分解成用戶提供的模塊或程序庫的子程序時; 當(dāng)模塊的界面是輸入輸出設(shè)備傳送的信息時; 當(dāng)模塊不宜再分解得過小時。,事務(wù)分析,在很多軟件應(yīng)用中,存在某種作業(yè)數(shù)據(jù)流,它可以引發(fā)一個或多個處理,這些處理能夠完成該作業(yè)要求的功能。這種數(shù)據(jù)流就叫做事務(wù)。 與變換分析一樣,事務(wù)分析也是從分析數(shù)據(jù)流圖開始,自頂向下,逐步分解,建立系統(tǒng)到結(jié)構(gòu)圖。,事務(wù)分析過程, 識別事務(wù)源 利用數(shù)據(jù)流圖和數(shù)據(jù)詞典,從問題定義和需求分析的結(jié)果中,找出各種需要處理的事務(wù)。通常,事務(wù)來自物理輸入裝置。有時,設(shè)計(jì)人員還必須區(qū)別系統(tǒng)的輸入、中心加工和輸出中產(chǎn)生的事務(wù)。, 規(guī)定適當(dāng)?shù)氖聞?wù)型結(jié)構(gòu) 在確定了該數(shù)據(jù)流圖具有事務(wù)型特征之后,根據(jù)模塊劃分理論,建立適當(dāng)?shù)氖聞?wù)型結(jié)構(gòu)。 識別各種事務(wù)和它們定義的操作。 從問題定義和需求分析中找出的事務(wù)及其操作所必需的全部信息,對于系統(tǒng)內(nèi)部產(chǎn)生的事務(wù),必須仔細(xì)地定義它們的操作。, 注意利用公用模塊 在事務(wù)分析的過程中,如果不同事務(wù)的一些中間模塊可由具有類似的語法和語義的若干個低層模塊組成,則可以把這些低層模塊構(gòu)造成公用模塊。 對每一事務(wù),或?qū)β?lián)系密切的一組事務(wù),建立一個事務(wù)處理模塊; 如果發(fā)現(xiàn)在系統(tǒng)中有類似的事務(wù),可以把它們組成一個事務(wù)處理模塊。, 對事務(wù)處理模塊規(guī)定它們?nèi)康南聦硬僮髂K 對操作模塊規(guī)定它們的全部細(xì)節(jié)模塊 變換分析是軟件系統(tǒng)結(jié)構(gòu)設(shè)計(jì)的主要方法。一般,一個大型的軟件系統(tǒng)是變換型結(jié)構(gòu)和事務(wù)型結(jié)構(gòu)的混合結(jié)構(gòu)。所以,我們通常利用以變換分析為主,事務(wù)分析為輔的方式進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)。,軟件模塊結(jié)構(gòu)的改進(jìn),模塊功能的完善化 一個完整的模塊應(yīng)當(dāng)有以下幾部分: 執(zhí)行規(guī)定的功能的部分; 出錯處理的部分。當(dāng)模塊不能完成規(guī)定的功能時,必須回送出錯標(biāo)志,出現(xiàn)例外情況的原因。 如果需要返回?cái)?shù)據(jù)給它的調(diào)用者,在完成數(shù)據(jù)加工或結(jié)束時, 應(yīng)當(dāng)給它的調(diào)用者返回一個狀態(tài)碼。,消除重復(fù)功能,改善軟件結(jié)構(gòu) 完全相似:在結(jié)構(gòu)上完全相似,可能只是在數(shù)據(jù)類型上不一致。此時可以采取完全合并的方法。 局部相似:找出其相同部分,分離出去,重新定義成一個獨(dú)立的下一層模塊。還可以與它的上級模塊合并。,模塊的作用范圍應(yīng)在控制范圍之內(nèi) 模塊的控制范圍包括它本身及其所有的從屬模塊。 模塊的作用范圍是指模塊內(nèi)一個判定的作用范圍,凡是受這個判定影響的所有模塊都屬于這個判定的作用范圍。 如果一個判定的作用范圍包含在這個判定所在模塊的控制范圍之內(nèi),則這種結(jié)構(gòu)是簡單的,否則,它的結(jié)構(gòu)是不簡單的。,盡可能減少高扇出結(jié)構(gòu),隨著深度增大扇入。 如果一個模塊的扇出數(shù)過大,就意味著該模塊過分復(fù)雜,需要協(xié)調(diào)和控制過多的下屬模塊。應(yīng)當(dāng)適當(dāng)增加中間層次的控制模塊。,避免或減少使用病態(tài)聯(lián)接 應(yīng)限制使用如下三種病態(tài)聯(lián)接: 直接病態(tài)聯(lián)接 即模塊A直接從模塊B內(nèi)部取出某些數(shù)據(jù),或者把某些數(shù)據(jù)直接送到模塊B內(nèi)部。, 公共數(shù)據(jù)域病態(tài)聯(lián)接 模塊A和模塊B通過公共數(shù)據(jù)域,直接傳送或接受數(shù)據(jù),而不是通過它們的上級模塊。這種方式將使得模塊間的耦合程度劇增。它不僅影響模塊和模塊,而且影響與公共數(shù)據(jù)域有關(guān)聯(lián)的所有模塊。, 通信模塊聯(lián)接 即模塊A和模塊B通過通信模塊TABLEIT傳送數(shù)據(jù)。從表面看,這不是病態(tài)聯(lián)接,因?yàn)槟K和模塊B都未涉及通信模塊TABLEIT 的內(nèi)部。然而,它們之間的通信(即數(shù)據(jù)傳送)沒有通過它們的上級模塊。從這個意義上講,這種聯(lián)接是病態(tài)的。,模塊的大小要適中 模塊的大小,可以用模塊中所含語句的數(shù)量的多少來衡量。把模塊的大小限制在一定的范圍之內(nèi)。通常規(guī)定其語句行數(shù)在50100左右,保持在一頁紙之內(nèi),最多不超過500行。,設(shè)計(jì)功能可預(yù)測的模塊,但要避免過分受限制的模塊 一個功能可預(yù)測的模塊,不論內(nèi)部處理細(xì)節(jié)如何,但對相同的輸入數(shù)據(jù),總能產(chǎn)生同樣的結(jié)果。但是,如果模塊內(nèi)部蘊(yùn)藏有一些特殊的鮮為人知的功能時,這個模塊就可能是不可預(yù)測的。對于這種模塊,如果調(diào)用者不小心使用,其結(jié)果將不可預(yù)測。,如果一個模塊的局部數(shù)據(jù)結(jié)構(gòu)的大小、控制流的選擇或者與外界(人、硬軟件) 的接口模式被限制死了,則很難適應(yīng)用戶新的要求或環(huán)境的變更。 為了能夠適應(yīng)將來的變更,軟件模塊中局部數(shù)據(jù)結(jié)構(gòu)的大小應(yīng)當(dāng)是可控制的,控制流的選擇對于調(diào)用者來說,應(yīng)當(dāng)是可預(yù)測的。而與外界的接口應(yīng)當(dāng)是靈活的。,軟件包應(yīng)滿足設(shè)計(jì)約束和可移植性 為了使得軟件包可以在某些特定的環(huán)境下能夠安裝和運(yùn)行,對軟件包提出了一些設(shè)計(jì)約束和可移植的要求。例如,設(shè)計(jì)約束有時要求一個程序段在存儲器中覆蓋自身。當(dāng)這種情況出現(xiàn)時,設(shè)計(jì)出來的軟件程序結(jié)構(gòu)不得不根據(jù)重復(fù)程度、訪問頻率、調(diào)用間隔等等特性,重新加以組織。,設(shè)計(jì)的后處理,為每一個模塊寫一份處理說明 為每一個模塊提供一份接口說明 確定全局?jǐn)?shù)據(jù)結(jié)構(gòu)和局部數(shù)據(jù)結(jié)構(gòu) 指出所有的設(shè)計(jì)約束和限制 進(jìn)行概要設(shè)計(jì)的評審 進(jìn)行設(shè)計(jì)的優(yōu)化(如果需要和可能的話),4.5數(shù)據(jù)設(shè)計(jì)及文件設(shè)計(jì),數(shù)據(jù)設(shè)計(jì)的原則 文件設(shè)計(jì),數(shù)據(jù)設(shè)計(jì)的原則,R.S.Pressman數(shù)據(jù)設(shè)計(jì)的過程 為在需求分析階段所確定的數(shù)據(jù)對象選擇邏輯表示,需要對不同結(jié)構(gòu)進(jìn)行算法分析,以便選擇一個最有效的結(jié)構(gòu);設(shè)計(jì)對于這種邏輯數(shù)據(jù)結(jié)構(gòu)的一組操作,以實(shí)現(xiàn)各種所期望的運(yùn)算。,確定對邏輯數(shù)據(jù)結(jié)構(gòu)所必需的那些操作的程序模塊(軟件包),以便限制或確定各個數(shù)據(jù)設(shè)計(jì)決策的影響范圍。 Pressman提出了一組原則,用來定義和設(shè)計(jì)數(shù)據(jù)。實(shí)際上,在進(jìn)行需求分析時往往就開始了數(shù)據(jù)設(shè)計(jì)。,1.用于軟件的系統(tǒng)化方法也適用于數(shù)據(jù)。在導(dǎo)出、評審和定義軟件的需求和軟件系統(tǒng)結(jié)構(gòu)時,必須定義和評審其中所用到的數(shù)據(jù)流、數(shù)據(jù)對象及數(shù)據(jù)結(jié)構(gòu)的表示。應(yīng)當(dāng)考慮幾種不同的數(shù)據(jù)組織方案,還應(yīng)當(dāng)分析數(shù)據(jù)設(shè)計(jì)給軟件設(shè)計(jì)帶來的影響。,2.確定所有的數(shù)據(jù)結(jié)構(gòu)和在每種數(shù)據(jù)結(jié)構(gòu)上施加的操作。設(shè)計(jì)有效的數(shù)據(jù)結(jié)構(gòu),必須考慮到要對該數(shù)據(jù)結(jié)構(gòu)進(jìn)行的各種操作。 3.應(yīng)當(dāng)建立一個數(shù)據(jù)詞典并用它來定義數(shù)據(jù)和軟件的設(shè)計(jì)。數(shù)據(jù)詞典清楚地說明了各個數(shù)據(jù)之間的關(guān)系和對數(shù)據(jù)結(jié)構(gòu)內(nèi)各個數(shù)據(jù)元素的約束。,4.低層數(shù)據(jù)設(shè)計(jì)的決策應(yīng)推遲到設(shè)計(jì)過程的后期進(jìn)行。在進(jìn)行需求分析時確定的總體數(shù)據(jù)組織,應(yīng)在概要設(shè)計(jì)階段加以細(xì)化,在詳細(xì)設(shè)計(jì)階段才規(guī)定具體的細(xì)節(jié)。 5.數(shù)據(jù)結(jié)構(gòu)的表示只限于那些必須直接使用該數(shù)據(jù)結(jié)構(gòu)內(nèi)數(shù)據(jù)的模塊才能知道。此原則就是信息隱蔽和與此相關(guān)的耦合性原則。,6.應(yīng)當(dāng)建立一個存放有效數(shù)據(jù)結(jié)構(gòu)及相關(guān)操作的庫。數(shù)據(jù)結(jié)構(gòu)應(yīng)當(dāng)設(shè)計(jì)成為可復(fù)用的。建立一個存有各種可復(fù)用的數(shù)據(jù)結(jié)構(gòu)模型的部件庫。 7.軟件設(shè)計(jì)和程序設(shè)計(jì)語言應(yīng)當(dāng)支持抽象數(shù)據(jù)類型的定義和實(shí)現(xiàn)。 以上原則適用于軟件工程的定義階段和開發(fā)階段。“清晰的信息定義是軟件開發(fā)成功的關(guān)鍵”。,文件設(shè)計(jì),文件設(shè)計(jì)的過程,主要分兩個階段。第一個階段是文件的邏輯設(shè)計(jì),主要在概要設(shè)計(jì)階段實(shí)施。,(1) 整理必須的數(shù)據(jù)元素: 在軟件設(shè)計(jì)中所使用的數(shù)據(jù),有長期的,有短期的,還有臨時的。它們都可以存放在文件中,在需要時對它們進(jìn)行訪問。因此首先必須整理應(yīng)存儲的數(shù)據(jù)元素,給它們一個易于理解的名字,指明其類型和位數(shù),以及其內(nèi)容涵義。,(2) 分析數(shù)據(jù)間的關(guān)系: 分析在業(yè)務(wù)處理中哪些數(shù)據(jù)元素是同時使用的。把同時使用次數(shù)多的數(shù)據(jù)元素歸納成一個文件進(jìn)行管理。分析數(shù)據(jù)元素的內(nèi)容,研究數(shù)據(jù)元素與數(shù)據(jù)元素之間的邏輯關(guān)系,根據(jù)分析,弄清數(shù)據(jù)元素的含義及其屬性。,(3) 確定文件的邏輯設(shè)計(jì): 根據(jù)數(shù)據(jù)關(guān)聯(lián)性分析,明確哪些數(shù)據(jù)元素應(yīng)當(dāng)歸于一組進(jìn)行管理,把應(yīng)當(dāng)歸于一組的數(shù)據(jù)元素進(jìn)行統(tǒng)一布局,產(chǎn)生文件的邏輯設(shè)計(jì)。應(yīng)用關(guān)系模型設(shè)計(jì)文件的邏輯結(jié)構(gòu)時,必須使其達(dá)到第三范式(3NF),以減少數(shù)據(jù)的冗余,提高存取的效率。,顧客文件 商品文件,X : 英文字母數(shù)字; K : 漢字; N : 數(shù)字,第二個階段是文件的物理設(shè)計(jì),主要在軟件的詳細(xì)設(shè)計(jì)階段實(shí)施 (4) 理解文件的特性: 對于文件的邏輯規(guī)格說明,研究從業(yè)務(wù)處理的觀點(diǎn)來看所要求的一些特性,包括文件的使用率、追加率和刪除率,以及保護(hù)和保密等??紤]需要采用什么文件組織形式。,(5)確定文件的組織方式 一般要根據(jù)文件的特性,來確定文件的組織方式。 順序文件: 連續(xù)文件 串聯(lián)文件。 直接存取文件: 無關(guān)鍵字直接存取文件 帶關(guān)鍵字直接存取文件 桶式直接存取文件。,索引順序文件: 其基本數(shù)據(jù)記錄按順序文件組 織,記錄排列順序必須按關(guān)鍵 字值升序或降序安排,且具有 索引部分,也按同一關(guān)鍵字進(jìn) 行索引。 分區(qū)文件: 這類文件主要用于存放程序。 它由若干稱為成員的順序組織 的記錄組和索引組成。,虛擬存儲文件: 這是基于操作系統(tǒng)的請求頁式 存儲管理功能而建立的索引順 序文件。 倒排文件: 按候選屬性建立索引表。,(6)確定文件的存儲介質(zhì); (7)確定文件的記錄格式; 確定文件記錄中各數(shù)據(jù)項(xiàng)以及它們在記錄中的物理安排。 記錄的長度:設(shè)計(jì)記錄的長度要確保能滿足需要,還要考慮使用設(shè)備的制約和效率,盡可能與讀寫單位匹配,并盡可能減少處理過程中內(nèi)外存的交換次數(shù)。, 數(shù)據(jù)項(xiàng)的順序:對于可變長記錄,應(yīng)在記錄的開頭記入長度信息;對于關(guān)鍵字項(xiàng),應(yīng)盡量按級別高低,順序配置;聯(lián)系較密切的數(shù)據(jù)項(xiàng),應(yīng)歸納在一起進(jìn)行配置。 數(shù)據(jù)項(xiàng)的屬性:屬性相同的數(shù)據(jù)項(xiàng),應(yīng)盡量歸納在一起配置;數(shù)據(jù)項(xiàng)應(yīng)按雙字長,全字長,半字長和字節(jié)的屬性,順序配置。, 預(yù)留空間:考慮到將來可能的變更或擴(kuò)充,應(yīng)當(dāng)預(yù)先留一些空閑空間。不必統(tǒng)一地預(yù)留,可在有可能變更或擴(kuò)充的項(xiàng)旁邊,在相鄰接處預(yù)留。 (8) 估算存取時間和存儲容量。,4.6過程設(shè)計(jì),從軟件開發(fā)的工程化觀點(diǎn)來看,在使用程序設(shè)計(jì)語言編制程序以前,需要對所采用算法的邏輯關(guān)系進(jìn)行分析,設(shè)計(jì)出全部必要的過程細(xì)節(jié),
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)殖出租轉(zhuǎn)讓合同范本
- 云南省監(jiān)理聘用合同范本
- 北碚區(qū)運(yùn)輸合同范本
- 興業(yè)快遞轉(zhuǎn)讓合同范本
- 北京入職合同范本
- 農(nóng)資農(nóng)藥購銷合同范本
- 農(nóng)莊合作期間轉(zhuǎn)讓合同范本
- 公司雇傭個人合同范本
- 出貨貨期合同范本
- 價稅分開合同范本
- PEP六年級上冊英語unit1
- 接納與承諾(ACT)療法課件
- 裝配式混凝土建筑技術(shù)標(biāo)準(zhǔn)
- 房地產(chǎn)公司銷售管理部賞罰制度
- 《方位介詞介紹》課件
- 甲狀腺術(shù)后出血搶救流程
- 個人購買家具合同
- 國際救生設(shè)備規(guī)則
- 第三方檢查應(yīng)對措施方案
- 2020年財(cái)產(chǎn)保險公司部門職責(zé)和崗位說明書
- 抽水臺班記錄表
評論
0/150
提交評論