मुझे एक बड़े C # एप्लिकेशन को रिफलेक्टर करना है, और मुझे बहुत सारे फ़ंक्शंस मिले हैं जो कभी भी उपयोग नहीं किए जाते हैं। मैं अप्रयुक्त कोड के लिए कैसे जांच कर सकता हूं, इसलिए मैं सभी अप्रयुक्त कार्यों को हटा सकता हूं?
मुझे एक बड़े C # एप्लिकेशन को रिफलेक्टर करना है, और मुझे बहुत सारे फ़ंक्शंस मिले हैं जो कभी भी उपयोग नहीं किए जाते हैं। मैं अप्रयुक्त कोड के लिए कैसे जांच कर सकता हूं, इसलिए मैं सभी अप्रयुक्त कार्यों को हटा सकता हूं?
जवाबों:
हाँ, ReSharper ऐसा करता है। अपने समाधान और चयन "कोड मुद्दे खोजें" पर राइट क्लिक करें। परिणामों में से एक "अप्रयुक्त प्रतीक" है। यह आपको कक्षाएं, विधियाँ आदि दिखाएगा, जिनका उपयोग नहीं किया जाता है।
यह एक बड़ा सवाल है, लेकिन चेतावनी दी जाए कि आप यहाँ खतरनाक पानी में फैल रहे हैं। जब आप कोड हटा रहे हैं तो आपको यह सुनिश्चित करना होगा कि आप अक्सर संकलन और परीक्षण कर रहे हैं।
एक महान उपकरण दिमाग में आया:
ND निर्भर - यह उपकरण सिर्फ अद्भुत है। ग्रॉक करने में थोड़ा समय लगता है, और पहले 10 मिनट के बाद मुझे लगता है कि अधिकांश डेवलपर्स सिर्फ यह कहते हैं कि "इसे स्क्रू करें!" और एप्लिकेशन को हटा दें। एक बार जब आप ND निर्भर के लिए एक अच्छा अनुभव प्राप्त करते हैं, तो यह आपको अद्भुत जानकारी देता है कि आपके ऐप्स कैसे युग्मित हैं। इसे देखें: http://www.ndepend.com/ । सबसे महत्वपूर्ण बात, यह उपकरण आपको उन तरीकों को देखने की अनुमति देगा, जिनमें कोई प्रत्यक्ष कॉलर नहीं है। यह आपको उलटा भी दिखाएगा, विधानसभा में किसी भी विधि के लिए एक पूर्ण कॉल ट्री (या विधानसभाओं के बीच भी)।
आप जो भी उपकरण चुनते हैं, उसे हल्के में लेना कोई काम नहीं है। खासकर यदि आप लाइब्रेरी टाइप असेंबली पर सार्वजनिक तरीकों से काम कर रहे हैं, जैसा कि आप कभी नहीं जान सकते हैं कि कोई ऐप उन्हें कब संदर्भित कर रहा है।
जैसा कि जेफ ने बताया था कि एनडी पर निर्भर उपकरण अप्रयुक्त तरीकों, क्षेत्रों और प्रकारों को खोजने में मदद कर सकता है।
थोड़ा विस्तार करने के लिए, एनडीसिपेंड ने 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 नियमों का उपयोग करने के अलावा, मैं परीक्षण द्वारा कोड कवरेज को मापने और पूर्ण कवरेज के लिए प्रयास करने की सलाह दूंगा। अक्सर, आप देखेंगे कि कोड को परीक्षणों द्वारा कवर नहीं किया जा सकता है, वास्तव में अप्रयुक्त / मृत कोड है जिसे सुरक्षित रूप से त्याग दिया जा सकता है। यह विशेष रूप से जटिल एल्गोरिदम में उपयोगी है जहां यह स्पष्ट नहीं है कि कोड की एक शाखा उपलब्ध नहीं है या नहीं।
डिस्क्लेमर: मैं एनडिपेंडेंट के लिए काम करता हूं।
मैं यह भी उल्लेख करूंगा कि IOC उर्फ यूनिटी के उपयोग से ये आकलन भ्रामक हो सकते हैं। मैंने मिटाया हो सकता है, लेकिन कई बहुत महत्वपूर्ण वर्ग जो एकता के माध्यम से तात्कालिक हैं, उनके पास कोई तात्कालिकता नहीं है जहाँ तक कि ReSharper बता सकते हैं। अगर मैंने ReSharper सिफारिशों का पालन किया तो मैं hosed हो जाऊंगा!
सच्चाई यह है कि टूल आपको कभी भी 100% निश्चित उत्तर नहीं दे सकता है, लेकिन कवरेज टूल आपको पैसे के लिए बहुत अच्छा रन दे सकता है।
यदि आप व्यापक इकाई परीक्षण सूट के साथ गिनती करते हैं, तो आप परीक्षण कवरेज टूल का उपयोग करके देख सकते हैं कि परीक्षण चलाने के दौरान कोड की कौन सी पंक्तियों को निष्पादित नहीं किया गया था। आपको अभी भी कोड का मैन्युअल रूप से विश्लेषण करने की आवश्यकता होगी: परीक्षण कवरेज में सुधार के लिए या तो आप मृत कोड पर विचार करें या परीक्षण लिखें।
ऐसा ही एक उपकरण NCover है , जिसमें Sourceforge पर खुला स्रोत अग्रदूत है । एक अन्य विकल्प पार्टकवर है ।
स्टैकओवरफ़्लो पर इस उत्तर को देखें।
FXCop एक कोड विश्लेषक है ... यह अप्रयुक्त कोड खोजने की तुलना में बहुत अधिक है। मैंने थोड़ी देर के लिए FXCop का उपयोग किया, और इसकी सिफारिशों में इतना खो गया कि मैंने इसे अनइंस्टॉल कर दिया।
मुझे लगता है कि एनडीपीडी अधिक संभावित उम्मीदवार की तरह दिखता है।