【正文】
⑧ 用戶界。 ⑥ 源程序代碼:驗(yàn)證過(guò)的程序構(gòu)件 可以拿來(lái)復(fù)用的。此外,用傳統(tǒng)軟件工程方法開發(fā)的分析模型 也可以復(fù)用。因此,可以創(chuàng)建一組類屬 的體系結(jié)構(gòu)模板,將這些模板作為可復(fù)用的涉及框架。 ② 成本估計(jì):由于不同項(xiàng)目中常包含類似的功能,所以有可能在極少修改或不修改的情況下,復(fù)用對(duì)該功能的成本估計(jì)。 五、習(xí)題解答 【 81】軟件 復(fù)用就是指利用某些早先開發(fā)的對(duì)建立新軟件系統(tǒng)有用的軟件元素來(lái)生產(chǎn)新系統(tǒng)。 ( C )將通過(guò)定義概念的、操作的和實(shí)現(xiàn)的特征,使用戶能夠找到合適的構(gòu)件以滿足應(yīng)用的需求。 ( B )描述構(gòu)件的 ( F )如何實(shí)現(xiàn)。 ( A )描述構(gòu)件做什么。 【 89】 可以有 很多方法來(lái)描述可復(fù)用的構(gòu)件,其中最理想的是由 Tracz提出的 3C 模型。 (1) 簡(jiǎn)述關(guān)鍵詞分類法、多面分類法和超文本分類法等組織方法的概要。右圖是一種 4 層次的分層體系結(jié)構(gòu),請(qǐng)選擇B、 C、 D、 E。 供選擇的答案: A ? B. ① 數(shù)據(jù)抽象 ② 需求抽象 ③ 設(shè)計(jì)抽象 ④ 過(guò)程抽象 ⑤ 功能抽象 ⑥ 實(shí)例抽象 D ? G. ① 異步 ② 程序 ③ 線程 ④ 用戶 ⑤ 功能 ⑥ 同步 【 87】所謂分層式體系結(jié)構(gòu)是按層組 織的軟件的一種軟件體系結(jié)構(gòu),其中,每一層的軟件建立在低一層的軟件層上。 ( C )則在 ( B )的基礎(chǔ)上進(jìn)一步實(shí)現(xiàn)在同一構(gòu)件上并發(fā)執(zhí)行的多個(gè) ( E )的無(wú)關(guān)性。 ( A )使 構(gòu)件的 ( D )僅由接口說(shuō)明確定,而把實(shí)現(xiàn)細(xì)節(jié)對(duì)構(gòu)件的使用者隱藏起來(lái); ( B )在 ( A )的基礎(chǔ)上進(jìn)一步隱藏除接口參數(shù)外的所有數(shù)據(jù)。典型的 抽象方法有 3 種。而 ( E )技術(shù)中的 ( F )機(jī)制則有使開發(fā)簡(jiǎn)化、維護(hù)復(fù)雜的兩面性。這里的構(gòu)件是基于 ( E )技術(shù)的。對(duì)于構(gòu)件,應(yīng)當(dāng)按可復(fù)用的要求 ( A )、 ( B )、打包、編寫文檔。系統(tǒng)地軟件復(fù)用的實(shí)質(zhì)是: ( C )先投資,即界定并仔細(xì)地創(chuàng)建出可復(fù)用的資源,從而可以使得( D )能夠又快又省地開發(fā)應(yīng)用軟件。這個(gè)活動(dòng)就叫做 ( A )。 (2) 假定有一個(gè)結(jié)構(gòu)形如圖 所示的構(gòu)件庫(kù),基于該構(gòu)件庫(kù)的軟件復(fù)用屬于橫向復(fù)用還是縱向復(fù)用?為什么? 【 84】當(dāng)今大多數(shù)軟件復(fù)用過(guò)程中,都涉及創(chuàng)建過(guò)程的一個(gè)重要活動(dòng) ,即界定潛在的可復(fù)用 21 的資源。 【 83】回答下列問(wèn)題。 四、習(xí)題 【 81】軟件復(fù)用的含義是什么?軟件復(fù)用的范圍有哪些方面? 【 82】簡(jiǎn)述 軟件復(fù)用的大致過(guò)程。可見,通過(guò)軟件復(fù)用來(lái)提高軟件生產(chǎn)率, 并不是一件輕而易舉的事情。再令 Et、 En 和 Er 分別代表開發(fā)該程序的總工作量、新編程序的工作量和復(fù)用已有軟件構(gòu)件的工作量,則有以下等式成立: Lt = Ln + Lr, Et = En + Er, P = Lt∕ Et, R = Lr∕ Lt. 此外,用符號(hào) Cn 和 Cr 分別代表開發(fā)新代碼和復(fù)用已有軟件構(gòu)件的生產(chǎn)率,則有: Cn = Ln∕ En, Cr = Lr∕ Er. 從上述 6 個(gè)等式出發(fā),可以推導(dǎo)出下列的生產(chǎn)率與復(fù)用率之間的關(guān)系: 從上式可知,復(fù)用率 R 越高,生產(chǎn)率不一定就越高。 即使不考慮上述的額外代價(jià),軟件復(fù)用也不是必然能提高軟件生產(chǎn)率。軟件成分的復(fù)用又可進(jìn)一步劃分為三個(gè)級(jí)別: ① 代碼復(fù)用(源代碼剪貼、源代碼包含、繼承);② 設(shè)計(jì)結(jié)果復(fù)用;③ 分析結(jié)果復(fù)用(這是一種更高級(jí)別的復(fù)用,即復(fù)用某個(gè)系統(tǒng)的分 析模型)。 供選擇的答案: A ? E. ① 知識(shí)復(fù)用 ② 分析結(jié)果復(fù)用 ③ 代碼復(fù)用 內(nèi)核 基本工具 有用的系統(tǒng) 用戶 過(guò)程調(diào)用 不同元素組合 20 rtLLtrLL R)C/C1(1 Crnn??ttELnnEL R)C/C(1 Crnntrnn L)E/E(1 ER)C/C1(1 CP rnn??? ④ 方法與標(biāo)準(zhǔn)復(fù)用 ⑤ 設(shè)計(jì)結(jié)果復(fù)用 ⑥ 軟件成分復(fù)用 F ? H. ① ② ③ ④ ⑤ ⑥ ⑦ 答案: A. ① , B. ④ , C. ③ , D. ⑤ , E. ② , F. ④ , G. ② , H. ③。其中,用 Lt 代表程序總長(zhǎng)度,Ln 和 Lr分別為新編代碼和復(fù)用代碼的長(zhǎng)度。軟件成分的復(fù)用又可進(jìn)一步劃分為 ( C ),如剪貼; ( D ),如復(fù)用設(shè)計(jì)模型; ( E ),更高級(jí)別復(fù)用。 ( B ),例如面向?qū)ο蠓椒ɑ驀?guó)家制定的軟件開發(fā)規(guī)范的復(fù)用。這樣,就可以定義一組標(biāo)準(zhǔn)的接口,并允許有各種不同的實(shí)現(xiàn)方法 (典型的例子是 ISO OSI 參考模型和某些 X Windows 的系統(tǒng)協(xié)議 )。首先,它支持基于抽象程度遞增 的系統(tǒng)設(shè)計(jì),這使得設(shè)計(jì)者可以把一個(gè)復(fù)雜的系統(tǒng)按遞增的步驟分解開來(lái);其次,它支持功能增強(qiáng) ,像管道結(jié)構(gòu)的系統(tǒng)一樣,因?yàn)槊恳粚又炼嗪拖噜彽纳舷聦咏换?,因此,功能的改變最多只影響相鄰的上下層。其它?yīng)用論域有數(shù)據(jù)庫(kù)系統(tǒng)、操作系統(tǒng)等。在這一應(yīng)用論域中,每一層提供一級(jí)抽象的功能,作為上層通信的基礎(chǔ)。如圖所示。在一些分層系統(tǒng)中,內(nèi)部層次全部被隱藏起來(lái),只有外部層次及一部分精心選擇的功能可以被系統(tǒng)外部所見。 供選擇的答案: A ? D. ① 下層 ② 內(nèi)部層次 ③ 外部層次 ④ 上層 ⑤ 中間件 ⑥ 接口 E ? G. ① 接口定義 ② 軟件部件 ③ 連接 ④ 拓?fù)浼s束 ⑤ 規(guī)范定義 ⑥ 推理機(jī)制 ⑦ 系統(tǒng)結(jié)構(gòu) H ? J. ① 基于抽象程度遞增 ② 基于具體細(xì)節(jié)遞增 ③ 復(fù)用 ④ 可視化 ⑤ 互操作 ⑥ 功能增強(qiáng) ⑦ 效率提高 ⑧ 結(jié)構(gòu)化 答案: A. ④ , B. ① , C. ② , D. ③ , E. ② , F. ③ , G. ④ , H. ① , I. ⑥ , J. ③。首先,它支持 ( H )的系統(tǒng)設(shè)計(jì),這使得設(shè)計(jì)者可以把一個(gè)復(fù)雜的系統(tǒng)按遞增的步驟分解開來(lái);其次,它支持 ( I ),像管道結(jié)構(gòu)的系統(tǒng)一樣,因?yàn)槊恳粚又炼嗪拖噜彽纳舷聦咏换?,因此,功能的改變最多只影響相鄰的上下層。在這種系統(tǒng)中, ( E )是實(shí)現(xiàn)在層次結(jié)構(gòu)中的一些虛擬機(jī), ( F ) 19 是層次與層次之間交互的協(xié)議, ( G )包括對(duì)層次之間交互的限制。 【例 5】分層系統(tǒng)采用層次化的組織方法,每一層向其 ( A )提供服務(wù),并利用 ( B )的服務(wù)。要為系統(tǒng)選擇或設(shè)計(jì)某一個(gè)體系結(jié)構(gòu)風(fēng)格,必須根據(jù)特定項(xiàng)目的具體特點(diǎn),進(jìn)行分析比較后再確定。例如,可以對(duì)與客戶的專業(yè)領(lǐng)域有關(guān)的設(shè)計(jì)作出圖解或文字說(shuō)明。例如,分析管道過(guò)濾器系統(tǒng)的可調(diào)度性 (吞吐量、延時(shí)、 死鎖的解決 )是可行的,但對(duì)于任意的、或用其它方法構(gòu)造的架構(gòu)來(lái)說(shuō),這種分析可能毫無(wú)意義。例如,如果某人把系統(tǒng)描述為“客戶機(jī)∕服務(wù)器”模式,則不必給出細(xì)節(jié),人們立刻就會(huì)明白它們是如何一部分一部分地組織起來(lái),并在腦海中清晰地得到這個(gè)圖像。體系結(jié)構(gòu)風(fēng)格的不變部分使它們可以共 享同一個(gè)實(shí)現(xiàn)代碼。一些經(jīng)過(guò)實(shí)踐證實(shí)的解決方案可以拿來(lái)可靠地解決新問(wèn)題。有原則地使用體系結(jié)構(gòu)風(fēng)格可帶來(lái)一系列實(shí)際的好處。 分析:軟件體系設(shè)計(jì)的一個(gè)中心問(wèn)題是能否使用重復(fù)的體系模式,以及采用何種軟件體系結(jié)構(gòu)風(fēng)格。有原則地使用體系結(jié)構(gòu)風(fēng)格可帶來(lái)一些實(shí)際的好處: (1) 它促進(jìn)了對(duì)設(shè)計(jì)的 ( B ); (2) 它可以帶來(lái)顯著的 ( C )(體系結(jié)構(gòu)風(fēng)格的不變部分使它們可以共享同一個(gè)實(shí)現(xiàn)代碼 ); (3) 只要系統(tǒng)是使用常用的、規(guī)范的方法組織起來(lái)的,就可以讓其它設(shè)計(jì)者很容易地理解軟件 的體系結(jié)構(gòu); (4) 對(duì)標(biāo)準(zhǔn)或規(guī)范風(fēng)格的使用也支持了 ( D ),例如像 CORBA這樣的面向?qū)ο蟮募軜?gòu)和基于事件機(jī)制的工具的集成; (5) 在限制了設(shè)計(jì)空間的情況下體系結(jié)構(gòu)風(fēng)格通常允許進(jìn)行特殊的與風(fēng)格有關(guān)的分析; (6) 通??梢詫?duì)特定的風(fēng)格提供 ( E )手段。在一定程度上,這項(xiàng)工作要依賴于預(yù)測(cè)的可靠性 (預(yù)測(cè)需要哪些應(yīng)用層的可靠性和構(gòu)件層的可靠性 ),這也關(guān)系到我們要冒多大的風(fēng)險(xiǎn)。創(chuàng)建可復(fù)用構(gòu)件既困難又昂貴。其中, A、 B 的答案順序可互換。在一定程度上,這項(xiàng)工作要依賴于 ( F )。創(chuàng)建可復(fù)用構(gòu)件既困難又昂貴。而過(guò)去的工程缺乏這方面的工具。過(guò)去的方法是對(duì)構(gòu)件進(jìn)行調(diào)節(jié)使之滿足新的需求,或者使對(duì)新的體系結(jié)構(gòu)進(jìn)行限 制。 ? 缺乏對(duì)潛在可復(fù)用構(gòu)件的靈活性:如果一個(gè)構(gòu)件很死板,那么它被復(fù)用的機(jī)會(huì)就很少。 ? 缺乏可復(fù)用的構(gòu)件:者反映在許多方面。這里所說(shuō)的“工程”是指軟件開發(fā)工程,其技術(shù)和方法面對(duì)復(fù)用的需要已顯得低效,主要表現(xiàn)在: ? 缺乏界定手段:為了軟件復(fù)用,需要循軟件開發(fā)流程的各個(gè)階段,通過(guò)分析它們的描述模型,明確界定出潛在可復(fù)用的部分,被界定出的部分,可能是可 被復(fù)用的部分,也可能是可被可復(fù)用構(gòu)件代用的部分。其中, A、 B 的答案的順序可互換。“工程”指軟件開發(fā)工程,表現(xiàn)在缺乏 ( C )手段,缺乏 ( D )構(gòu)件,缺乏對(duì)潛在可復(fù)用的 ( E ),缺乏實(shí)施復(fù)用的工具。這些非面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言構(gòu)件技術(shù)的成功實(shí)踐說(shuō)明了:實(shí)現(xiàn)軟件復(fù)用并不限于面向?qū)ο笳Z(yǔ)言構(gòu)件或類庫(kù)。這些新技術(shù)包括微軟的 Visual Basic、 Active X、 OLE(對(duì)象鏈接與嵌入 ),SUN 公司的 Java, OMG 公司的 CORBA(公用對(duì)象請(qǐng)求代理程序體系結(jié)構(gòu) )、 IDL(接口定義語(yǔ)言 )等。例如,上 市時(shí)間可縮短 2 ? 5 倍;軟件產(chǎn)品的缺陷密度可減少 5 ? 10 倍;軟件產(chǎn)品的維護(hù)費(fèi)用可減少 5 ? 10倍;軟件開發(fā)總費(fèi)用可減少 15% ? 75%,其中, 75%是針對(duì)長(zhǎng)期項(xiàng)目,包括開發(fā)可復(fù)用構(gòu)件及支持復(fù)用的負(fù)擔(dān)。 日美一些大公司的資料表明,軟件復(fù)用率最高可望達(dá)到 90 %,而且軟件復(fù)用使得企業(yè)在及時(shí)滿足市場(chǎng)、軟件質(zhì)量、軟件開發(fā)和維護(hù)費(fèi)用等方面都得到顯著的改進(jìn)。 分析:實(shí)施軟件復(fù)用的目的是要使軟件開發(fā)工作進(jìn)行得是更快、更好、更省。 供選擇的答案: A. ① 更簡(jiǎn)捷 ② 更方便 ③ 更快、更好、更省 ④ 更豐富 B. ① 復(fù)用 率 ② 功能擴(kuò)充 ③ 效率 ④ 空間利用率 C, D. ① 軟件 ② 固件 ③ 構(gòu)件 ④ 屬性 ⑤ 對(duì)象 ⑥ 事物 ⑦ 數(shù)據(jù) ⑧ 代碼 E?G. ① office ② Visual Basic ③ Active X ④ Photoshop ⑤ OLE ⑥ Fortran ⑦ COBOL ⑧ Delphi 答案: A. ③ , B. ① , C. ③ , D. ⑤ , E. ② , F. ③ , G. ⑤。 新的應(yīng)用軟件開發(fā)技術(shù)和工具是以 ( C )作為關(guān)鍵,復(fù)用大粒度的 ( D ),為的是快速開發(fā)應(yīng)用軟件。 (1) 論域分析 表 論域分析的關(guān)鍵子任務(wù)及其支持工具 關(guān) 鍵 子 任 務(wù) 支 持 工 具 知識(shí)獲取 專家系統(tǒng)建造工具 對(duì)象及其操作的標(biāo)識(shí) 實(shí)體 ― 關(guān)系圖工具 抽象與關(guān)聯(lián) 面向?qū)ο蟮拈_發(fā)工具 對(duì) 象分類 基于語(yǔ)義的自動(dòng)分類工具 論域語(yǔ)言處理 語(yǔ)法分析工具 (2) 構(gòu)件的開發(fā) 表 軟件構(gòu)件開發(fā)的關(guān)鍵子任務(wù)及其支持工具 關(guān) 鍵 子 任 務(wù) 支 持 工 具 提高構(gòu)件獨(dú)立性 依賴性分析工具 (如交叉引用生成器 ),軟件結(jié)構(gòu)分析器 (如調(diào)用關(guān)系生成器、繼承關(guān)系生成器 ) 參數(shù)化 程序設(shè)計(jì)語(yǔ)言中的宏替換,編譯器中的預(yù)處理器,類屬 機(jī)制 (如 Ada 中的 Generic) 抽象與特殊化 面向?qū)ο笳Z(yǔ)言的繼承機(jī)制 構(gòu)件的擴(kuò)充 (增加功能,擴(kuò)大適 用范圍 ) 面向?qū)ο蟮恼Z(yǔ)言機(jī)制,支持同一軟件元素以多個(gè)版本不 斷演化的配置管理工具 測(cè)試與認(rèn)證 測(cè)試覆蓋面分析工具 形式驗(yàn)證 定理證明工具 16 構(gòu)件質(zhì)量評(píng)估 軟件質(zhì)量的度量與分析工具 構(gòu)件的分類 語(yǔ)義近似性分析工具,基于規(guī)則的專家系統(tǒng) (3) 構(gòu)件庫(kù)的組織與檢索 表 軟件構(gòu)件庫(kù)組織與檢索的關(guān)鍵子任務(wù)及其支持工具 關(guān) 鍵 子 任 務(wù) 支 持 工 具 可復(fù)用構(gòu)件庫(kù)的組織與存儲(chǔ) 關(guān)系數(shù)據(jù)庫(kù)或面向?qū)ο髷?shù)據(jù)庫(kù)管理系統(tǒng),類庫(kù) 瀏覽 超文本瀏覽工具 檢索 自然 語(yǔ)言的語(yǔ)法分析與語(yǔ)義理解工具 結(jié)構(gòu)化查詢 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng) 基于語(yǔ)義的檢索 定理證明工具 (用于語(yǔ)義匹配 ) (4) 構(gòu)件的合成 表 軟件構(gòu)件庫(kù)合成的關(guān)鍵子任務(wù)及其