मैं इस चिंता को उन क्षेत्रों में दृढ़ता से समझ सकता हूं जहां आप हार्डवेयर के हर एक इंच को कवर कर रहे हैं, जैसे कि मल्टीथ्रेडेड-जीन-एएए गेम इंजन जो क्रॉस-प्लेटफॉर्म वितरित करते समय हर एक सीपीयू कोर, सिमडी इंट्रिंसिक्स, जीपीयू, जीपीजीपीयू आदि का उपयोग करता है। उत्पाद।
उन मामलों में, आपका सबसे बुरा सपना अक्सर उन मामलों में होगा जहां आपके परीक्षण (इकाई और एकीकरण) पहले 5,000 असमान मशीनों / प्लेटफार्मों के लिए पारित हो जाएंगे, लेकिन एक अस्पष्ट जीपीयू मॉडल के लिए ड्राइवर बग के कारण 5,001 वें के लिए विफल रहता है। इसके बारे में मुझे शाइवर देता है - आप इनका पहले से परीक्षण या पूर्वानुमान नहीं कर सकते।
विशेष रूप से यदि आप GPU शेड्स लिखते हैं, तो आप एक रिवर्स लॉटरी खेल सकते हैं, जहाँ आप जो कोड लिखते हैं उसका आधा हिस्सा अपरिभाषित व्यवहार को लागू करेगा, क्योंकि इसमें सभी GPU मॉडल / ड्राइवरों द्वारा लागू कुछ पोर्टेबल मानक गारंटी हैं। जबकि यह इन दिनों माइंसवेपर की तरह कम और कम हो रहा है, इससे लोगों को कुछ विचार देना चाहिए: http://theorangeduck.com/page/writing-portable-opengl । 90 के दशक के अंत और 2000 की शुरुआत में यह कोशिश करना वास्तव में भयानक था, और यह सभी तरह से माइनस्वीपर था।
इस प्रकार के मामलों के लिए, आपको अक्सर 10,000+ परीक्षकों की टीम की आवश्यकता होती है, जो वास्तव में उत्पाद को स्थिर करने के लिए हार्डवेयर और ऑपरेटिंग सिस्टम की एक विस्तृत श्रृंखला के साथ एक स्थिर रिलीज से पहले इसके बारे में आश्वस्त महसूस करते हैं। सभी कंपनियां इस तरह के एक व्यापक परीक्षण आधार को वहन नहीं कर सकती हैं, और सभी के पास इसे सही करने के लिए अनुशासन नहीं है (सभी व्यापक रूप से ध्यान देने योग्य मुद्दों को कुछ आंतरिक प्री-अल्फा / अल्फा चरण में इतने सारे परीक्षक होने से पहले तय किया जाना चाहिए) अनावश्यक रिपोर्टों की बाढ़ डेवलपर्स को एक पैच-एंड-प्रेयर आतंक में फेंक सकती है)।
इस मामले में मैं क्या सलाह देता हूं कि दूसरों ने क्या सुझाव दिया है, एकीकरण परीक्षणों के एक वितरित सेट पर ध्यान केंद्रित करें। आप इसे इंस्टॉलर के साथ बंडल कर सकते हैं, जिससे उपयोगकर्ताओं को विवरण प्रदान करने के लिए सावधानीपूर्वक ध्यान देने के साथ एक बुनियादी डायग्नोस्टिक्स चेक पास करने की आवश्यकता होती है क्योंकि इंस्टॉलेशन विफल हो गया कि वे आपके पास जा सकते हैं, डेवलपर्स।
एक और बात (यदि आप बॉस को मना सकते हैं) सन्निहित एकीकरण करने के लिए हार्डवेयर की एक विस्तृत श्रृंखला उपलब्ध है। हार्डवेयर / ओएस कॉम्बो में अधिक विविधता, मर्जर। आप कई प्रकार के बकवास हार्डवेयर चाहते हैं जो आपके CI सर्वर के लिए नंगे न्यूनतम हार्डवेयर आवश्यकताओं को मॉडल करते हैं: आप कभी नहीं जानते।
लेकिन एक और बात मैं सुझाता हूँ:
लॉगिंग
यदि आप ऊपर वर्णित परिदृश्य की तरह किसी भी चीज़ के साथ काम कर रहे हैं, तो अक्सर आप संभवतः इन चीजों के लिए परीक्षण नहीं कर सकते हैं जो सबसे अधिक समस्याग्रस्त होते हैं (सबसे खराब संभव गोश्त जो सबसे खराब समय पर दिखाई देते हैं और संभवतः यहां तक कि नहीं दिखा सकते हैं यह एक बहुत ही विशिष्ट हार्डवेयर / OS कॉम्बो के लिए विवश मुद्दा है, क्योंकि अधिकांश संपूर्ण परीक्षण सूट।
फिर भी उन प्रकार के अधिकांश मुद्दे जैसे अस्पष्ट हार्डवेयर असंगतताएं या एकमुश्त चालक ग्लिट्स या गलत डायलीब के खिलाफ लिंकिंग (मैंने वास्तव में इस चिंता का कभी सामना नहीं किया है) आपको सॉफ्टवेयर शुरू करने से बहुत दूर नहीं मिलेगा। यह आमतौर पर दुर्घटनाग्रस्त होने वाला है और बहुत जल्द, गंभीर रूप से जल रहा है।
मैं, पवित्रता के लिए, अपरिहार्य को गले लगाने के लिए सलाह देता हूं। आप संभवतः इन चीजों के बारे में कुछ भी नहीं कर सकते हैं जो आप संभवतः बड़े पैमाने पर परीक्षण नहीं कर सकते हैं। तूफान (असंभव) को रोकने की कोशिश मत करो, लेकिन उन खिड़कियों पर चढ़ो।
आमतौर पर, सबसे अच्छी बात जो हम कर सकते हैं वह है समस्या का जल्द से जल्द पता लगाना, जहां यह यथासंभव विस्तृत हो (हमारे संदिग्धों की सूची को कम करने के लिए), और रिपोर्ट होने के बाद इस मुद्दे को एएसएपी तय किया है।
इस मामले में, लॉगिंग एक लाइफसेवर हो सकता है। इस प्रकार के क्षेत्रों के लिए, आप इन स्पैम तकनीकी लॉग को बना सकते हैं, जिसे कोई भी कभी भी नहीं पढ़ेगा। अक्सर प्रासंगिक बस लॉग में दर्ज की गई अंतिम अंतिम पंक्ति होती है, इससे पहले कि उपयोगकर्ता को ड्राइवर की गड़बड़ी के कारण दुर्घटना का सामना करना पड़े, उदाहरण के लिए आप एक बाहरी प्रक्रिया या हुक लिख सकते हैं जो क्रैश की निगरानी करता है और फिर लॉग की अंतिम पंक्ति दिखाता है जिसे उपयोगकर्ता कॉपी कर सकते हैं और एक दुर्घटना डंप के अलावा, आप के लिए पेस्ट।
चूँकि अक्सर इन हार्डवेयर / प्लेटफ़ॉर्म / ड्राइवर समस्याओं के लिए कोडर की बहुत अधिक जानकारी और अतिसंवेदनशील क्षेत्रों की आवश्यकता होती है, इसलिए यह महत्वपूर्ण है, यह अजीब मुद्दा है जहाँ लॉगिंग इतनी लगातार दर से हो रही है कि यह वास्तव में धीमी हो जाएगी सॉफ्टवेयर नीचे।
इस मामले में एक उपयोगी चाल इस धारणा पर भरोसा करना है कि एक बार निष्पादित की गई चीज दूसरी बार, तीसरी बार सफलतापूर्वक निष्पादित होगी, यह सबसे अधिक ध्वनि धारणा नहीं है, लेकिन यह अक्सर "अच्छा पर्याप्त" है (और असीम रूप से बेहतर है) । इसके साथ, आप बाहरी राज्य का थोड़ा सा उपयोग कर सकते हैं जब कुछ पहले से लॉग इन किया गया हो और बाद में उन दानेदार मामलों के लिए लॉग इन करने का प्रयास छोड़ दें जहां कोड को लूप में बार-बार कोड किया जाएगा।
खैर, मुझे उम्मीद है कि इससे मदद मिलेगी। मैंने अतीत में इस तरह के प्रलोभन में भाग लिया है और अपने और मेरी टीम के बीच कुछ अतीत के अनुभवों के परिणामस्वरूप GPU कोडिंग (GPGPU और शेड्स) के आसपास एक व्यामोह का एक सा है (कभी-कभी टीम के अन्य सदस्यों को देखते हुए वास्तव में इनसे निपटते हैं) देर से और बाद में रिलीज़ ने मुझे ढोंगी दिया, जैसे एक विशिष्ट Radeon मॉडल पर कुछ अति ग्लिच, जो कि एंटीअलियासिड लाइनों को रेंडर करने पर क्रैश हो जाएगा, बाद में रिपोर्ट किया गया और केवल एक समाधान समाधान के साथ ज्ञात समस्या के रूप में चिह्नित किया गया)।
लॉगिंग वह चीज थी जिसने हमारे चूतड़ को वहां बचाया था, हमें अक्सर उस मुद्दे पर 10,001 वीं अस्पष्ट प्रोटोटाइप मशीन को देखने की सुविधा मिलती है, जिसमें हमने कभी भी ऑनबोर्ड जीपीयू के बारे में नहीं सुना, कोड की अंतिम पंक्ति के साथ तुरंत हमें ठीक उसी स्थान पर जाने दिया जहां विफलता 2 पर थी। या संदिग्ध के रूप में कोड की 3 पंक्तियाँ, उदाहरण के लिए, यदि यह एक विस्तृत shader के अंदर है, तो हम SOL की तरह हैं क्योंकि हम GPU shader के अंदर लॉगिंग नहीं कर सकते हैं, लेकिन हम कम से कम लॉगिंग का उपयोग यह देखने के लिए कर सकते हैं कि किस shader में अभी समस्या थी जांच शुरू करना।