Baru-baru ini, kami telah memperkuat kehadiran kami di berbagai konferensi IT khusus di Rusia dan luar negeri. Di sebagian besar acara, kami mencoba berdiri dengan berdiri, di beberapa, kami membuat presentasi. Konferensi memungkinkan kami tidak hanya untuk meningkatkan pengenalan produk kami (analisa kode statis PVS-Studio), tetapi juga, yang paling penting, untuk mengenal pengguna potensial dan saat ini dengan lebih baik. Berkomunikasi dengan pengunjung di stan, karyawan kami sering menjawab pertanyaan yang sama, yang terkadang cukup aneh. Pada artikel ini saya akan mencoba menjawab pertanyaan yang paling sering diajukan pengunjung tentang analisis statis secara umum dan PVS-Studio pada khususnya.
Untuk mulai dengan, sedikit humor pada subjek "Harapan dan Realita". Kami menulis banyak artikel dan secara naif percaya bahwa jika orang membacanya, maka mereka setidaknya secara umum mengetahui tentang produk kami dan fitur-fiturnya. Sayangnya, ini tidak selalu terjadi. Berikut adalah contoh komunikasi nyata dengan pengunjung di konferensi baru-baru ini. Pengunjung: "Kami membaca artikel Anda tentang Habré. Menarik. Sayang sekali bahwa penganalisis Anda tidak cocok sama sekali dengan kami. Kami memiliki semua kode sumber rahasia, kami tidak dapat mengirimkannya. Tapi semua yang ada
di cloud bekerja untuk Anda di sana. "
Departemen pemasaran kami mungkin memiliki sesuatu untuk dikerjakan.
Selanjutnya, saya akan memberikan pertanyaan umum lainnya dari pengunjung rata-rata ke stan kami di pameran, serta jawaban mereka dalam format dialog dadakan.
T: Saya mendengar sesuatu tentang Anda. Dari mana Anda berasal, apa yang Anda lakukan, dan bagaimana cara mengetahui lebih banyak tentang Anda?
A: Kami adalah tim independen kecil dari Tula. Kami sedang mengembangkan PVS-Studio - penganalisa kode statis untuk bahasa Java C, C ++, C #. Anda dapat mempelajari lebih lanjut tentang kami di
situs web PVS-Studio . Kami juga menulis artikel dan mempostingnya di
blog kami , di
Habré dan sumber daya lainnya.
T: Analisis statis macam apa? Tim kami memiliki cukup peringatan kompiler dan ulasan kode gabungan.
A: Compiler hanya bisa menunjukkan kesalahan yang kasar dan agak jelas. Misalnya, kode yang tidak terjangkau atau penggunaan variabel yang tidak diinisialisasi. Deteksi kesalahan untuk kompiler adalah tugas sampingan. Ya, kompiler menjadi sangat cerdas belakangan ini. Tetapi setiap alat khusus untuk menemukan kesalahan dalam kode secara signifikan lebih unggul daripada kompiler, memungkinkan Anda untuk melakukan analisis kode terperinci dan mengidentifikasi kesalahan ketik, kesalahan logis, potensi penggunaan null pointer / tautan, dll.
Ulasan kode gabungan adalah teknologi yang baik dan telah teruji oleh waktu. Tetapi juga memiliki kelemahan terkait dengan kebutuhan untuk menarik karyawan tambahan untuk bekerja pada kode orang lain. Ini meningkatkan biaya pengembangan, sementara kemungkinan melewatkan kesalahan atau menambah kesalahan baru, karena sudah menjadi sifat manusia untuk melakukan kesalahan.
Analisis statis adalah verifikasi kode sumber dari suatu program tanpa perlu eksekusi. Kami merekomendasikan menggunakan alat analisis kode statis sebagai penghalang
tambahan untuk kesalahan.
T: Apakah PVS-Studio menganalisis file yang dapat dieksekusi atau langsung kode sumber?
A: Jika kita berbicara tentang mencari kerentanan, maka analisis kode yang dapat dieksekusi lebih mirip dengan cara antivirus bekerja dengan mencari tanda tangan dalam kode biner dari beberapa basis data.
PVS-Studio menganalisis
kode sumber . Ini memungkinkan Anda untuk mengidentifikasi rentang kesalahan dan kerentanan yang jauh lebih luas, meningkatkan kecepatan kerja dan memberikan hasil yang lebih andal.
Ya, tentu saja, Anda dapat mencoba membongkar kode dan menemukan kesalahan dalam algoritma. Tetapi Anda perlu memahami bahwa dalam kode biner banyak informasi hilang. Misalnya, kondisi sebenarnya akan selalu dihapus begitu saja ketika kode dikompilasi, dan tidak ada cara untuk mengetahui bahwa ada sesuatu yang salah dengan kondisi ini.
T: Dan apa saja opsi integrasi? Apakah Anda memiliki plugin untuk IDE?
A: Saat ini, PVS-Studio terintegrasi ke dalam Visual Studio 2010-2017 sebagai plugin. Ada plugin Java untuk IntelliJ IDEA. Selain itu, berkat modul khusus, Anda dapat mengelola proyek CMake di Qt Creator dan CLion.
Alat analisis terus berkembang, sehingga Anda dapat mengetahui informasi terkini tentang fitur produk dengan mengunjungi
situs web kami .
T: Kami menggunakan SonarQube.
A: Pilihan bagus. Plugin PVS-Studio untuk SonarQube memungkinkan Anda untuk mengimpor hasil analisis ke SonarQube dan bekerja dengannya dengan cara biasa.
T: Ya, saya perlu mengintegrasikan analisis ke dalam sistem build kami.
A: PVS-Studio dapat digunakan dari baris perintah. Alat analisis berisi serangkaian pengaturan untuk menyelesaikan berbagai tugas. Selain itu, terlepas dari skenario penggunaan, kami memberikan bantuan kepada klien kami selama fase implementasi analisa dan dukungan teknis selama periode lisensi.
T: Bagaimana cara mencoba analisa Anda?
A: Gunakan
halaman unduh , unduh kit distribusi yang diperlukan dan bekerjalah dengan PVS-Studio dalam mode percobaan. Jika Anda memerlukan waktu ekstra untuk mengevaluasi produk kami atau Anda tidak puas dengan keterbatasan versi demo,
hubungi kami .
Juga di pameran, pengunjung kami dapat menerima kunci Perusahaan, yang validitasnya adalah satu bulan. Untuk melakukan ini, datang saja ke gerai kami dengan unicorn. Selain itu, Anda dapat menjadi anggota lotre dan menerima hadiah dari PVS-Studio.
T: Saya seorang mahasiswa, apakah mungkin menggunakan PVS-Studio gratis?
A: Ini dimungkinkan jika Anda menambahkan komentar dari jenis khusus ke kode sumber Anda. File yang ditandai dengan cara ini akan diperiksa untuk kesalahan tanpa batasan. Anda dapat mempelajari lebih lanjut tentang mode operasi ini dari artikel "
Cara menggunakan PVS-Studio gratis ."
T: Siapa pelanggan Anda?
A: Saat ini, lebih dari 200 perusahaan di seluruh dunia telah menjadi pelanggan kami. Ruang lingkup kegiatan mereka sangat beragam. Daftar pelanggan yang ada dapat ditemukan di
situs web kami .
T: Jadi, apakah Anda memiliki mode operasi lokal atau tidak?
A: Alat analisis PVS-Studio diinstal secara lokal pada komputer khusus dan dapat bekerja sepenuhnya dalam isolasi. Koneksi Internet diperlukan untuk menerima pembaruan, serta tautan cepat ke dokumentasi (deskripsi diagnostik, dll.) Dari plugin. Kami saat ini sedang memikirkan opsi untuk bekerja melalui "cloud", tetapi ini akan menjadi tambahan untuk mode operasi standar.
T: Dan apa tepatnya yang Anda kuasai, katakanlah, Penganalisa cakupan?
J: Tidak mungkin memberikan jawaban yang sederhana dan komprehensif untuk pertanyaan ini. Semua upaya kami untuk membandingkan dengan analis lain telah gagal. Kami dituduh bias, “membubarkan” hasilnya, menggunakan basis tes yang disiapkan khusus dan dosa-dosa mematikan lainnya. Selain itu, alat analisis tidak bisa hanya dibandingkan "langsung". Setiap alat unik dan memiliki kekuatan dan kelemahannya sendiri. Beberapa alat fokus pada kinerja, yang lain fokus pada menemukan "bau" dalam kode dan meningkatkan gaya. Kami mencari bug dan kerentanan potensial.
Jika Anda memiliki keinginan dan metodologi yang sesuai, Anda dapat melakukan penelitian dan membandingkan alat analisis kami dengan yang lain, dan kemudian menulis artikel tentang itu. Untuk melakukan ini, kami bahkan akan mengeluarkan Anda kunci lisensi sementara tanpa batasan. Tapi bersiaplah untuk kritik.
T: Saya tidak mengerti, jadi Anda mencari kesalahan hanya dalam kode yang tidak dikompilasi? Artinya, program bahkan tidak lulus pemeriksaan kompiler?
A: Tidak begitu. PVS-Studio mencari dan menemukan kesalahan hanya di program yang dikompilasi. Dalam aplikasi kehidupan nyata. Program-program ini tidak hanya dikompilasi tanpa kesalahan, beberapa di antaranya diperiksa oleh analis lain. Dan kami masih mencari kesalahan di sana. Tentang ini, kami sering menulis
artikel di blog kami, memeriksa proyek sumber terbuka.
T: Dan kesalahan apa yang dapat dideteksi PVS-Studio di proyek kami? Hanya salah ketik?
A: Kesalahan ketik, tentu saja, termasuk kelas kesalahan klasik yang terdeteksi oleh analisis statis. Tapi selain itu, PVS-Studio berpotensi mendeteksi
beberapa ratus pola kesalahan. Contoh: mendereferensi pointer nol, membaginya dengan nol, kondisinya selalu salah atau benar, operasi yang salah dengan indeks, keluar dari batas array, dan banyak lainnya. Daftar lengkap kesalahan disediakan pada halaman
dokumentasi .
T: Setelah memeriksa dengan alat analisa Anda, dapatkah saya yakin bahwa program tersebut tidak mengandung kesalahan?
A: Tidak. PVS-Studio bukan alat untuk membuktikan kebenaran program. Ini adalah kelas alat yang terpisah. Tugas penganalisa kami adalah untuk secara cepat dan andal
mengindikasikan potensi kesalahan dalam kode. Keputusan tentang falibilitas dari desain tertentu selalu dibuat oleh pengembang, menggunakan konteks kesalahan dan pengetahuannya tentang proyek. Dan penganalisa membantu pengembang, mungkin meminimalkan jumlah positif palsu dan menyediakan kemampuan tambahan untuk memproses daftar peringatan yang diterima.
T: Bagaimana tepatnya cara kerja PVS-Studio? Mekanisme pencarian kesalahan seperti apa? Anda mungkin menggunakan ekspresi reguler.
J: Menggunakan ekspresi reguler sangat tidak efisien. Ini memungkinkan Anda untuk menemukan hanya kesalahan paling primitif, misalnya, dalam kondisi (bandingkan dua sub-ekspresi yang identik):
if ((a+b+) == (a+b+)) {....}
Pada saat yang sama, perubahan kecil dalam kode (tanpa mengubah logika kerja) kemungkinan besar akan membuat alat analisis seperti itu menemui jalan buntu:
if ((a+b+) == (b+a+)) {....}
Alat analisis PVS-Studio jauh lebih cerdas dan menggunakan mekanisme berikut:
- Pencocokan pola berdasarkan pada pohon sintaksis abstrak.
- Membangun model semantik dengan inferensi tipe berikutnya.
- Eksekusi simbolik, yang memungkinkan Anda untuk menghitung nilai-nilai variabel yang dapat menyebabkan kesalahan, serta memeriksa rentang nilai (pengecekan kisaran).
- Analisis aliran data (analisis aliran data).
- Anotasi metode
Semua ini dijelaskan secara lebih rinci oleh rekan saya Andrei Karpov dalam sebuah artikel baru-baru ini, "
Teknologi yang Digunakan dalam Penganalisa Kode PVS-Studio untuk Menemukan Kesalahan dan Kerentanan Potensial ".
T: Ya, kami memiliki proyek C / C ++, 15 tahun pengembangan dan lima juta baris kode. Bisakah kita mulai menggunakan PVS-Studio sekarang?
A: Ya. Pada tahap implementasi, Anda perlu melakukan pemeriksaan penuh atas proyek Anda satu kali. Kemudian semua peringatan yang diterima (mungkin akan ada banyak dari mereka) dapat dicatat sebagai tidak menarik (untuk sementara waktu simpulkan kesimpulannya) sehingga dapat kembali ke hutang teknis ini nanti. Setelah itu, Anda dapat menggunakan PVS-Studio untuk secara teratur memeriksa hanya kode baru. Anda dapat mempelajari lebih lanjut tentang ini dan fitur penganalisa lainnya di
halaman dokumentasi .
T: Seberapa sering saya perlu menjalankan tes? Dan apa, periksa seluruh basis kode setiap waktu?
J: Penggunaan analisis statis yang paling efisien melibatkan memeriksa kode baru sesering mungkin. Untuk ini, mode analisis tambahan diimplementasikan di PVS-Studio. File yang telah dimodifikasi sejak proyek terakhir dikirim untuk verifikasi. Ada beberapa mode operasi lainnya. Ini memungkinkan Anda untuk mengidentifikasi kesalahan yang sudah dalam tahap pengembangan, yang mengurangi risiko mereka masuk ke rilis.
T: Kami menggunakan PVS-Studio. Penganalisa menemukan kesalahan, tetapi banyak dari mereka dalam kode atau tes yang tidak digunakan. Apakah ini oke?
A: Ini sangat normal. Salah satu fitur analisis statis, berbeda dengan analisis dinamis, adalah verifikasi
seluruh basis kode, dan bukan hanya apa yang dieksekusi ketika kode dijalankan. Katakanlah Anda menghabiskan banyak waktu dan upaya men-debug kode program, dan semuanya berjalan dengan stabil. Namun ada fungsi yang jarang digunakan, atau belum digunakan sama sekali. Probabilitas menemukan kesalahan dalam fungsi seperti itu tinggi. Dan ketika pada satu titik mereka mulai menggunakan fungsi, ada sesuatu yang salah. Penggunaan analisis statis akan meminimalkan risiko situasi seperti itu.
Juga, kode mungkin mengandung konstruksi yang jelas salah (ini biasanya terjadi dalam pengujian), oleh karena itu sering masuk akal untuk mengeluarkannya dari pemindaian (dengan menentukan proyek atau jalur) melalui pengaturan PVS-Studio. Namun, terkadang tes itu sendiri mengandung kesalahan. Situasi seperti itu sulit untuk diidentifikasi, dan dalam hal ini, keputusan harus dibuat oleh pengembang.
T: Bagaimana dengan mencari kerentanan?
J: Alat analisa PVS-Studio adalah alat SAST (Pengujian Keamanan Aplikasi Statis) dan memungkinkan Anda untuk mengidentifikasi kerentanan
potensial yang diklasifikasikan menurut
CWE (Common Weakness Enumeration). Lansiran CWE sebagian besar tumpang tindih dengan lansiran PVS-Studio klasik. Anda dapat mempelajari lebih lanjut tentang SAST dari
dokumentasi . Penting untuk dipahami bahwa
potensi kerentanan tidak selalu mengarah pada kerentanan nyata yang dapat dieksploitasi oleh peretas. Kerentanan yang diidentifikasi diklasifikasi berdasarkan
CVE (Common Vulnerabilities and Exposures). Namun demikian, penghapusan
potensi kerentanan jelas berkontribusi untuk meningkatkan keamanan program dan meminimalkan risiko mengidentifikasi kerentanan nyata di masa depan.
T: Saya memimpin tim pengembangan. Bagaimana tepatnya PVS-Studio akan membantu saya?
A: Selain meningkatkan kualitas dan keandalan kode, penerapan PVS-Studio akan memungkinkan penyelesaian tugas-tugas manajerial murni yang terkait, misalnya, dengan pembagian tanggung jawab. Paket penganalisa termasuk utilitas BlameNotifier, yang memungkinkan Anda untuk secara otomatis mengidentifikasi karyawan yang mengirim kode yang salah ke sistem kontrol versi. Pada saat yang sama, notifikasi surat dikirim ke kontraktor dan manajernya.
Anda juga dapat mengonfigurasi konversi laporan kesalahan ke bentuk apa pun yang nyaman bagi Anda, termasuk laporan html terperinci, nyaman untuk digunakan oleh kepala.
Akhirnya, jika SonarQube digunakan, Anda dapat menggunakan semua keuntungan dari alat ini untuk memastikan kontrol kualitas kode berkelanjutan dengan mengunggah hasil verifikasi proyek ke SonarQube menggunakan penganalisa PVS-Studio menggunakan plug-in khusus.
T: Menggunakan atau berencana menggunakan pembelajaran mesin?
A: Ini adalah topik besar dan menarik. Kami berencana untuk menulis artikel kritis tentang ini. Sekarang saya hanya akan menyuarakan beberapa pemikiran pendek.
Tidak perlu membuat kalkulator menggunakan pembelajaran mesin. Ada aturan (rumus) tertentu, dan itu harus diterapkan pada kode dan menarik semacam kesimpulan. Tidak jelas mengapa jaringan saraf perlu dikonfigurasi untuk mendeteksi pola kesalahan baru ketika pola-pola ini sudah ada, dan Anda hanya perlu menerapkannya dengan benar. Dan, yang paling penting, tidak jelas dari mana mendapatkan dasar untuk pelatihan tersebut. Di mana sampel ratusan ribu proyek dengan kesalahan tertulis yang dapat Anda pelajari?
Satu-satunya tempat di mana, menurut pendapat kami, mungkin masuk akal untuk menggunakan algoritma pembelajaran mesin adalah untuk menyaring positif palsu.
T: Apakah Anda memeriksa kode PVS-Studio dengan PVS-Studio?
A: Tentu saja! Selain itu, jika terjadi kesalahan, daftar pelaku diumumkan kepada publik dengan ekskomunikasi berikutnya dari kulkas dengan es krim. Namun serius, kami percaya bahwa sangat berguna untuk menggunakan alat Anda sendiri. Ini memungkinkan Anda untuk melihat produk dari sudut pandang pengguna dan melihat beberapa kerugian.
T: Bagaimana cara mendapatkan status luar biasa untuk desktop dan cap bermerek dengan earflaps?
A: Datang ke stan kami dengan unicorn di pameran terdekat, di mana kami akan hadir dengan stan. Kami akan datang dengan sesuatu :)
Saya harap saya bisa menjawab pertanyaan pengunjung paling populer di stan kami di pameran. Tentu saja, ada pertanyaan yang lebih kompleks yang mungkin memerlukan penulisan artikel terpisah untuk menjawab.
Saat berkomunikasi dengan pengunjung, kami mencoba menyampaikan gagasan utama: analisis statis bukanlah obat mujarab untuk semua penyakit, tetapi penggunaannya sangat berguna untuk kesehatan (program Anda). Gunakan PVS-Studio dan jangan sampai sakit!
Sebagai kesimpulan, saya akan kembali memberikan sejumlah tautan bermanfaat:

Jika Anda ingin berbagi artikel ini dengan audiens yang berbahasa Inggris, silakan gunakan tautan ke terjemahan: Sergey Khrenov.
Segala sesuatu yang Anda ingin tahu tentang PVS-Studio dan berani bertanya