تعلم استدلال النوع لتحسين تحليل التدفق البيانات

تحليل الكود المُنَمَّط ديناميكيًا بشكل ثابت هو مسعى صعب، حيث أن حتى المهام البديهية مثل تحديد أهداف دعوات الإجراءات تصبح غير بسيطة دون معرفة أنواع الأشياء في وقت التجميع. لمواجهة هذا التحدي، يتم إضافة التنميط التدريجي بشكل متزايد إلى اللغات المُنَمَّطة ديناميكيًا، ومن الأمثلة البارزة على ذلك TypeScript التي تُدخل التنميط الثابت إلى JavaScript. يعزز التنميط التدريجي قدرة المطور على التحقق من سلوك البرنامج، مما يساهم في برامج أكثر صلابة وأمانًا وقابلية للتصحيح. ومع ذلك، فإن المستخدمين في الواقع يقومون بتحديد الأنواع مباشرةً بشكل نادر. وفي الوقت نفسه، تواجه التقنيات التقليدية لاستدلال الأنواع تحديات مرتبطة بالأداء مع زيادة حجم البرنامج. تقنيات الإحصاء القائمة على التعلم الآلي توفر استدلالًا أسرع، ولكن رغم تحسين الدقة الشاملة الذي أظهرته الأساليب الحديثة، لا تزال أداؤها ضعيفًا بشكل كبير بالنسبة لأنواع المستخدم المحددة مقارنة بأنواع النظام الأكثر شيوعًا. مما يحد من فائدتها العملية بشكل أكبر أنها نادراً ما تتداخل مع التطبيقات التي يستخدمها المستخدمون. نقترح CodeTIDAL5، وهو نموذج مستند إلى Transformer مدرب على التنبؤ بدقة بالتنميطات (type annotations). لتحقيق استرجاع النتائج وإعادة دمجها بكفاءة، نستخرج شرائح الاستخدام من الرسم البياني الخاص بخصائص الكود في البرنامج. عند مقارنة أسلوبنا مع أنظمة استدلال الأنواع العصبية الحديثة، يتفوق نموذجنا بنسبة 7.85% على معيار ManyTypes4TypeScript، ويحقق دقة إجمالية تبلغ 71.27%. بالإضافة إلى ذلك، نقدم JoernTI، وهو دمج لأساليبنا في Joern، وهي أداة تحليل ثابت مفتوحة المصدر، ونثبت أن التحليل يستفيد من المعلومات الإضافية حول الأنواع. حيث أن نظامنا يسمح بأوقات استدلال سريعة حتى على المعالجات الشخصية (commodity CPUs)، فإن جعل نظامنا متاحًا عبر Joern يؤدي إلى انتشار عالٍ ويسهل البحث الأمني.