JPeekは、Javaコードメトリックの静的コレクターです。
動機:たとえば、クラスの結束は、最も重要なオブジェクト指向ソフトウェア属性の1つと見なされます。これまでに発明された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が必要です。
< 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。、
ソフトウェアエンジニアリングのためのクラスの結束メトリック:批判的レビュー、
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。
[ hitz95 ]方法4( LCOM4 )の結束の欠如。
Martin Hitz et al。、
オブジェクト指向システムの結合と結束の測定、
Institute of Applied Computer Science and Systems Analysis、1995年、ウィーン大学、PDF。
[ sellers96 ]方法2-3( LCOM 2、3、および5 )の結束の欠如。
B. Henderson-Sellers et al。、
結合と結束(オブジェクト指向の分析と設計のための有効なメトリックスイートに向けて) 、
オブジェクト指向システム3、1996、PDF。
[ bansiya99 ]クラスの方法( CAMC )間の結束。
Jagdish Bansiya et al。、
オブジェクト指向のデザインのクラスの凝集指標、
Journal of object-orientedプログラミング、Vol。 11、いいえ。 8、1999、PDF。
[ etzkorn00 ]方法の論理的関連性( lorm )。
L. EtzkornとH. Delugach、
オブジェクト指向のデザインのセマンティックメトリックスイートに向けて、
オブジェクト指向の言語とシステムのテクノロジー、2000。Tools34。Proceedings。第34回国際会議。 IEEE、2000、pp。71–80、PDF
[ wasiq01 ]クラス接続メトリック( CCM )。
M. Wasiq
オブジェクト指向システムのクラスの凝集を測定し、
キング・ファード・ガトロイウム・ミネラルズ大学のマスター論文、2001年、PDF。
[ aman04 ]楽観的なクラスの結束( OCC )および悲観的なクラスの結束( PCC )。
ヒロヒサ・アマン等、
まとまりのある部分のサイズを使用したクラスの凝集指標の提案、
Proc。知識ベースのソフトウェアエンジニアリングに関する第5回共同会議、2002年、PDF。
[ marcus05 ]クラスの概念的な結束( C3 )。
A.マーカスとD. poshyvanyk、
クラスの概念的な結束、
第21回ソフトウェアメンテナンスに関する国際会議(ICSM'05)、ブダペスト、ハンガリー、2005年、pp。133-142、PDF
[ counsell06 ]正規化ハミング距離( NHD )。
Steve Counsell et al。、
オブジェクト指向のデザインのための3つの凝集メトリックの解釈と有用性、
ACM TOSEM、2006年4月、PDF。
[ fernandez06 ]クラスの凝集( SCOM )の敏感なメトリック。
ルイス・フェルナンデス等、
[a]新しいメトリック[...]意味のある値を生成する[...]以前に報告されたものよりも敏感です、
国際ジャーナル「情報理論とアプリケーション」、2006年第13巻、PDF。
[ dallal07 ]属性の結束( MMAC )を介したメソッドメソッド。
ジェハド・アル・ダラル、
オブジェクト指向クラスの設計ベースの凝集指標、
世界科学アカデミー、エンジニアリング、テクノロジーインターナショナルJournal of Computer and Information Engineering Vol:1、No:10、2007、PDF。
[ liu09 ]最大加重エントロピー( MWE )。
Y. Liu、D。Poshyvanyk、R。Ferenc、T。Gyim´othy、およびN. Chrisochoides、
潜在的なトピックの混合としてクラスの結束をモデリングする、
ソフトウェアメンテナンス、2009年。ICSM2009。IEEE国際会議。 IEEE、2009、pp。233–242、PDF
[ dallal11 ]方法( TLCOM )の結束の推移的な欠如。
ジェハド・アル・ダラル、
推移的ベースのオブジェクト指向のコースの欠如メトリック、
Kuwait University、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プラグインを開発しています。JPeekMavenプラグインプロジェクトを参照してください。
final定数である場合、クラス属性へのアクセスを考慮したメトリックによって計算された結果に影響します。たとえば、すべてのLCOMおよびCOMメトリックが影響を受けます。 ただフォーク、変更を行い、 mvn clean install -Pquliceを実行し、プルリクエストを送信します。紛失した場合、これを読んでください。
次のプルリクエストでこのリストにあなたの名前を追加することをheしないでください。