2025-11-21T20:19:23.757806

The Prompt Alchemist: Automated LLM-Tailored Prompt Optimization for Test Case Generation

Gao, Wang, Gao et al.
Test cases are essential for validating the reliability and quality of software applications. Recent studies have demonstrated the capability of Large Language Models (LLMs) to generate useful test cases for given source code. However, the existing work primarily relies on human-written plain prompts, which often leads to suboptimal results since the performance of LLMs can be highly influenced by the prompts. Moreover, these approaches use the same prompt for all LLMs, overlooking the fact that different LLMs might be best suited to different prompts. Given the wide variety of possible prompt formulations, automatically discovering the optimal prompt for each LLM presents a significant challenge. Although there are methods on automated prompt optimization in the natural language processing field, they are hard to produce effective prompts for the test case generation task. First, the methods iteratively optimize prompts by simply combining and mutating existing ones without proper guidance, resulting in prompts that lack diversity and tend to repeat the same errors in the generated test cases. Second, the prompts are generally lack of domain contextual knowledge, limiting LLMs' performance in the task.
academic

خيميائي الطلب: تحسين الطلب الآلي المخصص لنماذج اللغة الكبيرة لتوليد حالات الاختبار

المعلومات الأساسية

  • معرّف الورقة: 2501.01329
  • العنوان: The Prompt Alchemist: Automated LLM-Tailored Prompt Optimization for Test Case Generation
  • المؤلفون: Shuzheng Gao, Chaozheng Wang, Cuiyun Gao, Xiaoqian Jiao, Chun Yong Chong, Shan Gao, Michael R. Lyu
  • التصنيف: cs.SE cs.AI cs.CL
  • وقت النشر/المؤتمر: JOURNAL OF LATEX CLASS FILES, VOL. 18, NO. 9, SEPTEMBER 2020
  • رابط الورقة: https://arxiv.org/abs/2501.01329

الملخص

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

خلفية البحث والدافع

1. المشكلة الأساسية

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

  • الاعتماد على طلبات بسيطة مكتوبة يدويًا، مما يؤدي إلى أداء دون المستوى الأمثل
  • استخدام نفس الطلب لجميع نماذج اللغة الكبيرة، متجاهلة الاختلافات بين نماذج اللغة
  • عدم وجود تحسين متخصص لمهمة توليد حالات الاختبار

2. أهمية المشكلة

  • كتابة حالات الاختبار يدويًا تستغرق وقتًا طويلًا وصعبة
  • حالات الاختبار عالية الجودة حاسمة لضمان جودة البرمجيات
  • تحتاج القدرات القوية لنماذج اللغة الكبيرة في فهم وتوليد الأكواد إلى تحسين الطلب لتحقيق الاستفادة الكاملة

3. قيود الطرق الموجودة

اكتشف المؤلفون من خلال التجارب الأولية ثلاث مشاكل رئيسية في طرق تحسين الطلب الآلي (APO) على مهام توليد حالات الاختبار:

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

المساهمات الأساسية

  1. البحث الأول: حسب علم المؤلفين، هذا هو أول بحث متخصص في تحسين الطلب المخصص لنماذج اللغة الكبيرة لمهمة توليد حالات الاختبار
  2. طريقة مبتكرة: تقديم طريقة MAPS التي تدمج توليد الطلب الموجه بالتنوع، واستقراء القواعد المدفوع بالفشل، واستخراج معرفة السياق المجالي
  3. تحسين كبير: تظهر التجارب على ثلاث نماذج لغة شهيرة أن MAPS تحسن متوسط تغطية الأسطر بنسبة 6.19% وتغطية الفروع بنسبة 5.03% مقارنة بأقوى طريقة أساسية
  4. تخصيص نموذج اللغة: إثبات فعالية توليد طلبات مخصصة لنماذج لغة مختلفة

شرح الطريقة

تعريف المهمة

بالنظر إلى نموذج الصندوق الأسود M، مجموعة تطوير صغيرة Ddev، مجموعة اختبار Dtest، ودالة تسجيل s(·)، يهدف APO إلى اكتشاف طلب محسّن p من فضاء اللغة الطبيعية بناءً على Ddev بحيث يتم تعظيم أداء M على مجموعة الاختبار Dtest.

معمارية النموذج

تتضمن MAPS ثلاث وحدات أساسية:

1. استخراج معرفة السياق المجالي (Domain Contextual Knowledge Extraction)

توفر هذه الوحدة معلومات السياق ذات الصلة على مستوى المشروع لنموذج اللغة الكبيرة:

معرفة السياق داخل الملف:

  • توقيع الفئة: يتضمن نوع واسم الفئة التي تحتوي على الطريقة المركزة
  • الطريقة المركزة: الطريقة المحددة التي يجب توليد حالات اختبار لها
  • توقيعات الطرق الأعضاء: توقيعات الدوال للطرق الأخرى داخل الفئة

معرفة السياق عبر الملفات:

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

2. توليد الطلب الموجه بالتنوع (Diversity-guided Prompt Generation)

تنشئ هذه الوحدة طلبات متنوعة من خلال استكشاف مسارات تعديل مختلفة:

الخوارزمية 2: تحسين الطلب
1. اختيار أفضل K طلب من حيث الأداء
2. توليد N طريقة تعديل مختلفة
3. توليد طلبات جديدة بناءً على كل طريقة تعديل
4. دمج الطلبات المختارة والطلبات المولدة الجديدة

3. استقراء القواعد المدفوع بالفشل (Failure-driven Rule Induction)

تتجنب هذه الوحدة تكرار الأخطاء من خلال تحليل حالات الاختبار الفاشلة واستقراء القواعد:

اختيار معلومات الفشل:

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

التأمل على الأخطاء:

  • اختيار حالات فشل تمثيلية لبناء طلب تأمل
  • السماح لنموذج اللغة الكبيرة بتقديم شرح تفصيلي وحل
  • تحويل الشرح والحل إلى قواعد موجزة

التحقق من القواعد:

  • التحقق من صحة كل قاعدة مولدة جديدة
  • الاحتفاظ بالقواعد ذات الأداء الأفضل

نقاط الابتكار التقني

  1. ضمان التنوع: فرض استخدام طرق تعديل مختلفة لضمان تنوع الطلب وتجنب الحد الأدنى المحلي
  2. التعلم من الفشل: التعلم من حالات الفشل، وتوجيه عملية التحسين من خلال استقراء القواعد
  3. تعزيز السياق: توفير معلومات السياق على مستوى المشروع لمساعدة نموذج اللغة الكبيرة على توليد حالات اختبار دقيقة
  4. التكامل الناعم: تحويل مخرجات التأمل إلى قواعد موجزة، تجنب انخفاض الأداء الناجم عن الطلبات الطويلة

إعداد التجارب

مجموعة البيانات

استخدام معيار Defects4J المعتمد على نطاق واسع، الذي يتضمن 5 مشاريع Java:

  • Apache Commons CLI (29 خطأ)
  • Apache Commons CSV (15 خطأ)
  • Google Gson (17 خطأ)
  • JFreeChart (26 خطأ)
  • Apache Commons Lang (60 خطأ)
  • الإجمالي: 147 خطأ، 85 فئة مركزة، 5,278 طريقة مركزة

مقاييس التقييم

  • تغطية الأسطر (%): نسبة أسطر الكود المنفذة أثناء الاختبار
  • تغطية الفروع (%): نسبة الفروع المنفذة أثناء الاختبار

طرق المقارنة

نماذج اللغة الكبيرة:

  • ChatGPT (gpt-3.5-turbo-0125)
  • Llama-3.1-70B-Instruct
  • Qwen2-72B-Instruct

الطرق الأساسية:

  • Basic: أداء أفضل طلب بذرة
  • APE: طلب نموذج اللغة الكبيرة مباشرة لتوليد متغيرات طلب محفوظة دلاليًا
  • OPRO: دمج معلومات الأداء لتوليد طلبات جديدة
  • EVOPROMPT (GA/DE): طريقة تحسين طلب حديثة قائمة على الخوارزميات التطورية

تفاصيل التنفيذ

  • عدد طلبات البذرة: 5
  • عدد الطلبات المولدة في كل جولة: 2
  • الحد الأقصى لعدد التكرارات: 5
  • مجموعة التطوير: أخذ عينات عشوائية من 10 أخطاء
  • تكرار التجارب 3 مرات والإبلاغ عن النتائج المتوسطة

نتائج التجارب

النتائج الرئيسية

الأداء على ChatGPT:

  • تغطية الأسطر: MAPS تحقق 53.80%، أقوى خط أساس EVOPROMPT(GA) يحقق 46.63%، تحسن بنسبة 7.17%
  • تغطية الفروع: MAPS تحقق 41.84%، أقوى خط أساس يحقق 35.88%، تحسن بنسبة 5.96%

الأداء على Llama-3.1:

  • تغطية الأسطر: MAPS تحقق 50.59%، أقوى خط أساس يحقق 46.52%، تحسن بنسبة 4.07%
  • تغطية الفروع: MAPS تحقق 39.50%، أقوى خط أساس يحقق 35.07%، تحسن بنسبة 4.43%

الأداء على Qwen2:

  • تغطية الأسطر: MAPS تحقق 45.51%، أقوى خط أساس يحقق 39.41%، تحسن بنسبة 6.10%
  • تغطية الفروع: MAPS تحقق 32.71%، أقوى خط أساس يحقق 28.92%، تحسن بنسبة 3.79%

تجارب الاستئصال

تحليل مساهمة كل وحدة (مع ChatGPT كمثال):

  • إزالة استخراج معرفة السياق المجالي: انخفاض تغطية الأسطر بنسبة 9.64%، انخفاض تغطية الفروع بنسبة 8.53%
  • إزالة توليد الطلب الموجه بالتنوع: انخفاض تغطية الأسطر بنسبة 8.21%، انخفاض تغطية الفروع بنسبة 7.80%
  • إزالة استقراء القواعد المدفوع بالفشل: انخفاض تغطية الأسطر بنسبة 6.94%، انخفاض تغطية الفروع بنسبة 4.76%

تأثير التخصيص لنموذج اللغة

تتحقق التجارب من أن MAPS يمكنها توليد طلبات مخصصة لنماذج لغة مختلفة:

  • يحقق كل نموذج لغة أفضل أداء على طلبه المحسّن المتخصص
  • طلب ChatGPT النهائي يحقق تغطية أسطر أعلى بنسبة 2.45% و 2.66% مقارنة بطلبات نماذج اللغة الأخرى
  • الطلبات المحسّنة بواسطة MAPS تتفوق جميعها على الطلبات المصممة يدويًا

تحليل الحالات

الحالة 1 - Llama-3.1: من خلال القاعدة المستقرأة الثانية، ينجح النموذج في توليد حالات اختبار تتضمن معالجة الاستثناءات الحالة 2 - ChatGPT: من خلال معرفة السياق عبر الملفات، يمكن للنموذج تهيئة الفئات المجردة بشكل صحيح

الأعمال ذات الصلة

تحسين الطلب الآلي

  • APE: طلب نموذج اللغة الكبيرة مباشرة لتوليد متغيرات طلب محفوظة دلاليًا
  • OPRO: دمج معلومات الأداء لتوجيه توليد الطلب
  • EVOPROMPT: طريقة حديثة قائمة على الخوارزميات التطورية

توليد حالات الاختبار

  • الطرق التقليدية: Randoop (الاختبار العشوائي الغامض)، Evosuite (خوارزميات البحث)
  • طرق التعلم العميق: AthenaTest (ضبط دقيق لـ BART)، A3Test (تعزيز معرفة التأكيد)
  • طرق نموذج اللغة الكبيرة: ChatUniTest، ChatTESTER وغيرها

الخلاصة والمناقشة

الاستنتاجات الرئيسية

  1. تتفوق MAPS بشكل كبير على طرق تحسين الطلب الموجودة على جميع نماذج اللغة الكبيرة
  2. نماذج اللغة المختلفة تحتاج فعلاً إلى طلبات مخصصة
  3. جميع الوحدات الثلاث الأساسية تساهم بشكل مهم في تحسين الأداء، حيث يكون استخراج معرفة السياق المجالي هو الأكثر مساهمة

القيود

  1. قيود نموذج اللغة الكبيرة: التقييم يقتصر على ثلاثة نماذج لغة تمثيلية فقط
  2. قيود اللغة: التجارب تقتصر على مشاريع Java فقط، لم تغطِ لغات برمجة أخرى
  3. نطاق مجموعة البيانات: استخدام معيار Defects4J فقط

الاتجاهات المستقبلية

  1. التوسع إلى نماذج لغة وعلى لغات برمجة أكثر
  2. الدمج مع طرق توليد اختبار نموذج اللغة الكبيرة الموجودة
  3. استكشاف معلومات السياق على مستوى المشروع الأكثر تعقيدًا

التقييم المتعمق

المميزات

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

أوجه القصور

  1. التكلفة الحسابية: قد تتطلب عملية التحسين التكراري عددًا كبيرًا من استدعاءات API، مما يزيد التكلفة
  2. جودة القاعدة: يعتمد استقراء القواعد المدفوع بالفشل على قدرة نموذج اللغة الكبيرة على التأمل، وقد تكون جودة القاعدة غير مستقرة
  3. استخراج السياق: تحتاج اكتمالية ودقة استخراج السياق عبر الملفات إلى التحقق الإضافي

التأثير

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

السيناريوهات المناسبة

  1. مشاريع البرمجيات التي تحتاج إلى توليد آلي لحالات اختبار عالية الجودة
  2. الفرق التي تستخدم نماذج لغة مختلفة لتوليد الأكواد
  3. مهام هندسة البرمجيات التي تحتاج إلى تحسين أداء نموذج اللغة الكبيرة

المراجع

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


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