क्या संख्यात्मक सॉफ्टवेयर विकास के लिए परीक्षण ढांचे हैं


10

मैंने पाया कि मेरे बहुत से कम्प्यूटेशनल विज्ञान प्रोग्रामिंग में परीक्षण की आवश्यकताएं हैं जो मानक परीक्षण ढांचे द्वारा कवर नहीं की जाती हैं:

  1. अभिकलन समय परीक्षण

    • यह सुनिश्चित करने के लिए कि एल्गोरिदम धीमा नहीं पड़ता है। मैं ऐसा कुछ कर सकता था, assureSmallerEqual(RuntimeWrapper(algorithm),53)लेकिन मैं चाहूंगा कि 53 सेकंड की सीमा को लगातार कम किया जाए क्योंकि मैं एल्गोरिथ्म पर काम कर रहा हूं, जैसे कि कुछassureSmallerEqual(RuntimeWrapper(algorithm),'previousbest+noisetolerance')
  2. प्रदर्शन का परीक्षण

    • यह सुनिश्चित करने के लिए कि एक एल्गोरिथ्म जो पहले एक विश्लेषणात्मक समाधान के लिए एक अच्छा सन्निकटन पाया था, अभी भी एक ऐसा समाधान ढूंढता है जो कम से कम अच्छा या बेहतर हो। फिर, यह एक मानक एकीकरण परीक्षण द्वारा अनुकरण किया जा सकता है, लेकिन मैं सहिष्णुता के लिए लगातार हटना चाहूंगा क्योंकि एल्गोरिथ्म बेहतर और बेहतर हो जाता है। assureAlmostEqual(foo(),1,places=3)द्वारा प्रतिस्थापित करने के बारे में सोचेंassureAlmostEqual(foo(),1,places='previousbest')
  3. शारीरिक आवश्यकताओं का परीक्षण

    • यह सुनिश्चित करने के लिए कि एल्गोरिदम को अचानक अधिक मेमोरी / हार्ड डिस्क स्थान की आवश्यकता नहीं है। 1 के समान।
  4. सार आवश्यकताओं का परीक्षण

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

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

पुनश्च

इसी प्रकार का नाम /programming/34982863/framework-for-regression-testing-of-numerical-code डुप्लिकेट नहीं है क्योंकि यह कार्यक्षमता का वर्णन करता है जो मानक प्रतिगमन परीक्षण रूपरेखाओं से अधिक आसानी से प्राप्त होता है।

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


1
सिमुलेशन के लिए या प्रयोगात्मक डेटा के विश्लेषण के लिए संख्यात्मक सॉफ्टवेयर है?
मैथ्यू गनस्टर

1
@mathewgunther संख्यात्मक विश्लेषण / न्यूमेरिकल बीजगणित। कोई डेटा विश्लेषण नहीं
Bananach

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

जवाबों:


4

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

2. मैं इस अस्पष्ट और इसी कारण से सॉफ्टवेयर परीक्षण की दृष्टि से अवांछनीय लगता है 1 , आप सॉफ्टवेयर परीक्षण के लिए औचित्य के पास या असफल खो देते हैं।

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

4. अधिकांश परीक्षण ढांचे इस तरह से इकाई परीक्षणों के बारे में बिल्कुल नहीं सोचते हैं । परीक्षण सूट चलाया जाता है (उदाहरण के लिए, कोड को मास्टर करने से पहले या परिनियोजन से पहले), और परिणाम एक हां या नहीं का संकेत है कि यह कार्य करता है। टेस्टिंग फ्रेमवर्क इसे अपनी नौकरी का हिस्सा नहीं मानते हैं, जैसे, फ़ीचर प्रगति को ट्रैक करना, और यह आमतौर पर परीक्षण नहीं है। आप यहाँ क्या करेंगे आप दो परीक्षण लिखेंगे expect_succeeds(foo(10)); expect_fails(foo(9))। हर बार, दोनों परीक्षण चलाए जाते हैं, और सफलताओं और अपेक्षित असफलताएं गुजरती हैं। जब आप foo(9)इसे लागू करते हैं और यह सफल होता है, तो एक्सपेक्ट्स-फेलियर टेस्ट अब विफल हो जाता है, इसलिए आप फिर से लिखना चाहेंगेexpect_succeeds(foo(9)), और यह सभी चौखटे की एक बिल्कुल मानक विशेषता है। लेकिन आपको इस बारे में स्पष्ट होना चाहिए कि आप किस व्यवहार की अपेक्षा करते हैं, क्योंकि अन्यथा यह सॉफ़्टवेयर परीक्षण के मूल विचारों के विरुद्ध बहुत अधिक है।

AAABperforms_better(foo_A(), foo_B())BAB, और (बी) कोड की तुलना करने का कोई मतलब नहीं है कि यह कैसे हुआ करता था, सभी कोड और परीक्षण अब अपरिवर्तनीय और अस्पष्ट हैं। यह आत्मा में समान है कि सिस्टम पुनर्लेखन को कैसे संभाल सकता है।

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