Suatu hari dari dukungan pengguna PVS-Studio

Gambar 1

Kami menyambut setiap diskusi tematis tentang topik kualitas kode. Kami dihubungi oleh klien, siswa, dan pengguna lain dari seluruh Internet. Terlepas dari negara, zona waktu, atau bahasa. Bahasa yang diucapkan, tentu saja. Di antara bahasa pemrograman, kami masih tertarik pada set yang terbatas. Sekarang adalah C, C ++, C # dan Java. Manfaat komunikasi banyak. Kami menerapkan beberapa penawaran pengguna dengan segera, karena mereka sangat membantu. Seringkali kita hanya membantu proyek orang lain, menjelaskan peringatan penganalisa, yang pada akhirnya menjadi kesalahan. Catatan ini tentang satu kasus seperti itu.

Tentang penganalisa


PVS-Studio adalah alat untuk mendeteksi kesalahan dan kerentanan potensial dalam kode sumber program yang ditulis dalam C, C ++, C # dan Java. Ini berjalan pada Windows, Linux, dan macOS.

Untuk komunikasi, ada 3 bentuk umpan balik:

  1. Umpan balik
  2. Permintaan uji coba
  3. Permintaan harga

Kamis malam


Seorang pengguna aktif yang mencoba analisa pada kodenya secara aktif mulai mengirim peringatan palsu. Sebelum saya bisa menjawab, 3 surat terakumulasi. Ini adalah akhir dari hari kerja dan hanya ada sedikit kekuatan yang tersisa (untuk pertanyaan tentang keandalan tinjauan kode manual). Tim kami secara aktif mempersiapkan rilis besar, yang tersisa beberapa hari.

Saya memutuskan untuk menunda jawabannya pada hari Jumat atau bahkan ke minggu berikutnya:

Halo, Konstantin.

Kami mengurai peringatan. Minggu depan saya akan mengomentari tempat mencurigakan :-)

Ini adalah catatan bahwa analisis kode statis sangat efisien, dan tinjauan kode manual akan lebih rendah daripada verifikasi otomatis dalam banyak kasus, terutama pada akhir hari kerja.

Dengan izin pengguna, saya akan memberi tahu Anda tentang korespondensi:

Huruf 1

Positif palsu V712:

uint32_t StartUpCounter = 0, HSEStatus = 0; RCC->CR |= ((uint32_t)RCC_CR_HSEON); /* Wait till HSE is ready and if Time out is reached exit */ { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); // V712... 

Huruf 2

Ada V715 positif palsu:

 { // V715 ... lpmode.cpp 356 HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); 

Huruf 3

Tongkat pohon Natal, tempat ajaib! Semuanya ada di sana, bersumpah (lihat kode dari surat-surat sebelumnya):

V560 Bagian dari ekspresi kondisional selalu benar: (StartUpCounter! = ((Uint16_t) 0x5000)). lpmode.cpp 356

V776 Loop berpotensi tak terbatas. Variabel dalam kondisi keluar loop 'HSEStatus == 0' tidak mengubah nilainya di antara iterasi. lpmode.cpp 356

Mungkin saya tidak mengerti sesuatu? Namun dalam praktiknya, semuanya bekerja, dan jika kuarsa tidak dimulai, maka kami keluar dari bagian ini dengan batas waktu ;-)

Huruf 4 (jawaban)

Halo, Konstantin.

Kami mengurai peringatan. Minggu depan saya akan mengomentari tempat mencurigakan :-)

Huruf 5

Neraka Saya hanya melihat kode Anda setelah tulisan Anda dengan visi lateral - pernyataan do dilewati ... Semuanya jatuh ke tempatnya! Mata cukup kabur%)

do {...} while (...);

Kesimpulan


Seperti yang mungkin Anda perhatikan, ada 4 peringatan penganalisa di tempat yang sama, tetapi masih butuh waktu untuk meyakinkan pengguna kesalahan. Dalam situasi seperti itu, tinjauan manual bahkan tidak akan memiliki kesempatan.

Kisah serupa dengan akhir yang bahagia: " Bagaimana PVS-Studio ternyata lebih penuh perhatian daripada tiga setengah programmer ."

Gunakan analisa statis dalam proyek Anda. Mereka bukan pengganti untuk tinjauan kode dengan kolega, tetapi merupakan pelengkap yang berguna untuk kontrol kualitas kode.



Jika Anda ingin berbagi artikel ini dengan audiens yang berbahasa Inggris, silakan gunakan tautan ke terjemahan: Svyatoslav Razmyslov. Satu Hari dari Dukungan Pengguna PVS-Studio .

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


All Articles