PVS-Studio: دعم معايير الترميز MISRA C و MISRA C ++

PVS-Studio ، MISRA C ، MISRA C ++

بدءًا من الإصدار 6.27 ، يمكن لمحلل الشفرات الثابتة PVS-Studio تصنيف تحذيراته وفقًا لمعايير MISRA C و MISRA C ++. بفضل دعم هذه المعايير ، أصبح المحلل من الممكن استخدامه بفعالية لتحسين أمان وقابلية وموثوقية البرامج للأنظمة المدمجة.

بدأنا هذا العام في دعم معايير مثل CWE و SEI CERT في محلل PVS-Studio . أساسا ، انخفض الدعم لتصنيف التشخيصات التي تم تنفيذها بالفعل في محلل وفقا لهذه المعايير. بالإضافة إلى ذلك ، تم تنفيذ العديد من التشخيصات الجديدة أو تم توسيع العديد من التشخيصات القديمة لتلبية هذه المعايير بشكل كامل.

جداول الامتثال لتشخيصات PVS-Studio وفقًا لمعايير مختلفة:


حان الوقت لمعايير MISRA C و MISRA C ++. هذه هي معايير تطوير برامج C و C ++ التي أنشأتها MISRA (جمعية موثوقية صناعة برامج المحركات). الهدف من المعايير هو تحسين أمان البرامج المضمنة وإمكانية نقلها وموثوقيتها. يتم دفع نص المعايير.

نحن نعتبر أن قوة محللنا قادرة على أخذها والبدء في استخدامها في مشروع كبير موجود. يمكنك تشغيل PVS-Studio على أساس الكود ، واكتشاف الأخطاء القديمة ، ثم استخدام المحلل بانتظام للعثور على عيوب جديدة في أقرب وقت ممكن.

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

قررنا أن PVS-Studio سيكون محلل يبحث عن الأخطاء. هذه هي ميزته التنافسية. يمكن للمبرمج تشغيله على قاعدة رمز كبيرة والتأكد من أنه لن يغمره عدد لا يصدق من الرسائل حول تنفيذ التعليمات البرمجية وسيتمكن من التركيز على الأخطاء.

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

توجد قاعدة في معيار MISRA تقضي بضرورة إحاطة جثث if في الأقواس المعقوفة. في MISRA C ، هذه هي القاعدة 15.6 ، وفي MISRA C ++ هي 6-4-1. مثال رمز خاطئ:

if (i == bestOffs) continue; 

الكود الصحيح هو:

 if (i == bestOffs) { continue; } 

لا يمكن تطبيق مثل هذه التشخيصات على المشاريع الحالية المكتوبة للعمل تحت سيطرة نظام التشغيل Winodws أو Linux أو macOS. على سبيل المثال ، توفر القاعدة الموضحة حول الأقواس المعقوفة عمليات تشخيصية 1947 V2507 (MISRA C 15.6 و MISRA C ++ 6-4-1) لمشروع WinMerge. لكن WinMerge هو مشروع صغير! فقط حوالي 250،000 سطر من التعليمات البرمجية في C و C ++.

حتى عام 2018 ، كان محلل PVS-Studio يركز على اختبار تطبيقات سطح المكتب التي تعمل على Windows و Linux و macOS. وفقًا لذلك ، لم يكن دعم MISRA منطقيًا عمليًا. لن يقوم أي شخص بتنفيذ هذا المعيار في مشروع سطح مكتب كبير موجود.

تغير كل شيء عندما بدأنا في عام 2018 دعم الأنظمة المدمجة. هذا العام ، دعم محلل:

  • نوافذ IAR Embb Workbench، C / C ++ Compiler for ARM C، C ++
  • ويندوز / لينكس Keil µVision ، DS-MDK ، ARM Compiler 5/6 C، C ++
  • ويندوز / لينكس Texas Instruments Code Composer Studio، ARM Code Generation Tools C، C ++
  • ويندوز / لينكس / ماك. GNU Arm Embedded Toolchain ، مترجم Arm Embedded GCC ، C ، C ++

على عكس مشاريع سطح المكتب ، يقوم العديد من المطورين المضمّنين ​​بالفعل بكتابة مشاريع مع مراعاة توصيات MISRA ، وسيكون دعمهم في محللنا مفيدًا بشكل فريد للمطورين.

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

على سبيل المثال ، قد لا يكون من الواضح لمبرمجي التطبيقات سبب منع المحلل فجأة من استخدام الذاكرة الديناميكية. أي لماذا فجأة لا يمكنك تخصيص الذاكرة باستخدام وظيفة malloc أو المشغل الجديد . لكن هذه القيود ( V2511 ) مفهومة جيدًا من قبل مطوري الأجهزة المدمجة. في بعض الأجهزة التي تعمل بشكل مستمر ، من غير المقبول حقًا استخدام البرامج التي قد تنفد فيها الذاكرة بشكل مفاجئ.

لذا ، يمكنك الآن تثبيت PVS-Studio أو تحديثه والبدء في استخدام التشخيصات التي تنفذ القواعد من MISRA C و MISRA C ++. مجموعة القواعد المدعومة غير مكتملة ، لكن لا ينبغي أن يكون ذلك عقبة أمام بدء استخدام PVS-Studio. في الوقت الحالي ، لا يوجد محلل ثابت واحد يقوم بتطبيق جميع قواعد MISRA بشكل مطلق. في المستقبل ، نخطط لتوسيع مجموعة قواعد التشخيص المطبقة في MISRA ، ونأمل أن تصبح أداة رائدة في اكتمال دعمها.

لتمكين تشخيصات MISRA في Visual Studio أو في الأداة المساعدة PVS-Studio المستقلة ، تحتاج إلى تغيير معطل إلى إظهار الكل في الإعدادات.

تمكين ميسرا

بما أن "معطل" يعني أن التحذيرات لا يتم إنشاؤها على الإطلاق ولا تدخل في التقرير ، فستكون هناك حاجة إلى إعادة تشغيل التحليل. يتم تعيين الوضع المعطل افتراضيًا من أجل تقليل حجم التقرير. يمكن أن يؤدي تضمين تشخيصات MISRA إلى عدد كبير من العمليات وزيادة قوية في الملفات مع التقرير (* .plog files).

لتحليل المشاريع في أنظمة التشغيل Linux و macOS ، يوجد أداة مساعدة pvs-studio-analys. بشكل افتراضي ، يتم تضمين التشخيصات للأغراض العامة فقط (التحليل العام ، GA) هناك. يمكن تمكين قواعد إضافية باستخدام الخيار -a:

 -a [MODE], --analysis-mode [MODE] MODE defines the type of warnings: 1 - 64-bit errors; 2 - reserved; 4 - General Analysis; 8 - Micro-optimizations; 16 - Customers Specific Requests; 32 - MISRA. Modes can be combined by adding the values Default: 4 

لتمكين تنبيهات GA و MISRA ، يجب إجراء تحليل باستخدام المعلمات التالية:

 pvs-studio-analyzer analyze ... -a 36 ... -o /path/to/report.log ... 

القيمة 36 هي bitwise OR لمدة 4 (GA - التشخيص العام) و 32 (MISRA).

علاوة على ذلك ، يوصى بإنشاء العديد من التقارير مع أنواع مختلفة من التنبيهات ، على سبيل المثال ، مثل هذا:

 plog-converter -a GA:1,2 -t tasklist -o /path/to/ga_results.tasks /path/to/project.log plog-converter -a MISRA:1,2,3 -t tasklist -m misra -o /path/to/misra_results.tasks /path/to/project.log 

سيحتوي تقرير ga_results.tasks الأول على تحذيرات عامة لمستويات الثقة العالية والمتوسطة.

وسيحصل التقرير الثاني "misra_results.tasks" فقط على تحذيرات تتعلق بـ MISRA من جميع المستويات. يشير رمز التبديل "-m misra" إلى أنه بالإضافة إلى الأرقام بتنسيق PVS-Studio ، سيتضمن التقرير أرقامًا تشخيصية وفقًا لتصنيف MISRA.

يتم توضيح جميع أوضاع تشغيل المحلل في Linux و macOS ، بالإضافة إلى تنسيقات التقارير ، في الوثائق .

ملحوظة: نريد أن نقيم مدى تخميننا عن طريق اختيار MISRA كأحد اتجاهات تطوير PVS-Studio. إذا كنت مهتمًا بهذا الموضوع ، يرجى الكتابة إلينا . حتى لو لم تكن تخطط لاستخدام PVS-Studio حتى الآن ، يرجى الكتابة. نريد أن نطرح عليك بعض الأسئلة التوضيحية.

روابط إضافية:

  1. تحميل PVS-Studio
  2. كيفية تشغيل PVS-Studio على لينكس وماك
  3. تم تكييف PVS-Studio 6.22 محلل الكود الثابت لمجمعي ARM (Keil، IAR)
  4. يتضمن PVS-Studio دعمًا لسلسلة أدوات GNU Arm Embedded Toolchain



إذا كنت ترغب في مشاركة هذا المقال مع جمهور يتحدث الإنجليزية ، فالرجاء استخدام الرابط الخاص بالترجمة: Andrey Karpov. PVS-Studio: دعم معايير MISRA C و MISRA C ++ للترميز .

Source: https://habr.com/ru/post/ar432660/


All Articles