軟件復(fù)用技術(shù)及軟件概要設(shè)計(jì)_第1頁
軟件復(fù)用技術(shù)及軟件概要設(shè)計(jì)_第2頁
軟件復(fù)用技術(shù)及軟件概要設(shè)計(jì)_第3頁
軟件復(fù)用技術(shù)及軟件概要設(shè)計(jì)_第4頁
軟件復(fù)用技術(shù)及軟件概要設(shè)計(jì)_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

論使用復(fù)用設(shè)計(jì)1、引言復(fù)用是活動(dòng),而不是對象。在創(chuàng)建軟件相關(guān)的系統(tǒng)的語境中,復(fù)用僅僅是非常簡單的任何過程,該過程通過復(fù)用來自以前開發(fā)工作的某些東西來生產(chǎn)(或幫助生產(chǎn))一個(gè)系統(tǒng)。那么,唯一的問題是:復(fù)用什么、什么是導(dǎo)致成功復(fù)用的過程。在軟件工程的范圍內(nèi),復(fù)用既是舊概念,也是新概念。程序員從最早的計(jì)算時(shí)代已開始復(fù)用概念、對象、論據(jù)、抽象和過程,但是我們復(fù)用的途徑是特定的。本文對軟件復(fù)用的討論,將從以下四個(gè)方面進(jìn)行:1)軟件工程師可以獲得一系列可復(fù)用的軟件制品,這些包括軟件的技術(shù)表示(例如,規(guī)約、體系結(jié)構(gòu)模型、設(shè)計(jì)和代碼)、文檔、測試數(shù)據(jù),甚至包括過程相關(guān)的任務(wù)(如,檢查技術(shù))。2)復(fù)用過程包括兩個(gè)并發(fā)的子過程:領(lǐng)域工程和軟件工程。領(lǐng)域工程的目的是在特定應(yīng)用領(lǐng)域中標(biāo)識、構(gòu)造、分類和傳播一組軟件制品。然后,軟件工程可在新系統(tǒng)開發(fā)中選取這些軟件制品作為復(fù)用。3)構(gòu)件復(fù)用為軟件質(zhì)量、開發(fā)者生產(chǎn)率、以及整個(gè)系統(tǒng)成本帶來了固有的收益,然而,在復(fù)用過程模型被廣泛地用于軟件產(chǎn)業(yè)前,必須克服很多障礙。4)對可復(fù)用構(gòu)件的分析、設(shè)計(jì)技術(shù)采用和在良好的軟件工程實(shí)踐中使用的相同原則和概念??蓮?fù)用構(gòu)件應(yīng)該在一個(gè)環(huán)境中設(shè)計(jì),該環(huán)境為每個(gè)應(yīng)用領(lǐng)域建立標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu)、接口協(xié)議和程序體系結(jié)構(gòu)。2、可復(fù)用的軟件制品軟件復(fù)用不僅僅涉及源代碼,但是,還涉及多少東西呢?CaperJones定義了可作為復(fù)用候選的十種軟件制品:項(xiàng)目計(jì)劃。軟件項(xiàng)目計(jì)劃的基本結(jié)構(gòu)和許多內(nèi)容(例如,SQA計(jì)劃)均是可以跨項(xiàng)目復(fù)用的。這樣減少了用于制定計(jì)劃的時(shí)間,也減低了和建立進(jìn)度表、風(fēng)險(xiǎn)分析和其他特征相關(guān)的不確定性。成本估計(jì)。因?yàn)榻?jīng)常不同項(xiàng)目中含有類似的功能,所以有可能在極少修改或不修改的情況下,復(fù)用對該功能的成本估計(jì)。體系結(jié)構(gòu)。即使當(dāng)考慮不同的應(yīng)用領(lǐng)域時(shí),也很少有截然不同的程序和數(shù)據(jù)體系結(jié)構(gòu)。因此,有可能創(chuàng)建一組類屬的體系結(jié)構(gòu)模板(例如,事務(wù)處理體系結(jié)構(gòu)),并將那些模板作為可復(fù)用的設(shè)計(jì)框架。需求模型和規(guī)約。類和對象的模型和規(guī)約是明顯的復(fù)用的候選者,此外,用傳統(tǒng)軟件工程方法開發(fā)的分析模型(例如,數(shù)據(jù)流圖)也是可復(fù)用的。設(shè)計(jì)。用傳統(tǒng)方法開發(fā)的體系結(jié)構(gòu)、數(shù)據(jù)、接口和過程化設(shè)計(jì)是復(fù)用的候選者,更常見的是,系統(tǒng)和對象設(shè)計(jì)是可復(fù)用的。源代碼。驗(yàn)證過的程序構(gòu)件(用兼容的程序設(shè)計(jì)語言書寫的)是復(fù)用的候選者。用戶和技術(shù)文檔。即使特定的應(yīng)用是不同的,也經(jīng)常有可能復(fù)用用戶和技術(shù)文檔的大部分。用戶界面。可能是最廣泛被復(fù)用的軟件制品,GUI軟件經(jīng)常被復(fù)用。因?yàn)樗烧嫉揭粋€(gè)應(yīng)用的60%的代碼量,因此,復(fù)用的效果非常顯著。數(shù)據(jù)。在大多數(shù)經(jīng)常被復(fù)用的軟件制品中,數(shù)據(jù)包括:內(nèi)部表、列表和記錄結(jié)構(gòu),以及文件和完整的數(shù)據(jù)庫。測試用例。一旦設(shè)計(jì)或代碼構(gòu)件將被復(fù)用,相關(guān)的測試用例應(yīng)該“附屬于”它們。應(yīng)該注意,復(fù)用可以擴(kuò)展到上面所討論的可交付的軟件制品之外,它也包含了軟件工程過程中的元素。特定的分析建模方法、檢查技術(shù)、測試用例設(shè)計(jì)技術(shù)、質(zhì)量保證過程、以及很多其他軟件工程實(shí)踐可以被“復(fù)用”,例如,如果某軟件項(xiàng)目組有效地應(yīng)用凈室軟件工程方法,該方法可能適用于另一個(gè)項(xiàng)目。為了作出決定,有必要定義一組描述功能,它們使得潛在的凈室用戶能夠?qū)ζ鋺?yīng)用作出適當(dāng)?shù)臎Q策。3、復(fù)用過程復(fù)用過程包括兩個(gè)并發(fā)的子過程:領(lǐng)域工程和軟件工程。3.1、領(lǐng)域工程領(lǐng)域工程的目的是標(biāo)識、構(gòu)造、分類和傳播一組軟件制品,它們對某特定應(yīng)用領(lǐng)域中對現(xiàn)存的和未來的軟件系統(tǒng)具有很好適用性。其整體目標(biāo)是建立相應(yīng)的機(jī)制,以使得軟件工程師在工作于新的或現(xiàn)存的系統(tǒng)時(shí)可以分享這些軟件制品——復(fù)用它們。領(lǐng)域工程包括三個(gè)主要的活動(dòng)——分析、構(gòu)造和傳播。在第20章中已給出領(lǐng)域分析的概述,然而,本節(jié)中將再討論這個(gè)話題。領(lǐng)域構(gòu)造和傳播將在本章以后幾節(jié)中討論。有人爭辯說“復(fù)用將消失,不是被消除,而是被集成”進(jìn)軟件工程實(shí)踐之中,隨著復(fù)用被更多的強(qiáng)調(diào),人們相信在下個(gè)十年領(lǐng)域工程將變得和軟件工程一樣重要。3.1.1、領(lǐng)域分析過程在面向?qū)ο筌浖こ谭秶鷥?nèi)領(lǐng)域分析的方法,過程中的步驟定義如下:1).定義將被研究的領(lǐng)域。2).分類從領(lǐng)域中抽出的物項(xiàng)。3).收集領(lǐng)域中有代表性的應(yīng)用樣本。4).分析樣本中的每個(gè)應(yīng)用。5).開發(fā)對象的分析模型。必須注意,領(lǐng)域分析適用于任意軟件工程范型,并且可以用于傳統(tǒng)的以及面向?qū)ο蟮能浖_發(fā)。Prieto-Diaz擴(kuò)展了上面給出的領(lǐng)域分析的第二個(gè)步驟,建議了一個(gè)8步驟的標(biāo)識和分類可復(fù)用軟件制品的方法:1).選擇特定的功能/對象。2).抽象功能/對象。3).定義分類法。4).標(biāo)識公共特征。5).標(biāo)識特定的關(guān)系。6).抽象關(guān)系。7).導(dǎo)出功能模型。8).定義領(lǐng)域語言。領(lǐng)域語言使得在領(lǐng)域中進(jìn)行應(yīng)用的規(guī)約及構(gòu)造成為可能。雖然上面的步驟提供了一個(gè)有用的領(lǐng)域分析模型,但是它沒有提供幫助決定哪些軟件制品是復(fù)用候選的有用的指南。Hutchinson和Hindley提出了下面一組實(shí)際的問題,它們可以用作標(biāo)識可復(fù)用軟件構(gòu)件的指南:*構(gòu)件功能對未來的實(shí)現(xiàn)工作是需要的嗎?*在領(lǐng)域中構(gòu)件功能的公共性怎樣?*在領(lǐng)域中存在構(gòu)件功能的重復(fù)嗎?*構(gòu)件是否依賴于硬件?*在不同實(shí)現(xiàn)之間硬件是否保持不變?*硬件細(xì)節(jié)可被移動(dòng)到另一個(gè)構(gòu)件嗎?*設(shè)計(jì)為下面的實(shí)現(xiàn)進(jìn)行過足夠的優(yōu)化嗎?*我們能夠?qū)⒁粋€(gè)不可復(fù)用的構(gòu)件參數(shù)化以使其變成可復(fù)用的嗎?*構(gòu)件是否可以僅僅經(jīng)過少許修改就能夠在很多實(shí)現(xiàn)中復(fù)用嗎?*通過修改進(jìn)行復(fù)用是可行的嗎?*某不可復(fù)用的構(gòu)件能夠通過被分解以產(chǎn)生一組可復(fù)用構(gòu)件嗎?*針對復(fù)用的構(gòu)件分解是有效的嗎?關(guān)于領(lǐng)域分析的深入討論不在本書范圍之內(nèi),更多的信息可見。3.1.2、結(jié)構(gòu)建模和結(jié)構(gòu)點(diǎn)當(dāng)使用領(lǐng)域分析時(shí),分析員尋找在某領(lǐng)域中應(yīng)用間的重復(fù)模式。結(jié)構(gòu)化建模(Structuralmodeling)是一種基于模式的領(lǐng)域工程方法,應(yīng)用該方法的前提假設(shè)是:每個(gè)應(yīng)用領(lǐng)域有重復(fù)的模式(功能的、數(shù)據(jù)的和行為的),它們具有可復(fù)用的潛在可能。Pollak和Rissman描述結(jié)構(gòu)建模如下:結(jié)構(gòu)模型由少量的用于表明清晰的交互模式的結(jié)構(gòu)元素組成。使用結(jié)構(gòu)模型的系統(tǒng)的體系結(jié)構(gòu)通過多個(gè)由這些模型元素組成的東西來刻劃,這樣,在系統(tǒng)的體系結(jié)構(gòu)單元間的復(fù)雜交互可以用在這些少量元素間的簡單交互模式來描述。每個(gè)應(yīng)用領(lǐng)域可用一個(gè)結(jié)構(gòu)模型來刻劃(例如,飛行器電子設(shè)備在細(xì)節(jié)上差異很大,但是在該領(lǐng)域的所有現(xiàn)代軟件具有相同的結(jié)構(gòu)模型),因此,結(jié)構(gòu)模型是一種體系結(jié)構(gòu)制品,它可以也應(yīng)該在領(lǐng)域內(nèi)所有應(yīng)用中被復(fù)用。McMahon描述結(jié)構(gòu)點(diǎn)(structurePoint)為:“在結(jié)構(gòu)模型中的一個(gè)獨(dú)特構(gòu)成物”,結(jié)構(gòu)點(diǎn)有三個(gè)顯著的特征:1).一個(gè)結(jié)構(gòu)點(diǎn)是一個(gè)抽象,它應(yīng)該有有限數(shù)量的實(shí)例。用面向?qū)ο蟮男性拋黻愂?,類層次的?guī)模應(yīng)是小的。此外,該抽象應(yīng)該在領(lǐng)域中所有應(yīng)用中不斷重現(xiàn),否則,用于驗(yàn)證、文檔化和傳播結(jié)構(gòu)點(diǎn)所需的努力不可能是成本合算的。2).管理結(jié)構(gòu)點(diǎn)的使用的規(guī)則應(yīng)該是容易理解的。此外,結(jié)構(gòu)點(diǎn)的接口應(yīng)該相當(dāng)簡單。3).結(jié)構(gòu)點(diǎn)應(yīng)該通過隱藏所有包含在結(jié)構(gòu)點(diǎn)內(nèi)部的復(fù)雜性而實(shí)現(xiàn)信息隱蔽,這會減少整個(gè)系統(tǒng)可被感知的復(fù)雜性。作為把結(jié)構(gòu)點(diǎn)當(dāng)作系統(tǒng)的體系結(jié)構(gòu)模式的一個(gè)例子,考慮警報(bào)系統(tǒng)的軟件領(lǐng)域,該領(lǐng)域可能包含如SafeHome①這樣簡單的系統(tǒng),或如工業(yè)過程警報(bào)系統(tǒng)這樣復(fù)雜的系統(tǒng),然而,在每種情形,均可以遇到一組可以預(yù)測的結(jié)構(gòu)模式:*界面,使用戶能夠和系統(tǒng)交互。*范圍設(shè)置機(jī)制,允許用戶設(shè)置將被測度的參數(shù)的范圍。*傳感器管理機(jī)制,和所有的監(jiān)控傳感器通訊。*反應(yīng)機(jī)制,對傳感器管理系統(tǒng)提供的輸入作出反應(yīng)。*控制機(jī)制,使用戶能夠可以控制監(jiān)控執(zhí)行的方式。這些結(jié)構(gòu)點(diǎn)中的每一個(gè)被集成到一個(gè)領(lǐng)域體系結(jié)構(gòu)中。定義跨越一組不同的應(yīng)用領(lǐng)域的類屬的結(jié)構(gòu)點(diǎn)是可能的:*應(yīng)用前端。GUI,包括所有菜單、面板、輸入和命令編輯設(shè)施。*數(shù)據(jù)庫。所有和應(yīng)用領(lǐng)域相關(guān)的對象的倉庫。*計(jì)算引擎。操作數(shù)據(jù)的數(shù)值和非數(shù)值模型。*報(bào)告設(shè)施。產(chǎn)生所有種類的輸出的功能。*應(yīng)用編輯器。根據(jù)用戶特定需要定制應(yīng)用的機(jī)制。結(jié)構(gòu)點(diǎn)已被建議作為在軟件成本估計(jì)中代碼行和功能點(diǎn)的替代物。4、構(gòu)件復(fù)用關(guān)于創(chuàng)建可復(fù)用的軟件并沒有任何神奇之處。抽象、隱蔽、功能獨(dú)立性、求精、以及結(jié)構(gòu)化程序設(shè)計(jì)等設(shè)計(jì)概念,連同面向?qū)ο蠓椒?、測試、SQA、以及正確性驗(yàn)證方法——所有均對可復(fù)用軟件構(gòu)件的創(chuàng)建有貢獻(xiàn)。本節(jié)中,我們將不重復(fù)討論這些話題,而是考慮特定于復(fù)用的問題,它們是對完整的軟件工程實(shí)踐的補(bǔ)充。4.1、為了復(fù)用的分析和設(shè)計(jì)數(shù)據(jù)、功能和行為模型(用一系列不同符號表示)可以被創(chuàng)建以描述特定應(yīng)用必須完成的任務(wù),書面的規(guī)約被用于描述這些模型并生成完整的需求描述。理想地,分析分析模型以確定模型中的那些指向現(xiàn)存的可復(fù)用軟件制品的元素。問題是以能夠?qū)е隆耙?guī)約匹配”的形式從需求模型中抽取信息。Bellinzoni及其同事描述了一種針對面向?qū)ο笙到y(tǒng)的方法:構(gòu)件被在不同的抽象層次定義和存儲為規(guī)約、設(shè)計(jì)和實(shí)現(xiàn)類——每個(gè)類是來自以前應(yīng)用的某產(chǎn)品的工程化描述。規(guī)約知識——開發(fā)知識——被以復(fù)用建議(reuse-suggestion)類的形式存儲,它們包括對以構(gòu)件的描述為基礎(chǔ)檢索可復(fù)用構(gòu)件及檢索后組裝和剪裁構(gòu)件的指導(dǎo)。使用自動(dòng)化工具瀏覽構(gòu)件庫,以試圖匹配當(dāng)前規(guī)約中所標(biāo)記的需求和那些為現(xiàn)存可復(fù)用構(gòu)件(類)描述的需求。領(lǐng)域特征和關(guān)鍵詞被用于發(fā)現(xiàn)潛在的可復(fù)用構(gòu)件。如果規(guī)約匹配生成符合當(dāng)前應(yīng)用需要的構(gòu)件,設(shè)計(jì)者可從可復(fù)用構(gòu)件庫中提取這些構(gòu)件并將它們用于新系統(tǒng)的設(shè)計(jì)中。如果沒能找到設(shè)計(jì)構(gòu)件,軟件工程師必須應(yīng)用傳統(tǒng)的或面向?qū)ο蟮脑O(shè)計(jì)方法去創(chuàng)建它們。正是在這點(diǎn)——當(dāng)設(shè)計(jì)者開始創(chuàng)建新的構(gòu)件時(shí)——應(yīng)該考慮為了復(fù)用的設(shè)計(jì)(DFR)。我們已經(jīng)提到過,為了復(fù)用的設(shè)計(jì)需要軟件工程師應(yīng)用已有的設(shè)計(jì)概念和原則,但是,也必須考慮應(yīng)用領(lǐng)域的特征。Binder建議了作為為了復(fù)用的設(shè)計(jì)的基礎(chǔ)而應(yīng)該考慮的一系列關(guān)鍵問題:標(biāo)準(zhǔn)數(shù)據(jù)。應(yīng)該研究應(yīng)用領(lǐng)域,并標(biāo)識出標(biāo)準(zhǔn)的全局?jǐn)?shù)據(jù)結(jié)構(gòu)(例如,文件結(jié)構(gòu)或完整的數(shù)據(jù)庫),那么所有設(shè)計(jì)構(gòu)件可以使用這些標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu)來刻劃。標(biāo)準(zhǔn)接口協(xié)議。應(yīng)該建立三個(gè)層次的接口協(xié)議:模塊內(nèi)接口的本質(zhì)、外部的技術(shù)(非人)接口的設(shè)計(jì)、以及人機(jī)界面。程序模板。結(jié)構(gòu)模型可以作為新程序的體系結(jié)構(gòu)設(shè)計(jì)的模板。一旦已經(jīng)建立了標(biāo)準(zhǔn)數(shù)據(jù)、接口和程序模板,則設(shè)計(jì)者有了一個(gè)可在其中創(chuàng)建設(shè)計(jì)的框架。符合這個(gè)框架的新的構(gòu)件對以后的復(fù)用有更高的概率。4.2、構(gòu)造方法和設(shè)計(jì)一樣,可復(fù)用軟件制品的構(gòu)造依賴于本書中其他地方已經(jīng)討論過的軟件工程方法,構(gòu)造可以使用傳統(tǒng)的第三代語言、第四代語言和代碼生成器、可視化程序設(shè)計(jì)技術(shù)、或更高級的工具來完成。更高級的構(gòu)造技術(shù)的一個(gè)有代表性例子是Netron公司開發(fā)Frame技術(shù)Netron方法定義了一組自適應(yīng)的、稱作Frame的類屬構(gòu)件。和對象一樣,F(xiàn)rame封裝數(shù)據(jù)和操作,但是,它擴(kuò)展了對象的定義,它結(jié)合進(jìn)了使軟件工程師能夠通過選擇、刪除、修改或重復(fù)那些構(gòu)成該Frame的任意子構(gòu)件而對Frame進(jìn)行適應(yīng)性修改的機(jī)制。可以通過組裝來自Frame層次的構(gòu)件而構(gòu)造應(yīng)用。在該層次底部的Frame類似于在因子化體系結(jié)構(gòu)中的工作者(worker)模塊,即,它們包含執(zhí)行低層系統(tǒng)功能(例如,操作系統(tǒng)交互、接口構(gòu)造、數(shù)據(jù)庫交互)的操作和數(shù)據(jù)結(jié)構(gòu);在Frame層次中層的Frame著重于和特定信息系統(tǒng)領(lǐng)域相關(guān)的功能(例如,事務(wù)處理、銀行業(yè)務(wù)、客戶服務(wù));在層次的頂部是“規(guī)約fream”,它的作用是作為“系統(tǒng)的主要藍(lán)圖和開發(fā)者創(chuàng)建來定義系統(tǒng)的唯一的Frame”。4.3、基于構(gòu)件的開發(fā)當(dāng)復(fù)用占據(jù)了一個(gè)應(yīng)用開發(fā)的主導(dǎo)地位時(shí),則構(gòu)造方法有時(shí)被稱為基于構(gòu)件的開發(fā)或構(gòu)件軟件。如我們已經(jīng)看到的,領(lǐng)域工程提供了基于構(gòu)件的開發(fā)所需要的可復(fù)用構(gòu)件庫。這些可復(fù)用構(gòu)件中的某些是內(nèi)部開發(fā)的,其他的可以從現(xiàn)存應(yīng)用中抽取的,還有一些可以從第三方獲取。但是,我們?nèi)绾蝿?chuàng)建一個(gè)具有一致結(jié)構(gòu)的構(gòu)件庫——它可以被一系列不同的內(nèi)部和外部源查詢并且還可以被集成進(jìn)在某應(yīng)用領(lǐng)域內(nèi)的任意系統(tǒng)?答案是對這樣的構(gòu)件的標(biāo)準(zhǔn)的采用。4個(gè)“體系結(jié)構(gòu)成分”將被用于實(shí)現(xiàn)基于構(gòu)件的開發(fā):數(shù)據(jù)交換模型。應(yīng)該對所有的可復(fù)用構(gòu)件定義使得用戶和應(yīng)用間能夠交互和傳遞數(shù)據(jù)的機(jī)制(例如,拖和放、剪切和粘貼)。數(shù)據(jù)交換機(jī)制不僅應(yīng)允許人和軟件、構(gòu)件和構(gòu)件間的數(shù)據(jù)傳遞,而且也應(yīng)使得能夠在系統(tǒng)資源間進(jìn)行數(shù)據(jù)傳遞(例如,將一個(gè)文件拖到某打印機(jī)圖符上以實(shí)現(xiàn)輸出)。自動(dòng)化。應(yīng)實(shí)現(xiàn)一系列工具、宏和腳本為可復(fù)用構(gòu)件間的交互服務(wù)。結(jié)構(gòu)化存儲。包含在“復(fù)合文檔”中的異質(zhì)數(shù)據(jù)(例如,圖形數(shù)據(jù)、聲音、文本和數(shù)值數(shù)據(jù))應(yīng)該被作為單獨(dú)的數(shù)據(jù)結(jié)構(gòu)來組織和訪問,而不是作為一組分開的文件?!敖Y(jié)構(gòu)化數(shù)據(jù)維持了嵌套結(jié)構(gòu)的一個(gè)描述性索引,使得應(yīng)用可以自由地進(jìn)行導(dǎo)航瀏覽以定位、創(chuàng)建或編輯個(gè)體數(shù)據(jù)內(nèi)容,就象終端用戶直接操作一樣”。底層對象模型。對象模型保證在不同平臺上用不同程序設(shè)計(jì)語言開發(fā)的構(gòu)件可以互操作,即,對象必須能夠跨網(wǎng)絡(luò)進(jìn)行通信。為了達(dá)到這個(gè)目標(biāo),對象模型定義了構(gòu)件互操作標(biāo)準(zhǔn),該標(biāo)準(zhǔn)是語言獨(dú)立的,并使用接口定義語言(IDL)來定義。因?yàn)閺?fù)用對軟件產(chǎn)業(yè)的潛在影響非常巨大,一些主要的公司和產(chǎn)業(yè)聯(lián)盟①已經(jīng)提出了對構(gòu)件軟件的建議標(biāo)準(zhǔn):OpenDoc。主要技術(shù)公司(包括IBM、Apple、和Novell)的一個(gè)聯(lián)盟已經(jīng)提出了復(fù)合文檔和構(gòu)件軟件的標(biāo)準(zhǔn)OPenDoc。該標(biāo)準(zhǔn)定義了為使得由某開發(fā)者提供的構(gòu)件能夠和另一個(gè)開發(fā)者提供的構(gòu)件相互操作而必須實(shí)現(xiàn)的服務(wù)、控制基礎(chǔ)設(shè)施、和體系結(jié)構(gòu)。OMG/CORBA。對象管理組織發(fā)布了公共對象請求代理體系結(jié)構(gòu)(OMG/CORBA)。一個(gè)對象請求代理(ORB)提供了一系列服務(wù),它們使得可復(fù)用構(gòu)件(對象)可以和其他構(gòu)件通信,而不管它們在系統(tǒng)中的位置。當(dāng)用OMG/CORBA標(biāo)準(zhǔn)建立構(gòu)件時(shí),那些構(gòu)件在某系統(tǒng)內(nèi)的集成(沒有修改)可以得到保證。使用客戶/服務(wù)器的比喻,在客戶端應(yīng)用中的對象向ORB服務(wù)器請求一個(gè)或多個(gè)服務(wù),請求是通過IDL或在運(yùn)行時(shí)動(dòng)態(tài)地進(jìn)行的。一個(gè)接口池包含了所有關(guān)于服務(wù)請求和回答格式的信息。OLE2.0。微軟開發(fā)了一個(gè)構(gòu)件對象模型(COM),它提供了對在單個(gè)應(yīng)用中使用不同廠商生產(chǎn)的對象的規(guī)約。對象連接和嵌入(OLE)是COM的一部分,定義了可復(fù)用構(gòu)件的標(biāo)準(zhǔn)結(jié)構(gòu)。OLE已成為微軟操作系統(tǒng)(Windows95、WindowsNT)的一部分。這些標(biāo)準(zhǔn)中哪一個(gè)將在產(chǎn)業(yè)中占據(jù)支配地位?這在當(dāng)前是不容易回答的問題。當(dāng)前OLE被用得更廣一些(由于基于Windows應(yīng)用的廣泛使用),但是,很多OMG/CORBA工具和開發(fā)環(huán)境正在被引入。5、分類和檢索構(gòu)件考慮一個(gè)大的大學(xué)圖書館,成千上萬的書籍、期刊和其他信息資源是可用的。但是為了訪問這些資源,必須有合適的分類模式。為了在這些大量的信息中導(dǎo)航瀏覽,圖書館管理者定義了一種分類模式,它包括分類碼、關(guān)鍵詞、作者名、以及其他索引條目,所有這些使得用戶可以快速和方便地找到所需資源。現(xiàn)在考慮一個(gè)大的構(gòu)件倉庫,其中存放了成千上萬的可復(fù)用構(gòu)件。但是,軟件工程師如何找到他所需要的構(gòu)件呢?為了回答這個(gè)問題,又出現(xiàn)了另一個(gè)問題:我們?nèi)绾我詿o二義的、可分類的術(shù)語來描述軟件構(gòu)件?這些是困難的問題,至今還沒有確定性的答案。在本節(jié)中,我們探討當(dāng)前的研究方向,這將使得未來的軟件工程師可以導(dǎo)航瀏覽復(fù)用庫。5.1、描述可復(fù)用構(gòu)件可以用很多方式來描述可復(fù)用軟件構(gòu)件,但是理想的描述包括TracZ提出的3C模型——概念(concePt)、內(nèi)容(content)和語境(context)。軟件構(gòu)件的概念是“對構(gòu)件做什么的描述”。構(gòu)件的接口被完整地描述,而且語義——表示在前置條件后置條件的語境中——被標(biāo)識。概念將傳達(dá)構(gòu)件的意圖。構(gòu)件的內(nèi)容描述概念如何被實(shí)現(xiàn)。在本質(zhì)上,內(nèi)容是對一般用戶隱蔽的信息,只有那些企圖修改該構(gòu)件的人才需要了解的信息。語境將可復(fù)用軟件構(gòu)件放置到其應(yīng)用的領(lǐng)域中。即,通過刻劃概念的、操作的和實(shí)現(xiàn)的特征,語境使得軟件工程師能夠發(fā)現(xiàn)適當(dāng)?shù)臉?gòu)件以滿足應(yīng)用需求。為了可用在實(shí)際環(huán)境中,概念、內(nèi)容和語境必須被轉(zhuǎn)換為具體的規(guī)約模式。已有很多的文章涉及可復(fù)用構(gòu)件的分類模式。①所提出的方法可以分為三大類:圖書館和信息科學(xué)方法、人工智能方法、以及超文本系統(tǒng)。目前為止,絕大部分研究工作建議使用圖書館科學(xué)方法進(jìn)行構(gòu)件分類。大多數(shù)軟件構(gòu)件分類模式可歸為如下的三類:1)枚舉分類(EnumeratedClassification)。通過定義一個(gè)層次結(jié)構(gòu)來描述構(gòu)件,在該層次中定義軟件構(gòu)件的類以及不同層次的子類。實(shí)際的構(gòu)件被羅列在枚舉層次的任何路徑的最低層,例如,對窗口操作的枚舉層次可能是:windowoperationsdisplayopenmenu-basedOpenWindowsystem-basedsysWindowcloseviapointer…resizeviacommandsetWindowSize,stdResize,shrinkwindowviadragpullwindow,stretchWindowup/downshuffle…move…close…枚舉分類模式的層次結(jié)構(gòu)使得它易于理解和使用,然而,在建立層次之前,必須進(jìn)行領(lǐng)域工程以獲得在層次中適當(dāng)?shù)捻?xiàng)的足夠的信息??堂娣诸?FacetedClassification)。分析領(lǐng)域,并標(biāo)識出一組基本的描述特征,這些特征,稱為刻面,被根據(jù)其重要性區(qū)分優(yōu)先次序并被聯(lián)系到構(gòu)件??堂婵梢悦枋鰳?gòu)件執(zhí)行的功能、被操作的數(shù)據(jù)、構(gòu)件應(yīng)用的語境或任意其他特征。描述構(gòu)件的刻面的集合稱為刻面描述子,通常,刻面描述被限定不超過7或8個(gè)刻面。作為一個(gè)簡單的在構(gòu)件分類中使用刻面的例子,考慮使用下列構(gòu)件描述子的模式:{function,objecttype,systemtyPe}刻面描述子中的每個(gè)刻面可含有一個(gè)或多個(gè)值,這些值一般是描述性關(guān)鍵詞,例如,如果功能(function)是某構(gòu)件的刻面,賦給此刻面的典型值可能是:function=(copy,from)or(copy,replace,all)多個(gè)刻面值的使用使得原函數(shù)copy能夠被更完全地精化。關(guān)鍵詞(值)被賦給復(fù)用庫中的每個(gè)構(gòu)件的刻面集,當(dāng)軟件工程師在設(shè)計(jì)中希望查詢構(gòu)件庫以發(fā)現(xiàn)可能的構(gòu)件時(shí),規(guī)定一列值,然后到庫中尋找匹配項(xiàng)??墒褂米詣?dòng)工具以完成同義詞詞典功能,這使得查找不僅包括軟件工程師給出的關(guān)鍵詞,還包括這些關(guān)鍵詞的技術(shù)同義詞。刻面分類模式給領(lǐng)域工程師在刻劃構(gòu)件的復(fù)雜描述子時(shí)更大的靈活性,因?yàn)榭梢院苋菀椎丶尤胄碌目堂嬷?,因此,刻面分類模式比枚舉分類方法易于擴(kuò)展和進(jìn)行適應(yīng)性修改。屬性—值分類(Attribute-ValueClassification)。為領(lǐng)域中的所有構(gòu)件定義一組屬性,然后值被以和刻面分類方法非常相似的方式賦給這些屬性,事實(shí)上,屬性-值分類方法和刻面分類方法是類似的,除了下面幾點(diǎn)不同:(1)對可使用的屬性數(shù)量沒有限制,(2)屬性沒有優(yōu)先級,(3)不使用同義詞詞典功能。基于對上面分類技術(shù)的實(shí)驗(yàn)研究,F(xiàn)rank和Pole指出沒有明顯“最好”的技術(shù)和“沒有某種方法比別的方法在查找效果上更適度…”。對復(fù)用庫有效的分類模式的開發(fā)仍有許多工作要做。5.2、構(gòu)件復(fù)用環(huán)境軟件構(gòu)件復(fù)用必須有環(huán)境的支撐,環(huán)境應(yīng)包含如下元素:*用于存儲構(gòu)件和對檢索構(gòu)件必需的分類信息的構(gòu)件庫。*提供對構(gòu)件庫訪問的庫管理系統(tǒng)。*允許客戶應(yīng)用從構(gòu)件庫服務(wù)器中檢索構(gòu)件和服務(wù)的軟件構(gòu)件檢索系統(tǒng)(如,對象請求代理)。*將復(fù)用的構(gòu)件集成到新設(shè)計(jì)或?qū)崿F(xiàn)中的CASE工具。每一個(gè)功能在復(fù)用庫的范圍內(nèi)交互或者被包含在復(fù)用庫中。復(fù)用庫是一個(gè)更大型CASE倉庫的一個(gè)元素,并且為一系列可復(fù)用軟件制品(例如,規(guī)約、設(shè)計(jì)、代碼、測試用例、用戶指南)的存儲提供設(shè)施。復(fù)用庫包含一個(gè)數(shù)據(jù)庫以及查詢數(shù)據(jù)庫和構(gòu)件檢索所必需的工具,構(gòu)件分類模式是構(gòu)件庫查詢的基礎(chǔ)。查詢通常用前面描述的3C模型中的語境來刻劃,如果某初始查詢產(chǎn)生大量的候選構(gòu)件,則查詢被求精以減少候選對象。然后,概念和內(nèi)容信息被抽取出來(在找到候選構(gòu)件集后)以輔助開發(fā)者選擇合適的構(gòu)件。6、總結(jié)過去幾年,大量來自產(chǎn)業(yè)實(shí)例研究的證據(jù)表明從積極的軟件復(fù)用可獲得實(shí)質(zhì)性的商業(yè)收益,產(chǎn)品質(zhì)量、開發(fā)生產(chǎn)率、以及整體成本都將得到改善。質(zhì)量。理想情況下,為了復(fù)用而開發(fā)的軟件構(gòu)件已被驗(yàn)證是正確的且不含有錯(cuò)誤。在現(xiàn)實(shí)中,形式化驗(yàn)證并不能定期地執(zhí)行,錯(cuò)誤可能、也確實(shí)存在。然而,隨著每一次復(fù)用,錯(cuò)誤被發(fā)現(xiàn)和消除,構(gòu)件的質(zhì)量也隨之改善。隨時(shí)間的推移,構(gòu)件變成實(shí)質(zhì)上無錯(cuò)誤的。在HP公司的研究中,Lim報(bào)告說:被復(fù)用代碼的錯(cuò)誤率是每KLOC有0.9個(gè)錯(cuò)誤,而新開發(fā)代碼的錯(cuò)誤率是每KLOC有4.1個(gè)錯(cuò)誤。對一個(gè)包含60%復(fù)用代碼的應(yīng)用來說,錯(cuò)誤率是每KLOC有2.0個(gè)錯(cuò)誤——對期望的錯(cuò)誤率有51%的改善,相對于不使用復(fù)用的開發(fā)。Henry和Faller的研究指出在質(zhì)量上有35%的改善。雖然不同的報(bào)告得到不同的改善率(位于合理的范圍內(nèi)),但是,公正地說,復(fù)用對交付的軟件在質(zhì)量和可靠性方面確實(shí)帶來了實(shí)質(zhì)性的收益。生產(chǎn)率。當(dāng)可復(fù)用軟件制品被應(yīng)用于軟件開發(fā)全過程中,對開發(fā)一個(gè)可交付系統(tǒng)所必需的計(jì)劃、模型、文檔、代碼和數(shù)據(jù)的創(chuàng)建工作將花費(fèi)較少的時(shí)間,導(dǎo)致的結(jié)果是用較少的投入給客戶提供了相同級別的功能,因此生產(chǎn)率得到了改善。雖然,對生產(chǎn)率改善百分率的報(bào)告是眾所周知難于解釋的,①但是,似乎30%到50%的復(fù)用可以產(chǎn)生25%到40%的生產(chǎn)率改善。成本(COST)。對復(fù)用帶來的凈成本節(jié)省估算如下:估算出項(xiàng)目如果是從頭開始開發(fā)所需的成本C,然后減去和復(fù)用關(guān)聯(lián)的成本C與被交付的軟件的實(shí)際成本Cs之和。Cs可以用估算技術(shù)的一個(gè)或多個(gè)來確定,和復(fù)用關(guān)聯(lián)的成本Cs包括:*領(lǐng)域分析和建模。*領(lǐng)域體系結(jié)構(gòu)開發(fā)。*為促進(jìn)復(fù)用所增加的文檔量。*可復(fù)用軟件制品的維護(hù)和增強(qiáng)。*對從外部獲取的構(gòu)件的版稅和許可證(licenses)費(fèi)。*可復(fù)用構(gòu)件庫的創(chuàng)建或者獲得以及操作。*對設(shè)計(jì)和構(gòu)造復(fù)用的人員的培訓(xùn)。雖然和領(lǐng)域分析與復(fù)用庫操作相關(guān)聯(lián)的成本可能是實(shí)質(zhì)性的,但是它們由很多項(xiàng)目分擔(dān)。上面提到的很多其他成本所強(qiáng)調(diào)的問題實(shí)際上是一個(gè)好的軟件工程習(xí)慣的一部分,不管是否優(yōu)先考慮復(fù)用。第4章軟件概要設(shè)計(jì)學(xué)習(xí)本章,我們要考慮以下幾個(gè)問題:軟件概要設(shè)計(jì)指的是什么?軟件概要設(shè)計(jì)要做的事情是什么?用什么來評價(jià)軟件設(shè)計(jì)的技術(shù)質(zhì)量?軟件結(jié)構(gòu)優(yōu)化的準(zhǔn)則是什么?如何進(jìn)行軟件概要設(shè)計(jì)?以上問題就是本章所要討論的內(nèi)容。一、軟件概要設(shè)計(jì)指的是什么?我們知道,軟件設(shè)計(jì)是把一個(gè)軟件需求轉(zhuǎn)換為軟件表示的過程,而概要設(shè)計(jì)(又稱結(jié)構(gòu)設(shè)計(jì))就是軟件設(shè)計(jì)最初形成的一個(gè)表示(這里的表示是一個(gè)名詞),它描述了軟件的總的體系結(jié)構(gòu)。簡單地說軟件概要設(shè)計(jì)就是設(shè)計(jì)出軟件的總體結(jié)構(gòu)框架。而后對結(jié)構(gòu)的進(jìn)一步細(xì)化的設(shè)計(jì)就是軟件的詳細(xì)設(shè)計(jì)或過程設(shè)計(jì)。本章所學(xué)內(nèi)容主要就是軟件的概要設(shè)計(jì)內(nèi)容。二、軟件概要設(shè)計(jì)的基本任務(wù)軟件概要設(shè)計(jì)階段要做的事情是什么呢?總的來看有四個(gè)方面:它們是1、設(shè)計(jì)軟件系統(tǒng)結(jié)構(gòu)(軟件結(jié)構(gòu))2、數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計(jì)3、編寫概要設(shè)計(jì)文檔4、評審在需求分析階段,已經(jīng)把系統(tǒng)分解成層次結(jié)構(gòu),而在概要設(shè)計(jì)階段,需要進(jìn)一步分解,劃分為模塊以及模塊的層次結(jié)構(gòu)。劃分的具體過程是:(1)采用某種設(shè)計(jì)方法,將一個(gè)復(fù)雜的系統(tǒng)按功能劃分成模塊。(2)確定每個(gè)模塊的功能。(3)確定模塊之間的調(diào)用關(guān)系。(4)確定模塊之間的接口,即模塊之間傳遞的信息。(5)評價(jià)模塊結(jié)構(gòu)的質(zhì)量。對于大型數(shù)據(jù)處理的軟件系統(tǒng),還要對數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫進(jìn)行設(shè)計(jì)。在概要設(shè)計(jì)階段,還要編寫概要設(shè)計(jì)文檔,我們初學(xué)者有一個(gè)不是很好的做法,就是在編程序時(shí),往往不注意文檔的編寫,導(dǎo)致以后軟件修改和升級很不方便,用戶使用時(shí)也得不到幫助。所以應(yīng)該在軟件設(shè)計(jì)的每個(gè)階段編寫相應(yīng)文檔,在概要設(shè)計(jì)階段,主要有以下文檔需要編寫:(1)概要設(shè)計(jì)說明書。(2)數(shù)據(jù)庫設(shè)計(jì)說明書。(3)用戶手冊,(4)修訂測試計(jì)劃。最后一個(gè)任務(wù)就是評審,在概要設(shè)計(jì)中,對設(shè)計(jì)部分是否完整地實(shí)現(xiàn)了需求中規(guī)定的功能、性能等要求,設(shè)計(jì)方案的可行性,關(guān)鍵的處理及內(nèi)外部接口定義正確性、有效性,各部分之間的一致性等都要進(jìn)行評審,以免在以后的設(shè)計(jì)中發(fā)現(xiàn)大的問題而返工。以上就是軟件概要設(shè)計(jì)的四個(gè)基本任務(wù),總結(jié)一下用八個(gè)字表示:兩類結(jié)構(gòu)文檔評審。(兩類結(jié)構(gòu)就是指軟件結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計(jì))在了解了軟件概要設(shè)計(jì)的基本任務(wù)之后,我們來看看軟件設(shè)計(jì)的基本原理,也就是用于衡量軟件設(shè)計(jì)的技術(shù)質(zhì)量的一些標(biāo)準(zhǔn)。三、軟件設(shè)計(jì)的基本原理1、模塊化模塊就是指在程序中的數(shù)據(jù)說明、可執(zhí)行語句等程序?qū)ο蟮募?或者是單獨(dú)命名和編址的元素。如高級語言中的過程,函數(shù)、子程序等。每個(gè)模塊可以完成一個(gè)特定的子功能,各個(gè)模塊可以按一定方法組裝起來成為一個(gè)整體。從而實(shí)現(xiàn)整個(gè)系統(tǒng)的功能。來源:模塊化就是指解決一個(gè)復(fù)雜問題時(shí)自頂向下逐層把軟件系統(tǒng)劃分成若干模塊的過程。為了解決復(fù)雜的問題,在軟件設(shè)計(jì)中就必須把整個(gè)問題進(jìn)行分解來降低復(fù)雜性,這樣就可以減少開發(fā)工作量并降低開發(fā)成本和提高軟件生產(chǎn)率。但是劃分模塊并不是越多越好,因?yàn)檫@會增加模塊之間接口的工作量。所以劃分模塊的層次和數(shù)量應(yīng)該避免過多或過少。2、抽象抽象這個(gè)詞本身也比較抽象,(老師要小明用抽象和具體造一個(gè)句子,可是他不懂,就問媽媽,什么是抽象,什么是具體?媽媽告訴他:抽象就是看不見摸不著的,具體就是看得見摸得著的。小明懂了,很快造好了一個(gè)句子,是這樣的:今天我很早起床,看見具體的媽媽在炒具體的菜,我打開窗戶,抽象的新鮮空氣呼地一下跑進(jìn)來,真舒服啊。)呵呵,事實(shí)上,抽象并不是這么簡單的意思,它是一種思維工具,就是把事物本質(zhì)的共同特性抽出來而不考慮其他細(xì)節(jié),比如說我們可以把把男人女人老人小孩的共同本質(zhì)特性抽出來之后形成一個(gè)概念"人",這個(gè)概念就是抽象的結(jié)果。在軟件工程中就是這樣,在每個(gè)階段中,抽象的層次逐步降低,在軟件結(jié)構(gòu)設(shè)計(jì)中的模塊分層也是由抽象到具體的分析和構(gòu)造出來的。比如上一層的模塊所進(jìn)行的加工是一個(gè)抽象的操作"銷售統(tǒng)計(jì)",分解到最后一層,就可能是具體"打印報(bào)表"的操作了。3、信息隱蔽信息隱蔽的意思就是指,在設(shè)計(jì)和確定模塊時(shí),使得一個(gè)模塊內(nèi)包含的信息(過程或數(shù)據(jù)),對于不需要這些信息的其他模塊來說是不能訪問的。舉個(gè)例子吧,假設(shè)我是程序中的一個(gè)模塊,電話機(jī)是另一個(gè)模塊,我在使用電話機(jī)時(shí),對電話機(jī)的控制是通過幾個(gè)按鍵來確定的,輸入的數(shù)據(jù)是我的語音,輸出的數(shù)據(jù)是對方的語音,而這些輸入、輸出的數(shù)據(jù)變換以及控制在電話機(jī)內(nèi)部是怎么實(shí)現(xiàn)的我不需要知道,同時(shí)也不能加以直接控制,這樣,如果電話機(jī)壞了,修復(fù)或更換后對我的使用是沒有任何影響的。所以說,電話機(jī)這個(gè)模塊的信息隱蔽是十分完善的。在軟件設(shè)計(jì)中,模塊的劃分也要采取措施使它實(shí)現(xiàn)信息隱蔽。4、模塊獨(dú)立性模塊獨(dú)立性是指每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡單。這個(gè)概念就是上面說的三個(gè)基本原理的直接產(chǎn)物,在概要設(shè)計(jì)過程中,就是要求設(shè)計(jì)出具有良好模塊獨(dú)立性的軟件結(jié)構(gòu)。那么如何來衡量軟件的模塊獨(dú)立性呢?這里有兩個(gè)定性的度量標(biāo)準(zhǔn)。(1)耦合性:就是指模塊之間的聯(lián)系緊密程度。模塊之間聯(lián)系越緊密,其耦合性越強(qiáng),獨(dú)立性就越差。模塊的耦合性從低到高可分為以下幾種類型:(假設(shè)某人為一模塊)無直接耦合(比如陌生人之間的聯(lián)系)數(shù)據(jù)耦合(比如去售貨員與顧客之間的聯(lián)系)標(biāo)記耦合(比如兩個(gè)人下棋)控制耦合(領(lǐng)導(dǎo)和下屬之間的聯(lián)系)公共耦合(比如圖書館的所有借書者之間的聯(lián)系)內(nèi)容耦合(比如小兩口之間的聯(lián)系)在軟件設(shè)計(jì)中,提高模塊的獨(dú)立性,建立模塊間盡可能松散的系統(tǒng),是模塊化設(shè)計(jì)的目標(biāo)。為了降低模塊間的耦合度,可以采取以下措施:(1)在耦合方式上降低模塊間接口的復(fù)雜性。(2)在傳遞信息類型上盡量采用數(shù)據(jù)耦合,避免使用控制耦合,慎用或有控制地使用公共耦合。在實(shí)踐中要根據(jù)實(shí)際情況綜合考慮。2、內(nèi)聚性內(nèi)聚性是指模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度。根據(jù)內(nèi)聚性的從低到高可分為以下六種類型:偶然內(nèi)聚:指一個(gè)模塊內(nèi)的各處理元素之間沒有任何聯(lián)系。(公共汽車內(nèi)的人群)邏輯內(nèi)聚:指模塊內(nèi)執(zhí)行幾個(gè)邏輯上相似的功能,通過參數(shù)確定該模塊完成哪一個(gè)功能。(警察局里的警察)時(shí)間內(nèi)聚:把需要同時(shí)執(zhí)行的動(dòng)作組合在一起形成的模塊為時(shí)間內(nèi)聚模塊。(交響樂團(tuán)的演奏員)通信內(nèi)聚:指模塊內(nèi)所有處理元素都在同一個(gè)數(shù)據(jù)結(jié)構(gòu)上的操作?;蛘咧父魈幚硎褂孟嗤妮斎霐?shù)據(jù)或者產(chǎn)生相同的輸出數(shù)據(jù)。(建筑工地上的工人)順序內(nèi)聚:指一個(gè)模塊中各個(gè)處理元素都密切相關(guān)于同一功能且必須順序執(zhí)行,前一功能的元素的輸出就是下一功能元素的輸入。(我們可以想像紡織廠中從紡紗到織布的各個(gè)操作形成的一個(gè)模塊,就是一種順序內(nèi)聚)功能內(nèi)聚:這是最強(qiáng)的內(nèi)聚,指模塊內(nèi)所有元素共同完成一個(gè)功能,缺一不可,模塊已不可再分。(就如兩個(gè)人演獅子舞,要完成獅子形象的再現(xiàn),兩個(gè)人缺一不可.)耦合性與內(nèi)聚性是模塊獨(dú)立性的兩個(gè)定性標(biāo)準(zhǔn),將軟件系統(tǒng)劃分模塊時(shí),盡量做到高內(nèi)聚,低耦合,提高模塊的獨(dú)立性。在內(nèi)聚性與耦合性發(fā)生矛盾的時(shí)候,最好優(yōu)先考慮耦合性,也就是先保證耦合性低一些。四、軟件結(jié)構(gòu)的優(yōu)化準(zhǔn)則首先應(yīng)學(xué)會用圖形表示軟件結(jié)構(gòu),軟件結(jié)構(gòu)圖反映了整個(gè)系統(tǒng)的功能實(shí)現(xiàn),即將來編好程序中的控制層次體系。軟件結(jié)構(gòu)往往用樹狀或網(wǎng)狀結(jié)構(gòu)的圖形來表示。請大家對照課本的解釋來看軟件結(jié)構(gòu)圖包括哪些內(nèi)容。我們已經(jīng)知道了軟件概要設(shè)計(jì)的主要任務(wù)就是軟件結(jié)構(gòu)的設(shè)計(jì),為了提高設(shè)計(jì)的質(zhì)量,可以根據(jù)下面的設(shè)計(jì)優(yōu)化準(zhǔn)則進(jìn)行優(yōu)化:在這些準(zhǔn)則中,都是針對模塊及模塊間關(guān)系來提出的。1、模塊的劃分:要做到高內(nèi)聚,低耦合,保持相對獨(dú)立性。2、模塊的控制:模塊的作用范圍要在他的控制范圍內(nèi),判定所在的模塊應(yīng)與受其影響的模塊在層次上盡量靠近)3、形成的結(jié)構(gòu);軟件結(jié)構(gòu)的深度、寬度、扇出、扇入要適當(dāng)4、模塊的大小:要適中。5、模塊的接口:模塊的接口要簡單、清晰、含義明確,便于理解、易于實(shí)現(xiàn)、測試與維護(hù))。五、概要設(shè)計(jì)的設(shè)計(jì)方法。(一)面向數(shù)據(jù)流的設(shè)計(jì)方法(這是需要我們熟練掌握的方法)面向數(shù)據(jù)流的設(shè)計(jì)方法是以需求階段產(chǎn)生的數(shù)據(jù)流圖為基礎(chǔ),按一定的步驟映射成軟件結(jié)構(gòu),因此又稱為結(jié)構(gòu)化設(shè)計(jì)(StructuredDesignSD)。這是目前使用最廣泛的軟件設(shè)計(jì)方法之一,應(yīng)該熟練掌握它。1、首先要研究數(shù)據(jù)流圖(DFD)的類型,無論何種軟件系統(tǒng),DFD一般都可分為變換型和事務(wù)型兩類。(課本第51頁)先來看變換型數(shù)據(jù)流圖,顧名思義,變換就是把輸入的數(shù)據(jù)處理后變成另外的數(shù)據(jù)輸出,所以變換型數(shù)據(jù)的工作過程就是三步:取得數(shù)據(jù)、變換數(shù)據(jù)和輸出數(shù)據(jù)。在圖4-6中,可以看到兩股數(shù)據(jù)流經(jīng)過交換中心變成一股數(shù)據(jù)流進(jìn)行輸出。虛線為標(biāo)出的流界。再來看事務(wù)型數(shù)據(jù)流圖,所謂事務(wù)也是一個(gè)處理,但不是數(shù)據(jù)變換,而是將輸入數(shù)據(jù)流分離成許多發(fā)散的數(shù)據(jù)流,形成許多加工路徑,并根據(jù)值選擇其中一個(gè)路徑來執(zhí)行。舉個(gè)例子,好比有一個(gè)郵件分發(fā)中心,把收進(jìn)的郵件根據(jù)其發(fā)送地址進(jìn)行分流,有的用飛機(jī)郵送,有的用汽車來運(yùn)輸?shù)鹊?。在大型軟件系統(tǒng)中的DFD數(shù)據(jù)流圖中,這兩種類型特征都有可能存在。2、SD方法設(shè)計(jì)過程1)精化DFD。2)確定DFD類型并進(jìn)行相應(yīng)的映射。3)分解上層模塊,設(shè)計(jì)中下層模塊結(jié)構(gòu)4)根據(jù)優(yōu)化準(zhǔn)則對軟件結(jié)構(gòu)求精。5)描述模塊功能、接口及全局?jǐn)?shù)據(jù)結(jié)構(gòu)6)復(fù)查,如果有錯(cuò)則轉(zhuǎn)向2)修改完善,否則進(jìn)入詳細(xì)設(shè)計(jì)。下面我們通過例

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論