स्टेटिक कोड विश्लेषण और कोड समीक्षा के बीच अंतर क्या है?


9

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


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

9
दो शब्दों में? "एक मसि्तष्क"।
MSalters

जवाबों:


19

कोड की समीक्षा कुछ लोग करते हैं, स्थैतिक विश्लेषण कुछ मशीनें करते हैं। स्थैतिक विश्लेषण उपकरण (कभी-कभी अच्छे) होते हैं। कोड की समीक्षा तब होती है जब एक सहकर्मी / संरक्षक / प्रोफेसर / मित्र आपके कोड पर जाते हैं और आपको रचनात्मक आलोचना देते हैं।

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


2
मैं हमेशा इस धारणा के अधीन रहा हूं कि कोड की समीक्षा एक प्रकार का स्थैतिक विश्लेषण है, क्योंकि यह सॉफ्टवेयर के स्वास्थ्य को मापने के बिना इसे निष्पादित करने का एक तरीका है।
बुहब

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

बस जोड़ने के लिए, लिंट (स्थिर विश्लेषक): यार जिसकी जरूरत नहीं है !! सहकर्मी (समीक्षक): आप इसे इस तरह भी कर सकते हैं !!
कुशाल

11

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

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

ये दोनों दृष्टिकोण संदर्भ की कमी से ग्रस्त हैं: वे नहीं जानते कि क्या हासिल करना है।

कोड की समीक्षा एक अन्य कोडर द्वारा की जाती है, जो माना जाता है कि यह जानता है और जांच कर सकता है

  1. यदि कोड सही है
  2. यदि सॉफ्टवेयर शब्दार्थ रूप से सही है।

यह बहुत अधिक महंगा है और इसमें पुनरावृत्ति की एक अलग डिग्री है लेकिन एक बड़ी मदद है।

हमेशा की तरह, एक भी चांदी की गोली नहीं है जो सभी कीड़े को ठीक कर देगी और सभी समस्याओं से बच जाएगी। लागू करना - जितना संभव हो उतना जगह, कोड, समय, चेक के तीन रूपों (स्थिर, गतिशील, अधिक आँखें (और दिमाग) वास्तव में कोड को देख रहा है) की सिफारिश की जाती है।

पीएस: मुझे ध्यान देना चाहिए कि खरोंच से उपकरण को लागू करना आमतौर पर बहुत बेहतर होता है। झूठी सकारात्मकता के कारण विरासत प्रणाली को परिवर्तित करना बहुत कम आनंददायक अनुभव है। यदि आप खरोंच से शुरू करते हैं और हमेशा विश्लेषण उपकरण को साफ रखने का लक्ष्य रखते हैं, तो आप शायद बहुत सारी समस्याओं से बचेंगे।

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

ppps: स्थैतिक विश्लेषण स्थिर भाषाओं के लिए अधिक अनुकूल है, जैसे C या C ++। पायथन के लिए यह कहना वास्तव में मुश्किल हो सकता है कि क्या एक नाम जो एक बिंदु पर एक सूची को संदर्भित करता है, बाकी कार्यक्रम के लिए एक सूची को संदर्भित करेगा, इसके गतिशील गुणों के कारण। इसका मतलब यह नहीं है कि कुछ भी नहीं किया जा सकता है, PyPy शो की तरह एक JIT प्रयास के रूप में ।


2

कोड की समीक्षा तब होती है जब एक वरिष्ठ या एक समर्पित अधिकारी आपके कोड, कोडिंग के आपके तरीके, कोड में अनुसरण किए गए मानकों और विशेष रूप से कोड के तर्क स्तर की जांच करता है

जहां तक ​​स्थैतिक विश्लेषण का संबंध है, यह कंप्यूटर सॉफ्टवेयर का विश्लेषण है जो वास्तव में उस सॉफ्टवेयर से निर्मित कार्यक्रमों को निष्पादित किए बिना किया जाता है (निष्पादित कार्यक्रमों पर किए गए विश्लेषण को गतिशील विश्लेषण के रूप में जाना जाता है)

प्रौद्योगिकी के अनुसार उपकरणों की सूची नीचे दिए गए लिंक में दी गई है

स्थैतिक विश्लेषण के लिए उपकरणों की सूची

इसलिए कोड की समीक्षा और स्थिर विश्लेषण पूरी तरह से अलग शब्द हैं।


7
ओम का उत्तर अनिवार्य रूप से सही है, सिवाय इसके कि मैं 'ए सीनियर या डेडिकेटेड अथॉरिटी आपके कोड की जाँच करता हूँ ...' के साथ वक्रोक्ति करता हूँ। यह सच है कि कुछ शिथिल दुकानें इस माता-पिता / बच्चे के तरीके से कोड की समीक्षा करती हैं, कई (और बेहतर) दुकानों में एक सहकर्मी से सहकर्मी कोड समीक्षा प्रणाली है जो एक होमवर्क समस्या को हल करने वाले शिक्षक के समान नहीं है। जहाँ मैं किसी वरिष्ठ के काम की समीक्षा करने के लिए कनिष्ठ के लिए सामान्य रूप से काम करता हूँ। उद्देश्य की जाँच करने से पहले सभी कोड को देखने के लिए आंखों की एक दूसरी जोड़ी है
जिम में टेक्सास

2
@JimInTexas, हमारी दुकान में समान। मैं कहूंगा कि कोड समीक्षाओं का सबसे महत्वपूर्ण (दीर्घकालिक) परिणाम टीम भर में ज्ञान, एकीकरण प्रथाओं और वास्तुकला / डिजाइन दृष्टि का प्रसार है। इस संबंध में, वरिष्ठ के कोड की समीक्षा करने वाला एक जूनियर स्थानीय सर्वोत्तम प्रथाओं को सीखने का सबसे अच्छा तरीका है - लेकिन कौन कहता है कि एक वरिष्ठ कभी गलती नहीं करता है और एक जूनियर कभी भी इन पर स्पॉट नहीं कर सकता है?
पेटर तोर्क

1

कोड समीक्षा अधिक गुणात्मक मूल्यांकन है, स्थिर कोड विश्लेषण अधिक मात्रात्मक मूल्यांकन है।

अरे, लड़का, यह तरीका बेहतर लिखा जा सकता है

बनाम, फ़े

प्रदर्शन में कमी। 'Wcslen (str)> 0' निर्माण का उपयोग करके एक खाली स्ट्रिंग की पहचान करना अक्षम है। एक और अधिक कुशल तरीका यह है कि जाँच करें: str [0]! = '\ 0'।

प्रदर्शन में कमी। Strlen (MyStr.c_str ()) तरह के अभिव्यक्ति को MyStr.length () के रूप में फिर से लिखा जा सकता है।

प्रदर्शन में कमी। मामले में 'ऑर्डर' इटरेटर है, यह वेतन वृद्धि के उपसर्ग रूप का उपयोग करने के लिए अधिक प्रभावी है। इसे पुनरावृत्ति ++ के साथ ++ पुनरावृत्ति बदलें।

जबकि वास्तविक त्रुटियां (जाहिर है) मौजूद हैं और एससीए द्वारा पता लगाया जा सकता है

गलत प्रारूप। 'फू' फ़ंक्शन के एन वास्तविक तर्क की जांच करने पर विचार करें

अभिव्यक्ति दो बार कोष्ठकों द्वारा संलग्न की गई थी: ((अभिव्यक्ति))। कोष्ठक की एक जोड़ी अनावश्यक है या मिसप्रिंट मौजूद है

'मेमसेट' फ़ंक्शन की एक कॉल बफर 'dest.lfFaceName' को कम करेगी


आपका अपमान करने के लिए खेद है जहाँ तक मेरी (गायब हो गई?) टिप्पणी कहने का इरादा था - क्या आप किसी भी कारण से जानते हैं कि एक इंसान वही टिप्पणियाँ नहीं दे सकता जो आप स्थिर कोड विश्लेषण से आउटपुट के उदाहरणों के रूप में प्रदान करते हैं?
sq33G

@ sq33G: नहीं। कार्यालय की आपूर्ति (व्यावहारिक रूप से कागज की अनंत राशि) वाला कोई भी व्यक्ति मनमानी ट्यूरिंग मशीन का अनुकरण कर सकता है। हालाँकि यह उबाऊ और समय लेने वाला है। (संभवतः किसी दिए गए को नहीं, लेकिन C में अपरिभाषित व्यवहार कहें)।
मैकीज पाइचोटका

आह। तो ओपी के सवाल का असली जवाब यह है कि ट्यूरिंग मशीनें मानव-पूर्ण नहीं हैं।
sq33G

0

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

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

तकनीकी रूप से, एक कोड समीक्षा को स्थैतिक विश्लेषण का एक रूप माना जा सकता है, क्योंकि समीक्षा के दौरान कोड को वास्तव में निष्पादित नहीं किया जाता है। हालांकि, सामान्य शब्दावली में, "स्थैतिक विश्लेषण" आमतौर पर स्रोत या ऑब्जेक्ट फ़ाइलों के पार्सिंग को संदर्भित करता है, जबकि "समीक्षा" इंगित करता है कि मनुष्य विश्लेषण कर रहे हैं।


-2

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

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


-3

स्थैतिक कोड विश्लेषण स्वचालित उपकरण द्वारा किया जाता है, कोड की समीक्षा करने से पहले लोगों के साथ कोड की समीक्षा की जाती है।

कोड समीक्षा के लिए उपकरण:

1. बराबरी की तुलना

2. संस्करण नियंत्रण सॉफ्टवेयर का अंतर

इन उपकरणों का उपयोग हमेशा पुराने संस्करण और नए संस्करण के बीच अंतर उत्पन्न करने के लिए किया जाता है।


2
1) कोड होने से पहले उसका होना जरूरी नहीं है - कोड की समीक्षा लोगों द्वारा की जाती है और 2) मुझे अलग-अलग टूल का वर्णन कोड रिव्यू टूल "दिलचस्प" के रूप में मिलता है, निश्चित रूप से वे समीक्षा के लिए कोड की पहचान करने के लिए उपयोग किए जाने वाले उपकरण हैं लेकिन यदि मुझे कोड समीक्षा टूल के बारे में पूछा गया था, जो संभवत: इस प्रक्रिया को प्रबंधित करने में मदद करता है (मैंने उदाहरण के लिए भट्ठा और क्रूसिबल का उपयोग किया है)।
मर्फ़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.