आप समय के प्रति संवेदनशील सॉफ्टवेयर का परीक्षण कैसे करते हैं?


9

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

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

1 0 [shell command] * * [my script]

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

इसलिए मैं उत्सुक हूं कि समय संवेदनशील लिपियों के परीक्षण के लिए कोई उपयोगी काम हो।


3
आप इसे वीएम पर चला सकते हैं और सिस्टम को सुविधाजनक तरीके से सेट कर सकते हैं जैसे कि स्क्रिप्ट चलाने के दिन, या आधी रात से पहले।
विटर पाय

2
crontab नियमित शेल स्क्रिप्ट निष्पादित करता है, आप बस स्क्रिप्ट को हाथ से (सैंडबॉक्स या vm में निष्पादित कर सकते हैं यदि आप डरते हैं कि यह क्या करेगा) crontab की प्रतीक्षा किए बिना
crasic

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

जवाबों:


7

इकाई परीक्षण के अलावा, ओएस-विशिष्ट समस्या से निपटने के लिए स्वचालित परीक्षण स्थापित करने के लिए दो अन्य रणनीतियाँ हैं:

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

या:

  • इंस्ट्रूमेंटेशन : मैन्युअल रूप ifसे अपने प्रोग्राम में विशेष शर्तें जोड़ें जो प्रोग्राम को अलग तरह से व्यवहार करेगा। यूनिक्स के तहत, यह जांचने से किया जाएगा कि क्या एक निश्चित पर्यावरण चर सेट किया जाता है, जैसे FOOBAR_TEST_TIME_WITH_T=500। आपके स्वचालित परीक्षण तब पर्यावरण चर, और अलग-अलग पर्यावरण चर की विभिन्न सेटिंग्स का उपयोग करेंगे, जो आपको आवश्यक हैं।

आप विभिन्न पुस्तकालयों से भी जुड़ सकते हैं, यदि आपकी बातचीत को पुस्तकालय स्तर पर व्यक्त किया जा सकता है, जिसे आप एक वर्चुअलाइजेशन (यदि "पुस्तकालय" ओएस कर्नेल है) या इंस्ट्रूमेंटेशन तकनीक के रूप में सोच सकते हैं। दोनों शब्दों का उपयोग किया जा सकता है, हालांकि वर्चुअलाइजेशन शब्द का इस्तेमाल आज लगभग हमेशा VMWare की तरह ही होता है। डिब्बाबंद मूल्यों या फिर से विशिष्ट इंटरैक्शन को फिर से चलाने के लिए एक पुस्तकालय एक नकली या ठूंठ दृष्टिकोण होगा।

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

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


मुझे लगता है कि आपके 'लाइब्रेरी वर्चुअलाइजेशन' को मॉक लाइब्रेरी के उपयोग से मॉकिंग के रूप में जाना जाता है।
जेवियर

10

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


1
यदि आपके पास सीमित समय के लिए (एन मूल्यांकन) लाइसेंस के साथ सॉफ़्टवेयर स्थापित है, तो घड़ी के साथ छेड़छाड़ उनके निष्पादन को अवरुद्ध करने के लिए ट्रिगर कर सकती है।
मार्जन वेनमा

कुछ कंपनियों में, नेटवर्क में लॉग किए गए सभी वर्कस्टेशन को "सर्वर" समय से 5 मिनट तक विचलन नहीं करना चाहिए, अन्यथा, वर्कस्टेशन लॉक हो जाएगा। यह मेरे साथ हुआ :-)
OnesimusUnbound

1

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


1

चूँकि आपने क्रॉस्टैब का उल्लेख किया है, मुझे लगता है कि आप एक निक्स वातावरण में चल रहे हैं। उस स्थिति में, मुझे लगता है कि यह आपके लिए उचित होगा कि आप libfaketime चेक करें:
http://www.code-wizards.com/projects/libfaketime/

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


0

क्रोन का परीक्षण करने की बहुत आवश्यकता नहीं है, क्योंकि यह कई पीढ़ियों के लिए बहुत परीक्षण ("उत्पादन परीक्षण") है। बेशक, यदि आप शेल स्क्रिप्ट के साथ काम कर रहे हैं, तो आप वर्चुअल मशीन में तारीख / समय निर्धारित कर सकते हैं।

इससे निपटने का पसंदीदा तरीका "द क्लॉक द मॉकिंग" है, जिसमें एक प्रोग्रामिंग ट्रिक या दूसरा नकली समय का उपयोग किया जाता है। शेल स्क्रिप्ट में आप एक पर्यावरण चर में सेट की गई तारीख का उपयोग करने के लिए $ {: -} सिंटैक्स का उपयोग कर सकते हैं, और अगर इसे मजबूर नहीं किया गया है तो वास्तविक समय पर वापस आ सकते हैं।

अन्य भाषाओं में हम नकली पुस्तकालयों का उपयोग करते हैं या घड़ी पर एक अमूर्त निर्माण करते हैं।

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

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