TDD: اكتب كود زي الدهب! دليل شامل لتطوير البرمجيات بالاعتماد على الاختبار أولاً 🥇

استمع للبودكاست حوار شيق بين لمى وأبو عمر
0:00 / 0:00

TDD: اكتب كود زي الدهب! دليل شامل لتطوير البرمجيات بالاعتماد على الاختبار أولاً 🥇

بتذكر زمان، أيام الجامعة، كنت شغال على مشروع تخرج. كود كتييير، وكل ما أضيف ميزة جديدة، بتخرب ميزة قديمة! 🤦‍♂️ كنت أقول لحالي: “يا عمي، المهم يشتغل! بعدين بنظف الكود.” بس “بعدين” هاي ما كانت تيجي! لحد ما عرفت الـ TDD… غيرت حياتي (البرمجية)!

TDD أو Test-Driven Development، ببساطة، هي منهجية تطوير برمجيات بتعتمد على كتابة الاختبارات قبل كتابة الكود الفعلي. يعني بالعربي الفصيح، قبل ما تكتب سطر كود واحد، بتكتب الاختبار اللي رح يفحص هذا الكود.

شو يعني TDD؟ وليش لازم أستخدمها؟

TDD مش مجرد طريقة كتابة كود، هي فلسفة! هي تغيير طريقة تفكيرك كمبرمج. بدل ما تكتب الكود وبعدين تفكر كيف تفحصه، بتفكر كيف بدك تفحصه قبل ما تكتبه. هذا الشي بيخليك تفكر بتصميم الكود بشكل أفضل، وبتخلي الكود تبعك أكثر قابلية للاختبار، وبالتالي أكثر جودة.

فوائد الـ TDD:

  • كود أكثر موثوقية: لأنك بتختبر كل شي أول بأول، بتقل احتمالية وجود أخطاء مخفية.
  • تصميم أفضل للكود: الـ TDD بيجبرك تفكر في تصميم الكود قبل ما تكتبه، وهذا بيؤدي إلى تصميم أفضل وأكثر قابلية للصيانة.
  • تقليل وقت التصحيح: لما يكون عندك مجموعة شاملة من الاختبارات، بيكون أسهل تكتشف وتصلح الأخطاء.
  • ثقة أكبر بالكود: لما تعرف إن الكود تبعك بيمر بكل الاختبارات بنجاح، بتكون واثق أكتر فيه.
  • توثيق تلقائي: الاختبارات بتعتبر نوع من التوثيق للكود، لأنها بتوضح كيف المفروض الكود يشتغل.

كيف تشتغل الـ TDD؟ (Red-Green-Refactor)

الـ TDD بتعتمد على دورة بسيطة بتتكون من 3 مراحل:

1. Red (الأحمر): كتابة الاختبار الفاشل

في هذه المرحلة، بتكتب اختبار بيفحص وظيفة معينة أنت لسه ما كتبتها. الاختبار لازم يفشل، لأنه ما في كود لسه! هذا بيضمن إن الاختبار تبعك فعال وبيفحص الشي اللي بدك تفحصه فعلاً.

مثال (Python):


import unittest

def add(x, y):
    pass # لسه ما كتبنا الكود!

class TestAdd(unittest.TestCase):
    def test_add_positive_numbers(self):
        self.assertEqual(add(2, 3), 5)

if __name__ == '__main__':
    unittest.main()

هذا الاختبار رح يفشل، لأنه الدالة `add` ما بتعمل شي لسه!

2. Green (الأخضر): كتابة الكود اللازم لإنجاح الاختبار

في هذه المرحلة، بتكتب أقل كمية ممكنة من الكود عشان تنجح الاختبار اللي كتبته في المرحلة اللي قبلها. مش مهم الكود يكون مثالي أو نظيف، المهم إنه ينجح الاختبار!

مثال (Python):


def add(x, y):
    return x + y

هذا الكود البسيط رح ينجح الاختبار!

3. Refactor (إعادة الهيكلة): تحسين الكود

في هذه المرحلة، بتحسن الكود تبعك بدون ما تغير سلوكه. يعني بتنظفه، بتعيد تسمية المتغيرات، بتقسم الدوال الكبيرة لدوال أصغر، الخ. المهم إن الاختبارات تضل تنجح بعد التعديل!

مثال (Python):


def add(num1, num2):
    """
    Adds two numbers together.

    Args:
        num1: The first number.
        num2: The second number.

    Returns:
        The sum of the two numbers.
    """
    return num1 + num2

في هذا المثال، ضفنا توثيق للدالة `add` عشان الكود يكون أوضح.

نصائح من أبو عمر:

  • ابدأ صغير: لا تحاول تعمل كل شي بالـ TDD من البداية. ابدأ بميزة صغيرة وجربها.
  • اكتب اختبارات واضحة: الاختبارات لازم تكون سهلة القراءة والفهم. استخدم أسماء واضحة للاختبارات والمتغيرات.
  • لا تكتب كود زيادة عن الحاجة: اكتب فقط الكود اللازم لإنجاح الاختبار. لا تحاول تعمل كل شي مرة واحدة.
  • استخدم أدوات مناسبة: في أدوات كتير بتساعدك في الـ TDD، زي unittest في Python، JUnit في Java، الخ.
  • مارس باستمرار: الـ TDD بدها ممارسة عشان تصير عادة. حاول تطبقها في كل مشاريعك.

تحديات الـ TDD وكيف تتغلب عليها:

  • الوقت: ممكن تحس إن الـ TDD بتاخد وقت أطول في البداية، بس على المدى الطويل بتوفر وقت التصحيح والصيانة.
  • التعقيد: ممكن تكون صعبة في البداية، خاصة إذا كنت متعود تكتب الكود أولاً. بس مع الممارسة بتصير أسهل.
  • الاختبارات الصعبة: بعض الأحيان بيكون صعب تكتب اختبارات لوظائف معقدة. في هذه الحالة، حاول تقسم الوظيفة لوظائف أصغر وأسهل للاختبار.

الخلاصة:

الـ TDD مش حل سحري لكل مشاكل البرمجة، بس هي أداة قوية جداً بتساعدك تكتب كود أفضل وأكثر موثوقية. إذا كنت بدك تصير مبرمج محترف، الـ TDD لازم تكون جزء من صندوق الأدوات تبعك. 💪

نصيحة أخيرة: لا تخاف تجرب! جرب الـ TDD في مشروع صغير وشوف كيف بتشتغل معك. ممكن ما تعجبك من أول مرة، بس استمر وحاول تفهم الفلسفة اللي وراها. رح تشوف الفرق! 😉

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

برمجة وقواعد بيانات

تحديثات قاعدة البيانات بدون توقف: كيف أنقذنا نمط التوسيع والتعاقد (Expand/Contract) من جحيم التوقفات المجدولة؟

هل سئمت من إيقاف الخدمة مع كل تحديث لهيكلة قاعدة البيانات؟ أشارككم قصة حقيقية وكيف أنقذنا نمط التوسيع والتعاقد (Expand/Contract) من ليالي النشر الطويلة والمُجهدة،...

4 يونيو، 2026 قراءة المزيد
الشبكات والـ APIs

كانت إعادة المحاولة كارثة: كيف أنقذتنا مفاتيح عدم تكرار العمليات (Idempotency Keys) من جحيم الفواتير المزدوجة؟

أشارككم قصة حقيقية من الخنادق البرمجية، يوم كاد خطأ بسيط في إعادة محاولة طلبات الدفع أن يكلفنا سمعتنا وأموال عملائنا. اكتشفوا معنا كيف كانت مفاتيح...

4 يونيو، 2026 قراءة المزيد
الحوسبة السحابية

من التوقف التام إلى النجاة: كيف أنقذتنا استراتيجية “الضوء المرشد” (Pilot Light) يوم انقطعت السحابة؟

أتذكر ذلك اليوم جيدًا، فنجان القهوة الصباحي، وصوت تنبيهات المراقبة يصرخ كأنه يوم القيامة. كانت منطقة سحابية كاملة قد توقفت عن العمل، لكن بفضل استراتيجية...

4 يونيو، 2026 قراءة المزيد
التوظيف وبناء الهوية التقنية

كانت مهمتي البرمجية للاختبار مجرد كود: كيف أنقذني توثيق القرارات من جحيم الصمت بعد المقابلة؟

أشارككم قصة حقيقية من بداياتي، وكيف تعلمت بالطريقة الصعبة أن المهمة البرمجية ليست مجرد كتابة كود، بل هي فرصة لإظهار طريقة تفكيرك. اكتشف كيف يمكن...

4 يونيو، 2026 قراءة المزيد
التكنلوجيا المالية Fintech

من الانتظار لأيام إلى الدفع في ثوانٍ: كيف أنقذتنا شبكات الدفع الفوري من جحيم التحويلات البنكية؟

أسرد لكم من واقع تجربتي كـ "أبو عمر"، كيف عانينا من بطء وتكلفة التحويلات البنكية الدولية، وكيف جاءت شبكات الدفع الفوري ومعيار ISO 20022 لتكون...

4 يونيو، 2026 قراءة المزيد
البنية التحتية وإدارة السيرفرات

كان كل خادم لدينا ‘ندفة ثلج’ فريدة: كيف أنقذنا ‘الكود كبنية تحتية’ (IaC) من جحيم الانجراف اليدوي؟

في هذه المقالة، أشارككم قصة حقيقية من قلب المعركة التقنية مع "خوادم ندفات الثلج" الفوضوية. سنغوص في مفهوم "الكود كبنية تحتية" (IaC) وكيف أن أدوات...

4 يونيو، 2026 قراءة المزيد
اختبارات الاداء والجودة

كانت تغطية الاختبارات 100% لكن الأخطاء تتسرب: كيف أنقذنا “الاختبار الطفري” من جحيم الثقة الزائفة؟

كنا نظن أن تغطية الاختبار بنسبة 100% هي درعنا الواقي، لكن الأخطاء كانت تتسلل إلى الإنتاج كاللصوص في ليل بهيم. اكتشف كيف أنقذنا "الاختبار الطفري"...

4 يونيو، 2026 قراءة المزيد
البودكاست