पीएमडी और फाइंडबग्स के बीच अंतर क्या हैं?


107

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

जवाबों:


151

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

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

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

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


विशिष्ट त्रुटि कोड क्या है जो आपने देखा था जब एक संग्रह में ही होता है और यह FindBugs द्वारा एक संभावित बग क्यों चिह्नित किया जाता है?
गीक

अच्छी तरह से सोनारक्बी 6.3 के बाद से नहीं ... सोनारक्ब्बे को अब जावा 8 की जरूरत है और फाइंडबग्स केवल जावा 7 का समर्थन कर रहे हैं
मार्कस

22

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

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


2

पीएमडी है

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

FindBugs से बात नहीं करता है; वे पूरक हैं क्योंकि उनकी समस्या सेट समान नहीं है।
स्टीवंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.