PVS-Studio untuk Visual Studio


Banyak artikel kami dikhususkan untuk apa saja, tetapi tidak untuk alat PVS-Studio itu sendiri. Tetapi kami melakukan banyak hal agar pengembang merasa nyaman untuk menggunakan alat kami. Namun justru inilah yang sering terjadi di balik layar. Saya memutuskan untuk memperbaiki situasi ini dan berbicara tentang plugin PVS-Studio untuk Visual Studio. Jika Anda menggunakan Visual Studio, maka artikel ini adalah untuk Anda.

Apa itu analisis kode statis dan mengapa diperlukan


Analisis kode statis adalah proses mengidentifikasi kesalahan dan kekurangan dalam kode sumber program. Analisis statis dapat dianggap sebagai proses peninjauan kode otomatis. Ulasan kode kolaboratif adalah metodologi yang bagus. Tetapi juga memiliki kelemahan yang signifikan - biaya tinggi. Penting untuk mengumpulkan beberapa programmer secara teratur untuk meninjau kode baru atau meninjau ulang kode setelah membuat rekomendasi.

Di satu sisi, saya ingin meninjau kode secara teratur. Di sisi lain, ini terlalu mahal. Tradeoff adalah alat analisis kode statis. Mereka tanpa lelah memproses kode sumber program dan memberikan rekomendasi programmer untuk lebih memperhatikan bagian-bagian tertentu dari kode. Tentu saja, program tidak menggantikan tinjauan penuh kode yang dijalankan oleh tim programmer. Namun, rasio manfaat / harga menjadikan penggunaan analisis statis praktik yang sangat berguna bagi banyak perusahaan. Jika pembaca tertarik pada nomor tertentu, maka saya mengusulkan untuk berkenalan dengan artikel " PVS-Studio ROI ".

Ada sejumlah besar penganalisis kode statis komersial dan gratis. Daftar besar alat analisis statis tersedia di Wikipedia: Daftar alat untuk analisis kode statis . Daftar bahasa yang ada alat analisis kode statis juga cukup besar (C, C ++, C #, Java, Ada, Fortran, Perl, Ruby, ...). Secara alami, kami akan memberi tahu Anda tentang alat analisa PVS-Studio .

Keuntungan utama dari analisis statis adalah kemungkinan pengurangan yang signifikan dalam biaya menghilangkan cacat dalam program. Semakin awal kesalahan diidentifikasi, semakin rendah biaya untuk memperbaikinya. Jadi menurut data yang disediakan dalam buku McConnell "Kode Sempurna", memperbaiki kesalahan pada tahap pengujian akan menelan biaya sepuluh kali lebih banyak daripada pada tahap desain (menulis):

Gambar 1. Biaya rata-rata perbaikan cacat tergantung pada waktu pengenalan dan deteksi mereka (data untuk tabel diambil dari buku oleh S. McConnell & quot; Kode Sempurna & quot;).

Gambar 1. Biaya rata-rata memperbaiki cacat tergantung pada waktu pengenalan dan deteksi mereka (data untuk tabel diambil dari buku oleh S. McConnell "Kode Sempurna").

Alat analisis statis memungkinkan Anda mengidentifikasi sejumlah besar kesalahan dalam fase desain, yang secara signifikan mengurangi biaya pengembangan seluruh proyek. Misalnya, penganalisis kode statis PVS-Studio dapat dimulai di latar belakang segera setelah kompilasi, dan jika kesalahan potensial ditemukan, itu akan memberi tahu programmer. Lebih lanjut tentang mode ini akan dijelaskan di bawah ini.

PVS-Studio Static Code Analyzer


PVS-Studio adalah penganalisa statis yang mengidentifikasi kesalahan dan kerentanan potensial dalam kode sumber aplikasi di C, C ++ (ekstensi juga didukung: C ++ / CLI dan C ++ / CX ), C # dan Java pada platform Windows, Linux dan macOS. Alat analisis terintegrasi sempurna dengan Visual Studio 2010 - 2019 dan IntelliJ IDEA. Pada artikel ini kita akan melihat lebih dekat karya PVS-Studio untuk memeriksa kode dalam C, C ++ dan C #. Anda dapat membaca tentang cara menggunakan PVS-Studio untuk menguji kode Java di IntelliJ IDEA di sini .

Setelah menginstal PVS-Studio dan mengintegrasikan ke dalam Visual Studio, pengguna menerima item "PVS-Studio" tambahan di menu utama dan jendela untuk bekerja dengan pesan diagnostik (lihat Gambar 2).

Gambar 2. Elemen utama yang ditambahkan oleh penganalisa PVS-Studio selama integrasi ke dalam Visual Studio.

Gambar 2. Elemen utama yang ditambahkan oleh penganalisa PVS-Studio selama integrasi ke dalam Visual Studio.

Pengaturan awal


Alat analisa siap dioperasikan segera setelah instalasi. Dalam kebanyakan kasus, Anda tidak perlu mengonfigurasi apa pun untuk menyelesaikan proses pertama. Satu-satunya pengaturan yang mungkin Anda butuhkan di awal adalah pengecualian perpustakaan pihak ketiga. Bagaimanapun, Anda masih tidak akan mengedit apa pun di file sumber, misalnya, perpustakaan jpeg, jadi tidak perlu memeriksanya. Selain itu, pengecualian folder tambahan akan mengurangi waktu analisis proyek. Direktori yang dikecualikan dari analisis ditetapkan di sini: PVS-Studio> Opsi ...> Jangan Periksa File> PathMasks (lihat Gambar 3).

Gambar 3. Mengedit daftar direktori yang tidak akan diperiksa oleh penganalisa.

Gambar 3. Mengedit daftar direktori yang tidak akan diperiksa oleh penganalisa.

Jika salah satu nama yang ditentukan berada di jalur penuh file, maka analisis tidak akan dilakukan. Secara default, nama beberapa direktori sudah termasuk dalam daftar. Namun, dalam proyek Anda folder dengan pustaka ZLib mungkin tidak disebut "zlib", tetapi, misalnya, "zip_lib". Karena itu, Anda harus mengedit daftar ini. Untuk mulai mengedit, klik tombol dengan tiga titik.

Contoh topeng yang valid untuk daftar PathMasks:

  • c: \ Libs \ - semua file proyek yang terletak di folder ini dan subfoldernya akan dikecualikan.
  • \ Libs \ atau * \ Libs \ * - semua file yang terletak di direktori yang jalurnya berisi subfolder Libs akan dikecualikan. Jika karakter "*" tidak ditentukan, mereka akan tetap ditambahkan secara otomatis, sehingga kedua opsi perekaman sama.
  • Libs atau * Libs * - semua file akan dikecualikan, jalur yang berisi subfolder yang memiliki 'Libs' sebagai nama atau fragmen nama. Juga dalam hal ini file yang mengandung Libs dalam nama akan dikecualikan, misalnya, c: \ project \ mylibs.cpp. Untuk menghindari kebingungan, kami sarankan Anda selalu menggunakan garis miring.

Selain mengecualikan seluruh folder, Anda dapat menentukan masker untuk mengecualikan file individual. Untuk ini, ada pengaturan FileNameMasks. Untuk detail lebih lanjut tentang cara bekerja dengan daftar pengecualian, lihat dokumentasi: Pengaturan: Jangan Periksa File .

Verifikasi Proyek


Setelah menyelesaikan pengaturan awal, Anda dapat mulai memeriksa proyek. PVS-Studio untuk Visual Studio mendukung memeriksa proyek-proyek C ++ (.vcxproj) dan C # (.csproj). Anda juga dapat segera mencoba melihat solusi yang berisi proyek-proyek jenis ini secara keseluruhan. Untuk melakukan ini, pilih item menu Extensions> PVS-Studio> Check> Solution (lihat Gambar 4).

Gambar 4. Verifikasi solusi menggunakan penganalisa PVS-Studio.

Gambar 4. Verifikasi solusi menggunakan penganalisa PVS-Studio.

Jika ada kesulitan dengan verifikasi, kami sarankan Anda merujuk ke Bagian " Tidak dapat memverifikasi? " Di situs web kami. Ini tidak mengerti "periksa apakah steker dicolokkan" stopkontak. Bagian ini menjelaskan situasi khas yang telah dihubungi pengguna dengan kami dan opsi tindakan yang disarankan.

Bekerja dengan daftar pesan diagnostik


Setelah memeriksa, semua pesan diagnostik akan ditampilkan di jendela khusus. Jendela memiliki banyak kontrol. Semuanya berfungsi untuk menampilkan pesan diagnostik yang tepat yang menarik bagi pengguna. Namun, pada awalnya, jendela mungkin tampak rumit. Mari kita lihat semua kontrol (lihat Gambar 5).

Gambar 5. Jendela dengan pesan diagnostik.

Gambar 5. Jendela dengan pesan diagnostik.

  1. Sebenarnya, jendela PVS-Studio.
  2. Menu tambahan. Memungkinkan Anda mengakses opsi seperti: menandai peringatan sebagai pesan palsu, menyembunyikan, menambahkan file ke pengecualian (lebih lanjut tentang ini di bawah).
  3. Tombol ini menyertakan pesan "ada yang salah." Misalnya, Anda tidak dapat memproses salah satu file.
  4. Pergi ke pesan sebelumnya / berikutnya. Ini membuka file yang sesuai, dan kursor ditempatkan pada baris dengan kesalahan potensial. Anda juga dapat selalu memilih diagnostik dari daftar dengan mengklik dua kali. Anda dapat menetapkan tombol cepat untuk melompat ke pesan sebelumnya / berikutnya. Secara default, ini adalah Alt + '[' dan Alt + ']'.
  5. Tombol yang menyertakan lansiran di berbagai tingkat. Sekarang dua tingkat diagnostik pertama disertakan. Pada saat yang sama, 90 peringatan dari tingkat pertama dan 6700 peringatan dari tingkat kedua ditampilkan di jendela. Tingkat pesan ditampilkan di sisi kiri jendela, dalam bentuk bilah yang sesuai dengan warna bilah pada tombol tingkat yang sesuai. Mengapa ada begitu banyak hal positif? Dari mana 6700 peringatan berasal? Untuk menunjukkan kemampuan antarmuka, seperangkat aturan MISRA disertakan, yang merupakan kontraindikasi untuk aplikasi biasa :).
  6. Perangkat aturan diagnostik aktif. Umum - diagnostik tujuan umum, Optimasi - optimasi mikro, diagnostik 64-bit - 64-bit, MISRA - MISRA C dan diagnostik standar MISRA C ++. Sekarang jendela menampilkan semua jenis peringatan.
  7. Memperlihatkan jumlah pesan yang ditandai sebagai Alarm Palsu. Anda dapat mengaktifkan / menonaktifkan tampilan pesan yang ditandai dalam pengaturan, PVS-Studio> Opsi ...> Pengaturan Analisis Spesifik> Tampilkan Alarm Palsu.
  8. Filter cepat. Misalnya, Anda dapat meninggalkan hanya pesan dalam daftar dengan kode V501 dan yang ada di proyek XYZ.
  9. Beberapa diagnostik menyarankan untuk memperhatikan bukan hanya satu, tetapi untuk beberapa baris. Dalam kasus ini, elips muncul di sebelah nomor baris. Dengan mengkliknya dengan mouse, Anda dapat melihat daftar garis dan memilih salah satunya.

Tabel dengan pesan diagnostik dibagi ke dalam kolom berikut:

  • Level. Tingkat reliabilitas yang ditemukan adalah kesalahan. Tingkat 1 (merah) - tempat paling mencurigakan. Tingkat 3 (kuning) - kemungkinan besar ketidaktepatan kecil dalam kode.
  • Asterisk Dia tidak memiliki tujuan khusus. Pengguna dapat menafsirkannya atas kebijakannya sendiri. Misalnya, ia dapat menunjukkan peringatan yang paling menarik untuk analisis yang lebih cermat. Analogi adalah dengan menandai huruf dengan tanda bintang di program email seperti Thunderbird atau Outlook.
  • ID Nomor pesan unik. Ini mungkin berguna ketika bekerja dengan daftar besar. Misalnya, Anda dapat pergi ke pesan dengan nomor tertentu (lihat item "Arahkan ke ID ..." di menu konteks ).
  • Kode Kode Pesan Jika Anda mengkliknya dengan mouse, halaman dengan deskripsi peringatan akan terbuka.
  • CWE. Identifikasi peringatan menggunakan kode CWE (Common Weakness Enumeration). Dengan mengklik tautan, Anda dapat melihat deskripsi CWE ini di jaringan.
  • Misra. Sama seperti di atas, tetapi hanya 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! Harap dicatat bahwa setelah beberapa baris ada elipsis. Contoh: "123 (...)". Dengan mengklik nomor ini, Anda akan mendapatkan daftar semua baris kode yang terkait dengan pesan ini. Dalam hal ini, dimungkinkan untuk membuka setiap baris dalam daftar.

Ya, membaca semua ini melelahkan. Namun, saya jamin, mulai menggunakannya, Anda cepat merasa nyaman dengan alat ini. Dan Anda jarang akan menekan sesuatu untuk mengkonfigurasi.

Menu konteks


Jadi, dengan mengklik dua kali pada pesan Anda pergi ke fragmen kode yang diinginkan. Dengan menekan tombol mouse kanan, menu konteks terbuka.

Menu ini cukup sederhana, dan Anda tidak boleh membebani artikel dengan deskripsi masing-masing item. Jika ada sesuatu yang tidak jelas, Anda dapat mengintip dokumentasi.

Namun, saya ingin memikirkan satu fitur yang sangat berguna. Ingatlah bahwa dalam pengaturan Anda dapat menambahkan folder / file untuk dikecualikan (lihat Gambar 2). Jadi, menambahkan sesuatu jauh lebih mudah daripada kedengarannya!

Perhatikan item "Jangan periksa file dan sembunyikan semua pesan dari ...". Ketika Anda mengkliknya, daftar jalur dapat ditambahkan yang dapat ditambahkan ke pengecualian (lihat Gambar 6).

Gambar 6. Tidak termasuk file dari pemindaian.


Gambar 6. Tidak termasuk file dari pemindaian.

Anda dapat memilih satu file atau salah satu direktori. Angka tersebut 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. Selain itu, semua pesan yang terkait dengan file-file ini akan segera menghilang dari daftar. Sangat nyaman Anda tidak perlu memulai ulang analisis untuk menghapus semua pesan terkait pengujian.

Mode analisis tambahan


Pengantar PVS-Studio tidak akan lengkap jika Anda tidak berbicara tentang salah satu fitur yang paling penting - analisis kode tambahan .

Semakin dini kesalahan ditemukan, semakin murah untuk memperbaikinya. Ini sangat ideal untuk segera menekankan kesalahan dalam teks program yang diedit. Namun, secara teknis sulit dan sumber daya intensif. Oleh karena itu, PVS-Studio dimulai di latar belakang saat kode terkoreksi berhasil dikompilasi. Jadi, kesalahan dicari dalam kode yang baru saja dimodifikasi. Fakta bahwa analisis sedang berlangsung dapat dinilai oleh ikon di area notifikasi sistem.

Ketika kesalahan ditemukan, jendela pop-up muncul peringatan tentang bahaya (lihat Gambar 7).

Gambar 7. Pesan pop-up bahwa tempat mencurigakan ditemukan dalam file yang diedit.

Gambar 7. Pesan pop-up bahwa tempat mencurigakan ditemukan dalam file yang diedit.

Jika Anda mengklik ikon, IDE akan terbuka dengan hasil verifikasi proyek (lihat Gambar 2) dan dimungkinkan untuk memeriksa fragmen kode yang mencurigakan.

Bahkan, daripada mendeskripsikan mode ini, lebih mudah untuk mencoba bekerja dengannya. Anda menulis kode seperti sebelumnya. Dan jika perlu, alat analisa akan mengganggu Anda. Cobalah!

Kami sendiri terus menggunakan mode ini. Ya, kami juga terkadang membuat kesalahan pengkodean. Dan kemampuan untuk segera memperbaikinya secara signifikan mengurangi waktu untuk mendeteksi cacat dan upaya untuk memahami mengapa program tidak berperilaku seperti yang direncanakan. Memalukan untuk menghabiskan waktu debug 15-20 menit, lalu menemukan kesalahan ketik dalam indeks. Berikut adalah salah satu kasus ketika PVS-Studio menemukan kesalahan dalam PVS-Studio tepat setelah muncul dalam kode:

if (in[0] == '\\' && in[1] == '.' && in[1] == '\\') { in += 2; continue; } 

Tapi ini, tentu saja, adalah bunga. Alat analisa PVS-Studio terkadang jauh lebih berguna. Berikut adalah salah satu ulasan tentang penganalisis kami: " Contoh menggunakan penganalisa statis ." Teks membuat Anda berpikir.

Saya meringkas. Analisis tambahan adalah sesuatu yang harus Anda coba. Anda akan mencintainya segera setelah Anda menemukan beberapa kesalahan dalam kode baru.

Fitur 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 kesalahan yang didiagnosis . Kami membatasi diri pada tabel di mana diagnostik dikelompokkan berdasarkan jenis. Beberapa diagnostik termasuk dalam lebih dari satu kelompok. Faktanya adalah pembagian itu sangat sewenang-wenang. Sebagai contoh, salah ketik dapat menyebabkan penggunaan memori yang tidak diinisialisasi. Sebaliknya, beberapa kesalahan tidak menemukan tempat di tabel, mereka terlalu spesifik. Namun demikian, tabel secara keseluruhan memberikan gambaran tentang fungsionalitas penganalisa kode statis (lihat Gambar 8).

Gambar 8. Fitur-fitur PVS-Studio.

Gambar 8. Fitur-fitur PVS-Studio.

Seperti yang Anda lihat, alat analisa memanifestasikan dirinya sebanyak mungkin di bidang-bidang seperti mencari kesalahan yang telah terjadi karena kesalahan ketik, Salin-Tempel. Ini mendiagnosis masalah yang terkait dengan keamanan kode.

Anda dapat mengetahui bagaimana semua ini bekerja dalam praktek dengan melihat database kesalahan . Kami mengumpulkan dalam database ini semua kesalahan yang kami temukan dengan memeriksa berbagai proyek Sumber Terbuka.

SAST


PVS-Studio adalah alat untuk pengujian keamanan aplikasi statis (SAST) - analis dapat mengidentifikasi potensi kerentanan dalam kode proyek dan menunjukkan pengidentifikasi kesalahan yang sesuai dalam klasifikasi tertentu.

PVS-Studio mendukung klasifikasi kesalahan berikut:

  1. CWE
  2. CERT SEI
  3. Misra

Anda dapat mengaktifkan tampilan kode CWE menggunakan menu konteks di jendela analisa di bawah Perlihatkan Kolom> CWE

Gambar 9. Menu konteks dan contoh dari output kode CWE.

Gambar 9. Menu konteks dan contoh dari output kode CWE.

Atau di menu di atas (Extensions> PVS-Studio> Tampilkan Kode CWE di Jendela Output)

Gambar 10. Menu ekstensi.

Gambar 10. Menu ekstensi.

Diagnostik MISRA disertakan secara terpisah dalam pengaturan:

Gambar 11. Daftar kesalahan yang terdeteksi.

Gambar 11. Daftar kesalahan yang terdeteksi.

Baca lebih lanjut tentang klasifikasi ini di sini .

Memeriksa proyek dari baris perintah


PVS-Studio_Cmd.exe adalah utilitas untuk memeriksa proyek C ++ / C # Visual Studio (.vcxproj / .csproj) dan solusi .sln dari baris perintah. Ini dapat berguna untuk analisis otomatis. Program ini terletak 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 akan diverifikasi.
  • --output: file plog tempat Anda ingin menulis laporan.
  • --progress: tunjukkan progres verifikasi.

Seperti inilah peluncurannya:

Gambar 12. Output dari program PVS-Studio_Cmd.exe

Gambar 12. Output dari program PVS-Studio_Cmd.exe

Setelah eksekusi, kita akan mendapatkan file plog dengan laporan, jalur yang kita tentukan dalam opsi peluncuran. Laporan ini dapat dikonversi ke format lain menggunakan utilitas PlogConverter.exe, dan untuk melihat laporan di IDE, cukup klik dua kali pada file plog di Explorer.

Anda juga dapat membuka file laporan di menu ekstensi di bawah Extensions> PVS-Studio> Open / Save> Open Analysis Report ...

Gambar 4


Informasi terperinci tentang utilitas dan parameternya dapat ditemukan dalam dokumentasi .

Penindasan peringatan palsu


Beberapa pesan yang dikeluarkan oleh penganalisa pasti akan salah. Tidak ada yang bisa dilakukan tentang itu. Penganalisa statis hanyalah sebuah program yang tidak memiliki kecerdasan buatan dan tidak dapat menentukan dengan tepat apakah ia menemukan kesalahan nyata atau tidak.

Untuk memerangi positif palsu, penganalisis menyediakan satu set mekanisme yang berbeda. Mereka dijelaskan secara rinci di bagian dokumentasi berikut:


Kesimpulan


Tentu saja, di sini kami tidak memberi tahu semua tentang instrumen. Jika Anda menceritakan semuanya, maka artikel tersebut akan berubah menjadi dokumentasi. Tujuannya adalah untuk menunjukkan betapa mudahnya bekerja dengan alat di dalam lingkungan Visual Studio. Anda dapat membaca tentang lingkungan lain dan mode operasi dalam dokumentasi dan artikel lain yang terdapat di situs web kami. Ngomong-ngomong, banyak hal menarik bagi programmer. Datang berkeliling.

Perlu dicatat bahwa PVS-Studio tidak hanya berfungsi di lingkungan dari Microsoft. Kami juga mendukung bahasa Jawa, kami dapat bekerja di Linux dan macOS, berintegrasi ke CMake dan banyak lagi. Untuk informasi lebih lanjut, lihat dokumentasi .

Saya berharap Anda memiliki kode tanpa kode dan berharap Anda menikmati PVS-Studio. Jika Anda memiliki pertanyaan, kami akan selalu membantu dan memberi tahu Anda. Menulis kepada kami

Sumber daya tambahan:


  1. Ulasan kode
  2. Analisis kode statis .
  3. Alat analisis kode statis .
  4. SAST .
  5. Teknologi yang digunakan dalam analisa PVS-Studio .
  6. Unduh PVS-Studio dan cobalah.
  7. Dukungan untuk Visual Studio 2019 .
  8. Diskusikan harga alat analisis PVS-Studio untuk tim Anda dan bagaimana cara membelinya: beli PVS-Studio .
  9. Contoh menggunakan penganalisa statis .
  10. Jawaban untuk pertanyaan yang sering diajukan di konferensi.
  11. Bagaimana cara memulai PVS-Studio Java
  12. Cara menjalankan PVS-Studio di Linux dan macOS



Jika Anda ingin berbagi artikel ini dengan audiens yang berbahasa Inggris, silakan gunakan tautan ke terjemahan: Sergey Larin. PVS-Studio untuk Visual Studio

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


All Articles