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并提交拉动请求;读这个,如果迷路了。
不要犹豫,将您的名字添加到下一个拉请请求中的此列表中。