PVS-Studio 7.04

صورة 4

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

PVS-Studio هي أداة للكشف عن الأخطاء ونقاط الضعف المحتملة في الكود المصدري للبرامج المكتوبة بلغات C و C ++ و C # و Java. إنه يعمل على Windows و Linux و macOS.

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

نلفت انتباهكم إلى لمحة عامة عن الميزات الجديدة المضمنة في إصدار PVS-Studio 7.04.

البحث عن الملفات مع تراخيص الحقوق المتروكة


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

أرقام التشخيص للغات مختلفة:


دعونا نتناول هذه التشخيصات بمزيد من التفصيل ونحلل ما صنعت من أجله. مثال على تعليق سيصدر فيه المحلل تحذيرا:

/* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ 

لمشاريع مغلقة


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

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

يبحث التشخيص عن التراخيص "الفيروسية" التالية:

  • AGPL-3.0
  • GPL 2.0
  • GPL-3.0
  • LGPL-3.0

هناك الخيارات التالية ، ما يمكنك القيام به عندما تكتشف استخدام الملفات ذات ترخيص الحقوق المتروكة في مشروع مغلق:

  1. رفض استخدام هذا الرمز (المكتبة) في مشروعك ؛
  2. استبدال المكتبة المستخدمة ؛
  3. اجعل مشروعك مفتوحا.

لمشاريع مفتوحة المصدر


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

إذا تم توزيع الكود الخاص بك تحت أحد تراخيص الحقوق المتروكة أعلاه ، فيمكنك تعطيل هذا التشخيص بالطرق التالية (بالنسبة إلى C \ C ++ ، يكون V1042):

  • إذا كنت تستخدم مكون PVS-Studio الإضافي لبرنامج Visual Studio ، فانتقل إلى خيارات> PVS-Studio> اكتشاف الأخطاء> 1. التحليل العام> V1042 ، يمكنك تعطيل عرض هذا التشخيص في نافذة إخراج المحلل. عيوب هذه الطريقة هي أن الخطأ سيظل مكتوبًا في سجل المحلل عند حفظه (أو إذا تم بدء التحليل من سطر الأوامر). لذلك ، عند فتح مثل هذا السجل على جهاز آخر أو تحويل نتائج التحليل إلى تنسيق مختلف ، قد تظهر الرسائل المعطلة بهذه الطريقة مرة أخرى.
  • إذا لم تستخدم المكون الإضافي ، فأنت تريد حظر قاعدة الأمر بالكامل أو إزالة رسائله من تقرير المحلل ، ثم يمكنك إضافة التعليق "// - V :: 1042" إلى ملف التكوين (.pvsconfig) أو إلى أحد ملفات الرأس العالمية. للمطورين الذين يستخدمون Visual C ++ ، سيكون الخيار الجيد هو إضافة هذا التعليق إلى ملف stdafx.h. يخبر هذا التعليق المحلل بتعطيل تشخيص V1042. لمزيد من المعلومات حول تعطيل التشخيص باستخدام التعليقات ، راجع الوثائق .
  • إذا تم استخدام الأداة المساعدة Plog Converter لتحويل التقارير ، يمكنك إيقاف تشغيل التشخيص باستخدام رمز التبديل "-d".

بالنسبة إلى C # ، يعني V3144 ، على التوالي ، ولغة Java - V6071.

إضافة إلى قائمة التراخيص الخطرة


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

تشخيصات جديدة


C ، C ++ (عام)


  • V1040 . خطأ مطبعي محتمل في الهجاء لاسم ماكرو محدد مسبقا.
  • V1041 . تتم تهيئة عضو الفئة مع الإشارة المتدلية.
  • V1042 . تم وضع علامة على هذا الملف برخصة الحقوق المتروكة ، والتي تتطلب منك فتح شفرة المصدر المشتقة.
  • V1043 . يتم تعريف متغير كائن عمومي في الرأس. سيتم إنشاء نسخ متعددة منه في جميع وحدات الترجمة التي تتضمن ملف الرأس هذا.

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

V1040 خطأ مطبعي محتمل في الهجاء لاسم ماكرو محدد مسبقًا. يشبه الماكرو '__MINGW32_' '__MINGW32__'. winapi.h 4112

 /* from winternl.h */ #if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif 

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

الصورة 8

يمكنك إلقاء نظرة على جميع الأخطاء الموجودة في مشروع CMake في مقال " CMake: الحالة التي تكون فيها جودة الكود الخاص بها لا يمكن تبريرها للمشروع ."

C ، C ++ (MISRA)


  • V2551 . ميسرا. يجب الإعلان عن المتغير في نطاق يقلل من ظهوره.
  • V2552 . ميسرا. يجب أن تحتوي التعبيرات التي تحتوي على نوع التعداد الأساسي على قيم تقابل تعداد التعداد.
  • V2553 . ميسرا. يجب ألا يتم تطبيق عامل أحادي ناقص على تعبير من النوع غير الموقع.
  • V2554 . ميسرا. يجب ألا يكون للتعبير الذي يحتوي على الزيادة (++) أو النقصان (-) آثار جانبية أخرى.
  • V2555 . ميسرا. التعبير غير صحيح التحول.
  • V2556 . ميسرا. استخدام مؤشر إلى FILE عندما يكون الدفق المرتبط مغلقًا بالفعل.
  • V2557 . ميسرا. يجب ألا يكون لمشغل مشغل sizeof () آثار جانبية أخرى.

C #


  • V3140 . استخدام accessors الخاصية حقول دعم مختلفة.
  • V3141 . يعد التعبير تحت "رمي" باطلاً ، مما قد يؤدي إلى NullReferenceException.
  • V3142 . تم اكتشاف رمز يتعذر الوصول إليه. من الممكن وجود خطأ.
  • V3143 . تتم إعادة كتابة المعلمة "value" داخل محدد خاصية ، ولا يتم استخدامها بعد ذلك.
  • V3144 . تم وضع علامة على هذا الملف برخصة الحقوق المتروكة ، والتي تتطلب منك فتح شفرة المصدر المشتقة.
  • V3145. dereference غير آمنة من هدف WeakReference. يمكن أن يكون الكائن قد تم تجميعه قبل الوصول إلى خاصية "الهدف".

أيضًا في محلل C # ، تمت إضافة حساب قيم الإرجاع / الكتابة من الحصول على وتعيين أساليب الوصول إلى الملكية وطرق المزامنة.

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

جافا


  • V6068 . استخدام مشبوه من الدرجة BigDecimal.
  • V6069 . تعيين نوبة اليمين غير الموقعة من القيمة السلبية "البايت" / "القصيرة".
  • V6070 . تزامن غير آمن على كائن.
  • V6071 . تم وضع علامة على هذا الملف برخصة الحقوق المتروكة ، والتي تتطلب منك فتح شفرة المصدر المشتقة.

SonarQube 7.9 LTS


الإفراج الذي طال انتظاره


لقد مر عامان تقريبًا منذ الإصدار الأخير من الإصدار LTS من SonarQube 6.7. كان من المتوقع إصدار جديد مع الحماس الخاص ، بدءا من SQ 7.x ، وعندما تم إصدار LTS ، بدأ المستخدمون في التحول إليها بنشاط ، مما تسبب في مشاكل مختلفة. تم إصدار SQ 7.9.1 LTS قريبًا مع إصلاحات ثانوية ، كما أعد مطورو المكونات الإضافية من الجهات الخارجية تصحيحات.

لحسن الحظ ، في البرنامج المساعد PVS-Studio ، كانت هناك مشكلة صغيرة واحدة فقط مرتبطة بالانتقال إلى Java 11 ، والذي تم إصلاحه بسرعة ، وتحول عملاؤنا على الفور إلى إصدار عمل.

حافظنا أيضًا على توافقها مع الإصدارات القديمة من SonarQube ، وتبدو قائمة الإصدارات المدعومة الآن كما يلي: SonarQube 6.7 LTS والإصدارات الأحدث .

المزيد من الإضافات اللغوية المدعومة


يحوّل البرنامج المساعد PVS-Studio نتائج التحليل فقط إلى تنسيق قاعدة بيانات SonarQube. بمعنى آخر ، يقوم ببساطة بتحميل نتائج تحليل PVS-Studuio في SQ. ولكن من أجل التشغيل الكامل لأداة SonarScanner ، يجب تثبيت المكونات الإضافية للغات البرمجة. لم نبدأ في تطوير ما هو موجود بالفعل ، وبالتالي نضيف ببساطة دعمًا للمكونات الإضافية الموجودة بالفعل. في هذا الإصدار ، أضفنا التوافق مع الإضافات اللغوية Sonar C Community و SonarCFamily.

تبدو قائمة الإضافات اللغوية المدعومة بأكملها كما يلي:


لتنزيل نتائج تحليل PVS-Studio ، يكفي تثبيت مكون إضافي واحد على الأقل من هذه القائمة. يحتاج معظم المستخدمين فقط إلى تثبيت مجتمع Sonar C ++ أو SonarC # أو SonarJava. قد تكون هناك حاجة الإضافات الأخرى لمشاريع أكثر تحديدا.

عند اختيار الإضافات ، من الضروري مراعاة حقيقة أن الإضافات المجتمعية غير متوافقة مع SonarCFamily. ولكن إذا كنت تستخدم SonarQube Community Edition فقط ، فلن تنشأ مثل هذه المشكلة.

صفحة الإعدادات الجديدة


في السابق ، يمكنك تكوين المحلل فقط من خلال ملف تكوين sonar-project.properties . لا توجد شكاوى حول هذه الطريقة. إنه مناسب للغاية ويستخدم في 99٪ من الحالات ، لكننا قمنا أيضًا بإضافة صفحة الإعدادات في الإدارة> التكوين> PVS-Studio على خادم SonarQube ، لأن كما أنه مناسب للاستخدام في بعض السيناريوهات.

تبدو صفحة الإعدادات هكذا:

الصورة 10

عند تعيين الإعدادات بطريقتين ، يتم إعطاء الأولوية لتلك المحددة في ملف sonar-project.properties .

البرنامج المساعد ل IntelliJ IDEA


تختلف إصدارات إصدارات IntelliJ IDEA و PVS-Studio الجديدة في التواريخ ، وكان هناك مؤخرًا موقف عندما تم إصدار IntelliJ IDEA 192. * ، ولكن لم يتم تثبيت البرنامج المساعد PVS-Studio عليه. في هذا الإصدار ، أضفنا الدعم لأحدث إصدار من IntelliJ IDEA ، وقمنا أيضًا بإجراء تحسينات لتجنب حدوث مشكلات مماثلة في المستقبل.

الإضافات لجينكينز


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

تم تصميم PVS-Studio Plugin لنشر نتائج محلل PVS-Studio في نظام تكامل Jenkins المستمر بتنسيق HTML. سابقا ، كان هذا البرنامج المساعد متاحا فقط لمستخدمي ويندوز ، كما دعا محول التقرير تلقائيا وفعل ذلك فقط لنظام التشغيل Windows. في PVS-Studio 7.04 ، يدعم المكون الإضافي فقط تقارير HTML ، التي يجب إنشاؤها في خطوة منفصلة ، لكن هذا سمح للمكون الإضافي بأن يكون عبر نظام أساسي.

تحذيرات NG المساعد

بالنسبة إلى Jenkins ، يوجد مكون إضافي مفيد من البرنامج المساعد لـ Warnings Next Generation لعرض نتائج التحليل من الأدوات المختلفة. لقد أضفنا مؤخرًا دعمًا لـ PVS-Studio. أصبحت القدرة على تحميل نتائج تحليل PVS-Studio باستخدام هذا المكون الإضافي متوفرة في الإصدار 6.0.0 ، والذي تزامن إصداره مع إصدار PVS-Studio 7.04:

الصورة 1

تحسينات أخرى


PVS-Studio_Cmd

وضع تشغيل خاص - تمت إضافة بيانات الاعتماد إلى PVS-Studio_Cmd.exe . يسمح لك هذا الوضع بإنشاء ملف إعدادات وإدخال معلومات الترخيص دون استخدام واجهة المستخدم الرسومية (على سبيل المثال ، مكون إضافي لبرنامج Visual Studio أو الأداة المساعدة C و C ++ Monitoring UI). يكون هذا الوضع مناسبًا بشكل خاص عند استخدامه على خادم الإنشاء (حيث قد لا يتم وصف أدوات مساعدة واجهة المستخدم الرسومية) ، في الحاويات ، وعند دمجها مع حلول السحابة.

تحليل مشاريع المحركات غير الواقعية

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

أيضًا ، في قسم الوثائق " اختبار مشاريع المحرك غير الحقيقي " ، تم وصف التغييرات التي تم إجراؤها على البرامج النصية للتجميع القياسي والتي ستسمح بالتجميع والتحليل في إجراء واحد. بدون تعديل البرامج النصية (عند إضافة علامة -StaticAnalyzer = PVSStudio إلى وسيطات بدء التشغيل) ، يتم تحليل المشروع فقط ، دون بنائه.

CLMonitor

بالنسبة للأداة المساعدة CLMonitor ، تمت إضافة إمكانية تتبع عمليات إطلاق برنامج التحويل البرمجي لعملية محددة. سيتيح لك ذلك تتبع بدايات المجمعين المرتبطين بمشروع معين فقط ، حتى عند بناء العديد من المشاريع بالتوازي. للعمل في هذا الوضع ، يتم استخدام الإشارات --parentProcessID٪ PID٪ (تراقب CLMonitor العمليات المتعلقة بالأطفال المحددة بالمعيار المحدد) - - وترفق (تراقب CLMonitor العمليات التي تعتبر تابعة بالنسبة إلى وحدة التحكم الحالية).

ص ف استوديو محلل

تمت إضافة علامة --ignore-ccache إلى الأداة المساعدة pvs-studio-analys ، والتي تم تصميمها لاختبار المشروعات على نظامي Linux و macOS:

 pvs-studio-analyzer analyze ... --ignore-ccache ... 

إذا تم استخدام الأداة المساعدة ccache في مجموعة المشروع ، فإن PVS-Studio يعمل في وضع التحليل التزايدي. للتحقق من المشروع تمامًا دون إسقاط ذاكرة التخزين المؤقت لأداة cache ، استخدم هذه العلامة.

روابط ذات صلة


لمواكبة منشوراتنا الجديدة ، ندعوك للاشتراك معنا:

  1. تويتر: pvsstudio_rus
  2. فكونتاكتي: محلل PVS-Studio
  3. الفيسبوك: StaticCodeAnalyzer
  4. Instagram: pvsstudio_rus
  5. برقية: PVS- ستوديو روس
  6. RSS: viva64-blog-en

PVS استوديو:

  1. صفحة المنتج
  2. تحميل
  3. الوثائق
  4. عملاء



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

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


All Articles