JPeek เป็นนักสะสมแบบคงที่ของตัวชี้วัดรหัส Java
แรงจูงใจ : การทำงานร่วมกันของคลาสถือว่าเป็นหนึ่งในคุณลักษณะซอฟต์แวร์เชิงวัตถุที่สำคัญที่สุด มีตัวชี้วัดการทำงานร่วมกันที่แตกต่างกันมากกว่า 30 ตัวที่คิดค้นขึ้นมา แต่เกือบจะไม่มีเครื่องคำนวณใด ๆ สถานการณ์ที่มีตัวชี้วัดอื่น ๆ คล้ายกันมาก เราต้องการสร้างเครื่องมือดังกล่าวที่จะทำให้สามารถวิเคราะห์คุณภาพของรหัสได้มากหรือน้อยอย่างเป็นทางการ (ด้วยตัวชี้วัดหลายร้อยตัว) จากนั้นเราจะใช้การวิเคราะห์นี้กับห้องสมุด Java ที่แตกต่างกันโดยมีเจตนาที่จะพิสูจน์ว่าความคิดจากซีรี่ส์หนังสือ Objects Elegant นั้นสมเหตุสมผล
โหลดไฟล์ 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 ] Habib Izadkhah et al.
ตัวชี้วัดการทำงานร่วมกันของชั้นเรียนสำหรับวิศวกรรมซอฟต์แวร์: การทบทวนที่สำคัญ
วารสารวิทยาศาสตร์คอมพิวเตอร์ของมอลโดวา, ฉบับที่ 25, ฉบับที่ 1 (73), 2017, PDF
[ badri08 ] Linda Badri และคณะ
ทบทวนการทำงานร่วมกันของชั้นเรียน: การตรวจสอบเชิงประจักษ์ในหลาย ๆ ระบบ
วารสารเทคโนโลยีวัตถุ, 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.
การทำงานร่วมกันและนำกลับมาใช้ใหม่ในระบบเชิงวัตถุ
ภาควิชาวิทยาศาสตร์คอมพิวเตอร์, มหาวิทยาลัยรัฐโคโลราโด, 2538, PDF
[ hitz95 ] ขาดการทำงานร่วมกันในวิธีการ 4 ( LCOM4 )
Martin Hitz et al.
การวัดการมีเพศสัมพันธ์และการทำงานร่วมกันในระบบเชิงวัตถุ
สถาบันวิทยาศาสตร์คอมพิวเตอร์ประยุกต์และการวิเคราะห์ระบบมหาวิทยาลัยเวียนนา 2538 PDF
[ sellers96 ] ขาดการทำงานร่วมกันในวิธีการ 2-3 ( LCOM 2, 3 และ 5 )
B. Henderson-Sellers และคณะ
การมีเพศสัมพันธ์และการทำงานร่วมกัน (ไปยังชุดตัวชี้วัดที่ถูกต้องสำหรับการวิเคราะห์และออกแบบเชิงวัตถุ)
ระบบเชิงวัตถุ 3, 1996, PDF
[ bansiya99 ] การทำงานร่วมกันระหว่างวิธีการเรียน ( CAMC )
Jagdish Bansiya et al.
ตัวชี้วัดการทำงานร่วมกันของชั้นเรียนสำหรับการออกแบบเชิงวัตถุ
วารสารการเขียนโปรแกรมเชิงวัตถุ, ฉบับที่ 11 ไม่ 8, 1999, PDF
[ etzkorn00 ] ความสัมพันธ์เชิงตรรกะของวิธีการ ( LORM )
L. Etzkorn และ H. Delugach
ไปยังชุดตัวชี้วัดความหมายสำหรับการออกแบบเชิงวัตถุ
เทคโนโลยีของภาษาและระบบที่มุ่งเน้นวัตถุ, 2000. เครื่องมือ 34. การดำเนินการ การประชุมนานาชาติครั้งที่ 34 IEEE, 2000, pp. 71–80, PDF
[ wasiq01 ] Metric การเชื่อมต่อคลาส ( CCM )
M. Wasiq
การวัดการทำงานร่วมกันของคลาสในระบบเชิงวัตถุ
วิทยานิพนธ์ปริญญาโทที่ King Fahd University of Petroleum & Minerals, 2001, PDF
[ aman04 ] การทำงานร่วมกันในระดับที่มองโลกในแง่ดี ( OCC ) และการทำงานร่วมกันในแง่ร้าย ( PCC )
Hirohisa Aman et al.
ข้อเสนอของตัวชี้วัดการทำงานร่วมกันในชั้นเรียนโดยใช้ขนาดของชิ้นส่วนที่มีความเหนียว
Proc. ของการประชุมร่วมที่ห้าเกี่ยวกับวิศวกรรมซอฟต์แวร์ที่ใช้ความรู้, 2002, PDF
[ marcus05 ] แนวคิดการทำงานร่วมกันของชั้นเรียน ( C3 )
A. Marcus และ D. Poshyvanyk
แนวคิดการทำงานร่วมกันของชั้นเรียน
การประชุมนานาชาติ IEEE ครั้งที่ 21 เกี่ยวกับการบำรุงรักษาซอฟต์แวร์ (ICSM'05), บูดาเปสต์, ฮังการี, 2005, pp. 133-142, PDF
[ counsell06 ] ระยะทาง hamming ปกติ ( NHD )
Steve Counsell et al.
การตีความและยูทิลิตี้ของสามเมตริกการทำงานร่วมกันสำหรับการออกแบบเชิงวัตถุ
ACM Tosem, เมษายน 2549, PDF
[ fernandez06 ] ตัวชี้วัดที่ละเอียดอ่อนของการทำงานร่วมกันของคลาส ( SCOM )
Luis Fernándezและคณะ
[a] ตัวชี้วัดใหม่ [... ] ให้ค่าที่มีความหมาย [... ] มีความอ่อนไหวมากกว่าที่รายงานก่อนหน้านี้
วารสารนานาชาติ "ทฤษฎีข้อมูลและแอปพลิเคชัน", เล่มที่ 13, 2549, PDF
[ dallal07 ] วิธีการผ่านแอตทริบิวต์การทำงานร่วมกัน ( MMAC )
Jehad Al Dallal
ตัวชี้วัดการทำงานร่วมกันตามการออกแบบสำหรับคลาสที่มุ่งเน้นวัตถุ
World Academy of Science, วิศวกรรมและเทคโนโลยีวารสารระหว่างประเทศวารสารคอมพิวเตอร์และข้อมูลวิศวกรรมสารสนเทศ: 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 Parses Java bytecode โดยใช้ Javaassit และ ASM เพื่อผลิต 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
เรากำลังพัฒนาปลั๊กอิน JPeek สำหรับ Maven ดูโครงการปลั๊กอิน JPeek Maven
final ตัวอย่างเช่นตัวชี้วัด LCOM และ COM ทั้งหมดได้รับผลกระทบ เพียงส้อมทำการเปลี่ยนแปลงเรียกใช้ mvn clean install -Pqulice และส่งคำขอดึง อ่านสิ่งนี้ถ้าหลงทาง
อย่าลังเลที่จะเพิ่มชื่อของคุณในรายการนี้ในคำขอดึงครั้งต่อไปของคุณ