एक कोड समीक्षा व्यक्तिपरक या उद्देश्य (मात्रात्मक) है?


55

मैं कोड समीक्षाओं के लिए कुछ दिशानिर्देशों को एक साथ रख रहा हूं। हमारे पास अभी तक एक औपचारिक प्रक्रिया नहीं है और हम इसे औपचारिक रूप देने की कोशिश कर रहे हैं। और हमारी टीम भौगोलिक रूप से वितरित है।

हम स्रोत नियंत्रण के लिए टीएफएस का उपयोग कर रहे हैं (हमने इसे कार्यों / बग ट्रैकिंग / परियोजना प्रबंधन के लिए भी उपयोग किया था, लेकिन हमने विकास के लिए विजुअल स्टूडियो 2008 के साथ जेआईआरए को माइग्रेट किया था )।

कोड समीक्षा करते समय आप किन चीजों की तलाश करते हैं?

  • ये वे बातें हैं जो मैं लेकर आया था
    1. FxCop नियम लागू करें (हम एक Microsoft दुकान हैं)
    2. प्रदर्शन के लिए जाँच करें (किसी भी उपकरण?) और सुरक्षा ( OWASP - कोड क्रॉलर का उपयोग करने के बारे में सोच ) और धागा सुरक्षा
    3. नामकरण सम्मेलनों का पालन करें
    4. कोड को किनारे के मामलों और सीमाओं की शर्तों को कवर करना चाहिए
    5. अपवादों को सही ढंग से संभालना चाहिए (अपवादों को न निगलें)
    6. जांचें कि क्या कार्यक्षमता कहीं और दोहराई गई है
    7. एक मेथड बॉडी छोटी (20-30 लाइन्स) होनी चाहिए, और मेथड्स को एक काम करना चाहिए और एक ही काम करना चाहिए (कोई साइड इफेक्ट नहीं है और टेम्परेरी कपलिंग से बचना चाहिए) -
    8. विधियों में नल पास / वापसी न करें
    9. मृत कोड से बचें
    10. दस्तावेज़ सार्वजनिक और संरक्षित तरीके / गुण / चर

हमें किन अन्य चीजों के लिए आम तौर पर देखना चाहिए?

मैं यह देखने की कोशिश कर रहा हूं कि क्या हम समीक्षा प्रक्रिया को निर्धारित कर सकते हैं (यह अलग-अलग व्यक्तियों द्वारा समीक्षा किए जाने पर समान आउटपुट का उत्पादन करेगा) उदाहरण: यह कहना कि "विधि बॉडी को कोड के 20-30 पंक्तियों से अधिक नहीं होना चाहिए" कहने के विपरीत "विधि" शरीर छोटा होना चाहिए ”।

या कोड समीक्षा बहुत व्यक्तिपरक है (और एक समीक्षक से दूसरे में भिन्न होगा)?

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

डेवलपर्स द्वारा लिखे गए अच्छे / बुरे कोड की पहचान करने के लिए आप किस अन्य उद्देश्य / मात्रात्मक प्रणाली का पालन करते हैं?

पुस्तक का संदर्भ: स्वच्छ संहिता: रॉबर्ट मार्टिन द्वारा चुस्त सॉफ्टवेयर शिल्प कौशल की एक पुस्तिका


8
अशक्त लौटाने में क्या हानिकारक माना जाता है? मैं समझता हूं कि आमतौर पर उच्च स्तरीय भाषाओं में बेहतर होता है, जैसे कि C #, NULLs के बजाय खाली सरणियों को वापस करने के लिए (त्रुटियों से बचने के लिए कोड को अधिक सुरुचिपूर्ण और आसान बनाता है)। कभी-कभी आपको एक पूर्ण संदर्भ वापस करने की आवश्यकता होती है, हालांकि, सही?

4
यदि हम नल को वापस करने से बचते हैं, तो हम क्लाइंट / उपभोक्ता ऐप / लाइब्रेरी द्वारा हमारे तरीके को कॉल करने पर नल की जाँच करना छोड़ सकते हैं। रॉबर्ट मार्टिन द्वारा क्लीन कोड से - अध्याय 7 (त्रुटि से निपटने) पीपी: 110 "जब हम अशक्त लौटते हैं, तो हम अनिवार्य रूप से अपने लिए काम बना रहे हैं और हमारे कॉलर्स पर समस्याओं को दूर कर रहे हैं। यह सब लगता है एक आवेदन पत्र भेजने के लिए एक गायब अशक्त जाँच है। नियंत्रण के लिए। "

3
क्या आप इसे किसी ऐसे व्यक्ति के लिए समझा सकते हैं जो एक पृष्ठ पढ़ने के लिए पुस्तक खरीदना नहीं चाहता है :)? ऐसा लगता है कि अधिकांश सी # कार्यक्रमों के लिए, NULLs से बचने के लिए कोड को और अधिक जटिल बनाने जा रहा है, जो बदले में अधिक त्रुटियों के लिए एक नुस्खा है ...

2
यहाँ एक ब्लॉग पोस्ट है जो बताती है कि क्यों अशक्त होना एक बुरा विचार है। thehackerchickblog.com/2008/10/… । और एक और leedumond.com/blog/should-we-return-null-from-our-methods । बॉब ने अपनी पुस्तक में सुझाव दिया है कि यदि हमें अशक्त होने के लिए प्रलोभन दिया जाता है, तो हम अशक्त संदर्भ अपवाद को फेंक सकते हैं, या इसके बजाय एक SPECIAL_CASE ऑब्जेक्ट वापस कर सकते हैं। चाइनिंग मेथड कॉल के बारे में सोचें this.Foo().FooBar().FooBarBar(); यदि फू से यहां लौटी वस्तु अशक्त है, तो आप निश्चित रूप से "ऑब्जेक्ट संदर्भ को किसी वस्तु के उदाहरण पर सेट नहीं कर सकते" को FooBar ()

@SoloBold: और केवल इंगित करने के लिए, वे केवल दिशानिर्देश हैं। यदि अशक्त (कुछ मामलों में) हो सकता है, तो लौटने के लिए एक बहुत ही आकर्षक कारण है, तो अशक्त लौटने से एक Special_CASE ऑब्जेक्ट को वापस करने का कोई मतलब होगा

जवाबों:


25

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

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

कोई भी स्वचालित उपकरण जो आगे के विश्लेषण या निर्णय के बिना स्वीकार किया जा सकता है - सी, सी ++, जावा में एक प्रकार का वृक्ष है। नियमित संकलन। संकलक वास्तव में findng संकलक कीड़े में अच्छे हैं। स्वचालित चेकों में विचलन का दस्तावेजीकरण स्वचालित चेकों के एक सूक्ष्म अभियोग जैसा लगता है। कोड निर्देश (जैसे जावा करता है) जो विचलन की अनुमति देते हैं, वे बहुत खतरनाक हैं, IMHO। डिबगिंग के लिए बढ़िया है, आपको मामले का दिल पाने के लिए, जल्दी से। एक खराब दस्तावेज में खोजने के लिए इतना अच्छा नहीं है, कोड के 50,000 गैर-टिप्पणी-लाइन ब्लॉक आपके लिए ज़िम्मेदार बन गए हैं।

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

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

मैंने इन चीजों को फायदेमंद पाया है:

1) कोई शैली युद्ध नहीं । जहां खुले घुंघराले ब्रेसिज़ जाते हैं, केवल किसी दिए गए फ़ाइल में स्थिरता जांच के अधीन होना चाहिए। सब एक जैसे। तब तो ठीक है। Ditto इंडेंटेशन डेप्थ ** s और ** टैब चौड़ाई । अधिकांश संगठनों को पता चलता है कि उन्हें टैब के लिए एक सामान्य मानक की आवश्यकता होती है, जिसका उपयोग बड़े स्थान के रूप में किया जाता है।

2) `प्रचंड

   looking

पाठ जो नहीं करता है

   line up is hard to read 

सामग्री के लिए। `

BTW, K & R पांच (FIVE) रिक्त स्थान, इसलिए प्राधिकरण के लिए अपील बेकार हैं। बस संगत हो।

3) समीक्षा की जाने वाली फ़ाइल की एक लाइन-संख्याबद्ध, अपरिवर्तनीय, सार्वजनिक रूप से उपलब्ध प्रतिलिपि को समीक्षा से पहले 72 घंटे या उससे अधिक के लिए इंगित किया जाना चाहिए।

4) कोई डिज़ाइन-ऑन-द-फ्लाई। यदि कोई समस्या है, या कोई समस्या है, तो उसका स्थान नोट करें, और चलते रहें।

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

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

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

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

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

यदि आप आवश्यकताओं पर परीक्षणों को आधार बना सकते हैं , तो ठीक है, जैसे कि महिला "जब हैरी मेट सैली" में कहती है , मेरे पास वह है जो उसके पास है!

सभी समीक्षाओं को कोडिंग से ऊपर के स्तर पर आवश्यकताओं और डिजाइन के मुद्दों को पकड़ने के लिए एक पार्किंग स्थल होना चाहिए। एक बार जब किसी चीज को पार्किंग स्थल से संबंधित माना जाता है, तो समीक्षा में चर्चा बंद हो जानी चाहिए।

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

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


यह एक अच्छा जवाब है, विशेष रूप से ग्रेडिंग लोगों के संबंध में - यह एक कोड समीक्षा का बिंदु नहीं होना चाहिए।
धान

25

आपके द्वारा वर्णित अधिकांश बिंदु केवल कोड बनाने या "सतह" सामान की बात है:

  • नामकरण सम्मेलनों का पालन करें
  • मृत कोड से बचें
  • दस्तावेज़
  • ...

यह सब कुछ स्वचालित उपकरण का उपयोग करके जांचा जा सकता है : इसके लिए देखने के लिए कोड के माध्यम से जाने वाले एक अनुभवी विकासशील खर्च समय की कोई आवश्यकता नहीं है।

मैं .NET के बारे में बिल्कुल नहीं जानता , लेकिन, PHP के लिए , हमारे पास उस तरह के सामान की जांच करने के लिए उपकरण हैं; .NET पर विचार करना अक्सर PHP की तुलना में "अधिक औद्योगिक" कहा जाता है, मुझे यह सुनकर आश्चर्य होगा कि उस तरह के सामान की जांच करने के लिए कोई उपकरण नहीं है।


स्वचालित उपकरण दोनों कर सकते हैं:

  • हर रात चलने वाली कुछ स्वचालित निर्माण प्रक्रिया में एकीकृत रहें
  • ई-मेल रिपोर्टिंग भेजें
    • चेतावनी (उदाहरण के लिए, एक विधि 20 लाइनों से अधिक लंबी है)
    • त्रुटि (उदाहरण के लिए, एक विधि 50 लाइनों से अधिक लंबी है)

मेल सभी टीम, या उस व्यक्ति को भेजा जा सकता है, जिसने एक कोड पारित किया है, जो एक परीक्षण पास नहीं करता है - या आप कुछ रिपोर्टिंग वेब-इंटरफ़ेस (.NET और PHP के बारे में एक ही नोट) का उपयोग कर सकते हैं


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


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

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

लेकिन एक कोड-समीक्षा के लिए जो कोड-स्वरूपण से अधिक गहरा हो जाता है, आपको आधे घंटे से अधिक की आवश्यकता होगी ...


.Net (अच्छी तरह से # केवल अभी) के लिए यह टूल स्टाइलकॉप है। code.msdn.microsoft.com/sourceanalysis
ब्रायन एंडरसन

15

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

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


2
आपकी टिप्पणी के बारे में आपकी टिप्पणी के लिए +1 यह तुलना करने में सक्षम नहीं है कि उनकी नौकरी में कौन बेहतर है। यह मनोबल के लिए बुरा होगा!

2
@ कर्स्टनफ़: सच। इसके अलावा DeveloperA अधिक जटिल कार्य (कोड की अधिक पंक्तियों) के साथ काम कर सकता है, जबकि DeveloperB एक साधारण कार्य में काम कर रहा हो सकता है और कम अंक (अंक के पैमाने पर) स्कोर कर सकता है। यह कहना अनुचित होगा कि देवता ने एक बुरा काम किया जब उनकी नौकरी / कार्य दोनों को सामान्य करने का कोई तरीका नहीं है

2
इसके अलावा कुछ डेवलपर्स अपने सहयोगियों को बदनाम करने की कोशिश कर सकते हैं।

यह बात सही है। पेटीएम अवधारणाएं (जैसे ग्रेडिंग) पेटीएम का कारण बनती हैं।
दान रोसेनस्टार्क

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

5

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

मेरा सुझाव कोड समीक्षाओं की कोशिश और सुधार करना होगा ताकि लोग गैर-निर्णयात्मक और गैर-शत्रुतापूर्ण वातावरण में विचारों और विचारों को खुले तौर पर साझा करें। यदि आप ऐसा कर सकते हैं, तो आप अपने मूर्खतापूर्ण जाँचकर्ताओं के आधार पर प्रोग्रामर पर निर्णय लेने की तुलना में 100X बेहतर होंगे जो प्रोग्रामर का आकलन करने के लिए एक अच्छा काम करने के लिए उद्देश्य रखते हैं। मुझे लगता है कि बहुत सारे प्रोग्रामर पहले से ही गर्व और मेहनत कर रहे हैं यदि वे कोड समीक्षाओं में खराब प्रदर्शन करते हैं; मैं सवाल करता हूं कि क्या खराब प्रदर्शन के लिए आगे 'सजा' आम तौर पर मददगार होती है।


4

मेरी एकमात्र सलाह यह होगी कि आपकी कोड समीक्षा प्रक्रिया को बहुत सख्त बनाने से बचें - सबसे महत्वपूर्ण बात यह है कि कोड समीक्षा वास्तव में होती है और इसे गंभीरता से लिया जाता है

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


+100! मेरा मतलब है, +1, लेकिन वास्तव में, यह संपूर्ण बिंदु नहीं है: कोड समीक्षा और इकाई परीक्षण (और अन्य सामान) के लिए, कम अधिक है। यह केवल सच है क्योंकि अधिक केवल शून्य होने तक अधिक है :)
दान रोसेनस्टार्क

4

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


3

यदि आप इसे माप सकते हैं, यदि यह उद्देश्यपूर्ण है, मात्रात्मक है, तो इसे करने के लिए एक उपकरण का प्रयास करें। जहां आपको एक अनुभवी समीक्षक की आवश्यकता होती है वह फजी व्यक्तिपरक सामान के लिए है।


उपकरण बनाने में 100 घंटे, 1000 ने इसका उपयोग करके बचाया।
डैन रोसेनस्टार्क

3

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

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

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


2

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

मेरे द्वारा लिया जाने वाला सामान्य प्रारूप है:

  1. हम क्या ठीक कर रहे हैं?
  2. यह क्या कारण था? (कोड देखें)
  3. हम इसे कैसे ठीक कर रहे हैं?
  4. मुझे नया कोड दिखाओ
  5. मुझे काम करने वाला कोड दिखाओ

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

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


आपके उत्तर से स्पष्ट नहीं: क्या FxCop ने उस नाजुकता को पकड़ लिया, या आपने?
दान रोसेनस्टार्क

2

साइक्लोमैटिक जटिलता (CC) कोड के मूल्यांकन का एक तरीका है जो 'बुरा नहीं है'।

उच्च सीसी वाले वास्तविक कोड में, मेरे पास एक उच्च "यहां क्या हो रहा है, मुझे याद नहीं है" कारक है। लोअर सीसी कोड का पता लगाना आसान है।

जाहिर है, सामान्य कैविट मेट्रिक्स के लिए आवेदन करते हैं।


1
@AfermeraInfo: हुह?
पॉल नाथन

1

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

अन्य चीजें जिन्हें मैं देखूंगा:

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

1

ऐसा लगता है जैसे आप बहुत तेज़ी से विस्तृत हो रहे हैं। आपको इसे और अधिक तोड़ना चाहिए। आपको इसकी कोड गुणवत्ता और इसकी सुविधा के अनुपालन के लिए कोड का निरीक्षण करना चाहिए। तुम दोनों अलग हो जाना चाहिए था और यह भी कहानी का अंत नहीं है ... तो यहाँ मेरा सुझाव है:

कोड गुणवत्ता:

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

फ़ीचर अनुपालन:

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

यदि आप एक कोड समीक्षा के इन दो पहलुओं पर खुद को कवर कर सकते हैं, तो आप सुनहरे हैं।


1

मैं कुछ पैराग्राफ लिख सकता था, लेकिन मैं केवल इस बात पर चमकूंगा कि कार्ल वाइजर "सॉफ्टवेयर में पीयर रिव्यू : ए प्रैक्टिकल गाइड" में क्या बताते हैं । मुझे लगता है कि उनकी पुस्तक में आपके प्रश्न के स्पष्ट और संक्षिप्त उत्तर हैं (और बहुत कुछ)।


1

निर्भर करता है।

समीक्षा के कुछ भागों को आसानी से व्यावहारिक (कोई FxCop समस्याओं, नहीं कर रहे हैं StyleCop त्रुटियों, कोई CAT.NET त्रुटियों, आदि)

शैली, हालांकि, व्यक्तिपरक हो सकती है - लेकिन जैसा कि आप कहते हैं, एक बार जब आप अधिक विशिष्ट होना शुरू हो जाते हैं (कोई विधि> 20 लाइनें) तो आप इसे माप सकते हैं, और एनडीपेंड जैसे उपकरण स्वचालित रूप से ऐसा कर सकते हैं। हालांकि कुछ चीजें कभी भी स्वचालित नहीं होंगी - एज केस हैंडलिंग की जाँच करने के लिए परीक्षणों की आवश्यकता होगी, जो कोड कवरेज लाता है, और 100% बहुत सारे मामलों में एक अनुपलब्ध आदर्श है। डुप्लीकेशन चेकिंग स्वचालित रूप से करना मुश्किल है। अशक्त जाँच, निश्चित रूप से मैं आपसे सहमत नहीं हूँ, लेकिन आप उस पर निर्भर निर्भर नियम, या FxCop नियम लिखने में सक्षम हो सकते हैं।

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


0

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

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

समीक्षा प्रक्रिया को समीक्षा के कुछ हिस्सों को विफल करने की अनुमति देने के लिए पर्याप्त लचीला होना चाहिए, बशर्ते कि यह उचित और दस्तावेज हो सकता है। ब्लाइंडली कुछ कोड क्वालिटी स्टैण्डर्ड से चिपकना जिसके कारण एक घटक अनावश्यक रूप से जटिल हो जाता है / असहनीय एक बुरा विचार है!


प्रीफेक्ट चीजें होती हैं।

0

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


0
  • अगर कोई मशीन इसकी जांच कर सकती है, तो लोगों को नहीं करनी चाहिए।
  • केवल एक चेकलिस्ट आइटम: क्या हर त्रुटि का मामला हर जगह सही ढंग से संभाला जाता है?
  • गुणवत्ता में सुधार और ज्ञान के हस्तांतरण के लिए कोड समीक्षाओं का उपयोग करें।
  • "खराब" डेवलपर्स की पहचान करने के लिए कोड समीक्षाओं का उपयोग न करें।
  • स्पष्ट बिंदुओं की तुलना में अहंकार नृत्य अधिक प्रभावी है।
  • इसे कम रखें - 90 मिनट और 500 लाइनें बड़ी है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.