تغطية الكود بالاختبارات في Swift: كيفية قياس وتحسين الجودة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تغطية الكود بالاختبارات في Swift: من "مجرد اختبارات" إلى ثقة حقيقية



هل سبق لك أن حذفت كودًا "ميتًا"، ثم انهار البناء بعد أسبوع؟ أو هل تفاخرت بتغطية 90%، لكن الأخطاء ظهرت في الإنتاج؟ إذا كان الأمر كذلك، فهذه المقالة لك. تغطية الكود بالاختبارات (code coverage) في Swift ليست مجرد علامة اختيار لـ CI/CD. إنها رادارك الشخصي: فهي تُظهر أي أجزاء الكود يتم اختبارها فعليًا، وأيها يعيش "على كلمة شرف".



لن نتحدث عن ضرورة كتابة الاختبارات - فهذا واضح. بدلاً من ذلك، سنشرح: كيف تجعل Xcode يحسب التغطية بشكل صحيح، وما هي المقاييس المهمة حقًا (تنبيه: ليس النسبة المئوية فقط)، ولماذا تغطية 100% غالبًا ما تكون فخًا. هيا بنا!



1. لماذا قياس تغطية الكود في Swift؟



تخيل أنك قبطان سفينة، والاختبارات هي ملاحوك. تغطية الكود هي خريطة تُحدد المناطق "المستكشفة". إذا كانت الخريطة بيضاء - فأنت تبحر بشكل أعمى. إذا كانت مغطاة بنسبة 100% ولكن دون مراعاة الحالات الحدودية - فأنت لا تزال معرضًا لخطر الجنوح.



الأسباب الرئيسية لاعتماد code coverage Swift:

  • البحث عن "المناطق الرمادية" - ترى فورًا أي كود لا يتم تنفيذه أبدًا في الاختبارات (مثل معالجات الأخطاء).
  • إعادة الهيكلة دون خوف - مقياس التغطية العالي يعطي الضوء الأخضر لإعادة كتابة الوحدات.
  • توثيق المتطلبات - تصبح الاختبارات وثائق حية، وتظهر التغطية مدى اكتمال هذه الوثائق.
  • مراقبة الجودة في CI - يمكن منع الدمج إذا انخفضت التغطية عن الحد الأدنى (مثل 80%).


لكن تذكر الشيء الرئيسي: تغطية الكود بالاختبارات Swift هي مقياس، وليست هدفًا. السعي وراء الرقم من أجل الرقم هو طريق لاختبارات عديمة الفائدة تتحقق من الـ getters والـ setters.



2. أدوات قياس التغطية في Swift: من Xcode إلى الأدوات المساعدة الخارجية



يقدم نظام Swift البيئي عدة طرق للحصول على النسب المئوية المرجوة. سننظر في ثلاث طرق رئيسية: Xcode المدمج، الأداة المساعدة slather، وخدمات CI (مثل Codecov).



2.1. Xcode Code Coverage المدمج



أبسط وأسهل أداة متاحة. كل ما عليك فعله هو تفعيل خيار Gather coverage data في مخطط البناء (Product → Scheme → Edit Scheme → Test → Options). بعد تشغيل الاختبارات، افتح Report Navigator (Cmd+9) واختر علامة التبويب Coverage.



المزايا: لا يتطلب تثبيتًا، تكامل مع Xcode، يُظهر التغطية في الوقت الفعلي.

العيوب: لا يمكنه دمج نتائج عدة أهداف، صعوبة التصدير إلى CI.



مثال على الإعداد لمشروع:

// في مخطط البناء (Test → Options) نضع علامة اختيار "Code Coverage"// بعد تشغيل الاختبارات (Cmd+U) نعرض التقرير في Report Navigator.// لكل ملف نرى سطرًا بنسبة التغطية وأسطرًا ملونة:// الأخضر - تم تنفيذه، الأحمر - لم يتم تنفيذه.


2.2. Slather - مولد تقارير مرن



Slather هي أداة مساعدة مفتوحة المصدر تقوم بتحليل ملفات .profdata (نتائج تغطية Xcode) وتوليد تقارير HTML جميلة، أو XML (Cobertura)، أو حتى JSON. إنها مفيدة بشكل خاص إذا كنت تستخدم CI وتريد حفظ تاريخ التغطية.



التثبيت عبر CocoaPods أو Homebrew:

# Homebrewbrew install slather

# CocoaPods (في Podfile)pod 'slather'


مثال على تكوين .slather.yml:

# .slather.ymlcoverage_service: cobertura_xmlxcodeproj: MyApp.xcodeprojscheme: MyAppsource_directory: MyApp/Sourcesoutput_directory: reportsignore:  - MyAppTests/*  - Pods/*


التشغيل:

slather coverage -s --scheme MyApp MyApp.xcodeproj


المزايا: مرونة، دعم تنسيقات مختلفة، تكامل مع CI.

العيوب:

المدونات

توصيات الكتب