Musim panas bukan hanya musim liburan, tetapi juga saat kerja yang bermanfaat. Hari-hari cerah begitu berenergi sehingga mereka memiliki energi yang cukup untuk berjalan-jalan dan melakukan banyak kode. Rilis musim panas kedua dari PVS-Studio 7.04 ternyata cukup besar, jadi kami menyampaikan kepada Anda sebuah siaran pers di mana kami akan membicarakan semuanya.
PVS-Studio adalah alat untuk mendeteksi kesalahan dan kerentanan potensial dalam kode sumber program yang ditulis dalam C, C ++, C # dan Java. Ini berjalan pada Windows, Linux, dan macOS.
Kemampuan penganalisa ditunjukkan dengan baik oleh
kumpulan luas
kesalahan dalam kode yang kami temukan selama
verifikasi berbagai proyek terbuka.
Kami memberi Anda gambaran tentang fitur-fitur baru yang termasuk dalam rilis PVS-Studio 7.04.
Cari file dengan lisensi Copyleft
Pengembang dari mana mereka hanya tidak mendapatkan kode, mengerjakan tugas. Sumber populer untuk kode Salin-Tempel adalah situs Stackoverflow dan sejenisnya. Tetapi mungkin ada situasi di mana programmer mengambil kode dari proyek Open Source dan tidak memeriksa persyaratan lisensi. Dengan demikian, beberapa file dari proyek Open Source dengan lisensi Copyleft, mis. berkewajiban untuk membuat semua kode proyek publik. Di perusahaan dengan jumlah karyawan yang besar, ini sulit untuk dilacak, dan risiko serta masalah bisa menjadi serius karena tindakan tersebut. Jadi, dalam PVS-Studio untuk semua bahasa yang didukung (C, C ++, C #, Java), diagnostik telah muncul yang akan membantu untuk menemukan file tersebut.
Nomor diagnostik untuk berbagai bahasa:
Mari kita membahas diagnostik ini secara lebih rinci dan menganalisis untuk apa mereka dibuat. Contoh komentar di mana penganalisa akan mengeluarkan peringatan:
Untuk proyek tertutup
Jika Anda menambahkan file dengan lisensi tersebut (GPL3 dalam kasus ini) ke proyek tertutup, maka sisa kode sumber perlu dibuka, karena sifat dari lisensi ini.
Jenis lisensi copyleft ini disebut lisensi "
viral ", karena kemampuannya untuk menyebar ke file proyek lainnya. Masalahnya adalah bahwa menggunakan setidaknya satu file dengan lisensi serupa dalam proyek tertutup secara otomatis membuat semua kode sumber terbuka dan mengharuskan Anda untuk mendistribusikannya bersama dengan file biner.
Diagnostics mencari lisensi "viral" berikut:
- AGPL-3.0
- GPL-2.0
- GPL-3.0
- LGPL-3.0
Ada opsi berikut, apa yang dapat Anda lakukan ketika Anda menemukan penggunaan file dengan lisensi copyleft dalam proyek tertutup:
- Menolak untuk menggunakan kode ini (perpustakaan) di proyek Anda;
- Ganti perpustakaan yang digunakan;
- Buat proyek Anda terbuka.
Untuk proyek sumber terbuka
Kami memahami bahwa diagnosis ini tidak sesuai untuk proyek sumber terbuka. Tim PVS-Studio mempromosikan pengembangan proyek terbuka, membantu memperbaiki
kesalahan di dalamnya
, dan menyediakan
opsi lisensi gratis. Namun, produk kami adalah solusi B2B dan karenanya diagnostik ini diaktifkan secara default.
Jika kode Anda didistribusikan di bawah salah satu lisensi copyleft di atas, maka Anda dapat menonaktifkan diagnostik ini dengan cara berikut (untuk C \ C ++ itu adalah V1042):
- Jika Anda menggunakan plug-in PVS-Studio untuk Visual Studio, maka dengan masuk ke Pilihan> PVS-Studio> Kesalahan yang Dapat Dideteksi> 1.General Analysis> V1042, Anda dapat menonaktifkan tampilan diagnostik ini di jendela output analyzer. Kerugian dari metode ini adalah bahwa kesalahan masih akan ditulis ke log analyzer ketika disimpan (atau jika analisis diluncurkan dari baris perintah). Oleh karena itu, ketika membuka log seperti itu di komputer lain atau mengonversi hasil analisis ke format lain, pesan yang dinonaktifkan dengan cara ini dapat muncul lagi.
- Jika Anda tidak menggunakan plugin, Anda ingin memblokir aturan untuk seluruh perintah atau menghapus pesannya dari laporan analisa, maka Anda dapat menambahkan komentar "// - V :: 1042" ke file konfigurasi (.pvsconfig) atau ke salah satu file header global. Untuk pengembang yang menggunakan Visual C ++, opsi yang baik adalah menambahkan komentar ini ke file stdafx.h. Komentar ini memberi tahu penganalisa untuk menonaktifkan diagnostik V1042. Untuk informasi lebih lanjut tentang menonaktifkan diagnostik menggunakan komentar, lihat dokumentasi .
- Jika utilitas Plog Converter digunakan untuk mengonversi laporan, Anda dapat mematikan diagnostik menggunakan tombol "-d".
Untuk C #, itu berarti V3144, masing-masing, dan untuk Java - V6071.
Menambahkan ke daftar lisensi berbahaya
Jika Anda juga mengetahui jenis lisensi "viral" yang saat ini tidak terdeteksi oleh alat, maka Anda dapat memberi tahu kami tentang hal itu melalui
formulir umpan balik . Dan kami akan menambahkan identitas mereka di rilis berikutnya.
Diagnostik baru
C, C ++ (Umum)
- V1040 . Kemungkinan salah ketik dalam pengejaan nama makro yang telah ditentukan.
- V1041 . Anggota kelas diinisialisasi dengan referensi menggantung.
- V1042 . File ini ditandai dengan lisensi copyleft, yang mengharuskan Anda untuk membuka kode sumber yang diturunkan.
- V1043 . Variabel objek global dideklarasikan di header. Beberapa salinannya akan dibuat di semua unit terjemahan yang menyertakan file header ini.
Saya juga ingin menyebutkan diagnostik dengan nomor
V1040 . Bahkan dalam status beta, dia sudah menemukan kesalahan menarik di perpustakaan proyek CMake yang terkenal:
V1040 Kemungkinan salah ketik dalam ejaan nama makro yang telah ditentukan sebelumnya. Makro '__MINGW32_' mirip dengan '__MINGW32__'. winapi.h 4112
#if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif
Di sini mereka membuat salah ketik nama
__MINGW32_ . Pada akhirnya, satu garis bawah hilang. Jika Anda mencari berdasarkan kode dengan nama ini, Anda dapat memastikan bahwa proyek tersebut benar-benar menggunakan versi dengan dua garis bawah di kedua sisi:
Anda dapat melihat semua kesalahan yang ditemukan dalam proyek CMake di artikel "
CMake: kasus ketika kualitas kodenya tidak dapat dimaafkan oleh proyek ."
C, C ++ (MISRA)
- V2551 . Misra. Variabel harus dideklarasikan dalam lingkup yang meminimalkan visibilitasnya.
- V2552 . Misra. Ekspresi dengan tipe dasar enum harus memiliki nilai yang sesuai dengan enumerator enumerasi.
- V2553 . Misra. Operator minus unary tidak boleh diterapkan pada ekspresi dari tipe yang tidak ditandatangani.
- V2554 . Misra. Ekspresi yang mengandung kenaikan (++) atau penurunan (-) tidak boleh memiliki efek samping lain.
- V2555 . Misra. Ekspresi pemindahan yang salah.
- V2556 . Misra. Penggunaan pointer ke FILE saat aliran terkait telah ditutup.
- V2557 . Misra. Operand sizeof () operator seharusnya tidak memiliki efek samping lain.
C #
- V3140 Accessor properti menggunakan bidang dukungan yang berbeda.
- V3141 . Ekspresi di bawah 'throw' adalah null potensial, yang dapat menyebabkan NullReferenceException.
- V3142 . Kode yang tidak dapat dijangkau terdeteksi. Mungkin saja ada kesalahan.
- V3143 . Parameter 'nilai' ditulis ulang di dalam setter properti, dan tidak digunakan setelah itu.
- V3144 . File ini ditandai dengan lisensi copyleft, yang mengharuskan Anda untuk membuka kode sumber yang diturunkan.
- V3145. Dereferensi tidak aman dari target WeakReference. Objek tersebut dapat berupa sampah yang dikumpulkan sebelum properti 'Target' diakses.
Juga di penganalisa C #, perhitungan nilai pengembalian / tulis dari get dan set metode akses properti dan metode async telah ditambahkan.
Saat ini kami sedang berupaya meningkatkan pelacakan nilai bidang dan properti objek saat meneruskannya ke metode, serta melacak konten tupel. Perbaikan ini akan tersedia dalam rilis analisa berikutnya.
Jawa
- V6068 Penggunaan BigDecimal yang mencurigakan.
- V6069 Penugasan shift kanan yang tidak ditandatangani dari nilai 'byte' / 'pendek' negatif.
- V6070 Sinkronisasi tidak aman pada suatu objek.
- V6071 File ini ditandai dengan lisensi copyleft, yang mengharuskan Anda untuk membuka kode sumber yang diturunkan.
SonarQube 7.9 LTS
Rilis yang ditunggu-tunggu
Hampir 2 tahun telah berlalu sejak rilis terakhir versi LTS SonarQube 6.7. Versi baru diharapkan dengan semangat khusus, dimulai dengan SQ 7.x, dan ketika LTS dirilis, pengguna mulai aktif beralih ke sana, yang menyebabkan berbagai masalah. SQ 7.9.1 LTS segera dirilis dengan perbaikan kecil, dan pengembang plugin pihak ketiga juga menyiapkan patch.
Untungnya, dalam plugin PVS-Studio hanya ada satu masalah kecil yang terkait dengan transisi ke Java 11, yang kami perbaiki dengan cepat, dan pelanggan kami segera beralih ke versi yang berfungsi.
Kami juga menjaga kompatibilitas dengan SonarQube versi lama, dan daftar versi yang didukung sekarang terlihat seperti ini:
SonarQube 6.7 LTS dan lebih tinggi .
Lebih banyak plugin bahasa yang didukung
Plugin PVS-Studio hanya mengubah hasil analisis ke dalam format database SonarQube. Dengan kata lain, itu hanya memuat hasil analisis PVS-Studuio ke dalam SQ. Tetapi untuk pengoperasian penuh utilitas SonarScanner, plug-in untuk bahasa pemrograman harus diinstal. Kami tidak mulai mengembangkan apa yang sudah ada, oleh karena itu kami hanya menambahkan dukungan untuk plugin populer yang sudah ada. Dalam versi ini, kami menambahkan kompatibilitas dengan Komunitas Sonar C dan plugin bahasa SonarCFamily.
Seluruh daftar plugin bahasa yang didukung terlihat seperti ini:
Untuk mengunduh hasil analisis PVS-Studio, cukup menginstal setidaknya satu plugin dari daftar ini. Sebagian besar pengguna hanya perlu menginstal Komunitas Sonar C ++, SonarC # atau SonarJava. Plugin lain mungkin diperlukan untuk proyek yang lebih spesifik.
Saat memilih plugin, perlu diperhitungkan fakta bahwa plugin Komunitas tidak kompatibel dengan SonarCFamily. Tetapi jika Anda hanya menggunakan Edisi Komunitas SonarQube, maka masalah seperti itu tidak akan muncul.
Halaman pengaturan baru
Sebelumnya, Anda hanya bisa mengonfigurasi analisator melalui file konfigurasi
sonar-project.properties . Tidak ada keluhan tentang metode ini. Sangat nyaman dan digunakan dalam 99% kasus, tetapi kami juga membuat halaman pengaturan di
Administrasi> Konfigurasi> PVS-Studio pada server SonarQube, karena Juga nyaman untuk digunakan dalam beberapa skenario.
Halaman pengaturan terlihat seperti ini:
Saat mengatur pengaturan dengan dua cara, prioritas diberikan kepada yang ditentukan dalam file
properti sonar -
project.prop .
Plugin untuk IntelliJ IDEA
Rilis versi IntelliJ IDEA dan PVS-Studio baru berbeda dalam tanggal, dan baru-baru ini ada situasi ketika IntelliJ IDEA 192. * dirilis, tetapi plugin PVS-Studio tidak diinstal di sana. Dalam rilis ini, kami menambahkan dukungan untuk IntelliJ IDEA versi terbaru, dan juga melakukan perbaikan untuk menghindari masalah serupa di masa mendatang.
Pengaya untuk Jenkins
Plugin PVS-StudioPlugin PVS-Studio dimaksudkan untuk menerbitkan hasil analisa PVS-Studio dalam sistem integrasi berkelanjutan Jenkins dalam format HTML. Sebelumnya, plugin ini hanya tersedia untuk pengguna Windows, seperti disebut konverter laporan secara otomatis dan melakukannya hanya untuk Windows. Di PVS-Studio 7.04, plugin hanya mendukung laporan HTML, yang harus dibuat dalam langkah terpisah, tetapi ini memungkinkan plug-in untuk menjadi cross-platform.
Peringatan Plugin NGUntuk Jenkins, ada
plugin Plugin Next Generation yang berguna untuk melihat hasil analisis dari berbagai alat. Baru-baru ini, kami menambahkan dukungan untuk PVS-Studio di dalamnya. Kemampuan untuk memuat hasil analisis PVS-Studio menggunakan plugin ini tersedia dalam versi
6.0.0 , rilis yang bertepatan dengan rilis PVS-Studio 7.04:
Perbaikan lainnya
PVS-Studio_CmdMode operasi khusus - kredensial telah ditambahkan ke
PVS-Studio_Cmd.exe . Mode ini memungkinkan Anda untuk membuat file pengaturan dan memasukkan informasi lisensi tanpa menggunakan antarmuka GUI (misalnya, plug-in untuk Visual Studio atau utilitas C dan C ++ UI Compiler Monitoring). Mode ini sangat relevan ketika digunakan pada server build (di mana utilitas GUI mungkin tidak dijelaskan), dalam wadah, dan ketika terintegrasi dengan solusi cloud.
Analisis Proyek Mesin UnrealOpsi
AutoloadUnrealEngineLog ditambahkan ke plug-in PVS-Studio untuk Visual Studio, dengan penyertaan yang memungkinkan Anda untuk memuat laporan analisis secara otomatis ke jendela output PVS-Studio setelah melewati analisis. Tanpa opsi ini, memuat log harus dilakukan secara manual melalui menu plugin.
Juga, di bagian dokumentasi "
Menguji Proyek Mesin Tidak Nyata ", perubahan pada skrip perakitan standar dijelaskan yang akan memungkinkan perakitan dan analisis dalam satu tindakan. Tanpa memodifikasi skrip (saat menambahkan
flag -StaticAnalyzer = PVSStudio ke argumen startup), hanya proyek yang dianalisis, tanpa membangunnya.
CLMonitorUntuk utilitas CLMonitor, kemampuan untuk melacak peluncuran kompiler untuk proses tertentu telah ditambahkan. Ini akan memungkinkan Anda untuk melacak awal kompiler yang hanya terkait dengan proyek tertentu, bahkan ketika membangun beberapa proyek secara paralel. Untuk bekerja dalam mode ini, flag
--parentProcessID% PID% (monitor CLMonitor proses yang anak-anak relatif terhadap yang ditentukan) dan
--attach (monitor monitor proses yang relatif anak-anak dengan konsol saat ini) digunakan.
pvs-studio-analyzerBendera --ignore-ccache telah ditambahkan ke utilitas
pvs-studio-analyzer , yang dirancang untuk menguji proyek-proyek di Linux dan macOS:
pvs-studio-analyzer analyze ... --ignore-ccache ...
Jika utilitas
ccache digunakan dalam perakitan proyek, maka PVS-Studio beroperasi dalam mode analisis tambahan. Untuk memeriksa proyek sepenuhnya tanpa menjatuhkan
cache utilitas
ccache , gunakan flag ini.
Tautan situs
Untuk mengikuti publikasi baru kami, kami mengundang Anda untuk berlangganan kepada kami:
- Twitter: pvsstudio_rus
- VKontakte: Penganalisa PVS-Studio
- Facebook: @StaticCodeAnalyzer
- Instagram: @pvsstudio_rus
- Telegram: PVS-Studio rus
- RSS: viva64-blog-en
PVS-Studio:
- Halaman produk
- Unduh
- Dokumentasi
- Pelanggan

Jika Anda ingin berbagi artikel ini dengan audiens yang berbahasa Inggris, silakan gunakan tautan ke terjemahan: Svyatoslav Razmyslov.
PVS-Studio 7.04 .