Banyak artikel kami berfokus pada apa saja, tetapi bukan alat PVS-Studio itu sendiri. Padahal kami melakukan banyak hal agar penggunaannya nyaman bagi pengembang. Namun demikian, upaya kami seringkali tersembunyi di balik layar. Saya memutuskan untuk memperbaiki situasi ini dan memberi tahu Anda tentang plugin PVS-Studio untuk Visual Studio. Jika Anda menggunakan Visual Studio, artikel ini untuk Anda.
Apa itu analisis kode statis dan mengapa kita membutuhkannya
Analisis kode statis adalah proses mendeteksi kesalahan dan kekurangan dalam kode sumber program. Analisis statis dapat dianggap sebagai proses peninjauan kode otomatis. Ulasan
kode bersama adalah metodologi yang luar biasa. Namun, itu memiliki kelemahan yang signifikan - biaya tinggi. Penting untuk mengumpulkan beberapa programmer untuk meninjau kode yang baru ditulis atau ditulis ulang setelah modifikasi dibuat di dalamnya.
Di satu sisi, kami ingin meninjau kode secara teratur. Di sisi lain, itu terlalu mahal. Solusi kompromi adalah alat analisis statis. Mereka dengan sungguh-sungguh menganalisis kode sumber program dan memberikan rekomendasi kepada programmer untuk meninjau fragmen kode tertentu. Tentu saja, sebuah program tidak akan menggantikan tinjauan kode lengkap, yang dilakukan oleh tim pengembang. Namun, rasio harga / manfaat membuat analisis statis cukup praktis, diterapkan oleh banyak perusahaan. Jika pembaca tertarik pada angka yang tepat, saya sarankan Anda membaca artikel "
PVS-Studio ROI ".
Ada banyak analisa kode statis komersial dan gratis. Daftar besar alat analisis statis tersedia di Wikipedia:
Daftar alat untuk analisis kode statis . Daftar bahasa yang memiliki penganalisa kode statis cukup besar (C, C ++, C #, Java, Ada, Fortran, Perl, Ruby, ...). Tidak perlu dikatakan lagi, kami akan memberi tahu Anda tentang
alat analisa PVS-Studio.
Keuntungan utama dari analisis kode statis adalah kesempatan untuk sangat mengurangi biaya menghilangkan cacat dalam suatu program. Semakin dini kesalahan terdeteksi, semakin murah untuk memperbaikinya. Jadi, menurut buku "Kode Lengkap" oleh McConnell, deteksi kesalahan pada tahap pengujian kode sepuluh kali lebih mahal daripada pada tahap mendesain kode (coding):
Gambar 1. Biaya rata-rata perbaikan cacat tergantung pada waktu penampilan dan deteksi dalam kode (data dalam tabel diambil dari buku 'Kode Lengkap' oleh S. McConnell)Alat analisis statis memungkinkan mendeteksi sejumlah besar kesalahan, khas untuk tahap perancangan kode, yang secara signifikan mengurangi biaya pengembangan proyek secara keseluruhan. Sebagai contoh, penganalisa kode statis PVS-Studio dapat dijalankan dalam mode latar belakang tepat setelah kompilasi dan dalam hal menemukan kesalahan potensial akan memberi tahu programmer. Lebih lanjut tentang mode ini akan diberikan di bawah ini.
PVS-Studio Static Code Analyzer
PVS-Studio adalah penganalisa statis yang mendeteksi bug dan potensi kerentanan dalam kode sumber aplikasi di C, C ++ (ekstensi yang didukung lainnya:
C ++ / CLI dan
C ++ / CX ), C # dan Java pada platform Windows, Linux dan macOS. Alat analisa ini terintegrasi secara luar biasa ke dalam Visual Studio 2010 - 2019 dan IDE IDE IntelliJ. Pada artikel ini, kita akan melihat lebih dekat pada PVS-Studio, memeriksa kode dalam bahasa C, C ++, dan C #. Anda dapat membaca tentang cara menggunakan PVS-Studio untuk memeriksa kode Java di IntelliJ IDEA di
sini .
Setelah instalasi PVS-Studio dan integrasinya dalam Visual Studio, pengguna mendapatkan item tambahan "PVS-Studio" di menu utama dan jendela untuk bekerja dengan pesan kesalahan:
Gambar 2. Item utama yang ditambahkan analisa PVS-Studio saat berintegrasi ke Visual Studio.Pengaturan awal
Alat analisa siap bekerja segera setelah instalasi. Dalam kebanyakan kasus, Anda tidak perlu mengonfigurasi apa pun untuk menjalankan pertama. Satu-satunya penyiapan yang mungkin Anda butuhkan di awal adalah pengecualian perpustakaan pihak ketiga. Anda tidak akan memperbaiki apa pun di file asli, misalnya, perpustakaan jpeg, jadi tidak perlu memeriksanya. Selain itu, tidak termasuk folder yang tidak perlu akan mempercepat analisis proyek. Pengecualian direktori ditetapkan di sini: PVS-Studio> Opsi ...> Jangan Periksa File> PathMasks (lihat Gambar 3).
Gambar 3. Mengedit daftar direktori yang tidak akan diperiksa oleh penganalisa.Jika dalam nama file lengkap ada salah satu nama yang ditentukan, analisis tidak akan dilakukan untuk file ini. Secara default, nama beberapa direktori sudah termasuk dalam daftar. Namun, dalam proyek Anda, direktori dengan pustaka ZLib dapat disebut bukan "zlib", tetapi, misalnya, "zip_lib". Karena itu, daftar ini harus diedit. Untuk mulai mengedit, Anda perlu mengklik tombol dengan tiga poin.
Contoh topeng yang dapat diterima untuk daftar PathMasks:
- c: \ Libs \ - semua file dalam direktori ini dan subdirektori akan dikecualikan.
- \ Libs \ atau * \ Libs \ * - semua file dalam direktori, jalur yang berisi subdirektori "Libs" akan dikecualikan. Jika simbol "*" tidak ditentukan, mereka akan ditambahkan secara otomatis, sehingga kedua opsi sama.
- Libs atau * Libs * - semua file, jalur yang berisi subdirektori, nama yang sama dengan atau berisi 'Libs'. Juga dalam hal ini semua file, yang mengandung Libs dalam namanya, misalnya, c: \ project \ mylibs.cpp, akan dikecualikan. Untuk menghindari kebingungan, kami sarankan untuk selalu menggunakan garis miring.
Selain mengecualikan seluruh direktori, Anda dapat mengatur masker untuk mengecualikan file individual. Untuk melakukan ini, ada pengaturan FileNameMasks. Cari tahu lebih lanjut tentang cara bekerja dengan daftar pengecualian dalam dokumentasi:
Pengaturan: Jangan Periksa File .
Pemeriksaan proyek
Ketika Anda menyelesaikan pengaturan awal, Anda dapat mulai memeriksa proyek. PVS-Studio untuk Visual Studio mendukung pemeriksaan proyek-proyek C ++ (.vcxproj) dan C # (.csproj). Anda juga dapat segera mencoba memeriksa seluruh solusi, yang berisi proyek jenis ini. Untuk melakukan ini, pilih item menu Extensions Extensions> PVS-Studio> Check> Solution (Lihat Gambar 4).
Gambar 4. Periksa solusi menggunakan penganalisis PVS-Studio.Jika ada beberapa kesulitan dengan cek, kami sarankan merujuk ke bagian "
PVS-Studio: Pemecahan Masalah " di situs web kami. Ini bukan rekomendasi bodoh dalam semangat "periksa apakah steker dimasukkan ke dalam soket." Bagian ini menjelaskan situasi khas permintaan pengguna dan opsi saran.
Bekerja dengan Daftar Pesan Diagnostik
Setelah dicentang, semua pesan diagnostik akan ditampilkan di jendela khusus. Jendela memiliki banyak komponen kontrol. Semuanya berfungsi untuk menampilkan pesan diagnostik yang persis menarik bagi pengguna. Namun, pada saat pertama jendela mungkin terlihat rumit. Mari kita lihat semua komponen kontrol (lihat Gambar 5).
Gambar 5. Jendela dengan pesan diagnostik.- Nah, ini jendela PVS-Studio.
- Menu tambahan. Memungkinkan Anda mengakses opsi seperti menandai peringatan sebagai pesan palsu, menyembunyikan, menambahkan file ke pengecualian (baca tentang ini di bawah).
- Tombol ini memungkinkan pesan "ada yang salah." Misalnya, salah satu file tidak dapat diproses sebelumnya.
- Pergi ke pesan sebelumnya / berikutnya. Ini membuka file yang relevan dan kursor ditempatkan pada baris dengan potensi kesalahan. Anda juga selalu dapat memilih diagnostik dari daftar dengan klik dua kali. Anda dapat mengatur tombol pintas untuk transisi ke pesan sebelumnya / berikutnya. Secara default, ini Alt + '[' dan Alt + ']'.
- Tombol yang menyertakan peringatan dari berbagai tingkat. Dua level diagnostik pertama sekarang diaktifkan. Pada saat yang sama, jendela menampilkan 90 peringatan dari tingkat pertama, 6700 peringatan dari tingkat kedua. Level pesan ditampilkan di sisi kiri jendela sebagai strip, sesuai dengan warna strip pada tombol level yang cocok. Mengapa ada begitu banyak pemicuan? Mengapa 6700 peringatan? Untuk menunjukkan kemampuan antarmuka, seperangkat aturan MISRA diaktifkan, yang tidak sesuai untuk aplikasi reguler :).
- Perangkat aturan diagnostik aktif. Umum - diagnostik umum, Optimasi - optimasi mikro, diagnostik 64-bit - 64-bit, MISRA - MISRA C dan diagnostik standar MISRA C ++. Semua jenis peringatan sekarang ditampilkan di jendela.
- Indikator menunjukkan jumlah peringatan, ditandai sebagai false (Alarm Palsu). Anda dapat mengaktifkan / menonaktifkan tampilan pesan yang ditandai dalam pengaturan - PVS-Studio> Opsi ...> Pengaturan Analisis Spesifik> Tampilkan Alarm Palsu.
- Filter cepat. Misalnya, Anda dapat mempersingkat daftar menjadi hanya pesan dengan kode V501 dan yang ada di proyek XYZ.
- Beberapa diagnostik menyarankan untuk memperhatikan bukan hanya satu, tetapi beberapa baris. Dalam kasus ini, titik muncul di sebelah nomor baris. Mengkliknya, Anda dapat melihat daftar garis dan memilih salah satunya.
Tabel dengan pesan diagnostik dibagi ke dalam kolom berikut:
- Level Tingkat kepastian yang menunjukkan bahwa kesalahan, bukan bau kode ditemukan. Level 1 (merah) menunjukkan tempat paling mencurigakan. Level 3 (kuning) mungkin merupakan ketidaktepatan yang tidak esensial dalam kode.
- Bintang Itu tidak memiliki tujuan tertentu. Pengguna dapat menafsirkannya sesuai keinginan. Misalnya, pengguna dapat menandai peringatan yang paling menarik untuk analisis yang lebih cermat. Analogi ini adalah tanda bintang email di klien surat seperti Thunderbird atau Outlook.
- ID Nomor pesan unik. Ini bisa berguna ketika berhadapan dengan daftar besar. Misalnya, Anda dapat pergi ke pesan dengan nomor tertentu (lihat "Navigasikan ke ID ..." di menu konteks ).
- Kode Kode pesan. Jika Anda mengkliknya, Anda akan membuka halaman yang menjelaskan peringatan tersebut.
- CWE. Memungkinkan Anda mengidentifikasi peringatan dengan kode CWE (Common Weakness Enumeration). Ketika Anda mengklik tautan, Anda dapat melihat deskripsi CWE ini di jaringan.
- Misra. Sama seperti di atas, tetapi untuk standar MISRA .
- Pesan Teks pesan diagnostik.
- Proyek Nama proyek (Anda dapat menonaktifkan kolom ini menggunakan menu konteks).
- File Nama file.
- Line Nomor baris. Penting! Perhatikan bahwa beberapa garis diakhiri dengan titik-titik. Contoh: "123 (...)". Dengan mengklik nomor ini, Anda akan mendapatkan daftar semua baris kode yang terkait dengan pesan ini. Pada saat yang sama, Anda dapat pergi ke setiap baris dalam daftar.
Ya, sangat melelahkan membaca semuanya. Namun, saya jamin, setelah mulai menggunakannya, Anda akan cepat terbiasa dengan alat tersebut. Dan Anda jarang akan mengklik sesuatu untuk diatur.
Menu Konteks
Jadi, dengan mengklik ganda pada pesan, Anda pergi ke bagian kode yang relevan. Dengan mengklik tombol kanan mouse, menu konteks terbuka.
Menu ini cukup sederhana, dan saya tidak akan mengacaukan artikel dengan deskripsi setiap item. Jika ada sesuatu yang tidak jelas, Anda dapat melihat dokumentasi.
Meskipun demikian, saya ingin membahas satu fitur yang sangat berguna. Apakah Anda ingat bahwa dalam pengaturan Anda dapat menambahkan folder / file yang akan dikecualikan? Masalahnya adalah menambahkan sesuatu jauh lebih sederhana daripada yang terlihat!
Perhatikan opsi menu "Jangan periksa file dan sembunyikan semua pesan dari ...". Ketika Anda mengkliknya, Anda mendapatkan daftar jalur yang dapat Anda tambahkan ke pengecualian (lihat gambar 6).
Gambar 6. Tidak termasuk file dari cek.Anda dapat memilih file terpisah atau salah satu direktori. Gambar menunjukkan bahwa folder "SDL2-2.0.9 \ src \ haptic \ windows" dipilih. Ini berarti bahwa semua file dalam folder ini dan semua subfolder akan dikeluarkan dari analisis. Terlebih lagi, semua pesan yang terkait dengan file-file ini akan segera menghilang dari daftar. Sangat nyaman. Anda tidak perlu memulai kembali analisis untuk menghapus semua pesan yang terkait dengan tes.
Mode analisis tambahan
Pengantar PVS-Studio tidak akan lengkap, jika kita menyembunyikan salah satu fitur yang paling penting -
analisis kode tambahan .
Semakin dini kesalahan terdeteksi, semakin murah untuk menghilangkannya. Opsi terbaik adalah langsung menyoroti kesalahan dalam teks program yang diedit. Namun, secara teknis sulit dan padat sumber daya. Itu sebabnya PVS-Studio berjalan dalam mode latar belakang ketika kode tetap berhasil dikompilasi. Dengan melakukan hal itu, Anda mencari bug dalam kode yang baru saja diubah. Ikon di area pemberitahuan sistem menunjukkan bahwa analisis sedang berjalan.
Ketika kesalahan ditemukan, jendela sembul muncul, peringatan bahaya (lihat Gambar 7).
Gambar 7. Pesan pop-up, melaporkan bahwa tempat mencurigakan telah ditemukan dalam file yang diedit.Jika Anda mengklik ikon tersebut, Anda akan membuka IDE dengan hasil pemeriksaan proyek (lihat Gambar 2) dan Anda dapat menggali fragmen kode yang mencurigakan.
Bahkan, lebih mudah untuk mencoba bekerja dalam mode ini daripada menggambarkannya. Anda menulis kode seperti sebelumnya. Saat dibutuhkan, alat analisa akan mengganggu Anda. Cobalah!
Kami menggunakan mode ini sepanjang waktu. Ya, kami juga terkadang membuat kesalahan pengkodean. Kemampuan untuk memperbaikinya segera secara signifikan mengurangi waktu untuk mendeteksi cacat dan mencoba memahami mengapa program tidak berperilaku sebagaimana dimaksud. Sangat mengecewakan menghabiskan 15-20 menit debugging untuk akhirnya menemukan kesalahan ketik dalam indeks. Inilah salah satu kasus ketika PVS-Studio menemukan kesalahan dalam PVS-Studio segera setelah muncul dalam kode:
if (in[0] == '\\' && in[1] == '.' && in[1] == '\\') { in += 2; continue; }
Yah, yang paling menarik belum datang. Alat analisa PVS-Studio kadang-kadang bisa jauh lebih berguna daripada ini. Inilah salah satu ulasan tentang penganalisis kami: "
Pengalaman Pengguna Bekerja dengan Penganalisis ". Teks itu membuatku heran.
Biar saya jumlahkan. Analisis tambahan adalah sesuatu yang harus Anda coba. Anda akan menyukainya segera setelah Anda menemukan beberapa kesalahan dalam kode baru.
Kemampuan PVS-Studio
Mari kita singkat. Tidak mungkin menjelaskan secara ringkas semua diagnostik yang tersedia di PVS-Studio. Daftar lengkap diagnostik dan uraian terperinci mereka dapat ditemukan dalam dokumentasi:
Deskripsi bug yang terdeteksi . Mari kita selesaikan tabel di mana diagnostik dikelompokkan berdasarkan jenis. Beberapa diagnostik ada dalam lebih dari satu kelompok. Faktanya adalah klasifikasi itu cukup formal. Sebagai contoh, salah ketik dapat mengakibatkan penggunaan memori yang tidak diinisialisasi. Beberapa kesalahan, sebaliknya, tidak sesuai dengan kelompok mana pun, karena terlalu spesifik. Namun demikian, tabel ini memberikan wawasan tentang fungsionalitas penganalisa kode statis.
Gambar 8. Kemampuan PVS-Studio.Seperti yang Anda lihat, alat analisa yang sangat berguna adalah area seperti mencari bug Copy-Paste. Sangat bagus dalam mendeteksi masalah yang terkait dengan keamanan kode.
Untuk melihat diagnostik ini dalam tindakan, lihat di
pangkalan kesalahan . Kami mengumpulkan semua kesalahan yang kami temukan, memeriksa berbagai proyek sumber terbuka dengan PVS-Studio.
SAST
PVS-Studio adalah alat pengujian keamanan aplikasi statis. Penganalisis dapat mendeteksi potensi kerentanan dalam kode proyek dan menunjukkan pengidentifikasi kesalahan yang sesuai dalam klasifikasi tertentu.
PVS-Studio mendukung klasifikasi kesalahan berikut:
- CWE
- CERT SEI
- Misra
Anda dapat mengaktifkan tampilan kode CWE dengan menu konteks di jendela penganalisa di jalur Tampilkan Kolom> CWE
Gambar 9. Menu konteks dan contoh output CWE.Atau di menu utama (Extensions> PVS-Studio> Tampilkan Kode CWE di Jendela Output)

Gambar 10. Menu ekstensi.Diagnostik MISRA diaktifkan secara terpisah di pengaturan:

Gambar 11. Daftar kesalahan yang terdeteksi.Anda dapat membaca lebih lanjut tentang klasifikasi ini di
sini .
Memeriksa Proyek Dari Baris Perintah
PVS-Studio_Cmd.exe - utilitas untuk memeriksa proyek C ++ / C # Visual Studio (.vcxproj / .csproj) dan solusi .sln dari baris perintah. Dapat bermanfaat untuk mengotomatisasi analisis. Program berada di direktori tempat instalasi dilakukan - secara default adalah 'C: \ Program Files (x86) \ PVS-Studio'.
Program ini memiliki banyak
parameter , tetapi pertama-tama kita hanya perlu 3 di antaranya:
- --target: file proyek atau solusi yang perlu diperiksa.
- --output: file plog di mana laporan harus ditulis.
- --progress: tunjukkan progres pemeriksaan.
Seperti apa penampilannya:

Gambar 12. Output dari program PVS-Studio_Cmd.exe.Setelah berjalan, kami akan mendapatkan file plog dengan laporan, jalur yang kami tentukan dalam opsi yang sedang berjalan. Anda dapat mengonversi laporan ini dalam format lain menggunakan utilitas PlogConverter.exe. Untuk melihat laporan dalam IDE, klik dua kali file plog di finder.
Anda juga dapat membuka file laporan di menu ekstensi melalui jalur Extensions> PVS-Studio> Open / Save> Open Analysis Report ...
Informasi terperinci tentang utilitas dan parameternya dapat ditemukan dalam
dokumentasi .
Penindasan Positif Palsu
Beberapa pesan yang dikeluarkan oleh penganalisa pasti akan salah. Tidak ada yang bisa kita lakukan. Penganalisa statis hanyalah sebuah program yang tidak memiliki kecerdasan buatan dan tidak dapat menentukan apakah itu bug nyata atau tidak.
Untuk melawan positif palsu, penganalisa menyediakan satu set mekanisme yang berbeda. Mereka dirinci dalam bagian dokumentasi berikut:
- Penyetelan yang bagus .
- Metode kasar yang hanya memungkinkan Anda untuk bekerja dengan peringatan yang terkait dengan kode baru atau yang dimodifikasi.
Kesimpulan
Tentu saja, kami tidak memberi tahu Anda semua tentang alat ini. Jika saya menceritakan semuanya, artikel itu akan berubah menjadi dokumentasi. Tujuannya adalah untuk menunjukkan betapa mudahnya bekerja dengan alat di dalam lingkungan Visual Studio. Anda dapat membaca tentang lingkungan dan mode kerja lain dalam dokumentasi dan artikel lain di
situs web kami. Ada banyak hal menarik bagi para programmer. Datang dan berkeliaran.
Perlu dicatat bahwa PVS-Studio tidak hanya berfungsi di lingkungan Microsoft. Kami juga mendukung bahasa Jawa, kami dapat bekerja di Linux dan macOS, mengintegrasikan ke dalam CMake dan banyak lagi. Anda dapat menemukan lebih banyak di
dokumentasi .
Saya berharap Anda kode buruk bugless dan berharap Anda akan menikmati PVS-Studio. Jika ada pertanyaan, kami akan selalu membantu dan memberikan saran.
Menulis kepada kamiTautan tambahan:
- Ulasan kode .
- Analisis Kode Statis .
- Alat analisis kode statis .
- SAST .
- Teknologi yang digunakan dalam analisa PVS-Studio .
- Unduh dan coba PVS-Studio.
- Dukungan Visual Studio 2019 .
- Diskusikan harga alat analisis PVS-Studio untuk tim Anda dan bagaimana cara membelinya: beli PVS-Studio .
- Contoh menggunakan penganalisa statis .
- Jawaban untuk pertanyaan yang sering diajukan di konferensi.
- Cara menjalankan PVS-Studio Java
- Cara menjalankan PVS-Studio di Linux dan macOS