الصيف ليس فقط موسم عطلة ، ولكن أيضا وقت العمل المثمر. الأيام المشمسة ملهمة للغاية لدرجة أن هناك طاقة كافية للمشي المتأخر والتزامات الكود الكبيرة. تبين أن الإصدار الثاني من برنامج PVS-Studio 7.04 في الصيف كان كبيرًا جدًا ، لذلك نقترح علىكم الانتباه إلى هذا البيان الصحفي ، الذي سنخبرك فيه بكل شيء.
PVS-Studio هي أداة مصممة للكشف عن الأخطاء ونقاط الضعف المحتملة في التعليمات البرمجية المصدر للبرامج ، مكتوبة بلغات C و C ++ و C # و Java. يعمل في بيئة Windows و Linux و macOS.
مجموعة واسعة
من الأخطاء الموجودة في التعليمات البرمجية أثناء
عمليات التحقق من مختلف المشاريع مفتوحة المصدر توضح بوضوح قدرات المحلل.
فيما يلي نظرة عامة على الميزات الجديدة التي تأتي مع إصدار PVS-Studio 7.04.
البحث عن الملفات مع تراخيص الحقوق المتروكة
عند العمل على مطوري المهام ، يأخذون التعليمات البرمجية من العديد من الأماكن المختلفة. يعد موقع Stackoverflow وما شابهه من المصادر الشائعة لرمز Copy-Paste. هناك حالات عندما يأخذ المطور الرمز من مشروع مفتوح المصدر ولا يتحقق من متطلبات الترخيص. وبالتالي ، قد يحصل مشروع مفتوح المصدر بطريق الخطأ على عدد قليل من الملفات من مشروع مفتوح المصدر بترخيص Copyleft ، والذي يلزمه بإدخال رمز المشروع بالكامل مفتوح المصدر. في الشركات التي بها عدد كبير من الموظفين ، من الصعب تتبع ذلك ، في حين أن هذه الإجراءات قد تسبب مخاطر ومشاكل سلبية. لذلك ، يحتوي PVS-Studio الآن على تشخيص ، مما سيساعد في العثور على هذه الملفات. يتعلق بجميع اللغات المدعومة (C ، C ++ ، C # ، Java).
أرقام التشخيص للغات مختلفة:
دعنا نلقي نظرة فاحصة على هذه التشخيصات ونكتشف ما الذي يصنعونه. مثال على تعليق بأن المحلل سوف يصدر تحذيرًا إلى:
لمشاريع مغلقة
إذا أضفت ملفًا به مثل هذا الترخيص (في هذه الحالة ، GPL3) في مشروع مغلق ، فسوف يتعين عليك فتح رمز الباقي نظرًا لخصائص هذا الترخيص.
يسمى هذا النوع من التراخيص "
فيروسي " نظرًا لقدرته على الامتداد إلى بقية ملفات المشروع. المشكلة هي أن استخدام ملف واحد على الأقل مع مثل هذا الترخيص في مشروع مغلق يجعل كود المصدر بأكمله مفتوحًا تلقائيًا ويلزم توزيعه مع الملفات الثنائية.
يبحث التشخيص عن تراخيص "الفيروسات" التالية:
- AGPL-3.0
- GPL 2.0
- GPL-3.0
- LGPL-3.0
فيما يلي خيارات ما يمكنك فعله في حالة اكتشاف استخدام الملفات بترخيص الحقوق المتروكة في مشروع مغلق:
- الامتناع عن استخدام هذا الرمز (المكتبة) في مشروعك ؛
- استبدل المكتبة المستخدمة ؛
- اجعل المشروع مفتوح المصدر.
للمشاريع المفتوحة
نحن نفهم أن هذا التشخيص غير مناسب لمشاريع مفتوحة المصدر. يساهم فريق 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 ، يوجد رقم مناظر للتشخيص ، V6071 - لجافا.
تمديد قائمة التراخيص الخطرة
إذا كنت تعرف أنواعًا أخرى من تراخيص "الفيروسات" التي لا يكتشفها برنامج PVS-Studio في هذه المرحلة ، فنحن نرحب بك لإعلامنا من خلال نموذج التعليقات. سنضيفهم في الإصدار التالي.
تشخيصات جديدة
C ، C ++ (عام)
- V1040 . خطأ مطبعي محتمل في الهجاء لاسم ماكرو محدد مسبقا.
- V1041 . تتم تهيئة عضو الفئة مع الإشارة المتدلية.
- V1042 . تم وضع علامة على هذا الملف برخصة الحقوق المتروكة ، والتي تتطلب منك فتح شفرة المصدر المشتقة.
- V1043 . يتم تعريف متغير كائن عمومي في الرأس. سيتم إنشاء نسخ متعددة منه في جميع وحدات الترجمة التي تتضمن ملف الرأس هذا.
أود إيلاء اهتمام خاص للتشخيص برقم
V1040 . لقد تمكنا من العثور على خطأ مثير للاهتمام في مكتبة مشروع CMake المعروف حتى في المرحلة التجريبية:
V1040 خطأ مطبعي محتمل في الهجاء لاسم ماكرو محدد مسبقًا. يشبه الماكرو '__MINGW32_' '__MINGW32__'. winapi.h 4112
#if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif
هناك خطأ مطبعي في اسم
__MINGW32_ . في النهاية ، هناك حرف تسطير واحد مفقود. إذا قمت بالبحث في الكود بهذا الاسم ، يمكنك أن ترى أن الإصدار الذي يتكون من حرفين تسطير على كلا الجانبين يستخدم في المشروع:
يمكنك التحقق من جميع الأخطاء التي تم العثور عليها في مشروع 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 # ، أضفنا تقييمًا للقيم المكتوبة / المكتوبة من أدوات الملكية والمستضعفين ، وكذلك من أساليب المزامنة.
نحن نعمل حاليًا على تحسين قيم حقول المراقبة وخصائص الكائنات عند انتقالها إلى الطرق ، وكذلك مراقبة محتويات turples. ستكون هذه التحسينات متاحة في الإصدار التالي للمحلل.
جافا
- 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 ، حيث يمكن استخدامه بشكل مفضل لبعض السيناريوهات.
تبدو صفحة الإعدادات هكذا:
عند تعيين التكوينات بطريقتين ، تكون الإعدادات المحددة في ملف
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 فقط لأنه دعا محول التقرير تلقائيًا وفعل ذلك فقط لنظام Windows. في PVS-Studio 7.04 ، يدعم المكون الإضافي فقط تقارير HTML التي يجب إنشاؤها في خطوة واحدة ، ولكن هذا المقياس جعل البرنامج المساعد متقاطعًا.
تحذيرات NG المساعدبالنسبة لـ Jenkins ، يوجد مكون إضافي مفيد من برنامج
Warnings Next Generation Plugin لعرض نتائج التحليل من الأدوات المختلفة. لقد أضفنا مؤخرًا دعم PVS-Studio فيه. أصبحت القدرة على تحميل نتائج تحليل PVS-Studio باستخدام هذا البرنامج المساعد متاحة في الإصدار
6.0.0 ، وتزامن صدوره مع إصدار الإصدار 7.04 من PVS:
تحسينات أخرى
PVS-Studio_Cmdيحتوي PVS-Studio_Cmd.exe الآن على وضع تشغيل خاص - بيانات الاعتماد. يمكّنك هذا الوضع من إنشاء ملف إعدادات وإدخال معلومات الترخيص دون استخدام واجهة المستخدم الرسومية (على سبيل المثال ، البرنامج المساعد Visual Studio أو الأداة المساعدة C و C ++ Monitor UI). يكون هذا الوضع مناسبًا بشكل خاص عند استخدامه على خادم بناء (حيث قد تكون أدوات واجهة المستخدم الرسومية غائبة) ، في حاويات ، عند الدمج مع حلول السحابة.
تحليل مشاريع المحركات غير الواقعيةأضفنا الخيار
AutoloadUnrealEngineLog في البرنامج المساعد PVS-Studio لبرنامج Visual Studio والذي يتيح لك تحميل تقرير المحلل تلقائيًا في نافذة الإخراج PVS-Studio بعد التحليل. بدون هذا الخيار ، يجب تحميل السجل يدويًا من خلال قائمة المكونات الإضافية.
يصف قسم الوثائق أيضًا "
تحليل مشاريع Unreal Engine " تغييرات نصوص البناء القياسية التي تسمح لك بالبناء والتحليل في إجراء واحد. بدون تعديلات البرامج النصية (عند إضافة العلامة
-StaticAnalyzer = PVSStudio لإطلاق الوسائط) ، يتم تحليل المشروع فقط وليس بناءه.
CLMonitorبالنسبة للأداة المساعدة CLMonitor ، أضفنا القدرة على مراقبة عمليات التحويل البرمجي لعملية محددة. سيتيح لك ذلك مراقبة عمليات التحويل البرمجي ، المرتبطة فقط بمشروع معين ، حتى أثناء عمليات البناء المتوازية لعدة مشاريع. للعمل في هذا الوضع ، يتم استخدام الإشارات
--parentProcessID٪ PID٪ (تراقب CLMonitor العمليات المرتبطة بالطفل المحدد) - - ويتم
استخدام (مرفق CLMonitor العمليات المتعلقة بالأطفال بوحدة التحكم الحالية).
ص ف استوديو محللتتم إضافة علامة
--ignore-ccache في الأداة المساعدة
pvs-studio-analys ، والتي تهدف إلى التحقق من المشروعات في Linux و macOS:
pvs-studio-analyzer analyze ... --ignore-ccache ...
إذا تم استخدام الأداة المساعدة
ccache في إنشاء مشروع ، فإن PVS-Studio يعمل في وضع التحليل التزايدي. للتحقق من المشروع بأكمله دون إعادة تعيين ذاكرة التخزين المؤقت لأداة
ccache ، اختر هذه العلامة.
روابط إضافية
اشترك لتكون على اطلاع حول منشوراتنا الجديدة:
- تويتر: Code_Analysis
- Youtube: PVS-Studio
- الفيسبوك: StaticCodeAnalyzer
- Instagram: pvsstudio
- برقية: PVS-Studio
- RSS: viva64-blog-en
PVS استوديو:
- PVS-Studio صفحة المنتج
- تحميل
- توثيق
- عملاء