Satu Hari dari Dukungan Pengguna PVS-Studio

Gambar 2

Kami menyambut setiap obrolan pada kualitas kode. Klien kami, siswa, dan pengguna lain dari seluruh penjuru Internet menulis surat kepada kami. Terlepas dari negara, zona waktu, atau bahasa. Nah, berbicara bahasa, bukan pemrograman. Di antara bahasa pemrograman, kami sejauh ini tertarik pada set yang terbatas. Saat ini, C, C ++, C # dan Java. Ada banyak manfaat dari komunikasi. Kami segera menerapkan beberapa saran pengguna, karena mereka sangat berguna. Seringkali kita hanya membantu proyek seseorang dengan menjelaskan peringatan penganalisa, yang akhirnya menjadi kesalahan. Catatan ini tentang kasus seperti itu.

Tentang penganalisa


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

Ada tiga formulir umpan balik untuk menghubungi kami:

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

Kamis malam


Seorang pengguna aktif yang mencoba analisa pada kodenya secara aktif mulai mengirimkan peringatan palsu. Sebelum saya bisa menjawab, sudah ada 3 email. Itu adalah akhir hari kerja dan saya lelah (berbicara tentang pertanyaan keandalan tinjauan kode manual). Tim kami secara aktif mempersiapkan untuk rilis tempa tinggi, yang beberapa hari lagi.

Saya memutuskan untuk menjawab pada hari Jumat atau bahkan selama minggu berikutnya:

Halo Constantine

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

Catatan ini adalah tentang efektivitas analisis kode statis. Tinjauan kode manual akan lebih rendah daripada pemeriksaan otomatis dalam banyak kasus, terutama pada akhir hari.

Dengan izin pengguna, saya akan mengutip Anda surat kami:

Email 1

Peringatan V712 positif-palsu:

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... 

Email 2

V715 false positive untuk fragmen yang sama:

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

Email 3

Kucing suci, tempat berhantu seperti itu! Penganalisa mengeluh tentang fragmen yang sama (lihat kode dari email 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 mendapatkan sesuatu? Tetapi dalam prakteknya semuanya bekerja, dan jika kuarsa tidak dimulai, maka kita keluar dari fragmen ini pada batas waktu ;-)

Email 4 (balas)

Halo Constantine

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

Email 5

Sialan! Hanya setelah email Anda, saya perhatikan bahwa pernyataan "lakukan" tidak terjawab ... Akhirnya, semua jatuh ke groove! Sepertinya saya benar-benar kehilangan ketajaman mata saya%)

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

Kesimpulan


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

Kisah serupa dengan akhir yang bahagia: " Bagaimana PVS-Studio Terbukti Lebih Penuh Perhatian Daripada Tiga Setengah Programer "

Gunakan analisa statis dalam proyek Anda. Mereka tidak mengganti tinjauan kode dengan kolega, tetapi menambahkan dukungan untuk kontrol kualitas kode.

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


All Articles