मैं दोनों का उपयोग कर रहा हूं। मुझे लगता है कि वे एक दूसरे के पूरक हैं।
जैसा कि आपने कहा, पीएमडी स्रोत कोड पर काम करता है और इसलिए समस्याओं का पता लगाता है: नामकरण सम्मेलनों का उल्लंघन, घुंघराले ब्रेस की कमी, गलत जांच, लंबी पैरामीटर सूची, अनावश्यक निर्माणकर्ता, स्विच में चूक, आदि। पीएमडी साइक्लोमैटिक के बारे में भी बताता है। आपके कोड की जटिलता जो मुझे बहुत उपयोगी लगती है (FindBugs आपको Cyclomatic जटिलता के बारे में नहीं बताता है)।
फाइंडबग्स बायटेकोड पर काम करता है। यहाँ कुछ समस्याएं हैं FindBugs जो पीएमडी नहीं पाती हैं: बराबर () विधि उपप्रकारों पर विफल रहती है, क्लोन विधि शून्य वापस आ सकती है, बूलियन मूल्यों की संदर्भ तुलना, असंभव डाली, 32bit इंट 0-31 की सीमा में नहीं एक राशि द्वारा स्थानांतरित की गई। एक संग्रह जिसमें स्वयं शामिल है, समान पद्धति हमेशा सही होती है, एक अनंत लूप, आदि।
आमतौर पर उनमें से प्रत्येक समस्या का एक अलग सेट पाता है। दोनों का उपयोग करें। इन टूल्स ने मुझे बहुत कुछ सिखाया कि अच्छा जावा कोड कैसे लिखा जाता है।