Analisis statis adalah proses menganalisis perangkat lunak tanpa menjalankannya. Ini sangat bagus dan direkomendasikan, tetapi Anda harus mengingatnya
- alat analisis statis yang berbeda memiliki pemahaman yang berbeda dari kode yang mereka pelajari, maka mereka dapat memberi sinyal (atau tidak memberi sinyal) masalah yang berbeda. Satu alat dapat memberikan laporan yang bersih, dan yang lainnya dapat mengeluh tentang sejuta hal.
- alat yang dinamis (untuk memberi contoh, pikirkan valgrind) dapat menemukan banyak masalah lain, dengan harga beban serius pada konsumsi sumber daya (waktu, penggunaan memori). Ini karena Anda biasanya menjalankan versi perangkat lunak yang diinstrumentasi. Perhatikan bahwa, dengan diinstruksikan dalam beberapa cara (ganti malloc Anda dengan debugging malloc) itu tidak persis sama dengan perangkat lunak Anda (seperti yang dapat Anda lihat dari waktu eksekusi)
Kedua pendekatan ini menderita karena kurangnya konteks: mereka tidak tahu apa yang harus dicapai oleh sw.
Peninjauan kode dilakukan oleh pembuat kode lain, yang konon tahu dan bisa memeriksanya
- jika kodenya benar
- jika perangkat lunak secara semantik benar.
Ini jauh lebih mahal dan memiliki tingkat pengulangan yang bervariasi tetapi sangat membantu.
Seperti biasa, tidak ada satu pun peluru perak yang akan memperbaiki semua bug dan menghindari semua masalah. Menerapkan - sebanyak mungkin diberikan tempat, kode, waktu, tiga bentuk pemeriksaan (statis, dinamis, lebih banyak mata (dan otak) yang benar-benar melihat kode) disarankan.
ps: Saya harus mencatat bahwa biasanya lebih baik untuk menerapkan alat dari awal. Mengubah sistem warisan adalah pengalaman yang jauh lebih tidak menyenangkan, karena positif palsu. Jika Anda mulai dari awal dan selalu bertujuan untuk menjaga alat analisis tetap bersih, Anda mungkin akan menghindari banyak masalah.
pps: untuk alat, itu tergantung pada bahasa. Di dunia C dan C ++ Anda bisa mulai dengan melihat Visual Studio itu sendiri, yang berisi alat analisis statis bawaan. Sebuah relatif lengkap daftar dapat ditemukan di Wikipedia.
ppps: Analisis statis lebih cocok untuk bahasa statis, seperti C atau C ++. Untuk Python bisa sangat sulit untuk mengatakan apakah nama yang merujuk ke daftar pada suatu titik akan merujuk ke daftar untuk sisa program, karena sifat dinamisnya. Ini tidak berarti bahwa tidak ada yang bisa dilakukan, seperti upaya JIT seperti yang ditunjukkan PyPy .