मेरे पास यूनिट टेस्टिंग से पहले थोड़ा अनुभव है, जिसे मैं कॉल करता हूं (pejoratively नहीं) क्लासिक सॉफ्टवेयर इंजीनियरिंग प्रोजेक्ट: एक एमवीसी, एक उपयोगकर्ता जीयूआई, एक डेटाबेस, बीच की परत में व्यावसायिक तर्क, आदि के साथ। अब मैं ' मी # C में वैज्ञानिक कंप्यूटिंग लाइब्रेरी लिखना (हाँ, मुझे पता है कि C # बहुत धीमा है, C का उपयोग करें, पहिया को सुदृढ़ न करें, और वह सब, लेकिन हमारे पास C # में मेरे संकाय में वैज्ञानिक गणना करने वाले बहुत से लोग हैं,) और हमें इसकी आवश्यकता है)। यह सॉफ्टवेयर विकास उद्योग के संदर्भ में एक छोटी परियोजना है, क्योंकि मैं इसे ज्यादातर अपने आप से लिख रहा हूं, और समय-समय पर कुछ सहयोगियों की मदद से। इसके अलावा, मुझे इसके लिए भुगतान नहीं मिलता है, और सबसे महत्वपूर्ण, एक शैक्षणिक परियोजना है। मेरा मतलब है, मुझे उम्मीद है कि किसी दिन इसकी पेशेवर गुणवत्ता होगी, क्योंकि मैं खुले स्रोत पर जाने की योजना बना रहा हूं,
वैसे भी, परियोजना बड़ी हो रही है (कोड की लगभग 18,000 लाइनें, जो मुझे लगता है कि एक आदमी की परियोजना के लिए बड़ी है), और इसके मेरे हाथों से निकल रही है। मैं स्रोत नियंत्रण के लिए git का उपयोग कर रहा हूं, और मुझे लगता है कि मुझे बहुत अच्छा लगा, लेकिन मैं पुराने स्कूल की तरह परीक्षण कर रहा हूं, मेरा मतलब है, पूर्ण कंसोल एप्लिकेशन लिखना जो सिस्टम के एक बड़े हिस्से का परीक्षण करते हैं, मुख्यतः क्योंकि मुझे पता नहीं है कि कैसे इस परिदृश्य में इकाई परीक्षण करना, हालांकि मुझे लगता है कि मुझे क्या करना चाहिए। समस्या यह है कि पुस्तकालय में ज्यादातर एल्गोरिदम शामिल हैं, उदाहरण के लिए, ग्राफ़ एल्गोरिदम, क्लासिफायर, संख्यात्मक सॉल्वर, यादृच्छिक वितरण, आदि। मैं अभी नहीं जानता कि इन एल्गोरिदम में से प्रत्येक के लिए छोटे परीक्षण मामलों को कैसे निर्दिष्ट किया जाए, और उनमें से कई हैं। स्टोचस्टिक मुझे नहीं पता कि शुद्धता को कैसे मान्य किया जाए। उदाहरण के लिए, वर्गीकरण के लिए, कुछ मैट्रिक्स हैं जैसे सटीक और याद करते हैं, लेकिन ये एल्गोरिदम दो एल्गोरिदम की तुलना करने के लिए बेहतर हैं एक एकल एल्गोरिथ्म को पहचानने के लिए। तो, मैं यहां शुद्धता को कैसे परिभाषित कर सकता हूं?
अंत में प्रदर्शन की समस्या भी है। मुझे पता है कि इसके परीक्षणों का एक अलग सेट है, लेकिन प्रदर्शन एक वैज्ञानिक उपकरण की महत्वपूर्ण विशेषताओं में से एक है, बजाय उपयोगकर्ता संतुष्टि या अन्य सॉफ्टवेयर इंजीनियरिंग मेट्रिक्स के।
मेरी सबसे बड़ी समस्याओं में से एक डेटा संरचनाओं के साथ है। एकमात्र परीक्षण मैं केडी-ट्री के लिए आ सकता हूं एक तनाव परीक्षण है: बहुत सारे यादृच्छिक वैक्टर डालें और फिर बहुत सारे यादृच्छिक प्रश्न करें, और एक भोले रैखिक खोज के खिलाफ तुलना करें। प्रदर्शन के लिए भी यही। और संख्यात्मक ऑप्टिमाइज़र के साथ, मेरे पास बेंचमार्क फ़ंक्शन हैं जो मैं परीक्षण कर सकता हूं, लेकिन फिर, यह एक तनाव परीक्षण है। मुझे नहीं लगता कि इन परीक्षणों को इकाई परीक्षणों के रूप में वर्गीकृत किया जा सकता है, और सबसे महत्वपूर्ण, लगातार चलाएं, क्योंकि उनमें से अधिकांश बल्कि भारी हैं। लेकिन मुझे यह भी लगता है कि इन परीक्षणों को करने की आवश्यकता है, मैं सिर्फ दो तत्वों को सम्मिलित नहीं कर सकता, रूट को पॉप कर सकता हूं, और हां, यह 0-1-एन केस के लिए काम करता है।
तो, क्या, यदि कोई है, तो इस तरह के सॉफ्टवेयर के लिए इकाई (यूनिट) परीक्षण दृष्टिकोण है? और मैं कोड-बिल्ड-कमिट-इंटीग्रेटेड साइकिल के आसपास यूनिट परीक्षणों और भारी लोगों को कैसे व्यवस्थित करूं?