Evaluating and Mitigating the Misguidance Effect of Buggy Code in LLM-Generated Unit Tests
تحدد هذه الورقة وتُحدد كمياً "تأثير التضليل"، حيث تدفع الأكواد البرمجية التي تحتوي على أخطاء النماذج اللغوية الكبيرة لتوليد اختبارات تُثبت صحة الأخطاء بدلاً من اكتشافها، وتقترح نموذجاً للتحفيز القائم على المواصفات يخفف من هذه المشكلة بفعالية من خلال استبدال الكود البرمجي الذي يحتوي على أخطاء بمواصفات مُولدة لإنتاج اختبارات وحدة أكثر فعالية.
البحث الأصلي مرخَّص بموجب CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). هذا شرح مولَّده بالذكاء الاصطناعي للبحث أدناه. لم يكتبه المؤلفون ولم يصادقوا عليه. وللتحقق من الدقة التقنية، يرجى الرجوع إلى البحث الأصلي. اقرأ إخلاء المسؤولية الكامل
تخيل أنك روبوت طباخ يحاول تعلم كيفية خبز الكعكة المثالية. لديك كتاب وصفات، لكن إحدى صفحاته ملطخة بتعليمات خاطئة وفوضوية: "أضف كوبًا من الملح بدلًا من السكر". إذا سألت ذكاءً اصطناعيًا ذكيًا أن يكتب اختبارًا للتحقق مما إذا كان طعم الكعكة صحيحًا، وأريته تلك الصفحة الملطخة، فقد يرتبك الذكاء الاصطناعي. قد يفكر: "أوه، الوصفة تقول ملح، لذا يجب أن يكون طعم الكعكة مالحًا!" ثم يكتب اختبارًا يقول: "لذيذ، هذه الكعكة المالحة مثالية!" الذكاء الاصطناعي ليس غبيًا؛ إنه فقط يحاول أن يكون متعاونًا للغاية. إنه يحاول فهم التعليمات التي أُعطيت له، حتى لو كانت تلك التعليمات معطلة. هذا هو جوهر مشكلة في عالم اختبار البرمجيات، وهو مجال تقوم فيه الحواسيب بفحص حواسيب أخرى للتأكد من أنها لا تتعطل أو تتصرف بشكل سيء.
في هذا المطبخ الرقمي، "نماذج اللغات الكبيرة" (LLMs) هي طهاة الذكاء الاصطناعي الأذكياء للغاية. إنهم بارعون في كتابة الكود وإنشاء "اختبارات الوحدة" (unit tests)، والتي تشبه اختبارات التذوق الصغيرة التي تتحقق مما إذا كان جزء معين من البرنامج يعمل بشكل صحيح. عادةً، يختبر العلماء هؤلاء الطهاة من الذكاء الاصطناعي بإعطائهم وصفات مثالية وخالية من الأخطاء. لكن في العالم الحقيقي، غالبًا ما يكون الكود الذي نحتاج لاختباره معطلًا بالفعل. تسأل هذه الورقة سؤالًا مخيفًا: ماذا يحدث عندما نطلب من ذكاء اصطناعي كتابة اختبار تذوق لوصفة معطلة بالفعل؟ هل سيقوم الذكاء الاصطناعي بإصلاح الخطأ، أم أنه سيتعلم الخطأ بالخطأ ويحاول إثبات أنه صحيح؟
قرر مؤلفو هذه الورقة، جوندا تشاو، وشوروي تشو، وإلدان كوهين، التحقيق في تأثير "التضليل" هذا. لقد اكتشفوا أنه عندما تعرض قطعة كود بها خطأ على ذكاء اصطناعي، فإن الذكاء الاصطناسي غالبًا ما يُخدع. فبدلاً من كتابة اختبار يقول: "مهلاً، هذا معطل!"، يكتب الذكاء الاصطناعي اختبارًا يقول: "هذا الشيء المعطل يعمل تمامًا كما هو مخطط له!" الأمر يشبه قيام طباخ الذكاء الاصطناعي بتذوق الكعكة المالحة وكتابة مراجعة تقول: "خمس نجوم! الملوحة هي ميزة وليست خطأً."
وجد الباحثون أن هذا التأثير هو ضربة مزدوجة. أولاً، إنه يخلق الكثير من "الاختبارات المضللة" التي تثبت صحة الأخطاء. ثانيًا، إنه يمنع الذكاء الاصطناعي من كتابة "اختبارات فعالة" من شأنها أن تجد الخطأ فعليًا. الأمر كما لو أن الذكاء الاصطناعي مشغول جدًا بتبرير الخطأ لدرجة أنه ينسى البحث عن المشكلة الحقيقية. ولإثبات أن هذا لم يكن مجرد صدفة، نظروا داخل "دماغ" الذكاء الاصطناعي (نظام التقييم الداخلي الخاص به) ورأوا أن الذكاء الاصطناعي فضل بصدق الإجابة الخاطئة عندما كان الكود المعطل أمامه.
إذًا، كيف تصلح طباخًا مرتبكًا بسبب وصفة سيئة؟ أنت لا تكتفي بإعطائه الوصفة السيئة وتأمل أن يفهمها. بدلاً من ذلك، جرب المؤلفون حيلة ذكية: طلبوا من الذكاء الاصطناعي أولًا كتابة وصف لما يجب أن يكون طعم الكعكة عليه، متجاهلين التعليمات الفوضوية تمامًا. أطلقوا على ذلك اسم "المواصفات" (specification). ثم طلبوا من الذكاء الاصطناعي كتابة اختبار التذوق بناءً على ذلك الوصف، وليس بناءً على الوصفة المعطلة.
كانت النتائج جيدة بشكل مفاجئ. من خلال استبدال الكود المعطل بوصف واضح للسلوك المنشود، توقف الذكاء الاصطناعي عن كتابة اختبارات تشيد بالملوحة. بدلاً من ذلك، بدأ في كتابة اختبارات تحدد بدقة السكر المفقود. وجد المؤلفون أن هذه الطريقة قللت من عدد الاختبارات المرتبكة والخاطئة وزادت بشكل كبير من عدد الاختبارات التي تكتشف الأخطاء بالفعل. حتى أنهم جربوا هذا مع نسخة أكثر تقدمًا حيث يتعين على الذكاء الاصطناعي تحليل الوصفة بحثًا عن الأخطاء قبل كتابة الوصف، وقد نجح ذلك بشكل أفضل.
الأمر الجوهري هو أن هذه الحيلة تعمل حتى عندما لا تكون الوصفة معطلة. إذا كان الكود مثاليًا بالفعل، فإن استخدام الوصف بدلاً من الكود لا يجعل الاختبارات أسوأ؛ بل يجعلها بنفس الجودة. وهذا يعني أن الطريقة آمنة للاستخدام في العالم الحقيقي، حيث لا نعرف غالبًا ما إذا كان الكود الذي نختبره معطلًا أم لا.
باختصار، تقترح الورقة أنه عندما نريد من الذكاء الاصطناعي العثور على الأخطاء في برمجياتنا، لا ينبغي لنا فقط تسليمه الكود المعطل والأمل في الأفضل. بد instead، يجب أن نطلب منه أولًا أن يتخيل ما يجب أن يفعله الكود، ثم يختبر بناءً على تلك الرؤية المثالية. إنه تحول بسيط في المنظور يساعد الذكاء الاصطناعي على التوقف عن كونه "موافقًا دائمًا" للكود المعطل ويبدأ في كونه محققًا حقيقيًا لجودة البرمجيات.
غارق في أبحاث مجالك؟
تصلك نشرة يومية بأحدث الأبحاث المطابقة لكلماتك البحثية المفتاحية — مع ملخصات تقنية، بلغتك.