التحقق مقابل التحقق من الصلاحية
التحقق (Verification) والتحقق من الصلاحية (Validation) سؤالان مختلفان عن المنتج وعن مُخرَجات العمل التي تؤدي إليه. يسأل التحقق: هل يطابق مُخرَج العمل مواصفاته، أي المتطلبات أو معايير القبول أو التصميم أو المعايير المتفق عليها؟ ويسأل التحقق من الصلاحية: هل يلبّي المنتج احتياجات مستخدميه وسائر أصحاب المصلحة في استخدامه المقصود وبيئته الحقيقية؟ والصياغة المختصرة الشهيرة، المنسوبة عادةً إلى باري بوهم (Barry Boehm): التحقق هو «هل نبني المنتج بطريقة صحيحة؟»، والتحقق من الصلاحية هو «هل نبني المنتج الصحيح؟».
مثال: يقول متطلب: «في اليوم 1 من كل شهر، يرسل النظام إلى مدير المتجر بالبريد الإلكتروني تقرير مبيعات الشهر السابق بصيغة PDF». تؤكد الاختبارات أن البريد يصل في اليوم الأول وأن الإجماليات تطابق قاعدة البيانات، فينجح التحقق. لكن المدير يطلب البضائع كل يوم أحد بناءً على مبيعات الأسبوع السابق، فيصل التقرير الشهري بعد فوات أوان الاستفادة منه. لقد بُني المنتج بطريقة صحيحة، لكنه ليس المنتج الصحيح.
لماذا يهم
كل سؤال يحمي من خطر مختلف. فمن دون التحقق ينحرف المنتج عمّا اتُّفق عليه: قاعدة بُرمجت بـ«أكبر من» بدلاً من «أكبر من أو يساوي»، أو رسالة خطأ مفقودة. ومن دون التحقق من الصلاحية قد يسلّم الفريق ما كُتب بالضبط ومع ذلك يضيع الإصدار سدى، لأن المتطلب وصف الشيء الخطأ.
وبالنسبة إلى المختبِر، يكشف هذا التمييز فخاً. فحالات الاختبار تُشتق عادةً من المتطلبات، لذا ينتقل العيب الموجود في المتطلب إلى الاختبارات، وتنجح تلك الاختبارات مع ذلك. وتقرير الاختبار الذي نجحت كل حالاته يُظهر المطابقة للمواصفات، لا فائدة المنتج. ومعرفة السؤال الذي يجيب عنه كل نشاط تتيح لك أن تذكر بدقة ما أظهره اختبارك وما لم يُظهره.
سؤالان ومرجعان للمقارنة
يصف منهج ISTQB للمستوى التأسيسي (CTFL v4.0) الاختبار بأنه يشمل الأمرين: التحقق، أي فحص ما إذا كان النظام يستوفي المتطلبات المحددة، والتحقق من الصلاحية، أي فحص ما إذا كان يلبّي احتياجات المستخدمين وسائر أصحاب المصلحة في بيئة تشغيله. والفرق ليس في ما تفعله، بل في ما تقارن المنتج به.
- التحقق يقارن مُخرَج العمل بمواصفاته: الكود بالتصميم، والشاشة بمعايير قبولها، واستجابة الواجهة البرمجية بعقد الواجهة (API contract)، والمتطلب بصفات المتطلب الجيد (واضح ومتسق وقابل للاختبار).
- التحقق من الصلاحية يقارن المنتج باستخدامه المقصود: أهداف المستخدمين وطريقة عملهم وأجهزتهم وبياناتهم، والنتيجة التي يُفترض أن تحققها الميزة للعمل. وكثير من ذلك لا يُكتب أبداً، فعليك أن تسأل وتلاحظ.
- تستخدم بعض الفرق كلمة «validation» أيضاً لفحص المدخلات (نموذج يرفض بريداً إلكترونياً غير صالح) أو لفحص مخطط (schema) استجابة الواجهة البرمجية. هذه سلوكيات في البرنامج نفسه، واختبارها مقابل المواصفات تحقق.
لكلٍّ منهما صورة ساكنة وصورة ديناميكية
الاختبار الساكن (Static testing) يفحص مُخرَج العمل من دون تشغيل البرنامج: يراجعه أشخاص أو تحلله أدوات. والاختبار الديناميكي (Dynamic testing) يشغّل البرنامج. ويذكر منهج ISTQB أن الاختبار الساكن يمكن تطبيقه للتحقق وللتحقق من الصلاحية معاً. والاختبار الديناميكي يخدم الاثنين كذلك: فتشغيل اختبارات مشتقة من المتطلبات تحقق، أما اختبار القبول، الذي يصفه المنهج بأنه يركّز على التحقق من الصلاحية، فالأفضل أن يجريه المستخدمون المقصودون أنفسهم. لذا فالاختصار الشائع «التحقق مراجعات، والتحقق من الصلاحية تشغيل اختبارات» خاطئ.
- تحقق ساكن: مراجعة قصة مستخدم للتأكد من وضوح معاييرها وقابليتها للاختبار، ومقارنة عقد الواجهة البرمجية بالمتطلب، والتحليل الساكن للكود.
- تحقق ديناميكي: تنفيذ حالات اختبار مشتقة من معايير القبول.
- تحقق ساكن من الصلاحية: استعراض قصة أو رسومات للشاشات مع مستخدمي المنتج المستقبليين قبل كتابة أي كود.
- تحقق ديناميكي من الصلاحية: اختبار قبول المستخدم (UAT)، وتجربة تشغيلية أو إصدار تجريبي (beta) مع مستخدمين حقيقيين، وجلسات قابلية الاستخدام.
مثال تطبيقي: حجز موعد في عيادة
تريد عيادة أن يحجز المرضى مواعيدهم عبر موقعها. القصة: «بصفتي مريضاً، أريد حجز موعد عبر الإنترنت، كي لا أضطر إلى الاتصال بالاستقبال». معايير القبول: AC1، مواعيد مدتها 15 دقيقة من 08:00 إلى 16:00، من الأحد إلى الخميس؛ AC2، لا يحمل حساب المريض أكثر من موعد مستقبلي واحد؛ AC3، تُرسل رسالة SMS للتأكيد خلال دقيقة واحدة من الحجز. وإليك أربعة فحوص عليها بترتيب حدوثها: الفحصان الساكنان في جلسات تحسين قائمة العمل، والفحصان الديناميكيان بعد بناء الميزة.
- تحقق ساكن: في مراجعة القصة يسأل المختبِر: هل 16:00 آخر وقت لبدء موعد أم وقت الإغلاق؟ فيجيب مالك المنتج بأن آخر موعد يبدأ عند 15:45، ويُصحَّح AC1 قبل كتابة أي كود.
- تحقق ساكن من الصلاحية: يستعرض موظفو الاستقبال القصة ورسومات الشاشات، وينبّهون إلى أن أولياء الأمور يحجزون لأطفالهم من حساب واحد، فيمنع AC2 أحد الوالدين من الحجز لطفلين. فيصبح الحد موعداً مستقبلياً واحداً لكل مريض.
- تحقق ديناميكي: تحجز اختبارات المعايير المصحَّحة موعدَي 08:00 و15:45، وتتأكد من عدم عرض موعد عند 16:00، ومن رفض موعد مستقبلي ثانٍ للمريض نفسه مع قبول موعد لطفل ثانٍ من الحساب نفسه، وتقيس زمن وصول الرسالة. وكلها ناجحة.
- تحقق ديناميكي من الصلاحية: تُظهر تجربة تشغيلية لمدة أسبوع أن كثيراً من المرضى يختارون أول موعد متاح دون ذكر سبب الزيارة، مع أن تنظيف الأسنان يستغرق موعدين. استُوفي كل معيار، لكن المتطلب أغفل حاجة.
التحقق (Verification)
هل نبني المنتج بطريقة صحيحة؟
- يُقارَن بـ:
- المواصفات: المتطلبات ومعايير القبول والتصميم والعقود والمعايير المتفق عليها
- الصورة الساكنة: لا شيء يعمل:
- مراجعة القصة: هل 16:00 آخر وقت لبدء موعد أم وقت الإغلاق؟
- الصورة الديناميكية: البرنامج يعمل:
- اختبارات AC1 إلى AC3 بعد تصحيحها: حجز 08:00 و15:45، ورفض حجز ثانٍ للمريض نفسه، وقياس زمن الرسالة
- كيف يبدو الإغفال:
- المنتج يخالف قاعدة متفقاً عليها
التحقق من الصلاحية (Validation)
هل نبني المنتج الصحيح؟
- يُقارَن بـ:
- احتياجات المستخدمين وأصحاب المصلحة للاستخدام المقصود، في البيئة الحقيقية
- الصورة الساكنة: لا شيء يعمل:
- استعراض الرسومات مع الاستقبال: أولياء الأمور يحجزون لأطفالهم من حساب واحد
- الصورة الديناميكية: البرنامج يعمل:
- تجربة تشغيلية لأسبوع: المرضى يحجزون دون ذكر سبب الزيارة
- كيف يبدو الإغفال:
- كل القواعد مستوفاة، ومع ذلك لا يؤدي المستخدمون عملهم جيداً
جرّبها: قصة المستخدم ← سيناريوهات اختبار جرّبها: المتطلبات ← حالات اختبار
لماذا تحتاج إلى الاثنين
التحقق من دون التحقق من الصلاحية يُنتج برنامجاً مطابقاً لمواصفات خاطئة أو ناقصة: فلم يكن لأي اختبار مشتق من المعايير AC1 إلى AC3 أن يفشل بسبب مشكلة مدة الزيارة. ويعدّ منهج ISTQB هذا الفخ أحد مبادئ الاختبار السبعة باسم «مغالطة غياب العيوب» (Absence-of-defects fallacy): فاختبار كل المتطلبات المحددة وإصلاح كل عيب يُكتشف قد ينتجان مع ذلك نظاماً لا يلبّي احتياجات المستخدمين، لذا يلزم التحقق من الصلاحية إلى جانب التحقق.
والتحقق من الصلاحية من دون التحقق لا يقل خطراً. فالمرضى الذين يجربون المسار الرئيسي في تجربة تشغيلية نادراً ما يلاحظون أن شخصين يستطيعان حجز الموعد نفسه في اللحظة نفسها، أو أن الحجز الملغى ما زال يشغل موعده؛ فمثل هذه الإخفاقات تحتاج إلى بيانات اختبار وتوقيتات مقصودة. كما يجب استيفاء القواعد القانونية وقواعد الأمان وإمكانية الوصول سواء طلبها المستخدمون أم لا.
أخطاء شائعة
- اعتبار «نجحت كل الاختبارات» دليلاً على أن المنتج صحيح. فالاختبارات المشتقة من المتطلبات تتحقق من تلك المتطلبات، لا من أنها تصف ما يحتاجه المستخدمون.
- مساواة التحقق بالمراجعات، والتحقق من الصلاحية بتشغيل الاختبارات. فلكلٍّ منهما صورة ساكنة وصورة ديناميكية.
- ترك التحقق من الصلاحية لمرحلة اختبار قبول المستخدم في النهاية، مع أن أرخص تحقق من الصلاحية يحدث قبل البرمجة، في مراجعة القصة مع من سيستخدمونها.
- الخلط بين التحقق من المدخلات (input validation) أو من المخطط (schema validation)، وهي فحوص يجريها البرنامج، وبين التحقق من الصلاحية بالمعنى الذي يشرحه هذا الدرس.
- الاختبار بصمت مقابل تصوّرك الخاص لما يحتاجه المستخدمون. إذا بدا لك أن متطلباً لا يناسب المستخدمين فاعرضه على مالك المنتج بدلاً من تغيير النتيجة المتوقعة بنفسك.
من منظور ضمان الجودة
في الفريق الفعلي تطرح نوعَي الأسئلة منذ أول اجتماع لتحسين قائمة العمل (refinement). أسئلة التحقق تخص القصة نفسها: هل كل معيار واضح ومتسق وقابل للاختبار؟ وأسئلة التحقق من الصلاحية تخص الغرض منها: من يستخدم هذا، وفي أي موقف، وعلى أي جهاز، وما المشكلة التي يحلها؟ والإجابات مسؤولية مالك المنتج أو محلل الأعمال، وكثيراً ما يكون موظفو الدعم أعرف الناس بطريقة العمل الحقيقية.
افصل بين نوعَي النتائج. الاختبار الذي يفشل مقابل معيار قبول يكشف عيباً يُربط بذلك المعيار. أما الشك في أن المعيار يناسب الاستخدام الحقيقي فهو سؤال أو طلب تغيير يُرفع إلى مالك المنتج مع دليلك. وفي تقارير الاختبار اذكر ما غطّاه كل نوع من الفحوص: «تم التحقق من معايير القبول الـ14 كلها؛ واقتصر التحقق من الصلاحية حتى الآن على عرض داخلي».
تمرين عملي
صنّف الفحوص على ميزة طلب الإجازة
أدناه متطلب من تطبيق للموارد البشرية، والأنشطة الستة التي نفّذها الفريق. صنّف كلاً منها: تحقق أم تحقق من الصلاحية، وساكن أم ديناميكي. ثم حدّد أين تذهب كل نتيجة: عيب مقابل المواصفات، أم سؤال أو طلب تغيير لمالك المنتج.
وأخيراً، اكتب سؤالاً واحداً للتحقق من الصلاحية يتركه المتطلب مفتوحاً.
المتطلب LV-4
يمكن للموظف طلب إجازة سنوية من 1 إلى 30 يوم عمل. يذهب الطلب إلى المدير المباشر،
الذي يجب أن يوافق عليه أو يرفضه خلال 3 أيام عمل؛ وإلا يُصعَّد إلى الموارد البشرية.
الأنشطة
1. مراجعة المتطلب: «أيام العمل» غير معرّفة (عطلة نهاية الأسبوع؟ العطل الرسمية؟).
2. مقارنة عقد الواجهة البرمجية لنقطة نهاية الإجازات بالمتطلب LV-4: العقد يسمح بـ 31 يوماً.
3. اختبار يرسل طلب إجازة من 31 يوماً ويتأكد من رفضه.
4. ثلاثة مديرين يطّلعون على رسومات الشاشات: يوافقون على الطلبات من هواتفهم
بين الاجتماعات، لكن الرسومات تُظهر صفحة موافقة لسطح المكتب فقط.
5. تجربة تشغيلية لأسبوعين في قسم واحد: المديرون في رحلات العمل تفوتهم مهلة
الأيام الثلاثة، فيُصعَّد كثير من الطلبات إلى الموارد البشرية.
6. جلسة قابلية استخدام على نسخة الاختبار: معظم الموظفين يبحثون عن رصيد إجازاتهم
المتبقي قبل اختيار التواريخ، والنموذج لا يعرضه.- سمِّ ما يُقارن به المنتج: المواصفات، أم احتياجات المستخدمين في الاستخدام الحقيقي.
- حدّد هل يعمل البرنامج أثناء النشاط (ديناميكي) أم لا (ساكن).
- حدّد هل تُظهر النتيجة منتجاً يخالف المواصفات، أم مواصفات قد تكون هي الخاطئة.
- اكتب سؤالاً إضافياً عن الاستخدام المقصود لا يجيب عنه LV-4.
إظهار الإجابة النموذجية
النشاط 1: تحقق، ساكن. يُفحص المتطلب مقابل صفات المتطلب الجيد. اطرح سؤالاً على مالك المنتج: كيف تُعرَّف أيام العمل، وهل تشمل عطلة نهاية الأسبوع والعطل الرسمية؟
النشاط 2: تحقق، ساكن. يُقارن مُخرَجا عمل أحدهما بالآخر، والعقد يناقض LV-4. سجّل عيباً الآن، قبل أن يُبنى عليه كود.
النشاط 3: تحقق، ديناميكي. إن قُبل طلب الـ31 يوماً فذلك عيب.
النشاط 4: تحقق من الصلاحية، ساكن. لا شيء يعمل؛ مستخدمون حقيقيون يحكمون على الرسومات مقابل طريقة عملهم. طلب تغيير لمالك المنتج: المديرون يحتاجون إلى الموافقة من الهاتف، ولا يذكر ذلك أي متطلب.
النشاط 5: تحقق من الصلاحية، ديناميكي. التصعيد يعمل كما هو محدد، فينجح التحقق، لكن القاعدة لا تناسب طريقة عمل المديرين: هذا طلب تغيير (كتعيين موافِق بديل)، وليس عيباً.
النشاط 6: تحقق من الصلاحية، ديناميكي. يعمل مستخدمون حقيقيون على النسخة المشغَّلة فتظهر حاجة لم يكتبها أحد. طلب تغيير: اعرض الرصيد المتبقي في النموذج.
أسئلة مفتوحة محتملة: هل يمكن إلغاء إجازة بعد الموافقة عليها؟ من يوافق حين يكون المدير نفسه في إجازة؟ هل يحتاج الموظفون إلى إجازة نصف يوم؟
أسئلة شائعة
هل اختبار قبول المستخدم هو نفسه التحقق من الصلاحية؟
لا، لكنه صورة شائعة من التحقق الديناميكي من الصلاحية: يتأكد المستخدمون أو ممثلوهم من أن المنتج يدعم عملهم قبل قبوله. وعادةً يعيد اختبار قبول المستخدم فحص معايير القبول أيضاً، وهذا تحقق. ويحدث التحقق من الصلاحية كذلك قبله، في مراجعة القصص والنماذج الأولية مع المستخدمين، وبعده، في التجارب التشغيلية والإصدارات التجريبية وملاحظات الاستخدام الحقيقي.
أيّهما يقوم به المختبِر؟
كلاهما. معظم تنفيذ الاختبارات اليومي مقابل المتطلبات ومعايير القبول تحقق. ويسهم المختبِر في التحقق من الصلاحية بالسؤال عن المستخدمين والاستخدام المقصود في المراجعات، وبالاختبار ببيانات وأجهزة ومسارات عمل واقعية، وبالتحضير لاختبار قبول المستخدم ودعمه. أما الحكم النهائي على تلبية الاحتياجات فيعود إلى المستخدمين ومالك المنتج.
هل يمكن أن ينجح المنتج في التحقق ويفشل في التحقق من الصلاحية، أو العكس؟
نعم. تقرير المبيعات الشهري طابق مواصفاته وخذل مستخدمه. والعكس منتج يعجب المستخدمين في العرض لكنه يحسب ضريبة القيمة المضافة خطأً: فهو يفشل في التحقق من متطلب لا يدقّق فيه المستخدمون، لكن على الشركة استيفاؤه.
المراجع
- ISTQB Certified Tester Foundation Level (CTFL) v4.0المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
- ISTQB Glossaryالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
تدرّب بأدوات متقن
حوّل قائمة متطلبات مرقّمة إلى حالات اختبار قابلة للتتبّع مع مصفوفة تربط المتطلبات بالاختبارات.
اشتق سيناريوهات اختبار شاملة (end-to-end) من قصة مستخدم، بما فيها التدفقات البديلة والاستثنائية.
ولّد معايير قبول بصيغة Given/When/Then وقائمة تحقق لتعريف الإنجاز (Definition of Done) من قصة مستخدم.
اعثر على المتطلبات المفقودة — معالجة الأخطاء والصلاحيات والظروف الحدّية والاحتياجات غير الوظيفية — باستخدام الذكاء الاصطناعي من متقن.
للتعمّق أكثر
- الاختبار الساكنالاختبار الساكن مقابل الاختبار الديناميكي
- كيف تراجع المتطلباتكيف تراجع المتطلبات وقصص المستخدم: قائمة تحقق من 8 معايير، والكلمات المنذرة، ومثال عملي بتعليقات مراجعة واقعية، ودور أدوات الذكاء الاصطناعي.
- ضمان جودة المنتج من البداية إلى النهايةمستويات الاختبار: الوحدة والتكامل والنظام والقبول
تقدّمك في هذا الموضوع
سجّل الدخول لتتابع تقدّمك
علّم الموضوعات مكتملة، وتابع من حيث توقفت، وافتح امتحانات التخصص.