C++ में TDD: आलसी प्रतिभाओं के लिए टेस्ट-ड्रिवन डेवलपमेंट

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

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

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

परिचय: हम बग क्यों लिखते हैं और फिर उन्हें वीरतापूर्वक ठीक करते हैं?

\n\n

क्या आपने कभी ऐसा कोड लिखा है जो "शायद ठीक" काम करता था, और फिर तीन दिन बाद, आपको एक बग मिला जिससे सब कुछ बिखर गया? यदि हाँ — तो क्लब में आपका स्वागत है। यदि नहीं — तो आप या तो C++ के देवता हैं, या आपने अभी तक प्रोडक्शन चलाया ही नहीं है।

\n\n

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

\n\n

इस लेख में, हम वास्तविक उदाहरणों के साथ C++ में TDD को समझेंगे: हम Red-Green-Refactor चक्र का उपयोग करके फाइबोनैचि संख्याओं के साथ काम करने के लिए एक सरल लाइब्रेरी लिखेंगे। आप देखेंगे कि कैसे TDD न केवल बग से बचने में मदद करता है, बल्कि इंटरफेस डिजाइन करने में भी मदद करता है।

\n\n

TDD क्या है और C++ इसके बिना ब्रेक के बिना कार की तरह क्यों है?

\n\n

TDD (Test-Driven Development) एक विकास पद्धति है जिसमें पहले एक टेस्ट लिखा जाता है जो जानबूझकर पास नहीं होता (Red), फिर न्यूनतम कोड लिखा जाता है जो टेस्ट को पास कराता है (Green), और अंत में व्यवहार को बदले बिना संरचना में सुधार के लिए रिफैक्टरिंग (Refactor) की जाती है।

\n\n

यह C++ के लिए विशेष रूप से महत्वपूर्ण क्यों है? क्योंकि C++ एक ऐसी भाषा है जहाँ अपने पैर में गोली मारना आसान है: अपरिभाषित व्यवहार, मेमोरी लीक, गलत टाइप रूपांतरण। TDD स्वचालित रूप से एक सुरक्षा जाल बनाता है जो संकलन और निष्पादन चरण में त्रुटियों को पकड़ता है।

\n\n

Red-Green-Refactor चक्र: यह कैसे काम करता है

\n\n
    \n
  • Red: हम एक टेस्ट लिखते हैं जो फेल होना चाहिए। यह कोड के लिए हमारी "आवश्यकता" है।
  • \n
  • Green: हम न्यूनतम कोड लिखते हैं ताकि टेस्ट पास हो जाए। कोई ओवर-इंजीनियरिंग नहीं!
  • \n
  • Refactor: हम कोड में सुधार करते हैं (डुप्लिकेशन हटाते हैं, लॉजिक को सरल बनाते हैं) — टेस्ट हरे बने रहते हैं।
  • \n
\n\n

सरल लगता है? हाँ। लेकिन व्यवहार में इसके लिए अनुशासन की आवश्यकता होती है। आइए प्रयास करें।

\n\n

C++ में TDD के लिए उपकरण: Google Test बनाम Catch2

\n\n

कोड लिखने से पहले, टेस्टिंग फ्रेमवर्क चुनें। दो मुख्य उम्मीदवार:

\n\n
    \n
  • Google Test — शक्तिशाली, लोकप्रिय, ढेर सारे मैक्रोज़ के साथ। बड़े प्रोजेक्ट्स के लिए उपयुक्त।
  • \n
  • Catch2 — हल्का, आधुनिक, सुविधाजनक सिंटैक्स के साथ। शैक्षिक उदाहरणों और माइक्रोसर्विसेज के लिए आदर्श।
  • \n
\n\n

इस लेख में हम Catch2 (v3) का उपयोग करेंगे, क्योंकि यह न्यूनतम है और अतिरिक्त सेटिंग्स की आवश्यकता नहीं है। लेकिन यदि आप Google Test पसंद करते हैं — TDD के सिद्धांत वही हैं।

\n\n

अभ्यास: फाइबोनैचि संख्याओं के लिए TDD लिखना

\n\n

कल्पना करें कि हमें एक फंक्शन fibonacci(int n) लिखना है जो n-वीं फाइबोनैचि संख्या लौटाता है (0-वीं = 0, 1-वीं = 1, 2-वीं = 1, 3-वीं = 2, आदि)।

\n\n

चरण 1: Red — एक टेस्ट लिखें जो पास नहीं होता

\n\n

एक फ़ाइल test_fib.cpp बनाएँ:

\n\n
#define CATCH_CONFIG_MAIN\n#include <catch2/catch_test_macros.hpp>\n\n// फंक्शन अभी घोषित नहीं है — यह सामान्य है\nint fibonacci(int n);\n\nTEST_CASE("Fibonacci numbers", "[fib]") {\n    REQUIRE(fibonacci(0) == 0);\n    REQUIRE(fibonacci(1) == 1);\n    REQUIRE(fibonacci(2) == 1);\n    REQUIRE(fibonacci(10) == 55);\n}
\n\n

संकलित करने का प्रयास करें — हमें लिंकिंग त्रुटि मिलती है। टेस्ट RED है। बढ़िया!

\n\n

चरण 2: Green — टेस्ट पास कराने के लिए न्यूनतम कोड लिखें

\n\n

एक फ़ाइल fib.cpp बनाएँ:

\n\n
int fibonacci(int n) {\n    if (n <= 1) return n;\n    return fibonacci(n - 1) + fibonacci(n - 2);\n}
\n\n

संकलित करें और टेस्ट चलाएँ। क्या वे पास होते हैं? हाँ, लेकिन यह अक्षम है। हालाँकि, हमारा लक्ष्य Green है, पूर्णता नहीं। अभी इसे वैसे ही छोड़ दें।

\n\n

चरण 3: Refactor —

ब्लॉग

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