軟件工程教案8_第1頁
軟件工程教案8_第2頁
軟件工程教案8_第3頁
軟件工程教案8_第4頁
軟件工程教案8_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第八章 軟件復(fù)用一、復(fù)習(xí)要求1. 了解軟件復(fù)用的概念、過程和意義。2. 了解軟件復(fù)用的類型、復(fù)用的目標和內(nèi)容。3. 了解針對復(fù)用的過程模型和論域工程。4. 了解可復(fù)用構(gòu)件的構(gòu)造原則和質(zhì)量標準。5. 了解可復(fù)用構(gòu)件庫的組織,包括可復(fù)用構(gòu)件的3C模型。6. 了解軟件的分層式體系結(jié)構(gòu)。7. 了解軟件構(gòu)件的復(fù)用過程(包括構(gòu)件的檢索與提取、理解與評價和修改)8. 了解面向?qū)ο蟮能浖?fù)用技術(shù)9. 了解支持軟件復(fù)用的CASE工具需求二、內(nèi)容提要1. 軟件復(fù)用的概念、過程和意義(1) 軟件復(fù)用的概念對建立軟件目標系統(tǒng)而言,所謂復(fù)用(Reuse),就是利用某些早先開發(fā)的對建立新軟件系統(tǒng)有用的軟件元素來生產(chǎn)新系統(tǒng)。它是一項活動,而不是一個對象。這里所說的軟件元素可以包括需求規(guī)格說明、設(shè)計過程、設(shè)計規(guī)格說明、程序代碼、測試用例、度量等等。對于新的軟件開發(fā)項目而言,它們或者是構(gòu)成新軟件系統(tǒng)的構(gòu)件,或者是在軟件開發(fā)過程中發(fā)揮某種作用。通常將這些軟件元素稱為可復(fù)用構(gòu)件。早在50年代用機器語言編寫程序的時期,計算正弦、余弦、對數(shù)等的標準子程序包就開創(chuàng)了復(fù)用的先河。到70年代的早期,在語言、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、程序變換等方面各種技術(shù)的發(fā)展,都與代碼的復(fù)用有關(guān)。當時,復(fù)用的應(yīng)用領(lǐng)域有限,軟件的復(fù)用問題沒有提到很重要的位置上來討論。70年代的中期和后期開始,為了緩解軟件危機,許多人寄希望于軟件復(fù)用技術(shù),因為在提高軟件生產(chǎn)率與質(zhì)量,以及減少軟件開發(fā)時間和成本的努力中軟件復(fù)用已經(jīng)成了關(guān)鍵因素。當前,美、日一些大公司的資料表明,軟件復(fù)用率最高可望達到90%,而且軟件復(fù)用使得企業(yè)在及時滿足市場、軟件質(zhì)量、軟件開發(fā)費用和維護費用等方面得到顯著的改進。為了保證軟件的復(fù)用,需要注意解決的問題主要有: 復(fù)用必須以對被復(fù)用對象的理解為基礎(chǔ); 如何表達對軟件構(gòu)件的需求; 如何尋找有關(guān)的軟件構(gòu)件; 如何識別是否滿足要求; 如何調(diào)整或修改構(gòu)件使之滿足要求; 如何組裝到新系統(tǒng)中; 如何保證結(jié)果的正確性; 如何進行效益的定量估算。只有當復(fù)用能帶來效益時人們才會考慮復(fù)用。為了能夠在軟件開發(fā)過程中復(fù)用現(xiàn)有的軟件構(gòu)件,必須在此之前不斷地進行可復(fù)用構(gòu)件的積累,并且將它們組織成可復(fù)用構(gòu)件庫。因此,軟件復(fù)用不但要討論如何檢索所需的軟件構(gòu)件以及如何對它們進行必要的修剪,而且還要解決如何選取可復(fù)用構(gòu)件、如何組織可復(fù)用構(gòu)件庫等問題。(2) 軟件復(fù)用的過程和意義軟件復(fù)用可以區(qū)分為橫向復(fù)用和縱向復(fù)用。橫向復(fù)用是復(fù)用不同應(yīng)用論域中的軟件元素,例如數(shù)據(jù)結(jié)構(gòu)、排序算法、人機界面構(gòu)件等。標準函數(shù)庫是一種典型的原始的橫向復(fù)用機制。縱向復(fù)用是在一類具有較多公共性的應(yīng)用論域之間復(fù)用軟件構(gòu)件。由于在兩個截然不同的應(yīng)用論域之間進行軟件復(fù)用潛力不大,所以縱向復(fù)用受到廣泛關(guān)注??v向復(fù)用活動的主要關(guān)鍵點在于論域分析:根據(jù)應(yīng)用論域的特征和相似性,預(yù)測軟件構(gòu)件的可復(fù)用性。一旦根據(jù)論域分析確認了軟件構(gòu)件的可復(fù)用價值,即可進行軟件構(gòu)件的開發(fā),并對具有可復(fù)用價值的軟件構(gòu)件做一般化處理,使它們能夠適應(yīng)新的類似的應(yīng)用論域。然后將軟件構(gòu)件和它們的文檔存入可復(fù)用構(gòu)件庫,成為可供未來開發(fā)項目使用的可復(fù)用資源。這些步驟構(gòu)成軟件構(gòu)件的構(gòu)造活動。這是一個不斷積累、不斷完善軟件構(gòu)件的漸進過程。論域知識論域分析隨著可復(fù)用構(gòu)件的不斷豐富,可復(fù)用構(gòu)件庫的規(guī)模會不斷擴大,這樣,必須考慮如何組織庫的結(jié)構(gòu)以保持較高的檢索效率。可供選擇的軟件構(gòu)件從庫中被檢索出來之后,用戶還必須理解它的功能或行為,以判定它是否真正適合于當前的應(yīng)用。必要時,可考慮對某個與期望的功能或行為匹配程度最好的可復(fù)用構(gòu)件進行少量修改,甚至可將修改后的構(gòu)件再加到可復(fù)用構(gòu)件庫中。上述的軟件復(fù)用的方法如圖8.1所示。 軟件開發(fā)與軟件構(gòu)件開發(fā)目標軟件用戶需求理 解確 認圖8.1 面向復(fù)用的軟件開發(fā)軟件復(fù)用的過程可借助計算機的幫助。支持軟件復(fù)用的CASE 工具的主要工作是:用某種組織形式實現(xiàn)可復(fù)用構(gòu)件的存儲,提供友好的人機界面,幫助用戶瀏覽、檢索和修改可復(fù)用構(gòu)件庫,對用戶感興趣的軟件構(gòu)件進行解釋。事實上,幾乎所有的軟件復(fù)用活動都是在CASE工具的幫助下進行的。檢 索可復(fù)用構(gòu)件庫使用復(fù)用技術(shù)可以減少軟件開發(fā)活動中大量的重復(fù)性工作,這樣就能夠提高軟件生產(chǎn)效率,降低開發(fā)成本,縮短開發(fā)周期。同時。由于可復(fù)用構(gòu)件大都經(jīng)過嚴格的質(zhì)量驗證,并在實際運行環(huán)境中得到檢驗,因此,復(fù)用軟件構(gòu)件有助于改善軟件質(zhì)量。此外,大量使用可復(fù)用構(gòu)件,軟件的靈活性和標準化程度也可望得到提高。2. 軟件復(fù)用的類型軟件復(fù)用的范圍不僅涉及源程序代碼,Caper Jones定義了十種可能復(fù)用的軟件要素: 項目計劃:軟件項目計劃的基本結(jié)構(gòu)和許多內(nèi)容(如SQA計劃)都可以跨項目復(fù)用。這樣可減少制定計劃的時間,也可降低與建立進度表、風(fēng)險分析及其他特征相關(guān)的不確定性。 成本估計:由于不同項目中常包含類似的功能,所以有可能在極少修改或不修改的情況下,復(fù)用對該功能的成本估計。 體系結(jié)構(gòu):即便應(yīng)用論域千差萬別,但程序和數(shù)據(jù)體系結(jié)構(gòu)大同小異。因此,可以創(chuàng)建一組類屬的體系結(jié)構(gòu)模板(例如事務(wù)處理結(jié)構(gòu)),將這些模板作為可復(fù)用的涉及框架。 需求模型和規(guī)格說明:類和對象的模型和規(guī)格說明顯然可以復(fù)用。此外,用傳統(tǒng)軟件工程方法開發(fā)的分析模型(如數(shù)據(jù)流圖)也可以復(fù)用。 設(shè)計:用傳統(tǒng)方法開發(fā)的體系結(jié)構(gòu)、數(shù)據(jù)、接口和過程化設(shè)計都可以復(fù)用。另外,復(fù)用系統(tǒng)和對象的設(shè)計是屢見不鮮的。 源程序代碼:驗證過的程序構(gòu)件(用兼容的程序設(shè)計語言書寫)是可以拿來復(fù)用的。 用戶文檔和技術(shù)文檔:即便特定的應(yīng)用不同,但也經(jīng)常有可能復(fù)用用戶文檔和技術(shù)文檔中的大部分內(nèi)容。 用戶界面:這可能是最廣泛被復(fù)用的軟件元素。如經(jīng)常復(fù)用GUI的軟件構(gòu)件。因為它可占到一個應(yīng)用的60%的代碼量,所以復(fù)用的效果最明顯。 數(shù)據(jù)結(jié)構(gòu):經(jīng)常被復(fù)用的數(shù)據(jù)結(jié)構(gòu)包括:內(nèi)部表、列表和記錄結(jié)構(gòu),以及文件和完整的數(shù)據(jù)庫。 測試用例:只要將設(shè)計或代碼構(gòu)件定義成可復(fù)用構(gòu)件,相關(guān)的測試用例就應(yīng)當成為這些構(gòu)件的“從屬品”。表8.1給出的數(shù)據(jù)(來自軍方的一些系統(tǒng)項目)表明1美元投資在4年后的回報。Jones對復(fù)用的整體影響給出高度評價:“復(fù)用所有10種軟件要素的總計值可以產(chǎn)生可能是任意已知的軟件技術(shù)種的最好回報?!北?.1 軟件復(fù)用在4年后的回報價值 可復(fù)用軟件要素 4年后的回報 可復(fù)用軟件要素 4年后的回報 項目計劃 $ 2.00 源程序代碼 $ 6.00 成本估計 $ 3.00 用戶文檔和技術(shù)文檔 $ 1.50 體系結(jié)構(gòu) $ 1.50 用戶界面 $ 1.00 需求模型和規(guī)格說明 $ 3.00 數(shù)據(jù)結(jié)構(gòu) $ 3.50 設(shè)計 $ 5.00 測試用例 $ 3.50需要注意的是,復(fù)用還可以擴展到以上所討論的可交付的軟件要素之外,它還包含了軟件工程過程中的元素。特定的分析建模方法、檢查技術(shù)、測試用例設(shè)計技術(shù)、質(zhì)量保證過程,以及很多其它軟件工程實踐都可以被“復(fù)用”。例如,如果某項目組有效地應(yīng)用了某種軟件工程方法,那么在開發(fā)其它項目時可以復(fù)用該方法。為幫助潛在的該方法的使用者選擇這個方法,應(yīng)定義一組功能描述,以幫助人們作出適當?shù)臎Q策。3. 論域工程(1) 針對復(fù)用的過程模型針對復(fù)用的過程模型如圖8.2所示。這種過程模型強調(diào)并行的工作方式。以這種方式,論域工程和基于構(gòu)件的應(yīng)用開發(fā)同時進行。論域工程創(chuàng)建應(yīng)用論域的模型,這個模型將成為軟件工程流中分析用戶需求的基礎(chǔ)。軟件體系結(jié)構(gòu)(及相應(yīng)的結(jié)構(gòu)點)為應(yīng)用的設(shè)計提供了輸入。最后,當可復(fù)用構(gòu)件構(gòu)造好并放入可復(fù)用構(gòu)件庫中(在論域工程中進行)之后,它們就可以在軟件構(gòu)造活動中供軟件開發(fā)人員使用。(2) 論域工程論域工程的目的是標識、構(gòu)造、分類和傳播一組軟件要素。從軟件工程的觀點來看,論域就是向應(yīng)用軟件提供應(yīng)用需求的問題和背景知識。論域工程的主要任務(wù)就是針對單個或一族相似的論域,以軟件復(fù)用為目標,探尋并挖掘論域或論域族中能夠為多個應(yīng)用軟件系統(tǒng)共用的軟件要素,并對它們進行結(jié)構(gòu)化組織,放入可復(fù)用構(gòu)件庫,以備復(fù)用。論域工程包括三個主要的活動:分析、構(gòu)造和傳播。 論域分析過程論域分析與常規(guī)的需求分析活動有相似之處,它們都是軟件開發(fā)中直接基于應(yīng)用論域的開發(fā)活動,并且都要完成程度不同的論域建模任務(wù)。但是論域分析必須具有比需求分析更為廣闊的視角:不僅要服務(wù)于當前的應(yīng)用,而且要從論域的歷史項目中發(fā)現(xiàn)這些項目之間的共同點和差異點,并放眼于同類或相似應(yīng)用論域的未來軟件項目。論域工程 結(jié)構(gòu)模型論域模型可復(fù)用構(gòu)件庫論域分析軟件體系結(jié)構(gòu)開發(fā)可復(fù)用軟件 構(gòu)件開發(fā)應(yīng)用軟件構(gòu)件合成構(gòu)件適應(yīng)體系結(jié)構(gòu) 設(shè)計分 析基于構(gòu)件的 應(yīng)用開發(fā)構(gòu)件更新構(gòu)件工程測 試構(gòu)件資格圖 8.2 針對復(fù)用的過程模型論域分析的過程如下: 定義將要研究的論域; 分類從論域中抽取出來的項; 收集論域中應(yīng)用的有代表性的樣本; 分析樣本中的每一個應(yīng)用; 開發(fā)對象的分析模型。應(yīng)當注意的是,論域分析適合于任何一種軟件工程范型。Prieto-Diaz擴展了上面論域分析的第2個步驟,建議了一個有8個步驟的標識和分類可復(fù)用軟件構(gòu)件的方法: 選擇特定的功能或?qū)ο螅?抽象功能或?qū)ο螅?定義分類方法; 標識公共特征; 標識特定的關(guān)系; 抽象關(guān)系; 導(dǎo)出功能模型; 定義論域語言。論域語言提供了在論域中進行應(yīng)用的規(guī)格說明和構(gòu)造的手段。下面給出一個檢查表,以確定哪些軟件要素可以成為可復(fù)用的構(gòu)件。 構(gòu)件的功能在未來的實現(xiàn)工作中需要嗎? 在論域中構(gòu)件功能的公共性如何? 在論域中存在構(gòu)件功能的副本嗎? 構(gòu)件是否依賴于硬件? 在不同的實現(xiàn)之間硬件是否保持不變? 硬件細節(jié)能否移到另一個構(gòu)件中嗎? 設(shè)計為下一步的實現(xiàn)進行過足夠的優(yōu)化嗎? 我們能夠把一個不可復(fù)用的構(gòu)件參數(shù)化以使其成為可復(fù)用的構(gòu)件嗎? 構(gòu)件是否可以僅僅經(jīng)過少量修改就能夠在很多實現(xiàn)中復(fù)用嗎? 通過修改實現(xiàn)復(fù)用是可行的嗎? 一個不可復(fù)用的構(gòu)件能否通過分解以產(chǎn)生一組可復(fù)用的構(gòu)件嗎? 針對復(fù)用的構(gòu)件分解有效到什么程度? 論域特征有時很難確定一個潛在可復(fù)用的軟件構(gòu)件在某種特定的情況下是否確實可以使用。為了解決這個難題,有必要定義一組可以為論域中所有軟件共享的論域特征。論域特征定義了存在于論域中的所有產(chǎn)品的類屬屬性。例如,類屬屬性可能包括有:安全性可靠性的重要性、程序設(shè)計語言、處理中的并發(fā)性,以及其它許多內(nèi)容。若設(shè)某一可復(fù)用軟件構(gòu)件p的論域特征的集合為 Dp,集合中每一項Dpi表示某一特定的論域特征。賦予Dpi的值表示該論域特征對軟件的相關(guān)程度,共分為5個等級: 與新軟件是否可復(fù)用沒有相關(guān)性。 僅在不尋常的情況下相關(guān)。 相關(guān)。此時可以修改軟件構(gòu)件以使其可以被復(fù)用。 顯著相關(guān),且若新軟件不具有此特征則復(fù)用是低效的。但復(fù)用仍有可能。 顯著相關(guān),且若新軟件不具有此特征則復(fù)用是無效的。此時不推薦復(fù)用。如果想要在某應(yīng)用論域中構(gòu)造一個新軟件w,可為它導(dǎo)出一組論域特征,然后在Dwi與Dpi之間進行比較,以決定既存的軟件構(gòu)件p是否可以有效地在應(yīng)用w中復(fù)用。表8.2列出典型的對軟件復(fù)用可能有影響的論域特征,為了有效地復(fù)用軟件構(gòu)件,必須考慮這些論域特征。表8.2 影響復(fù)用的論域特征產(chǎn) 品過 程人 員 需求穩(wěn)定性 過程模型 動機 并發(fā)軟件 過程符合性 教育 內(nèi)存限制 項目環(huán)境 經(jīng)驗培訓(xùn) 應(yīng)用大小 進度限制 應(yīng)用論域 用戶界面復(fù)雜性 預(yù)算限制 過程 程序設(shè)計語言 生產(chǎn)效率 平臺 安全性可靠性 語言 壽命需求 開發(fā)隊伍 產(chǎn)品質(zhì)量 生產(chǎn)效率 產(chǎn)品可靠性 結(jié)構(gòu)建模和結(jié)構(gòu)點結(jié)構(gòu)建模是一種基于模式的論域工程方法。使用該方法的前提是:每個應(yīng)用論域有可在應(yīng)用間重復(fù)的模式(功能的、數(shù)據(jù)的、行為的),它們具有復(fù)用的可能。那么,什么是結(jié)構(gòu)建模呢?Pollak和Rissman這樣描述:結(jié)構(gòu)模型由數(shù)量不多的一些結(jié)構(gòu)元素構(gòu)成,用這些結(jié)構(gòu)元素可明確地表示交互的模式。使用結(jié)構(gòu)模型的系統(tǒng)體系結(jié)構(gòu)可以通過由這些模型元素組成的多聲部合唱來特征化。這樣,許多體系結(jié)構(gòu)單元都可以通過這些元素中的一些簡單的交互模式來描述。每一個應(yīng)用論域都可以一個結(jié)構(gòu)模型來特征化。如飛行器電子設(shè)備系統(tǒng)雖然在細節(jié)上有很大的不同,但在這個論域中的所有的現(xiàn)行軟件都有相同的結(jié)構(gòu)模型。因此,結(jié)構(gòu)模型是一種能夠而且也應(yīng)該跨越該論域所有應(yīng)用的可復(fù)用的體系結(jié)構(gòu)要素。結(jié)構(gòu)點是結(jié)構(gòu)模型中的各個不同的構(gòu)成成分,用于描述系統(tǒng)體系結(jié)構(gòu)中的模式。它有3個特征: 結(jié)構(gòu)點是一個抽象,它應(yīng)當有有限數(shù)量的實例。若用面向?qū)ο蟮男g(shù)語來陳述,它的類層次的規(guī)模應(yīng)比較小。此外,該抽象應(yīng)當在論域的各個應(yīng)用中重復(fù)出現(xiàn),否則,驗證、文檔化和傳播結(jié)構(gòu)點的代價可能是不劃算的。 使用結(jié)構(gòu)點的管理規(guī)則應(yīng)是容易理解的,使用結(jié)構(gòu)點的界面應(yīng)比較簡單。 結(jié)構(gòu)點的實現(xiàn)應(yīng)做到信息隱蔽,將所有在結(jié)構(gòu)點內(nèi)部包含的復(fù)雜性封裝(或隔離)在結(jié)構(gòu)點內(nèi)部。這樣,可以減少整個系統(tǒng)的感知復(fù)雜性。4. 可復(fù)用構(gòu)件的構(gòu)造原則和質(zhì)量標準 論域分析的結(jié)果為可復(fù)用構(gòu)件的選取提供了指導(dǎo)原則。一旦確定了某些軟件元素應(yīng)當稱為可復(fù)用構(gòu)件并要加入到可復(fù)用構(gòu)件庫中,軟件人員就必須實際構(gòu)造它們。由于軟件構(gòu)件的生存期將跨越開發(fā)項目,甚至應(yīng)用論域,因此,可復(fù)用構(gòu)件必須更為通用、更容易組裝到新的軟件系統(tǒng)中、再新的運行環(huán)境下能表現(xiàn)出更好的健壯性。代碼極復(fù)用時最簡單,也是用得最多的。但可復(fù)用軟件構(gòu)件不僅包括代碼級構(gòu)件,它還應(yīng)涵蓋論域知識、需求分析文檔、設(shè)計文檔、測試方案、測試用例等。(1) 需求和設(shè)計級的軟件構(gòu)件需求級軟件構(gòu)件通常包括問題(及子問題)描述、有關(guān)的論域知識、相應(yīng)的需求規(guī)格說明。問題描述及論域知識均使用論域語言,必要時可輔以結(jié)構(gòu)化的自然語言。類似地,設(shè)計級軟件構(gòu)件包括設(shè)計規(guī)格說明(片段)、設(shè)計決策描述、相應(yīng)的設(shè)計文檔(如總體設(shè)計方案、抽象算法)。這時,若能將需求級的軟件構(gòu)件和設(shè)計級的軟件構(gòu)件相結(jié)合,使需求級軟件構(gòu)件和設(shè)計級軟件構(gòu)件的復(fù)用同時發(fā)生,就能夠簡化對這些軟件構(gòu)件的理解和組裝過程。需求級和設(shè)計級軟件構(gòu)件的開發(fā)必須遵循以下兩條原則: 將構(gòu)件應(yīng)用的上下文與構(gòu)件嚴格分離; 利用抽象化、參數(shù)化等手段提取公共特征,增強構(gòu)件對未來不同應(yīng)用項目的適應(yīng)能力。需求級、設(shè)計級與代碼級軟件構(gòu)件相結(jié)合,有助于代碼級軟件構(gòu)件的提取和理解。借助較高抽象級別的軟件構(gòu)件可望提高復(fù)用的效能,因為這樣不僅能夠復(fù)用代碼,而且能夠復(fù)用需求模型和設(shè)計方案。(2) 代碼級的軟件構(gòu)件代碼級復(fù)用是迄今為止研究最深入、應(yīng)用最廣泛的復(fù)用技術(shù)。代碼級軟件構(gòu)件不僅應(yīng)包含通常的程序代碼段,還應(yīng)輔以相應(yīng)的注釋和上下文說明。這些輔助可以用結(jié)構(gòu)化語言或其它標識機制描述,但最好以相應(yīng)的需求級或設(shè)計級軟件構(gòu)件的形式出現(xiàn)。傳統(tǒng)上,代碼級軟件構(gòu)件的主體是子程序(過程或函數(shù))。現(xiàn)在,在基于對象和面向?qū)ο蟪绦蛟O(shè)計語言及相應(yīng)的開發(fā)環(huán)境下,軟件構(gòu)件可以用Ada程序包或C+類來實現(xiàn)。開發(fā)代碼級軟件構(gòu)件與通常的程序設(shè)計活動不同,其主要區(qū)別在于:軟件人員必須運用各種抽象化手段,以發(fā)掘公共特征,分離構(gòu)件的應(yīng)用上下文、功能和行為,從而提高可復(fù)用性。典型的抽象方法有如下3種。 功能抽象:軟件構(gòu)件的功能由接口說明中的輸入關(guān)系確定,實現(xiàn)細節(jié)對構(gòu)件的使用者隱藏起來; 數(shù)據(jù)抽象:在功能抽象的基礎(chǔ)上進一步隱藏除接口參數(shù)外的所有數(shù)據(jù)。構(gòu)件的功能或行為由輸入?yún)?shù)和構(gòu)件自身記憶的內(nèi)部狀態(tài)決定。構(gòu)件的內(nèi)部狀態(tài)可由構(gòu)件的內(nèi)部操作來更新。面向?qū)ο蟪绦蛟O(shè)計語言中的“類”是一種典型的基于數(shù)據(jù)抽象的軟件構(gòu)件。 過程抽象:在數(shù)據(jù)抽象的基礎(chǔ)上進一步實現(xiàn)在同一軟件構(gòu)件上并發(fā)執(zhí)行的多個線程的無關(guān)性。軟件構(gòu)件提供端口,以便為多個用戶同時訪問軟件構(gòu)件中的資源進行同步控制。訪問請求首先進入等待隊列,軟件構(gòu)件就緒后,從隊列中取出請求逐個執(zhí)行。使用構(gòu)件的多個線程之間通過全局共享數(shù)據(jù)或消息傳遞進行信息交換。軟件構(gòu)件的設(shè)計必須保證構(gòu)件接口元素的功能和行為在語義上的正確性,不管各線程操作序列之間的相對時序如何變化。(3) 程序設(shè)計的主要原則可復(fù)用性、可理解性、正確性和易組裝性是衡量軟件構(gòu)件質(zhì)量的重要標準。這些標準都與構(gòu)件開發(fā)過程中的程序設(shè)計風(fēng)格密切相關(guān)。對于代碼級軟件構(gòu)件的開發(fā)者,必須注意遵循以下的程序設(shè)計原則。 可復(fù)用性與易組裝性 抽象化、參數(shù)化、模板化; 顯式建立構(gòu)件的外部接口,保證接口在語法上和語義上的清晰性; 除參數(shù)外,接口中的成分不應(yīng)與運行環(huán)境相關(guān); 使用構(gòu)件的信息應(yīng)與構(gòu)件的實現(xiàn)細節(jié)相分離; 構(gòu)件接口的使用方式、功能和行為模式應(yīng)遵循論域分析所確立的公共標準。 正確性 使用顯式的、標準的、完備的出錯處理機制; 使用強類型的程序設(shè)計; 在構(gòu)件上附加重要的測試數(shù)據(jù)和測試報告。 可理解性 提供完全的、精確的文檔和程序注解; 構(gòu)件內(nèi)部的結(jié)構(gòu)、數(shù)據(jù)和控制流程必須標準化; 使用統(tǒng)一的命名規(guī)則和語法約定。(4) 軟件構(gòu)件的質(zhì)量保證由于軟件構(gòu)件將在多種硬件和軟件環(huán)境下運行,因此,除采用軟件工程的一般的質(zhì)量保證措施之外,還要針對可復(fù)用構(gòu)件的特征進行特別的質(zhì)量保證。 構(gòu)件的開發(fā)者應(yīng)當利用現(xiàn)有的硬件、軟件,在盡可能多的環(huán)境中進行各種標準測試。但是。由于條件的限制及未來運行環(huán)境的不可窮舉性,這種方法對于構(gòu)件的質(zhì)量保證并不充分,必須與其它方法配合使用。 在構(gòu)件的設(shè)計過程中必須預(yù)先考慮構(gòu)件對于各類可能的硬件環(huán)境的可移植性和對于不同軟件環(huán)境的適應(yīng)能力。根據(jù)設(shè)計制定相應(yīng)的編程原則,并在編程的過程中貫徹始終。 應(yīng)當盡可能將構(gòu)件的與環(huán)境有關(guān)的因素抽象成為構(gòu)件的參數(shù),或者可將這些因素作為使用構(gòu)件的約束條件在接口說明中詳細闡述,甚至可以將這些約束條件標識成精確的邏輯斷言插裝到構(gòu)件的源程序中。 對可能引發(fā)移植性錯誤和適應(yīng)性錯誤的出錯源進行分類,針對每一類出錯源制定相應(yīng)的防范和測試措施。移植性錯誤包括數(shù)值計算錯誤、多任務(wù)調(diào)度錯誤、內(nèi)存使用錯誤等;適應(yīng)性錯誤包括并發(fā)性錯誤、重名錯誤、表達式求值順序錯誤等。針對每一類出錯源制定相應(yīng)的防范和測試措施與硬件、軟件環(huán)境密切相關(guān)。 制訂并執(zhí)行統(tǒng)一的、良好的程序設(shè)計風(fēng)格。這對于確保構(gòu)件質(zhì)量,提高可復(fù)用性、可理解性和易組裝性有重要的意義。 成立構(gòu)件質(zhì)量保證小組。其主要任務(wù)是:制訂構(gòu)件合格的標準和構(gòu)件質(zhì)量保證計劃,對構(gòu)件開發(fā)過程進行監(jiān)控,保證上述措施的落實。5. 可復(fù)用構(gòu)件庫的組織需要對收集和開發(fā)的軟件構(gòu)件進行分類,然后把它們放入到可復(fù)用構(gòu)件庫的適當為止。軟件構(gòu)件的分類方法和相應(yīng)的構(gòu)件庫結(jié)構(gòu)對構(gòu)件的檢索和理解有極為深刻的影響,就是說,可復(fù)用構(gòu)件庫的組織應(yīng)當便于構(gòu)件的存儲和檢索。復(fù)用技術(shù)對可復(fù)用構(gòu)件庫組織方法的要求是: 支持構(gòu)件庫的各種維護操作。增、刪、更新構(gòu)件庫應(yīng)當盡量不影響構(gòu)件庫的結(jié)構(gòu); 不僅能夠支持精確匹配,還應(yīng)能支持相似構(gòu)件的查找; 不僅能夠進行簡單的語法匹配,而且能夠查找在功能和行為上等價或相似的構(gòu)件; 對應(yīng)用論域(族)有較強的描述能力和較好的描述精確度; 便于庫管理員和用戶使用; 具備可自動化的潛力。(1) 枚舉分類此方法通過定義一個層次結(jié)構(gòu)類描述構(gòu)件。在這個層次中定義軟件構(gòu)件的類以及不同層次的子類。真實的構(gòu)件都被羅列在枚舉層次中任一路徑的最低層。例如,對窗口操作的枚舉層次可能是:window operationsdisplay openmenu-basedopenWindowsystem-basedsysWindowclosevia pointerresizevia commandsetWindowSize, stdResize, shrinkWindowvia dragpullWindow, StretchWindowup/down shufflemove枚舉分類模式的層次結(jié)構(gòu)使得它易于理解和使用。但在建立層次之前,必須進行論域工程,這樣層次中各個項可以有充足的知識以供使用。(2) 關(guān)鍵詞分類此方法的基本思想是:根據(jù)論域分析的結(jié)果,將應(yīng)用論域(族)的概念按照從抽象到具體的順序,逐步分解樹形結(jié)構(gòu)或有向無回路圖結(jié)構(gòu)。每個概念用一個描述性的關(guān)鍵詞表示。不可再分解的原子層的包含隸屬于它的某些軟件構(gòu)件。圖8.3給出了可復(fù)用構(gòu)件庫的關(guān)鍵詞分類結(jié)構(gòu),它支持圖形用戶界面設(shè)計。當加入新的構(gòu)件時,庫管理員必須對構(gòu)件的功能或行為進行分析,在瀏覽上述關(guān)鍵詞分類結(jié)構(gòu)的同時,將構(gòu)件置于最合適的原子層關(guān)鍵詞之下。如果無法找到構(gòu)件應(yīng)從屬的關(guān)鍵詞,可以擴充現(xiàn)有的關(guān)鍵詞分類結(jié)構(gòu),引進新的關(guān)鍵詞。但庫管理員必須保證新關(guān)鍵詞有相應(yīng)的論域分析的結(jié)果作為支持。對話框事件處理用戶界面菜單窗口拖放處理信息對話框圖形窗口文本窗口鍵盤事件處理數(shù)據(jù)錄入對話框圖8.3 關(guān)鍵詞分類結(jié)構(gòu)示例(3) 多面分類此方法由3部分構(gòu)成:多面分類機制、同義詞庫和概念距離圖。 多面分類機制:分析論域范圍并定義若干用于描述一個構(gòu)件特征的“面”,每個“面”包含若干“概念”,它們表述構(gòu)件在“面”上的基本特征。這些特征根據(jù)它們的重要性排隊?!懊妗笨梢悦枋鰳?gòu)件執(zhí)行的功能、被操作的數(shù)據(jù)、構(gòu)件應(yīng)用的上下文以及任何其它特征。描述某一構(gòu)件的“面”的集合稱為面描述子。通常,限制面的描述不超過7到8個面。作為一個簡單的在構(gòu)件分類中使用“面”的例子,面描述子的模式可以是: 功能,對象類型,系統(tǒng)類型 面描述子中每一個“面”可含有1個或多個特征值,這些值一般是描述性的關(guān)鍵詞。例如,若功能(function)是某一構(gòu)件的一個面,賦與此面的典型值可能是:function = ( copy, from ) or ( copy, replace, all )使用多重面特征值可使原始的函數(shù)copy充分地細化。 同義詞庫:意義相同或相近的若干詞匯組成同義詞庫。所有詞匯按照隸屬于“面”的“概念”分組,在任一時刻點,每個“概念”可用組內(nèi)的某一同義詞匯作為標識載體。面同義詞庫F1 F2 FNT11 T21 TN1T12 T22 TN2T13 T23 TN3 T1J T2J TNJdc = ( T1A, T2B, , TNJ )構(gòu)件面描述子同義詞概念距離圖T11 S111, S112, , S11kT12 S121, S122, , S12mT13 S131, S132, , S13n 概念距離圖:用于度量每個“面”中“概念”的相似性程度。屬于每個“面”的一般化概念與其中的兩個或多個“概念”以加權(quán)邊相連接,兩個“概念”的相似性由它們之間的最短加權(quán)路徑上的加權(quán)距離確定,附加于邊上的權(quán)值體現(xiàn)了“概念”之間的差異程度。概念llo T11 o T12 o T13 o T1M 一般化概念 F2F1多面分類機制C圖8.4 多面分類法的組成采用多面分類法進行可復(fù)用構(gòu)件庫的組織,必須在存儲軟件構(gòu)件的同時,表示并存儲多面分類機制、同義詞庫和概念距離圖。例如,可以采用關(guān)系數(shù)據(jù)庫中的表格來描述它們。多面分類法的所有語法構(gòu)件(“面”、“概念”、同義詞、一般化概念、差異性權(quán)值)均取材于論域分析的結(jié)果。當需要在可復(fù)用構(gòu)件庫中加入新的構(gòu)件時,庫管理源必須對構(gòu)件的功能、行為進行深入分析,利用現(xiàn)有的多面分類結(jié)構(gòu)確定構(gòu)件的描述子,對每個“面”選取合適的“概念”作為特征描述。必要時可以考慮增加新的“概念”,此時必須根據(jù)新“概念”完善同義詞庫和概念距離圖。(4) 超文本組織法圖8.5 超文本結(jié)構(gòu)示意圖 l l l l l l l l l l 超文本方法與基于數(shù)據(jù)庫系統(tǒng)的可復(fù)用構(gòu)件庫組織方法不同,它基于全文檢索技術(shù),其基本思想是:所有軟件構(gòu)件都必須輔以詳細的功能或行為說明文檔,說明中出現(xiàn)的概念和軟件構(gòu)件以網(wǎng)狀鏈接方式互相連接。檢索者在閱讀文檔的過程中可按照人類的聯(lián)想思維方式任意跳轉(zhuǎn)到包含相關(guān)概念或軟件構(gòu)件的文檔中去。全文檢索系統(tǒng)將用戶給出的關(guān)鍵詞與說明文檔中的文字進行匹配,實現(xiàn)軟件構(gòu)件的瀏覽式檢索。超文本是一種非線性的網(wǎng)狀信息組織方法,它以結(jié)點為基本單位,鏈作為結(jié)點之間的聯(lián)想式關(guān)聯(lián),如圖8.5所示。一般地,結(jié)點是一個信息塊。對于可復(fù)用構(gòu)件庫而言,結(jié)點可以是論域的概念、功能或行為名稱、構(gòu)件名稱等,在圖形用戶界面上,結(jié)點可以是字符串,也可以是圖像、聲音、動畫等。超文本組織方式為構(gòu)造可復(fù)用構(gòu)件提供了友好、直觀的多媒體方式。由于網(wǎng)狀結(jié)構(gòu)比較自由、松散,因此,超文本方法更容易修改可復(fù)用構(gòu)件庫的結(jié)構(gòu)。Windows環(huán)境下的聯(lián)機幫助系統(tǒng)就是一種典型的超文本系統(tǒng)。為了構(gòu)造可復(fù)用構(gòu)件庫的文檔,首先要根據(jù)論域分析的結(jié)果,在說明文檔中標識超文本結(jié)點,并在相關(guān)文檔中建立鏈接關(guān)系。然后用類似于聯(lián)機幫助系統(tǒng)編譯器的工具對構(gòu)件的說明文檔進行編譯,最后用相應(yīng)的工具運行編譯后的目標程序代碼即可。(5) 可復(fù)用構(gòu)件的3C模型可以有很多方法來描述可復(fù)用的構(gòu)件,其中最理想的是由Tracz提出的3C模型:概念(Concept)、內(nèi)容(Content)和上下文(Context)。 概念:描述軟件構(gòu)件做什么。為此,需要完全地描述構(gòu)件的接口和表示語義(表示在前置條件和后置條件的上下文中)。概念將傳達構(gòu)件的意圖。 內(nèi)容:描述軟件構(gòu)件的概念如何實現(xiàn)。一般來講,內(nèi)容是對外來用戶隱蔽的信息,是只有試圖修改或測試該構(gòu)件的人才需要了解的信息。 上下文:將可復(fù)用的構(gòu)件安置到它的應(yīng)用論域中。就是說,上下文將通過定義概念的、操作的和實現(xiàn)的特征,使軟件人員能夠找到合適的構(gòu)件以滿足應(yīng)用的需求。為了在實際背景下使用,必須把概念、內(nèi)容和上下文轉(zhuǎn)換成具體的規(guī)格說明模式。關(guān)于可復(fù)用構(gòu)件的分類模式,已有不少文章討論過。所有的方法大致歸為3個主要的方面:圖書館和信息科學(xué)方法、人工智能方法和超文本系統(tǒng)。目前,絕大多數(shù)研究都建議使用圖書館科學(xué)方法為軟件構(gòu)件進行分類。圖8.6給出了一個使用圖書館科學(xué)索引法的分類法。“受控的索引詞匯表”限制了所有可用于分類對象(或構(gòu)件)的術(shù)語或語法?!安皇芸氐乃饕~匯表”則對描述的自然狀態(tài)不加限制。軟件構(gòu)件的分類模式主要有如下3類:索引詞匯表不受控的索引詞匯表受控的索引詞匯表分類關(guān)鍵詞抽取術(shù)語的 表單文本不抽取術(shù)語的 表單文本描述符枚舉具有語法多面主題頭部不具有語法詞典圖8.6 源于圖書館索引方法的分類法 6. 分層式體系結(jié)構(gòu)所謂分層式體系結(jié)構(gòu),是按層次組織軟件的一種軟件體系結(jié)構(gòu),其中每一層軟件建立在低一層的軟件層上。位于同一層的軟件系統(tǒng)或子系統(tǒng)具有同等的通用性,在下一層的軟件比在上一層的軟件通用性更強。一個層次可視為同等通用檔次的一組(子)系統(tǒng)。因此,在分層的體系結(jié)構(gòu)中,最高層是應(yīng)用層,可包容許多應(yīng)用系統(tǒng)。次高層是構(gòu)件層,可包括多個可復(fù)用構(gòu)件庫系統(tǒng),可用于建立應(yīng)用系統(tǒng)。應(yīng)用系統(tǒng)建立在構(gòu)件層之上,而此構(gòu)件層中的許多構(gòu)件庫系統(tǒng)又是建立在更低層次的構(gòu)件庫系統(tǒng)之上。軟件的組織方式通常是指軟件的靜態(tài)分層結(jié)構(gòu),就像在編譯連接時軟件各個模塊之間的分層依賴關(guān)系那樣,是一種靜態(tài)的關(guān)系,而不是指軟件在運行時的組織和動態(tài)結(jié)構(gòu)。一個系統(tǒng)的動態(tài)特征時由使用事例、協(xié)作、過程和結(jié)點模型來定義的。這些動態(tài)模型需要與軟件的靜態(tài)分層組織聯(lián)合起來使用。即使按照上述的原則,人們?nèi)匀欢x出多種形式的分層式體系結(jié)構(gòu)。層次的數(shù)目、層次的名稱、層次的內(nèi)容可隨情況而定。圖8.7給出一種典型的4層次體系結(jié)構(gòu)。圖8.7 一種4層次的分層式體系結(jié)構(gòu)各個應(yīng)用的各種變體各個應(yīng)用系統(tǒng)應(yīng)用軟件層各個構(gòu)件庫系統(tǒng) (針對特定論域、 特定業(yè)務(wù))特定業(yè)務(wù)層不依賴平臺的低層構(gòu)件等中間件層特定的平臺軟件:操作系統(tǒng)等系統(tǒng)軟件層最頂層(即最高層)是應(yīng)用系統(tǒng)層,此層包含多個應(yīng)用系統(tǒng),每個應(yīng)用系統(tǒng)向系統(tǒng)的用戶提供一組使用事例。有的應(yīng)用系統(tǒng)還可具有不同的版本或若干變體。應(yīng)用系統(tǒng)可以通過其接口與其它系統(tǒng)操作,還可以通過低層軟件提供的服務(wù)或?qū)ο?如操作系統(tǒng)、特定業(yè)務(wù)服務(wù))間接地與其它系統(tǒng)交互操作。 次頂層(即次高層)是“特定業(yè)務(wù)”層。此層應(yīng)當包括專門針對不同業(yè)務(wù)類型的一系列構(gòu)件庫系統(tǒng)。這樣的構(gòu)件庫系統(tǒng)向用戶提供可復(fù)用的使用事例和對象構(gòu)件,用于開發(fā)應(yīng)用系統(tǒng),支持復(fù)用業(yè)務(wù)。特定業(yè)務(wù)層的軟件建立在中間件之上。中間件層位于次高層下面,它為次頂層的各個構(gòu)件庫系統(tǒng)提供實用軟件類,以及不依賴于平臺的服務(wù)。例如,在異種機型環(huán)境下的分布式對象計算等等。此層經(jīng)常包括:圖形用戶界面構(gòu)筑者使用的構(gòu)件庫系統(tǒng)、與數(shù)據(jù)庫管理系統(tǒng)(DBMS)的接口、不依賴平臺的操作系統(tǒng)服務(wù)、對象請求代理(ORBs)、對象鏈接和嵌入OLE構(gòu)件,如電子表格和框圖編輯器。這些軟件主要提供給應(yīng)用軟件和構(gòu)件開發(fā)人員使用,使得他們能夠?qū)W⒂跇I(yè)務(wù)構(gòu)件和應(yīng)用系統(tǒng)的構(gòu)筑。最低層是系統(tǒng)軟件層,此層包括計算和網(wǎng)絡(luò)等基礎(chǔ)設(shè)施軟件,如操作系統(tǒng)、專用的硬件接口軟件等。目前出現(xiàn)了一些專用操作系統(tǒng),其本身就提供了不依賴于平臺的服務(wù),因此,在依稀結(jié)構(gòu)的第三層和第四層之間,有時界限會變得模糊不清。例如Java就是這種情況。它是一種語言,故它應(yīng)該位于系統(tǒng)軟件層。但還可以把Java看作是組織分布對象的一個重要部分,通過Java可將對象移到不同的機器上,從而改變客戶機服務(wù)器系統(tǒng)的應(yīng)用劃分。從另一個角度來看,Java的一個重要部分又屬于中間件層,至少位于中間件層的許多軟件都是用Java語言編寫的。為了確保分層式系統(tǒng)可管理,規(guī)定在一個系統(tǒng)內(nèi),不能從低層復(fù)用高層的構(gòu)件。一個分層式系統(tǒng)有兩維:水平方向是在同層次內(nèi)的相互引用的多個系統(tǒng),垂直方向表達了跨層次的靜態(tài)的依賴關(guān)系。7. 軟件構(gòu)件的復(fù)用(1) 檢索與提取構(gòu)件可復(fù)用構(gòu)件庫的檢索方法與庫的組織方式密切相關(guān)。 基于關(guān)鍵詞的檢索這種檢索方法的基本思想是:系統(tǒng)(CASE工具)在圖形用戶界面上將可復(fù)用構(gòu)件庫的關(guān)鍵詞樹直觀地展示給用戶,用戶通過在樹上的逐級瀏覽尋找需要的關(guān)鍵詞并提取相應(yīng)的構(gòu)件。當然,用戶也可以直接給出關(guān)鍵詞(其中可含有通配符),由系統(tǒng)自動地給出合適的候選構(gòu)件清單。這種方法的優(yōu)點是簡單,易于實現(xiàn)。 多面檢索這種檢索方法基于多面分類法。步驟如下: 構(gòu)造查詢:用戶提供待查構(gòu)件在每個“面”上的特征,生成構(gòu)件描述子。此時,用戶可以從可復(fù)用構(gòu)件庫已有的“概念”中挑選,也可以將某些特征值置為空。系統(tǒng)在庫中檢索時將忽略特征值為空的“面”。在構(gòu)造查詢的過程中,可以利用同義詞庫和概念距離圖來幫助用戶正確選擇特征值。 檢索構(gòu)件:實現(xiàn)多面分類法的CASE工具利用同義詞庫和概念距離圖,在可復(fù)用構(gòu)件庫中尋找相同的或相近的構(gòu)件描述子及相應(yīng)的構(gòu)件。 對構(gòu)件進行排序:按照相似程度對被檢索出來的構(gòu)件進行排序,還可以按照與復(fù)用有關(guān)的度量信息(如構(gòu)件的復(fù)雜性、可復(fù)用性、成功復(fù)用的次數(shù)等)進行排序。這種方法的優(yōu)點是易于實現(xiàn)相似構(gòu)件的查找。 超文本檢索這種檢索方法的步驟是:用戶首先給出一個或若干個關(guān)鍵詞,系統(tǒng)在構(gòu)件的說明文檔中做精確的或模糊的語法匹配。匹配成功后,向用戶提供相應(yīng)的構(gòu)件說明。這些構(gòu)件說明是含有許多超文本結(jié)點的正文。用戶在閱讀這些正文時可實現(xiàn)多個構(gòu)件說明文檔之間的自由跳轉(zhuǎn),最終選擇合適的構(gòu)件。為了避免用戶在跳轉(zhuǎn)過程中迷失方向,系統(tǒng)可以通過圖形用戶界面顯示瀏覽歷史圖,允許將特定畫面定義為有名“書簽”并可隨時跳轉(zhuǎn)到“書簽”。此外,還可以幫助用戶逆著跳轉(zhuǎn)路徑逐步返回。這種方法的優(yōu)點是用戶界面友好。 其它檢索方法上述檢索方法都是基于語法匹配,要求用戶對可復(fù)用構(gòu)件庫中的出現(xiàn)的眾多詞匯有較全面的把握,較精確的理解。理論上,理想的檢索方法是語義匹配:可復(fù)用構(gòu)件庫的用戶以形式化的手段描述所需要的構(gòu)件的功能或行為的語義,系統(tǒng)通過定理證明或基于知識的推理過程尋找語義上等價的或相近的構(gòu)件。(2) 理解與評價構(gòu)件準確地理解構(gòu)件,對于正確地使用和修改構(gòu)件,都是至關(guān)重要的??紤]到設(shè)計信息對于理解構(gòu)件的必要性和構(gòu)件庫的用戶逆向發(fā)掘設(shè)計信息的困難性,要求構(gòu)件的開發(fā)過程必須遵循公共的軟件工程規(guī)范,并在構(gòu)件庫的說明文檔中全面、準確地說明下列內(nèi)容: 構(gòu)件的功能和行為; 相關(guān)的論域知識; 可適應(yīng)性約束條件和例外情況; 可以預(yù)見的修改部分和修改方法。但是,如果軟件人員希望復(fù)用那些原先并非為復(fù)用而設(shè)計的構(gòu)件,上述要求不能滿足。此時軟件人員必須借助CASE工具對待選構(gòu)件進行分析。這種CASE工具對構(gòu)件(包括相應(yīng)的文檔)進行掃描,將各類信息存入某種瀏覽數(shù)據(jù)庫,然后回答構(gòu)件用戶的各種查詢,進而幫助理解。例如,對于以C或C+ 源程序形式出現(xiàn)的構(gòu)件,用戶可借助于CASE工具查詢標識符(包括變量、常量、宏、函數(shù)等)的定義和引用。如果源程序中以結(jié)構(gòu)化注解的形式給出函數(shù)的前置條件、后置斷言、約束與例外情形、算法描述,用戶也可以實現(xiàn)對這些信息的直觀瀏覽。逆向工程是理解構(gòu)件的另一種重要手段。通過對構(gòu)件進行分析,結(jié)合論域知識,半自動地生成構(gòu)件的設(shè)計信息,然后借助設(shè)計信息完成對構(gòu)件的理解和修改。對軟件構(gòu)件的可復(fù)用性進行評價,主要通過收集和分析構(gòu)件的用戶在實際復(fù)用構(gòu)件的過程中所得到的各種反饋信息,按照某種論域模型來完成。這些反饋信息包括:復(fù)用成功的次數(shù)、對構(gòu)件的修改工作量、構(gòu)件的健壯性度量(如出錯數(shù)量)、性能度量(如執(zhí)行效率和資源消耗量)等。(3) 修改構(gòu)件理想的情況是對庫中的構(gòu)件不做修改就可以直接用于新的軟件項目。但是,在多數(shù)情況下,需要對構(gòu)件做或多或少的修改以適應(yīng)新的需求。為了減少修改的工作量,要求構(gòu)件的開發(fā)人員盡量使構(gòu)件的功能、行為、接口抽象化、通用化、參數(shù)化。這樣,構(gòu)件的用戶可以通過對實參的選擇來調(diào)整構(gòu)件的功能或行為。如果這種調(diào)整仍不能使構(gòu)件適應(yīng)新的軟件項目,用戶就必須借助設(shè)計信息和說明文檔來理解、修改構(gòu)件。因此,與構(gòu)件有關(guān)的說明文檔和抽象層次更高的設(shè)計信息對于構(gòu)件的修改至關(guān)重要。例如,如果需要將用C語言編寫的構(gòu)件(源程序代碼)改寫為其它語言的形式,構(gòu)件的算法描述就十分必要。有人在軟件復(fù)用領(lǐng)域中嘗試使構(gòu)件的修改自動化。例如,可以利用不同數(shù)據(jù)結(jié)構(gòu)(如鏈表和數(shù)組)之間的相似性自動修改構(gòu)件外部接口中的參數(shù)類型。但是,這種自動修改方式還遠遠不能取代人工修改方式。(4) 構(gòu)件的合成構(gòu)件合成是指將可復(fù)用構(gòu)件庫中的構(gòu)件(經(jīng)適當修改后)相互連接,或?qū)⑺鼈兣c當前軟件項目中的軟件元素相連接以構(gòu)成最終的目標系統(tǒng)。構(gòu)件合成技術(shù)大致可分為基于功能的、基于數(shù)據(jù)的和面向?qū)ο蟮暮铣杉夹g(shù)。下面簡單介紹前兩種。 基于功能的合成技術(shù)基于功能的合成技術(shù)采用子程序調(diào)用和參數(shù)傳遞的方式將構(gòu)件結(jié)合起來。它要求在庫中的構(gòu)件必須以標準子程序(標準過程或函數(shù))的形式出現(xiàn),并且接口說明必須準確、清楚。當使用這種合成技術(shù)進行軟件開發(fā)時,必須開發(fā)人員必須對目標軟件系統(tǒng)進行自頂向下的功能分解,將系統(tǒng)分解為高內(nèi)聚、低耦合的功能模塊,然后根據(jù)各模塊的功能需求提取構(gòu)件,對它們進行適應(yīng)性修改后,再納入到上述功能分解的層次框架中。 基于數(shù)據(jù)的合成技術(shù)基于數(shù)據(jù)的合成技術(shù)首先根據(jù)當前應(yīng)用問題的核心數(shù)據(jù)結(jié)構(gòu)設(shè)計出一個框架,然后根據(jù)框架中各結(jié)點的需求提取構(gòu)件并進行適應(yīng)性修改,再把它們逐個分配給框架中的適當位置。此后,構(gòu)件的合成方式仍然是傳統(tǒng)的子程序調(diào)用與參數(shù)傳遞。這種合成技術(shù)也要求庫中的構(gòu)件以子程序的形式出現(xiàn),但它所依賴的軟件設(shè)計方法不再是功能分解,而是面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計方法,如Jackson系統(tǒng)開發(fā)方法。8. 面向?qū)ο蟮能浖?fù)用技術(shù)由于封裝和繼承的特性,面向?qū)ο蠓椒ū绕渌浖_發(fā)方法更適合支持軟件復(fù)用。封裝意味著可以將表示構(gòu)件的類看作黑盒子。使用它們時,只需了解其外部接口,即了解它能夠響應(yīng)哪些消息,相應(yīng)的對象行為是什么。繼承是指在定義新的子類時可利用庫中已有的父類的屬性和操作。當然,子類也可以修改父類的屬性與操作,或者引進新的屬性與操作。理論上構(gòu)件的用戶不需要了解構(gòu)件的實現(xiàn)細節(jié)。(1) 類庫的構(gòu)造通常將面向?qū)ο蟮目蓮?fù)用構(gòu)件庫稱為可復(fù)用類庫(簡稱類庫),因為這時所有的構(gòu)件都是以類的形式出現(xiàn)??蓮?fù)用基類的建立取決于論域分析階段對當前應(yīng)用(族)中具有一般適用性的對象和類的標識。類庫的組織方式采用類的繼承層次結(jié)構(gòu)。這種結(jié)構(gòu)與現(xiàn)實問題空間的實體繼承關(guān)系有某種自然、直接的對應(yīng)。同時,類庫的文檔以超文本方式組織,每個類的說明文檔中都可以包含指向其它說明文檔的關(guān)鍵詞結(jié)點的鏈接指針。與圖形用戶界面有關(guān)的一種典型的類庫結(jié)構(gòu)如圖8.8所示。CWndCMenuViewsDialog BoxesCobjectFrame WindowsCViewCDialogCMDIFrameWndCCommonDialogCCrtViewCMiniFrameWndCMDIChildWndCPropertyPageCEditViewCFileDialogCListViewCColorDialogCTreeViewCFormViewCScrollView圖8.8 類庫結(jié)構(gòu)示例(2) 類庫的檢索一般而言,類庫的組織方式直接決定檢索方式。常用的類庫檢索方法是對類庫中類的繼承層次結(jié)構(gòu)進行樹形瀏覽,以及基于類庫文檔的超文本檢索。借助于樹形瀏覽工具,類庫的用戶可以從樹的根部(繼承層次的根類)出發(fā),根據(jù)對可復(fù)用基類的需求,逐層確定它所屬的語法和語義的范疇,然后確定最合適的基類。借助于類庫的超文本文檔,用戶一方面可以在類庫的繼承層次結(jié)構(gòu)中查閱各基類的屬性、操作和其它特征,另一方面可按照基類之間的語義關(guān)聯(lián)實現(xiàn)自由跳轉(zhuǎn)。需要強調(diào)的是:對類庫的檢索并不要求待實現(xiàn)的類與庫中的基類完全相同或極為相似,只是希望待實現(xiàn)的類與基類之間存在某種自然的繼承關(guān)系,或者基類能夠提供屬性或操作給待實現(xiàn)的子類選用。這與其它可復(fù)用構(gòu)件庫的檢索截然不同。(3) 類的合成如果從類庫中檢索出來的基類能夠完全滿足新軟件項目的需求,則可以直接復(fù)用。否則必須以類庫中的基類為父類,采用構(gòu)造法或子類法派生出子類。注意,面向?qū)ο蟮膹?fù)用技術(shù)通常不允許用戶修改庫中的基類,要想對類庫進行擴充或修改,應(yīng)當調(diào)整類庫的繼承結(jié)構(gòu)以把新的子類加入到適當?shù)奈恢谩?構(gòu)造法:為了在子類中使用庫中的基類的屬性和操作,可以考慮在子類中引進基類的實例作為作為子類的實例變量,然后在子類中通過實例變量來復(fù)用基類的屬性或操作。構(gòu)造法只用到面向?qū)ο蟮姆庋b特征。 子類法:與構(gòu)造法完全不同,子類法把新子類直接說明為庫中基類的子類。通過繼承和修改基類的屬性和操作來完成新子類的定義。子類法利用了面向?qū)ο蟮姆庋b和繼承的特性。9. 支持軟件復(fù)用的CASE工具能否在軟件開發(fā)過程中成功地使用復(fù)用技術(shù),直接取決于CASE 工具對軟件復(fù)用的支持程度。下面主要介紹復(fù)用技術(shù)的各個子任務(wù)對于CASE工具的大致需求。當然,這些CASE工具不是軟件復(fù)用的必要條件,但具備這些工具能提高復(fù)用的效能。(1) 論域分析表8.3 論域分析的關(guān)鍵子任務(wù)及其支持工具 關(guān) 鍵 子 任 務(wù) 支 持 工 具 知識獲取 專家系統(tǒng)建造工具 對象及其操作的標識 實體關(guān)系圖工具 抽象與關(guān)聯(lián) 面向?qū)ο蟮拈_發(fā)工具 對象分類 基于語義的自動分類工具 論域語言處理 語法分析工具(2) 構(gòu)件的開發(fā)表8.4 軟件構(gòu)件開發(fā)的關(guān)鍵子任務(wù)及其支持工具 關(guān) 鍵 子 任 務(wù) 支 持 工 具 提高構(gòu)件獨立性 依賴性分析工具(如交叉引用生成器),軟件結(jié)構(gòu)分析器(如調(diào)用關(guān)系生成器、繼承關(guān)系生成器) 參數(shù)化程序設(shè)計語言中的宏替換,編譯器中的預(yù)處理器,類屬機制(如Ada中的Generic) 抽象與特殊化面向?qū)ο笳Z言的繼承機制 構(gòu)件的擴充 (增加功能,擴大適用范圍)面向?qū)ο蟮恼Z言機制,支持同一軟件元素以多個版本不斷演化的配置管理工具 測試與認證測試覆蓋面分析工具 形式驗證定理證明工具 構(gòu)件質(zhì)量評估軟件質(zhì)量的度量與分析工具 構(gòu)件的分類語義近似性分析工具,基于規(guī)則的專家系統(tǒng)(3

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論