วิธีค้นหารหัสที่ไม่ได้ใช้ / ไม่ได้ใช้ในโครงการ Java [ปิด]


306

เครื่องมือใดที่คุณใช้เพื่อค้นหาโค้ดที่ไม่ได้ใช้ / ไม่ใช้ในโครงการ java ขนาดใหญ่ ผลิตภัณฑ์ของเราพัฒนามาหลายปีแล้วและมันก็ยากที่จะตรวจจับโค้ดด้วยตนเองที่ไม่ได้ใช้งานอีกต่อไป อย่างไรก็ตามเราพยายามลบรหัสที่ไม่ได้ใช้มากที่สุดเท่าที่จะทำได้

ข้อเสนอแนะสำหรับกลยุทธ์ / เทคนิคทั่วไป (นอกเหนือจากเครื่องมือเฉพาะ) ก็มีค่าเช่นกัน

แก้ไข:โปรดทราบว่าเราได้ใช้เครื่องมือครอบคลุมรหัส (Clover, IntelliJ) แล้ว แต่สิ่งเหล่านี้เป็นความช่วยเหลือเล็กน้อย รหัสที่ตายแล้วยังคงมีการทดสอบหน่วยและปรากฏขึ้นตามที่ครอบคลุม ฉันเดาว่าเครื่องมือในอุดมคติจะระบุกลุ่มของรหัสที่มีรหัสอื่นน้อยมากขึ้นอยู่กับมันทำให้สามารถตรวจสอบเอกสารด้วยตนเองได้


16
เก็บการทดสอบหน่วยไว้ในแผนผังแหล่งข้อมูลแยกต่างหาก (คุณควรทำต่อไป) และเรียกใช้เครื่องมือครอบคลุมเฉพาะบนแผนภูมิสด
agnul

5
ฉันจะเริ่มต้นด้วยความคิดของ"ที่ไม่ได้ใช้ประกาศ" การตรวจสอบและยกเลิกรวมถึงแหล่งที่มาของการทดสอบ คุณช่วยอธิบายสิ่งที่คุณหมายถึงเมื่อคุณพูดว่า "ช่วยเล็กน้อย" ของ IDEA ได้ไหม?
David Moles

1
วิธีในการค้นหารหัสที่ตายแล้ว: 1) ไม่ได้เชื่อมโยงโดยสิ่งใดภายนอก 2) ไม่ได้ถูกใช้จากภายนอกแม้ว่าจะถูกเชื่อมโยงในรันไทม์ 3) เชื่อมโยงและเรียก แต่ไม่เคยใช้เหมือนตัวแปรที่ตายแล้ว 4) สถานะที่เข้าไม่ถึงทางตรรกะ ดังนั้นการเชื่อมโยงการเข้าถึงเมื่อเวลาผ่านไปตามตรรกะใช้หลังจากเข้าถึง
มูฮัมหมัดอูเมอร์

ใช้ความคิด IntelliJ และคำตอบของฉันจากที่นี่: stackoverflow.com/questions/22522013/… :)
BlondCode

เพิ่มเติมจากคำตอบของ David Mole: ดูคำตอบนี้stackoverflow.com/a/6587932/1579667
Benj

คำตอบ:


40

ฉันจะใช้ระบบที่ทำงานอยู่เพื่อเก็บบันทึกการใช้รหัสจากนั้นเริ่มตรวจสอบรหัสที่ไม่ได้ใช้เป็นเดือนหรือเป็นปี

ตัวอย่างเช่นถ้าคุณมีความสนใจในคลาสที่ไม่ได้ใช้คลาสทั้งหมดอาจได้รับการบันทึกเมื่อมีการสร้างอินสแตนซ์ จากนั้นสคริปต์ขนาดเล็กสามารถเปรียบเทียบบันทึกเหล่านี้กับรายการคลาสที่สมบูรณ์เพื่อค้นหาคลาสที่ไม่ได้ใช้

แน่นอนถ้าคุณไปที่ระดับวิธีการที่คุณควรคำนึงถึงประสิทธิภาพ ตัวอย่างเช่นวิธีการสามารถบันทึกการใช้งานครั้งแรกเท่านั้น ฉันไม่รู้ว่าจะทำอย่างไรดีที่สุดใน Java เราได้ทำสิ่งนี้ใน Smalltalk ซึ่งเป็นภาษาแบบไดนามิกและทำให้สามารถแก้ไขโค้ดได้ในขณะทำงาน เราใช้วิธีการทั้งหมดด้วยการเรียกการบันทึกและถอนการติดตั้งรหัสการบันทึกหลังจากวิธีการบันทึกเป็นครั้งแรกดังนั้นหลังจากผ่านไประยะหนึ่งจะไม่มีการลงโทษประสิทธิภาพอีกต่อไป บางทีสิ่งที่คล้ายกันสามารถทำได้ใน Java ด้วยธงบูลีนคงที่ ...


5
ฉันชอบคำตอบนี้ แต่ไม่มีใครมีความคิดวิธีการทำใน Java โดยไม่ต้องเพิ่มการบันทึกในทุกชั้นอย่างชัดเจนหรือไม่ บางทีเวทมนตร์ 'พร็อกซี' บางอย่าง?
Outlaw Programmer

14
@Outlaw AOP ดูเหมือนจะเป็นกรณีการใช้งานที่สมบูรณ์แบบสำหรับสิ่งนี้
Pascal Thivent

6
หากคุณเข้าใจโครงสร้างการโหลดคลาสของแอปพลิเคชันคุณสามารถใช้ AOP บน classloader เพื่อติดตามเหตุการณ์การโหลดคลาส สิ่งนี้จะมีการบุกรุกน้อยกว่าในระบบการผลิตกว่าคำแนะนำก่อนการก่อสร้างทั้งหมด
ShabbyDoo

5
คำตอบนี้ค่อนข้างดีสำหรับภาษาแบบไดนามิก แต่แย่มากสำหรับภาษาแบบคงที่ซึ่งสามารถทำได้ดีกว่ามาก ด้วยภาษาที่พิมพ์แบบคงที่ (นอกเหนือจากการสะท้อน) คุณสามารถทราบได้อย่างแน่นอนว่าวิธีการใดที่ใช้และไม่ได้นี่คือหนึ่งในข้อได้เปรียบที่ใหญ่ที่สุดของภาษาที่พิมพ์แบบคงที่และคุณควรใช้มันมากกว่าวิธีที่ผิดพลาดตามที่อธิบายไว้ที่นี่ .
Bill K

4
@BillK มีการสะท้อนเกิดขึ้นมากกว่าที่คุณคิด เช่นฤดูใบไม้ผลิทำเวทย์มนตร์เล็กน้อยภายใต้ฝาครอบรวมถึงการสะท้อน เครื่องมือวิเคราะห์ของคุณต้องเลียนแบบ
Thorbjørn Ravn Andersen

220

ปลั๊กอินคราสที่ทำงานได้ดีพอสมควรเป็นเครื่องตรวจจับรหัสที่ไม่ได้ใช้

มันประมวลผลโครงการทั้งหมดหรือไฟล์ที่เฉพาะเจาะจงและแสดงวิธีการรหัสที่ไม่ได้ใช้ / ตายต่าง ๆ เช่นเดียวกับการแนะนำการเปลี่ยนแปลงการมองเห็น (เช่นวิธีสาธารณะที่สามารถป้องกันหรือส่วนตัว)


ดูดี แต่ฉันไม่สามารถทำงานได้ - การกระทำ "ตรวจหารหัส ... " ถูกปิดใช้งานและฉันไม่พบวิธีเปิดใช้งาน
Ondra Žižka

1
หาวิธีที่ไม่ได้ใช้จริง ๆ แต่ก็พบว่า EJB ของฉันไม่ได้ใช้ (ในขณะที่พวกเขาอยู่) เพราะฉันใช้การออกแบบรูปแบบตัวแทนธุรกิจ
Eildosa

มันยังใช้งานได้กับเคปเลอร์หรือไม่? ออกมาพูดเกี่ยวกับ eclipse 3.8: ucdetector.org/releases.html
Mr_and_Mrs_D

ดูเหมือนว่าจะอยู่ในสภาพการทำงานที่สมบูรณ์แบบในเคปเลอร์
Erik Kaplun

4
คุณต้องการที่จะเพิ่มลิงค์ไปยัง marketarket.eclipse.org/content/unn จำเป็น-code-detectorหรือไม่? สิ่งนี้ทำให้การติดตั้งง่ายขึ้นและตอบคำถามว่าสนับสนุน Eclipse รุ่นใหม่กว่าหรือไม่
โทมัสเวลเลอร์

64

CodeProเปิดตัวเมื่อเร็ว ๆ นี้โดย Google ด้วยโครงการ Eclipse ฟรีและมีประสิทธิภาพสูง ปลั๊กอินมีคุณลักษณะ ' ค้นหารหัส Dead ' ที่มีจุดเริ่มต้นหนึ่ง / หลายจุด ทำงานได้ดีทีเดียว


1
จะไม่ทำงานอีกต่อไปกับ eclipse Kepler หลังจากติดตั้งสำเร็จแล้วผ่านเว็บไซต์อัปเดตจะทำให้เกิด eclipse crash ทุกครั้ง
txulu

น่าเสียดายที่ดูเหมือนว่าเครื่องมือนี้ไม่ทราบถึงการมีอยู่ของฤดูใบไม้ผลิดังนั้นมันจะทำเครื่องหมาย @Components ทั้งหมดของฉันว่าไม่ได้ใช้อย่างไม่ถูกต้อง
Clint Eastwood

กลายเป็นเก่ามากไม่สามารถทำงานได้กับLast updated this plugin March 27, 2012 developers.google.com/java-dev-tools/download-codepro
mumair

2
ลิงก์ทั้งหมดล้าสมัย
zygimantus

3
น่าเสียดายที่ปรากฏว่า Google ทิ้งโค้ดไว้ในโครงการ Eclipse และลืมไปหมดเลย
Thorbjørn Ravn Andersen

30

ฉันแปลกใจที่ProGuardไม่ได้ถูกกล่าวถึงที่นี่ เป็นหนึ่งในผลิตภัณฑ์ที่เป็นผู้ใหญ่ที่สุดในรอบ

ProGuardเป็นโปรแกรมลดขนาดไฟล์คลาส Java, optimizer, obfuscator และ preverifier มันตรวจจับและลบคลาสที่ไม่ได้ใช้ฟิลด์วิธีการและคุณลักษณะ มันเพิ่มประสิทธิภาพ bytecode และลบคำแนะนำที่ไม่ได้ใช้ เปลี่ยนชื่อคลาสฟิลด์และเมธอดที่เหลือโดยใช้ชื่อที่ไม่มีความหมายสั้น ๆ ในที่สุดมันจะยืนยันรหัสที่ประมวลผลล่วงหน้าสำหรับ Java 6 หรือสำหรับ Java Micro Edition

การใช้ประโยชน์บางอย่างของ ProGuard คือ:

  • การสร้างโค้ดขนาดกะทัดรัดมากขึ้นสำหรับการจัดเก็บรหัสขนาดเล็กลงถ่ายโอนข้ามเครือข่ายได้เร็วขึ้นโหลดเร็วขึ้นและลดขนาดหน่วยความจำ
  • การทำให้โปรแกรมและห้องสมุดยากต่อการทำวิศวกรรมย้อนกลับ
  • การแสดงรายการรหัสที่ไม่ทำงานดังนั้นจึงสามารถลบออกจากรหัสต้นฉบับได้
  • การกำหนดเป้าหมายใหม่และตรวจสอบไฟล์คลาสที่มีอยู่ล่วงหน้าสำหรับ Java 6 หรือสูงกว่าเพื่อใช้ประโยชน์จากการโหลดคลาสที่รวดเร็วยิ่งขึ้น

ตัวอย่างที่นี่สำหรับรายการรหัสที่ตายแล้ว: https://www.guardsquare.com/en/products/proguard/manual/examples#deadcode


8
การให้ตัวอย่างการใช้งานจะให้คำตอบที่ดีกว่า
rds

1
การอ่านเอกสารฉันเห็นว่ามันลดขนาดโค้ดที่ไม่ได้ใช้ แต่ฉันไม่พบที่ใดที่มันแสดงรายการ - ตกลงตัวอย่างหรือลิงก์ไปยังส่วนที่เกี่ยวข้องของเอกสารนั้นจะมีประโยชน์มาก!
orbfish

26

สิ่งหนึ่งที่ฉันรู้ว่าทำใน Eclipse ในชั้นเรียนเดียวคือการเปลี่ยนวิธีการทั้งหมดให้เป็นส่วนตัวแล้วดูว่าฉันได้รับการร้องเรียนอะไร สำหรับวิธีการที่ใช้สิ่งนี้จะกระตุ้นให้เกิดข้อผิดพลาดและฉันจะกลับไปสู่ระดับการเข้าถึงต่ำสุดที่ทำได้ สำหรับวิธีการที่ไม่ได้ใช้สิ่งนี้จะกระตุ้นการเตือนเกี่ยวกับวิธีการที่ไม่ได้ใช้และจากนั้นสามารถลบออกได้ และเป็นโบนัสคุณมักจะพบวิธีการสาธารณะที่สามารถและควรทำให้เป็นส่วนตัว

แต่มันเป็นคู่มือมาก


4
อาจไม่ใช่คำตอบที่เหมาะสม แต่นั่นก็ฉลาดจริงๆ
Erik Reppen

8
นี่ฉลาด ... จนกว่าคุณจะได้รับสายจากรหัสที่ไม่ได้ใช้จากคลาสอื่น
Danosaure

การใช้วิธีนี้ซ้ำเพื่อลบโค้ดจำนวนมากเนื่องจากวิธีการหนึ่งที่ใช้สร้างคนอื่นเมื่อมันถูกลบ
4myle

15

ใช้เครื่องมือครอบคลุมการทดสอบเพื่อทำโค้ดเบสของคุณจากนั้นเรียกใช้แอพพลิเคชั่นนั้นไม่ใช่การทดสอบ

EmmaและEclemmaจะให้รายงานที่ดีถึงคุณว่าเปอร์เซ็นต์ของคลาสใดที่เรียกใช้สำหรับการเรียกใช้โค้ดใด ๆ


1
+1 เนื่องจากเป็นจุดเริ่มต้นที่ดี แต่โปรดจำไว้ว่าเช่นตัวแปรที่ยังไม่ได้ใช้ (ยังประกาศ) จะเป็นสีเขียวเช่นกัน
DerMike

13

เราได้เริ่มใช้Find Bugsเพื่อช่วยระบุ funk บางอย่างในสภาพแวดล้อมที่อุดมด้วยเป้าหมายของ codebase สำหรับการ refactorings ฉันจะพิจารณาโครงสร้าง 101เพื่อระบุจุดในสถาปัตยกรรมของ codebase ที่ซับซ้อนเกินไปดังนั้นคุณจึงรู้ว่าหนองน้ำจริงอยู่ที่ไหน


4
FindBugs ไม่สามารถตรวจพบโค้ดที่ตายแล้วและไม่ได้ใช้ฟิลด์ที่ไม่ได้ใช้เท่านั้น ดูคำตอบนี้
Stefan Mücke

12

ในทางทฤษฎีคุณไม่สามารถกำหนดรหัสที่ไม่ได้ใช้อย่างไม่แน่นอน มีข้อพิสูจน์ทางคณิตศาสตร์ของเรื่องนี้ (นี่เป็นกรณีพิเศษของทฤษฎีบททั่วไปที่มากกว่า) หากคุณสงสัยให้ค้นหาปัญหาการหยุดชะงัก

สิ่งนี้สามารถประจักษ์เองในโค้ด Java ได้หลายวิธี:

  • กำลังโหลดคลาสที่อิงจากอินพุตของผู้ใช้ไฟล์กำหนดค่ารายการฐานข้อมูล ฯลฯ
  • กำลังโหลดรหัสภายนอก
  • ผ่านต้นไม้วัตถุไปยังห้องสมุดบุคคลที่สาม;
  • เป็นต้น

ที่ถูกกล่าวว่าฉันใช้ IDEA IntelliJ เป็น IDE ตัวเลือกของฉันและมีเครื่องมือวิเคราะห์ที่ครอบคลุมสำหรับการพึ่งพา findign ระหว่างโมดูลวิธีที่ไม่ได้ใช้สมาชิกที่ไม่ได้ใช้คลาสที่ไม่ได้ใช้ ฯลฯ มันค่อนข้างฉลาดเช่นเดียวกับวิธีส่วนตัวที่ไม่ได้เรียกว่า ติดแท็กที่ไม่ได้ใช้ แต่วิธีสาธารณะต้องมีการวิเคราะห์เพิ่มเติม


1
ขอบคุณสำหรับข้อมูลของคุณ เราใช้ IntelliJ และได้รับความช่วยเหลือบ้าง สำหรับปัญหาการหยุดชะงักและความลังเลของฉันฉันคุ้นเคยกับทฤษฎี แต่เราไม่จำเป็นต้องแก้ปัญหาที่กำหนดขึ้น
บีบ

12
การเปิดประโยคนั้นแรงเกินไป เช่นเดียวกับปัญหาการหยุดชะงัก (มักจะมีการกล่าวถึงในทางที่ผิด / ถูกทารุณกรรม) ไม่มีวิธีแก้ปัญหาทั่วไปที่สมบูรณ์ แต่มีกรณีพิเศษมากมายที่ตรวจจับได้
joel.neely

9
แม้ว่าจะไม่มีวิธีแก้ปัญหาทั่วไปสำหรับภาษาที่มีการประเมินและ / หรือการสะท้อน แต่ก็มีหลายกรณีที่รหัสไม่สามารถเข้าถึงได้
pjc50

1
หากไม่มีการไตร่ตรองและมีซอร์สโค้ดเต็มรูปแบบภาษาที่พิมพ์แบบคงที่ควรทำให้ง่ายต่อการกำหนดรหัสที่ไม่ได้ใช้ทั้งหมด
Bill K

คุณไม่สามารถค้นหาได้ว่าไม่สามารถเข้าถึงได้โดยการสะท้อนกลับหรือจากผู้โทรภายนอก แต่คุณสามารถค้นหารหัสที่พิสูจน์ได้ว่าไม่สามารถเข้าถึงได้จากจุดเริ่มต้นที่กำหนดหรือชุดของจุดเข้า
nafg

8

ใน Eclipse Goto Windows> การกำหนดค่าตามความชอบ> Java> คอมไพเลอร์> ข้อผิดพลาด / คำเตือน
และเปลี่ยนเป็นข้อผิดพลาดทั้งหมด แก้ไขข้อผิดพลาดทั้งหมด นี่เป็นวิธีที่ง่ายที่สุด ความงามคือมันจะช่วยให้คุณสามารถทำความสะอาดรหัสในขณะที่คุณเขียน

รหัสหน้าจอ Eclipse:

ป้อนคำอธิบายรูปภาพที่นี่


5

IntelliJ มีเครื่องมือวิเคราะห์รหัสสำหรับตรวจจับโค้ดที่ไม่ได้ใช้ คุณควรลองสร้างฟิลด์ / เมธอด / คลาสให้มากที่สุดเท่าที่จะเป็นสาธารณะและจะแสดงเมธอด / ฟิลด์ / คลาสที่ไม่ได้ใช้มากขึ้น

ฉันจะพยายามค้นหารหัสที่ซ้ำกันเพื่อลดปริมาณรหัส

ข้อเสนอแนะสุดท้ายของฉันคือพยายามค้นหาโอเพนซอร์สซึ่งถ้าใช้จะทำให้โค้ดของคุณง่ายขึ้น


ตัวอย่างใด ๆ ของเครื่องมือเหล่านี้คืออะไร?
orbfish

@orbfish คุณสามารถเรียกใช้Analyse=> Run inspection by name=>unused
Peter Lawrey

5

มุมมองโครงสร้าง101จะให้รายการ (และกราฟการพึ่งพา) ของ "เด็กกำพร้า" หรือ " กลุ่มเด็กกำพร้า" ใด ๆของชั้นเรียนหรือแพคเกจที่ไม่มีการอ้างอิงถึงหรือจากกลุ่ม "หลัก"


สิ่งนี้ใช้ได้กับตัวแปร / วิธีการภายในคลาสหรือไม่
Joeblackdev

ฉันจะรู้ได้อย่างไรว่าควรทำงานร่วมกับ Eclipse 4.3 หรือไม่
Erik Kaplun

3

DCD ไม่ใช่ปลั๊กอินสำหรับ IDE บางตัว แต่สามารถเรียกใช้จากมดหรือสแตนด์อโลน ดูเหมือนว่าเครื่องมือแบบคงที่และจะสามารถทำในสิ่งที่ PMD และ FindBugs ไม่สามารถ ฉันจะลองดู

PS ดังกล่าวในความคิดเห็นด้านล่างโครงการมีชีวิตอยู่ในขณะนี้ในGitHub


สิ่งนี้ควรลงไปเนื่องจากความคิดเห็นที่ไม่ได้รับคำตอบ
นับ

โปรดอัปเดตคำตอบของคุณเพื่อลบคำสั่งของคุณที่ DCD "ดูตายแล้ว" รุ่น 2.1 ได้รับการปล่อยตัว 12 วันที่ผ่านมา นอกจากนี้ลิงก์ในคำตอบของคุณใช้งานไม่ได้
skomisa

2

มีเครื่องมือที่รหัสโปรไฟล์และให้ข้อมูลครอบคลุมรหัส สิ่งนี้จะช่วยให้คุณเห็นว่าโค้ดถูกเรียกใช้มากน้อยเพียงใด คุณสามารถใช้เครื่องมือเหล่านี้เพื่อค้นหาว่าคุณมีรหัสเด็กกำพร้าเท่าใด


2
  • FindBugs นั้นยอดเยี่ยมสำหรับสิ่งนี้
  • PMD (Project Mess Detector) เป็นอีกเครื่องมือหนึ่งที่สามารถใช้ได้

อย่างไรก็ตามไม่สามารถหาวิธีการคงที่สาธารณะที่ไม่ได้ใช้ในพื้นที่ทำงาน หากใครรู้ของเครื่องมือดังกล่าวโปรดแจ้งให้เราทราบ


1

เครื่องมือครอบคลุมผู้ใช้เช่น EMMA แต่ไม่ใช่เครื่องมือแบบสแตติก (เช่นต้องใช้แอปพลิเคชันจริงผ่านการทดสอบการถดถอยและผ่านทุกกรณีข้อผิดพลาดที่เป็นไปได้ซึ่งก็คือเป็นไปไม่ได้ :)

ถึงกระนั้น EMMA ก็มีประโยชน์มาก


1

เครื่องมือครอบคลุมรหัสเช่น Emma, ​​Cobertura และ Clover จะใช้รหัสของคุณและบันทึกว่าส่วนใดของมันที่ถูกเรียกใช้โดยใช้ชุดการทดสอบ สิ่งนี้มีประโยชน์มากและควรเป็นส่วนหนึ่งของกระบวนการพัฒนาของคุณ มันจะช่วยให้คุณระบุว่าชุดทดสอบของคุณครอบคลุมรหัสของคุณได้ดีเพียงใด

อย่างไรก็ตามนี่ไม่ใช่สิ่งเดียวกับการระบุรหัสตายจริง มันจะระบุรหัสที่ครอบคลุม (หรือไม่ครอบคลุม) โดยการทดสอบ สิ่งนี้สามารถให้ผลบวกเป็นเท็จแก่คุณ (หากการทดสอบของคุณไม่ครอบคลุมทุกสถานการณ์) รวมถึงค่าลบที่ผิดพลาด (หากรหัสการทดสอบการเข้าถึงที่ไม่เคยใช้จริงในสถานการณ์จริง)

ฉันคิดว่าวิธีที่ดีที่สุดในการระบุรหัสที่ตายแล้วจริงๆคือการใช้รหัสของคุณด้วยเครื่องมือครอบคลุมในสภาพแวดล้อมการทำงานสดและเพื่อวิเคราะห์การครอบคลุมรหัสในช่วงระยะเวลาหนึ่ง

หากคุณกำลังทำงานอยู่ในสภาพแวดล้อมที่สมดุลซ้ำซ้อนโหลด (และถ้าไม่ทำไมไม่?) แล้วฉันคิดว่ามันจะทำให้รู้สึกถึงเครื่องมือเดียวอินสแตนซ์ของแอปพลิเคชันของคุณและการกำหนดค่าโหลดบาลานเซอร์ของคุณ ผู้ใช้ของคุณทำงานบนอินสแตนซ์ที่ใช้เครื่องมือของคุณ หากคุณทำสิ่งนี้เป็นระยะเวลานาน (เพื่อให้แน่ใจว่าคุณได้ครอบคลุมสถานการณ์การใช้งานจริงทั้งหมด - รูปแบบตามฤดูกาล) คุณควรจะเห็นว่าส่วนใดของรหัสของคุณที่เข้าถึงได้ภายใต้การใช้งานจริงและส่วนใด ไม่สามารถเข้าถึงได้จริง ๆ และรหัสที่ตายแล้ว

ฉันไม่เคยเห็นสิ่งนี้เป็นการส่วนตัวและไม่ทราบว่าเครื่องมือดังกล่าวสามารถใช้ในการทำเครื่องมือและวิเคราะห์รหัสที่ไม่ได้เรียกใช้ผ่านชุดทดสอบ - แต่ฉันมั่นใจว่าพวกเขาสามารถ


1

มีโครงการ Java - Dead Code Detector (DCD) สำหรับซอร์สโค้ดมันใช้งานไม่ได้ แต่สำหรับไฟล์. jar มันดีจริงๆ รวมทั้งคุณสามารถกรองตามชั้นเรียนและตามวิธีการ


1

Netbeans ที่นี่เป็นปลั๊กอินสำหรับ Netbeans ตรวจจับรหัสตายตรวจจับรหัสตาย

มันจะดีกว่าถ้ามันสามารถเชื่อมโยงและเน้นรหัสที่ไม่ได้ใช้ คุณสามารถลงคะแนนและแสดงความคิดเห็นได้ที่นี่: Bug 181458 - ค้นหาคลาสสาธารณะวิธีการและเขตข้อมูลที่ไม่ได้ใช้


0

Eclipse สามารถแสดง / ไฮไลต์รหัสที่ไม่สามารถเข้าถึงได้ JUnit สามารถแสดงการครอบคลุมโค้ดให้คุณได้ แต่คุณต้องมีการทดสอบบางอย่างและต้องตัดสินใจว่าการทดสอบที่เกี่ยวข้องนั้นขาดหายไปหรือไม่ได้ใช้รหัสจริงๆ


3
Eclipse จะบอกคุณว่าขอบเขตของวิธีนั้นเป็นแบบโลคัลหรือไม่ (เช่นส่วนตัว) และถึงอย่างนั้นคุณก็ไม่แน่ใจ 100% ... ด้วยวิธีการสะท้อนความเป็นส่วนตัวสามารถเรียกได้จากภายนอก
p3t0r

0

ฉันพบเครื่องมือครอบคลุมโคลเวอร์ซึ่งใช้รหัสเครื่องมือและไฮไลต์รหัสที่ใช้และไม่ได้ใช้งาน ไม่เหมือนกับ Google CodePro Analytics แต่ก็ใช้ได้กับ WebApplications (ตามประสบการณ์ของฉันและฉันอาจไม่ถูกต้องเกี่ยวกับ Google CodePro)

ข้อเสียเปรียบเพียงอย่างเดียวที่ฉันสังเกตคือมันไม่ได้คำนึงถึงส่วนต่อประสานของ Java


สรุปมันเป็นเครื่องมือ CI ฝั่งเซิร์ฟเวอร์ฟรี
Erik Kaplun

0

ฉันใช้ Doxygen เพื่อพัฒนาแผนผังการเรียกใช้เมธอดเพื่อค้นหาวิธีที่ไม่เคยถูกเรียก บนกราฟคุณจะพบหมู่เกาะของกลุ่มวิธีที่ไม่มีผู้โทร วิธีนี้ใช้ไม่ได้กับห้องสมุดเนื่องจากคุณต้องเริ่มจากจุดเข้าหลักบางจุดเสมอ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.