अप्रयुक्त कोड ढूंढें [बंद]


208

मुझे एक बड़े C # एप्लिकेशन को रिफलेक्टर करना है, और मुझे बहुत सारे फ़ंक्शंस मिले हैं जो कभी भी उपयोग नहीं किए जाते हैं। मैं अप्रयुक्त कोड के लिए कैसे जांच कर सकता हूं, इसलिए मैं सभी अप्रयुक्त कार्यों को हटा सकता हूं?




मुझे आश्चर्य है कि इसे विषय के रूप में लेबल किया गया है, मुझे प्रश्न लिखने के 11 साल बाद उपयोगी और उत्तर मिला। प्रदान किए गए ऑफ-टॉपिक लिंक का कहना है कि "... सॉफ्टवेयर टूल आमतौर पर प्रोग्रामर द्वारा उपयोग किया जाता है; और ..." SO के लिए निश्चित रूप से प्रासंगिक है।
शबरीपेरेरा

जवाबों:


218

हाँ, ReSharper ऐसा करता है। अपने समाधान और चयन "कोड मुद्दे खोजें" पर राइट क्लिक करें। परिणामों में से एक "अप्रयुक्त प्रतीक" है। यह आपको कक्षाएं, विधियाँ आदि दिखाएगा, जिनका उपयोग नहीं किया जाता है।


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

16
Resharper एक महान उपकरण है, लेकिन मैंने इसे इस कार्य के लिए अविश्वसनीय माना है। मेरे पास एक सार्वजनिक तरीका है जहां मैंने सभी संदर्भ हटा दिए हैं। यदि मैं विधि पर राइट-क्लिक करता हूं और Show Usages का चयन करता हूं, तो कोई भी नहीं हैं, लेकिन Resharper के कोड मुद्दे इसे अप्रयुक्त के रूप में सूचीबद्ध नहीं करते हैं।
user890155

9
हम निर्भरता इंजेक्शन का उपयोग कर रहे हैं। नतीजतन, सब कुछ पुनर्निर्मित करने के लिए उपयोग किया जाता है क्योंकि यहां तक ​​कि अप्रयुक्त प्रकार अभी भी एकता के साथ पंजीकृत हैं।
मॉन्टगोमरी 'मोंटी' जोन्स

11
@ user890155 ऐसा इसलिए होगा क्योंकि यह विधि सार्वजनिक है, पुस्तकालय वर्तमान समाधान में नहीं एक अन्य अनुप्रयोग द्वारा उपभोग किया जा सकता है। मेरा मानना ​​है कि यह कोड के मुद्दों के रूप में केवल आंतरिक और निजी तरीकों को ध्वजांकित करेगा यदि अप्रयुक्त हो।
लुकाज़ोइड

3
@elggarc निर्भरता इंजेक्शन के बारे में, यहां बताए गए एजेंट Mulder प्लगइन पर एक नज़र डालें: blogs.jetbrains.com/dotnet/2012/08/resharper-70-plug-ins प्रोजेक्ट होमपेज: hmemcpy.github.com/gentMulder Agent Mulder - के लिए समर्थन ऑटोफैक, कैसल विंडसर, यूनिटी जैसे डिपेंडेंसी इंजेक्शन फ्रेमवर्क। चूंकि ReSharper इन कंटेनरों के बारे में नहीं जानता है, इसलिए कक्षाओं को अक्सर अप्रयुक्त के रूप में चिह्नित किया जा सकता है, या त्वरित रूप से नहीं। एजेंट मुल्डर इन कक्षाओं का उपयोग किए जाने पर ReSharper को बताता है, और प्रत्येक कक्षा से पंजीकरण बिंदु पर नेविगेशन प्रदान करता है।
ग्रेजेर्ग्ज स्मुल्को

29

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

एक महान उपकरण दिमाग में आया:

ND निर्भर - यह उपकरण सिर्फ अद्भुत है। ग्रॉक करने में थोड़ा समय लगता है, और पहले 10 मिनट के बाद मुझे लगता है कि अधिकांश डेवलपर्स सिर्फ यह कहते हैं कि "इसे स्क्रू करें!" और एप्लिकेशन को हटा दें। एक बार जब आप ND निर्भर के लिए एक अच्छा अनुभव प्राप्त करते हैं, तो यह आपको अद्भुत जानकारी देता है कि आपके ऐप्स कैसे युग्मित हैं। इसे देखें: http://www.ndepend.com/ । सबसे महत्वपूर्ण बात, यह उपकरण आपको उन तरीकों को देखने की अनुमति देगा, जिनमें कोई प्रत्यक्ष कॉलर नहीं है। यह आपको उलटा भी दिखाएगा, विधानसभा में किसी भी विधि के लिए एक पूर्ण कॉल ट्री (या विधानसभाओं के बीच भी)।

आप जो भी उपकरण चुनते हैं, उसे हल्के में लेना कोई काम नहीं है। खासकर यदि आप लाइब्रेरी टाइप असेंबली पर सार्वजनिक तरीकों से काम कर रहे हैं, जैसा कि आप कभी नहीं जान सकते हैं कि कोई ऐप उन्हें कब संदर्भित कर रहा है।


4
सतर्कता का एक और शब्द, यदि आपका ऐप asp.net है, तो ND ND के साथ आपको अपनी साइट को प्री-कंपाइल करने की आवश्यकता होगी, ताकि आप कोड-बिहाइंड का विश्लेषण कर सकें और ND निर्भरता को aspx पृष्ठों से कॉल के बारे में पता न चल सके / पता न चल सके (अर्थात ObjectDadSSource में विधि कॉल) जैसे)
Jaime

16

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


15

जैसा कि जेफ ने बताया था कि एनडी पर निर्भर उपकरण अप्रयुक्त तरीकों, क्षेत्रों और प्रकारों को खोजने में मदद कर सकता है।

थोड़ा विस्तार करने के लिए, एनडीसिपेंड ने LINQ Query (CQLinq) पर कोड नियम लिखने का प्रस्ताव किया है । लगभग 200 डिफ़ॉल्ट कोड नियम प्रस्तावित हैं, जिनमें से 3 अप्रयुक्त / मृत कोड डिटेक्शन के लिए समर्पित हैं

मूल रूप से अप्रयुक्त विधि का पता लगाने के लिए ऐसा नियम दिखता है:

// <Name>Dead Methods</Name>
warnif count > 0 
from m in Application.Methods where !m.MethodsCallingMe.Any()
select m

अप्रयुक्त नियम अप्रयुक्त विधियों (मृत विधियों) को खोजने के लिए

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

ND निर्भर दृश्य स्टूडियो 2017,2015, 2013, 2012, 2010 में एकीकृत करता है, इस प्रकार इन नियमों को आईडीई के अंदर ठीक से जांचा / संपादित / संपादित किया जा सकता है । उपकरण को आपकी CI प्रक्रिया में भी एकीकृत किया जा सकता है और यह ऐसी रिपोर्ट बना सकता है जो नियमों का उल्लंघन और अपराधी तत्वों को दिखाएगा। ND निर्भरता भी एक है वी.एस. टीम सेवा विस्तार है

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

यह स्थैतिक विश्लेषण है , इसलिए नियम नामों में उपसर्ग संभावित है। एक कोड तत्व प्रयोग किया जाता है केवल प्रतिबिंब के माध्यम से , तो ये नियम इसे अप्रयुक्त मान सकते हैं जो कि ऐसा नहीं है।

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

डिस्क्लेमर: मैं एनडिपेंडेंट के लिए काम करता हूं।


6

मैं यह भी उल्लेख करूंगा कि IOC उर्फ ​​यूनिटी के उपयोग से ये आकलन भ्रामक हो सकते हैं। मैंने मिटाया हो सकता है, लेकिन कई बहुत महत्वपूर्ण वर्ग जो एकता के माध्यम से तात्कालिक हैं, उनके पास कोई तात्कालिकता नहीं है जहाँ तक कि ReSharper बता सकते हैं। अगर मैंने ReSharper सिफारिशों का पालन किया तो मैं hosed हो जाऊंगा!


4

ReSharper अप्रयुक्त कोड खोजने का एक बड़ा काम करता है।

वीएस आईडीई में, आप परिभाषा पर राइट क्लिक कर सकते हैं और 'फाइंड ऑल रिफरेंस' चुन सकते हैं, हालांकि यह केवल समाधान स्तर पर काम करता है।


1

सच्चाई यह है कि टूल आपको कभी भी 100% निश्चित उत्तर नहीं दे सकता है, लेकिन कवरेज टूल आपको पैसे के लिए बहुत अच्छा रन दे सकता है।

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

ऐसा ही एक उपकरण NCover है , जिसमें Sourceforge पर खुला स्रोत अग्रदूत है । एक अन्य विकल्प पार्टकवर है

स्टैकओवरफ़्लो पर इस उत्तर को देखें।


1

मैं AXTools CODESMART में आया हूँ..कि एक बार कोशिश करें। समीक्षा अनुभाग में कोड विश्लेषक का उपयोग करें। यह अन्य मुद्दों के साथ मृत स्थानीय और वैश्विक कार्यों को सूचीबद्ध करेगा।


0

FXCop एक कोड विश्लेषक है ... यह अप्रयुक्त कोड खोजने की तुलना में बहुत अधिक है। मैंने थोड़ी देर के लिए FXCop का उपयोग किया, और इसकी सिफारिशों में इतना खो गया कि मैंने इसे अनइंस्टॉल कर दिया।

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

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