إصدار ControlFlag 1.0، أداة لتحديد الأخطاء في كود C

نشرت شركة Intel الإصدار الرئيسي الأول من أداة ControlFlag 1.0، والتي تتيح لك تحديد الأخطاء والحالات الشاذة في التعليمات البرمجية المصدر باستخدام نظام تعلم آلي تم تدريبه على كمية كبيرة من التعليمات البرمجية الموجودة. على عكس المحللين الثابتين التقليديين، لا يطبق ControlFlag قواعد جاهزة يصعب فيها توفير جميع الخيارات الممكنة، ولكنه يعتمد على إحصائيات حول استخدام بنيات لغوية مختلفة في عدد كبير من المشاريع الحالية. كود ControlFlag مكتوب بلغة C++ وهو مفتوح المصدر بموجب ترخيص MIT.

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

إصدار ControlFlag 1.0، أداة لتحديد الأخطاء في كود C

وكمثال على إمكانيات ControlFlag، قام المطورون بتحليل أكواد المصدر لمشروعي OpenSSL وcURL:

  • بنيات شاذة "(s1 == NULL) ∧ (s2 == NULL)" و "(s1 == NULL) | (s2 == NULL)" ، والتي لا تتطابق مع النمط الشائع الاستخدام "(s1 == NULL) || (s2 == NULL)". حددت التعليمات البرمجية أيضًا حالات شاذة في التعبيرات "(-2 == rv)" (كان الطرح خطأ مطبعي) و"BIO_puts(bp, ":") <= 0)" (في سياق التحقق من إكمال عملية الدالة كان ينبغي أن تكون "== 0").
  • في cURL، تم اكتشاف خطأ لم يتم اكتشافه بواسطة المحللين الثابتين عند استخدام عنصر البنية "s->keepon"، الذي كان له نوع رقمي، ولكن تمت مقارنته بالقيمة المنطقية TRUE.

من بين ميزات الإصدار ControlFlag 1.0، الدعم الكامل للقوالب القياسية للغة C والقدرة على اكتشاف الحالات الشاذة في تعبيرات "if" الشرطية. على سبيل المثال، عند تحليل جزء التعليمات البرمجية "if (x = 7) y = x;" سيحدد النظام أن عبارة "if" تستخدم عادةً بنية "المتغير == رقم" لمقارنة القيم الرقمية، لذا فمن المحتمل جدًا أن يكون "المتغير = رقم" في تعبير "if" ناتجًا عن خطأ مطبعي. تشتمل المجموعة على برنامج نصي يسمح لك بتنزيل مستودعات لغة C الموجودة على GitHub واستخدامها لبناء النموذج. تتوفر أيضًا نماذج جاهزة، مما يسمح لك بالبدء فورًا في التحقق من الكود.

المصدر: opennet.ru

إضافة تعليق