Bug yang dapat dihindari dengan standar pengkodean [ditutup]

11

Saya mencari statistik (atau perkiraan) yang mendukung klaim bahwa standar pengkodean membantu mengurangi bug. Angka-angka sulit akan menyenangkan, walaupun saya belum banyak mencari. Saya bahkan telah melihat pelacakan bug untuk berbagai proyek sumber terbuka, tetapi belum terlalu berhasil menemukan apa yang saya butuhkan. Adakah orang di luar sana yang tahu tempat yang mungkin bisa kutemukan? Atau apakah ada di antara Anda yang berkontribusi pada proyek open-source yang memiliki bug yang mungkin dihindari dengan standar pengkodean yang lebih baik?

PERASAAN
sumber
5
semoga berhasil! menemukan statistik pada hampir semua hal terkait pemrograman sangat sulit.
Winston Ewert
Saya membaca standar pengkodean sekali ... dan itu adalah akhir dari cerita itu. StyleCop, di sisi lain - saya menjalankannya setiap hari.
Ayub
IMO sebagian besar waktu untuk memperbaiki bug dihabiskan untuk memperbaiki bug yang muncul dari kerumitan. Karena itu, tugas Anda sebagai pengembang adalah terus berperang melawan semua pasukan Komplikasi yang beragam. mulai dengan persyaratan bisnis sendiri, dan berlanjut ke penggandaan, dependensi, dan arsitektur, serta konsistensi dan keterbacaan. Standar pengkodean yang buruk hanya mewakili satu batalion kecil di Pasukan Komplikasi yang berhadapan dengan Anda.
Brad Thomas

Jawaban:

8

Standar pengkodean sendiri tidak mengurangi bug. Standar pengkodean sebagai bagian dari proses pengembangan perangkat lunak yang sehat mengurangi bug.

Berikut adalah dua makalah yang mempelajari dampak statistik proses rekayasa perangkat lunak suara pada pengurangan cacat yang dapat Anda gunakan sebagai titik awal:

Gnawme
sumber
3

Coding "standar" ... Ada banyak bidang pengembangan yang dapat distandarisasi. Apakah kita berbicara tentang konvensi pengkodean, seperti standar penamaan dll? Atau apakah kita berbicara tentang sesuatu yang lebih dalam, seperti TDD / BDD, CI, dll?

Saya dapat memberitahu Anda bahwa kepatuhan terhadap metodologi "test-first", dengan CI menegakkan tes lulus dan cakupan kode yang baik, memang mengurangi jumlah bug yang ditemukan oleh klien. Pengujian otomatis, baik oleh pengembang dan QA, juga merupakan cara yang relatif "murah" untuk menemukan bug karena mereka umumnya memiliki waktu umpan balik yang sangat singkat. Anda dapat mengetahui bahwa Anda tidak menulis apa yang Anda pikir Anda tulis dengan menjalankan unit test senilai sekitar 45 detik. Beberapa jam pengujian integrasi akan menemukan tempat-tempat yang menghubungkan semuanya tidak berjalan sesuai rencana, dan pengujian UI end-to-end dan otomatis dapat dengan cepat menemukan kesalahan fungsional dalam perangkat lunak pada level yang sangat tinggi.

Mereka juga mencegah regresi. Anda menemukan bug. Anda menulis tes yang akan membuktikan bahwa perilaku tidak lagi terjadi, Anda membuat kode hingga tes berlalu, dan sekarang Anda memiliki tes yang sejak saat ini akan memastikan bahwa bug tidak pernah menjadi masalah lagi. Menurut pengalaman saya, inilah sumber utama bug baru; memperbaiki satu hal merusak sesuatu yang lain, dan pengujian pengembang Anda terhadap perbaikan mungkin tidak mencakup situasi lain yang sekarang rusak. Melanggar hal-hal yang dulu berfungsi adalah bendera merah BESAR untuk klien Anda.

Terakhir, struktur pengujian otomatis yang Anda bangun ini sebagai bagian dari metodologi ini akan dengan mudah memberi Anda lingkungan tempat Anda dapat merilis versi baru perangkat lunak dengan pemberitahuan sesaat. "Hei, bug yang baru saja kamu perbaiki telah menyebabkan beberapa sakit kepala nyata; kapan kamu akan siap dalam versi baru?" klik "Oh, dalam sekitar 5 menit ketika server build selesai menerbitkannya ke halaman unduhan".

Sejauh konvensi pengkodean dasar, seperti standardisasi nama variabel dll, saya telah menemukan sebagian besar kurang bermanfaat dan lebih menjengkelkan. Itu adalah jenis standar yang "luar biasa, karena ada begitu banyak untuk dipilih". Apa yang Anda anggap sebagai perbedaan antara pengidentifikasi PascalCased dan camelCased mungkin bukan apa yang dipikirkan orang lain. Garisbawahi terkemuka, batas panjang nama (atau persyaratan agar nama metode / bidang menceritakan sebuah kisah); selain konvensi yang dipaksakan oleh kompiler atau yang biasa dilihat dalam kode pustaka khusus bahasa, IDE modern dapat memberi tahu Anda segala sesuatu yang perlu Anda ketahui tentang variabel atau fungsi termasuk apakah Anda harus atau tidak mencoba menggunakannya dalam suatu tertentu keadaan Selain itu, menjalankan pemeriksaan konvensi kode akan sering mengembalikan masalah dengan kode yang Anda tidak bisa atau tidak Saya tidak ingin mengubah, seperti perpustakaan pihak ketiga yang menggunakan serangkaian standar yang berbeda, atau kode interop yang mungkin sesuai dengan standar penamaan API Win alih-alih standar bahasa asli Anda. Anda akhirnya menambahkan cruft ke kode Anda untuk memberi tahu alat Anda untuk mengabaikan cruft dalam kode Anda.

KeithS
sumber
3

Setiap kerentanan injeksi SQL adalah cacat yang bisa dicegah dengan standar pengkodean. Statistik tentang kerentanan injeksi SQL, AFAIK, tersedia.

Setiap kerentanan buffer overflow bisa dicegah dengan standar pengkodean. Statistik tentang itu mungkin tersedia juga.

pengguna16764
sumber