الذكاء الاصطناعي لتوليد الاختبارات: أين يفيد وأين يضلل

يكتب الذكاء الاصطناعي الاختبارات بسرعة، ولكنه يكتب أيضاً اختبارات تبدو حقيقية ولكنها تتحقق من أشياء خاطئة.

تقوم بلصق دالة (function) في برنامج ذكاء اصطناعي، وبعد ثلاثين ثانية، يصبح لديك اثنا عشر اختباراً ناجحاً. يرتفع معدل التغطية (coverage score) لديك، وتشعر بأنك منتج.

ثم تظهر ثغرة (bug) في بيئة الإنتاج. تنظر إلى تلك الاختبارات الاثني عشر وتدرك أن أياً منها لم يكن ليكتشفها.

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

الذكاء الاصطناعي مفيد، ولكن يجب أن تعرف كيف تستخدمه.

أين يتفوق الذكاء الاصطناعي:

  • توليد الأكواد النمطية (boilerplate) مثل كتل الإعداد (setup) والتفكيك (teardown).
  • كتابة المساعدات المتكررة للمصانع (factory helpers) وكائنات البيانات (data objects).
  • إنشاء تنويعات عديدة لنمط اختبار واحد جيد.
  • التعامل مع الحالات الحدية (edge cases) الواضحة مثل القيم الفارغة (null)، أو السلاسل النصية الفارغة، أو الصفر.

أين يفشل الذكاء الاصطناعي:

  • الاختبارات القائمة على التنفيذ: يكتب اختبارات تتبع هيكل الكود بدلاً من منطق العمل (business logic). إذا قمت بإعادة هيكلة الكود (refactor)، ستتعطل الاختبارات حتى لو كانت النتيجة لا تزال صحيحة.
  • الحالات الحدية السطحية: يكتشف الأخطاء الواضحة ولكنه يغفل عن الأخطاء المتعلقة بمجال العمل (domain-specific bugs). فهو لا يعرف تعقيدات المنطقة الزمنية الخاصة بك، أو قيود قاعدة البيانات، أو قواعد العمل المحددة لديك.
  • المحاكاة الهشة (Brittle mocks): يقوم بمحاكاة الخدمات الداخلية التي يجب أن تظل حقيقية. وهذا يجعل صيانة الاختبارات بطيئة وسهلة الكسر أثناء عمليات إعادة الهيكلة.

كيف تستخدم الذكاء الاصطناعي دون الوقوع في فخ "مسرح الاختبارات" (test theater):

  1. حدد العقد (contract) أولاً. اكتب جملة واحدة بلغة بسيطة حول ما يجب أن يثبته الاختبار. مثال: "يجب أن يعيد الرمز المنتهي الصلاحية المبلغ الأصلي."
  2. أعطِ هذه الجملة للذكاء الاصطناعي. اترك له كتابة الكود، ولكن يجب أن تكون أنت المسؤول عن الغرض (intent).
  3. قم بالمحاكاة (mock) عند الحدود فقط. استخدم نماذج حقيقية لوحداتك الداخلية، وقم بمحاكاة واجهات برمجة التطبيقات (APIs) الخارجية أو قواعد البيانات فقط.
  4. اكتب حالة حدية واحدة متعلقة بمجال العمل يدوياً. يتعامل الذكاء الاصطناعي مع الحالات "الواضحة"، أما أنت فعليك التعامل مع حالات "الثالثة فجراً" التي تسبب حوادث فعلية في بيئة الإنتاج.

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

المصدر: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm