Jpeek是Java代碼指標的靜態收集器。
動機:例如,類凝聚力被認為是最重要的面向對象的軟件屬性之一。到目前為止,發明了30多種不同的內聚力指標,但幾乎沒有一個可用的計算器可用。其他指標的情況非常相似。我們要創建這樣的工具,以使得或多或少正式分析代碼質量(具有數百個指標)成為可能。然後,我們將將此分析應用於不同的Java庫,目的是證明“優雅對象”書籍系列的想法是有意義的。
從此處加載最新的jar-with-dependencies.jar文件:
java -jar jpeek-jar-with-dependencies.jar --sources . --target ./jpeek Jpeek將在當前目錄中分析Java文件。 XML報告將在./jpeek目錄中生成。享受。
| 選項 | 描述 |
|---|---|
-s, --sources <path> | 必需的。使用類文件的目錄路徑 |
-t, --target <path> | 必需的。將生成報告的目錄路徑 |
--include-ctors | 將構造函數包括在所有公式中 |
--include-static-methods | 在所有公式中包括靜態方法 |
--include-private-methods | 將私人方法包括在所有公式中 |
--metrics <metrics> | 逗號分隔的指標列表包括(默認值: "LCOM5,NHD,MMAC,SCOM,CAMC" ) |
--overwrite | 覆蓋目標目錄(如果存在)或錯誤的退出 |
--quiet | 關閉記錄 |
--help | 顯示幫助消息 |
您還可以將其作為Web服務部署到您自己的平台。如Procfile所建議的,只需使用mvn clean package --settings settings.xml來編譯它,然後運行即可。您需要具有以下數據的settings.xml :xml:
< settings >
< profiles >
< profile >
< id >jpeek-heroku</ id >
< activation >
< activeByDefault >true</ activeByDefault >
</ activation >
< properties >
< sentry .dsn>https://...</ sentry .dsn>
< dynamo .key>AKIAI..........LNN6A</ dynamo .key>
< dynamo .secret>6560KMv5+8Ti....................Qdwob63Z</ dynamo .secret>
</ properties >
</ profile >
</ profiles >
</ settings >您還需要在DynamoDB中使用這些表(所有索引都必須提供ALL屬性):
jpeek-mistakes:
metric (HASH/String)
version (RANGE/String)
indexes:
mistakes (GSI):
version (HASH/String),
avg (RANGE/Number)
jpeek-results:
artifact (HASH/String)
indexes:
ranks (GSI):
version (HASH/String)
rank (RANGE/Number)
scores (GSI):
version (HASH/String)
score (RANGE/Number)
recent (GSI):
good (HASH/String)
added (RANGE/Number)
這些論文提供了一個很好的凝聚指標的摘要:
[ izadkhah17 ] Habib Izadkhah等人。
軟件工程的類凝聚指標:一項關鍵評論,
摩爾多瓦計算機科學雜誌,第25卷,第1號(73),2017年,PDF。
[ badri08 ] Linda Badri等人,
重新審視類凝聚力:對多種系統的實證研究,
對象技術雜誌,第7卷,第6期,2008年,PDF。
[ chidamber94 ]方法缺乏內聚力( LCOM )。
Shyam Chidamber等人,
面向對象設計的指標套件,
IEEE軟件工程交易,第20卷,第6期,1994年,PDF。
[ bieman95 ]緊密的類凝聚力( TCC )和寬鬆的類凝聚力( LCC )。
James M. Bieman等,
在面向對象的系統中的內聚力和重複使用,
科羅拉多州立大學計算機科學系,1995年,PDF。
[ hitz95 ]方法4( LCOM4 )缺乏內聚力。
Martin Hitz等,
測量面向對象系統中的耦合和內聚力,
維也納大學應用計算機科學與系統分析研究所,1995年,PDF。
[ sellers96 ]方法2-3( LCOM 2、3和5 )缺乏凝聚力。
B. Henderson-Sellers等人,
耦合和凝聚力(朝著有效的指標套件用於對象分析和設計) ,
面向對象的系統3,1996,PDF。
[ bansiya99 ]階級方法之間的凝聚力( CAMC )。
Jagdish Bansiya等人,
針對對象設計的類凝聚度度量,
面向對象的編程雜誌,第1卷。 11,不。 8,1999,PDF。
[ etzkorn00 ]方法的邏輯相關性( LORM )。
L. Etzkorn和H. Delugach,
走向面向對象設計的語義指標套件,
面向對象的語言和系統的技術,2000年。工具34。會議記錄。第34屆國際會議。 IEEE,2000年,第71-80頁,PDF
[ wasiq01 ]類連接度量( CCM )。
M. Wasiq
測量面向對象的系統中的類凝聚力,
國王法赫德大學石油與礦物質的碩士論文,2001年,PDF。
[ aman04 ]樂觀的類凝聚力( OCC )和悲觀階級內聚力( PCC )。
Hirohisa Aman等人,
使用大小粘性部分的類凝度指標的建議,
Proc。第五屆基於知識的軟件工程聯合會議,2002年,PDF。
[ marcus05 ]類的概念凝聚力( C3 )。
A. Marcus和D. Poshyvanyk,
班級的概念凝聚力,
第21屆IEEE軟件維護國際會議(ICSM'05),布達佩斯,匈牙利,2005年,第133-142頁,PDF
[ counsell06 ]標準化錘距( NHD )。
Steve Counsell等,
針對對象設計的三個凝度指標的解釋和實用性,
ACM TOSEM,2006年4月,PDF。
[ fernandez06 ]敏感的類凝聚力( SCOM )。
路易斯·費爾南德斯等人,
[a]新的度量[...]產生有意義的值[...]比先前報導的更敏感的值
國際雜誌“信息理論與應用”,第13卷,2006年,PDF。
[ dallal07 ]通過屬性內聚力( MMAC )方法方法。
耶哈德·阿爾·達拉爾(Jehad Al Dallal),
針對對象的類別的基於設計的凝聚度量,
世界科學,工程與技術學會國際計算機與信息工程雜誌:1,編號:10,2007,PDF。
[ liu09 ]最大加權熵( MWE )。
Y. Liu,D。 Poshyvanyk,R。 Ferenc,T。 Gyim´othy和N. Chrisochoides,
建模類凝聚力作為潛在主題的混合物,
軟件維護,2009。 ICSM2009。 IEEE國際會議。 IEEE,2009年,第233-242頁,PDF
[ dallal11 ]方法( TLCOM )中的內聚力不足。
耶哈德·阿爾·達拉爾(Jehad Al Dallal),
基於及物的對象缺乏粘合度度量,
科威特大學信息科學系,2011年,PDF。
首先,使用JavaAssit和ASM解析Java字節Skeleton ,以產生skeleton.xml 。該XML文檔包含有關每個類的信息,這是指標計算所必需的。例如,這個簡單的Java類:
class Book {
private int id ;
int getId () {
return this . id ;
}
}將在skeleton.xml中看起來像這樣:
< class id = ' Book ' >
< attributes >
< attribute public = ' false ' static = ' false ' type = ' I ' >id</ attribute >
</ attributes >
< methods >
< method abstract = ' false ' ctor = ' true ' desc = ' ()I ' name = ' getId ' public = ' true ' static = ' false ' >
< return >I</ return >
< args />
</ method >
</ methods >
</ class >然後,我們有一個XSL樣式表的集合,每個指標一個。例如, LCOM.xsl將skeleton.xml轉換為LCOM.xml ,看起來像這樣:
< metric >
< title >MMAC</ title >
< app >
< class id = ' InstantiatorProvider ' value = ' 1 ' />
< class id = ' InstantationException ' value = ' 0 ' />
< class id = ' AnswersValidator ' value = ' 0.0583 ' />
< class id = ' ClassNode ' value = ' 0.25 ' />
[... skipped ...]
</ app >
</ metric >因此,所有計算發生在XSLT文件中。我們決定以不太成功的嘗試在Java進行所有成功之後,決定以這種方式實施它。看來XSL比Java更適合使用數據操作。
我們正在為Maven開發JPeek插件,請參見Jpeek Maven插件項目。
final常數。例如,所有LCOM和COM指標都受到影響。 只是叉,進行更改,運行mvn clean install -Pqulice並提交拉動請求;讀這個,如果迷路了。
不要猶豫,將您的名字添加到下一個拉請請求中的此列表中。