

- S6: البحث في الشيفرة البرمجية المعتمد على الدلالات
S6: البحث في الشيفرة البرمجية المعتمد على الدلالات

Original Author: Steven P. Reiss
Original Article: https://cs.brown.edu/~spr/research/s6.html
تم تصميم عملنا في مجال البحث عن الشيفرة البرمجية بحيث يتيح للمبرمجين الاستفادة من المستودعات الضخمة المتاحة من الشيفرات مفتوحة المصدر. فمحركات البحث التقليدية عن الشيفرة مثل Google Code Search وKoders وKrugle تتيح الوصول إلى هذه المستودعات، لكنها لا تُبسّط فعليًا مهمة المبرمج في استخدام الشيفرة. إذ تعتمد هذه المحركات على كلمات مفتاحية وتُرجع مئات المقاطع البرمجية المحتملة. ويُجبر المبرمج بعد ذلك على تصفح كل ملف مُعاد، والتحقق مما إذا كانت الشيفرة ذات صلة بما يحتاجه. وإذا كانت كذلك، فعليه قراءتها بالتفصيل لتحديد ما إذا كانت تطابق متطلباته تمامًا أو على الأقل قريبة منها. وأخيرًا، يتعين عليه تكييف الشيفرة لتلائم متطلباته الخاصة من حيث التسمية، والتنسيق، ومعالجة الأخطاء، وغير ذلك.
نعتقد أن نهجًا أفضل يتمثل في أن يقدّم المبرمج معلومات أكثر دقة عمّا يريده، بينما يتولى النظام الأعمال الشاقة المتمثلة في فحص مقاطع الشيفرة المُعادة، وتعديل الشيفرة لتؤدي ما يريده المبرمج، وتحويلها لتتوافق مع الإطار المستهدف. تتيح واجهة البحث لدينا للمبرمج تحديد الدلالات (Semantics) لما يريده، ويشمل ذلك الكلمات المفتاحية كوصف غير رسمي، والتوقيع البرمجي (Signature)، وحالات الاختبار والعقود (باستخدام JML) للمواصفات الوظيفية، وقيود الأمان (باستخدام نموذج أمان Java)، وقيود التعددية الخيطية (Threading) التي لم تُنفّذ بالكامل بعد. إضافةً إلى ذلك، يمكن للمستخدم توفير السياق الذي ستُدمج فيه الشيفرة. وتسعى الواجهة الأمامية إلى جعل تقديم هذه المواصفات أمرًا سهلًا قدر الإمكان.
يعمل النظام باستخدام الكلمات المفتاحية للوصول إلى أحد محركات البحث المتاحة عن الشيفرة (أو محرك بحث محلي للشيفرات المتاحة في Brown) للحصول على الملفات المرشحة. ويُنظر إلى كل صنف (Class) أو دالة (Method) في هذه الملفات، بحسب ما يبحث عنه المستخدم، على أنه حل محتمل. ثم تُحوَّل هذه الحلول باستخدام مجموعة من نحو 30 عملية تحويل في محاولة لمواءمة الشيفرة بدقة مع ما حدده المبرمج. وتتراوح هذه التحويلات بين البسيطة (مثل تغيير اسم الدالة ليتطابق مع التوقيع البرمجي) والمعقدة (مثل العثور على سطر في الدالة يحسب قيمة من نوع القيمة المُعادة، ثم إجراء تحليل عكسي حتى تصبح المتغيرات الحرة الوحيدة من أنواع معاملات الدالة).
تُختبر بعد ذلك جميع الحلول التي يمكن تحويلها لتتطابق مع التوقيع البرمجي باستخدام حالات الاختبار المعطاة، وقيود الأمان، وقواعد JML. ويمكن تطبيق تحويلات إضافية استنادًا إلى نتائج حالات الاختبار. أما الحلول التي تجتاز حالات الاختبار فتُنسّق وفق نمط التنسيق الذي حدده المستخدم، ثم تُرتّب حسب الحجم أو التعقيد أو الأداء في حالات الاختبار، وتُعرض أخيرًا على المستخدم.
http://conifer2.cs.brown.edu/s6 :يمكن تجربة النظام (في معظم الأوقات — إذ قد يكون الخادم متوقفًا أحيانًا) على العنوان التالي
الأبحاث
البحث في الشيفرة البرمجية المعتمد على الدلالات، مؤتمر ICSE 2009، مايو 2009.
تحديد ما يجب البحث عنه، مؤتمر SUITE 2009، مايو 2009.
السعي إلى واجهة المستخدم، مؤتمر ASE 2014.
إنشاء حالات اختبار باستخدام البحث في الشيفرة البرمجية، غير منشور.
Hunter: إعادة استخدام الشيفرة البرمجية من الجيل التالي للغة Java، بقلم Yuepeng Wang وYu Feng وRuben Martins وArati Kaushik وIsil Dillig وSteven Reiss، مؤتمر FSE 2016.
السعي إلى واجهة المستخدم، بقلم Steven Reiss وYun Miao وQi Xin، مجلة Automated Software Engineering، عام 2017.
الصور
الواجهة الأمامية:

الواجهة الأمامية تعرض النتائج:

مخطط البنية الداخلية:

البرمجيات
البرمجيات متاحة على العنوان التالي:
“ Muhammad Nagi is a gamer-turned-organic growth hacker with a passion for performance, strategy, and persistence. With over 8,000 hours in CS:GO, he knows what it means to grind — and he applies that same energy to digital growth. Drawing from years of in-game experience, Muhammad now uses his deep understanding of gamer behavior to educate others, build visibility for gaming brands, and deliver actionable content that resonates with real players.”

