تعتبر عملية التمييز بين التعديلات التي تحافظ على الدلالة (semantic-preserving) وتلك التي تغيرها أحد التحديات الكبيرة في تعدين مستودعات البرمجيات. على الرغم من أن هناك طرقًا قائمة تستطيع التعرف بدقة على التعديلات المعنية بإعادة الهيكلة، إلا أنها لا تستطيع التحقق مما إذا كانت التعديلات بشكل كامل تحافظ على المعنى دون أي تغييرات سلوكية موازية. هذه القيود يمكن أن تؤثر سلبًا على عدة مهام مثل التصحيح، وتحديد موقع الأخطاء، وبناء مجموعات بيانات الأخطاء، وتحليل التراجع، وعكس إصلاحات الأخطاء.
في محاولة لسد هذه الفجوة، تم اقتراح SemaDiff، وهو نهج جديد يركز على تمييز التعديلات التي تحافظ على الدلالة من خلال تحليل السلوك القائم على مقارنة تنفيذ الاختبارات المشابهة على النسخ قبل وبعد التعديل. بالنظر إلى أن الكود المتأثر بإعادة الهيكلة غالباً ما يكون صعب الاختبار ومختلف بين النسختين، يقوم SemaDiff بتوليد طرق استدعاء إضافية لهذا الكود، والتي تستخدم كأهداف للاختبار.
عند معالجة عملية التعديل، يقوم SemaDiff بتحليل الفروق لتحديد الكود المعدل واستخراج الكود المعتمد غير المعدل الذي يستدعيه. بعد ذلك، يولد فصلًا تابعًا إضافيًا باستخدام نموذج لغوي كبير (Large Language Model) لاختبار الكود المعدل في كلتا النسختين، كما يقوم بتوليد اختبارات تلقائيًا للكود المعتمد.
بالمثل، يتم تصنيف التعديل على أنه حافظ على الدلالة فقط إذا كانت جميع الاختبارات المولدة تنتج نتائج متطابقة في كلا النسختين. ولتقييم SemaDiff، تم بناء مجموعة بيانات مكونة من 183 تعديلًا، تم تجميعها من مشاريع Java مفتوحة المصدر المعروفة. أظهرت النتائج التي تم الحصول عليها أن SemaDiff يميز بدقة بين التعديلات الدلالية وغيرها في حوالي 76% من الحالات، مع دقة تصل إلى 100% في الكشف عن التعديلات التي تغير الدلالة.
SemaDiff: الابتكار في تمييز التغييرات الدلالية في البرمجيات
تواجه صناعة البرمجيات تحديًا في التمييز بين التعديلات التي تحافظ على المعنى وتلك التي تغيره. يقدم SemaDiff نهجًا مبتكرًا لتحليل السلوك بهدف تحديد التعديلات الدلالية بدقة.
المصدر الأصلي:أركايف للذكاء
زيارة المصدر الأصلي ←جاري تحميل التفاعلات...
