मैं वैज्ञानिक कंप्यूटिंग में परीक्षण-संचालित विकास का बहुत बड़ा समर्थक हूं। यह व्यवहार में उपयोगिता सिर्फ चौंका देने वाला है, और वास्तव में क्लासिक परेशानियों को कम करता है जो कोड डेवलपर्स को पता है। हालाँकि, सामान्य प्रोग्रामिंग में सामने नहीं आने वाले वैज्ञानिक कोड्स के परीक्षण में अंतर्निहित कठिनाइयाँ हैं, इसलिए TDD पाठ ट्यूटोरियल के रूप में बहुत उपयोगी नहीं हैं। उदाहरण के लिए:
सामान्य तौर पर आप किसी दिए गए जटिल समस्या को प्राथमिकता के लिए सटीक उत्तर नहीं जानते हैं, इसलिए आप एक परीक्षण कैसे लिख सकते हैं?
समानता की डिग्री बदलती है; मुझे हाल ही में एक बग का सामना करना पड़ा जहां 3 में से कई के रूप में एमपीआई कार्यों का उपयोग करना विफल होगा, लेकिन 2 में से कई ने काम किया। इसके अतिरिक्त, आम परीक्षण रूपरेखाएं MPI की प्रकृति के कारण बहुत MPI के अनुकूल नहीं लगती हैं - आपको कार्यों की संख्या में परिवर्तन करने के लिए एक परीक्षण बाइनरी को फिर से निष्पादित करना होगा।
वैज्ञानिक कोड में अक्सर बहुत कसकर युग्मित, अन्योन्याश्रित और विनिमेय भागों होते हैं। हम सभी ने विरासत कोड को देखा है, और हम जानते हैं कि अच्छी डिजाइन को त्यागना और वैश्विक चर का उपयोग करना कितना आकर्षक है।
अक्सर एक संख्यात्मक विधि एक "प्रयोग" हो सकती है, या कोडर पूरी तरह से समझ नहीं पाता है कि यह कैसे काम करता है और इसे समझने की कोशिश कर रहा है, इसलिए अनुमानित परिणाम असंभव है।
परीक्षणों के कुछ उदाहरण जो मैं वैज्ञानिक कोड के लिए लिखता हूं:
समय इंटीग्रेटर्स के लिए, एक सटीक समाधान के साथ एक सरल ओडीई का उपयोग करें, और परीक्षण करें कि आपका इंटीग्रेटर किसी दिए गए सटीकता के भीतर हल करता है, और अलग-अलग चरण आकारों के साथ परीक्षण करके सटीकता का क्रम सही है।
शून्य-स्थिरता परीक्षण: जांचें कि 0 बाउंड्री / प्रारंभिक शर्तों के साथ एक विधि 0 पर बनी हुई है।
इंटरपोलेशन टेस्ट: एक रेखीय कार्य दिया, यह विश्वास दिलाता हूं कि एक प्रक्षेप सही है।
विरासत सत्यापन: एक विरासत अनुप्रयोग में कोड का एक हिस्सा अलग करें जो सही होने के लिए पता है, और कुछ असतत मानों को परीक्षण के लिए उपयोग करने के लिए बाहर खींचते हैं।
यह अभी भी अक्सर आता है कि मैं मैन्युअल परीक्षण और त्रुटि से अलग कोड के एक दिए गए चंक को ठीक से कैसे जांच सकता हूं। क्या आप संख्यात्मक कोड के लिए लिखने वाले परीक्षणों के कुछ उदाहरण प्रदान कर सकते हैं, और / या वैज्ञानिक सॉफ़्टवेयर के परीक्षण के लिए सामान्य रणनीतियाँ?