कोड समीक्षा का उद्देश्य क्या है


76

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

तो, कोड समीक्षा का उद्देश्य क्या है?


16
संबंधित (स्टैक ओवरफ्लो पर): कोड का उद्देश्य समीक्षा
यानिस

16
- यदि आप आसानी से पढ़े और आसानी से बनाए रखने योग्य कोड लिख चुके हैं, तो आपको कैसे पता चलेगा? - आपका सहकर्मी आपको कोड की समीक्षा करने के बाद बताता है। 'तर्क: आप इसे स्वयं निर्धारित नहीं कर सकते क्योंकि आप लेखक के रूप में अधिक जानते हैं क्योंकि कोड स्वयं कहता है। एक कंप्यूटर आपको नहीं बता सकता है, उन्हीं कारणों से जो यह नहीं बता सकता है कि पेंटिंग कला है या नहीं। इसलिए, आपको एक और मानव की आवश्यकता है - सॉफ्टवेयर को बनाए रखने में सक्षम - जो आपने लिखा है उसे देखने के लिए और उसकी राय दें। उक्त प्रक्रिया का औपचारिक नाम "पीयर रिव्यू" है । '
gnat

3
"कोड समीक्षा का उद्देश्य क्या है?" डेवलपर्स को टेररिड कोड लिखने से रोकने के लिए , और उन्हें सही दिशा में चलाने के लिए।
zzzzBov

7
लगता है कि कोड की समीक्षा इस सवाल का एक अप्रत्यक्ष उत्तर हो सकता है .. बस सवाल और जवाब पर ब्राउज़ करें, एक कोड समीक्षा का उद्देश्य बहुत स्पष्ट हो जाता है :)
मैथ्यू गुइंडन

3
मुझे आश्चर्य है कि कितनी बार प्रोग्रामर ने समीक्षा के दौरान अपने कोड को समझाने की सरल प्रक्रिया के माध्यम से अपने कोड में कीड़े खोजे हैं?
हैचेट-निष्क्रिय

जवाबों:


75

कई कारण हैं कि आप एक कोड समीक्षा क्यों करना चाहते हैं:

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

समीक्षा करने के लिए कई व्यावसायिक मामले हैं:

  • उन दोषों या मुद्दों का पता लगाना जिन्हें उनके इंजेक्शन के करीब लाने की आवश्यकता होगी। यह सस्ता है।
  • सिस्टम और क्रॉस-ट्रेनिंग की साझा समझ। किसी डेवलपर के पास बदलाव करने के लिए गति के लिए कम समय है।
  • प्रणाली में संभावित वृद्धि की पहचान।
  • कार्यान्वयन को खोलना यह सुनिश्चित करने के लिए कि परीक्षक पर्याप्त कवरेज प्रदान कर रहे हैं। एक परीक्षण परिप्रेक्ष्य से एक काले बॉक्स को एक ग्रे बॉक्स या सफेद बॉक्स में बदलना।

यदि आप सहकर्मी समीक्षाओं के लिए और कार्यान्वयन रणनीतियों के लाभों पर एक व्यापक चर्चा की तलाश कर रहे हैं, तो मैं सॉफ्टवेयर में सहकर्मी समीक्षा की जाँच करने की सलाह दूंगा: कार्ल वाइजर द्वारा एक व्यावहारिक गाइड


7
+1, मुझे लगता है कि आपने सही प्राथमिकताओं के साथ मुख्य बिंदुओं को अच्छी तरह देखा है। लगातार बहुत रचनात्मक "डब्ल्यूटीएफ" समाधान खोजने वाले सहकर्मियों के साथ काम करते समय डिजाइन को लगातार बनाए रखना केवल नियमित कोड समीक्षाओं द्वारा प्राप्त किया जा सकता है।
Doc Brown

हम अपने जावास्क्रिप्ट कोड में कोड की समीक्षा करते हैं, मुख्य रूप से डेवलपर्स को उल्लिखित मानकों का उपयोग करते हुए, निर्धारित मॉड्यूल का उपयोग करते हुए, दिए गए घटकों का उपयोग करते हुए और निंजा कोडिंग (जानबूझकर या नहीं) उन समस्याओं के आसपास करना शुरू करने के लिए जो हमारे पास पहले से ही समाधान हैं, सुनिश्चित करें। के लिये। वे किसी को गलती से ओवर-राइटिंग thisसंदर्भ देने के लिए भी महान हैं , .hasOwnPropertyउन जगहों पर इसका उपयोग नहीं करना चाहिए, आदि, आदि - इसलिए, मुख्य रूप से मानकों के लिए। C # जैसी प्रबंधित भाषा में आप डायनेमिक भाषाओं के लिए कई कम कारण हैं।
नहीं

1
इस प्रकार अब तक आपका उत्तर कोड की शुद्धता में सुधार के लिए केवल दृष्टिकोण है। यह कोड की पठनीयता / स्थिरता को संबोधित करने में विफल रहता है, जिसे विकासशील देव द्वारा शायद ही सही मात्रा में निर्धारित किया जा सकता है।
ArTs

51

कोड समीक्षा ज्ञान हस्तांतरण के लिए एक उपकरण है ।

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

  • जब एक जूनियर प्रोग्रामर एक वरिष्ठ कोड की समीक्षा करता है, तो जूनियर प्रोग्रामर ट्रिक्स उठा सकता है अन्यथा केवल अनुभव के माध्यम से सीखा जा सकता है। यह अत्यधिक जटिल कोड के खिलाफ सुधारात्मक के रूप में भी काम कर सकता है।

    एक पूरी तरह से कोड की समीक्षा के लिए विभिन्न दस्तावेजों के खिलाफ लगातार जांच की आवश्यकता होगी। यह एक भाषा या एपीआई सीखने का एक शानदार तरीका है।

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

कोड समीक्षा के बारे में नहीं हैं:

  • … बग ढूंढना। परीक्षण के लिए यही है। यह अभी भी अक्सर होता है कि एक कोड समीक्षा में कुछ समस्या आती है।

  • ... शैली के मुद्दों पर नाइटपैकिंग - एक शैली के लिए व्यवस्थित करें, और इसे लागू करने के लिए स्वचालित फ़ॉर्मेटर्स का उपयोग करें। लेकिन कई चीजें हैं जो एक स्वचालित उपकरण की जांच नहीं कर सकते हैं। कोड समीक्षा यह सुनिश्चित करने के लिए एक अच्छी जगह है कि कोड पर्याप्त दस्तावेज या स्व-दस्तावेजीकरण है।


2
नाइटपैकिंग शैली के मुद्दों पर आपका अंतिम बिंदु जो मैं पूरी तरह से सहमत नहीं हूं - हमारे पास एक कनिष्ठ डेवलपर की समीक्षा करने का एक कठोर अनुभव है और सबसे चमकदार शिकायत वास्तव में शैली पर थी, लेकिन शैली की समस्याओं के प्रकार जो आसानी से प्रोग्राम नहीं हैं लागू .... वहाआए बहुत से अगर edgecases आदि के लिए बयान; ऐसे मुद्दे जो हाँ आप कुछ मामलों में कंप्यूटर ढूंढ सकते हैं, लेकिन अधिकांश स्क्रिप्ट द्वारा उदारतापूर्वक खोजने के लायक नहीं थे। हमें इसे देखने के लिए शुरू करने के लिए 30 सेकंड का समय लगता है, देव को समझाने के लिए एक और 30 और उम्मीद है कि इस मुद्दे को हटा दें। इस पर अभी भी सदमे में: /
शांतिवादी

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

12
समीक्षा करते समय, मैं अक्सर उन चीजों को स्पॉट करता हूं जहां मुझे लगता है कि "यह एक बग जैसा दिखता है", तो मैं यह साबित करने के लिए एक विशिष्ट परीक्षण मामला लिखता हूं कि यह एक बग है। इसलिए कोड समीक्षाओं के कई लक्ष्यों में से एक बग ढूंढ रहा है। इसलिए मुझे लगता है कि "या तो कोड की समीक्षा या परीक्षण" का दृष्टिकोण थोड़ा एकल-धारित है।
डॉक्टर ब्राउन

2
@DocBrown के अलावा ऐसे मामले हैं जो आसानी से परीक्षण योग्य नहीं हो सकते हैं - डेटा दौड़, कुछ प्रकार के गतिरोध, लाइवलॉक, अपरिभाषित व्यवहार / मूल्य (ज्यादातर C / C ++ में लेकिन अपरिभाषित के रूप में अच्छी तरह से अपरिवर्तित में हैश तालिकाओं में तत्वों का क्रम) या संसाधन लीक (लूप में फ़ाइल खोलना GC के साथ भी एक बुरा विचार हो सकता है)। उन चीजों में से कुछ का पता पर्याप्त रूप से स्मार्ट-कंपाइलर- स्थैतिक विश्लेषण से लगाया जा सकता है ।
मैकीज पीचोटका

2
@ विशिष्ट उदाहरण आपके कोड कोड की समीक्षा में पूरी तरह से नष्ट हो जाएगा। यह किसी भी स्थिर कोड विश्लेषक (साइक्लोमैटिक जटिलता 17!) के लिए एक लाल झंडा होगा। एक कोड की समीक्षा जल्दी से इस फ़ंक्शन को शब्दार्थ शैली (या यहां तक ​​कि एल्गोरिथ्म!) में एक समस्या के रूप में पहचान करेगी। हालाँकि। इस तरह का मुद्दा सिर्फ "शैली" का मुद्दा नहीं है। यदि आप इसे इस तरह से मानते हैं, तो आपके पास जल्द ही अपने रिपॉजिटरी रियल में कुछ बहुत बुरा कोड होगा; यह सिर्फ "शैली" है, सब के बाद।
पिमगड

12

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


2
इससे पहले के 4 उत्तरों पर कुछ भी पर्याप्त नहीं लगता है
gnat

2
@gnat: अन्य उत्तर ज्ञान हस्तांतरण और स्पॉटिंग बग को संबोधित करते हैं। ये महत्वपूर्ण हैं, लेकिन कोड समीक्षा के लिए और भी बहुत कुछ है।

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

2
@gnat यह अन्य उत्तरों में उठाए गए बिंदुओं के एक अलग पहलू पर जोर देता है। क्या आपने कभी अपने स्वयं के कोड से हैरान हो गए हैं जो आपने छह महीने पहले लिखा था? कोड की समीक्षा से आप उस प्रक्रिया को तेज कर सकते हैं। यदि आपका सहकर्मी आपके कोड से हैरान है, तो आप अभी भी इसे स्पष्ट कर सकते हैं जबकि समस्या अभी भी आपकी स्मृति में ताज़ा है।
200_सेफ़

1
@ 200_सफलता हो सकती है। लेकिन यह बिंदु, अगर यह वास्तव में है, तो वास्तव में खराब रूप से प्रस्तुत किया गया दिखता है। यहां तक ​​कि आपकी टिप्पणी भी इस "उत्तर" से बेहतर संवाद करने का प्रबंधन करती है। यह उल्लेख नहीं करने के लिए कि यह सिर्फ वही दोहराता है जो एक पूर्व टिप्पणी में इंगित किया गया था जो कि संबंधित प्रश्न में इसे स्पष्ट करने वाले कैनोनिकल उत्तर को संदर्भित करता है
gnat

7

मैं उन दो क्षेत्रों को जोड़ना चाहता हूं जो अन्य महान उत्तरों द्वारा कवर नहीं किए गए हैं:

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

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

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