版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
論使用復(fù)用設(shè)計(jì)1、引言復(fù)用是活動(dòng),而不是對(duì)象。在創(chuàng)建軟件相關(guān)的系統(tǒng)的語(yǔ)境中,復(fù)用僅僅是非常簡(jiǎn)單的任何過(guò)程,該過(guò)程通過(guò)復(fù)用來(lái)自以前開(kāi)發(fā)工作的某些東西來(lái)生產(chǎn)(或幫助生產(chǎn))一個(gè)系統(tǒng)。那么,唯一的問(wèn)題是:復(fù)用什么、什么是導(dǎo)致成功復(fù)用的過(guò)程。在軟件工程的范圍內(nèi),復(fù)用既是舊概念,也是新概念。程序員從最早的計(jì)算時(shí)代已開(kāi)始復(fù)用概念、對(duì)象、論據(jù)、抽象和過(guò)程,但是我們復(fù)用的途徑是特定的。本文對(duì)軟件復(fù)用的討論,將從以下四個(gè)方面進(jìn)行:1)軟件工程師可以獲得一系列可復(fù)用的軟件制品,這些包括軟件的技術(shù)表示(例如,規(guī)約、體系結(jié)構(gòu)模型、設(shè)計(jì)和代碼)、文檔、測(cè)試數(shù)據(jù),甚至包括過(guò)程相關(guān)的任務(wù)(如,檢查技術(shù))。2)復(fù)用過(guò)程包括兩個(gè)并發(fā)的子過(guò)程:領(lǐng)域工程和軟件工程。領(lǐng)域工程的目的是在特定應(yīng)用領(lǐng)域中標(biāo)識(shí)、構(gòu)造、分類和傳播一組軟件制品。然后,軟件工程可在新系統(tǒng)開(kāi)發(fā)中選取這些軟件制品作為復(fù)用。3)構(gòu)件復(fù)用為軟件質(zhì)量、開(kāi)發(fā)者生產(chǎn)率、以及整個(gè)系統(tǒng)成本帶來(lái)了固有的收益,然而,在復(fù)用過(guò)程模型被廣泛地用于軟件產(chǎn)業(yè)前,必須克服很多障礙。4)對(duì)可復(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ù)用對(duì)該功能的成本估計(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ī)約。類和對(duì)象的模型和規(guī)約是明顯的復(fù)用的候選者,此外,用傳統(tǒng)軟件工程方法開(kāi)發(fā)的分析模型(例如,數(shù)據(jù)流圖)也是可復(fù)用的。設(shè)計(jì)。用傳統(tǒng)方法開(kāi)發(fā)的體系結(jié)構(gòu)、數(shù)據(jù)、接口和過(guò)程化設(shè)計(jì)是復(fù)用的候選者,更常見(jiàn)的是,系統(tǒng)和對(duì)象設(shè)計(jì)是可復(fù)用的。源代碼。驗(yàn)證過(guò)的程序構(gòu)件(用兼容的程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)的)是復(fù)用的候選者。用戶和技術(shù)文檔。即使特定的應(yīng)用是不同的,也經(jīng)常有可能復(fù)用用戶和技術(shù)文檔的大部分。用戶界面??赡苁亲顝V泛被復(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ù)庫(kù)。測(cè)試用例。一旦設(shè)計(jì)或代碼構(gòu)件將被復(fù)用,相關(guān)的測(cè)試用例應(yīng)該“附屬于”它們。應(yīng)該注意,復(fù)用可以擴(kuò)展到上面所討論的可交付的軟件制品之外,它也包含了軟件工程過(guò)程中的元素。特定的分析建模方法、檢查技術(shù)、測(cè)試用例設(shè)計(jì)技術(shù)、質(zhì)量保證過(guò)程、以及很多其他軟件工程實(shí)踐可以被“復(fù)用”,例如,如果某軟件項(xiàng)目組有效地應(yīng)用凈室軟件工程方法,該方法可能適用于另一個(gè)項(xiàng)目。為了作出決定,有必要定義一組描述功能,它們使得潛在的凈室用戶能夠?qū)ζ鋺?yīng)用作出適當(dāng)?shù)臎Q策。3、復(fù)用過(guò)程復(fù)用過(guò)程包括兩個(gè)并發(fā)的子過(guò)程:領(lǐng)域工程和軟件工程。3.1、領(lǐng)域工程領(lǐng)域工程的目的是標(biāo)識(shí)、構(gòu)造、分類和傳播一組軟件制品,它們對(duì)某特定應(yīng)用領(lǐng)域中對(duì)現(xiàn)存的和未來(lái)的軟件系統(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é)中討論。有人爭(zhēng)辯說(shuō)“復(fù)用將消失,不是被消除,而是被集成”進(jìn)軟件工程實(shí)踐之中,隨著復(fù)用被更多的強(qiáng)調(diào),人們相信在下個(gè)十年領(lǐng)域工程將變得和軟件工程一樣重要。3.1.1、領(lǐng)域分析過(guò)程在面向?qū)ο筌浖こ谭秶鷥?nèi)領(lǐng)域分析的方法,過(guò)程中的步驟定義如下:1).定義將被研究的領(lǐng)域。2).分類從領(lǐng)域中抽出的物項(xiàng)。3).收集領(lǐng)域中有代表性的應(yīng)用樣本。4).分析樣本中的每個(gè)應(yīng)用。5).開(kāi)發(fā)對(duì)象的分析模型。必須注意,領(lǐng)域分析適用于任意軟件工程范型,并且可以用于傳統(tǒng)的以及面向?qū)ο蟮能浖_(kāi)發(fā)。Prieto-Diaz擴(kuò)展了上面給出的領(lǐng)域分析的第二個(gè)步驟,建議了一個(gè)8步驟的標(biāo)識(shí)和分類可復(fù)用軟件制品的方法:1).選擇特定的功能/對(duì)象。2).抽象功能/對(duì)象。3).定義分類法。4).標(biāo)識(shí)公共特征。5).標(biāo)識(shí)特定的關(guān)系。6).抽象關(guān)系。7).導(dǎo)出功能模型。8).定義領(lǐng)域語(yǔ)言。領(lǐng)域語(yǔ)言使得在領(lǐng)域中進(jìn)行應(yīng)用的規(guī)約及構(gòu)造成為可能。雖然上面的步驟提供了一個(gè)有用的領(lǐng)域分析模型,但是它沒(méi)有提供幫助決定哪些軟件制品是復(fù)用候選的有用的指南。Hutchinson和Hindley提出了下面一組實(shí)際的問(wèn)題,它們可以用作標(biāo)識(shí)可復(fù)用軟件構(gòu)件的指南:*構(gòu)件功能對(duì)未來(lái)的實(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)行過(guò)足夠的優(yōu)化嗎?*我們能夠?qū)⒁粋€(gè)不可復(fù)用的構(gòu)件參數(shù)化以使其變成可復(fù)用的嗎?*構(gòu)件是否可以僅僅經(jīng)過(guò)少許修改就能夠在很多實(shí)現(xiàn)中復(fù)用嗎?*通過(guò)修改進(jìn)行復(fù)用是可行的嗎?*某不可復(fù)用的構(gòu)件能夠通過(guò)被分解以產(chǎn)生一組可復(fù)用構(gòu)件嗎?*針對(duì)復(fù)用的構(gòu)件分解是有效的嗎?關(guān)于領(lǐng)域分析的深入討論不在本書(shū)范圍之內(nèi),更多的信息可見(jiàn)。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)通過(guò)多個(gè)由這些模型元素組成的東西來(lái)刻劃,這樣,在系統(tǒng)的體系結(jié)構(gòu)單元間的復(fù)雜交互可以用在這些少量元素間的簡(jiǎn)單交互模式來(lái)描述。每個(gè)應(yīng)用領(lǐng)域可用一個(gè)結(jié)構(gòu)模型來(lái)刻劃(例如,飛行器電子設(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ū)ο蟮男性拋?lái)陳述,類層次的規(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)簡(jiǎn)單。3).結(jié)構(gòu)點(diǎn)應(yīng)該通過(guò)隱藏所有包含在結(jié)構(gòu)點(diǎn)內(nèi)部的復(fù)雜性而實(shí)現(xiàn)信息隱蔽,這會(huì)減少整個(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①這樣簡(jiǎn)單的系統(tǒng),或如工業(yè)過(guò)程警報(bào)系統(tǒng)這樣復(fù)雜的系統(tǒng),然而,在每種情形,均可以遇到一組可以預(yù)測(cè)的結(jié)構(gòu)模式:*界面,使用戶能夠和系統(tǒng)交互。*范圍設(shè)置機(jī)制,允許用戶設(shè)置將被測(cè)度的參數(shù)的范圍。*傳感器管理機(jī)制,和所有的監(jiān)控傳感器通訊。*反應(yīng)機(jī)制,對(duì)傳感器管理系統(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ù)庫(kù)。所有和應(yīng)用領(lǐng)域相關(guān)的對(duì)象的倉(cāng)庫(kù)。*計(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ù)用的軟件并沒(méi)有任何神奇之處。抽象、隱蔽、功能獨(dú)立性、求精、以及結(jié)構(gòu)化程序設(shè)計(jì)等設(shè)計(jì)概念,連同面向?qū)ο蠓椒?、測(cè)試、SQA、以及正確性驗(yàn)證方法——所有均對(duì)可復(fù)用軟件構(gòu)件的創(chuàng)建有貢獻(xiàn)。本節(jié)中,我們將不重復(fù)討論這些話題,而是考慮特定于復(fù)用的問(wèn)題,它們是對(duì)完整的軟件工程實(shí)踐的補(bǔ)充。4.1、為了復(fù)用的分析和設(shè)計(jì)數(shù)據(jù)、功能和行為模型(用一系列不同符號(hào)表示)可以被創(chuàng)建以描述特定應(yīng)用必須完成的任務(wù),書(shū)面的規(guī)約被用于描述這些模型并生成完整的需求描述。理想地,分析分析模型以確定模型中的那些指向現(xiàn)存的可復(fù)用軟件制品的元素。問(wèn)題是以能夠?qū)е隆耙?guī)約匹配”的形式從需求模型中抽取信息。Bellinzoni及其同事描述了一種針對(duì)面向?qū)ο笙到y(tǒng)的方法:構(gòu)件被在不同的抽象層次定義和存儲(chǔ)為規(guī)約、設(shè)計(jì)和實(shí)現(xiàn)類——每個(gè)類是來(lái)自以前應(yīng)用的某產(chǎn)品的工程化描述。規(guī)約知識(shí)——開(kāi)發(fā)知識(shí)——被以復(fù)用建議(reuse-suggestion)類的形式存儲(chǔ),它們包括對(duì)以構(gòu)件的描述為基礎(chǔ)檢索可復(fù)用構(gòu)件及檢索后組裝和剪裁構(gòu)件的指導(dǎo)。使用自動(dòng)化工具瀏覽構(gòu)件庫(kù),以試圖匹配當(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)件庫(kù)中提取這些構(gòu)件并將它們用于新系統(tǒng)的設(shè)計(jì)中。如果沒(méi)能找到設(shè)計(jì)構(gòu)件,軟件工程師必須應(yīng)用傳統(tǒng)的或面向?qū)ο蟮脑O(shè)計(jì)方法去創(chuàng)建它們。正是在這點(diǎn)——當(dāng)設(shè)計(jì)者開(kāi)始創(chuàng)建新的構(gòu)件時(shí)——應(yīng)該考慮為了復(fù)用的設(shè)計(jì)(DFR)。我們已經(jīng)提到過(guò),為了復(fù)用的設(shè)計(jì)需要軟件工程師應(yīng)用已有的設(shè)計(jì)概念和原則,但是,也必須考慮應(yīng)用領(lǐng)域的特征。Binder建議了作為為了復(fù)用的設(shè)計(jì)的基礎(chǔ)而應(yīng)該考慮的一系列關(guān)鍵問(wèn)題:標(biāo)準(zhǔn)數(shù)據(jù)。應(yīng)該研究應(yīng)用領(lǐng)域,并標(biāo)識(shí)出標(biāo)準(zhǔn)的全局?jǐn)?shù)據(jù)結(jié)構(gòu)(例如,文件結(jié)構(gòu)或完整的數(shù)據(jù)庫(kù)),那么所有設(shè)計(jì)構(gòu)件可以使用這些標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu)來(lái)刻劃。標(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)件對(duì)以后的復(fù)用有更高的概率。4.2、構(gòu)造方法和設(shè)計(jì)一樣,可復(fù)用軟件制品的構(gòu)造依賴于本書(shū)中其他地方已經(jīng)討論過(guò)的軟件工程方法,構(gòu)造可以使用傳統(tǒng)的第三代語(yǔ)言、第四代語(yǔ)言和代碼生成器、可視化程序設(shè)計(jì)技術(shù)、或更高級(jí)的工具來(lái)完成。更高級(jí)的構(gòu)造技術(shù)的一個(gè)有代表性例子是Netron公司開(kāi)發(fā)Frame技術(shù)Netron方法定義了一組自適應(yīng)的、稱作Frame的類屬構(gòu)件。和對(duì)象一樣,F(xiàn)rame封裝數(shù)據(jù)和操作,但是,它擴(kuò)展了對(duì)象的定義,它結(jié)合進(jìn)了使軟件工程師能夠通過(guò)選擇、刪除、修改或重復(fù)那些構(gòu)成該Frame的任意子構(gòu)件而對(duì)Frame進(jìn)行適應(yīng)性修改的機(jī)制??梢酝ㄟ^(guò)組裝來(lái)自Frame層次的構(gòu)件而構(gòu)造應(yīng)用。在該層次底部的Frame類似于在因子化體系結(jié)構(gòu)中的工作者(worker)模塊,即,它們包含執(zhí)行低層系統(tǒng)功能(例如,操作系統(tǒng)交互、接口構(gòu)造、數(shù)據(jù)庫(kù)交互)的操作和數(shù)據(jù)結(jié)構(gòu);在Frame層次中層的Frame著重于和特定信息系統(tǒng)領(lǐng)域相關(guān)的功能(例如,事務(wù)處理、銀行業(yè)務(wù)、客戶服務(wù));在層次的頂部是“規(guī)約fream”,它的作用是作為“系統(tǒng)的主要藍(lán)圖和開(kāi)發(fā)者創(chuàng)建來(lái)定義系統(tǒng)的唯一的Frame”。4.3、基于構(gòu)件的開(kāi)發(fā)當(dāng)復(fù)用占據(jù)了一個(gè)應(yīng)用開(kāi)發(fā)的主導(dǎo)地位時(shí),則構(gòu)造方法有時(shí)被稱為基于構(gòu)件的開(kāi)發(fā)或構(gòu)件軟件。如我們已經(jīng)看到的,領(lǐng)域工程提供了基于構(gòu)件的開(kāi)發(fā)所需要的可復(fù)用構(gòu)件庫(kù)。這些可復(fù)用構(gòu)件中的某些是內(nèi)部開(kāi)發(fā)的,其他的可以從現(xiàn)存應(yīng)用中抽取的,還有一些可以從第三方獲取。但是,我們?nèi)绾蝿?chuàng)建一個(gè)具有一致結(jié)構(gòu)的構(gòu)件庫(kù)——它可以被一系列不同的內(nèi)部和外部源查詢并且還可以被集成進(jìn)在某應(yīng)用領(lǐng)域內(nèi)的任意系統(tǒng)?答案是對(duì)這樣的構(gòu)件的標(biāo)準(zhǔn)的采用。4個(gè)“體系結(jié)構(gòu)成分”將被用于實(shí)現(xiàn)基于構(gòu)件的開(kāi)發(fā):數(shù)據(jù)交換模型。應(yīng)該對(duì)所有的可復(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)化存儲(chǔ)。包含在“復(fù)合文檔”中的異質(zhì)數(shù)據(jù)(例如,圖形數(shù)據(jù)、聲音、文本和數(shù)值數(shù)據(jù))應(yīng)該被作為單獨(dú)的數(shù)據(jù)結(jié)構(gòu)來(lái)組織和訪問(wèn),而不是作為一組分開(kāi)的文件?!敖Y(jié)構(gòu)化數(shù)據(jù)維持了嵌套結(jié)構(gòu)的一個(gè)描述性索引,使得應(yīng)用可以自由地進(jìn)行導(dǎo)航瀏覽以定位、創(chuàng)建或編輯個(gè)體數(shù)據(jù)內(nèi)容,就象終端用戶直接操作一樣”。底層對(duì)象模型。對(duì)象模型保證在不同平臺(tái)上用不同程序設(shè)計(jì)語(yǔ)言開(kāi)發(fā)的構(gòu)件可以互操作,即,對(duì)象必須能夠跨網(wǎng)絡(luò)進(jìn)行通信。為了達(dá)到這個(gè)目標(biāo),對(duì)象模型定義了構(gòu)件互操作標(biāo)準(zhǔn),該標(biāo)準(zhǔn)是語(yǔ)言獨(dú)立的,并使用接口定義語(yǔ)言(IDL)來(lái)定義。因?yàn)閺?fù)用對(duì)軟件產(chǎn)業(yè)的潛在影響非常巨大,一些主要的公司和產(chǎn)業(yè)聯(lián)盟①已經(jīng)提出了對(duì)構(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)定義了為使得由某開(kāi)發(fā)者提供的構(gòu)件能夠和另一個(gè)開(kāi)發(fā)者提供的構(gòu)件相互操作而必須實(shí)現(xiàn)的服務(wù)、控制基礎(chǔ)設(shè)施、和體系結(jié)構(gòu)。OMG/CORBA。對(duì)象管理組織發(fā)布了公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu)(OMG/CORBA)。一個(gè)對(duì)象請(qǐng)求代理(ORB)提供了一系列服務(wù),它們使得可復(fù)用構(gòu)件(對(duì)象)可以和其他構(gòu)件通信,而不管它們?cè)谙到y(tǒng)中的位置。當(dāng)用OMG/CORBA標(biāo)準(zhǔn)建立構(gòu)件時(shí),那些構(gòu)件在某系統(tǒng)內(nèi)的集成(沒(méi)有修改)可以得到保證。使用客戶/服務(wù)器的比喻,在客戶端應(yīng)用中的對(duì)象向ORB服務(wù)器請(qǐng)求一個(gè)或多個(gè)服務(wù),請(qǐng)求是通過(guò)IDL或在運(yùn)行時(shí)動(dòng)態(tài)地進(jìn)行的。一個(gè)接口池包含了所有關(guān)于服務(wù)請(qǐng)求和回答格式的信息。OLE2.0。微軟開(kāi)發(fā)了一個(gè)構(gòu)件對(duì)象模型(COM),它提供了對(duì)在單個(gè)應(yīng)用中使用不同廠商生產(chǎn)的對(duì)象的規(guī)約。對(duì)象連接和嵌入(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)前是不容易回答的問(wèn)題。當(dāng)前OLE被用得更廣一些(由于基于Windows應(yīng)用的廣泛使用),但是,很多OMG/CORBA工具和開(kāi)發(fā)環(huán)境正在被引入。5、分類和檢索構(gòu)件考慮一個(gè)大的大學(xué)圖書(shū)館,成千上萬(wàn)的書(shū)籍、期刊和其他信息資源是可用的。但是為了訪問(wèn)這些資源,必須有合適的分類模式。為了在這些大量的信息中導(dǎo)航瀏覽,圖書(shū)館管理者定義了一種分類模式,它包括分類碼、關(guān)鍵詞、作者名、以及其他索引條目,所有這些使得用戶可以快速和方便地找到所需資源。現(xiàn)在考慮一個(gè)大的構(gòu)件倉(cāng)庫(kù),其中存放了成千上萬(wàn)的可復(fù)用構(gòu)件。但是,軟件工程師如何找到他所需要的構(gòu)件呢?為了回答這個(gè)問(wèn)題,又出現(xiàn)了另一個(gè)問(wèn)題:我們?nèi)绾我詿o(wú)二義的、可分類的術(shù)語(yǔ)來(lái)描述軟件構(gòu)件?這些是困難的問(wèn)題,至今還沒(méi)有確定性的答案。在本節(jié)中,我們探討當(dāng)前的研究方向,這將使得未來(lái)的軟件工程師可以導(dǎo)航瀏覽復(fù)用庫(kù)。5.1、描述可復(fù)用構(gòu)件可以用很多方式來(lái)描述可復(fù)用軟件構(gòu)件,但是理想的描述包括TracZ提出的3C模型——概念(concePt)、內(nèi)容(content)和語(yǔ)境(context)。軟件構(gòu)件的概念是“對(duì)構(gòu)件做什么的描述”。構(gòu)件的接口被完整地描述,而且語(yǔ)義——表示在前置條件后置條件的語(yǔ)境中——被標(biāo)識(shí)。概念將傳達(dá)構(gòu)件的意圖。構(gòu)件的內(nèi)容描述概念如何被實(shí)現(xiàn)。在本質(zhì)上,內(nèi)容是對(duì)一般用戶隱蔽的信息,只有那些企圖修改該構(gòu)件的人才需要了解的信息。語(yǔ)境將可復(fù)用軟件構(gòu)件放置到其應(yīng)用的領(lǐng)域中。即,通過(guò)刻劃概念的、操作的和實(shí)現(xiàn)的特征,語(yǔ)境使得軟件工程師能夠發(fā)現(xiàn)適當(dāng)?shù)臉?gòu)件以滿足應(yīng)用需求。為了可用在實(shí)際環(huán)境中,概念、內(nèi)容和語(yǔ)境必須被轉(zhuǎn)換為具體的規(guī)約模式。已有很多的文章涉及可復(fù)用構(gòu)件的分類模式。①所提出的方法可以分為三大類:圖書(shū)館和信息科學(xué)方法、人工智能方法、以及超文本系統(tǒng)。目前為止,絕大部分研究工作建議使用圖書(shū)館科學(xué)方法進(jìn)行構(gòu)件分類。大多數(shù)軟件構(gòu)件分類模式可歸為如下的三類:1)枚舉分類(EnumeratedClassification)。通過(guò)定義一個(gè)層次結(jié)構(gòu)來(lái)描述構(gòu)件,在該層次中定義軟件構(gòu)件的類以及不同層次的子類。實(shí)際的構(gòu)件被羅列在枚舉層次的任何路徑的最低層,例如,對(duì)窗口操作的枚舉層次可能是: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)識(shí)出一組基本的描述特征,這些特征,稱為刻面,被根據(jù)其重要性區(qū)分優(yōu)先次序并被聯(lián)系到構(gòu)件??堂婵梢悦枋鰳?gòu)件執(zhí)行的功能、被操作的數(shù)據(jù)、構(gòu)件應(yīng)用的語(yǔ)境或任意其他特征。描述構(gòu)件的刻面的集合稱為刻面描述子,通常,刻面描述被限定不超過(guò)7或8個(gè)刻面。作為一個(gè)簡(jiǎn)單的在構(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ù)用庫(kù)中的每個(gè)構(gòu)件的刻面集,當(dāng)軟件工程師在設(shè)計(jì)中希望查詢構(gòu)件庫(kù)以發(fā)現(xiàn)可能的構(gòu)件時(shí),規(guī)定一列值,然后到庫(kù)中尋找匹配項(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)對(duì)可使用的屬性數(shù)量沒(méi)有限制,(2)屬性沒(méi)有優(yōu)先級(jí),(3)不使用同義詞詞典功能?;趯?duì)上面分類技術(shù)的實(shí)驗(yàn)研究,F(xiàn)rank和Pole指出沒(méi)有明顯“最好”的技術(shù)和“沒(méi)有某種方法比別的方法在查找效果上更適度…”。對(duì)復(fù)用庫(kù)有效的分類模式的開(kāi)發(fā)仍有許多工作要做。5.2、構(gòu)件復(fù)用環(huán)境軟件構(gòu)件復(fù)用必須有環(huán)境的支撐,環(huán)境應(yīng)包含如下元素:*用于存儲(chǔ)構(gòu)件和對(duì)檢索構(gòu)件必需的分類信息的構(gòu)件庫(kù)。*提供對(duì)構(gòu)件庫(kù)訪問(wèn)的庫(kù)管理系統(tǒng)。*允許客戶應(yīng)用從構(gòu)件庫(kù)服務(wù)器中檢索構(gòu)件和服務(wù)的軟件構(gòu)件檢索系統(tǒng)(如,對(duì)象請(qǐng)求代理)。*將復(fù)用的構(gòu)件集成到新設(shè)計(jì)或?qū)崿F(xiàn)中的CASE工具。每一個(gè)功能在復(fù)用庫(kù)的范圍內(nèi)交互或者被包含在復(fù)用庫(kù)中。復(fù)用庫(kù)是一個(gè)更大型CASE倉(cāng)庫(kù)的一個(gè)元素,并且為一系列可復(fù)用軟件制品(例如,規(guī)約、設(shè)計(jì)、代碼、測(cè)試用例、用戶指南)的存儲(chǔ)提供設(shè)施。復(fù)用庫(kù)包含一個(gè)數(shù)據(jù)庫(kù)以及查詢數(shù)據(jù)庫(kù)和構(gòu)件檢索所必需的工具,構(gòu)件分類模式是構(gòu)件庫(kù)查詢的基礎(chǔ)。查詢通常用前面描述的3C模型中的語(yǔ)境來(lái)刻劃,如果某初始查詢產(chǎn)生大量的候選構(gòu)件,則查詢被求精以減少候選對(duì)象。然后,概念和內(nèi)容信息被抽取出來(lái)(在找到候選構(gòu)件集后)以輔助開(kāi)發(fā)者選擇合適的構(gòu)件。6、總結(jié)過(guò)去幾年,大量來(lái)自產(chǎn)業(yè)實(shí)例研究的證據(jù)表明從積極的軟件復(fù)用可獲得實(shí)質(zhì)性的商業(yè)收益,產(chǎn)品質(zhì)量、開(kāi)發(fā)生產(chǎn)率、以及整體成本都將得到改善。質(zhì)量。理想情況下,為了復(fù)用而開(kāi)發(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ì)上無(wú)錯(cuò)誤的。在HP公司的研究中,Lim報(bào)告說(shuō):被復(fù)用代碼的錯(cuò)誤率是每KLOC有0.9個(gè)錯(cuò)誤,而新開(kāi)發(fā)代碼的錯(cuò)誤率是每KLOC有4.1個(gè)錯(cuò)誤。對(duì)一個(gè)包含60%復(fù)用代碼的應(yīng)用來(lái)說(shuō),錯(cuò)誤率是每KLOC有2.0個(gè)錯(cuò)誤——對(duì)期望的錯(cuò)誤率有51%的改善,相對(duì)于不使用復(fù)用的開(kāi)發(fā)。Henry和Faller的研究指出在質(zhì)量上有35%的改善。雖然不同的報(bào)告得到不同的改善率(位于合理的范圍內(nèi)),但是,公正地說(shuō),復(fù)用對(duì)交付的軟件在質(zhì)量和可靠性方面確實(shí)帶來(lái)了實(shí)質(zhì)性的收益。生產(chǎn)率。當(dāng)可復(fù)用軟件制品被應(yīng)用于軟件開(kāi)發(fā)全過(guò)程中,對(duì)開(kāi)發(fā)一個(gè)可交付系統(tǒng)所必需的計(jì)劃、模型、文檔、代碼和數(shù)據(jù)的創(chuàng)建工作將花費(fèi)較少的時(shí)間,導(dǎo)致的結(jié)果是用較少的投入給客戶提供了相同級(jí)別的功能,因此生產(chǎn)率得到了改善。雖然,對(duì)生產(chǎn)率改善百分率的報(bào)告是眾所周知難于解釋的,①但是,似乎30%到50%的復(fù)用可以產(chǎn)生25%到40%的生產(chǎn)率改善。成本(COST)。對(duì)復(fù)用帶來(lái)的凈成本節(jié)省估算如下:估算出項(xiàng)目如果是從頭開(kāi)始開(kāi)發(fā)所需的成本C,然后減去和復(fù)用關(guān)聯(lián)的成本C與被交付的軟件的實(shí)際成本Cs之和。Cs可以用估算技術(shù)的一個(gè)或多個(gè)來(lái)確定,和復(fù)用關(guān)聯(lián)的成本Cs包括:*領(lǐng)域分析和建模。*領(lǐng)域體系結(jié)構(gòu)開(kāi)發(fā)。*為促進(jìn)復(fù)用所增加的文檔量。*可復(fù)用軟件制品的維護(hù)和增強(qiáng)。*對(duì)從外部獲取的構(gòu)件的版稅和許可證(licenses)費(fèi)。*可復(fù)用構(gòu)件庫(kù)的創(chuàng)建或者獲得以及操作。*對(duì)設(shè)計(jì)和構(gòu)造復(fù)用的人員的培訓(xùn)。雖然和領(lǐng)域分析與復(fù)用庫(kù)操作相關(guān)聯(lián)的成本可能是實(shí)質(zhì)性的,但是它們由很多項(xiàng)目分擔(dān)。上面提到的很多其他成本所強(qiáng)調(diào)的問(wèn)題實(shí)際上是一個(gè)好的軟件工程習(xí)慣的一部分,不管是否優(yōu)先考慮復(fù)用。第4章軟件概要設(shè)計(jì)學(xué)習(xí)本章,我們要考慮以下幾個(gè)問(wèn)題:軟件概要設(shè)計(jì)指的是什么?軟件概要設(shè)計(jì)要做的事情是什么?用什么來(lái)評(píng)價(jià)軟件設(shè)計(jì)的技術(shù)質(zhì)量?軟件結(jié)構(gòu)優(yōu)化的準(zhǔn)則是什么?如何進(jìn)行軟件概要設(shè)計(jì)?以上問(wèn)題就是本章所要討論的內(nèi)容。一、軟件概要設(shè)計(jì)指的是什么?我們知道,軟件設(shè)計(jì)是把一個(gè)軟件需求轉(zhuǎn)換為軟件表示的過(guò)程,而概要設(shè)計(jì)(又稱結(jié)構(gòu)設(shè)計(jì))就是軟件設(shè)計(jì)最初形成的一個(gè)表示(這里的表示是一個(gè)名詞),它描述了軟件的總的體系結(jié)構(gòu)。簡(jiǎn)單地說(shuō)軟件概要設(shè)計(jì)就是設(shè)計(jì)出軟件的總體結(jié)構(gòu)框架。而后對(duì)結(jié)構(gòu)的進(jìn)一步細(xì)化的設(shè)計(jì)就是軟件的詳細(xì)設(shè)計(jì)或過(guò)程設(shè)計(jì)。本章所學(xué)內(nèi)容主要就是軟件的概要設(shè)計(jì)內(nèi)容。二、軟件概要設(shè)計(jì)的基本任務(wù)軟件概要設(shè)計(jì)階段要做的事情是什么呢?總的來(lái)看有四個(gè)方面:它們是1、設(shè)計(jì)軟件系統(tǒng)結(jié)構(gòu)(軟件結(jié)構(gòu))2、數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫(kù)設(shè)計(jì)3、編寫(xiě)概要設(shè)計(jì)文檔4、評(píng)審在需求分析階段,已經(jīng)把系統(tǒng)分解成層次結(jié)構(gòu),而在概要設(shè)計(jì)階段,需要進(jìn)一步分解,劃分為模塊以及模塊的層次結(jié)構(gòu)。劃分的具體過(guò)程是:(1)采用某種設(shè)計(jì)方法,將一個(gè)復(fù)雜的系統(tǒng)按功能劃分成模塊。(2)確定每個(gè)模塊的功能。(3)確定模塊之間的調(diào)用關(guān)系。(4)確定模塊之間的接口,即模塊之間傳遞的信息。(5)評(píng)價(jià)模塊結(jié)構(gòu)的質(zhì)量。對(duì)于大型數(shù)據(jù)處理的軟件系統(tǒng),還要對(duì)數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫(kù)進(jìn)行設(shè)計(jì)。在概要設(shè)計(jì)階段,還要編寫(xiě)概要設(shè)計(jì)文檔,我們初學(xué)者有一個(gè)不是很好的做法,就是在編程序時(shí),往往不注意文檔的編寫(xiě),導(dǎo)致以后軟件修改和升級(jí)很不方便,用戶使用時(shí)也得不到幫助。所以應(yīng)該在軟件設(shè)計(jì)的每個(gè)階段編寫(xiě)相應(yīng)文檔,在概要設(shè)計(jì)階段,主要有以下文檔需要編寫(xiě):(1)概要設(shè)計(jì)說(shuō)明書(shū)。(2)數(shù)據(jù)庫(kù)設(shè)計(jì)說(shuō)明書(shū)。(3)用戶手冊(cè),(4)修訂測(cè)試計(jì)劃。最后一個(gè)任務(wù)就是評(píng)審,在概要設(shè)計(jì)中,對(duì)設(shè)計(jì)部分是否完整地實(shí)現(xiàn)了需求中規(guī)定的功能、性能等要求,設(shè)計(jì)方案的可行性,關(guān)鍵的處理及內(nèi)外部接口定義正確性、有效性,各部分之間的一致性等都要進(jìn)行評(píng)審,以免在以后的設(shè)計(jì)中發(fā)現(xiàn)大的問(wèn)題而返工。以上就是軟件概要設(shè)計(jì)的四個(gè)基本任務(wù),總結(jié)一下用八個(gè)字表示:兩類結(jié)構(gòu)文檔評(píng)審。(兩類結(jié)構(gòu)就是指軟件結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫(kù)設(shè)計(jì))在了解了軟件概要設(shè)計(jì)的基本任務(wù)之后,我們來(lái)看看軟件設(shè)計(jì)的基本原理,也就是用于衡量軟件設(shè)計(jì)的技術(shù)質(zhì)量的一些標(biāo)準(zhǔn)。三、軟件設(shè)計(jì)的基本原理1、模塊化模塊就是指在程序中的數(shù)據(jù)說(shuō)明、可執(zhí)行語(yǔ)句等程序?qū)ο蟮募?或者是單獨(dú)命名和編址的元素。如高級(jí)語(yǔ)言中的過(guò)程,函數(shù)、子程序等。每個(gè)模塊可以完成一個(gè)特定的子功能,各個(gè)模塊可以按一定方法組裝起來(lái)成為一個(gè)整體。從而實(shí)現(xiàn)整個(gè)系統(tǒng)的功能。來(lái)源:模塊化就是指解決一個(gè)復(fù)雜問(wèn)題時(shí)自頂向下逐層把軟件系統(tǒng)劃分成若干模塊的過(guò)程。為了解決復(fù)雜的問(wèn)題,在軟件設(shè)計(jì)中就必須把整個(gè)問(wèn)題進(jìn)行分解來(lái)降低復(fù)雜性,這樣就可以減少開(kāi)發(fā)工作量并降低開(kāi)發(fā)成本和提高軟件生產(chǎn)率。但是劃分模塊并不是越多越好,因?yàn)檫@會(huì)增加模塊之間接口的工作量。所以劃分模塊的層次和數(shù)量應(yīng)該避免過(guò)多或過(guò)少。2、抽象抽象這個(gè)詞本身也比較抽象,(老師要小明用抽象和具體造一個(gè)句子,可是他不懂,就問(wèn)媽媽,什么是抽象,什么是具體?媽媽告訴他:抽象就是看不見(jiàn)摸不著的,具體就是看得見(jiàn)摸得著的。小明懂了,很快造好了一個(gè)句子,是這樣的:今天我很早起床,看見(jiàn)具體的媽媽在炒具體的菜,我打開(kāi)窗戶,抽象的新鮮空氣呼地一下跑進(jìn)來(lái),真舒服啊。)呵呵,事實(shí)上,抽象并不是這么簡(jiǎn)單的意思,它是一種思維工具,就是把事物本質(zhì)的共同特性抽出來(lái)而不考慮其他細(xì)節(jié),比如說(shuō)我們可以把把男人女人老人小孩的共同本質(zhì)特性抽出來(lái)之后形成一個(gè)概念"人",這個(gè)概念就是抽象的結(jié)果。在軟件工程中就是這樣,在每個(gè)階段中,抽象的層次逐步降低,在軟件結(jié)構(gòu)設(shè)計(jì)中的模塊分層也是由抽象到具體的分析和構(gòu)造出來(lái)的。比如上一層的模塊所進(jìn)行的加工是一個(gè)抽象的操作"銷售統(tǒng)計(jì)",分解到最后一層,就可能是具體"打印報(bào)表"的操作了。3、信息隱蔽信息隱蔽的意思就是指,在設(shè)計(jì)和確定模塊時(shí),使得一個(gè)模塊內(nèi)包含的信息(過(guò)程或數(shù)據(jù)),對(duì)于不需要這些信息的其他模塊來(lái)說(shuō)是不能訪問(wèn)的。舉個(gè)例子吧,假設(shè)我是程序中的一個(gè)模塊,電話機(jī)是另一個(gè)模塊,我在使用電話機(jī)時(shí),對(duì)電話機(jī)的控制是通過(guò)幾個(gè)按鍵來(lái)確定的,輸入的數(shù)據(jù)是我的語(yǔ)音,輸出的數(shù)據(jù)是對(duì)方的語(yǔ)音,而這些輸入、輸出的數(shù)據(jù)變換以及控制在電話機(jī)內(nèi)部是怎么實(shí)現(xiàn)的我不需要知道,同時(shí)也不能加以直接控制,這樣,如果電話機(jī)壞了,修復(fù)或更換后對(duì)我的使用是沒(méi)有任何影響的。所以說(shuō),電話機(jī)這個(gè)模塊的信息隱蔽是十分完善的。在軟件設(shè)計(jì)中,模塊的劃分也要采取措施使它實(shí)現(xiàn)信息隱蔽。4、模塊獨(dú)立性模塊獨(dú)立性是指每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡(jiǎn)單。這個(gè)概念就是上面說(shuō)的三個(gè)基本原理的直接產(chǎn)物,在概要設(shè)計(jì)過(guò)程中,就是要求設(shè)計(jì)出具有良好模塊獨(dú)立性的軟件結(jié)構(gòu)。那么如何來(lái)衡量軟件的模塊獨(dú)立性呢?這里有兩個(gè)定性的度量標(biāo)準(zhǔn)。(1)耦合性:就是指模塊之間的聯(lián)系緊密程度。模塊之間聯(lián)系越緊密,其耦合性越強(qiáng),獨(dú)立性就越差。模塊的耦合性從低到高可分為以下幾種類型:(假設(shè)某人為一模塊)無(wú)直接耦合(比如陌生人之間的聯(lián)系)數(shù)據(jù)耦合(比如去售貨員與顧客之間的聯(lián)系)標(biāo)記耦合(比如兩個(gè)人下棋)控制耦合(領(lǐng)導(dǎo)和下屬之間的聯(lián)系)公共耦合(比如圖書(shū)館的所有借書(shū)者之間的聯(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)的各處理元素之間沒(méi)有任何聯(lián)系。(公共汽車內(nèi)的人群)邏輯內(nèi)聚:指模塊內(nèi)執(zhí)行幾個(gè)邏輯上相似的功能,通過(guò)參數(shù)確定該模塊完成哪一個(gè)功能。(警察局里的警察)時(shí)間內(nèi)聚:把需要同時(shí)執(zhí)行的動(dòng)作組合在一起形成的模塊為時(shí)間內(nèi)聚模塊。(交響樂(lè)團(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é)會(huì)用圖形表示軟件結(jié)構(gòu),軟件結(jié)構(gòu)圖反映了整個(gè)系統(tǒng)的功能實(shí)現(xiàn),即將來(lái)編好程序中的控制層次體系。軟件結(jié)構(gòu)往往用樹(shù)狀或網(wǎng)狀結(jié)構(gòu)的圖形來(lái)表示。請(qǐng)大家對(duì)照課本的解釋來(lái)看軟件結(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)則中,都是針對(duì)模塊及模塊間關(guān)系來(lái)提出的。1、模塊的劃分:要做到高內(nèi)聚,低耦合,保持相對(duì)獨(dú)立性。2、模塊的控制:模塊的作用范圍要在他的控制范圍內(nèi),判定所在的模塊應(yīng)與受其影響的模塊在層次上盡量靠近)3、形成的結(jié)構(gòu);軟件結(jié)構(gòu)的深度、寬度、扇出、扇入要適當(dāng)4、模塊的大小:要適中。5、模塊的接口:模塊的接口要簡(jiǎn)單、清晰、含義明確,便于理解、易于實(shí)現(xiàn)、測(cè)試與維護(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)的類型,無(wú)論何種軟件系統(tǒng),DFD一般都可分為變換型和事務(wù)型兩類。(課本第51頁(yè))先來(lái)看變換型數(shù)據(jù)流圖,顧名思義,變換就是把輸入的數(shù)據(jù)處理后變成另外的數(shù)據(jù)輸出,所以變換型數(shù)據(jù)的工作過(guò)程就是三步:取得數(shù)據(jù)、變換數(shù)據(jù)和輸出數(shù)據(jù)。在圖4-6中,可以看到兩股數(shù)據(jù)流經(jīng)過(guò)交換中心變成一股數(shù)據(jù)流進(jìn)行輸出。虛線為標(biāo)出的流界。再來(lái)看事務(wù)型數(shù)據(jù)流圖,所謂事務(wù)也是一個(gè)處理,但不是數(shù)據(jù)變換,而是將輸入數(shù)據(jù)流分離成許多發(fā)散的數(shù)據(jù)流,形成許多加工路徑,并根據(jù)值選擇其中一個(gè)路徑來(lái)執(zhí)行。舉個(gè)例子,好比有一個(gè)郵件分發(fā)中心,把收進(jìn)的郵件根據(jù)其發(fā)送地址進(jìn)行分流,有的用飛機(jī)郵送,有的用汽車來(lái)運(yùn)輸?shù)鹊?。在大型軟件系統(tǒng)中的DFD數(shù)據(jù)流圖中,這兩種類型特征都有可能存在。2、SD方法設(shè)計(jì)過(guò)程1)精化DFD。2)確定DFD類型并進(jìn)行相應(yīng)的映射。3)分解上層模塊,設(shè)計(jì)中下層模塊結(jié)構(gòu)4)根據(jù)優(yōu)化準(zhǔn)則對(duì)軟件結(jié)構(gòu)求精。5)描述模塊功能、接口及全局?jǐn)?shù)據(jù)結(jié)構(gòu)6)復(fù)查,如果有錯(cuò)則轉(zhuǎn)向2)修改完善,否則進(jìn)入詳細(xì)設(shè)計(jì)。下面我們通過(guò)例
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 探索地理學(xué)學(xué)科
- 2024年版商業(yè)停車場(chǎng)買(mǎi)賣協(xié)議3篇
- 2024年電機(jī)維修質(zhì)量保證合同3篇
- 2024年儲(chǔ)藏室經(jīng)營(yíng)權(quán)買(mǎi)賣合同3篇
- 企業(yè)文化引領(lǐng)團(tuán)隊(duì)
- 2024年電腦硬件購(gòu)銷合同版
- 《大學(xué)生審美體驗(yàn)教育中的品德教育研究》
- 社會(huì)養(yǎng)老保險(xiǎn)培訓(xùn)
- 2023年廣州市番禺區(qū)市橋街下屬事業(yè)單位招聘筆試真題
- 2023年鄂爾多斯市交通投資有限公司收費(fèi)所招聘筆試真題
- 變電站隱患排查治理總結(jié)報(bào)告
- 異彩紛呈的民族文化智慧樹(shù)知到期末考試答案2024年
- 國(guó)標(biāo)《電化學(xué)儲(chǔ)能電站檢修試驗(yàn)規(guī)程》
- 車輛救援及維修服務(wù)方案
- 三體讀書(shū)分享
- 2024年內(nèi)蒙古巴彥淖爾市交通投資集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 2024年南平實(shí)業(yè)集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 咖啡學(xué)概論智慧樹(shù)知到期末考試答案2024年
- (高清版)DZT 0217-2020 石油天然氣儲(chǔ)量估算規(guī)范
- 借助力學(xué)原理設(shè)計(jì)簡(jiǎn)易杠桿裝置
- 深圳港口介紹
評(píng)論
0/150
提交評(píng)論