其中:C是非空集,如實(shí)數(shù)集;Sj是C元素之間的形式關(guān)系,如>、<、二等;Bk是C元素之間的二元形式操作。如+、一、*等。
4)評估度量準(zhǔn)則:度量準(zhǔn)則M是D到F的同構(gòu)映射,滿足:
;;
。
3.1.2測距理論(Theory of Distance Measurement)
經(jīng)過近年來的研究,人們已經(jīng)根據(jù)面向?qū)ο笙到y(tǒng)的特點(diǎn)提出了一系列面向?qū)ο蠖攘浚渲袃?nèi)聚性度量是軟件度量學(xué)中一個重要的研究領(lǐng)域。在多次軟件工程會議和一些軟件工程雜志上不斷有這方面的研究成果。
1)分組與相似性
“把相似的對象組成一類”是軟件工程中的主要原則之一。這種設(shè)計(jì)風(fēng)格對結(jié)構(gòu)化分析(如層次數(shù)據(jù)流圖)和面向?qū)ο笙到y(tǒng)開發(fā)都是非常有效的。使用此原則我們可以把復(fù)雜的系統(tǒng)分成若干個子系統(tǒng):一個包含若干子系統(tǒng)的復(fù)雜系統(tǒng)具有如下特征:以某種方式存在于子系統(tǒng)的“東西”存在共性(比如它們作用于相同的數(shù)據(jù))。
因?yàn)槊總問題域中的對象都應(yīng)該有一個在軟件系統(tǒng)中易定位的對象,所以把依賴分組的問題映射成計(jì)算機(jī)編程語言(如類或者包)能提高系統(tǒng)的可理解性。可見,在系統(tǒng)中良好選擇的分組是一個非常重要的質(zhì)量因素。
不同的標(biāo)準(zhǔn)有不同的分組,而且標(biāo)準(zhǔn)不存在“對”或者“錯”。他們的正確性依賴于特定目標(biāo)的可用性。比如說,基于功能的分組適用于修改系統(tǒng)中的工作流,而面向數(shù)據(jù)的分組適于于修改某些特殊的數(shù)據(jù)結(jié)構(gòu)。
分析既定系統(tǒng)應(yīng)將分組用作一個重要的因素。因而,精巧的分組使系統(tǒng)更容易分析。
分組操作與相似性/不相似性具有非常緊密的聯(lián)系:分組的重要特征之一是組內(nèi)所有的東西都相似,而組間所有的元素都不相似。為了能定量的分析事物的相似性,引入相似度是非常必要的。
2)相似度(Degree of Similarity)
定義1 相似度(Degree of Similarity) 若給實(shí)體的所有屬性賦予相同的權(quán)重,且B是屬性集{Pi}的有限子集,則兩個實(shí)體x,y間的相似度為:
其中 ……………………①
從定義中可知:
1)相似性很大程度上依賴于視點(diǎn)(Point of View):通過計(jì)算兩個不同屬性集的相似度可得到既定實(shí)體對從“相同”到“相對”的結(jié)果;
相似性不是自身的屬性:如果不論及既定屬性,相似性描述就無從談起;
相似性只存在于實(shí)體對,它不可歸屬于單個實(shí)體;
4)與“不相容”屬性集B相關(guān)的實(shí)體間相似性沒有被定義。如果實(shí)體對在集合B中都不存在屬性,則B是實(shí)體對的相似性不相容(Similarity Incompatible)。這個觀點(diǎn)只是在理論上成立,因?yàn)椴⒉淮嬖谙鄬Φ膶?shí)體。然而它對后面的提煉非常重要。
定義2集值距離函數(shù)(Set-valued Distance Function) 若{Pi}是所有屬性集,則:
………………………………………②
上述定義滿足:
1);
2);
3) 是對稱的;
4) 對稱或者布爾差分;
定義3 實(shí)值度量(Real-valued Metric) 若給所有的實(shí)體屬性賦予相同的權(quán)重,則:
…………………………………………③
度量公式③滿足:
1);
2);
3);
4)
實(shí)際上,度量公式③是不可行的,其原因是度量時會有太多的屬性。大多數(shù)情況下要設(shè)定一個特定視點(diǎn)下的屬性子集B。
定義4 相似性測量 若B是兩實(shí)體的屬性子集,則兩實(shí)體x,y間的相似性測量公式為:
…………………④
3)測距(Distance Measurement)
由公式④很容易得到測距的形式化定義:
定義2.5 測距
………………………………………………………………⑤
從測距定義可得如下結(jié)論:
1)測距越小,相似性越大;測距越大,相似性越小;
2)如果兩實(shí)體間的既定屬性集相等,那么測距為0;
3)兩實(shí)體的相似性不相容屬性集在測距中沒有被定義,原因是“不能用蘋果和梨相比較”,至于不相容屬性集在兩實(shí)體間的測距中將無從談起。
4)。
上面定義的測距同樣支持內(nèi)聚性度量,Bieman和Byung-Kyoo把內(nèi)聚性定義為:內(nèi)聚性是指模塊組件聚合的程度。在早期的內(nèi)聚性概念中,只是把內(nèi)聚性賦予單個的實(shí)體,而此測距的引入,我們可深入觀察單個實(shí)體,進(jìn)而尋找引起內(nèi)聚性的所有“吸力”(Attraction)。
在這里可我們可以用前一節(jié)中定義的度量的數(shù)學(xué)理論把測距描述成:
1)要計(jì)算實(shí)體間的距離必須簡化既定屬性,并抽象成實(shí)體模型(Entity Model)。實(shí)體模型的視點(diǎn)必須通過描述實(shí)體的所有屬性的子集B被清晰地說明(比如一個函數(shù)只有唯一的屬性“使用了同類中的值域x”,但是不函數(shù)不長也不復(fù)雜)。屬性在這種場景下二進(jìn)制的,即實(shí)體有或者沒有屬性;
2)經(jīng)驗(yàn)關(guān)系系統(tǒng)(Empirical Relation System, ERS)包含實(shí)體模型對,這些實(shí)體模型對之間的測距可用公式⑤計(jì)算出。如果有n個實(shí)體模型,那么經(jīng)驗(yàn)關(guān)系系統(tǒng)就有n2個實(shí)體模型對;
3)在經(jīng)驗(yàn)關(guān)系系統(tǒng)中,為了達(dá)到順序量表(Ordinal Scale),在兩實(shí)體模型對之間至少存在一個關(guān)系“”——它是連接的(Connex)、反對稱的(Antisymmetric)、傳遞的(Transitive)。
3.2 軟件重構(gòu)技術(shù)
最早對重構(gòu)進(jìn)行理論研究的Ralon Jahnson這樣描述重構(gòu):重構(gòu)是使用各種手段重新整理一個對象設(shè)計(jì)的過程。目的是為了讓設(shè)計(jì)更加靈活,更可重用。你可能有幾個理由來做這件事情.其中效率和可維護(hù)性可能是最重要的原因。
Martin Fowler在他的著作《Refactoring: Improving the Design of Existing Code》中這樣定義重構(gòu):在不改變可觀察行為的前提下,對軟件內(nèi)部結(jié)構(gòu)的改變,目的是使它更易于理解并且能夠更廉價地進(jìn)行改變。
軟件結(jié)構(gòu)可以因?yàn)楦鞣N各樣的原因而被改變.但只有出于可理解性、可修改、可維護(hù)目的的改變才是重構(gòu),如性能調(diào)優(yōu),它往往把代碼改得更讓人難以理解,雖然它并不改變可觀察的行為,所謂保持可觀察的行為,就是重構(gòu)之前軟件實(shí)現(xiàn)什么功能,之后照樣實(shí)現(xiàn)什么功能。任何用戶,不管是終端用戶還是其他的程序員,都不需要知道某些東西發(fā)生了變化。
為了論證度量在重構(gòu)中對人的“直覺”的輔助作用,我們重點(diǎn)研究了兩種重構(gòu)方法。
3.2.1重構(gòu)方法
移動方法(Move Method):是指把方法m從類A中移到使用此方法最多的類B中,而類A中的方法m則變換成一個簡單的委托(delegation),或者完全移去它。
移動屬性(Move Attribute):是指把屬性a從類A中移到使用此屬性最多的類B中,同時修改屬性a的所有使用者。
上述兩種重構(gòu)方法都是基于下列使用關(guān)系(use relation):相互間大量使用的特性應(yīng)聚集在同一個類中。而驅(qū)使這兩種重構(gòu)方法的“壞味道”:一是某類中定義的方法或?qū)傩员黄渌愡^多的使用著;二是某類中定義的方法過多的使用其他類中定義的方法。
3.2.2 壞味道(Bad Smell)
在我們進(jìn)行重構(gòu)之前,必須明白“重構(gòu)什么”和“怎樣重構(gòu)”。這些工作是通過探測代代碼中“壞味道”來進(jìn)行的,Martin Fowler在他的書中引用Kent Beck對“壞味道”隱喻,描述如何識別一種早期的警示信號,它們指示程序代碼的某一部分必須重構(gòu)。雖然Martin Fowler認(rèn)為在實(shí)踐中沒有一套好的度量方法勝過人的直覺,但是在研究中我們發(fā)現(xiàn)部分“壞味道”是可以量化的。這樣的“壞味道”有:
彈散式的外科手術(shù)(Shotgun Surgery):對系統(tǒng)一個地方的改變涉及到其他許多地方的相關(guān)改變。這些變化率和變化內(nèi)容相似的狀態(tài)和行為通常應(yīng)當(dāng)放在同一個類中。
特性的羨慕(Feature Envy):對象的目的就是封裝狀態(tài)以及與這些狀態(tài)緊密相關(guān)的行為。如果一個類的方法頻繁用 Get方法存取其他類的狀態(tài)進(jìn)行計(jì)算,那么就要考慮把行為移到涉及狀態(tài)數(shù)目最多的那個類。
不當(dāng)?shù)挠H密關(guān)系(Inappropriate Intimacy):當(dāng)類過度訪問其他類的私有部分,代表這個類有不當(dāng)?shù)挠H密關(guān)系。使用移動方法及移動屬性來降低親密關(guān)系。
數(shù)據(jù)類(Data Class ):數(shù)據(jù)類中除了屬性及存取這些屬性的Set及Get方法外別無它物。這種類一般多是為其它對象操作。如果其它類中常常使用到Set及Get方法,就要將這些行為以移動方法移到數(shù)據(jù)類中。
3.2.3 工具支持
雖然可以采用手工方式進(jìn)行重構(gòu),但一般認(rèn)為采用支持重構(gòu)的工具進(jìn)行重構(gòu)工作是非常必要的。目前,在重構(gòu)包含的各個方面都有相當(dāng)數(shù)量的支持工具。從工具和它能夠提供的支持種類來看,自動化的程度有相當(dāng)大的差別。諸如Refactoring Browser , XRefactory , jFactor這類的工具提供半自動方法實(shí)現(xiàn)重構(gòu)。一些研究人員提供了實(shí)現(xiàn)全自動重構(gòu)工具的可能性。例如,Guru 能夠?qū)崿F(xiàn)SELF 程序的重建繼承層次和重構(gòu)方法的自動化。當(dāng)前關(guān)于重構(gòu)工具的一種趨勢是將它們直接集成到商業(yè)軟件開發(fā)環(huán)境中。例如SmallTalk的VisualWorks、Eclipse 、Together ControlCenter、Intellij IDEA 、Borland JBuilder等等。這些工具的應(yīng)用的焦點(diǎn)是滿足用戶對重構(gòu)的需要。但是這些工具對于在何時、何處需要應(yīng)用重構(gòu)幾乎沒有提供什么支持。Simon提出解決該問題的一些方式,Kataoka指出如何通過使用Daikon工具檢測程序不變量的方法自動地應(yīng)用重構(gòu)方法。該方法基于對程序運(yùn)行的行為的動態(tài)分析實(shí)現(xiàn),可以將其視為其它方法的補(bǔ)充。
4.課題時間安排
2002.09 ---- 2003.02 調(diào)研并閱讀相關(guān)文獻(xiàn)
2003.03 ---- 2003.10 進(jìn)行理論研究
2003.10 ---- 2003.12 寫畢業(yè)論文
2004.3 答辯
參考文獻(xiàn)
Roberts, F. S., Measurement theory, in Encyclopedia of Mathematics and Its Applications, Vol. 7, Addison-Wesley, 1979.
Krantz, D.H., Luce, R. D., Suppes, P. and Tversky, A. , Foundations of Measurement, Vol.1 : Additive and Polynomial Representations, Academic Press, 1971.
Suppes, P. Krantz, D. H., Luce, R. D and Tversky, A. , Foundations of Measurement, Vol.2: Geometrical, Threshold and Probabilistic Representations, Academic Press, 1989.
Luce, R. D., Krantz, D. H. ,Suppes, P. and Tversky , A. , Foundations of Measurement, Vol.3: Respresentation, Axiomatization and Invariance, Academic Press, 1990.
Roger S. Pressman, Software Engineering: A Practitioner’s Approach (Fifth Edition), Mc Graw Hill, 2001.
Shyam R. Chidamber and Chris F. Kemerer, A Metrics Suite for Object-Oriented Design, IEEE Trans. on SE, Vol. 20, No. 6, June 1994.
Norman E Fenton, Software Metrics: A Rigorous Approach, Chapman&Hall, 1991.
E.J. Weyuker, eva luating Software Complexity Measures, IEEE Trans. Software Eng., September, 1988:1357- 1365.
Pfleeger, Status Report on Software Measurement, IEEE Software, 1997,33-43.
Berard, Metrics for Object-Oriented Software Engineering, an Internet posting on comp. Software-eng, Jauary 28, 1995.
Whitmire, S., Object-Oriented Design Measurement, Wiley, 1997.
Frank Simon, Silvio Löffler, Claus Lewerentz. Distance based cohesion measuring, in proceeding of the 2nd European Software Measurement Conference (FESMA) 99, Technologist Institute Amsterdam, 1999.
James M. Bieman and Linda M. Ott. , Measuring functional cohesion, Technical Report CS-93-109, Michigan Technological University, 1993.
James M. Bieman and Byung-Kyoo, Measuring Design-Level Cohesion, IEEE Transactions on Software Engineering, Vol 24, Nr. 2, February 1998.
Martin Fowler. Refactoring: Improving the design of existing code. Addison Wesley Longman, Inc., Reading, Massachusetts, 1999;
Dave Astels. Refactoring with UML;
Frank Simon, Frank Steinbruckner, Claus Lewerentz. Metrics based refactoring,2001;
Mario Bunge. Treatise on basic philosophy, Volume 3: Ontology I, The furniture of the world”, D. Reidel Publishing Company, Dordrecht-Holland 1977;
Yoshio Kataoka, Michael D.Ernst, Willian G.Griswold and David Notkin. Antomated support for program refactoring using Invariants;
Agile Modeling website, www.agilemodeling.com;
朱鴻、金凌紫,軟件質(zhì)量保障和測試,科學(xué)出版社,1997.8
邢大紅、曹佳冬、汪和才、劉宗田,軟件度量學(xué)綜述,計(jì)算機(jī)工程與應(yīng)用,2001.1
弓惠生。模塊內(nèi)聚性的度量方法,計(jì)算機(jī)研究與發(fā)展,1997,349(8)
吳源俊,軟件工程中的度量問題,信息技術(shù)與標(biāo)準(zhǔn)化,2002.11
蔡希堯,軟件質(zhì)量的度量問題,計(jì)算機(jī)工程與科學(xué),1996.1