اختبار الكود واجمالي نسبة تغطية الاختبارات - unit testing and test coverage in Arabic
بسم الله، والصلاة والسلام على رسول الله الحمد لله الذي عَلَّمَ بالقلم.. عَلَّمَ الإنسانَ ما لم يَعْلَم والصلاةُ والسلامُ على خيرِ مُعَلِّمي الناسِ الخير محمد.. الهم علمنا ما ينفعنا وانفعنا بما علمتنا انك انت العليم الحكيم .
المحتوي :ـ
- unit testing الهدف من
- مثال 1
- مثال 2
- نسبة التغطية (test coverage)
- ما التالي ؟
الهدف من unit testing
ضمان صلاحية الكود في اتمام المهمه المقصود بها اثناء تطوير البرنامج او خلال التركيب
مثال 1 :
مطلوب كتابة دالة لمعرفة هل عمر المستخدم اكبر من 18 عام ام لااذا كان اكبر من 18 عام تكون Trueواذا كان اقل من 18 عام تكون False
الان وقت اختبار الدالة ( الصحيح ان تكتب الاختبار اولا ثم الكود بعد ذلك ) لكن قمنا بالعكس للتوضيح فقط
نحتاج لمكتبة test كـ dev_dependencies
اين يكتب الاختبار ؟ في المسار الرئيسي للمشروع داخل ملف test
ملحوظة : اسم ملف الاختبار يجب ان ينتهي ب _test.dart ليكون بالشكل التالي
ميكروسوفت بتقترح انك تكتب الاختبار بطريقة AAA
لانهاء شائعة ومفيش مانع من التنظيم 😅
Arrange ثم Act ثم Assert
كدا اصبح الكود جاهز وال test جاهز فاضل تشغيل ال test لضمان ان الكود سليم
بس لازم قبل ماتشغل ال test تكون كاتبة داخل دالة test
وده الشكل النهائي
وعلشان تقدر تشغل ال test في اكثر من طريقة
1- عن طريق ال ide سواء vsCode او Android studio
2- عن طريق ال terminal
هنستخدم ال terminal في باقي الشرح
الامر المستخدم هو flutter test
ودي النتيجة بعد التشغيل ونجاح الاختبار
حتي الان انت معتمد علي الشرح , توقف وجرب بنفسك اكتب اختبار لو العمر اقل من 18 هيكون الناتج false
ممكن تكون الدالة الي كتبناها دائما بترجع true بغض النظر عن العمر واحنا محتاجين تتاكد في الحالين ال true و ال false
في اخر المقال هتلاقي المشروع علي GitHub لو احتجت مساعدة
مثال 2 : مطلوب بناء داله تقوم بحساب ناتج القسمة بين متغيرين (x,y)وفي حاله ان الرقم x او y قيمتهم تكون اقل من او تساوي الصفر يكون ناتج الدالة صفر
الافضل تعمل بنفسك وتشوف الخطا عندك ايه لكن هنمشي خطوه بخطوة بردو للتوضيح المرادي هنكتب ال test الاول ثم الكود
المقصود بيه هل التست الي انت كتبتة للكود شغل الكود كله واختبره كله ولا في حجات انت مختبرتهاش
مثلا في if else ودايما بينفذ ال if والتستات عمرها مكان فيها test case بتدخل في else علشان تختبرها
مثلا في if else ودايما بينفذ ال if والتستات عمرها مكان فيها test case بتدخل في else علشان تختبرها
وده بيكون نسبة مئوية %
لو بتختبر مشروع بفلاتر واختبرت الكود كله نسبتك هتكون 60% تقريبا
لانك مستخدم كود من فلاتر ومشغلتش التست بتاعه وده طبيعي وعادي
لانك مستخدم كود من فلاتر ومشغلتش التست بتاعه وده طبيعي وعادي
لو بتعمل برنامج cli او مكتبة ومش معتمد علي مصدر خارجي
هتقدر ال coverage بتاعتك توصل ل 100%
هتقدر ال coverage بتاعتك توصل ل 100%
ازاي اعرف قيمة ال coverage ؟
الامر هيكون
الامر هيكون
flutter test --coverage
ده هيطلعلك ملف فيه تقرير التغطية
ومحتاج تستخدم extenstions ل vs code او android studio علشان تعرف منه الاجمالي كام في المئة %
مثال في vscode
وسبب ان التغطية كانت 85.7% هو اني عملت غلط وانا بكتب كود دالة القسمة واستخدمت && and
والصح اني استخدم || or
لان المطلوب كان اذا كان x او اذا كان y
وهنا vscode بيوضحلي ان الاختبارات مدخلتش هنا ابدا
لكن ال tests فيها 3 فشلو
ونستنج هنا ان لو التغطية كانت عالية مش شرط ان الاختبارات نجحت لازم نتاكد دائما من الاثنين
وده الشكل النهائي بعد كتابة دالة القسمة بطريقة صحيحة والتاكد منها بال test والتاكد من coverage 100%
وفي الاخير الاختبارات (testing) في صناعه السوفت وير اوالبرمجيات مهمه بنفس درجه اهتمام شركات الادوية باختبار دوائها او مصانع السيارات في اختبارات الامان في سيراتها انت بتختبر المنتج الي انت عملته وبتضمنه انه دايما بينفذ المطلوب منه وميطلعش سلوك غريب
مكتبة زي riverpod فيه تقريبا 13 الف سطر كود في الاختبارات بس
مكتبة زي riverpod فيه تقريبا 13 الف سطر كود في الاختبارات بس
ممكن تستفاد من ال test مع ال CI / CD وتوفر بيئة عمل مستقرة بشكل كبير وتضمن ان ميطلعش من الكود اي اخطا غير متوقعة نهائيا وهتقدر تزود الانتجاية وتقلل التكاليف بشكل ملحوظ
مصادر ومكاتب متعلقه بالموضوع :
مصادر ومكاتب متعلقه بالموضوع :