1 पॉइंट द्वारा GN⁺ 2024-07-06 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
GN⁺ 2024-07-06
Hacker News की राय
  • clojure.spec.alpha और test.check का उपयोग करने का अनुभव अच्छा रहा
    • Python का hypothesis बड़े data sets को संभाल नहीं पाया, इसलिए उसका उपयोग बंद कर दिया
  • Go भाषा में coverage-based fuzzing का अच्छा support है
    • fuzzing tests और invariants checks के ज़रिए property testing जैसे नतीजे हासिल किए जा सकते हैं
  • यह मांग कि research papers को open source tools से पुनरुत्पादित किया जा सके, उपयोगी जानकारी खोने का कारण बन सकती है
  • Rust के proptest का उपयोग करके state-based property tests अक्सर लिखता हूँ
    • parallel tests कभी-कभी उपयोगी होते हैं, लेकिन कई tests को parallel में चलाना अधिक आसान हो सकता है
  • Quviq QuickCheck पेपर पढ़ा, लेकिन state-based tests सीधे लिखना बेहतर हो सकता है
    • StateModel को अतिरिक्त framework code चाहिए, इसलिए यह बहुत efficient नहीं है
  • state machine और parallel पहलुओं के अलावा भी coverage-based property testing का प्रभाव अधिक बड़ा हो सकता है
    • automatic shrinking को बनाए रखते हुए values generate करते समय सभी invariants को बनाए रखना महत्वपूर्ण है
    • Hypothesis का "internal shrinking" approach सबसे प्रभावी है
  • Clojure में state-based QuickCheck library भी है
    • parallel testing अभी तक कोई बड़ी समस्या नहीं है
  • property-based testing को type system में integrate करना बेहतर है, जब सख्त tests लिखना संभव हो
    • साधारण "smoke tests" के लिए random inputs का उपयोग करना अधिक आसान है
  • QuviQ Erlang QuickCheck का एक free version, QuickCheck Mini, भी है
  • जिज्ञासा है कि क्या JavaScript में property-based testing libraries का उपयोग करके ऐसे random values generate किए जा सकते हैं जो कुछ specific conditions को satisfy न करें