TDD: اكتب كودًا واثقًا بنفسك في JavaScript (قصة من فلسطين)

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

شو يعني TDD؟ (Test-Driven Development)

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

  1. اكتب اختبارًا فاشلًا: بتكتب اختبار بفحص وظيفة معينة لسه ما كتبتها. أكيد الاختبار حيفشل لأنه الوظيفة مش موجودة.
  2. اكتب الكود: بتكتب أقل كمية ممكنة من الكود عشان الاختبار ينجح.
  3. أعد البناء (Refactor): بتحسن الكود وتعدله عشان يكون أنظف وأكثر كفاءة، مع التأكد إن كل الاختبارات لسه بتنجح.

وبتكرر هاي الدورة لكل وظيفة جديدة بدك تضيفها. زي لما تبني بيت 🏡، بتبني الأساسات أول بعدين بتبني الطوابق!

ليش أستخدم TDD؟

TDD مش بس موضة، هاي طريقة تفكير بتغير نظرتك للكود. إليك بعض الأسباب اللي بتخليني أستخدمها:

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

مثال عملي بلغة JavaScript

خلينا نشوف مثال بسيط كيف ممكن نستخدم TDD في JavaScript. بدنا نعمل دالة بتجمع رقمين.

الخطوة الأولى: كتابة الاختبار الفاشل

أول شي بدنا نكتب اختبار باستخدام إطار عمل زي Jest أو Mocha. أنا بفضل Jest لأنه سهل الاستخدام.


// sum.test.js
const sum = require('./sum');

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

هذا الاختبار بفحص إذا كانت دالة `sum` بترجع 3 لما نعطيها 1 و 2. طبعًا الاختبار حيفشل لأنه لسه ما كتبنا الدالة.

الخطوة الثانية: كتابة الكود

الآن بدنا نكتب أقل كمية ممكنة من الكود عشان الاختبار ينجح.


// sum.js
function sum(a, b) {
  return a + b;
}

module.exports = sum;

هيك كتبنا الدالة اللي بتجمع رقمين. بسيطة صح؟

الخطوة الثالثة: تشغيل الاختبار

الآن بنشغل الاختبار باستخدام Jest:


npm test

إذا كل شي تمام، الاختبار لازم ينجح! 🎉

الخطوة الرابعة: إعادة البناء (Refactor)

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

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

  • ابدأ صغير: لا تحاول تعمل كل شي مرة وحدة. ابدأ بوظائف بسيطة وبعدين انتقل للأشياء المعقدة.
  • لا تخاف من الفشل: الفشل جزء من عملية التعلم. استخدم الاختبارات الفاشلة كفرصة عشان تفهم الكود تبعك أحسن.
  • استخدم إطار عمل للاختبارات: Jest أو Mocha أو أي إطار عمل ثاني بيسهل عليك كتابة وتشغيل الاختبارات.
  • اتمرن باستمرار: 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 قراءة المزيد
البودكاست