कोड विश्लेषण क्या है?
कोड विश्लेषण (पहले FxCop) एक स्थिर विश्लेषण उपकरण है जो सामान्य पैटर्न की खोज करता है जो यह संकेत दे सकता है कि स्रोत कोड में कुछ गलत है। उदाहरण के लिए, यदि एक वर्ग का उदाहरण जो लागू IDisposable
नहीं होता है, तो उसका ठीक से निपटान नहीं किया जाता है, तो कोड विश्लेषण एक चेतावनी का उत्सर्जन करेगा:
private void DoSomething()
{
var connection = new SqlConnection(...);
this.ChangeSomeData(connection);
}
यह कोड के पिछले टुकड़े का सही कार्यान्वयन है:
private void DoSomething()
{
using (var connection = new SqlConnection(...))
{
this.ChangeSomeData(connection);
}
}
किसी भी स्थिर विश्लेषण उपकरण के रूप में, कोड विश्लेषण का उद्देश्य उन पैटर्न को खोजना है जो मैन्युअल रूप से खोजने के लिए बोझिल (या बस उबाऊ) हैं। उदाहरण के लिए, पिछले उदाहरण में, किसी डेवलपर के लिए यह जांचने के लिए काफी उबाऊ हो सकता है कि वह किसी भी वर्ग का उपयोग करता है IDisposable
(या सभी .NET फ्रेमवर्क वर्गों को याद रखने के लिए जो इसे लागू करते हैं)।
कौन से प्रोजेक्ट क्वालिफाई हुए?
यद्यपि यह किसी भी स्थिर विश्लेषण उपकरण के रूप में झूठी सकारात्मकता के अधीन है, यह आमतौर पर दमन का उपयोग किए बिना व्यवसाय-महत्वपूर्ण कोड के लिए शून्य चेतावनी को लक्षित करने के लिए फायदेमंद है । विजुअल स्टूडियो के भीतर, कोड विश्लेषण को संकलन-समय पर चलाने के लिए कॉन्फ़िगर किया जा सकता है; यदि प्रोजेक्ट सेटिंग्स यह भी निर्दिष्ट करती हैं कि चेतावनियों को त्रुटियों के रूप में माना जाना चाहिए, तो कोड विश्लेषण नियमों का उल्लंघन किसी का ध्यान नहीं रहेगा।
चूंकि स्थैतिक विश्लेषण मध्यम या बड़ी परियोजनाओं के लिए कुछ समय ले सकता है, इसलिए इसे अक्सर डेवलपर की मशीनों से टीएफएस बिल्ड सर्वर पर स्थानांतरित करना एक अच्छा विचार है। प्री-कमिट के दौरान कोड विश्लेषण चलाना एक अच्छा विचार नहीं है (स्टाइलकॉप के विपरीत), यह अभी भी निर्माण पर चल सकता है और चेतावनी मिलने पर इसे विफल कर सकता है।
गैर-व्यावसायिक-महत्वपूर्ण कोड के लिए, कोड विश्लेषण मैन्युअल रूप से Visual Studio या कमांड लाइन से चलाया जा सकता है । चेक और चेतावनियाँ आपकी आवश्यकताओं के अनुरूप परियोजना गुणों में ठीक-ठाक हो सकती हैं। उदाहरण के लिए, यदि आपकी परियोजना का स्थानीयकरण करने का इरादा नहीं है , तो वैश्वीकरण की चेतावनी को बंद किया जा सकता है।
स्टाइलकॉप के साथ के रूप में, यह तय करना आवश्यक है कि परियोजना परियोजना की शुरुआत से कोड विश्लेषण से शून्य चेतावनी को लक्षित करेगी या नहीं। एक विद्यमान परियोजना में इसका परिचय बहुत दर्दनाक हो सकता है।
क्या यह स्टाइलकॉप से अलग है?
ध्यान दें कि कोड विश्लेषण स्टाइलकॉप के समान नहीं है । पहला अंतर यह है कि कोड विश्लेषण संकलित विधानसभा के साथ काम करता है, जबकि स्टाइलकॉप स्वयं स्रोत के साथ काम करता है। दूसरा (और सबसे महत्वपूर्ण) अंतर यह है कि कोड विश्लेषण पेटेंट के लिए खोज करता है जो बग का संकेत दे सकता है, जबकि स्टाइलकॉप केवल शैली के नियमों को लागू कर रहा है - आपकी टीम द्वारा उपयोग किया जाने वाला एक साधारण सम्मेलन।
कोड विश्लेषण उन शुरुआती लोगों के लिए भी विशेष रूप से उपयोगी है जो भाषा को अच्छी तरह से नहीं जानते हैं , क्योंकि यह अक्सर "अहा!" को जन्म दे सकता है। क्षणों। उदाहरण के लिए, CA2105: सरणी फ़ील्ड को केवल पढ़ने के लिए नहीं खोजा जा सकता है जो किसी सरणी को केवल-पढ़ने के लिए चिह्नित के रूप में चिह्नित करता है, यह इसे अपरिवर्तनीय नहीं बनाता है, क्योंकि कुछ भी सरणी के भीतर तत्वों को बदलने के लिए मना नहीं करता है। स्टाइलकॉप खोजों के लिए नेतृत्व नहीं करता है: यह जानने में कुछ भी दिलचस्प नहीं है कि फ़ील्ड लोअरकेस अक्षर से शुरू होती हैं या स्थानीय कॉल के साथ उपसर्ग होना चाहिए this
।
यहां तक कि अगर कुछ नियमों को कोड विश्लेषण और स्टाइलकॉप (जैसे CA1707: आइडेंटिफ़ायर में अंडरसीकोर बनाम SA1310 नहीं होना चाहिए: फ़ील्ड नामों में अंडरस्कोर नहीं होना चाहिए ) दोनों लागू होते हैं , तो वे दो उपकरण पूरक होते हैं और अक्सर साइड में उपयोग किए जाते हैं।
हमारे पास पहले से ही कोड समीक्षाएं हैं
कोड समीक्षाओं की उपस्थिति कोड विश्लेषण से बचने का एक कारण नहीं है। कोड विश्लेषण और स्टाइलकॉप दोनों कोड समीक्षा से पहले स्वचालित रूप से चीजों को खोजने में उत्कृष्ट हैं । एक कोड समीक्षा पिनपॉइंटिंग शैली की समस्याओं या समस्याग्रस्त पैटर्न को खर्च करने से भी बदतर कुछ नहीं है जो स्वचालित रूप से पाया जा सकता था। दिलचस्प सामान के लिए कोड समीक्षा रखें।
एक अन्य पहलू यह है कि मानव समीक्षक जरूरी नहीं कि कोड विश्लेषण द्वारा पाई गई समस्याओं को ठीक कर सकें। उदाहरण के लिए, एक वर्ग लागू करने का एक उदाहरण IDisposable
एक स्थान पर बनाया जा सकता है, और फिर एक अलग स्थान पर निपटारा किया जा सकता है। एक समीक्षक को इसे खोजने में कुछ समय लगेगा, जबकि इसे खोजने के लिए स्थैतिक विश्लेषण उपकरण के लिए बस कुछ मिलीसेकंड का समय लगता है।