اجتازت كل الاختبارات، ومع ذلك لم يتمكن المستخدم من لعب اللعبة

"واجهة برمجة التطبيقات (API) تُرجع 200 OK!"

عملتُ في أول وظيفة هندسية لي ورأيت مشكلة كبيرة. كان كبار المهندسين يعشقون لوحات البيانات (dashboards). وكانوا يحبون التغطية البرمجية العالية (high code coverage). كانوا يعتقدون أنه إذا كانت الاختبارات "خضراء" (ناجحة)، فإن المنتج يعمل بشكل صحيح.

كانوا مخطئين.

عمل الكود البرمجي وحصول الإنسان على ما يحتاجه أمران مختلفان. يمكن لزر ما أن يُرجع رمز نجاح بينما يترك المستخدم عالقاً في شاشة معطلة.

لقد ابتكرتُ طريقة للعثور على هذه المآزق في تجربة المستخدم (UX) دون تشغيل التطبيق. أطلقتُ عليها اسم "الجولة الاستعراضية الساكنة عبر وكيلين" (two-agent static walkthrough). وهي تعتمد على وكيلين من الذكاء الاصطناعي يتحدثان في حلقة مستمرة.

  • الوكيل (أ) هو المستخدم. هذا الوكيل لديه هدف محدد. إنه عنيد، ولا يستسلم بعد خطأ واحد، بل يستمر في تجربة مسارات مختلفة.
  • الوكيل (ب) هو التطبيق. لديه صلاحية القراءة لـ الكود المصدري (source code) الفعلي. يقوم بتتبع مسار الكود لكل إجراء يقوم به المستخدم. يبلغ بدقة عما يفعله الكود، ويذكر اسم الملف ورقم السطر. لا يمكنه تخيل أشياء غير موجودة في الكود.

اختبرتُ هذه الطريقة على مولد ألعاب ذكاء اصطناعي مصغر ومعطل. وإليك ما حدث:

الدور 1: فشل الزر. نقر المستخدم على "Generate". أرسل الكود الطلب إلى نقطة نهاية (endpoint) قديمة ومعطلة بدلاً من الجديدة. نجحت الاختبارات لأن الـ API القديم كان لا يزال يعمل.

الدور 2: الفراغ غير القابل للنقر. حاول المستخدم النقر على النتيجة. وضع الكود النص في صندوق عادي بدون معالج نقر (click handler). لم يحدث شيء.

الدور 3: البشرى الزائفة. حاول المستخدم إصلاح الخطأ. فشل الجزء الخلفي (backend) بسبب فقدان معرف (ID). أظهرت الشاشة رسالة نجاح خضراء رغم تعطل النظام.

الدور 4: الأمل المبتور. حاول المستخدم نسخ الكود يدوياً. قام الـ API بقطع النص في منتصفه. كان الكود معطلاً.

توقف المستخدم عن المحاولة.

معظم اختبارات الوحدة (unit tests) تتحقق فقط مما إذا كانت نقطة النهاية تُرجع 200. لكنها لا تتحقق مما إذا كان المستخدم يصل بالفعل إلى هدفه.

كيفية استخدام هذا:

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

هذه الطريقة ساكنة (static) وغير مكلفة. فهي تعمل حتى قبل أن تكتب ملف اختبار (test fixture) واحداً. إنها تحول عبارة "الكود يعمل" إلى "المستخدم ينجح".

Source: https://dev.to/terum/every-test-passed-the-user-still-couldnt-play-the-game-388o

Optional learning community: https://t.me/GyaanSetuAi