मैं अपनी टिप्पणियों को एक उत्तर में विस्तारित कर रहा हूं क्योंकि मुझे लगता है कि विशिष्ट समस्या के कुछ पहलुओं को या तो अनदेखा किया जा रहा है, या गलत निष्कर्ष निकालने के लिए उपयोग किया जाता है।
इस बिंदु पर, क्या रिफ्लेक्टर का प्रश्न समय से पहले है (भले ही इसका उत्तर 'हां' के विशिष्ट रूप से दिया जाएगा)।
यहाँ केंद्रीय मुद्दा यह है कि (जैसा कि कुछ उत्तरों में उल्लेख किया गया है) आप जो दृढ़ता से उद्धरण देते हैं, उससे संकेत मिलता है कि कोड में दौड़ की स्थिति या अन्य संगामिति / सिंक्रनाइज़ेशन समस्याएं हैं, जैसे कि यहां चर्चा की गई है । कई कारणों से ये विशेष रूप से कठिन समस्याएं हैं। सबसे पहले, जैसा कि आपने पाया है, प्रतीत होता है कि असंबंधित परिवर्तन समस्या को ट्रिगर कर सकते हैं (अन्य बग का भी यह प्रभाव हो सकता है, लेकिन संक्षिप्त रूप से त्रुटियां लगभग हमेशा होती हैं।) दूसरे, वे निदान करना बहुत कठिन हैं: बग अक्सर एक जगह पर ही प्रकट होता है। कारण से समय या कोड में दूर, और कुछ भी आप इसे निदान करने के लिए इसे दूर करने के लिए कारण हो सकता है ( Heisenbugs))। तीसरी बात, टेस्टिंग में खोजने के लिए कंसीलर बग बहुत कठिन हैं। आंशिक रूप से, जो कि दहनशील विस्फोट के कारण होता है: यह अनुक्रमिक कोड के लिए पर्याप्त खराब है, लेकिन समवर्ती निष्पादन के संभावित इंटरलेविंग्स को जोड़ने से यह उस बिंदु तक पहुंच जाता है जहां अनुक्रमिक समस्या तुलना में महत्वहीन हो जाती है। इसके अलावा, यहां तक कि एक अच्छा परीक्षण मामला भी कभी-कभी समस्या को ट्रिगर कर सकता है - नैन्सी लेवसन ने गणना की कि थेरैक 25 में घातक कीड़े में से एकलगभग 350 रनों में से 1 में हुआ, लेकिन अगर आपको नहीं पता कि बग क्या है, या यहां तक कि एक भी है, तो आप नहीं जानते कि कितने पुनरावृत्तियां एक प्रभावी परीक्षण बनाती हैं। इसके अलावा, इस पैमाने पर केवल स्वचालित परीक्षण संभव है, और यह संभव है कि परीक्षण चालक सूक्ष्म समय की कमी को लागू करता है जैसे कि यह वास्तव में बग को फिर से ट्रिगर नहीं करेगा (हाइजेनबग्स फिर से)।
कुछ वातावरणों में समवर्ती परीक्षण के लिए कुछ उपकरण हैं, जैसे कि POSIX pthreads का उपयोग करके कोड के लिए Helgrind , लेकिन हम यहां की बारीकियों को नहीं जानते हैं। परीक्षण को स्थैतिक विश्लेषण के साथ पूरक होना चाहिए (या क्या यह दूसरा तरीका है?), यदि आपके पर्यावरण के लिए उपयुक्त उपकरण हैं।
कठिनाई में जोड़ने के लिए, संकलक (और यहां तक कि प्रोसेसर, रनटाइम पर) अक्सर कोड को उन तरीकों से पुनर्गठित करने के लिए स्वतंत्र होते हैं जो कभी-कभी इसकी थ्रेड-सुरक्षा के बारे में तर्क देते हैं बहुत-सहज (शायद सबसे प्रसिद्ध मामला डबल-चेक किया गया है) मुहावरे का ताला , हालांकि कुछ वातावरण (जावा, सी ++ ...) को संशोधित करने के लिए संशोधित किया गया है।)
इस कोड में एक सरल समस्या हो सकती है जो सभी लक्षणों का कारण बन रही है, लेकिन यह अधिक संभावना है कि आपके पास एक प्रणालीगत समस्या है जो नई सुविधाओं को एक पड़ाव में जोड़ने की आपकी योजना ला सकती है। मुझे आशा है कि मैंने आपको आश्वस्त किया है कि आपके हाथों पर एक गंभीर समस्या हो सकती है, संभवतः आपके उत्पाद के लिए एक अस्तित्वगत खतरा भी हो सकता है, और सबसे पहले यह पता लगाना है कि क्या हो रहा है। यदि यह निर्णायक समस्याएँ प्रकट करता है, तो मैं आपको उन्हें पहले ठीक करने की दृढ़ता से सलाह देता हूं, इससे पहले कि आप यह सवाल करें कि क्या आपको अधिक सामान्य रीफ़ैक्टरिंग करनी चाहिए, और इससे पहले कि आप और अधिक सुविधाएँ जोड़ने का प्रयास करें।