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