आपको लगता है कि अनावश्यक है एक कोड समीक्षा को अस्वीकार करने के लिए कैसे?


89

मैं एक ऐसी स्थिति में हूं जहां मुझे कुछ कोड की समीक्षा करने के लिए कहा गया है जो एक समस्या को हल करता है जो मुझे विश्वास नहीं है कि मौजूद है।

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

मेरा मानना ​​है कि समीक्षक मूल कोडर के रूप में कोड परिवर्तन के लिए उतने ही जिम्मेदार हैं, और मैं इस बदलाव के लिए जिम्मेदारी स्वीकार करने को तैयार नहीं हूं। आप इस समीक्षा को कैसे अस्वीकार करेंगे?


113
मुझे स्पष्ट लगता है। आप समीक्षा में बताते हैं कि कोड एक C ++ बौद्धिक हस्तमैथुन है जिसका उद्देश्य एक समस्या को हल करना है जो मौजूद नहीं है। और फिर, समीक्षा प्रक्रिया के भाग के रूप में, आप कोड को अस्वीकार करते हैं।
user16764

86
"बौद्धिक हस्तमैथुन" शब्दों का उपयोग न करें जब आप इसे अस्वीकार करते हैं। यदि आप उस शब्द का उपयोग करते हैं, तो आप उसका विरोध करेंगे, और वह यह नहीं देखेगा कि आपको संभावित रूप से सही तकनीकी आलोचना के रूप में क्या कहना है, वह इसे एक व्यक्तिगत हमले के रूप में देखेगा। यह अच्छी तरह से बौद्धिक हस्तमैथुन हो सकता है, लेकिन आप पूरी तरह से निश्चित हो सकते हैं कि वह इसे इस तरह से नहीं देखता है।
माइकल शॉ

15
जेम्स - मैंने समुदाय को आपके मूल प्रश्न पर ध्यान केंद्रित करने की अनुमति देने के लिए भावना को आपके प्रश्न से बाहर कर दिया। जैसा कि अन्य लोग इंगित कर रहे हैं, आपकी समीक्षा में भरी हुई शब्दावली का उपयोग केवल उत्तेजित करने वाला है जो स्पष्ट रूप से एक नाजुक स्थिति है।

8
C और C ++ ऐसी चीज़ों से भरे हुए हैं जो काम करते दिखाई देते हैं लेकिन वास्तव में अपरिभाषित व्यवहार हैं। यूबी एक वास्तविक दोष है, भले ही आप एक परीक्षण नहीं लिख सकते हैं जो दिखाता है कि यह काम नहीं करना चाहिए जैसा कि इसे करना चाहिए। उदाहरण के लिए, कई संकलक यूबी को एक अनुकूलन अवसर के रूप में उपयोग करते हैं, यह मानकर कि अपरिभाषित मामला कभी नहीं होता है। उदाहरण के लिए यदि आप size > size+1एक हस्ताक्षरित पूर्णांक पर अतिप्रवाह की जांच करते थे, तो संकलक इस अभिव्यक्ति को बदल सकता है false, क्योंकि हस्ताक्षरित पूर्णांक का अतिप्रवाह अपरिभाषित है। ब्लॉग
2011/

5
@MichaelShaw "वह इसे निजी हमले के रूप में देखेंगे।" जो प्रश्न का शब्द मेरे जैसे लगता है, एक अधिक वरिष्ठ देव पर एक व्यक्तिगत हमला जिसके साथ ओपी का मतभेद है कि वह अब "जीत" सकता है क्योंकि उसे सत्ता की स्थिति में डाल दिया गया है।
jwenting

जवाबों:


274

उस परीक्षण मामले के लिए पूछें जो परिवर्तन के बिना विफल रहता है जो परिवर्तन के साथ सफल होता है।

यदि वह एक उत्पादन नहीं कर सकता है, तो आप इसे औचित्य के रूप में उपयोग करते हैं।

यदि वह एक उत्पादन कर सकता है, तो आपको यह समझाने की आवश्यकता है कि परीक्षण अमान्य क्यों है।


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

99
सिर्फ इसलिए कि आप एक परीक्षा नहीं लिख सकते इसका मतलब यह नहीं है कि यह टूटा नहीं है। अपरिभाषित व्यवहार जो आमतौर पर उम्मीद के मुताबिक काम करता है (सी और सी ++ उस से भरे हुए हैं), दौड़ की स्थिति, एक कमजोर मेमोरी मॉडल के कारण संभावित
पुनरावृत्ति

29
इसके अलावा, मानक रीफैक्टरिंग के बारे में क्या? रीफैक्टरिंग कार्य के एक टुकड़े के लिए आप एक असफल परीक्षा कैसे लिखते हैं?
माइक वेलर

62
"उसे यह साबित करने के लिए कहें कि यह क्यों आवश्यक है ..." हो सकता है कि वह आपको यह सिखाने के लिए कहें कि यह क्यों आवश्यक है।
माइक शेरिल 'कैट रिकॉल'

8
@RhysW: गलत धारणा। मौजूदा कोड, दौड़ की स्थिति के साथ, उस संबंध में भी परीक्षण नहीं किया जा सकता है। तो नया कोड सैद्धांतिक रूप से बेहतर और अनुभवजन्य समकक्ष है। यदि पुरानी संहिता अनुभवजन्य रूप से बेहतर है तो आपकी धारणा केवल यही है।
एमएसल्टर्स

152

समीक्षक वस्तुनिष्ठ होना चाहिए।

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

टीम के दृष्टिकोण पर विचार करें।

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

अस्वीकरण कोड समीक्षा प्रक्रिया का एक स्वाभाविक हिस्सा है।

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

जिम्मेदारी दोनों तरह से काटती है।

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

नोट ले लो।

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


24
+1 यह स्वीकृत उत्तर की तुलना में अधिक उपयोगी है
सिमोन बर्गोट

2
निश्चित रूप से। स्वीकृत उत्तर एक मामले के लिए विशिष्ट है, स्पष्ट रूप से सामान्य नहीं है और इस एक के रूप में अच्छी तरह से सोचा गया है।
फ्लोरियन मार्गाइन

40

संभावित जवाबी दलीलों के लिए अस्वीकृति और बचाव के अपने कारणों को लिखें। फिर फिक्सर के साथ तर्कसंगत रूप से चर्चा करें और यदि आवश्यक हो तो प्रबंधन के लिए आगे बढ़ें।

यदि आपके पास पर्याप्त दस्तावेज हैं (कोड लिस्टिंग, परीक्षण के परिणाम और उद्देश्य तर्क सहित), तो आप अच्छी तरह से कवर होंगे।

आप फिक्सर के साथ कुछ बीमार पैदा करेंगे, इसलिए सुनिश्चित करें कि मुद्दा इसके लायक है (यानी, गैर-फिक्स नुकसान का कारण बनता है?)

इसके अलावा, अगर फिक्सर किसी भी तरह से मालिकों से संबंधित है, तो इस उत्तर को भूल जाएं।


9
मैं अकेले ही आपके उत्तर के अंतिम भाग के लिए दो बार वोट करूंगा। बहुत ठोस जवाब।

31

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

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

इसलिए, इसके बजाय "समस्या मौजूद नहीं है, इसलिए मुझे इसकी समीक्षा नहीं करनी चाहिए", शायद कुछ इस तरह से पूछें कि "इसे ठीक से समीक्षा करने के लिए, मुझे समस्या को समझने की आवश्यकता है। क्या आप कृपया इसे अपने से समझा सकते हैं।" दृष्टिकोण?"

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


8
उत्कृष्ट बिंदु, लेकिन मैं यह समझने में असफल रहा कि नीचे का उदाहरण कैसे संबंधित है (मैं यह दावा नहीं करता कि यह असंबंधित है, बिल्कुल, संबंध के बारे में मेरी कमी को इंगित करें)।
ugoren

8
@ यूगोरेन हा हा, मुझे पसंद है कि आपने वहां क्या किया!
TheDarkKnight

1
@ यूग्रेन रिलेशन है 'जब तक आप पूरी तस्वीर नहीं देख सकते, न ही ठोस राय बना सकते हैं'
RhysW

2
मुझे हमेशा विनम्र दृष्टिकोण पसंद है, मैं इस आधार पर परिवर्तन को अस्वीकार कर दूंगा कि मुझे समझ नहीं आ रहा है और इसलिए मैं इसे ओके देने के लिए योग्य नहीं हूं।
फिल्डिन

2
@PhilDin विनम्र है और फिर यह कहते हुए इधर-उधर जा रहे हैं कि आप नौकरी के लिए योग्य नहीं हैं। यदि वह कोड की समीक्षा करने की स्थिति में है, तो मुझे लगता है कि लोगों ने उसे उस स्थिति में डाल दिया है कि वह ऐसा करने के लिए पर्याप्त योग्य है।
एंडी

9

C / C ++ अपरिभाषित व्यवहार से भरा हो सकता है। एक हाथ यह खराब है क्योंकि यह अप्रत्याशित व्यवहार को जन्म दे सकता है। दूसरी ओर यह आक्रामक अनुकूलन की अनुमति देता है और आमतौर पर जब आप C / C ++ का उपयोग कर रहे होते हैं तो आप गति में रुचि रखते हैं।

टेस्ट केस लिखना जो टूट सकता है - यह अजीब वास्तुकला या संकलक शामिल हो सकता है जो अब मौजूद नहीं है। यह भी किसी भी समझदार वास्तुकला पर लग सकता है "यह किसी भी समस्या का कारण नहीं होना चाहिए"।

हालाँकि एक बिंदु या किसी अन्य पर आप प्लेटफ़ॉर्म बदल देंगे (कहते हैं - आप मोबाइल पर जाना चाहते हैं ताकि आप ARM पर पोर्ट कर सकें या आप चीजों को गति देना चाहते हैं और GPU का उपयोग करना चाहते हैं)। इस बिंदु पर चीजें टूटना शुरू हो सकती हैं और आपको इसे डीबग करना होगा। यह नए संस्करण के लिए संकलक को अद्यतन करने के रूप में तुच्छ हो सकता है (और आप इसे चाहते हैं / इसकी आवश्यकता हो सकती है)।

समस्याग्रस्त कोड था:

int d[16];

int SATD (void)
{
   int satd = 0, dd, k;
   for (dd=d[k=0]; k<16; dd=d[++k]) {
     satd += (dd < 0 ? -dd : dd);
   }
   return satd;
 }

अंतिम पुनरावृत्ति के दौरान d[++k] => d[++15] => d[16]पहुँचा है। चूंकि आमतौर पर अगला तत्व कानूनी मेमोरी था (पेजिंग नहीं सी मेमोरी मॉडल के संदर्भ में) यहां तक ​​कि तुच्छ संकलक भी अजीब व्यवहार के साथ किसी भी निष्पादन योग्य का उत्पादन नहीं करते थे। परीक्षण मामले को लिखने का एकमात्र तरीका सी के समान मेमोरी मॉडल (शायद वीएम) के साथ प्लेटफॉर्म ढूंढ रहा था।

हालाँकि, gcc 4.8 prerelase ने देखा कि d[++k]इसे प्रत्येक लूप में निष्पादित किया जाता है। इसलिए k < 16अन्यथा पहुंच अवैध होगी और संकलक को खिलाए गए कार्यक्रम की वैधता अनुबंध का हिस्सा है। इसलिए लूप की स्थिति को हमेशा सही माना जाता है, इसलिए यह अनंत लूप है। यह अजीब लग सकता है लेकिन यह पूरी तरह से कानूनी अनुकूलन था - उत्सर्जन system("dd if=/dev/zero of=/dev/sda"); system("format c:")भी लूप के लिए सही प्रतिस्थापन होगा। ऐसे और भी सूक्ष्म तरीके हैं जिनसे आप व्यवहारों को प्रदर्शित कर सकते हैं। उदाहरण के लिए Transactional मेमोरी के बारे में व्याख्यान के दौरान मुझे याद है कि प्रस्तुतकर्ता ने गलत मान प्राप्त करने के लिए कई बार कोशिश की जब 2 थ्रेड्स ने समान मान बढ़ाया।

हालाँकि, C / C ++, कुछ भाषाओं के विरोध के रूप में मानकीकृत है, इसलिए इस तरह के विवाद को उद्देश्य स्रोत के संदर्भ में किया जा सकता है:

  • अगर आपको लगता है कि यह सी / सी ++ मानक (यानी यह परिभाषित मूल्य और व्यवहार की ओर जाता है) का उपयोग करके इसे साबित करने की कोशिश नहीं है
  • अगर उसे लगता है कि यह एक समस्या है, तो उसे C / C ++ मानक का उपयोग करके इसे साबित करने के लिए कहें (यानी यह अपरिभाषित मूल्य या व्यवहार की ओर जाता है)

सामान्य तौर पर अगर आपकी टीम C / C ++ में लिख रही है तो उसके हाथ में मानक होना उपयोगी है - यहां तक ​​कि टीम के विशेषज्ञ भी कुछ समय में एक बार कुछ अजीब पा सकते हैं।


4

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

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


1
"... लेकिन शायद एक कारण है कि उसने ऐसा किया या नहीं ..." - यह एक बड़ी धारणा है जिसे आप बना रहे हैं। और आप यह भी याद कर रहे हैं कि प्रश्न में कहा गया है कि (ओपी की राय में) कोई समस्या नहीं है। निश्चित रूप से, ओनस उस व्यक्ति पर होना चाहिए जो "फिक्स" का प्रस्ताव कर रहा है कि यह प्रदर्शित करने के लिए कि एक वास्तविक समस्या है। किसी समस्या का "सरल समाधान" प्रस्तुत करना निरर्थक है जो अस्तित्व में नहीं है।
स्टीफन C

4
@StephenC हाँ, और मैं इस राय से खड़ा हूं कि ओपी को इस मामले में संदेह का लाभ देना चाहिए। या फिर यह वास्तव में टकराव की समीक्षा करने वाला है।
djechlin

3

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

बेशक इस के आसपास संवेदनशील आंतरिक राजनीतिक-नेस हो सकता है। लेकिन यह वह तरीका है जो मैं जाना चाहिए (delectably)।

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