كتابة الUnit Testing يحتاج لجهد اضافي مضاعف لا ينكره أحد. فلكل سطر كود قد تحتاج إلى كتابة 3 و احيانا إلى 10 اسطر في مقابل كل سطر في الكود الرئيسي. فهل يستحق الأمر كل هذا العناء ؟
(سلسلة عن الUnit Testing - الجزء الأول)
(سلسلة عن الUnit Testing - الجزء الأول)
إن كنت لأول مرة تسمع المصطلح فالUnit Test هو برنامج اضافي ( مشروع برمجي ) تقوم بكتابته ليقوم بعمل اختبار لأجزاء ( اكواد ) برنامجك الأساسي للتأكد انها تعمل بالشكل المطلوب منها. هذا باختصار و بساطة شديدة و تسطيح. لكن ..
كما أن البرمجة فن تحتاج فيه لجهد و وقت كي تتعلمها و تبدأ في تحصيل العائد منها ( البرامج ) , فكذلك كتابة الإختبارات فهو ايضاً فن في كيفية جعله يستحق ذلك المجهود و الوقت الذي بذلته في كتابته.
فالمسألة ليست فقط كتابة Unit Test تغطي الكود بل كتابتها بالطريقة الصحيحة. حيث أنها غيابها مؤشر لعدم جودة الكود و في نفس الوقت وجودها لا يعني بالضرورة أن الكود جيد. هذا هدف تكتيكي آني.
لكن الهدف الاستراتيجي و الحقيقي هو بناء برامج تعيش لسنوات طويلة. يسهل التعديل و الإضافة عليها مع مرور الزمن بوتيرة شبه ثابته. لأنه عادة في المشاريع البرمجية الكبيرة يتناقص الإنجاز و يزداد الوقت بمنحنى عالي.
فما كنت تستطيع اضافته من مميزات على شكل اكواد لبرنامجك في شهر, فستنتجه في شهرين بعد فترة من الزمن ثم ستنتجه في 3 و اربعة اشهر و 6. حتى تصبح الإضافة مستحيلة بعد سنوات و تلجأ إلى اعادة بناء البرنامج من جديد.
الUnit Testing أداة مساعدة و داعمة للإستمرار في التطوير حتى و إن اصبح البرنامج يوماً "كرة طين" ball of mud فستضمن بالUnit Testing على الأقل أن تثبت و لا ترجع و تدحرج عائدة نحوك. او يمكن تشبيهه وقتها بحزام الأمان.
الUnit Tests هو كود مصدري مثله مثل كود البرنامج يحتاج لصيانة فلا تنظر إليه كأنه "مصاريف" بينما ترى الكود الأصلي كـ"رأسمال" ففي الحقيقة كلاهما "التزامات" و القيمة الحقيقية هي في فيما يقدمانه من فائدة للعميل.
كتابة الUnit Test لها مباديء و شروط فيجب مثلاً ان يكون تركيز الUnit Test على اختبار جزء صغير من الكود ( يسمى Unit ) و أن يقوم باختبار ذلك الجزء بسرعة مع عزله عن أي تأثير خارجي عند اختباره.
شرط العزل الأخير اتى حديثاً نوعاً ما. فالمدرسة الكلاسيكية ( مدرسة دترويت بقيادة Kent Beck رائد الTDD لا ترى العزل بعكس مدرسة لندن التي انتجت ما يسمى بالTest Double مثل الMock و الStub و الFake.
الفرق أن المدرسة الأولى يهمها الBehavior النهائي و العمل الحقيقي بالمجمل سواء كان الكود مجرد method صغير بداخل كلاس او مجموعة كلاسات تتواصل مع بعضها لتنتج في الاخير عملية واحدة.
اما مدرسة لندن فترى ان يتم الاختبار على اصغر جزء ممكن ولو لم يقم ذلك الجزء بوظيفة او عملية تُذكر. و لذا يحتاجون لعمل Mocking و لذا يُسمون الMockist. و سافصل في تلك المصطلحات لاحقاً. المهم ..
كتابة الUnit Testing أصبحت مهارة أساسية لأي مبرمج و دليل وعي و احتراف و ايضاً جودة. و اصبح كثير من العملاء على وعي بأهميتها و يطلبونها من المبرمج عند تسليم المصدر.
ابحث عن مكتبات الUnit Test في لغتك و اجعلها شيء اساسي في برامجك التي تبنيها.
و إلى تكملة قريبة في الجزء الثاني..
ابحث عن مكتبات الUnit Test في لغتك و اجعلها شيء اساسي في برامجك التي تبنيها.
و إلى تكملة قريبة في الجزء الثاني..
جاري تحميل الاقتراحات...