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 | عرض رسالة المساعدة |
يمكنك أيضًا نشرها كخدمة ويب في النظام الأساسي الخاص بك. ما عليك سوى تجميعه باستخدام mvn clean package --settings settings.xml ثم تشغيله ، كما يوحي Procfile . ستحتاج إلى 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 ] حبيب Izadkhah et al. ،
مقاييس تماسك الفصل لهندسة البرمجيات: مراجعة نقدية ،
مجلة علوم الكمبيوتر من مولدوفا ، المجلد 25 ، رقم 1 (73) ، 2017 ، PDF.
[ badri08 ] Linda Badri et al. ،
إعادة النظر في تماسك الطبقة: تحقيق تجريبي في العديد من الأنظمة ،
Journal of Object Technology ، Vol.7 ، No.6 ، 2008 ، PDF.
[ chidamber94 ] نقص التماسك في الأساليب ( LCOM ).
شيام تشيدامبر وآخرون ،
مجموعة مقاييس للتصميم الموجهة للكائن ،
معاملات IEEE على هندسة البرمجيات ، المجلد 20 ، رقم 6 ، 1994 ، PDF.
[ bieman95 ] تماسك الطبقة الضيقة ( TCC ) وتماسك الفئة فضفاضة ( LCC ).
جيمس م. بايمان وآخرون ،
التماسك وإعادة استخدامه في نظام موجه نحو الكائن ،
قسم علوم الكمبيوتر ، جامعة ولاية كولورادو ، 1995 ، PDF.
[ hitz95 ] عدم التماسك في الأساليب 4 ( LCOM4 ).
مارتن هيتز وآخرون ،
قياس الاقتران والتماسك في الأنظمة الموجهة للكائنات ،
معهد تحليل علوم الكمبيوتر والأنظمة التطبيقية ، جامعة فيينا ، 1995 ، PDF.
[ sellers96 ] عدم التماسك في الأساليب 2-3 ( Lcom 2 ، 3 و 5 ).
B. Henderson-Sellers et al. ،
الاقتران والتماسك (نحو مجموعة مقاييس صالحة للتحليل والتصميم الموجهة للكائنات) ،
الأنظمة الموجهة نحو الكائن 3 ، 1996 ، PDF.
[ bansiya99 ] التماسك بين طرق الطبقات ( CAMC ).
Jagdish Bansiya et al. ،
مقياس تماسك الفصل للتصاميم الموجهة للكائنات ،
مجلة البرمجة الموجهة للكائن ، المجلد. 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 ).
هيروهيسا أمان وآخرون ،
اقتراح بمقاييس التماسك الطبقي باستخدام أحجام الأجزاء المتماسكة ،
بروك. المؤتمر المشترك الخامس حول هندسة البرمجيات القائمة على المعرفة ، 2002 ، PDF.
[ marcus05 ] التماسك المفاهيمي للفصول ( C3 ).
A. Marcus و D. Poshyvanyk ،
التماسك المفاهيمي للفصول ،
المؤتمر الدولي 21st IEEE حول صيانة البرمجيات (ICSM'05) ، بودابست ، المجر ، 2005 ، ص 133-142 ، PDF
[ counsell06 ] مسافة Hamming الطبيعية ( NHD ).
ستيف كونسيل وآخرون ،
تفسير وفائدة ثلاث مقاييس التماسك للتصميم الموجهة للكائن ،
ACM Tosem ، April 2006 ، PDF.
[ fernandez06 ] مقياس حساس للتماسك الفئة ( SCOM ).
لويس فيرناديز وآخرون ،
[A] مقياس جديد [...] يسفر عن قيم ذات معنى [...] أكثر حساسية من تلك التي تم الإبلاغ عنها سابقًا ،
المجلة الدولية "نظريات المعلومات والتطبيقات" ، المجلد 13 ، 2006 ، PDF.
[ dallal07 ] طريقة طريقة من خلال تماسك السمات ( MMAC ).
جيهاد الدالال ،
مقياس تماسك قائم على التصميم للفئات الموجهة للكائنات ،
المجلة العالمية للأكاديمية للعلوم والهندسة والتكنولوجيا الدولية لهندسة الكمبيوتر والمعلومات المجلد: 1 ، رقم: 10 ، 2007 ، PDF.
[ liu09 ] إنتروبيا أقصى مرجح ( MWE ).
Y. Liu ، D. Poshyvanyk ، R. Ferenc ، T. Gyim´othy ، and N. Chrisochoides ،
تماسك فئة النمذجة كمخاليط للمواضيع الكامنة ،
صيانة البرمجيات ، 2009. ICSM 2009. IEEE International Conference on. IEEE ، 2009 ، ص. 233-242 ، PDF
[ dallal11 ] عدم التماسك عبر الأساليب ( TLCOM ).
جيهاد الدالال ،
مقياس الافتقار إلى الكائنات المستندة إلى الكائنات متعدية ،
قسم علوم المعلومات ، جامعة الكويت ، 2011 ، PDF.
أولاً ، يقوم Skeleton بتوصيف Java Bytecode باستخدام Javaassit و ASM ، من أجل إنتاج skeleton.xml . يحتوي مستند XML هذا على معلومات حول كل فئة ، وهو أمر ضروري لحسابات المقاييس. على سبيل المثال ، فئة جافا البسيطة:
class Book {
private int id ;
int getId () {
return this . id ;
}
} سيبدو هكذا في skeleton.xml 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. قررنا تنفيذها بهذه الطريقة بعد محاولة أقل نجاحًا للقيام بذلك في جافا. يبدو أن XSL أكثر ملاءمة للتلاعب مع البيانات من Java.
نقوم بتطوير مكون إضافي JPeek لـ Maven ، راجع مشروع Plugin Jpeek Maven.
final . على سبيل المثال ، تتأثر جميع مقاييس LCOM و COM. شوكة فقط ، قم بإجراء تغييرات ، وقم بتشغيل mvn clean install -Pqulice وتقديم طلب سحب ؛ اقرأ هذا ، إذا فقدت.
لا تتردد في إضافة اسمك إلى هذه القائمة في طلب السحب التالي.