JPEEK는 Java 코드 메트릭의 정적 수집가입니다.
동기 부여 : 예를 들어, 클래스 응집력은 가장 중요한 객체 지향 소프트웨어 속성 중 하나로 간주됩니다. 지금까지 발명 된 30 개가 넘는 응집력 지표가 있지만, 그 중 어느 것도 계산기를 사용할 수 없습니다. 다른 메트릭의 상황은 매우 유사합니다. 우리는 코드 품질을 어느 정도 공식적으로 분석 할 수있는 도구를 만들고자합니다 (수백 개의 메트릭). 그런 다음 Elegant Objects Book 시리즈의 아이디어가 의미가 있음을 증명하기 위해이 분석을 다른 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 | 도움말 메시지를 표시합니다 |
자신의 플랫폼에 웹 서비스로 배포 할 수도 있습니다. Procfile 에서 제안한대로 mvn clean package --settings settings.xml 로 컴파일하면됩니다. 다음 데이터와 함께 settings.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 et al.,
소프트웨어 엔지니어링을위한 클래스 응집력 메트릭 : 중요한 검토 ,
Computer Science Journal of Moldova, Vol.25, No.1 (73), 2017, PDF.
[ badri08 ] Linda Badri et al.,
계급 응집력 재 방문 : 여러 시스템에 대한 경험적 조사 ,
Journal of Object Technology, Vol.7, No.6, 2008, PDF.
[ chidamber94 ] 방법의 응집력 부족 ( Lcom ).
Shyam Chidamber et al.,
객체 지향 디자인을위한 메트릭 스위트 ,
소프트웨어 엔지니어링에 대한 IEEE 거래, Vol.20, No.6, 1994, PDF.
[ bieman95 ] 타이트 클래스 응집력 ( TCC ) 및 느슨한 클래스 응집력 ( LCC ).
James M. Bieman et al.,
객체 지향 시스템에서 응집 및 재사용 ,
1995 년 콜로라도 주립 대학, 컴퓨터 과학과, PDF.
방법 4 ( LCOM4 )에서 응집력 hitz95 .
Martin Hitz et al.,
객체 지향 시스템에서 커플 링 및 응집력 측정 ,
1995 년 비엔나 대학교 컴퓨터 과학 및 시스템 분석 연구소, PDF.
방법 sellers96 에서 응집력 부족 ( LCOM 2, 3 및 5 ).
B. Henderson-Sellers et al.,
커플 링 및 응집력 (객체 지향 분석 및 설계를위한 유효한 메트릭 스위트) ,
객체 지향 시스템 3, 1996, PDF.
[ bansiya99 ] 클래스 방법 중 응집력 ( CAMC ).
Jagdish Bansiya et al.,
객체 지향 디자인에 대한 클래스 응집 메트릭 ,
객체 지향 프로그래밍 저널, Vol. 11, 아니오. 1999 년 8 월, PDF.
[ etzkorn00 ] 방법의 논리적 관련성 ( lorm ).
L. Etzkorn과 H. Delugach,
객체 지향 디자인을위한 시맨틱 메트릭 스위트를 향해
객체 지향 언어 및 시스템의 기술, 2000. 도구 34. 절차. 34 번째 국제 회의. IEEE, 2000, pp. 71–80, pdf
[ wasiq01 ] 클래스 연결 메트릭 ( CCM ).
M. Wasiq
객체 지향 시스템에서 클래스 응집력 측정 ,
King Fahd University of Petroleum & Minerals의 마스터 논문, 2001, PDF.
[ aman04 ] 낙관적 계급 응집력 ( OCC ) 및 비관적 계급 응집력 ( PCC ).
Hirohisa Aman et al.,
응집력 부품 크기를 사용한 클래스 응집력 지표의 제안 ,
Proc. 지식 기반 소프트웨어 엔지니어링에 관한 제 5 차 공동 회의, 2002, PDF.
[ marcus05 ] 클래스의 개념적 응집력 ( C3 ).
A. Marcus와 D. Poshyvanyk,
클래스의 개념적 응집력 ,
21st IEEE 국제 소프트웨어 유지 관리 회의 (ICSM'05), 부다페스트, 헝가리, 2005, 133-142 쪽, PDF
[ counsell06 ] 정규화 된 해밍 거리 ( NHD ).
Steve Counsell et al.,
객체 지향 설계를위한 3 개의 응집력 지표의 해석과 유용성 ,
ACM TOSEM, 2006 년 4 월, PDF.
[ fernandez06 ] 민감한 클래스 응집력 ( SCOM ).
Luis Fernández et al.,
[A] 새로운 메트릭 [...]은 이전에보고 된 것보다 더 민감한 의미있는 가치를 산출합니다 .
International Journal "Information Theories & Applications", Volume 13, 2006, PDF.
[ dallal07 ] 속성 응집력 ( MMAC )을 통한 메소드 방법.
Jehad Al Dallal,
객체 지향 클래스를위한 디자인 기반 응집체 메트릭 ,
세계 아카데미 과학, 공학 및 기술 국제 컴퓨터 및 정보 공학 저널 : 1, No : 10, 2007, PDF.
[ liu09 ] 최대 가중 엔트로피 ( MWE ).
Y. Liu, D. Poshyvanyk, R. Ferenc, T. Gyim´othy 및 N. Chrisochoides,
잠재 주제의 혼합물로서 클래스 응집력 모델링 ,
소프트웨어 유지 보수, 2009. ICSM 2009. IEEE 국제 회의. IEEE, 2009, pp. 233–242, pdf
[ dallal11 ] 방법 ( TLCOM )에서의 전이 부족.
Jehad Al Dallal,
전이 기반 객체 지향 응용 부족 메트릭 ,
2011 년 쿠웨이트 대학교 정보 과학과, PDF.
먼저, skeleton.xml 생성하기 위해 Skeleton Javaassit 및 ASM을 사용하여 Java Bytecode를 구문 분석합니다. 이 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 실행하고 풀 요청을 제출하십시오. 잃어버린 경우 이것을 읽으십시오.
다음 풀 요청 에서이 목록에 이름을 추가하십시오.