- Property-Based testing उन दुर्लभ अकादमिक शोधों में से एक है जो 30 वर्षों के भीतर मुख्यधारा में जगह बना सके।
- "टेस्ट मत लिखो, उन्हें जनरेट करो" के नारे के साथ इसे विभिन्न programming language communities में समर्थन मिला।
- मूल Haskell लाइब्रेरी QuickCheck के Wikipedia पेज पर दूसरी भाषाओं में इसके 57 पुनः-इम्प्लीमेंटेशन सूचीबद्ध हैं।
Property-Based testing लाइब्रेरी सर्वेक्षण
- वर्तमान में सबसे अधिक उपयोग की जाने वाली Property-Based testing लाइब्रेरीज़ का सर्वेक्षण किया गया और उनकी तुलना 15 वर्ष पहले (2009) की state of the art तकनीक से की गई।
- अधिकांश लाइब्रेरीज़ सबसे उन्नत Property-Based testing फीचर्स प्रदान नहीं करतीं।
Property-Based testing लाइब्रेरीज़ की यह दुखद स्थिति क्यों है?
state-based और parallel testing, pure testing जितनी उपयोगी नहीं है
- state-based modeling के लिए प्रशिक्षण की आवश्यकता होती है।
- यह दावा किया गया है कि closed source औद्योगिक अपनाने में मदद करता है।
state-based modeling के लिए प्रशिक्षण की आवश्यकता होती है
- state-based और parallel testing सामान्य testing से अलग तरह की सोच की मांग करते हैं।
- नए उपयोगकर्ताओं को ये tools देते समय उचित प्रशिक्षण जरूरी है।
यह दावा कि closed source औद्योगिक अपनाने में मदद करता है
- यह तर्क दिया गया है कि open source काम नहीं कर पाया, और closed source products तथा संबंधित services अपनाने में मदद करते हैं।
हम क्या कर सकते हैं
- state-based और parallel Property-Based testing के छोटे open source implementations उपलब्ध कराना।
- formal specification वाले हिस्से को अधिक आसान बनाना ताकि developer training की आवश्यकता कम हो।
pure Property-Based testing का सार
- नए functions या features का परीक्षण करना एक अच्छी प्रथा माना जाता है।
- उदाहरण के लिए, यदि आपने linked list को उलटने वाला
reverse function लिखा है, तो empty list जैसी कुछ lists पर उसका परीक्षण करना उचित है।
- random input जनरेट करना Property-Based testing का मुख्य फीचर है।
- विचार यह है कि random inputs अंततः corner cases खोज लेंगे।
state-based Property testing
- state-based components का परीक्षण करते समय एक ही input हमेशा एक जैसा output नहीं देता।
- state-based testing में input sequences जनरेट करके यह परीक्षण किया जाता है कि समय के साथ system कैसे बदलता है।
- memory में मौजूद reference implementation (model) का उपयोग करके state को स्पष्ट रूप से वर्णित किया जाता है।
उदाहरण: counter
- global mutable variable का उपयोग करके counter को इम्प्लीमेंट किया जाता है।
- model को integer के रूप में दर्शाया जाता है।
- test command sequence जनरेट और execute करके वास्तविक output की model output से तुलना करता है।
parallel Property-Based testing
- parallel testing, state-based testing model का पुनः उपयोग करके race conditions का पता लगाती है।
- parallel testing, sequential state machine model का उपयोग करके linearizability के माध्यम से parallel tests चलाती है।
निष्कर्ष और आगे का काम
- Property-Based testing की स्थिति सुधारने के लिए open source implementations उपलब्ध कराना और formal specifications को अधिक आसान बनाना जरूरी है।
GN⁺ की राय
- यह लेख Property-Based testing के इतिहास और वर्तमान स्थिति को अच्छी तरह समझाता है।
- यह state-based और parallel testing के महत्व पर जोर देता है और open source implementations की आवश्यकता उठाता है।
- यह सुझाव देता है कि Property-Based testing को और अधिक सुलभ कैसे बनाया जा सकता है।
- समान फीचर्स वाले अन्य projects में Hypothesis(Python) और PropEr(Erlang) शामिल हैं।
- यह जोर देता है कि नई तकनीक या open source अपनाते समय training और support की आवश्यकता होती है।
1 टिप्पणियां
Hacker News की राय
clojure.spec.alphaऔरtest.checkका उपयोग करने का अनुभव अच्छा रहाhypothesisबड़े data sets को संभाल नहीं पाया, इसलिए उसका उपयोग बंद कर दियाproptestका उपयोग करके state-based property tests अक्सर लिखता हूँStateModelको अतिरिक्त framework code चाहिए, इसलिए यह बहुत efficient नहीं है