बग को ठीक करें, या ग्राहक को खोजने के लिए प्रतीक्षा करें?


35

क्या अन्य लोग बग को देखने के बाद उन्हें ठीक करते हैं, या जब तक कि क्रैश / डेटा लॉस नहीं होता है, तब तक प्रतीक्षा करते हैं / लोग इसे ठीक करने से पहले मर जाते हैं?

उदाहरण 1

 Customer customer = null;
 ...
 customer.Save();

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

लेकिन , यह भी समझ से बाहर नहीं है कि कोड को सही करना:

Customer customer = null;
...
customer = new Customer();
try
   ...
   customer.Save();
   ...
finally
   customer.Free();
end;

एक दुर्घटना का परिचय हो सकता है ; पूर्ण कवरेज और मैन्युअल उपयोगकर्ता परीक्षण के साथ इकाई परीक्षणों के माध्यम से खोजा नहीं गया।

उदाहरण 2

float speed = 0.5 * ((G * mass1 * mass2) / R) * Pow(time, 2);

भौतिकी जानने वाले लोग यह पहचानेंगे कि यह हर 2 में R 2 माना जाता है ।

कोड गलत है, यह बिल्कुल गलत है। और गति को कम करने के कारण रेट्रो-रॉकेटों को बहुत जल्द आग लग जाएगी, जिससे अंतरिक्ष यान के सभी रहने वालों की मौत हो जाएगी।

लेकिन यह भी संभव है कि यह अधिक होने का अनुमान लगा रहा है कि गति एक और मुद्दा है: एयर-बैग तैनात नहीं कर सकते हैं जबकि शटल बहुत तेजी से आगे बढ़ रहा है। यदि हम अचानक कोड ठीक करते हैं:

float speed = 0.5 * ((G * mass1 * mass2) / Pow(R, 2)) * Pow(time, 2);

अब गति सटीक है, और अचानक एयरबैग को तैनात करना चाहिए जब वे नहीं करना चाहिए।

उदाहरण 3

यहाँ एक उदाहरण है जो मेरे पास हाल ही में था, अगर किसी स्ट्रिंग में अमान्य वर्ण हैं, तो जाँच:

if (StrPos(Address, "PO BOX") >= 0)
{
   //Do something
}

क्या होगा अगर यह पता चला कि Do somethingशाखा में एक बग है ? स्पष्ट रूप से गलत कोड को ठीक करना:

if (StrPos("PO BOX", Address) >= 0)
{
   //Do something
}

कोड को ठीक करता है, लेकिन एक बग का परिचय देता है।


जिस तरह से मैं इसे देखता हूं दो संभावनाएं हैं:

  • कोड को ठीक करें, और इसे तोड़ने के लिए दोषी ठहराया जाए
  • कोड के क्रैश होने की प्रतीक्षा करें, और बग होने के लिए दोषी ठहराया जाए

आप राजनीतिक रूप से क्या करते हैं?


उदाहरण 4 - आज की वास्तविक दुनिया बग

मैं एक ऑब्जेक्ट का निर्माण कर रहा हूं, लेकिन गलत कंस्ट्रक्टर को कॉल कर रहा हूं:

Customer customer = new Customer();

यह बताता है कि "पैरामीटर्सलेस" कंस्ट्रक्टर वास्तव में इनहेरिटेंस चेन में आगे पीछे से एक पैरामीटराइज्ड कंस्ट्रक्टर है:

public Customer(SomeObjectThatNobodyShouldBeUsingDirectly thingy = null)
public Customer(InjectedDependancy depends)

इसे कॉल करना एक गलती है, क्योंकि यह सभी बाद के कंस्ट्रक्टरों को बायपास करता है।

मैं इस तरह के एक खतरनाक निर्माणकर्ता को उजागर नहीं करने के लिए ऑब्जेक्ट का वंश बदल सकता था, लेकिन अब मुझे कोड बदलना होगा:

Customer customer = new Customer(depends);

लेकिन मैं यह गारंटी नहीं दे सकता कि यह परिवर्तन कुछ भी नहीं तोड़ेगा। ऊपर मेरे उदाहरण 1 की तरह , शायद, कोई, कहीं, किसी भी तरह, कुछ गूढ़ शर्तों के तहत, निर्माण Customerपर अवैध और कबाड़ से भरा हुआ निर्भर करता है ।

शायद Customerवस्तु, अब जब यह ठीक से बनाया गया है तो कुछ कोड को चलाने की अनुमति देगा जो पहले कभी नहीं किया था, और अब मुझे एक दुर्घटना मिल सकती है।

मैं इस पर अपनी पत्नी के जीवन को दांव पर नहीं लगा सकता।

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

क्या मैं:

  • कोड को ठीक करें और इसे तोड़ने के लिए दोषी ठहराया जाए? या
  • बग को छोड़ दें, और जब ग्राहक मिल जाए तो उसे दोषी ठहराया जाए?

33
यदि आप कुछ भी बदलने के लिए तैयार नहीं हैं क्योंकि यह कुछ तोड़ सकता है, और आप खुद को अयोग्य मानते हैं कि कोड के अन्य भागों में क्या हो सकता है, तो आप यहाँ क्या कर रहे हैं? क्या आप कीबोर्ड पर लकवाग्रस्त हैं क्योंकि आपके द्वारा लिखने वाली कोड की लाइन गलत हो सकती है?
डेविड थॉर्नले

3
निश्चित रूप से एक अच्छी तरह से शोध का सवाल है
मुहम्मद अल्करौरी

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

2
'करो [तुम] रुको जब तक लोग इसे ठीक करने से पहले मर जाते हैं'! पवित्र गाय, मुझे गंभीरता से उम्मीद है कि इसका एक ही जवाब है ...
क्रिस नाइट

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

जवाबों:


34

यह स्थिति, बग, ग्राहक और कंपनी पर बेतहाशा निर्भर करता है। कार्यान्वयन को सही करने और संभावित रूप से नए बग को पेश करने के बीच विचार करने के लिए हमेशा एक व्यापार-बंद है।

अगर मुझे यह निर्धारित करने के लिए एक सामान्य दिशानिर्देश देना था कि मुझे क्या करना है, तो मुझे लगता है कि यह कुछ इस तरह से होगा:

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

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


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

6
लॉग दोष के लिए +1। अन्य दोषों को प्राथमिकता दी जा सकती है ...
11'11

35

ग्राहक हमेशा बग ढूंढेंगे । ग्राहकों से कभी कोई छिपने वाली बग नहीं है। अंत में आपके द्वारा प्रस्तुत किए जाने वाले कीड़े हमेशा आपके पास आएंगे। उन्हें ठीक नहीं करना बस एक बुरा पेशेवर अभ्यास है। पेशेवर ऐसा नहीं करते हैं।

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


2
यह एक दुखद सच्चाई है। हमें एक परियोजना वितरित करनी थी जिसका हमने पागलों की तरह परीक्षण किया, और फिर भी ग्राहक इसे 3 मिनट के भीतर क्रैश करने में सफल रहा।
ओलिवर वीलर

4
@ हेल्पर विधि: हो सकता है कि अगर आपने इसे समझदार लोगों की तरह परीक्षण किया होता तो यह बेहतर होता।
विंको वर्सालोविच

@ हेल्पर विधि: हालांकि, अधिक गंभीरता से, अगर यह वास्तव में तीन मिनट का था तो ऐसा लगता है कि परीक्षकों को पता नहीं था कि ग्राहक द्वारा वास्तविक उपयोग के मामले क्या थे।
विंको वर्सालोविच

8
@ हेल्पर विधि: ग्राहक को परीक्षण में शामिल करें (ग्राहक == ग्राहक मानें)। डेवलपर्स लेखन और परीक्षण कोड मुसीबत है डेवलपर्स उसी तरह सॉफ्टवेयर का उपयोग नहीं करते हैं। डेवलपर्स कोमल हैं। यह उनका काम है - उनकी कला: ग्राहक उस पर धमाका करते हैं जैसे कि एक पानियो पर। जब संभव हो, परीक्षण के प्रयास को साझा करें जिम्मेदारी को साझा करें। यह हर वातावरण में फिट नहीं होता है, लेकिन एक टीम के रूप में ग्राहकों के साथ काम करना, न कि सलाहकार बेहतर सॉफ्टवेयर ला सकते हैं।
ब्रायन चाण्डले

एर, वर्सर? (फिलर)
हैलो 29१

24

बग को ठीक करें

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

इसे सुधारने या प्रदर्शन सुधार के साथ भ्रमित न करें जो प्रदर्शन बग से संबंधित नहीं हैं।

एक वितरित स्रोत नियंत्रण प्रणाली जहां आप 'थोड़ा बग फिक्स' का एक अलग भंडार रख सकते हैं और फिर आसानी से एक मील के पत्थर की शुरुआत में विलय कर सकते हैं यहां एक बड़ी मदद है।


4
+1। इसे ठीक करो। अगर फिक्स कुछ और तोड़ता है, तो वह कुछ और वैसे भी टूट गया था - इसे भी ठीक करें। यदि आपका परीक्षण इन विरामों को नहीं पकड़ता है, तो आपका परीक्षण टूट गया है - इसे भी ठीक करें। आप अपने आप को कुछ तोड़ने के डर से कोड को बदलने से डरने नहीं दे सकते हैं - यह सड़क केवल बर्बाद करने की ओर ले जाती है।
टॉम एंडरसन

21

ग्राहक क्या कहेगा?

यहां बताया गया है कि मैं कैसे इस खेल की कल्पना करता हूं:

ग्राहक: जब मैं एक्स करता हूं तो यह दुर्घटनाग्रस्त हो जाता है।

प्रोग्रामर: ओह हाँ! मुझे याद है मैंने कुछ समय पहले देखा था। मुझे लगा कि यह अभी तक कोई बड़ी बात नहीं है, इसलिए मैंने इसे वहीं छोड़ दिया।

ग्राहक: [कुंद वस्तु के लिए पहुँचता है]

हाँ। बग को ठीक करें। आप ग्राहक को एक गंभीर अनुभव से बचाएंगे, और आपातकाल लगने से पहले आपको इसे ठीक करना होगा।

और अगर आपको लगता है कि आपका फिक्स वास्तव में दुर्घटना का कारण हो सकता है, तो आपको वास्तव में अभी तक कोई फिक्स नहीं मिला है।


8

आपके द्वारा दिए गए सभी उदाहरणों में एक सामान्य धागा है। आप एक बग को ठीक करना चाहते हैं जिसे आप पूरी तरह से नहीं समझते हैं। मैं कहता हूं कि क्योंकि आप प्रत्येक पर अनपेक्षित परिणामों की संभावना पर ध्यान देते हैं।

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

यदि आप मानते हैं कि कोड को देखकर एक दोष है तो सुनिश्चित करें कि आप उस तरह से दोष को पुन: उत्पन्न कर सकते हैं जिसे ग्राहक देख सकता है। यदि आप ऐसा नहीं कर सकते हैं तो अपने संसाधनों को कुछ और खर्च करने के लिए खर्च क्यों न करें।


7

जैसे ही आप कर सकते हैं अपने तकनीकी ऋण पर चिपटना शुरू करें

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

उदाहरण 1 में, यदि Save()कोई इंस्टेंस डेटा एक्सेस नहीं करता है , तो ग्राहक डेटा को वास्तव में क्या बचाता है? फिक्सिंग और परीक्षण शुरू करें।

उदाहरण 2 में, परीक्षण के साथ गति कैलकुलेटर को कवर करना आसान है और यह सुनिश्चित करना है कि यह सभी प्रमुख उदाहरणों में सही परिणाम की गणना करता है।

उदाहरण 3 में, मृत कोड को वापस जीवन में लाने का खतरा है। क्या उस कोड को पूरी तरह से समाप्त कर दिया जाना चाहिए? अगर इसके तहत बूलियन स्थिति का इरादा क्या है? क्या यह सुनिश्चित करना है कि स्ट्रिंग में कोई अमान्य वर्ण नहीं है? या यह सुनिश्चित करने के लिए कि इसमें "पीओ बॉक्स" है? जितनी जल्दी आप इस तरह के सवालों को संबोधित करना शुरू करेंगे, उतना ही बेहतर होगा।

आपके द्वारा इस तरह के कई मुद्दों को तय करने के बाद, अपनी टीम के साथ एक प्रकार का पूर्वव्यापी / पोस्टमार्टम करें। अनुभव से सीखना महत्वपूर्ण है ताकि आप भविष्य में अपने दोष इंजेक्शन दर को कम कर सकें।


5

आपके पास पहले से ही अच्छे उत्तर हैं। मैं सिर्फ डरने के मुद्दे के बारे में कुछ जोड़ूंगा कि कुछ दुर्घटनाग्रस्त हो जाए।

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

दुर्भाग्य से, आदर्श स्थिति काल्पनिक है। भले ही कपलिंग ढीली हो, कपलिंग होगी और इसलिए कुछ और टूटने की संभावना है।

इसका समाधान दो गुना है:

  1. कोड को यथासंभव संरचित करें।
  2. जब कोड पर्याप्त रूप से अलग हो जाता है तो आप जानते हैं कि कुछ और नहीं टूटेगा, इसे ठीक करें।

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

दूसरा चरण यह है कि आप बग को ठीक करें।

कुछ बिंदु प्रासंगिक हैं:

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

ये पहले से ही कुछ बिंदुओं से अधिक हैं, इसलिए मुझे लगता है कि मैं यहां रुकूंगा।


3

आपको पहले बग की परिभाषा पर विचार करने की आवश्यकता है:

  1. जैसा कि पढ़ा गया कोड आपके सही होने के खतरे से मेल नहीं खाता है
  2. सॉफ्टवेयर अपने कार्यों को ठीक से नहीं करता है

आप # 1 पर ध्यान केंद्रित करते हुए दिखाई देते हैं, जहाँ # 2 बैठने के लिए सबसे अच्छी जगह है। निश्चित रूप से, हम प्रोग्रामर चाहते हैं कि हमारा कोड सही हो (# 1), लेकिन लोग हमें इसके लिए भुगतान करते हैं (# 2)।

आप उस कोड आधार के लिए क्या कर सकते हैं या नहीं कर सकते हैं जो गलती से नए बग को पेश कर सकता है वर्तमान सॉफ्टवेयर के # 2 के दृष्टिकोण के लिए अप्रासंगिक है। हालाँकि, # 1 अपने लिए या अनुरक्षण प्रोग्रामर के लिए मायने रखता है। यह तय करना कभी-कभी मुश्किल होता है, लेकिन जब # 2 और # 1 संघर्ष होता है, तो आपको यह जानना होगा कि # 2 स्पष्ट रूप से अधिक महत्वपूर्ण है।


2

न तो। एक तीसरा तरीका है: यह साबित करने का एक तरीका खोजें कि "समस्याग्रस्त कोड" वास्तव में व्यापार के दृष्टिकोण से समस्या पैदा कर रहा है। बीए / क्यूए या कम से कम अपने प्रबंधक के साथ जो भी मिलता है उसकी पुष्टि करें। जब सभी को समस्या के बारे में पता हो तो योजना को ठीक करें।

आपके द्वारा उल्लिखित मामलों में एक वैध बग के अलावा अन्य संभावित परिदृश्य हैं:

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

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


1
यदि आप केवल उन डेवलपर्स को किराए पर लेना चाहते हैं जो अपने स्वयं के निर्णय का उपयोग नहीं करते हैं, तो वास्तव में आपके लिए बहुत ही औसत दर्जे के लोग हैं। आपको वास्तविक अच्छे लोगों को काम पर रखने में परेशानी होगी, जिनकी क्षमता में कुछ आत्मविश्वास है।
डेविड थॉर्नले

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

2

क्या मैं:

  • कोड को ठीक करें और इसे तोड़ने के लिए दोषी ठहराया जाए? या
  • बग को छोड़ दें, और जब ग्राहक को पता चले तो उसे दोषी ठहराया जाए?

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

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


1
या यदि आप एक गेटेड चेक-इन का उपयोग करते हैं, तो इसे सेट करें, ताकि आप वास्तव में चेक-इन टूटे हुए कोड में न हों।
एडम लेअर

3
एक लंबे समय के लिए ले जा रहा है घटिया कोड करने के लिए कोई बहाना नहीं है।
टॉबी

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

1

यदि वे क्रैश / डेटा हानि बग हैं, तो उन्हें ठीक करें। एक ज्ञात डेटा-लॉस बग के साथ एक प्रोग्राम को शिपिंग करना सर्वथा दुर्भावनापूर्ण और अक्षम्य है।

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

ध्यान दें कि हर बड़ी सॉफ्टवेयर परियोजना में रीडमी में एक 'ज्ञात मुद्दे' अनुभाग होता है जो आमतौर पर ठीक उसी सूची में होता है: बग्स जिन्हें जाना जाता है।

बग्स को जानना और उनसे संवाद नहीं करना वास्तव में मामूली / कॉस्मेटिकल बग्स के लिए IMHO ही स्वीकार्य है।


1

इसे ठीक करें, और यह परीक्षण किया है। यदि आप ज्ञात बग को केवल इसलिए बनाए रखने का निर्णय लेते हैं, क्योंकि आप अधिक बग ढूंढने से डरते हैं, तो आपका प्रोग्राम इतनी तेजी से टाइम बमों को टिकाने की खान बन जाता है, जितनी जल्दी आपको लगता है कि यह अप्राप्य हो जाएगा।

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


0

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

याद रखें, "हम उस समस्या के बारे में जानते हैं और इसे भविष्य के रिलीज में ठीक कर देंगे" का पर्याय है "हम उस समस्या के बारे में जानते हैं लेकिन इससे निपटने के लिए आपको परवाह नहीं है"।


0

कार्रवाई का सही तरीका न तो बग को अनदेखा करना है, न ही इसे मौके पर "ठीक" करना है; उन कारणों के लिए जिन्हें आपने अपने प्रश्न में पहचाना है।

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

  • इतिहास : सवालों के जवाब देने के लिए अपने संस्करण नियंत्रण सॉफ्टवेयर का उपयोग करें: कोड को किसने छुआ? उन्होंने क्या बदलाव किया? और किस संदेश के साथ उन्होंने इसकी जाँच की? क्या आप एक कारण का पता लगा सकते हैं कि कोड ऐसा क्यों दिखता है?

  • का प्रयोग करें : क्या कोड दोषपूर्ण कोड का उपयोग करता है? और कैसे? क्या कोड मृत है? क्या कोई अन्य कोड है जो दोषपूर्ण व्यवहार पर निर्भर करता है?

  • लेखक : यदि आप ऊपर दी गई जानकारी का उपयोग करके जल्दी से किसी निष्कर्ष पर नहीं पहुंच सकते हैं, तो कोड के लेखक से पूछें (कम से कम यदि यह संभव है) तो कोड ऐसा करने का तरीका क्यों दिखता है। आमतौर पर आपको या तो एक "Oups मिलेगा, जिसे ठीक किया जाना चाहिए!" या "नहीं! इसे मत बदलो !!! यह इस तरह से आवश्यक है!" बिल्कुल अभी।

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