نظرة عامة على ميزات الإصدار 7.07 من PVS-Studio

صورة 30

الغرض من هذه المقالة هو عرض عام لإمكانيات محلل PVS-Studio الثابت. الطريقة الأسهل والأكثر وضوحًا للقيام بذلك هي إظهار تشغيل الأداة بالأمثلة. سيتم إظهار التحقق من المشروع باستخدام المكون الإضافي لـ Visual Studio ، وإطلاق المحلل في نظام التشغيل Linux ، واستيراد نتائج التحليل إلى SonarQube.

معلومات عامة


PVS-Studio هو محلل رمز ثابت مكتوب بلغة C و C ++ و C # و Java. يقوم PVS-Studio بإجراء مجموعة واسعة من عمليات التحقق من التعليمات البرمجية ، ولكنه أقوى في العثور على الأخطاء المطبعية وعواقب فشل النسخ واللصق (أمثلة: واحد ، اثنان ، ثلاثة ، أربعة ). يعد التحليل الثابت مكملاً جيدًا لإحدى أقدم الطرق وأكثرها موثوقية للكشف عن العيوب - مراجعة الكود. يصعب العثور على بعض الأخطاء أثناء مراجعة مشتركة للكود (على سبيل المثال ، نفس الأخطاء المطبعية). على سبيل المثال:

int trans_rest(transcoder_settings *trans)
{
  ....
  for(i=0; i<16; i++);
  {
    trans->eq.eq.preamp[i]   = 0.0;
    for(j=0; j<32; j++)
    {
      trans->eq.eq.boost[i][j] = 0.0;
    }
  }
}

بالنسبة لأولئك الذين لم ألحظ، تولي اهتماما لالفاصلة المنقوطة بعد أول ل . أو:

private class ObjectArrayComparer : IEqualityComparer<object[]>
{
  public bool Equals(object[] x, object[] y)
  {
    ....
    for (int i = 0; i < x.Length; i++)
    {
      if (!object.Equals(x[0], y[0])) 
      {
        return false;
      }
    }
    return true;
  }
  ....
}

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

البرنامج المساعد للاستوديو المرئي


يحتوي PVS-Studio على مكون إضافي لبرنامج Visual Studio 2010-2019. قبل أن ننتقل مباشرة إلى التحقق ، سأوضح قدرات المكون الإضافي. دعونا نلقي نظرة على بعض النقاط التي قد تثير أسئلة بروح "ما هو كل شيء؟"

صورة 13


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

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

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

صورة 14


بعد ذلك ، انتقل إلى العنصر "عرض رموز CWE في نافذة الإخراج". PVS-Studio هي أداة لاختبار أمان التطبيق الثابت (اختبار أمان التطبيق الثابت ، SAST). يمكن تصنيف تنبيهات PVS-Studio وفقًا لتعداد الضعف العام (CWE). للتعرف على تصنيف تنبيهات PVS-Studio وفقًا لـ CWE ، ولماذا هناك حاجة إلى CWE ، وما هو عليه وما إلى ذلك ، أقترح عليك قراءة الروابط التالية:


دعنا ننتقل إلى علامة التبويب "خيارات".

الصورة 6

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

صورة 10

هنا يمكنك إدخال مسارات / أقنعة لاستبعاد بعض الملفات أو المجلدات من التحليل. يمكنك اختيار إما قناع من المسار (Mask Path) أو قناع من اسم الملف (FileName Mask). إنها مطلوبة إذا كنت ترغب في استبعاد مكتبات الجهات الخارجية والملفات التي يتم إنشاؤها تلقائيًا وما إلى ذلك من التحليل. بعد تعيين أقنعة الاستبعاد ، ستختفي الرسائل من الملفات المقابلة لها من نافذة إخراج PVS-Studio ، ولن يتم تضمينها في الفحص التالي. وبالتالي ، فإن استبعاد الملفات والأدلة من خلال الأقنعة يمكن أن يقلل بشكل كبير من وقت التحليل الكلي للمشروع بأكمله.

مزيد من التفاصيل هنا .

صورة 8

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

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

بعد الانتهاء من نظرة عامة على الإعدادات ، دعنا ننتقل إلى التحقق من المشروع. كما لاحظت ، تحتوي المقالة على العديد من الإعدادات المتعلقة بمشاريع C ++ ، ولكن لم تكن هناك تفاصيل خاصة بـ C # و Java. هناك ببساطة المزيد من الإعدادات لـ C ++ أكثر من C # ، لذلك قررنا الخوض في هذه المراجعات الموجزة. ولكن من أجل تغيير القصة ، دعنا نتحقق بمساعدة المكون الإضافي لـ Visual Studio ليس C ++ ، ولكن مشروع C # ونرى كيف يبدو تقرير المحلل.

بطبيعة الحال ، بعد الفحص الأول للمشروع ، سيكون عليك العودة إلى الإعدادات من أجل تقليل نسبة الإيجابيات الخاطئة. الإيجابيات الكاذبة أمر لا مفر منه ، ولكن يمكن تقليل نسبتها عن طريق تحديد قيمة مقبولة. انظر المقال: " خصائص محلل PVS-Studio باستخدام مثال مكتبات EFL الأساسية ، 10-15٪ من الإيجابيات الخاطئة ."

الصورة 1

حدد البند "تحليل الحل باستخدام PVS-Studio".

الصورة 2

ستظهر نافذة بها شريط تقدم.

صورة 3

ثم يمكننا رؤية تقرير المحلل.

صورة 11

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

لينكس


اختبرنا في وقت سابق مشروع C #. الآن دعنا نحاول التحقق من الرمز المكتوب بلغة C ++. لإضافة مجموعة متنوعة إلى المقالة ، سنختبرها في Linux. بالمناسبة ، تحت أنظمة Windows و Linux و macOS ، يمكنك التحقق من المشاريع بأي لغة (C ، C ++ ، C # ، Java).

صورة 20

نحن نستنسخ مستودع.

صورة 18

نطلق برنامج تكوين للتجميع.

صورة 16

نطلق PVS-Studio في وضع التتبع ونجمع المشروع. مطلوب أداة strace المثبتة . بدلاً من الأمر make ، في حالتك يمكن أن يكون هناك أي أمر لبدء بناء المشروع بكل المعلمات الضرورية.

صورة 12

نقوم بتحليل الملفات من المشروع باستخدام نتائج الخطوة السابقة. يسمح لك رمز التبديل -a بتحديد التحذيرات التي يجب تضمينها في التقرير.

صورة 4

نقوم بتحويل السجل إلى html والاستمتاع بالنتائج.

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

سوناركوبي


SonarQube هو نظام أساسي مفتوح المصدر للتحليل المستمر وقياس جودة التعليمات البرمجية ، ويدعم عددًا كبيرًا من لغات البرمجة ويسمح لك بتلقي تقارير حول المقاييس مثل تكرار التعليمات البرمجية ، والامتثال لمعايير التشفير ، وتغطية الاختبار ، وتعقيد التعليمات البرمجية ، والأخطاء المحتملة ، إلخ.

يحتوي PVS-Studio على مكون إضافي لاستيراد نتائج التحليل إلى SonarQube ، دعنا نحاول استخدامه.

صورة 9

للبدء ، نحصل على تقرير المحلل وملف التكوين sonar-project.properties.

صورة 27

بعد ذلك ، نحتاج إلى أمر تشغيل الماسح الضوئي.

صورة 28

نتيجة :)

صورة 23

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

صورة 25

في علامة التبويب "المقاييس" ، تتوفر مقاييس التعليمات البرمجية والرسوم البيانية المختلفة.

صورة 26

يمكنك أيضًا إنشاء الرسوم البيانية باستخدام قسم PVS-Studio. يمكنك معرفة المزيد حول دمج نتائج تحليل PVS-Studio في SonarQube في هذا القسم من الدليل.

PVS-Studio Java


لقد نظرنا الآن في الإعدادات الخاصة بمشاريع C ++ ، واختبرنا المشروع في C # ، ولكن جافا بطريقة ما خرجت عن المقالة. من الضروري إصلاح هذا وإخبار ما هو محلل Java PVS-Studio. يحتوي المحلل على عدة طرق مختلفة للاندماج في المشروع. اعتمادًا على نظام البناء ، يمكنك استخدام البرنامج المساعد لـ Maven أو Gradle. يمكنك أيضًا استخدام قلب المحلل مباشرةً. يسمح لك استخدام الإضافات Gradle أو Maven أو kernel مباشرة بالعمل بسهولة مع Sonar Qube أو CI (Jenkins). إذا قمت بتمكين هذه المكونات الإضافية ، فسيتم فحص مشروع Java عن طريق التحليل الثابت مباشرة أثناء عملية البناء ونتيجة لذلك لن تتلقى فقط مشروعك المجمع ، ولكن أيضًا سجل من محلل PVS-Studio.

يمكن أيضًا استخدام محلل PVS-Studio Java كمكون إضافي لـ IntelliJ IDEA. في هذه الحالة ، يتم إجراء تحليل لبنية المشروع من خلال IDE هذا ، ويوفر المكون الإضافي واجهة رسومية ملائمة للعمل مع المحلل.

صورة 40

أقترح القراءة بمزيد من التفصيل في القسم الخاص بكيفية بدء PVS-Studio Java .

أيضًا ، عن طريق التحقق من مشروع Java ، يمكنك منع رسائل المحلل بحيث يكون الاندماج في مشروع كبير سريعًا وغير مؤلم.

في IntelliJ IDEA ، يبدو هذا.

صورة 42

في هذه النافذة نرى تقرير المحلل.

صورة 43

من خلال النقر بزر الماوس الأيمن على الرسالة المحددة ، نرى قائمة السياق هذه. يمكننا فيه تحديد العنصر المميز وستختفي الرسالة من إخراج المحلل.

صورة 44

يمكننا أيضًا منع جميع رسائل المحلل.

لمنع تحذيرات المحلل في Gradle ، قم بتنفيذ الأمر:

./gradlew pvsSuppress "-Ppvsstudio.report=/path/to/report.json"
  "-Ppvsstudio.output=/path/to/suppress_base.json"

لقمع تحذيرات المحلل في Maven ، قم بتشغيل الأمر:
mvn pvsstudio:pvsSuppress "-Dpvsstudio.report=/path/to/report.json"
  "-Dpvsstudio.output=/path/to/suppress_base.json"

اقرأ المزيد عن آلية القمع هنا .

كي تختصر


كان الغرض من هذه المقالة هو إظهار إمكانات محلل PVS-Studio الثابت ، وكيفية العمل معه بسهولة باستخدام المكون الإضافي لـ Visual Studio و Linux. بفضل القدرة على الاندماج مع منصة SonarQube ، يمكنك تقديم تحليل مستمر وإدارة جودة للشفرة الخاصة بك ، والتي تعد مجرد واحدة من العديد من الميزات الموضحة في الوثائق.

يتيح لك دمج المحلل الثابت في نظام CI اكتشاف الأخطاء فورًا بعد بناء المشروع. هذا يقلل من تكلفة العثور على الأخطاء وتصحيحها. فيما يلي روابط لمقالات مع عمليات التكامل مع الخدمات السحابية الأكثر شيوعًا:

  1. يذهب PVS-Studio إلى الغيوم: Travis CI
  2. يذهب PVS-Studio إلى الغيوم: Azure DevOps
  3. يذهب PVS-Studio إلى الغيوم: CircleCI
  4. يذهب PVS-Studio إلى الغيوم: GitLab CI / CD
  5. قم بتشغيل PVS-Studio في TeamCity


إذا كنت تريد مشاركة هذه المقالة مع جمهور يتحدث الإنجليزية ، فيرجى استخدام رابط الترجمة: Ekaterina Nikiforova. PVS-Studio 7.07: نظرة عامة على الميزات .

All Articles