ฉันใช้ทั้งสองอย่าง ฉันคิดว่าพวกเขาเสริมซึ่งกันและกัน
ดังที่คุณกล่าวไว้PMDทำงานกับซอร์สโค้ดดังนั้นจึงพบปัญหาเช่น: การละเมิดหลักการตั้งชื่อการขาดวงเล็บปีกกาการตรวจสอบค่าว่างผิดตำแหน่งรายการพารามิเตอร์แบบยาวตัวสร้างที่ไม่จำเป็นการขาดสวิตช์ในสวิตช์ ฯลฯ PMD ยังบอกคุณเกี่ยวกับCyclomatic ความซับซ้อนของรหัสของคุณซึ่งฉันพบว่ามีประโยชน์มาก (FindBugs ไม่ได้บอกคุณเกี่ยวกับความซับซ้อนของ Cyclomatic)
FindBugsทำงานบน bytecode ต่อไปนี้เป็นปัญหาบางประการที่ FindBugs พบว่า PMD ไม่ได้: วิธีการเท่ากับ () ล้มเหลวในประเภทย่อยวิธีการโคลนอาจส่งคืนค่า null การเปรียบเทียบการอ้างอิงของค่าบูลีนการร่ายที่เป็นไปไม่ได้ 32 บิต int ถูกเลื่อนโดยจำนวนที่ไม่อยู่ในช่วง 0-31 คอลเลกชันที่มีตัวมันเองวิธีการเท่ากับจะคืนค่าจริงเสมอลูปที่ไม่มีที่สิ้นสุดเป็นต้น
โดยปกติแล้วแต่ละคนจะพบปัญหาที่แตกต่างกัน ใช้ทั้งสองอย่าง เครื่องมือเหล่านี้สอนฉันมากมายเกี่ยวกับวิธีการเขียนโค้ด Java ที่ดี