जब आप पर्यावरण को पुन: पेश नहीं कर सकते तो परीक्षण और अनुकूलन कैसे करें?


17

अतीत में, मैंने कई तरह के वातावरण में काम किया है। डेस्कटॉप एप्लिकेशन, गेम, एम्बेडेड सामान, वेब सेवाएं, कमांड लाइन नौकरियां, वेब साइट, डेटाबेस रिपोर्टिंग, और इसी तरह। इन सभी वातावरणों ने एक ही विशेषता साझा की: कोई फर्क नहीं पड़ता कि उनकी जटिलता, कोई फर्क नहीं पड़ता कि उनका आकार, मैं हमेशा परीक्षण करने के लिए मेरी मशीन पर या देव वातावरण में आवेदन का एक सबसेट या टुकड़ा हो सकता है।

आज मैं नहीं। आज मैं खुद को एक ऐसे माहौल में पाता हूं जिसका प्राथमिक ध्यान स्केलेबिलिटी पर है। पर्यावरण को पुन: प्रस्तुत करना निषेधात्मक रूप से महंगा है। पर्यावरण का एक टुकड़ा लेते हुए, प्रशंसनीय (कुछ टुकड़ों को अनुकरण करने की आवश्यकता होती है, या एकल-आवृत्ति मोड में उपयोग किया जाता है जो वे करने के लिए नहीं बने होते हैं), थोथा उद्देश्य को हरा देता है क्योंकि यह निर्णायकता और लोडिंग को अस्पष्ट करता है। वास्तविक प्रणाली से सामना होता है। यहां तक ​​कि एक छोटे से "परीक्षण" प्रणाली की अपनी खामियां हैं। जब आप 2 नोड्स प्राप्त करते हैं और जब आपके पास 64 नोड होते हैं, तो चीजें अलग-अलग व्यवहार करेंगी।

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

कुछ संबंधित प्रश्न हैं:

  • इस प्रश्न का हार्डवेयर (स्पेक्ट्रम विश्लेषणकर्ताओं की तरह) अनुपलब्ध होने के साथ करना है, जो आसानी से अनुकरण किया जा सकता है।
  • यह सवाल बग्स को ट्रैक करने के बारे में है जो केवल उत्पादन वातावरण में मौजूद हैं, जो सहायक है - लेकिन एक अलग तरह की गतिविधि।

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

आप उत्पादन और परीक्षण के बीच उत्पादन पर्यावरण के समय-मल्टीप्लेक्स भागों कर सकते हैं?
पैट्रिक

@DocBrown - यकीन है, लेकिन लॉगिंग मुझे यह देखने में मदद नहीं करेगा कि क्या कोई वैकल्पिक कार्यान्वयन उत्पादन में सही या अधिक प्रदर्शनकारी होगा जब तक कि यह वास्तव में उत्पादन में न हो - जो निश्चित रूप से बहुत देर से लगता है।
तेलस्टीन

2
Reproducing the environment is prohibitively costly.- शो-स्टॉप प्रोडक्शन बग कितना खर्च करता है? 2 कीड़े के बारे में क्या? अप्रत्याशित समय पर (सबसे अधिक संभावना है जब आपके पास अधिकांश उपयोगकर्ता एक ही समय में सिस्टम पर लोड डालते हैं)। एक न्यूनतम प्रजनन वातावरण स्थापित करने की लागत के खिलाफ वजन - आप पा सकते हैं कि यह निषेधात्मक रूप से महंगा नहीं है।
जेस टेलफ़ोर्ड

किसी कारण से, मुझे लगता है कि इसका मतलब है कि सिस्टम बुरी तरह से डिज़ाइन किया गया है, संगठित है। यदि सिस्टम अच्छी तरह से व्यवस्थित और मॉड्यूलर है, तो टेस्ट केस या ऑप्टिमाइज़ेशन परिदृश्य सेट करना नहीं होगा prohibitively costly
सूचित

जवाबों:


11

वास्तव में इसकी कठिन है, लेकिन मुझे यकीन है कि तुलनात्मक स्थितियों में यह मुख्य रूप से एक संगठनात्मक समस्या है। एकमात्र व्यवहार्य दृष्टिकोण संभवतः संयुक्त उपायों का मिश्रण है, न कि केवल "एक चांदी की गोली"। कुछ चीजें जो आप आज़मा सकते हैं:

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

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

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

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

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

तो जिस्ट है - जब आप ट्राइ-एंड-एरर के साथ नहीं जा सकते हैं, तो आपका सबसे अच्छा विकल्प रूढ़िवादी, क्लासिक अपफ्रंट प्लानिंग और क्यू तकनीक है।


6

यदि आप लाइव वातावरण को पुन: पेश नहीं कर सकते हैं, तो असुविधाजनक वास्तविकता यह है कि आप जो भी करते हैं, वह पर्याप्त रूप से परीक्षण नहीं किया गया है।

तो आप क्या कर सकते हैं?

खैर, जो कुछ भी हो, यह एक प्रक्रिया है, सर्वर क्लस्टर या डेटाबेस वॉल्यूम को शून्य के साथ परीक्षण किया जाना चाहिए , एक, अनंत नियम को ध्यान में रखकर छेड़ना चाहिए जहां संभावित अड़चनें / सीमाएं हैं IO, CPU, CPU लोड, इंटर -प्रवेश संचार आदि

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

उपकरणों की बात करें तो यह वास्तव में डेवलपर को उनके विकास के माहौल में संभव से परे एक प्रणाली का परीक्षण करने के लिए भेजने का प्रेषण नहीं है। इसे परीक्षण विभाग या अन्य तीसरे पक्ष पर धकेल दिया जाना चाहिए।

पाठ्यक्रम के कमरे में हाथी यह है कि सिस्टम हमेशा पूर्वानुमान योग्य तरीकों से पैमाने पर नहीं होता है!

एक पूर्व जीवन में, मैं अरबों पंक्तियों के साथ बैंक डेटाबेस के लिए एक डीबीए था और निष्पादन योजनाओं से लैस था, हम आम तौर पर अनुमान लगा सकते थे कि इनपुट वॉल्यूम दिए गए निष्क्रिय डेटाबेस पर कितने समय तक प्रश्न होंगे। हालाँकि, एक बार जब ये वॉल्यूम एक निश्चित आकार के हो जाते हैं, तो निष्पादन योजना बदल जाएगी और प्रदर्शन तेजी से बिगड़ जाएगा जब तक कि क्वेरी / डेटाबेस को ट्यून नहीं किया जाता।


0

मैं प्रयोग सुझाता हूँ।

लॉगिंग में अड़चनें आएंगी। फिर आप कुछ मशीनों पर या एक निश्चित संभावना के साथ सभी मशीनों पर या एक सीमित समय के लिए वैकल्पिक कार्यान्वयन की कोशिश कर सकते हैं। फिर सुधारों की जांच के लिए लॉग की फिर से तुलना करें।

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

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