تغطية الاختبار في اختبار البرمجيات: كيفية قياسها

⚡ ملخص ذكي

يقيس مدى تغطية الاختبار في اختبار البرمجيات مدى تغطية مجموعة من الاختبارات للتطبيق. ويكشف هذا عن المتطلبات غير المختبرة، ومسارات التعليمات البرمجية، والمخاطر، مما يُمكّن الفرق من إضافة حالات اختبار مُحددة وإصدار المنتج بثقة قابلة للقياس.

  • 🎯 فريف: تقارير تغطية الاختبار التي توضح المتطلبات والميزات ومسارات التعليمات البرمجية التي تغطيها الاختبارات الحالية بالفعل.
  • 🧭 الأنواع: البيان، والفرع، والشرط، والمسار، والمتطلبات، وتغطية المخاطر، كل منها يجيب على سؤال مختلف.
  • 🇧🇷 Code مقابل الاختبار: Code تقيس تغطية الاختبار خطوط المصدر المنفذة، بينما تقيس تغطية الاختبار خطة الاختبار الشاملة.
  • 🧮 الصيغة: قسّم عدد الأسطر المنفذة على إجمالي الأسطر، ثم اضرب الناتج في 100 للحصول على النسبة المئوية.
  • 🛠️ تقنية: يعمل تحليل القيم الحدية وجداول القرار واختبار انتقال الحالة على توسيع نطاق التغطية دون تضخيم المجموعة.
  • 📈 الاقوي: قم بترتيب الوحدات حسب المخاطر، وقم بأتمتة مجموعة اختبارات الانحدار، وقم بمراجعة اتجاه التغطية في كل دورة تطوير.
  • 🤖 مساعدة الذكاء الاصطناعي: تقوم أدوات الذكاء الاصطناعي بإنشاء اختبارات الوحدة المفقودة وتصنيف المسارات غير المختبرة حسب مخاطر الإنتاج.

ما هي تغطية الاختبار؟

يتم تعريف تغطية الاختبار على أنها مقياس في اختبار البرامج الذي يقيس مقدار الاختبار الذي يتم إجراؤه بواسطة مجموعة من الاختبارات. وسيتضمن جمع معلومات حول أجزاء البرنامج التي يتم تنفيذها عند تشغيل مجموعة الاختبار لتحديد فروع البيانات الشرطية التي تم أخذها.

بعبارات بسيطة، إنها تقنية للتأكد من أن اختباراتك تختبر الكود الخاص بك أو مقدار الكود الذي قمت بممارسته من خلال تشغيل الاختبار.

ما وظيفة تغطية الاختبار؟

في مشروع حي، تدعم تغطية الاختبار أربعة أنشطة عملية:

  • العثور على مساحة المتطلبات التي لم يتم تنفيذها بواسطة مجموعة من حالات الاختبار
  • يساعد على إنشاء حالات اختبار إضافية لزيادة التغطية
  • تحديد المقياس الكمي لتغطية الاختبار، وهو أسلوب غير مباشر لفحص الجودة
  • تحديد حالات الاختبار التي لا معنى لها والتي لا تزيد من التغطية

فوائد تغطية الاختبار في هندسة البرمجيات

تُترجم هذه الأنشطة إلى فوائد هندسية ملموسة.

  • يمكن أن يضمن جودة الاختبار
  • يمكن أن يساعد في تحديد أجزاء التعليمات البرمجية التي تم لمسها بالفعل للإصدار أو الإصلاح
  • يمكنه تحديد جميع نقاط القرار والمسارات في تطبيقك التي لم يتم اختبارها، مما يسمح لك بزيادة تغطية الاختبار.
  • منع خلل تسرب
  • يمكن إبقاء الوقت والنطاق والتكلفة تحت السيطرة
  • منع العيوب في مرحلة مبكرة من دورة حياة المشروع
  • يمكن العثور على الثغرات في المتطلبات وحالات الاختبار والعيوب على مستوى الوحدة ومستوى الكود بطريقة سهلة

أنواع تغطية الاختبار

لا يمكن قياس التغطية برقم واحد. الفرق tracيمكنك التعامل مع عدة أنواع في آن واحد، لأن كل نوع يجيب على سؤال مختلف حول نفس المجموعة. الجدول أدناه يصنف الأنواع التي تصادفها في أغلب الأحيان.

نوع التغطية ما يقيسه أفضل استخدام لـ
تغطية البيان (السطر) يتم تشغيل الأسطر القابلة للتنفيذ مرة واحدة على الأقل اختبارات الوحدة وعمليات تدقيق التعليمات البرمجية القديمة
تغطية الفرع أو القرار النتائج الصحيحة والخاطئة لكل قرار منطق الشروط والتحقق
تغطية الحالة كل تعبير فرعي منطقي صحيح وخاطئ التعبيرات المركبة AND أو OR
تغطية المسار مسارات فريدة يتم اتباعها عبر الوحدة التدفقات المالية والحيوية المتعلقة بالسلامة
تغطية الوظائف الدوال أو الطرق التي تستدعيها الاختبارات طبقات واجهة برمجة التطبيقات والخدمات
تغطية المتطلبات المتطلبات المرتبطة باختبار واحد على الأقل القبول والموافقةtracالموافقة النهائية
تغطية المخاطر المناطق عالية الخطورة المحددة تم تطبيقها دورات إصدار قصيرة

الأنواع الخمسة الأولى هي مقاييس على مستوى الكود وتنتمي إلى اختبار الصندوق الأبيضبينما تقع المتطلبات وتغطية المخاطر على مستوى خطة الاختبار.

ما هي الاختلافات الرئيسية بين Code التغطية وتغطية الاختبار؟

Code تغطية وتغطية الاختبار هي تقنيات قياس تسمح لك بتقييم جودة رمز التطبيق الخاص بك.

فيما يلي بعض الاختلافات المهمة بين أكشاك طرق التغطية هذه:

المعاملات Code تغطية تغطية الاختبار
تعريف Code مصطلح التغطية المستخدم عند تنفيذ كود التطبيق أثناء تشغيل التطبيق. تغطية الاختبار تعني خطة الاختبار الشاملة.
الهدف Code يمكن أن تساعد مقاييس التغطية الفريق في مراقبة اختباراتهم الآلية. يقدم اختبار التغطية تفاصيل حول المستوى الذي تم فيه اختبار الترميز المكتوب للتطبيق.
الأنواع الفرعية Code تغطية البيانات مقسمة إلى أنواع فرعية مثل تغطية العبارات، وتغطية الشروط، وتغطية الفروع. Togglتغطية e، تغطية FSM. لا يوجد نوع فرعي من طريقة تغطية الاختبار.

صيغة تغطية الاختبار

لحساب تغطية الاختبار، عليك اتباع الخطوات المذكورة أدناه:

الخطوة 1) العد التنازلي Yإجمالي عدد أسطر التعليمات البرمجية في البرنامج الذي تستخدمه تجريب

الخطوة 2) العد التنازلي Xعدد أسطر التعليمات البرمجية التي تنفذها جميع حالات الاختبار حاليًا

الآن، أنت بحاجة إلى إيجاد (X مقسومًا على Y) مضروبًا في 100. نتيجة هذا الحساب هي نسبة تغطية الاختبار الخاصة بك.

فمثلا:

إذا كان عدد أسطر التعليمات البرمجية في أحد مكونات النظام 500 وعدد الأسطر التي تم تنفيذها عبر جميع حالات الاختبار الحالية 50، فإن تغطية الاختبار الخاصة بك هي:

(50 / 500) * 100 = 10%   // executed lines divided by total lines

أمثلة على تغطية الاختبار

إن النسبة المئوية وحدها لا تمثل القصة كاملة، كما توضح الأمثلة أدناه.

مثال 1:

على سبيل المثال، إذا كنت ترغب في اختبار "سكين"، فعليك التركيز على التحقق من دقتها في تقطيع الخضراوات أو الفاكهة. مع ذلك، هناك جوانب أخرى يجب مراعاتها، مثل سهولة استخدامها.

مثال 2:

على سبيل المثال، إذا أردتَ فحص تطبيق المفكرة، فإنّ فحص ميزاته الأساسية أمرٌ لا بدّ منه. مع ذلك، عليكَ تغطية جوانب أخرى، مثل استجابة تطبيق المفكرة بشكلٍ متوقع عند استخدام تطبيقات أخرى، وفهم المستخدم لكيفية استخدامه، وعدم تعطلّه عند محاولة المستخدم القيام بشيء غير معتاد، وما إلى ذلك.

تقنيات تغطية الاختبار

يشير كلا المثالين إلى نفس النتيجة: يعتمد الوصول إلى هدف التغطية بشكل أقل على كتابة المزيد من الاختبارات، وأكثر على اختيار أسلوب تصميم الاختبار المناسب. تعمل الأساليب المذكورة أدناه على توسيع نطاق التغطية مع الحفاظ علىping الجناح صغير.

  • تحليل القيم الحدية: يختار المدخلات عند حواف كل نطاق صالح، حيث تتجمع العيوب بكثافة أكبر. انظر تحليل القيمة الحدودية للحالات التي تم العمل عليها.
  • تقسيم التكافؤ: يقوم بتجميع المدخلات التي يتعامل معها التطبيق بشكل متطابق، بحيث يمكن لحالة واحدة أن تمثل بأمان فئة كاملة من القيم.
  • اختبار جدول القرار: يغطي هذا القسم مجموعات من الشروط ونتائجها المتوقعة داخل شبكة واحدة.
  • اختبار الانتقال بين الحالات: يختبر كل حركة صحيحة وغير صحيحة بين حالات التطبيق.
  • اختبار المسار الأساسي: يستخلص الحد الأدنى من مجموعة المسارات المستقلة من مخطط تدفق التحكم.
  • الاختبار القائم على المخاطر: يصنف الميزات حسب تأثيرها على الأعمال ويغطي الميزات ذات المخاطر الأعلى أولاً.
  • اختبار استكشافي: يكشف عن ثغرات لا تكشف عنها الحالات المكتوبة مسبقًا وتقارير التغطية أبدًا.

كيف يمكن تحقيق تغطية الاختبار؟

بمجرد اختيار التقنيات، توفر أربعة مسارات محددة التغطية المطلوبة.

  • يمكن إجراء تغطية الاختبار من خلال ممارسة تقنيات المراجعة الثابتة مثل مراجعات النظراء وعمليات التفتيش والإرشادات التفصيلية
  • عن طريق تحويل العيوب المخصصة إلى حالات اختبار قابلة للتنفيذ
  • على مستوى الكود أو مستوى اختبار الوحدة، يمكن تحقيق تغطية الاختبار من خلال الاستفادة من تغطية الكود الآلي أو أدوات تغطية اختبار الوحدة
  • يمكن إجراء تغطية الاختبار الوظيفي بمساعدة أدوات إدارة الاختبار المناسبة

كيفية تحسين تغطية الاختبار

يُعدّ تحديد التغطية نقطة البداية، أما رفعها فهو إجراء روتيني قابل للتكرار. اتبع هذه الخطوات في بداية كل دورة إصدار.

  1. قم بتحديد الرقم الحالي كمعيار أساسي. قم بتشغيل تقرير التغطية وسجل تغطية البيان والفرع والمتطلبات بشكل منفصل، بحيث تظل الفجوات مرئية لكل وحدة بدلاً من أن تكون مخفية داخل متوسط ​​واحد على مستوى المشروع.
  2. ربط الاختبارات بالمتطلبات. بناء tracشبكة اختبار تربط كل متطلب بحالة اختبار واحدة على الأقل. أي صف فارغ يمثل ثغرة مؤكدة، وليس مجرد شك.
  3. رتب الوحدات حسب مستوى الخطورة. تستحق عمليات الدفع والمصادقة ومنطق ترحيل البيانات تغطية أعمق بكثير من مجرد شاشة مساعدة ثابتة، لذا أنفق الميزانية حيث يكون الفشل أكثر ضرراً.
  4. أضف الحالات السلبية والحالات الحدية. تصل المدخلات الفارغة والقيم ذات الأحجام الكبيرة ومهلات الشبكة وأخطاء الأذونات إلى فروع لا تصل إليها اختبارات المسار السليم أبدًا.
  5. قم بترتيب مستويات الاختبار. دمج وحدة التجارب, اختبار التكاملوإجراء عمليات فحص شاملة، لأن كل مستوى يغطي ما لا تستطيع المستويات الأخرى تغطيته من الناحية الهيكلية.
  6. أتمتة مجموعة اختبارات الانحدار. Promoالحالات المستقرة اختبار الأتمتة وتنفيذها في الداخل خط أنابيب CI/CD بعد كل عملية إيداع.
  7. إلغاء الحالات الزائدة. احذف الاختبارات المكررة التي تضيف دقائق تنفيذ دون إضافة سطر واحد غير مغطى.
  8. Revلاحظ الاتجاه في كل سباق. Tracتغطية k بجوار كثافة العيوب. يُعدّ ارتفاع التسرب في مواجهة التغطية المسطحة بمثابة إنذار مبكر بوجود نقطة عمياء.

⚠️ تحذير: لا تعتبر تحقيق نسبة 100% هدفاً. فمجموعة اختبارات بنسبة 85% مع تأكيدات قوية تحمي الإصدار بشكل أفضل بكثير من 95% من الفحوصات السطحية التي تنفذ التعليمات البرمجية دون التحقق من أي نتيجة.

عيوب تغطية الاختبار

تظل التغطية ذات قيمة، لكنها تحمل حدودًا تستحق التوضيح قبل الإبلاغ عن أي نسبة مئوية.

  • معظم المهام في تغطية الاختبار تكون يدوية، حيث لا توجد أدوات يمكن تشغيلها تلقائيًا. ولذلك، يتطلب الأمر الكثير من الجهد لتحليل المتطلبات وإنشاء حالات الاختبار.
  • تسمح لك تغطية الاختبار بإحصاء الميزات ومن ثم قياسها مقابل عدة اختبارات. ومع ذلك، هناك دائمًا مساحة لأخطاء الحكم.

الأسئلة الشائعة

تعتبر معظم الفرق نسبة 70 إلى 80 بالمئة هدفًا عمليًا، و90 بالمئة أو أكثر للوحدات البرمجية بالغة الأهمية للسلامة. نادرًا ما يُجدي السعي وراء نسبة 100 بالمئة نفعًا. لذا، ركّز على تعميق الاختبارات في منطق عالي المخاطر بدلًا من توزيعها بالتساوي على قاعدة البيانات.

لا. التغطية الكاملة تثبت تشغيل كل عنصر، لا التحقق من صحة كل قيمة أو متطلب أو مسار مستخدم. لا تزال المتطلبات المفقودة، والتأكيدات الضعيفة، والأخطاء غير الوظيفية مثل بطء أوقات الاستجابة، تفلت من مجموعة الاختبارات التي تُبلغ عن نسبة 100%.

يُدرج تقرير التغطية الأسطر والفروع والوظائف المغطاة وغير المغطاة لكل ملف، مع نسب مئوية مجمعة حسب الوحدة والمشروع. أدوات مثل JaCoCo قم أيضاً بتحديد الفروع المغطاة جزئياً، والتي عادة ما تكون أسرع الفجوات التي يتم إغلاقها.

يحلل الذكاء الاصطناعي شفرة المصدر وسجل التنفيذ وبيانات العيوب لتحديد المسارات عالية المخاطر غير المختبرة، ثم يقترح حلولاً لإغلاقها. كما يرتب الاختبارات التي يجب تشغيلها أولاً، مما يقلل من وقت تلقي الملاحظات في مسار الاختبار دون المساس بتغطية الاختبار.

نعم. أدوات مثل ديفبلو تُكتب اختبارات الوحدة للمنطق غير المُغطى تلقائيًا، وتحوّل النماذج التوليدية متطلبات اللغة البسيطة إلى حالات قابلة للتنفيذ. وتبقى المراجعة البشرية ضرورية، لأن التأكيدات المُولّدة قد تجتاز الاختبار دون التحقق من السلوك ذي الدلالة.

تلخيص هذه التدوينة بـ: