0%
النشر دون حبس الأنفاس

النشر بطمأنينة

الاختبار لا يثبت أن الشيفرة سليمة، بل يمنحك الإذن بتغييرها

10-15 دقيقة

النشر دون حبس الأنفاس

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

هذا بالضبط ما تشتريه بالاختبارات، ولا شيء غيره. الاختبار لا يجعل شيفرتك صحيحة: فقد كانت صحيحة أو معطوبة قبل أن تكتب الاختبار. ما يمنحك إياه هو حق لمس هذه الشيفرة غدًا دون إعادة قراءة الملفات السبعة التي تعتمد عليها. مجموعة الاختبارات عقد قابل للتنفيذ يجيب خلال ثلاثين ثانية عن السؤال «هل كسرتُ شيئًا للتو؟»، وهذه الإجابة السريعة تغيّر تمامًا علاقتك بقاعدة شيفرتك. الفرق التي تنشر عدة مرات في اليوم ليست أكثر شجاعة من غيرها؛ هي فقط أتمتت الخوف.

كلفة الاختبار وعائده

لكل اختبار ثلاث تكاليف: وقت كتابته، ووقت تنفيذه عند كل commit طوال سنتين، ووقت إصلاحه كلما تعطّل بينما المنتج يعمل. وهذه التكلفة الثالثة هي التي تُفسد مجموعات الاختبارات، وهي دائمًا تقريبًا مُقدَّرة بأقل من حقيقتها.

أما العائد فصياغته سهلة: احتمال أن يكشف الاختبار تراجعًا فعليًا (regression)، مضروبًا في الكلفة التي كان سيسببها ذلك التراجع في بيئة الإنتاج. اختبار يتحقق من أن زر الحذف يطلب تأكيدًا يحمي عملية لا رجعة فيها. أما اختبار يتحقق من أن الدالة formaterPrix تعيد فعلًا سلسلة نصية فلا يحمي شيئًا: فـ TypeScript يفعل ذلك أصلًا، مجانًا، عند التصريف.

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!