एक डेवलपर के साथ काम करना लगातार अपने काम में बढ़त के मामलों की अनदेखी करना है


25

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

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

मुझे नहीं पता कि उसके साथ क्या करना है और इस समस्या को दूर करने में उसकी मदद कैसे करनी है। शायद अधिक अनुभव वाला कोई व्यक्ति सलाह दे सकता है?


11
किसी को इकाई परीक्षणों के साथ अपने कोड को कवर करने के लिए कहें।
जॉब

8
कोड का परीक्षण करने के लिए सबसे अच्छा योग्य व्यक्ति इसका लेखक है।

16
@ डायवर्टर कला: पूरी तरह से असहमत। किसी भी कोड का परीक्षण करने वाला सबसे खराब व्यक्ति वह व्यक्ति है जिसने उस कोड को विकसित किया है। हर किसी के पास अंधे धब्बे होते हैं लेकिन बनाने वाला व्यक्ति अपने कोड के संदर्भ में सबसे बड़ा अंधा स्थान होता है।
जेम्स पी। राइट

2
@ डायवर्टर आर्ट: मेरा मानना ​​है कि स्वचालित परीक्षण लिखना वास्तव में काफी सामान्य भूमिका है। आमतौर पर यह कुछ ऐसा होता है जो आप एक या दो साल के लिए करते हैं यदि आप उस कंपनी में प्राइम टाइम के लिए तैयार नहीं होते हैं जिस पर आप हैं। यह एक शुद्ध अवधि की तरह है।
मॉर्गन हेरलॉकर

19
आप उसे "महान डेवलपर", "उत्पादक", "अच्छे इंजीनियर" और 'अच्छी गुणवत्ता वाले कोड' का निर्माण करने वाले के रूप में वर्णित करते हैं। लेकिन क्यूए अपने काम के साथ समस्याओं का पता लगाता रहता है। क्या आप वास्तव में उन शर्तों का उपयोग किसी ऐसे व्यक्ति का वर्णन करने के लिए करेंगे जो नियमित और लगातार वर्णन करता है। ? अपने कोड में injects दोष मैं सोच रहा हूँ कि इस कहानी को और अधिक है कि अगर, एक पेशेवर और काम है कि वे सभी पर मेल नहीं खाते क्या कर रहे हैं के रूप में व्यक्ति के वर्णन के बाद से।
थॉमस ओवेन्स

जवाबों:


29

उसे अपने कोड के लिए स्वचालित इकाई परीक्षण लिखने की आवश्यकता है। लेखन इकाई परीक्षण धार मामलों के माध्यम से सोचने के लिए मजबूर करता है।

कुछ विवरण:

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

आमीन, और भी बेहतर, यह आवश्यक है कि हर कोई अपना कोड टेस्ट-फर्स्ट लिखे। BDD ढांचे का उपयोग आमतौर पर इस के दर्द को कम करता है
जॉर्ज मौअर

@ जॉर्ज अच्छा विचार। टीडीडी यहां और भी अधिक मदद करेगा।
मैथ्यू रोडैटस

3
इकाई परीक्षण बग खोजने के बारे में नहीं है - blog.stevensanderson.com/2009/08/24/…
Dainius

1
@ डैनियस मैं सहमत हूँ। इकाई परीक्षण, किनारे के मामलों के माध्यम से एक डेवलपर सोच की सुविधा प्रदान करता है, जो बग को पहचान नहीं सकता है (लेकिन पहचान नहीं सकता है)।
मैथ्यू रोडैटस 15

After some amount of feedback from his team about missed edge cases, he will probably learn to consider thoseजिन डेवलपर्स के पास बुरे अभ्यास हैं वे अक्सर अच्छे अभ्यास के लिए आवश्यक अतिरिक्त प्रयास की अप्रासंगिकता का तर्क देते हैं (क्योंकि वे ऐसा करने का लाभ नहीं देखते हैं)। जब आप अतिरिक्त किनारे के मामलों को जोड़ते हैं, तो डेवलपर को प्राप्त हो सकता है, इसका मतलब यह नहीं है कि वह सोचता है कि यह प्रासंगिक है या क्या वह खुद उन्हें जोड़ने जा रहा है।
फ्लेटर

23

उसे एक चेकलिस्ट दें, जैसे

  • अशक्त इनपुट
  • सीमा के चरम बड़े छोर पर इनपुट
  • सीमा के चरम छोटे छोर पर इनपुट
  • संयोजन
  • इनपुट्स का उल्लंघन करने वाले इनवेरिएंट्स (जैसे अगर x = y)

क्यूए लोग चेकलिस्ट को तैयार करने में मदद कर सकते हैं

सभी डेवलपर्स को चेकलिस्ट दें, न कि केवल एक।


1
अच्छी बात यह है कि सभी डेवलपर्स को चेकलिस्ट का उपयोग करना चाहिए, एक डेवलपर को एकल करने से खराब भावनाएं हो सकती हैं। और यह हर एक की कोड गुणवत्ता को बेहतर बनाने में मदद कर सकता है ।
FrustratedWithFormsDesigner

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

@ एलेक्स: चेकलिस्ट कुछ देवों के लिए एक नियमित अभ्यास है, और दूसरों के लिए एक भयानक अपमान है। इसे आजमाएं और देखें कि क्या होता है। यदि वह क्विट करता है, तो आपके कोड की गुणवत्ता में सुधार होगा; ;-)
स्टीवन ए। लोव

4
आपके देवता चेकलिस्ट का उपयोग नहीं करेंगे? अगर एक चेकलिस्ट जान बचा सकता है, तो क्या वे उनका उपयोग करेंगे? कई डॉक्टर नहीं करते हैं, और मरीजों को नुकसान होता है। इसे पढ़ें: newyorker.com/reporting/2007/12/10/071210fa_fact_gawande
बैरी ब्राउन

1
@ बेरी, मैंने नहीं कहा कि वे नहीं करेंगे। इस मामले में चेकलिस्ट, आईएमएचओ, समस्या के लक्षणों के लिए एक उपाय की तरह, न कि समस्या के लिए। इस मामले में अनुशासन और परिश्रम की समस्या। जब समस्या एक ऐसी प्रणाली की जटिलता है जिसमें उच्च स्तर की जिम्मेदारी और तनाव के साथ आपातकालीन रखरखाव की आवश्यकता होती है, जिसके परिणामस्वरूप विस्तार पर ध्यान देने का स्तर कम हो जाता है, तो हाँ, चेकलिस्ट फुट (पायलट, डॉक्टर, आदि) लेकिन यह अधिक है इस प्रश्न के दायरे से बाहर, एक दार्शनिक बहस का मुझे अनुमान है।
एलेक्स एन।

17

अच्छा इंजीनियर है।

ठीक है।

लेकिन उसके साथ एक समस्या है - बहुत बार वह अपने कोड में किनारे के मामलों को संबोधित करने में विफल रहता है।

यह एक अच्छी क्वालिटी के इंजीनियर शेयर नहीं करते हैं।


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

आपको यह पता लगाने की आवश्यकता है कि क्या आपका लड़का उस प्रकार का है, जिसने यह निश्चित अर्थ विकसित नहीं किया है (शायद अभी तक)। यह भी संभावना है कि वह किसी कारण या किसी अन्य के लिए परवाह नहीं करता है। आपको पूरी स्थिति का विश्लेषण करने की आवश्यकता है, चाहे वह अपनी नौकरी में खुश हो। अगर नहीं तो शायद आपको उसकी मदद करने के लिए कुछ करना चाहिए।

अगर वह नौकरी से ठीक है, लेकिन किनारे के मामलों के खतरे का अनुभव नहीं किया है, तो आप उसे शिक्षित करना शुरू कर सकते हैं। यदि वह इसे गंभीरता से लेता है तो वह समय के साथ अपने तरीके बदल सकता है। हालांकि मुझे इस पर संदेह है लेकिन आप अभी भी इसे आजमा सकते हैं।

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


6
+1 यह एक कौशल है जो कुछ लोगों के पास होता है कुछ लोगों को एक अच्छा प्रोग्रामर बनना सीखना होता है। हालाँकि, मैं ध्यान देता हूँ कि दो प्रकार के किनारे मामले हैं: व्यवसाय की आवश्यकता के किनारे मामले ("यदि हम 27 प्रशिक्षकों और 28 सही प्रशिक्षकों को आदेश देते हैं तो यह आदेश संभवतः गलत है") जिसे परियोजना की आवश्यकताओं, और वास्तविक से निपटा जाना चाहिए कोडिंग एज मामलों (अमान्य इनपुट से निपटना, लगातार सूचियों के माध्यम से पुनरावृत्ति करना जब एक हैशसेट अधिक समझदार गति-वार होगा जब सेट x से बड़ा हो जाता है) जो कि कुछ और हैं जिनके बारे में आपको अभी सीखना है।
एड जेम्स

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

मैं इसके बारे में सोच रहा था लेकिन मुझे यकीन नहीं है। उस तरह के व्यक्ति के लिए स्वीकार्य बनने के लिए एक अन्य भूमिका को विवरणों पर ध्यान देने की आवश्यकता नहीं होनी चाहिए और एक सॉफ्टवेयर कंपनी में उनमें से कई नहीं हैं।

दुनिया इतनी काली और सफेद नहीं है क्योंकि आपका पहला वाक्य है। मुझे लगता है कि ऐसे डेवलपर मौजूद हैं जो कुछ बढ़त के मामलों की पहचान कर सकते हैं लेकिन सभी नहीं।
माइक पार्टरिज

5

क्या आप प्रक्रिया में पहले की समीक्षा या डिज़ाइन की समीक्षा कर सकते हैं?


4

उसे टेस्ट-पहले प्रोग्राम करना सिखाएं। उसके साथ जोड़ी। आप परीक्षण मामलों को लिखेंगे और वह परीक्षणों को पारित करने के लिए कोड लिखेंगे।


3

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

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


3

किनारे के मामलों की अनंत संख्या है, उन सभी को कवर करना संभव है। अगर कोई करे तो क्या करे #define TRUE FALSE? यह किनारे के मामलों को जोड़ता है, क्या आप उन्हें भी जांचेंगे?

इसके अलावा, मैं निजी वर्ग या आंतरिक फ़ंक्शन के प्रत्येक फ़ंक्शन को मूर्खतापूर्ण साबित नहीं करूंगा।

कोड के लिए मैं जो दृष्टिकोण चुनता हूं वह बहुत ठोस और स्थिर होना चाहिए:

if(conditions_met)
{
DoStuff();
}
else
{
CrashAppAndDumpMemory();
}

इस तरह से आप क्यूए में ठोस अनुप्रयोग डंप प्राप्त करते हैं, और जब तक आप एक रिलीज़ के लिए आते हैं, तब तक ऐप ठोस और सुरक्षित होता है।

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


#define TRUE FALSE एक किनारे का मामला नहीं है, यह एक बर्खास्त अपराध है।
gnasher729

1

यदि यह एक किनारे का मामला है तो क्या इस पर विचार करने की भी आवश्यकता है? यदि किनारे के मामले महत्वपूर्ण हैं, तो किनारे के मामलों को आवश्यकताओं / सुविधा / उपयोगकर्ता कहानी में फीड करना होगा।

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

यह आपको टीम लीड के रूप में काम के बाद काम पूरा होने के बाद चेक आउट करने के लिए कुछ देता है और यह डेवलपर को काम पूरा होने के बाद चेक ऑफ करने के लिए कुछ देता है।


हमेशा किनारे के मामले होते हैं। यदि कोई दावा करता है कि किनारे के मामले कभी सामने नहीं आएंगे, तो वे सही किनारे के मामले नहीं हैं।
बैरी ब्राउन

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

1

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


1
यह वास्तव में सही उत्तर नहीं है। आधी गुणवत्ता के काम के लिए पुरस्कृत किया जाना बुरा व्यवहार है। विकास टीम को पूरी तरह से उच्च गुणवत्ता वाले काम के लिए जिम्मेदार होना चाहिए।
डेविड 15

डिसेंट डेवलपर को एज मामलों की तलाश नहीं करनी होती है। कुछ कोड लिखे गए हैं इसलिए इसमें किनारे के मामले नहीं हैं, अन्य मामलों में किनारे के मामले स्पष्ट हैं। धार मामलों को संभालने वाला कोड अधूरा कोड नहीं है।
gnasher729

0

यह उस मामले में से एक है जहां मेरा मानना ​​है कि परीक्षण संचालित विकास बचाव के लिए आता है क्योंकि यह किनारे के मामलों और कोड को तोड़ने वाली किसी भी चीज़ के बारे में सोचने में मदद करता है।

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