المكاسب:
- القدرة على قراءة المقاييس مثل تغطية الخط والفرع والحالة كخريطة، وليس ثقة، وفهم أن التغطية العالية يمكن أن تعطي ثقة زائفة
- القدرة على وضع نطاق المتطلبات بجوار نطاق الكود وجعل فجوات التتبع مرئية باستخدام الذكاء الاصطناعي
- القدرة على تسجيل الميزات باستخدام صيغة المخاطرة = الاحتمالية × التأثير، وتوجيه جهد الاختبار المحدود لأعلى المخاطر، وتوثيق خارج النطاق المتعمد
لا يمكنك اختبار كل البرامج إلى الأبد؛ الوقت والموارد محدودة. لذا فإن السؤال الحقيقي هو: أين يجب بذل جهد الاختبار المحدود؟ مفهومان يجيبان على هذا السؤال. تمثل تغطية الاختبار - وهو مقياس يقيس مقدار التعليمات البرمجية أو المتطلبات التي تمسها الاختبارات - ما يتم اختباره. الاختبار على أساس المخاطر - نهج تحديد أولوية الاختبار وفقا لاحتمال تدهور المنطقة والضرر الذي ستحدثه عندما تتدهور - يوجه الجهد نحو المخاطر الأكبر. يعد الذكاء الاصطناعي (AI) شريكًا قويًا في التحليل في كليهما: فهو يجعل فجوات التغطية مرئية، ويقترح مجالات الخطر. ولكن يبقى التحذير المركزي: عدد النطاقات التي يراها الذكاء الاصطناعي يمكن أن يكون مضللاً؛ ويمكن تحقيق تغطية صفية بنسبة 100% من خلال اختبارات لا تتحقق من أي شيء. مهمتك هي قراءة النطاق كخريطة، وليس كثقة.
قراءة مقاييس التغطية بشكل صحيح
هناك عدة أنواع من النطاق، وليست جميعها ذات معنى متساوٍ:
- تغطية السطر: عدد أسطر التعليمات البرمجية التي تم تنفيذها مرة واحدة على الأقل. المعيار الأكثر شيوعًا ولكنه الأضعف؛ فمجرد عمل الخط ليس دليلاً على أنه يتصرف بشكل صحيح.
- تغطية الفرع: ما إذا كان قد تم اختبار كل فرع (صحيح أو خطأ). أكثر معنى من الخط.
- تغطية الحالة: اختبار كل شرط فرعي في الظروف المعقدة على حدة.
- تغطية المسار: مجموعات من المسارات المنطقية داخل الكود. إنه الأكثر شمولاً ولكن يصعب الوصول إليه بشكل كامل في الممارسة العملية.
تنبيه: نسبة التغطية ليست "نقاط جودة". تخبرك تغطية الصفوف بنسبة 100% أن الصفوف تعمل بشكل صحيح؛ لا يعني ذلك أنها تنتج النتيجة الصحيحة (التمرير الزائف في الوحدة 1). استخدم النطاق كإجابة على السؤال "أين لم أنظر قط"، وليس كتأكيد على أن "كل شيء قد تم اختباره".
نطاق النقاط العمياء
تقيس مقاييس التغطية فقط مقدار التعليمات البرمجية التي تم تنفيذها؛ لا يمكن رؤية: (1) المتطلبات غير المختبرة (الكود موجود ولكن قاعدة العمل خاطئة)، (2) الكود المفقود (لا يوجد مجال لعنصر تحكم لم تتم كتابته مطلقًا)، (3) مجموعات البيانات/الحالة، (4) سهولة الاستخدام والأداء والأمان. لذلك، يجب وضع تغطية المتطلبات (يجب استيفاء كل معيار قبول بواسطة اختبار واحد على الأقل) بجوار تغطية الكود. يعد الذكاء الاصطناعي مفيدًا جدًا في إنتاج خرائط اختبار المتطلبات (مصفوفة التتبع).
الاختبار على أساس المخاطر: أين نبذل الجهد؟
الخطر = الاحتمال (احتمال الكسر) × التأثير (الضرر في حالة الكسر). باستخدام الذكاء الاصطناعي، يمكنك تسجيل قائمة الميزات على هذين المحورين وإنشاء خريطة حرارية. احتمالية عالية × النطاقات العالية (الدفع، المصادقة، سلامة البيانات) تستحق الاختبار الأكثر كثافة؛ المناطق المنخفضة × المنخفضة (شاشة تفضيلية نادرًا ما تستخدم) اختبار الضوء كافٍ.
المنطقة
الاحتمالية
تأثير
خطر
كثافة الاختبار
تدفق الدفع
متوسطة
عالية جدا
عالية
عميق + أتمتة
المصادقة
متوسطة
عالية جدا
عالية
عميق + الأمن
بحث المنتج
عالية
متوسطة
متوسطة عالية
الأتمتة + الاكتشاف
صورة الملف الشخصي
منخفض
منخفض
منخفض
التحكم في الضوء
صفحة المساعدة
منخفض
منخفض جدًا
منخفض جدًا
مراجعة
فخ مطاردة النطاق
إن جعل نسبة التغطية هدفًا (على سبيل المثال، قاعدة "يجب على الفريق اجتياز 90% من التغطية") له تأثير جانبي خطير: يركز المطورون والمختبرون على زيادة النسبة بدلاً من معالجة المخاطر الفعلية. غالبًا ما تكون النتيجة نطاقًا متضخمًا بدون تأكيدات أو اختبارات تافهة - يبدو الرقم جميلًا ولكن لا توجد حماية. وهذه هي ظاهرة فساد المعيار عندما يصبح هو نفسه الهدف: «إذا صار المقياس هدفًا، لم يعد مقياسًا جيدًا». استخدم النطاق كأداة تشخيصية، وليس كبطاقة تقرير أداء.
النهج الأكثر صحة هو قراءة النطاق بشكل اتجاهي: "لماذا تتوقف تغطية الفروع عند 40% في وحدة الدفع المهمة؟" والسؤال هو "هل التغطية الشاملة 90%؟" إنه أكثر قيمة بكثير من السؤال. اطلب من الذكاء الاصطناعي تقسيم تقرير النطاق حسب الوحدة ومستوى المخاطر؛ تسليط الضوء على المناطق عالية الخطورة ذات التغطية المنخفضة. وبذلك يصبح النطاق بمثابة بوصلة توجه العمل وليس نسبة عمياء.
تحذير: شعار "تغطية 100%" هو فخ. يعد اختبار بعض التعليمات البرمجية (الوصولات البسيطة والأجزاء التي يتم إنشاؤها تلقائيًا) ذا قيمة منخفضة؛ الجهد المبذول هناك مسروق من قواعد العمل عالية المخاطر. الهدف هو اختبار كل سلوك ومخاطر مهمة، وليس كل سطر.
موجه ضعيف / موجه قوي
ضعيف: "قم بزيادة تغطية الاختبار الخاصة بي."
قوي: "بالنظر إلى قائمة معايير القبول وحالات الاختبار الحالية هذه. (1) جدولي لم يتم استيفاء معايير القبول من خلال أي اختبارات (فجوة تغطية المتطلبات). (2) سجل كل ميزة من 1 إلى 5 على محاور الاحتمال والتأثير؛ الترتيب حسب المخاطر = الاحتمال × التأثير. (3) لوقتي المحدود، اقترح أي 5 فجوات يجب إغلاقها أولاً، بدءًا من أعلى المخاطر. لا تأخذ تغطية سطر التعليمات البرمجية كمعيار وحيد؛ أعط الأولوية لمخاطر الأعمال. المعايير: [...] الاختبارات: [...]"
موجه قوي؛ يجمع بين النطاق ومخاطر الأعمال ويعطي الأولوية للعمالة المحدودة.
أربعة قوالب قابلة للنسخ
1) فجوة نطاق المتطلبات:
بالنظر إلى معايير القبول التالية وحالات الاختبار هذه. قم بإعداد جدول التتبع: كل معيار -> اختبار (اختبارات) يستوفيه. تسمى المعايير التي لا تحتوي على أي اختبارات "فجوة التغطية" والاختبارات التي لا ترتبط بأي معايير تسمى "ضرورية؟" العلامة: المعايير: [...] / الاختبارات: [...]
2) تسجيل المخاطر:
قم بتسجيل قائمة الميزات/الوحدات من 1 إلى 5 على محاور الاحتمالية (احتمالية الكسر) والتأثير (الضرر في حالة الكسر). المخاطرة = الاحتمال × التأثير. قم بالفرز في جدول وحدد نوع الاختبار الموصى به (وحدة/واجهة برمجة التطبيقات/واجهة المستخدم/الاستطلاع/الأمان) لكل منطقة شديدة الخطورة. القائمة: [...]
3) تفسير النطاق:
تم تقديم تقرير التغطية التالي (السطر٪، الفرع٪). أخبرني بهذا: - ما الذي لا تثبته هذه الأرقام؟ - ما هي المناطق التي يمكن أن تكون معرضة للخطر على الرغم من تغطية الصفوف العالية؟ - ما الاختبار الإضافي الذي توصي به للفجوات التي لا تراها التغطية (المتطلبات، مجموعة البيانات، الأمان)؟ التقرير: [لصق]
4) خطة زمنية محدودة:
[X ساعة] متبقية حتى البث. يتم إعطاء تصنيف المخاطر وفجوات التغطية التالية. خلال هذه الفترة، يتم إعداد خطة الاختبار التي من شأنها تقليل الحد الأقصى من المخاطر حسب الأولوية. اذكر بوضوح ما لا يجب اختباره بوعي والمخاطر المقبولة للقيام بذلك. البيانات: [...]
ثلاث حالات صغيرة
الحالة 1 - تغطية 100%، ثقة معدومة. تفاخر فريق واحد بتغطية الخط بنسبة 94٪. أظهر تحليل "تفسير النطاق" أن معظم الاختبارات كانت أقل تأكيدًا، مما يعني أنها أجرت سطورًا ولكنها لم تتحقق من أي شيء. وكانت التغطية الوقائية الفعلية أقل بكثير. لم يركز الفريق على الأرقام، بل على اختبار الطفرات (الوحدة 10)؛ تضاعف معدل التقاط الأخطاء الفعلي.
الحالة 2 - الأولوية المصححة لخريطة المخاطر. كان أحد الفرق ينفق 40% من جهود الاختبار على شاشة تقارير نادرًا ما تُستخدم، متخطيًا تدفق الدفع لأنه "يعمل فقط". أظهر تسجيل مخاطر الذكاء الاصطناعي هذا الخلل. تم إعادة توزيع العمل. وبعد أسبوعين، تم العثور على خطأ كبير التأثير في تدفق الدفع وتم إغلاقه قبل البث المباشر.
الحالة 3 – الوعي خارج النطاق. بعد 4 ساعات من الإصدار، قرر الفريق ما يجب اختباره وما يجب تخطيه بوعي باستخدام قالب "الجدول المحدود". تم اختبار تيارين عاليي الخطورة في العمق؛ تم توثيق شاشة التفضيلات منخفضة المخاطر على أنها "خطر مقبول" وتم تخطيها. كان القرار شفافاً ومعللاً؛ النسخة خرجت بأمان.
الأخطاء الشائعة
- نسبة التغطية الخاطئة للجودة. قراءة تغطية الصف العالي كضمان "تم اختباره".
- مجرد النظر إلى تغطية التعليمات البرمجية. تخطي تغطية المتطلبات (اختبار كل معايير القبول).
- الاختبار بالتساوي دون مراعاة المخاطر. تخصيص العمالة للمناطق منخفضة المخاطر وإهمال التدفقات الحرجة.
- الاختباء خارج النطاق. عدم توثيق ما لم يتم اختباره عندما لا يكون هناك وقت كافي؛ مفاجآت ما بعد الإصدار.
- قبول درجة مخاطر الذكاء الاصطناعي دون سؤال. لا يعرف الذكاء الاصطناعي سياق المنتج بشكل كامل؛ ضبط الدرجات بعين خبيرة.
في ملخص
إن تغطية الاختبار والاختبار القائم على المخاطر هما أداتان لتوجيه الجهود المحدودة إلى المكان الصحيح. تُظهر مقاييس التغطية (الخط، الفرع، الحالة، المسار) ما تم لمسه ولكنها لا تثبت أنه تصرف بشكل صحيح؛ النطاق هو خريطة، والثقة ليست كذلك. ضع تغطية المتطلبات بجوار تغطية الكود. قم بتسجيل الميزات باستخدام صيغة المخاطرة = الاحتمالية × التأثير والجهد المباشر لأكثر المخاطرة. الذكاء الاصطناعي يجعل الفجوات مرئية، ويسجل المخاطر، ويخطط لوقت محدود؛ لكن الأولوية النهائية وقرار "الانسحاب الواعي" يقع على عاتق الخبير الذي يعرف سياق العمل.
مهمة التطبيق
اختر وحدة من مشروعك الخاص. قم بتشغيل قالب "فجوة نطاق المتطلبات" باستخدام الذكاء الاصطناعي واكتشف معايير القبول التي لم يتم اختبارها. ثم قم بترتيب السمات الفرعية للوحدة على محاور الاحتمال × التأثير باستخدام "تسجيل المخاطر". قم بتوزيع 3 ساعات (افتراضية) من وقت الاختبار لديك مع "الجدول الزمني المحدود"؛ اكتب ما لن تختبره عن وعي والمخاطر المقبولة. أضف اختبارًا ملموسًا من شأنه سد فجوة التغطية الأكثر خطورة التي تجدها.
قائمة مرجعية
- [ ] قرأت نسبة التغطية كخريطة، وليس الجودة.
- [ ] إلى جانب تغطية الكود، قمت أيضًا بإزالة تغطية المتطلبات.
- [ ] قمت بتقييم الميزات حسب الاحتمالية × التأثير وصنفتها حسب المخاطرة.
- [ ] لقد قمت بإعادة توجيه جهود الاختبار إلى أعلى المخاطر.
- [ ] لقد قمت بتوثيق مناطق لم يتم اختبارها بشكل واعي ولم يتم الاعتراف بالمخاطر.
- [ ] لقد قمت بمراجعة درجات مخاطر الذكاء الاصطناعي بناءً على سياق المنتج الخاص بي.