दिलचस्प पोस्ट
सर्वर साइड कोड में System.out.println का उपयोग न करें एसवीजी आईएमजी तत्व अनुपात में यानी 9 में सम्मानित नहीं है रेल 4 प्रामाणिकता टोकन तार की सूची से खाली तार निकालें जावा संग्रहण को स्काला संग्रह में परिवर्तित करना Angularjs: त्रुटि: तर्क 'होम कंट्रोलर' एक समारोह नहीं है, अपरिभाषित हो गया कोणीय 2 मैन्युअल रूप से विशेष तत्व पर क्लिक ईवेंट फ़ायरिंग कैसे जाँचने के लिए कि एक स्ट्रिंग एक डबल करने के लिए parseable है? एक .net फ़नक <T> को एक शुद्ध अभिव्यक्ति में परिवर्तित करना <Func <T >> क्लाइंट-साइड फ़ॉर्म सत्यापन और इंटरैक्शन के लिए सर्वश्रेष्ठ जावास्क्रिप्ट समाधान? SQL सर्वर में डायनामिक पिवट तालिका Mod_php क्या है? एंबेडेड सी ++: एसटीएल का उपयोग करने के लिए या नहीं? जीआईटी एमवी और केवल डायरेक्टरी के मामले बदलते हैं कैसे क्रोम में "संपत्ति परिवर्तन पर ब्रेक"?

जावा परियोजनाओं में अप्रयुक्त / मृत कोड कैसे खोजें

बड़े जावा प्रोजेक्ट्स में अप्रयुक्त / मृत कोड ढूंढने के लिए आप कौन से टूल का उपयोग करते हैं? हमारा उत्पाद कुछ वर्षों के लिए विकास में रहा है, और मैन्युअल रूप से कोड का पता लगाने में कठिनाई हो रही है जो अब उपयोग में नहीं है। हम जितना संभव हो उतना अप्रयुक्त कोड हटाने की कोशिश करते हैं।

सामान्य रणनीतियों / तकनीकों (विशिष्ट उपकरणों के अलावा) के सुझाव भी सराहना करते हैं।

संपादित करें: ध्यान दें कि हम पहले से ही कोड कवरेज उपकरण (क्लोवर, इंटेलीज) का उपयोग करते हैं, लेकिन ये थोड़ी मदद के हैं मृत कोड में अभी भी इकाई परीक्षण है, और कवर के रूप में दिखाई देता है। मुझे लगता है कि एक आदर्श उपकरण कोड के समूहों की पहचान करेगा, जिस पर इसके आधार पर बहुत कम अन्य कोड होता है, जिससे दस्तावेज़ मैनुअल निरीक्षण की अनुमति मिलती है।

Solutions Collecting From Web of "जावा परियोजनाओं में अप्रयुक्त / मृत कोड कैसे खोजें"

मैं चल रहे सिस्टम को कोड के उपयोग के लॉग रखने के लिए लिखूंगा, और उसके बाद महीनों या वर्षों के लिए उपयोग नहीं किया गया कोड का निरीक्षण करना शुरू करूँगा

उदाहरण के लिए यदि आप अप्रयुक्त वर्गों में दिलचस्पी रखते हैं, तो सभी कक्षाएं लॉग इन करने के लिए सहायक हो सकती हैं जब उदाहरण बनाये जाते हैं। और फिर एक छोटी सी स्क्रिप्ट अप्रयुक्त कक्षाओं को खोजने के लिए कक्षाओं की पूरी सूची के खिलाफ इन लॉग की तुलना कर सकती है।

बेशक, यदि आप विधि स्तर पर जाते हैं तो आपको प्रदर्शन को ध्यान में रखना चाहिए। उदाहरण के लिए, विधियां केवल उनके पहले उपयोग को लॉग कर सकती थीं मैं नहीं जानता कि यह जावा में सबसे अच्छा कैसे किया जाता है। हमने स्मालटाक में यह किया है, जो एक गतिशील भाषा है और इस प्रकार रनटाइम पर कोड संशोधन की अनुमति देता है। लॉगिंग कॉल के साथ हम सभी तरीकों को लिखते हैं और पहली बार विधि के लॉगिंग के बाद लॉगिंग कोड की स्थापना रद्द कर देते हैं, इस प्रकार कुछ समय बाद कोई अधिक प्रदर्शन दंड उत्पन्न नहीं होती है। संभवत: जावा में स्थिर बूलियन झंडे के साथ ऐसा ही किया जा सकता है …

एक एक्लिप्स प्लगइन जो काफी अच्छी तरह से काम करता है Unused Code Detector

यह एक संपूर्ण प्रोजेक्ट, या एक विशिष्ट फ़ाइल को संसाधित करती है और विभिन्न अप्रयुक्त / मृत कोड विधियों को दिखाती है, साथ ही साथ दृश्यता परिवर्तन (यानी सार्वजनिक विधि जो संरक्षित या निजी हो सकती है) का सुझाव देती है।

हाल ही में Google द्वारा एक्लिप्स परियोजना के साथ CodePro जारी किया गया था यह मुफ़्त और अत्यधिक प्रभावी है प्लगइन में एक / कई प्रविष्टि बिंदु (नों) के साथ एक ' ढूँढें मृत कोड ' सुविधा है। बहुत अच्छी तरह से काम करता है

एक बात जिसे मैं एक्लिपसे में करने के लिए जाना जाता था, एक ही कक्षा में, अपने सभी तरीकों को निजी के लिए बदल देता है और फिर मुझे क्या शिकायतें मिलती हैं। उपयोग किए जाने वाले तरीकों के लिए, यह त्रुटियों को भड़काने के लिए, और मैं उन्हें निम्न पहुंच स्तर पर वापस कर सकता हूं। अप्रयुक्त विधियों के लिए, यह अप्रयुक्त विधियों के बारे में चेतावनी को भड़काने, और तब उनको हटाया जा सकता है और बोनस के रूप में, आपको अक्सर कुछ सार्वजनिक विधियां मिलती हैं जिन्हें निजी और निजी बनाए जा सकते हैं

लेकिन यह बहुत मैनुअल है।

मुझे आश्चर्य है कि प्रोगुर्ड का उल्लेख यहां नहीं किया गया है। यह लगभग सबसे अधिक परिपक्व उत्पादों में से एक है

प्रोगार्ड एक फ्री जावा क्लास फ़ाइल सिकुंकर, ऑप्टिमाइज़र, ऑब्फ़सकेटर, और प्रीवेरिफायर है। यह अप्रयुक्त वर्ग, फ़ील्ड, विधियों, और विशेषताओं को पता लगाता है और हटाता है। यह bytecode का अनुकूलन करता है और अप्रयुक्त निर्देशों को निकालता है। यह शेष अर्थ, खेतों और लघु अर्थ वाले नामों का उपयोग करने वाले तरीकों का नाम बदलता है। अंत में, यह जावा 6 या जावा माइक्रो संस्करण के लिए प्रसंस्कृत कोड को preverifies।

प्रोगार्ड के कुछ उपयोग हैं:

  • छोटे कोड अभिलेखागार के लिए अधिक कॉम्पैक्ट कोड बनाना, नेटवर्क भर में तेज़ी से स्थानांतरित करना, तेज़ लोड हो रहा है, और छोटे स्मृति पैरों के निशान।
  • कार्यक्रमों और पुस्तकालयों को रिवर्स-इंजीनियर के लिए कठिन बनाना
  • मृत कोड सूचीबद्ध करना, इसलिए इसे स्रोत कोड से हटाया जा सकता है
  • जावा 6 या उच्चतर के लिए मौजूदा क्लास फाइलों को पुनःप्राप्ति और पूर्ववर्ती करने के लिए, अपने तेज वर्ग लोडिंग का पूरा लाभ लेने के लिए।

अपने कोडबेस को लिखने के लिए एक परीक्षण कवरेज उपकरण का उपयोग करें, फिर आवेदन को स्वयं चलाएं, न कि परीक्षण।

एम्मा और एक्लेममा आपको अच्छी रिपोर्ट देंगे कि कोड के किसी भी भाग के लिए कौन से कक्षाएं चलती हैं।

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

सिद्धांत रूप में, आप निश्चित रूप से अप्रयुक्त कोड नहीं खोज सकते। यह एक गणितीय सबूत है (अच्छी तरह से, यह एक अधिक सामान्य प्रमेय का एक विशेष मामला है) यदि आप उत्सुक हैं, तो समस्या का हल देखें

यह कई तरह से जावा कोड में प्रकट हो सकता है:

  • उपयोगकर्ता इनपुट, कॉन्फ़िग फाइल्स, डेटाबेस प्रविष्टियों आदि के आधार पर क्लासेस को लोड करना;
  • बाहरी कोड लोड हो रहा है;
  • वस्तु पेड़ को तीसरे पक्ष के पुस्तकालयों में पास करना;
  • आदि।

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

संरचना 101 स्लाइस परिप्रेक्ष्य "मुख्य" क्लस्टर से या कोई निर्भरता वाले वर्गों या संकुलों के "अनाथों" या "अनाथ समूह " की एक सूची (और निर्भरता ग्राफ़) देगा।

IntelliJ कोड का पता लगाने के लिए कोड विश्लेषण उपकरण है जो अप्रयुक्त है। आपको जितना संभव हो उतने क्षेत्रों / विधियों / वर्गों को गैर-सार्वजनिक बनाने की कोशिश करनी चाहिए और जो अधिक अप्रयुक्त विधियों / क्षेत्रों / वर्गों को दिखाएगा

मैं कोड की मात्रा को कम करने के एक तरीके के रूप में डुप्लिकेट कोड का पता लगाने का भी प्रयास करूंगा।

मेरा आखिरी सुझाव ओपन सोर्स कोड खोजने का प्रयास करता है, जो प्रयोग किया जाता है, तो आपके कोड को सरल बनाते हैं।

एक्लिप्स् गोटो में विंडोज> वरीयताएँ> जावा> कंपाइलर> त्रुटियाँ / चेतावनियाँ
और उन सभी को त्रुटियों में परिवर्तित करें सभी त्रुटियों को ठीक करें यह सबसे आसान तरीका है सुंदरता यह है कि यह आपको कोड को साफ करने की अनुमति देगा जैसा कि आप लिखते हैं।

स्क्रीनशॉट ग्रहण कोड:

यहां छवि विवरण दर्ज करें

ऐसे उपकरण हैं जो प्रोफाइल कोड और कोड कवरेज डेटा प्रदान करते हैं। यह आपको देखने देता है (कोड रन हो रहा है) यह कितना कहा जा रहा है आपको यह पता लगाने के लिए इनमें से कोई भी उपकरण प्राप्त हो सकता है कि आपके पास कितने अनाथ कोड हैं

डीसीडी कुछ आईडीई के लिए एक प्लगइन नहीं है, लेकिन चींटी या स्टैंडअलोन से चलाया जा सकता है। यह एक स्थिर उपकरण की तरह दिखता है और यह ऐसा कर सकता है जो पीएमडी और खोजबग्स नहीं कर सकते । मैं कोशिश करुंगा।

उपयोगकर्ता कवरेज उपकरण, जैसे ईएमएमए लेकिन यह स्थिर उपकरण नहीं है (यानी यह वास्तव में प्रतिगमन परीक्षण के माध्यम से आवेदन को चलाने की आवश्यकता है, और सभी संभावित त्रुटि मामलों के माध्यम से, जो, अच्छी तरह से असंभव है)

फिर भी, ईएमएमए बहुत उपयोगी है

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

हालांकि, यह वास्तविक मृत कोड की पहचान के समान नहीं है। यह केवल उस कोड को पहचानता है जो परीक्षणों द्वारा कवर किया गया है (या कवर नहीं किया गया) यह आपको झूठी सकारात्मक (यदि आपके परीक्षणों में सभी परिदृश्यों को शामिल नहीं किया गया है) और साथ ही गलत नकारात्मक (यदि आपका परीक्षण एक्सेस कोड वास्तव में वास्तविक दुनिया परिदृश्य में कभी नहीं उपयोग किया जाता है) दे सकता है।

मैं वास्तव में मृत कोड की पहचान करने का सर्वोत्तम तरीका कल्पना करता हूं कि आपके कोड को लाइव चलने वाले वातावरण में एक उपकरण के साथ लिखना होगा और समय की विस्तारित अवधि में कोड कवरेज का विश्लेषण करना होगा।

यदि आप एक भार संतुलित अनावश्यक माहौल में चल रहे हैं (और यदि नहीं, तो क्यों नहीं?) तो मुझे लगता है कि यह केवल आपके आवेदन के एक उदाहरण का मतलब होगा और आपके लोड बैलेंसर को कॉन्फ़िगर करने के लिए जैसे कि एक यादृच्छिक, लेकिन छोटा हिस्सा आपके उपयोगकर्ता आपके इंस्ट्रूमेंट इंस्टेंस पर चलते हैं अगर आप समय की एक विस्तारित अवधि (यह सुनिश्चित करने के लिए कि आपने सभी वास्तविक दुनिया उपयोग परिदृश्य – ऐसे मौसमी बदलाव) को कवर किया है, तो आपको यह देखने में सक्षम होना चाहिए कि आपके कोड के किन क्षेत्रों को वास्तविक दुनिया के उपयोग के तहत पहुंचाया गया है और किन भागों वास्तव में कभी नहीं पहुंचा और इसलिए मृत कोड है

मैंने इसे कभी भी व्यक्तिगत रूप से नहीं देखा है, और यह नहीं पता है कि उपर्युक्त उपकरणों का उपयोग उपकरण के लिए किया जा सकता है और उसका परीक्षण किया जा सकता है जो एक परीक्षण सूट के माध्यम से लागू नहीं किया जा रहा है – लेकिन मुझे यकीन है कि वे हो सकते हैं।

  • इस प्रकार की चीज़ के लिए FindBugs उत्कृष्ट है
  • पीएमडी (प्रोजेक्ट मैस डिटेक्टर) एक अन्य उपकरण है जिसका उपयोग किया जा सकता है

हालांकि, एक कार्यस्थल में अप्रयुक्त सार्वजनिक स्थैतिक तरीकों को न मिल पाता है। अगर किसी को इस उपकरण के बारे में पता है तो कृपया मुझे बताना।

नेटबीन्स यहां नेटबीन्स के मृत कोड डिटेक्टर के लिए एक प्लगइन है

यह बेहतर होगा यदि यह अप्रयुक्त कोड को लिंक और हाइलाइट कर सके। आप वोट कर सकते हैं और यहां टिप्पणी कर सकते हैं: बग 181458 – अप्रयुक्त सार्वजनिक कक्षाओं, विधियों, फ़ील्ड्स खोजें

ग्रहण / हाइलाइट कोड दिखा सकता है जो तक नहीं पहुंचा जा सकता है। JUnit आपको कोड कवरेज दिखा सकता है, लेकिन आपको कुछ परीक्षणों की आवश्यकता होगी और तय करना होगा कि प्रासंगिक परीक्षण अनुपलब्ध है या कोड वास्तव में अप्रयुक्त है।

मुझे क्लॉवर कवरेज उपकरण मिला है जो उपकरण कोड और हाइलाइट करता है जो कि उपयोग किया जाता है और वह अप्रयुक्त है। Google CodePro Analytics के विपरीत, यह WebApplications के लिए भी काम करता है (मेरे अनुभव के अनुसार और मैं Google CodePro के बारे में गलत हो सकता है)।

मैंने देखा कि एकमात्र दोष यह है कि यह जावा इंटरफेस को खाते में नहीं लेता है।

एक जावा प्रोजेक्ट है – डेड कोड डिटेक्टर (डीसीडी)। स्रोत कोड के लिए यह ठीक से काम नहीं करता है, लेकिन .jar फ़ाइल के लिए – यह वास्तव में अच्छा है प्लस आप वर्ग द्वारा और विधि द्वारा फ़िल्टर कर सकते हैं।

मैं उन विधियों का पता लगाने के लिए एक विधि कॉल मैप का विकास करने के लिए दोक्सीजन का उपयोग करता हूं जिन्हें कभी नहीं कहा जाता है। ग्राफ़ पर आपको कॉल करने वाले बिना विधि समूहों के द्वीप मिलेंगे। यह पुस्तकालयों के लिए काम नहीं करता है क्योंकि आपको हमेशा कुछ मुख्य प्रवेश बिंदु से शुरू करना चाहिए।