मेरी टीम में, हम औपचारिक कोड समीक्षा नहीं करते हैं। हम सोचते हैं कि यह जोड़ी प्रोग्रामिंग और अक्सर जोड़े को घुमाने के साथ पर्याप्त है।
क्या हमें औपचारिक कोड समीक्षा करने पर विचार करना चाहिए? क्या होंगे फायदे?
मेरी टीम में, हम औपचारिक कोड समीक्षा नहीं करते हैं। हम सोचते हैं कि यह जोड़ी प्रोग्रामिंग और अक्सर जोड़े को घुमाने के साथ पर्याप्त है।
क्या हमें औपचारिक कोड समीक्षा करने पर विचार करना चाहिए? क्या होंगे फायदे?
जवाबों:
हम कोड की समीक्षा थोड़ी अलग (शायद) करते हैं।
हम सभी प्रोग्रामर को एक साथ (प्रत्येक शुक्रवार) आते हैं और देखते हैं कि हमने एक सप्ताह की अवधि में क्या किया है। तब हमने चुना कि हम किन परियोजनाओं की समीक्षा करना चाहते हैं ताकि हर प्रगति / प्रगति परियोजना में कम से कम एक या कुछ लोग हों। फिर घंटे या तो हम उन बदलावों को देखते हैं, जो गलतियों की खोज करते हैं, अन्य परियोजनाएं कैसे काम करती हैं और आदि। इसके बाद हम चर्चा करते हैं, गलतियों को बताएं, यह कैसे किया जाना चाहिए (हम बग को ठीक नहीं करते हैं हम उन्हें इंगित करते हैं। और FIXME के साथ कोड को स्पैम करें)। यह सब आम तौर पर हमारे लिए (10 प्रोग्रामर) लगभग 2 घंटे लगते हैं।
गुण:
जैसा कि मैंने उल्लेख किया है कि जोड़ी प्रोग्रामिंग के खिलाफ है (निश्चित रूप से यह केवल मेरी निजी राय है) यह है कि टीम जितनी देर तक काम करेगी - उतनी ही तेजी से इसे पूरा करेगी।
मुझे उम्मीद है कि यह विचार के लिए कुछ भोजन लाएगा। सौभाग्य।
आप इस मुफ्त पुस्तक के माध्यम से पढ़ना चाह सकते हैं:
http://smartbear.com/best-kept-secrets-of-peer-code-review/
ज़रूर, उनके पास धक्का देने के लिए एक उत्पाद है, लेकिन वहां अभी भी बहुत सारी उपयोगी जानकारी है।
वे यह भी चर्चा करते हैं कि कैसे जोड़ी प्रोग्रामिंग कुछ समान लाभ प्रदान करती है, इसलिए यदि आप जोड़ी प्रोग्रामिंग हैं तो आपको कोड समीक्षा की आवश्यकता नहीं हो सकती है।
मुझे आपके वातावरण की समीक्षा करने का बहुत अनुभव नहीं है। हम यहां बहुत सारी जोड़ी प्रोग्रामिंग नहीं करते हैं, हम टीम में सॉफ़्टवेयर के ज्ञान को फैलाने के लिए कोड समीक्षा करते हैं, गलतियों को बाहर निकालने के लिए आँखों की एक और जोड़ी होती है और जाँचने के लिए एक औपचारिक बिंदु होता है कि क्या सॉफ्टवेयर हमारे कोडिंग दिशानिर्देशों से चिपक जाता है ।
पहले 2 बिंदु जोड़ी प्रोग्रामिंग द्वारा काफी अच्छे से कवर किए गए हैं, तीसरा जोड़ी पर बहुत निर्भर है और एक औपचारिक कोड समीक्षा से बेहतर हो सकता है।
क्या आपको औपचारिक कोड समीक्षाएं करनी चाहिए?
बस एक त्वरित पक्ष के रूप में, मेरे पास युग्मित प्रोग्रामिंग के साथ बहुत कम अनुभव है, लेकिन मुझे विश्वास नहीं है कि समीक्षा इन विधियों के साथ संघर्ष करेगी।
मैं कोड समीक्षाओं के दो रूप प्रस्तुत करूंगा:
सहकर्मी कोड समीक्षा
यहां तक कि अगर युग्मित प्रोग्रामिंग आपके लिए काम करती है, तो कोड पर आंखों का एक और सेट प्राप्त करने के लिए कभी भी दर्द नहीं होता है। इससे होने वाले लाभ हैं:
पीयर कोड रिव्यू (मेरी दुनिया में) हर सबमिशन से पहले किए जाते हैं । यह युग्मित प्रोग्रामिंग की दुनिया में कैसे काम करता है, मैं अनिश्चित हूँ।
समूह कोड समीक्षाएँ
ये सहकर्मी कोड समीक्षाओं की तुलना में कम बार होते हैं। मैं आम तौर पर एक अनौपचारिक कोड की समीक्षा के लिए एक बैठक कक्ष में अपने समूह (या मेरे समूह का एक उपखंड) को खींचूंगा। मैं आमतौर पर कुछ कोड उठाता हूं जो टीम के किसी यादृच्छिक व्यक्ति द्वारा लिखा गया था, अधिमानतः कोड जो खरोंच से लिखा गया था - रिफैक्टेड कोड ताजा कोड जैसे मुद्दों को उजागर नहीं करता है।
यकीन है कि हर कोई जानता है कि इन समीक्षा कर रहे हैं नहीं emberass करने के लिए होती है और प्रदर्शन को प्रतिबिंबित करने के लिए इस्तेमाल नहीं कर रहे हैं। वे केवल यह सुनिश्चित करने के लिए हैं कि आपकी टीम कोडिंग मानकों का पालन करती है और सभी को बेहतर इंजीनियर बनने में मदद करती है और इस प्रकार, टीम के लिए और अधिक उपयोगी हो जाती है (और आगे के कैरियर विकास, आदि) - और सुनिश्चित करें कि यह समीक्षाओं का असली इरादा है । यदि किसी को कुछ भी अलग से संदेह है, तो ये आशंका और कम उत्पादक बन जाएंगे।
मैं कुछ अनौपचारिक रूप से कोड के माध्यम से जाऊंगा, किसी को भी कमरे में अलग-अलग समाधानों को इंगित करने देता हूं जो उनके पास हो सकते हैं या तर्क दोष हो सकते हैं। इसका मतलब एक समूह की चर्चा से अधिक है कि वहां बैठे नेता हर किसी को बताएं कि उन्हें कैसे कोड करना चाहिए।
मैंने पाया है कि इन दोनों विधियों को नियोजित करने से दर में वृद्धि होती है, जिस पर इंजीनियर प्रगति करते हैं और बग को बहुत कम करते हैं :)
मैंने कभी भी प्रैक्टिस में जोड़ी प्रोग्रामिंग नहीं की है (केवल इसके लिए आशा है), इसलिए मैं सीधे दो प्रथाओं की तुलना नहीं कर सकता। हालांकि, मैं औपचारिक कोड समीक्षाओं के साथ अपने अनुभव बता सकता हूं।
मैं पहले की परियोजना में, विरासत कोड पर औपचारिक कोड समीक्षाओं का नेतृत्व करता था। परियोजना पूरी तरह से गड़बड़ थी और प्रबंधन ने अराजकता में आदेश लाने की उम्मीद के साथ किसी भी पहल का स्वागत किया। उस समय मुझे लगा कि औपचारिक कोड समीक्षा एक अच्छा विचार है। हमने बग ढूंढे, और हमने देखा कि ताज़ा लिखे गए कोड की गुणवत्ता पुराने कोड की तुलना में काफी बेहतर थी। मैंने इसे साबित करने के लिए आंकड़े, बग काउंट्स आदि एकत्र किए।
हमने औसतन प्रति सप्ताह एक सत्र किया, जिसमें 3-5 व्यक्ति शामिल थे। प्रत्येक सत्र में प्रति व्यक्ति (तैयारी सहित) 3-4 घंटे का समय लगता था, और कोड की 200-300 पंक्तियों (LOC) * की समीक्षा करता था। इस गति में, 6 महीने से अधिक की अवधि के दौरान, हम लगभग 50K में से 5K LOC के बारे में समीक्षा करने में सफल रहे।
रेट्रोस्पेक्ट में, मुझे लगता है कि यह बहुत महंगा था। इस गति के साथ, हमें पूरी विरासत कोडबेस की समीक्षा करने में 5 साल लग गए होंगे। OTOH एक सप्ताह में एक से अधिक सत्र होने से संसाधनों को विकास से दूर ले जाया जाता। बेशक, यह विरासत कोड के साथ विशिष्ट दुविधा है। लेकिन यहां तक कि औपचारिक रूप से सभी नए सिरे से लिखे गए कोड की समीक्षा करने में काफी समय लगेगा, जिससे विकास काफी धीमा हो जाएगा।
मेरा निष्कर्ष यह है कि कोड के सबसे महत्वपूर्ण हिस्सों पर ध्यान केंद्रित करते हुए नए लिखित कोड पर औपचारिक कोड समीक्षाएं सबसे अच्छी तरह से की जाती हैं। बाकी बेहतर तरीके से और अधिक अनौपचारिक तरीके से संभाला जाता है, संभवतः जोड़ी प्रोग्रामिंग के माध्यम से। यह सिर्फ मेरी वर्तमान राय है, जो बदल सकती है। मैं एक कोड समीक्षा गुरु या कुछ भी होने का दावा नहीं करता।
* यह औपचारिक कोड समीक्षाओं की सामान्य गति है।
विशिष्ट कोड समीक्षा दर प्रति घंटे कोड की लगभग 150 लाइनें हैं। महत्वपूर्ण सॉफ़्टवेयर (जैसे सुरक्षा महत्वपूर्ण एम्बेडेड सॉफ़्टवेयर) के लिए प्रति घंटे कोड की कुछ सौ से अधिक पंक्तियों का निरीक्षण और समीक्षा करना त्रुटियों को खोजने के लिए बहुत तेज़ हो सकता है।
विकिपीडिया से उद्धृत (मेरे द्वारा जोर)।
अंतर्निहित कारण कोड समीक्षाएं मौजूद हैं क्योंकि पृथक प्रोग्रामर को अपने कोड को पूरा करने और चर्चा करने और यह जांचने की आवश्यकता है कि यह उनके मानक के अनुरूप है।
आप किसी भी गुणवत्ता की समस्या का उल्लेख नहीं करते हैं, इसलिए ऐसा लगता है कि आपकी टीम उनकी जोड़ी प्रोग्रामिंग के माध्यम से पहले से ही पर्याप्त कोड समीक्षा कर रही है। बहुत बढ़िया!
सही ढंग से की गई जोड़ी प्रोग्रामिंग औपचारिक कोड समीक्षाओं को शानदार बनाती है। लेकिन कुछ हफ्तों के लिए इसे आज़माएं और देखें कि यह कैसे काम करता है, लेकिन मुझे संदेह है कि आप किसी भी सुधार पर ध्यान नहीं देंगे।
ध्यान रखें कि कोड समीक्षा एक थका देने वाली, महंगी प्रक्रिया है और कुछ को हल्के में नहीं लिया जाना चाहिए। यह अनिवार्य रूप से आपकी परियोजना में एक हैंडओवर का परिचय देता है जो महंगा है और सब कुछ धीमा कर देता है । यह सुनिश्चित करने के लिए बेहतर है कि कोड पहले से सही है, बजाय बाद में समस्याओं को खोजने की कोशिश करने के।
शायद। कोड समीक्षा में समय लगता है। वे केवल तभी सार्थक होते हैं जब समीक्षा द्वारा लिया गया समय प्रक्रिया में किसी अन्य बिंदु पर सहेजा जाता है। कोड समीक्षा से आपको क्या बचत की उम्मीद है? क्या आप कठिनाइयों का सामना कर रहे हैं जिन्हें कोड समीक्षाओं द्वारा रोका जा सकता है?
यदि आप जोड़ी प्रोग्रामिंग कर रहे हैं, तो कोड समीक्षा की आवश्यकता काफी कम हो जाती है, लेकिन आप निश्चित रूप से एक सहकर्मी समीक्षा से लाभान्वित होंगे। लाभकारी होने के लिए यह जोड़ी के सदस्यों की तुलना में किसी वरिष्ठ और अधिक अनुभवी व्यक्ति द्वारा किया जाना चाहिए।
क्या लाभ हैं? वैसे, बेहतर होगा कि आप इसे न करने के जोखिमों पर विचार करें।
मुझे खुशी है कि लोगों ने कहा है कि कोड की समीक्षा समय की बर्बादी है। हाँ, इसमें समय लगता है। शायद यह कोड में कोई बदलाव नहीं करेगा, लेकिन इसका मतलब यह नहीं है कि यह बर्बाद हो गया है। यह कहना कि आपको अपने फायर सिस्टम को नियमित रूप से जांचने की आवश्यकता नहीं है क्योंकि यह समय की बर्बादी है।
मेरे लिए कोड समीक्षाओं का मुख्य लाभ यह है कि इससे लोग बेहतर कोड लिखते हैं।
यह जानते हुए कि आपके कोड को पढ़ा जाएगा और समीक्षा की जाएगी, आपको पठनीयता के बारे में अधिक जागरूक बनाता है और आपके कोड के "सही" नेस। जब आप जानते हैं कि कोड सीधे रिपॉजिटरी में जा रहा है और कोई और इसे नहीं पढ़ेगा, जब तक कि वे दोष को ठीक नहीं करते हैं, तब तक आप चीजों को फिसलने नहीं देते हैं जैसे कि फ़ील्ड के नामों को फिर से फ़ोकस न करें जब उनका उपयोग बदलता है, तो अप्रयुक्त तरीकों को चारों ओर लटकाए रखने के मामले में। इत्यादि में वापस जाना।