C ++ में संख्यात्मक अनुप्रयोगों के लिए परीक्षण सूट?


13

हाल ही में, मैं अपने समूह को उनके कोड लिखते समय अधिक परीक्षण शामिल करने के लिए प्रेरित कर रहा हूं। कई प्रमुख बग थे जिन्हें पकड़ने में शायद ज्यादा समय लगता था क्योंकि शायद बोलना जरूरी था, क्योंकि हमारे पास एक अच्छा परीक्षण शासन नहीं था।

हालाँकि, मुझे संदेह है कि इस प्रक्रिया को स्वचालित (या कारगर बनाने में मदद करने) के लिए उपयुक्त उपकरण होना निश्चित रूप से उपयोगी होगा। दूसरी ओर, मुझे C ++ परीक्षण सूट के लिए विभिन्न विकल्पों का पता नहीं है, और उनके बीच कैसे निर्णय लिया जाए?

क्या देखने के लिए दिशा-निर्देश हैं - और क्या कोई ऐसा है जो विशेष रूप से संख्यात्मक अनुप्रयोगों के लिए तैयार है?

जवाबों:


11

संख्यात्मक कोड के परीक्षण के साथ समस्या यह है कि (i) आप हमेशा सटीक आउटपुट नहीं जान सकते हैं और आप केवल बाद में तुलना करने के लिए एक संगणना के परिणाम को बचाने में सक्षम होंगे - यानी, प्रतिगमन परीक्षण करने के लिए, और (ii) अलग-अलग दौरों के कारण विभिन्न मशीनों पर छोटी मात्रा में परिणाम भिन्न हो सकते हैं।

यह देखने के लिए कि डील कैसे की जाती है। मैं इसे यहां देखता हूं: http://www.dealii.org/developer/development/testsuite.html#regression_tests


यूनिट परीक्षण की सीमाओं के बारे में अच्छे बिंदु। प्रतिगमन परीक्षण एक अच्छी बात है (निश्चित रूप से परीक्षण से बेहतर नहीं है क्योंकि आउटपुट अज्ञात है; यह बग के बारे में चेतावनी संकेत दे सकता है)। मशीन के राउंड-ऑफ के मुद्दे के रूप में, क्या परीक्षण और त्रुटि के माध्यम से एक अच्छी सहिष्णुता चुनने में कमी हो जाती है?
ज्यॉफ ऑक्सीबेरी

2
यह एक निरंतर दर्द है। परीक्षण के 10 से अधिक वर्षों में, हम इससे निपटने के लिए वास्तव में एक अच्छी रणनीति के साथ नहीं आए हैं। अंतर के बजाय सुन्न का उपयोग करना मदद कर सकता है, लेकिन अंततः आपको एक मशीन को नामित करने की आवश्यकता होती है जिसके लिए आप "0.3987" को स्टोर करते हैं, "0.3988" के बजाय आपको दूसरी मशीन पर मिलता है जब सही संख्या 0.39875 होती है। कोई बात नहीं जहाँ आप सीमा निर्धारित करते हैं, आप हमेशा गलत स्थान पर एक और नंबर काट देंगे।
वोल्फगैंग बैंगर्थ

@WolfgangBangerth। कुछ संकलक विशिष्ट झंडे हैं जो फ्लोटिंग पॉइंट व्यवहार को अधिक निर्धारक बनाते हैं। जैसे / एफपी: सख्त | सटीक और / किम्फ-आर्क-संगति: सच्चा (इंटेल संकलक) या -fnounsafe-math-ऑप्टिमाइज़ेशन, -फ्लोएट-स्टोर (GCC) आपके कोड को प्रदर्शन की कीमत पर प्लेटफार्मों में अधिक सुसंगत और प्रतिलिपि प्रस्तुत करने योग्य बना सकता है। । कुछ ट्वीकिंग के साथ, यह एक विशेष "प्रतिलिपि प्रस्तुत करने योग्य" बिल्ड प्रदान करता है, जिसका उपयोग विशेष रूप से परीक्षण के लिए किया जा सकता है।
एंड्रे

@ और - ओह हाँ, हमने इन सभी की कोशिश की। यह अभी भी मुश्किल है :-)
वोल्फगैंग बंगर्थ

10

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


Googletest के बारे में एक अच्छी बात यह है कि वे किसी एप्लिकेशन में इसके स्रोत कोड को शामिल करना आसान बनाते हैं, इसलिए आपको इसे निर्भरता बनाने की आवश्यकता नहीं है।
ज्यॉफ ऑक्सीबेरी

4

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


1

हमारे कम्प्यूटेशनल बायोलॉजी सी ++ लाइब्रेरी ( चैस्ट ) के लिए हम http://cxxtest.com/ का उपयोग करते हैं । यह उपयोग करने के लिए काफी सरल है, अच्छी तरह से काम करता है, यह assert()स्टाइल स्टेटमेंट के साथ परीक्षण के लिए कुछ मैक्रो प्रदान करता है । वैज्ञानिक कंप्यूटिंग के लिए ये आम तौर पर सरल तुलनात्मक TS_ASSERT_EQUALS(a,b)या संख्यात्मक तुलना हैं TS_ASSERT_DELTA(a,b,tolerance)

अपनी खुद की वैक्टर / मैट्रिसेस की तुलना करने के लिए इन मूल लोगों का उपयोग करके अतिरिक्त मैक्रो आसानी से लिखा जा सकता है। उपयोगी रूप से, आप यह भी देख सकते हैं कि आपका कोड दी गई स्थितियों में उचित चेतावनी और त्रुटि संदेश फेंकता है। आप testहमारे स्रोत कोड के फ़ोल्डरों में कुछ उदाहरण यहाँ ब्राउज़ कर सकते हैं: https://chaste.cs.ox.ac.uk/trac/browser/trunk

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