الاختبار والتحقق وضمان الجودة

استخلاص حالات الاختبار من المتطلبات

18 دقيقة الدرس 3 من 10

استخلاص حالات الاختبار من المتطلبات

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

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

ما الذي يجعل المتطلب قابلاً للاختبار؟

قبل استخلاص حالات الاختبار، يجب التأكد من أن المتطلب قابل للاختبار. يتسم المتطلب القابل للاختبار بأربع خصائص: محدد (سلوك واحد في كل جملة)، قابل للقياس (يحدد النتائج المتوقعة بمصطلحات يمكن رصدها)، قابل للتحقيق (ضمن حدود النظام)، ولا غموض فيه (لا مجال لتفسيرين). الاختصار التذكيري هو SMAA.

انظر إلى نسختين من المتطلب ذاته لنظام حجز عيادة:

  • غير قابل للاختبار: "يجب أن يسمح النظام للمستخدمين بحجز المواعيد بسهولة."
  • قابل للاختبار: "يجب أن يسمح النظام للمريض المسجّل بحجز موعد متاح في خلال 3 نقرات من الصفحة الرئيسية، ويؤكد الحجز عبر رسالة على الشاشة وبريد إلكتروني في غضون 30 ثانية."

النسخة الثانية تمنحك شروط اختبار صريحة: حالة التسجيل، وعدد النقرات، وتوفر الموعد، وقناة التأكيد، ووقت الاستجابة. كل شرط يصبح حالة اختبار محتملة.

من المتطلب إلى شروط الاختبار

الخطوة الأولى هي تحليل المتطلب: قراءته وسرد كل شرط مستقل يتضمنه. كل شرط يمثل حالة يجب أن يتعامل معها النظام بشكل صحيح.

خذ هذا المتطلب الوظيفي من نظام إدارة الطلبات عبر الإنترنت:

REQ-027: عند إرسال العميل لطلب، يجب على النظام: (أ) التحقق من أن حساب العميل نشط، (ب) التحقق من توفر مخزون كافٍ لكل صنف مطلوب، (ج) احتساب الإجمالي شاملاً الضريبة المنطبقة، (د) تخفيض المخزون لكل صنف منجَز، (هـ) إرسال بريد تأكيد الطلب في غضون 60 ثانية، (و) رفض الطلب برسالة خطأ وصفية إذا كان الحساب موقوفاً أو كان أي صنف غير متوفر في المخزون.

يُفضي تحليل REQ-027 إلى الشروط القابلة للاختبار التالية:

  1. حساب نشط + جميع الأصناف متوفرة ← قبول الطلب، تخفيض المخزون، إرسال البريد.
  2. حساب موقوف ← رفض الطلب وعرض رسالة خطأ.
  3. حساب نشط وصنف أو أكثر غير متوفر ← رفض الطلب مع تحديد الأصناف الناقصة.
  4. صحة احتساب الضريبة لكل فئة منتج.
  5. وصول بريد التأكيد في غضون 60 ثانية من الإرسال.
  6. تخفيض رصيد المخزون بمقدار الكمية المطلوبة بالضبط.

كل شرط من هذه الشروط يرتبط بحالة اختبار واحدة على الأقل. هذا الربط المباشر هو جوهر الاختبار القائم على المتطلبات.

بنية حالة الاختبار الرسمية

حالة الاختبار ليست مجرد إجراء — بل هي مواصفة كاملة لسيناريو اختبار واحد. تضم حالة الاختبار المُصاغة جيداً ستة حقول:

  • معرّف حالة الاختبار — معرف فريد مثل TC-027-01.
  • مرجع المتطلب — المتطلب (المتطلبات) التي تتحقق منها، مثل REQ-027a, REQ-027d.
  • الشروط المسبقة — الحالة التي يجب أن يكون عليها النظام قبل تنفيذ الاختبار.
  • خطوات الاختبار — الإجراءات المرقّمة التي ينفذها المختبِر.
  • بيانات الاختبار — المدخلات المحددة كمعرّفات الحسابات والكميات وأكواد المنتجات.
  • النتيجة المتوقعة — المخرج الملاحَظ الذي يُعتبر نجاحاً للاختبار.
مسؤولية المحلل: لا يُشترط أن تكتب كل حالة اختبار بنفسك — فهذا في الغالب دور مهندس الاختبار. مسؤوليتك هي ضمان أن كل متطلب يُنتج شرطاً قابلاً للاختبار وأن النتائج المتوقعة في حالات الاختبار مستمدة مباشرة من نص مواصفات المتطلبات. المتطلبات الغامضة تُنتج نتائج متوقعة غير قابلة للاختبار.
From Requirement to Test Case: Decomposition Flow Functional Requirement REQ-027: Order Submission Decompose Test Conditions C1: Active acct + stock OK C2: Suspended account C3: Item out of stock C4: Tax calculation C5: Email within 60 sec C6: Stock decrement Specify Formal Test Cases TC-027-01 (C1) Pre: active account, item qty=5 in stock Action: submit order for qty=2 Expected: order confirmed, stock=3, email sent TC-027-02 (C2) Pre: account status = suspended Expected: order rejected, error message shown TC-027-03 (C3) Pre: active acct, item X stock=0 Expected: rejected, names item X as OOS ... TC-027-04 through TC-027-06 ... Coverage Check All 6 conditions covered? 6/6 = 100% req coverage
تدفق تحليل المتطلبات: متطلب وظيفي واحد يُنتج شروطاً قابلة للاختبار، يتحول كل منها إلى حالة اختبار رسمية. التغطية تُقاس بنسبة الشروط المُختبَرة.

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

تغطية المتطلبات هي نسبة المتطلبات الوظيفية الموثقة التي تمتلك حالة اختبار ناجحة واحدة على الأقل. وهي مقياسك الرئيسي لاكتمال الاختبار على مستوى التحليل، وتُحسب كالتالي:

تغطية المتطلبات (%) = (عدد المتطلبات التي تمتلك حالة اختبار ناجحة واحدة على الأقل) ---------------------------------------------------------------- × 100 (إجمالي عدد المتطلبات الوظيفية في مواصفات المتطلبات)

الهدف بنسبة 100% يعني اختبار كل سطر في مواصفاتك. في الواقع، تتطلب الأنظمة الحساسة للسلامة 100%؛ بينما تستهدف البرمجيات التجارية 90-95% للمتطلبات الوظيفية مع تأجيل حالات الحافة منخفضة الخطورة للإصدارات اللاحقة.

التغطية لا تساوي الجودة. يمكن تحقيق تغطية 100% بحالات اختبار سطحية تختبر المسار الإيجابي فقط. العمق يأتي من تقنيات مثل تقسيم التكافؤ وتحليل القيم الحدية (تُغطى في الدرس القادم). التغطية تخبرك ماذا اختبرت؛ تقنيات تصميم الاختبار تحدد مدى جودة ما اختبرته.

ربط المتطلبات بحالات الاختبار: مصفوفة عملية

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

Requirements-to-Test Case Coverage Matrix (Logistics System) Req-to-Test Coverage Matrix — Logistics Order System (excerpt) Requirement TC-001 TC-002 TC-003 TC-004 TC-005 Coverage REQ-010: Driver login 2 cases ✔ REQ-011: Assign delivery 2 cases ✔ REQ-012: Status update 1 case ✔ REQ-013: Route optimise GAP — 0 cases! Coverage Summary 3 of 4 requirements covered = 75% (REQ-013 is a gap) Coverage: 75% ✔ = Test case covers this requirement ✕ = Not covered by this test case Red row = coverage gap (no test case at all for this requirement)
مصفوفة تغطية المتطلبات بحالات الاختبار لنظام لوجستي — REQ-013 لا تغطيه أي حالة اختبار، وهو ثغرة يجب معالجتها قبل الإصدار.

التعامل مع ثغرات التغطية

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

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

حالات الاختبار الإيجابية والسلبية وحالات الحافة

لكل شرط اختبار، يجب تصميم ثلاث فئات على الأقل من حالات الاختبار:

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

بالنسبة لـ REQ-027 (إرسال الطلب)، تغطي المجموعة الكاملة العميل يضع طلباً صالحاً (إيجابي)، ويضع طلباً بكمية صفر لصنف ما (سلبي)، ويضع طلبين متزامنين يستنفدان معاً آخر وحدة في المخزون (حافة). كل من هذه الحالات يعود إلى شرط فرعي من المتطلب الأصلي.

قائمة تحقق المحلل قبل تسليم المتطلبات

قبل أن تغادر مواصفات المتطلبات مرحلة التحليل، مرّر كل متطلب وظيفي عبر هذه القائمة:

  1. هل يمكنني صياغة النتيجة المتوقعة بمصطلحات قابلة للرصد والقياس؟ إن لم يكن كذلك، أعد صياغة المتطلب.
  2. هل حددت كل شرط مستقل (بنود فرعية، قواعد عمل، مسارات خطأ) يتضمنه هذا المتطلب؟
  3. هل يمكن اختبار كل شرط بشكل مستقل بشرط مسبق محدد ومعيار نجاح/فشل واضح؟
  4. هل يوجد شرط اختبار واحد على الأقل للمسار الإيجابي، وآخر لمسار الخطأ، وثالث للقيمة الحدية؟

تلبية هذه القائمة قبل التسليم تقلل وقت تصميم الاختبار بشكل ملحوظ وتقضي فعلياً على التردد المحبط الذي يعود فيه المختبرون للمحللين يسألون عما يعنيه المتطلب. المتطلبات الواضحة هي في نهاية المطاف متطلبات مُختبَرة مسبقاً.