पुल अनुरोध बड़े होने पर बेहतर कोड समीक्षा कैसे करें?


12

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

संकट

मुझे लगता है कि मेरी कोड समीक्षा बेहतर तरीके से की जा सकती है। मैं विशेष रूप से 20+ फ़ाइलों में कई परिवर्तनों के साथ बड़े कोड समीक्षाओं के बारे में बात कर रहा हूं।

स्पष्ट स्थानीय कोड समस्याओं को पकड़ना बहुत आसान है। यह समझना कि क्या कोड व्यावसायिक मानदंडों को पूरा करता है, हालांकि एक अलग कहानी है।

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

संभव समाधान, और वे मेरे लिए काम क्यों नहीं करते

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

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

आप एक पूरे के रूप में कोड के तार्किक पहलू को भी अनदेखा कर सकते हैं, लेकिन यह बहुत जोखिम भरा लगता है, खासकर जब कोड एक अनुभवहीन प्रोग्रामर से आता है।

एक बेहतर उपकरण का उपयोग सहायक हो सकता है, लेकिन मुझे एक नहीं मिला।

प्रशन

  • क्या आपको अपनी कोड समीक्षाओं के साथ समान समस्याएं हैं? आप उनका सामना कैसे करते हैं?
  • शायद आपके पास बेहतर उपकरण हैं?

3
वे कोड समीक्षाएं इतनी बड़ी क्यों हैं? उदाहरण के लिए, यदि वे एक स्वचालित रीफैक्टरिंग का परिणाम हैं, तो कमिट की समीक्षा करने के बजाय, आप जांचते हैं कि क्या पुरानी कमेटी पर रीएक्टिंग को दोहराने से नई कमिट की समान कॉपी बनती है, और फिर तय करें कि आप टूल पर भरोसा करते हैं या नहीं। इसलिए, 1000-लाइन के अंतर की समीक्षा करना अचानक एक IDE में 1-लाइन कमांड और IDE विक्रेता पर भरोसा करने के लिए एक निर्णय की समीक्षा करता है।
जोर्ग डब्ल्यू मित्तग

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

जवाबों:


8

हमें ये समस्याएँ थीं और नीचे दिए गए सवाल पूछना हमारे लिए अच्छा काम कर रहा है:

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

हम पीआरएस को एकल जिम्मेदारी (एसआर) द्वारा तोड़ने की कोशिश करते हैं। शुरुआती पुश बैक के बाद लोग यह जानकर हैरान थे कि कुछ छोटा सा भी बड़ा हो सकता है।

एसआर समीक्षा करना वास्तव में आसान बनाता है और अपेक्षित कार्यान्वयन के ज्ञान का प्रसार भी करता है।

यह वृद्धिशील रिफ्लेक्टर के लिए भी अनुमति देता है क्योंकि अधिक जोड़ा जाता है और पीआर टर्नअराउंड समय काफी कम हो जाता है!

यदि संभव हो तो मैं उन्हें एसआर द्वारा तोड़ने का सुझाव देता हूं और देखें कि क्या यह आपके लिए काम करता है। इसे करने के लिए कुछ अभ्यास करता है।


11

कभी-कभी आप बड़े पुल अनुरोधों से बच नहीं सकते हैं - लेकिन आप समझदार हो सकते हैं कि किसकी जिम्मेदारी है।

मैं प्रेरक तर्कों के रूप में पुल अनुरोधों का इलाज करता हूं। लेखक मुझे समझाने की कोशिश कर रहा है कि कोड को इस तरह देखना और काम करना चाहिए।

किसी भी तर्क के साथ इसका एक ही स्पष्ट विचार होना चाहिए। यह या तो:

  • एक रिफ्लेक्टर,
  • एक अनुकूलन,
  • या नई कार्यक्षमता।

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

अभी भी बड़े पुल अनुरोध होंगे, लेकिन एक स्पष्ट तर्क के साथ यह देखने के लिए बहुत आसान है कि क्या फिट नहीं है।

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


8

पूर्ण पुल अनुरोध की समीक्षा न करें, लेकिन हर प्रतिबद्ध। आप वैसे भी इस तरह से पुल अनुरोध के बारे में बेहतर समझ प्राप्त करेंगे

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

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

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

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

"अक्सर" अस्पष्ट है, लेकिन यदि आप अपने आप को बहुत अधिक समय समीक्षा कोड खर्च करते हुए पाते हैं, जो पुल अनुरोध के अंतिम संशोधन के लिए अपना रास्ता नहीं ढूंढता है, तो आप दो तकनीकों का उपयोग कर सकते हैं:

  • सभी कमिट्स के माध्यम से एक बार जल्दी से जाओ, बस कमिट मैसेजेस पढ़ना। इस तरह, जब किसी विशेष प्रतिबद्ध का अध्ययन करते हैं, तो आपको याद हो सकता है कि बाद में कहीं एक प्रतिबद्ध संदेश ने कहा कि आप जिस बदलाव को देख रहे हैं वह उल्टा हो गया था।

  • फ़ाइल के नवीनतम संस्करण का एक साइड-बाय-साइड दृश्य है (हालांकि कई मामलों में, बड़े कमिट के लिए, (1) फाइलें मौलिक रूप से भिन्न हो सकती हैं और (2) फ़ाइलों का नाम बदला जा सकता है या कोड के बड़े ब्लॉक हो सकते हैं। कहीं और स्थानांतरित किया जा सकता है, जिससे मिलान फ़ाइल ढूंढना मुश्किल हो जाता है)।

  • या तो कमिटर्स से पूछें कि स्क्वैश कमिट करता है, जब यह समझ में आता है, या एक विशिष्ट कमिट मैसेज कन्वेंशन होता है, जहां एक कमिट एक दूसरे का हिस्सा होता है, और आपकी समीक्षा निम्नलिखित कई कमिट्स को ध्यान में रखते हैं।


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


1
@ JörgWMittag: आपकी टिप्पणी के लिए धन्यवाद। ओपी ने दावा किया कि वह प्रति-समीक्षाओं की समीक्षा नहीं करना चाहता है क्योंकि वह पुराने बदलावों को देखेगा, जो सच है, लेकिन प्रति फ़ाइल समीक्षा से संबंधित सभी मुद्दों के रूप में समस्याग्रस्त नहीं होना चाहिए। चूंकि मेरा जवाब उस पर स्पष्ट नहीं था, इसलिए मैंने विशेष रूप से इस बिंदु को संबोधित करने के लिए एक खंड जोड़ा।
आर्सेनी मौरज़ेंको

2

बाहर खींचो अनुरोधों की समीक्षा के साथ आप क्या हासिल करने की कोशिश कर रहे हैं और देखें कि क्या कोई विकल्प है।

उदाहरण के लिए आप चाहते हो सकता है

  • सुनिश्चित मानकों का पालन किया जाता है
  • जाँच की कार्यक्षमता सही है
  • सुनिश्चित करें कि एक से अधिक लोग कोड को समझते हैं
  • ट्रेन के जूनियर्स

आदि आदि।

इनमें से कुछ को अन्य चीजों द्वारा बेहतर तरीके से परोसा जा सकता है, और यहां तक ​​कि सिर्फ कारणों को समझने से आप अपने चेक के दायरे को सीमित कर सकते हैं।

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

अगर मुझे कोड को समझने की आवश्यकता है, तो शायद बड़ी विशेषताओं पर जोड़ी प्रोग्रामिंग करें और कोड की समीक्षा को मानकों की जांच तक सीमित करें।

जब तक आपके पास QA के लिए एक स्तरित दृष्टिकोण न हो, आपको हर पीआर पर सभी चीजों की जाँच करने की आवश्यकता नहीं है

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