पिछले वर्ष में कुछ गंभीर गुणवत्ता की समस्याओं के बाद, मेरी कंपनी ने हाल ही में कोड समीक्षा पेश की है। दिशा-निर्देशों या किसी भी प्रकार की चेकलिस्ट के बिना कोड समीक्षा प्रक्रिया जल्दी से शुरू की गई थी।
एक अन्य डेवलपर और मैंने जहां सिस्टम में किए गए सभी परिवर्तनों की समीक्षा करने के लिए चुना, इससे पहले कि वे ट्रंक में विलय हो जाएं।
हमें "तकनीकी लीड" के रूप में भी चुना गया था। इसका मतलब है कि हम कोड गुणवत्ता के लिए जिम्मेदार हैं, लेकिन हमारे पास प्रक्रिया में परिवर्तन लागू करने, डेवलपर्स को पुन: असाइन करने या वापस प्रोजेक्ट रखने का कोई अधिकार नहीं है।
तकनीकी रूप से हम मर्ज से इनकार कर सकते हैं, इसे विकास को वापस दे सकते हैं। वास्तव में यह लगभग हमेशा हमारे बॉस के साथ समाप्त होता है और यह मांग करता है कि इसे समय पर भेज दिया जाए।
हमारा प्रबंधक एक एमबीए है जो ज्यादातर आगामी परियोजनाओं की अनुसूची बनाने से संबंधित है। जब वह कोशिश कर रहा होता है, तो उसे लगभग यह नहीं पता होता है कि हमारा सॉफ्टवेयर एक व्यावसायिक दृष्टिकोण से क्या करता है, और एक डेवलपर से स्पष्टीकरण के बिना भी सबसे बुनियादी ग्राहक मांगों को समझने के लिए संघर्ष कर रहा है।
वर्तमान में विकास एसवीएन में विकास शाखाओं में किया जाता है, डेवलपर के सोचने के बाद कि वह तैयार है, वह हमारे टिकट प्रणाली में हमारे प्रबंधक को टिकट पुन: सौंपता है। प्रबंधक इसके बाद हमें इसे सौंपता है।
कोड समीक्षाओं से हमारी टीम के भीतर कुछ तनाव पैदा हुए हैं। विशेष रूप से पुराने सदस्यों में से कुछ बदलावों पर सवाल उठाते हैं (यानी "हमने हमेशा इसे इस तरह किया था" या "विधि में एक समझदार नाम क्यों होना चाहिए, मुझे पता है कि यह क्या करता है?")।
पहले कुछ हफ्तों के बाद मेरे सहकर्मी ने सहकर्मियों के साथ परेशानी न पैदा करने के लिए चीजों को स्लाइड करना शुरू कर दिया (उसने मुझे खुद बताया, कि एक ग्राहक द्वारा बग रिपोर्ट दायर किए जाने के बाद, वह बग के बारे में जानता था, लेकिन डर था कि डेवलपर उसे इंगित करने के लिए उस पर पागल होगा)।
दूसरी ओर, मैं अब प्रतिबद्ध कोड के साथ समस्याओं को इंगित करने के लिए एक गधा होने के लिए जाना जाता हूं।
मुझे नहीं लगता कि मेरे मानक बहुत अधिक हैं।
इस समय मेरी चेकलिस्ट है:
- कोड संकलित करेगा।
- कम से कम एक तरह से कोड काम करेगा।
- कोड सबसे सामान्य मामलों के साथ काम करेगा।
- कोड अधिकांश किनारे मामलों के साथ काम करेगा।
- यदि सम्मिलित डेटा मान्य नहीं है तो कोड उचित अपवाद को फेंक देगा।
लेकिन मैं प्रतिक्रिया देने के तरीके की जिम्मेदारी पूरी तरह से स्वीकार करता हूं। मैं पहले से ही कार्रवाई करने वाले बिंदु बता रहा हूं कि कुछ को क्यों बदला जाना चाहिए, कभी-कभी यहां तक कि यह पूछने पर कि कुछ को एक विशिष्ट तरीके से क्यों लागू किया गया था। जब मुझे लगता है कि यह बुरा है, तो मैं इंगित करता हूं कि मैंने इसे दूसरे तरीके से विकसित किया होगा।
मेरे पास जो कमी है, वह है कुछ को "अच्छे" के रूप में इंगित करने की क्षमता। मैंने पढ़ा कि अच्छी खबर में बुरी खबर को सैंडविच करने की कोशिश करनी चाहिए।
लेकिन मुझे कुछ ऐसा करने के लिए कठिन समय मिल रहा है जो अच्छा है। "अरे इस बार आपने वास्तव में जो कुछ भी किया है वह अच्छा या मददगार है।"
उदाहरण कोड की समीक्षा
हे जो,
लायब्रेरी \ ACME \ ExtractOrderMail क्लास में आपके परिवर्तनों के बारे में मेरे कुछ प्रश्न हैं।
मुझे समझ नहीं आया कि आपने "TempFilesToDelete" को स्टैटिक के रूप में क्यों चिह्नित किया? फिलहाल "GetMails" के लिए दूसरा कॉल अपवाद को फेंक देगा, क्योंकि आप इसमें फ़ाइलें जोड़ते हैं, लेकिन उन्हें हटाने के बाद कभी नहीं हटाते हैं। मुझे पता है कि फ़ंक्शन को प्रति रन केवल एक बार कहा जाता है, लेकिन भविष्य में यह बदल सकता है। क्या आप इसे केवल एक उदाहरण चर बना सकते हैं, तो हम समानांतर में कई वस्तुएं रख सकते हैं।
... (कुछ अन्य बिंदु जो काम नहीं करते हैं)
छोटे बिंदु:
- "GetErrorMailBody" पैरामीटर के रूप में एक अपवाद क्यों लेता है? क्या मैं कुछ भुल गया? आप अपवाद को फेंक नहीं रहे हैं, आप बस इसे पास करते हैं और "ToString" कहते हैं। ऐसा क्यों है?
- SaveAndSend विधि के लिए एक अच्छा नाम नहीं है। यदि मेल की प्रोसेसिंग गलत हो जाती है तो यह विधि त्रुटि मेल भेजती है। क्या आप इसे "SendErrorMail" या कुछ इसी तरह का नाम दे सकते हैं?
- कृपया पुराने कोड पर टिप्पणी न करें, इसे एकमुश्त हटा दें। हमारे पास अभी भी यह तोड़फोड़ है।