2010-11-28 17 views
99

question comparing PMD and CheckStyle था। हालांकि, मुझे पीएमडी और फाइंडबग के बीच अंतर/समानता पर अच्छा ब्रेकडाउन नहीं मिल रहा है। मेरा मानना ​​है कि एक महत्वपूर्ण अंतर यह है कि पीएमडी स्रोत कोड पर काम करता है, जबकि FindBugs संकलित बाइटकोड फ़ाइलों पर काम करता है। लेकिन क्षमताओं के मामले में, क्या यह एक या/या पसंद होना चाहिए या वे एक दूसरे के पूरक हैं?पीएमडी और फाइंडबग के बीच अंतर क्या हैं?

उत्तर

136

मैं दोनों का उपयोग कर रहा हूं। मुझे लगता है कि वे एक दूसरे के पूरक हैं।

जैसा कि आपने कहा, स्रोत कोड पर PMD काम करता है और इसलिए इस तरह की समस्याओं पाता है: नामकरण रिवाजों का का उल्लंघन, घुंघराले ब्रेसिज़, गलत अशक्त जांच, लंबे पैरामीटर सूची, अनावश्यक निर्माता, स्विच में लापता ब्रेक, आदि की कमी PMD भी बताता है आप अपने कोड के Cyclomatic complexity के बारे में जो मुझे बहुत उपयोगी लगता है (FindBugs आपको चक्रवात जटिलता के बारे में नहीं बताता है)।

FindBugs बाइटकोड पर काम करता है। यहां कुछ समस्याएं हैं जिन्हें FindBugs पाता है जो पीएमडी नहीं करता है: बराबर() विधि उपप्रकारों पर विफल हो जाती है, क्लोन विधि शून्य हो सकती है, बूलियन मानों की संदर्भ तुलना, असंभव कास्ट, 32 बिट int 0-31 की सीमा में नहीं है, एक संग्रह जिसमें स्वयं होता है, बराबर विधि हमेशा सत्य लौटाती है, एक अनंत लूप, आदि

आमतौर पर उनमें से प्रत्येक को समस्याओं का एक अलग सेट मिल जाता है। दोनों का उपयोग करें। इन औजारों ने मुझे अच्छा जावा कोड लिखने के बारे में बहुत कुछ सिखाया।

+0

आपके द्वारा संग्रहित होने पर विशिष्ट त्रुटि कोड क्या होता है और यह क्यों ढूँढता है कि FindBugs द्वारा संभावित बग चिह्नित किया गया है? – Geek

+0

इसके लायक होने के लिए, सोनार में दोनों (और कई अन्य) –

+0

शामिल हैं क्योंकि सोनारक्वे 6.3 अब से नहीं है ... सोनारक्वे को अब जावा 8 की आवश्यकता है और Findbugs केवल जावा 7 का समर्थन कर रहा है – Markus

20

PMD की सर्वश्रेष्ठ फीचर, अपने XPath नियम, एक नियम डिजाइनर के साथ बंडल आप आसानी से कोड के नमूनों से नए नियमों (रेगुलर एक्सप्रेशन से और XPath जीयूआई बिल्डरों के समान) का निर्माण करने देने के लिए है। FindBugs बॉक्स से बाहर मजबूत है, लेकिन परियोजना विशिष्ट नियमों और पैटर्न का निर्माण बहुत महत्वपूर्ण है।

उदाहरण के लिए, मुझे लूप के लिए 2 घोंसले वाली एक प्रदर्शन समस्या का सामना करना पड़ा, जिसके परिणामस्वरूप ओ (एन^2) चलने का समय होता है, जिसे आसानी से टाला जा सकता है। मैंने पीएमडी का उपयोग विज्ञापन-हॉक क्वेरी बनाने के लिए किया था, ताकि लूप के लिए नेस्टेड के अन्य उदाहरणों की समीक्षा की जा सके- // फॉरस्टेटमेंट/स्टेटमेंट // फोरस्टेटमेंट। इसने समस्या के 2 और उदाहरणों की ओर इशारा किया। यह एक सामान्य नियम नहीं है।

1

PMD

  • प्रसिद्ध
  • उद्योग में व्यापक रूप से इस्तेमाल
  • आप एक्सएमएल
  • में अपने नियम जोड़ सकते हैं आप त्रुटियाँ स्तर और चेतावनी के स्तर में विस्तृत विश्लेषण देता
  • आप भी स्कैन कर सकते हैं "कॉपी और पेस्ट लाइनों" के लिए आपका कोड। डुप्लिकेट कोड। यह जावा ओप्स को लागू करने के बारे में अच्छा विचार देता है।
संबंधित मुद्दे