Swift में म्यूटेशन टेस्टिंग: परफेक्ट कोड के लिए गुप्त हथियार

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

आपके टेस्ट झूठ बोल रहे हैं, और आपको इसकी जानकारी भी नहीं है

\n\n

एक स्थिति की कल्पना करें: आपने 200 यूनिट टेस्ट लिखे, कोड कवरेज 95% है, CI ग्रीन है, मैनेजर खुश है। आप रिलीज़ करते हैं, और एक हफ्ते बाद प्रोडक्शन एक बग के कारण क्रैश हो जाता है जिसे टेस्ट को पकड़ना चाहिए था। परिचित लग रहा है? झूठे आत्मविश्वास की दुनिया में आपका स्वागत है, जहाँ mutation testing (म्यूटेशन टेस्टिंग) आपके Swift कोड के लिए एक ईमानदार दर्पण की भूमिका निभाता है।

\n\n

इस लेख में, हम जानेंगे कि Swift में म्यूटेशन टेस्टिंग क्या है, यह व्यवहार में कैसे काम करता है, और क्यों प्रत्येक iOS डेवलपर को इसे अपने शस्त्रागार में शामिल करना चाहिए। कोई उबाऊ सिद्धांत नहीं - केवल कोड, उदाहरण और वास्तविक मामले।

\n\n

म्यूटेशन टेस्टिंग क्या है और इसकी आवश्यकता क्यों है?

\n\n

म्यूटेशन टेस्टिंग (mutation testing) स्रोत कोड में छोटे बदलाव (म्यूटेशन) करके टेस्ट की गुणवत्ता का मूल्यांकन करने की एक विधि है। इन संशोधित संस्करणों को म्यूटेंट कहा जाता है। यदि टेस्ट म्यूटेंट का पता नहीं लगाते (अर्थात विफल नहीं होते), तो आपका टेस्ट कवरेज कमजोर है, और ऐसा म्यूटेंट जीवित रहता है।

\n\n

यह क्यों महत्वपूर्ण है? कोड कवरेज जैसी पारंपरिक मीट्रिक केवल यह दिखाती हैं कि टेस्ट के दौरान कोड का कितना प्रतिशत निष्पादित हुआ। लेकिन वे इस मुख्य प्रश्न का उत्तर नहीं देतीं: क्या टेस्ट तर्क की शुद्धता की जाँच कर रहे हैं? म्यूटेशन टेस्टिंग उत्तर देती है: यदि आप गलती से शर्त if a > b को if a < b में बदल देते हैं, तो क्या आपके टेस्ट इसे नोटिस करेंगे?

\n\n

Swift में म्यूटेशन टेस्टिंग कैसे काम करती है: सरल भाषा में

\n\n

प्रक्रिया इस प्रकार है:

\n\n
    \n
  1. मूल कोड — आपकी कार्यशील Swift फ़ाइल।
  2. \n
  3. म्यूटेंट का निर्माण — प्रोग्राम स्वचालित रूप से कोड के कई संस्करण बनाता है जिनमें एक छोटी सी त्रुटि होती है (उदाहरण के लिए, + को - से बदलना)।
  4. \n
  5. टेस्ट चलाना — प्रत्येक म्यूटेंट के लिए यूनिट टेस्ट का पूरा सेट चलाया जाता है।
  6. \n
  7. परिणामों का विश्लेषण — यदि टेस्ट विफल होते हैं, तो म्यूटेंट "मारा गया"। यदि टेस्ट पास होते हैं, तो म्यूटेंट "जीवित रहता है", और यह एक लाल झंडा है।
  8. \n
\n\n

मारे गए म्यूटेंट के प्रतिशत को mutation score कहा जाता है। यह जितना अधिक होगा, आपके टेस्ट उतने ही विश्वसनीय होंगे।

\n\n

व्यावहारिक उदाहरण: Swift में कोड और टेस्ट लिखना

\n\n

मान लीजिए कि हम Swift में एक ऑनलाइन स्टोर के लिए एक सरल डिस्काउंट कैलकुलेटर लिख रहे हैं। यहाँ हमारा production-कोड है:

\n\n
// DiscountCalculator.swift\nstruct DiscountCalculator {\n    func calculateDiscount(price: Double, isPremiumUser: Bool) -> Double {\n        var discount: Double = 0.0\n        \n        if price > 100 {\n            discount += 0.1 // 10% बेसिक डिस्काउंट\n        }\n        \n        if isPremiumUser {\n            discount += 0.05 // प्रीमियम के लिए अतिरिक्त 5%\n        }\n        \n        return price * (1 - discount)\n    }\n}\n
\n\n

सब कुछ तार्किक लगता है। चलिए यूनिट टेस्ट लिखते हैं:

\n\n
// DiscountCalculatorTests.swift\nimport XCTest\n\nfinal class DiscountCalculatorTests: XCTestCase {\n    let calculator = DiscountCalculator()\n    \n    func testDiscountForRegularUserLowPrice() {\n        let result = calculator.calculateDiscount(price: 50, isPremiumUser: false)\n        XCTAssertEqual(result, 50.0, accuracy: 0.01)\n    }\n    \n    func testDiscountForRegularUserHighPrice() {\n        let result = calculator.calculateDiscount(price: 200, isPremiumUser: false)\n        XCTAssertEqual(result, 180.0, accuracy: 0.01)\n    }\n    \n    func testDiscountForPremiumUserLowPrice() {\n        let result = calculator.calculateDiscount(price: 50, isPremiumUser: true)\n        XCTAssertEqual(result, 47.5, accuracy: 0.01)\n    }\n    \n    func testDiscountForPremiumUserHighPrice() {\n        let result = calculator.calculateDiscount(price: 200, isPremiumUser: true)\n        XCTAssertEqual(result, 170.0, accuracy: 0.01)\n    }\n}\n
\n\n

टेस्ट पास होते हैं। कवरेज 100% है। लेकिन देखते हैं कि म्यूटेशन टेस्टिंग क्या कहती है।

\n\

ब्लॉग

पुस्तक अनुशंसाएँ