Dimulai dengan versi 6.27, penganalisa kode statis PVS-Studio dapat mengklasifikasikan peringatannya sesuai dengan standar MISRA C dan MISRA C ++. Berkat dukungan standar-standar ini, alat analisa telah menjadi mungkin untuk digunakan secara efektif untuk meningkatkan keamanan, portabilitas dan keandalan program untuk sistem embedded.
Tahun ini kami mulai mendukung standar seperti
CWE dan
SEI CERT di penganalisa
PVS-Studio . Pada dasarnya, dukungan datang ke klasifikasi diagnostik yang sudah diterapkan dalam analisa sesuai dengan standar ini. Selain itu, beberapa diagnostik baru diterapkan atau beberapa diagnostik lama diperluas untuk lebih memenuhi standar-standar ini.
Tabel kepatuhan
diagnosa PVS-Studio
dengan berbagai standar:
Sekarang saatnya untuk standar MISRA C dan MISRA C ++. Ini adalah standar pengembangan perangkat lunak C dan C ++ yang dibuat oleh
MISRA (Asosiasi Keandalan Perangkat Lunak Industri Motor). Tujuan dari standar ini adalah untuk meningkatkan keamanan, portabilitas, dan keandalan program yang tertanam. Teks standar dibayar.
Kami menganggap kekuatan penganalisa kami untuk dapat mengambil dan mulai menggunakannya dalam proyek besar yang ada. Anda dapat menjalankan PVS-Studio berdasarkan kode, mendeteksi kesalahan lama dan kemudian menggunakan alat analisa secara teratur untuk menemukan cacat baru sedini mungkin.
Banyak analis mengambil jalur yang berbeda dan mengimplementasikan diagnostik yang terkait dengan standar pengkodean. Mereka menyarankan cara variabel nama yang lebih baik, mengingatkan Anda untuk memasukkan komentar di awal file, dan sebagainya. Itu perlu dan bermanfaat. Namun, dalam kasus ini, penganalisa sangat βberisikβ dan menghasilkan sejumlah besar peringatan di mana peringatan tentang kesalahan ditenggelamkan.
Kami memutuskan bahwa PVS-Studio akan menjadi penganalisa yang mencari kesalahan. Ini adalah keunggulan kompetitifnya. Pemrogram dapat menjalankannya pada basis kode yang besar dan memastikan bahwa ia tidak akan kewalahan dengan sejumlah besar pesan tentang eksekusi kode dan ia akan dapat fokus pada bug.
Oleh karena itu, kami awalnya
kritis terhadap standar MISRA dan untuk waktu yang lama tidak berencana untuk menerapkannya. Standar MISRA dirancang untuk menyederhanakan dan meningkatkan kualitas kode secara keseluruhan, yang membantu mencegah kesalahan. Artinya, hanya sebagian besar diagnostik di dalamnya yang berhubungan dengan gaya penulisan kode. Ini paling baik dijelaskan dengan sebuah contoh.
Ada aturan dalam standar MISRA di mana badan
pernyataan jika harus dilampirkan dalam kurung kurawal. Dalam MISRA C, ini adalah aturan 15.6, dan dalam MISRA C ++ adalah 6-4-1. Contoh kode yang salah:
if (i == bestOffs) continue;
Kode yang benar adalah:
if (i == bestOffs) { continue; }
Diagnostik seperti itu tidak dapat diterapkan pada proyek yang ada yang ditulis untuk bekerja di bawah kendali sistem operasi Winodws, Linux atau macOS. Sebagai contoh, hanya aturan yang dijelaskan tentang kurung keriting yang memberikan
operasi diagnostik
1947 V2507 (MISRA C 15.6, MISRA C ++ 6-4-1) untuk proyek WinMerge. Tetapi WinMerge adalah proyek kecil! Hanya sekitar 250.000 baris kode dalam C dan C ++.
Hingga 2018, penganalisa PVS-Studio difokuskan pada pengujian aplikasi desktop yang berjalan pada Windows, Linux, dan macOS. Karenanya, dukungan untuk MISRA kurang praktis. Tidak ada yang akan menerapkan standar ini dalam proyek desktop besar yang ada.
Semuanya berubah ketika pada 2018 kami mulai mendukung sistem tertanam. Tahun ini, analisa mendukung:
- Windows IAR Embedded Workbench, C / C ++ Compiler untuk ARM C, C ++
- Windows / Linux Keil ΞΌVision, DS-MDK, ARM Compiler 5/6 C, C ++
- Windows / Linux Studio Komposer Kode Texas Instruments, Alat Pembuatan Kode ARM C, C ++
- Windows / Linux / macOS. GNU Arm Embedded Toolchain, kompiler GCC Arm Embedded, C, C ++
Tidak seperti proyek desktop, banyak pengembang tertanam sudah menulis proyek dengan mempertimbangkan rekomendasi MISRA, dan dukungan mereka pada penganalisa kami akan sangat berguna bagi pengembang.
Namun demikian, kami masih takut bahwa salah satu pengembang, tanpa pemahaman, dapat mempertimbangkan bahwa kami "merusak" alat analisis dengan memperkenalkan "diagnostik aneh" ke dalamnya. Karenanya, diagnostik MISRA dimatikan secara default. Kami menganggap ini keputusan yang sangat tepat. Diagnostik ini hanya dapat dimasukkan jika Anda tahu persis untuk apa dan untuk menggunakannya.
Misalnya, untuk pemrogram aplikasi mungkin tidak jelas mengapa penganalisis tiba-tiba melarang mereka untuk menggunakan memori dinamis. Yaitu mengapa tiba-tiba Anda tidak dapat mengalokasikan memori menggunakan fungsi
malloc atau operator
baru . Tetapi batasan seperti itu (
V2511 ) dipahami dengan baik oleh pengembang perangkat yang disematkan. Pada beberapa perangkat yang beroperasi terus menerus, sangat tidak dapat diterima untuk menggunakan program yang ingatannya tiba-tiba habis.
Jadi, sekarang Anda dapat menginstal atau memperbarui PVS-Studio dan mulai menggunakan diagnostik yang menerapkan aturan dari MISRA C dan MISRA C ++. Serangkaian aturan yang didukung tidak lengkap, tetapi ini seharusnya tidak menjadi hambatan untuk mulai menggunakan PVS-Studio. Saat ini, tidak ada analisa statis tunggal yang mengimplementasikan sepenuhnya semua aturan MISRA. Di masa depan, kami berencana untuk memperluas seperangkat aturan diagnostik yang diterapkan dalam MISRA, dan berharap untuk menjadi alat utama dalam kelengkapan dukungan mereka.
Untuk mengaktifkan diagnostik MISRA di Visual Studio atau di utilitas Standalone PVS-Studio, Anda perlu mengubah Dinonaktifkan untuk Tampilkan Semua di pengaturan.
Karena Dinonaktifkan berarti bahwa peringatan tidak dihasilkan sama sekali dan tidak masuk ke dalam laporan, diperlukan analisis ulang. Mode dinonaktifkan diatur secara default untuk mengurangi ukuran laporan. Dimasukkannya diagnostik MISRA dapat menyebabkan sejumlah besar operasi dan peningkatan kuat dalam file dengan laporan (* file .plog).
Untuk analisis proyek dalam sistem operasi Linux dan macOS, ada utilitas pvs-studio-analyzer. Secara default, hanya diagnostik tujuan umum (Analisis Umum, GA) yang disertakan di sana. Aturan tambahan dapat diaktifkan menggunakan opsi -a:
-a [MODE], --analysis-mode [MODE] MODE defines the type of warnings: 1 - 64-bit errors; 2 - reserved; 4 - General Analysis; 8 - Micro-optimizations; 16 - Customers Specific Requests; 32 - MISRA. Modes can be combined by adding the values Default: 4
Untuk mengaktifkan lansiran GA dan MISRA, Anda harus menjalankan analisis dengan parameter berikut:
pvs-studio-analyzer analyze ... -a 36 ... -o /path/to/report.log ...
Nilai 36 adalah bitwise OR untuk 4 (GA - General Diagnostics) dan 32 (MISRA).
Selanjutnya, disarankan untuk membuat beberapa laporan dengan berbagai jenis peringatan, misalnya, seperti ini:
plog-converter -a GA:1,2 -t tasklist -o /path/to/ga_results.tasks /path/to/project.log plog-converter -a MISRA:1,2,3 -t tasklist -m misra -o /path/to/misra_results.tasks /path/to/project.log
Laporan ga_results.tasks pertama akan berisi peringatan umum tingkat kepercayaan Tinggi dan Menengah.
Dan laporan kedua "misra_results.tasks" hanya akan mendapatkan peringatan yang terkait dengan MISRA dari semua tingkatan. Sakelar "-m misra" menunjukkan bahwa selain nomor dalam format PVS-Studio, laporan akan menyertakan nomor diagnostik sesuai dengan klasifikasi MISRA.
Semua mode peluncuran penganalisis di Linux dan macOS, serta format laporan, dijelaskan dalam
dokumentasi .
PS Kami ingin mengevaluasi seberapa banyak yang kami tebak dengan memilih MISRA sebagai salah satu arah pengembangan PVS-Studio. Jika Anda tertarik dengan topik ini, silakan
menulis kepada kami . Bahkan jika Anda belum berencana untuk menggunakan PVS-Studio, silakan menulis. Kami ingin mengajukan beberapa pertanyaan klarifikasi kepada Anda.
Tautan tambahan:
- Unduh PVS-Studio
- Cara menjalankan PVS-Studio di Linux dan macOS
- PVS-Studio 6.22 penganalisa kode statis diadaptasi untuk kompiler ARM (Keil, IAR)
- PVS-Studio mencakup dukungan untuk GNU Arm Embedded Toolchain

Jika Anda ingin berbagi artikel ini dengan audiens yang berbahasa Inggris, silakan gunakan tautan ke terjemahan: Andrey Karpov.
PVS-Studio: Dukungan MISRA C dan MISRA C ++ Standar Pengkodean .