सह-प्रोग्रामर द्वारा नहीं किए जाने वाले गैर-अभी तक लागू विधि से कैसे निपटें?


45

यह एक सवाल है कि टीमों में कैसे काम किया जाए।

हाल ही में मैंने 6 लोगों की टीम के साथ अपने पहले बड़े (~ 80 वर्ग, जावा) प्रोग्रामिंग प्रोजेक्ट पर काम किया, हालांकि हम में से केवल 4 लगातार कोड पर काम कर रहे थे। हमने इस कार्य को शीघ्रता से वितरित किया और कुछ बिंदु पर मुझे एक ऐसी विधि की आवश्यकता थी जिसे अभी तक मेरे किसी सह-प्रोग्रामर द्वारा लागू नहीं किया गया था। इससे निपटने के लिए अनुशंसित तरीका कैसे है?

मेरे द्वारा देखे गए विकल्प, हालाँकि मुझे वास्तव में उनमें से कोई पसंद नहीं है:

  1. //TODOइस बीच विधि को लागू किया गया है या नहीं यह जांचने के लिए बाद में खुद को कोड की इस पंक्ति को फिर से लिखना और फिर से लिखना ।

  2. इसी टीम के सदस्य पूछ कि लागू करने के लिए अब

  3. अभी तक लागू नहीं किया गया है की एक स्पष्ट विवरण के साथ एक कस्टम रनटाइम अपवाद को फेंकना। (कम से कम हमें यह जानने के लिए लंबे समय तक खोज करने की ज़रूरत नहीं है कि क्या गायब है)

  4. अपनी कक्षा में आवश्यक पद्धति को जोड़ना और उन्हें //TODOसंदेश बॉडी में लिखना , संभवतः उन्हें उस बदलाव के बारे में त्वरित संदेश भी भेजना। (अब यह मेरी समस्या नहीं है, लेकिन यह कष्टप्रद मर्ज संघर्ष का कारण बन सकता है अगर वे इस बीच इस पद्धति पर काम कर रहे थे)

  5. काम करने वाले कोड को लिखने से पहले हर चीज के लिए अमूर्त कक्षाओं या इंटरफेस को परिभाषित करना। (बहुत अच्छी तरह से काम नहीं किया क्योंकि ये इंटरफेस अक्सर बदल गए थे)


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

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

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

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

2
उससे बात करने के बारे में कि वह इसे कैसे संभालना चाहता है?
अगंजू

जवाबों:


5

यह एक दिलचस्प सवाल है और जवाब आपके हिसाब से आसान हो सकता है।

सीधे शब्दों में कहें, ऐसे परीक्षण लिखें जो आपकी मान्यताओं को मान्य करते हैं। इससे कोई फर्क नहीं पड़ता कि आप इम्प्लांटेशन या अपने साथी प्रोग्रामर को करते हैं

लंबा जवाब।

आपके द्वारा सूचीबद्ध किए गए विकल्पों में से कुछ निष्क्रिय हैं और आपको वापस आने और कोड (यदि कोई मौजूद है) को जल्द या बाद में फिर से आना होगा।

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

परीक्षण के एक पर्याप्त स्तर को प्राप्त करने के लिए मैं आपको दो विषयों पर एक नज़र डालने का सुझाव दूंगा।

  1. टीडीडी - परीक्षण-संचालित विकास - यह सुनिश्चित करेगा कि आप अपने इरादे का वर्णन करें और पर्याप्त रूप से इसका परीक्षण करें। यह आपको नकली या नकली तरीकों और वर्गों (इंटरफेस का उपयोग करके) की संभावना भी देता है जो अभी तक लागू नहीं हुए हैं। कोड और परीक्षण अभी भी संकलित करेंगे और आपको अपने साथी प्रोग्रामर के कोड के अलगाव में अपने खुद के कोड का परीक्षण करने की अनुमति देंगे। (देखें: https://en.wikipedia.org/wiki/Test-driven_development )

  2. ATDD - स्वीकृति परीक्षण-संचालित विकास - यह एक बाहरी लूप (TDD लूप के आसपास) बनाएगा जो आपको संपूर्ण रूप में सुविधा का परीक्षण करने में मदद करता है। जब ये फीचर पूरी तरह से लागू हो जाता है, तो ये परीक्षण तभी हरे हो जाते हैं, इस प्रकार आपको एक स्वचालित संकेतक देते हैं जब आपके साथी अपना काम पूरा करते हैं। काफी साफ-सुथरा अगर आप मुझसे पूछें।

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

यह आपको एक निरंतर एकीकरण पाइपलाइन में अपना कोड डालने और अत्यधिक विश्वसनीय कार्यान्वयन का उत्पादन करने की अनुमति देगा।

यदि आप उस विषय में आगे बढ़ना चाहते हैं, तो निम्नलिखित लिंक देखें:


103

स्टब्स के लिए पूछें।

या उन्हें स्वयं लिखें। किसी भी तरह से, आप और आपके सहकर्मियों को इंटरफेस पर सहमत होने की आवश्यकता है और उनका उपयोग करने का इरादा कैसे है। इस समझौते को अपेक्षाकृत ठोस बनाने की आवश्यकता है ताकि आप स्टब्स के खिलाफ विकसित हो सकें - उल्लेख नहीं करने के लिए, इसलिए आप अपनी इकाई के लिए अपने स्वयं के नकली बना सकते हैं ...


25
^ ^ यह। यदि आप ठीक से इंटरफेस का उपयोग कर रहे हैं, तो आपको कार्यान्वयन की आवश्यकता नहीं होनी चाहिए, जब तक कि दूसरा लड़का उन्हें लिखकर नहीं करता है।
रॉबर्ट हार्वे

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

1
यह शर्म की बात है कि जावा में हेडर फाइलें नहीं हैं। C / C ++ दुनिया में आप अपने API को काम कर सकते हैं और अपने सभी हेडर को पहले लिख सकते हैं, कार्यान्वयन की कमी तब लिंकर के लिए एक समस्या बन जाती है। (थोड़ा सा सरलीकरण, एबीआई के लिए निरंतर बने रहने की जरूरत है और इसके लिए सिर्फ एक लिंकर मामला होना चाहिए)।
वेस टोलेमैन

16
@WesToleman Amusingly, जावा के बारे में मेरी पसंदीदा चीजों में से एक यह है कि इसमें हेडर फाइलें नहीं हैं। रॉबर्ट और कोर्सीका ने उल्लेख किया कि "इंटरफेस" उस भूमिका को पूरी तरह से भर देता है। आप पहले अपना एपीआई काम करते हैं, इंटरफेस लिखते हैं, और ठोस कार्यान्वयन की कमी कंपाइलर के लिए कोई समस्या नहीं है।
ग्रैंडऑनर

1
@WesToleman क्या आपके लिए यह अच्छा है? मेरे कानों में जो कि जल-पतन शैली की तरह एक नरक का नाद है, और मेरा अनुमान है कि आपको इंटरफ़ेस को और अपडेट करना होगा जब आपको एहसास होगा कि आपने इस "महत्वपूर्ण पैरामीटर" को गलत बताया है?
netigger 19

6

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

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


आपको उस फ़ंक्शन के लिए एपीआई के लिए पूछना चाहिए जिसके परिणामस्वरूप एक या अधिक इंटरफेस होना चाहिए। यह एक साथ करने के लिए एक अच्छा विचार हो सकता है, क्योंकि आपको इस इंटरफ़ेस का उपयोग करने की आवश्यकता होगी ताकि आप अपने इनपुट के आधार पर प्रारंभिक परीक्षण मामलों को डिज़ाइन कर सकें। वास्तविक कार्यान्वयन बाद में (संभावित एपीआई परिवर्तन सहित) बाद में आ सकता है
थोरबजर्न रावन एंडरसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.