एक डेवलपर के रूप में एक कोड समीक्षा के लिए तैयार किया जा रहा है?


10

मैं यहां कुछ विचारों की तलाश कर रहा हूं।

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

मेरा सवाल यह है कि,

  1. लक्ष्य डेवलपर होने के नाते, क्या आप कुछ सर्वोत्तम प्रथाओं का सुझाव दे सकते हैं जो एक डेवलपर अपने कोड की समीक्षा करने से पहले शामिल कर सकता है।

    • वर्तमान में मैं निम्नलिखित विधियों का अभ्यास करता हूं

      • एक तार्किक प्रवाह के लिए पीपीटी
      • विस्तृत टिप्पणी।

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

मुझे लगता है कि बहुत सारे डेवलपर्स जो कुछ भी कर रहे हैं, उससे मैं गुजरूंगा।


2
केवल एक: अपने कोड में बेवकूफ बातें मत करो।
B36овиЈ

1
KISS: अगर कोड सरल है, अपने दिमाग से यह सब का प्रबंधन करने में सक्षम है।
मौविसील

जब आप अपनी कंपनी में कोड की समीक्षा करते हैं, तो आम तौर पर बैठक का नेतृत्व कौन करता है? आप या एक व्यक्ति जो आपके काम की समीक्षा कर रहा है? मैं पूछता हूं क्योंकि IMO में कोड की समीक्षा बैठक बिट्स और कोड के टुकड़ों को खोजने के लिए समय बिताने की जगह नहीं है, भले ही आप चीजों को वास्तव में तेज कर रहे थे।
DXM

@DXM उत्तर के लिए धन्यवाद। यह मेरा टीएल बैठक का नेतृत्व करेगा।
कार्तिक श्रीनिवासन

@ कार्तिक: के, वह हिस्सा अच्छा है। इसलिए आपके प्रश्न के आधार पर, आप यह नहीं पूछ रहे हैं कि उच्च गुणवत्ता वाला कोड कैसे लिखें और तैयार करें जो कोड समीक्षा के लिए तैयार है। इसके बजाय, आपकी मुख्य चिंता यह है: "मैं कार्यान्वयन और प्रवाह की खोज करता रहता हूं और बहुत समय बर्बाद होता है"। क्या आप इसे विस्तार में बताने में सक्षम हैं? आप कोई खोज क्यों कर रहे हैं यदि TL उसके सामने कोड है / और बैठक का नेतृत्व कर रहा है?
डीएक्सएम नोव

जवाबों:


8

इसलिए ओपी द्वारा प्रदान किए गए विवरण के आधार पर, ऐसा लगता है कि यह सवाल है, "मैं अपना कोड कैसे सीखूं ताकि जब एक्स को खोजने या वाई को समझाने के लिए कहा जाए, तो मैं जल्दी से जवाब देने में सक्षम हूं।"

कुछ सुझाव जो मैं सोच सकता हूं:

  • कोडिंग करते समय, आपको अपना कोड सीखने और समझने के लिए समय निकालने की आवश्यकता होती है। यह वही हो सकता है जो आपका टीएल आपके लिए इतने सारे शब्दों में नहीं भर पाने की कोशिश कर रहा है। वर्तमान परियोजना पर एक टीएल होने के नाते, मैंने पिछले 11 महीनों में बहुत सारे कोड समीक्षाएं की हैं और मैं कुछ डेवलपर्स के अभ्यास को "उदाहरण कोड" या तो हमारे अपने कोड बेस में खोज करने के लिए नोटिस करता हूं, या कहीं और (Google) , आदि ...) और इसे कॉपी / पेस्ट करें। व्यक्तिगत रूप से, मैं इसे बर्दाश्त नहीं कर सकता, क्योंकि जब उनका कोड सरल इकाई परीक्षण पास करता है, तो वे यह नहीं समझते कि यह वास्तव में क्या कर रहा है, इसलिए हम कभी भी गारंटी नहीं देते हैं कि ' टी कुछ सीमा मामले या एक अपेक्षित विफलता की स्थिति जो हो सकती है।

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

  • पढ़ें और DRY सिद्धांत से प्यार करना सीखें । बहुत बार जिसे आप कॉपी / पेस्ट करने के लिए लुभाते हैं, उसे एक सामान्य स्थान (अलग फ़ंक्शन, अलग वर्ग, अलग लाइब्रेरी साइट) में रखा जा सकता है ...

  • के बारे में पढ़ें और प्यार करना सीख ठोस सिद्धांतों और जब आप इसे पर हैं, समीक्षा KISS जो पहले से ही mouviciel द्वारा उल्लेख किया गया था। ये सिद्धांत बहुत संक्षिप्त, स्वच्छ और मॉड्यूलर कोड के उत्पादन में उन्मुख हैं। यदि आपके पास बड़े वर्ग और बड़े कार्य हैं, तो यह स्पष्ट रूप से चीजों को खोजने के लिए बहुत कठिन है और इसके शीर्ष पर यह समझाने की कोशिश करते हैं कि कोड क्या करता है। दूसरी ओर, यदि आप SRP का अनुसरण करते हैं (या कम से कम अनुसरण करने की कोशिश करते हैं) और प्रत्येक कक्षा / फ़ंक्शन को केवल एक चीज के लिए जिम्मेदार बनाते हैं, तो आपका कोड छोटा और बहुत पठनीय होगा।

  • क्लीन कोड की एक प्रति उठाओ । बहुत अच्छी किताब है। यह कोड लिखने के बारे में बात करता है जो स्वयं व्याख्यात्मक है और पढ़ने, बनाए रखने और विस्तार करने में आसान है। यदि आप कोड लिखने का अभ्यास करते हैं जो पढ़ने में आसान है, तो आपको कोड समीक्षा में अपना कोड पढ़ने में समस्या नहीं होनी चाहिए। और यह मज़ेदार हिस्सा है, मैंने लोगों को अपना कोड पढ़ने के लिए कहा है या बस मुझे बताएं कि चर क्या प्रतिनिधित्व कर रहे थे और वे जवाब नहीं दे सके, जबकि उन्होंने उस कोड (ब्रांड नई कक्षाएं, विरासत नहीं) को केवल एक सप्ताह पहले लिखा था । अच्छा नामकरण एक लंबा रास्ता तय करता है।

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

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

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


+1 के लिए "कॉपी और पेस्ट कोड को आप समझ नहीं पाते हैं"। यह असहनीय है! इसके अलावा +1 के लिए "अपने टीएल से बात करें"
MarkJ

@DXM प्रश्न के बारीक बारीकियों को समझने की आपकी क्षमता बहुत पेशेवर थी, आपके उत्तर का उल्लेख नहीं करना बहुत ही जानकारीपूर्ण और वर्णनात्मक है। मन = उड़ा!
कार्तिक श्रीनिवासन

@DXM आपके संदर्भ से "दूसरी तरफ, यदि आप SRP का अनुसरण करते हैं (या कम से कम अनुसरण करने का प्रयास करते हैं) और प्रत्येक वर्ग / फ़ंक्शन को केवल एक चीज़ के लिए जिम्मेदार बनाते हैं, तो आपका कोड छोटा और बहुत पठनीय होगा।" क्या आप मुझे बता सकते हैं कि * SRP का क्या मतलब है? * मैंने कोड स्पष्टता पर एक और दिलचस्प पोस्ट यहाँ देखा
कार्तिक श्रीनिवासन

1
@ कार्तिकश्रीनिवासन - इस संदर्भ में एक ऐसी प्रैस का प्रयोग किया जाता है जहाँ एक चीज के लिए एक विधि या वर्ग जिम्मेदार होता है। उदाहरण के लिए एक विधि जो संख्याओं को एक साथ जोड़ती है, उसे भी औसत वापस नहीं करना चाहिए। सरल खोज में यह पाया गया: en.wikipedia.org/wiki/Single_responsibility_principle
रामहुंड

10

अभ्यास भिन्न होते हैं, लेकिन मेरे अनुभव में:

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

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

  • कोड को लाइन नंबर के साथ मुद्रित या प्रदर्शित किया जाना चाहिए । अधिमानतः, संख्या को एक फ़ाइल से अगले तक जारी रखना चाहिए। "Foo.c की लाइन 238" की तुलना में "लाइन 3502" को संदर्भित करना बहुत आसान है, और संख्या होने से हर कोई उन पंक्तियों को खोजने के लिए समय बर्बाद किए बिना विशिष्ट लाइनों के बारे में बात करता है।

  • एक सूत्रधार , btw निश्चित रूप से होना चाहिए । उसका काम है कि समीक्षा को माइनुटिया में फंसने से बचाएं, इसे व्यक्तिगत या गर्म होने से रोकें, और समीक्षा की अवधि को सख्ती से सीमित करें।

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

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

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


मैं एक बात जोड़ूंगा: "लाइन 3502" एक बड़ा लाल निशान होगा। बहुत लंबी फाइलें होना निश्चित रूप से एक बुरी बात है।
B16овиЈ

2
@ वीजेओ: कालेब ने सुझाव दिया कि लाइन नंबर फाइलों में जारी रहें, इसलिए लाइन 3502 वास्तव में foo.c की लाइन 238 है।
हेंजज़ी

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

1
@ThomasOwens लाइन नंबर पूरी तरह से समीक्षा के दौरान समीक्षा कोड में आसानी से एक स्थान का वर्णन करने के उद्देश्य से हैं। यह "फ़ाइल foo.c, लाइन 123," का उपयोग करने की तुलना में तेज और कम त्रुटि-प्रवण है और ओपी विशेष रूप से कम समय खोजने वाले कोड को खर्च करने के बारे में पूछता है। सहमत हूं कि मुद्दों को फ़ाइल द्वारा ट्रैक किया जाना चाहिए। IME, समीक्षाएं कक्षाओं के एक समूह को कवर करने के लिए होती हैं, शायद दो बड़े या एक दर्जन छोटे वाले। 3500+ लाइनों की एक साथ समीक्षा करने के लिए बहुत अधिक है - केवल इस बात को बनाने की कोशिश कर रहा था कि संख्या एक फ़ाइल से अगली तक जारी है।
कालेब

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

3

अन्य उत्तरों में जोड़ने के लिए एक और बात: औपचारिक कोड समीक्षकों को आसान बनाने के लिए , अनौपचारिक कोड समीक्षाओं के बहुत सारे आचरण करें ! उदाहरण के लिए:

"अरे बॉब, क्या मैं आपको दिखा सकता हूं कि मैंने फू () फ़ंक्शन को कैसे लागू किया?" "हे स्टीव, क्या आप इस वर्ग आरेख पर एक नज़र डाल सकते हैं और मुझे बता सकते हैं कि आप क्या सोचते हैं?" "हे करेन, क्या आप मुझे इस समस्या के माध्यम से सोचने में मदद कर सकते हैं? मुझे लगता है कि मुझे एक अच्छा समाधान मिल गया है, लेकिन मैं आपकी मदद का उपयोग कर सकता हूं ..."

इसे एक नियमित आदत बनाएं। जब आप अपने सहकर्मियों को डिजाइन प्रक्रिया में जल्दी शामिल करते हैं, तो आप:

  • संबंध निर्माण
  • समस्या में नई अंतर्दृष्टि प्राप्त करें
  • हाथ में समस्या / समाधान की व्याख्या करने की अपनी क्षमता में सुधार करें
  • बाद में औपचारिक कोड समीक्षाओं में समय बचाएं

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