इकाई परीक्षणों से पहले या बाद में कोड की समीक्षा की जानी चाहिए


10

मैं इकाई की समीक्षा करने से पहले अपने सहयोगी के साथ बहस कर रहा हूं - इकाई परीक्षणों से पहले या बाद में। सबसे अच्छा अभ्यास क्या है?

कुछ कारकों को हमें ध्यान में रखना चाहिए (और भी हो सकता है):

  • कोड परिवर्तन का आकार - एक बड़े बदलाव का मतलब है कि कोड समीक्षा से अधिक परिवर्तन होंगे। यदि ये परिवर्तन बड़े हैं, यदि यूटी कोड समीक्षा से पहले था, तो आपको अपने अधिकांश यूटी को फिर से दोहराना होगा।
  • यूनिट टेस्ट करने के लिए आवश्यक समय
  • क्या यह नई कार्यक्षमता या बग फिक्स है

मुझे व्यक्तिगत रूप से नहीं लगता कि दोनों एक दूसरे पर इतने निर्भर हैं। डेवलपर्स को केवल पूर्ण कोड की समीक्षा करनी चाहिए, क्योंकि यह अपूर्ण हो सकता है या अपेक्षा के अनुरूप काम नहीं कर सकता है।
लॉयड पॉवेल

जवाबों:


20

आपको हमेशा कोड की समीक्षा करने से पहले इकाई का परीक्षण करना चाहिए और यहां बताया गया है कि क्यों

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

संभवतः अन्य कारण हैं, लेकिन वे हैं जिन्हें मैंने व्यक्तिगत रूप से देखा है और 3 अलग-अलग टीमों / कंपनियों के भीतर कोड समीक्षा प्रथाओं को लागू किया है।

पाठ्यक्रम का संपादन कई बार होता है जब कोड समीक्षा आपकी सॉफ़्टवेयर डेवलपमेंट प्रक्रिया (चाहे झरना या फुर्तीली) में एक कदम है। यदि आप कोड के किसी विशेष रूप से बड़े या कठिन खंड पर काम कर रहे हैं तो किसी भी बिंदु पर उस पर एक और जोड़ी आँखें प्राप्त करने के लिए स्वतंत्र महसूस करें।


11

कोड समीक्षा तब होती है जब कोड "किया जाता है"।

मेरे संगठन में "किए गए" की हमारी परिभाषा में इकाई परीक्षण शामिल हैं (जैसा कि हम टीडीडी के लिए लक्ष्य रखते हैं) इसलिए कोड समीक्षा पूर्ण कोड की होती है - और पूर्ण कोड परीक्षण।

इसके अलावा, परीक्षणों की समीक्षा और पुनर्संरचना की आवश्यकता है ताकि यह समझ में आए कि वे कोड समीक्षा का हिस्सा हैं।


इससे पहले कि आप इसके लिए यूनिट टेस्ट लिखें, कोड की समीक्षा करने के लिए कोड की समीक्षा करने का कोई मतलब नहीं है?
दिम्बा

यदि आपके पास परीक्षण हैं और कोड की समीक्षा कोड में परिवर्तन का सुझाव देती है, तो आप कोड में परिवर्तन विश्वास के साथ कर सकते हैं क्योंकि वे परीक्षण द्वारा समर्थित हैं। परीक्षण के बिना, कोड की समीक्षा के परिणामस्वरूप होने वाले परिवर्तन बग का परिचय दे सकते हैं।

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

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

4

टेस्ट को समीक्षा के लिए कोड का हिस्सा माना जाना चाहिए। इसलिए परीक्षण किए जाने के बाद समीक्षा करना समझ में आता है।

सुनिश्चित करें कि परीक्षणों की समीक्षा भी की गई है। यह उन लोगों के लिए महत्वपूर्ण है जो इकाई परीक्षणों में नए हैं।

सुनिश्चित करें कि आपकी टीम निर्भरता इंजेक्शन, आइसोलेशन फ्रेमवर्क, मोक्स बनाम स्टब्स, सीम, इंटरेक्शन बनाम स्टेट बेस्ड टेस्ट और इंटीग्रेशन बनाम यूनिट टेस्ट को रेखांकित करती है।

आपको उपरोक्त विषयों को लागू करने की आवश्यकता नहीं है, लेकिन आपको उन्हें समझना चाहिए।


2

कुंआ,

यह इस बात पर निर्भर करता है कि आपका "यूनिट टेस्ट" से क्या मतलब है ...

यदि यह एक TDD स्टाइल यूनिट टेस्ट था तो यह अर्थहीन है क्योंकि आप अपना कोड लिखते समय टेस्ट लिखते हैं। कोई बाद का मामला नहीं है। इस मामले में आप लगातार कोड की गुणवत्ता में सुधार करते हैं: Refactoring ...

तथा

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

लेकिन सभी व्यक्तिगत रूप से, कोडरेव्यू के लिए, बाद में या बाद में इकाई परीक्षण मेरे लिए एक वास्तविक मानदंड नहीं है ...

हम कोडरव्यू क्यों करते हैं? कोड गुणवत्ता के लिए ... "गुणवत्ता नियंत्रण" गेट के बजाय, अपने सॉफ़्टवेयर डेवलपमेंट प्रोसेस-एनवायरमेंट में गुणवत्ता इंजेक्ट करें ...


@उत्तर के लिए धन्यवाद। शायद मैं स्पष्ट नहीं था, लेकिन मैं औपचारिक "गुणवत्ता नियंत्रण" गेट के कुछ प्रकार के रूप में कोड समीक्षा का उल्लेख नहीं करता हूं। मैं यह देखने की कोशिश कर रहा हूं कि विकास की गति / गुणवत्ता के मामले में "सही" तरीका क्या है
dimba

2

मैं कहना चाहूंगा, "फुर्तीली" बनें ... कोड का इंतजार न करें, कुछ त्वरित, अनौपचारिक कोड की समीक्षा करने के लिए समाप्त होने के लिए: ऐसे डेवलपर्स हैं जिनके साथ और विषय जिनके साथ आप वास्तव में पूरे इंतजार कर सकते हैं कोड + परीक्षण चरण समाप्त होने के लिए ... लेकिन

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

यदि डेवलपर टीम के लिए नया है, साथ ही, कोड की समीक्षा जल्दी और शायद अक्सर करता है

और वैसे, यूनिट परीक्षणों के साथ-साथ कोड समीक्षा की भी आवश्यकता है।

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