Apakah praktik yang baik untuk menghindari peringatan dan pemberitahuan?

20

Saya biasanya bekerja dengan peringatan dan pemberitahuan PHP, karena saya bekerja pada banyak proyek di mana sudah dalam produksi langsung. Sekarang, jika saya menghidupkan peringatan dan pemberitahuan di situs web produksi langsung ini, mereka akan dipenuhi dengan mereka.

Proyek-proyek yang saya kerjakan di rumah, di lokal, saya biasanya mencoba untuk menghilangkan SEMUA peringatan dan pemberitahuan. Terkadang, tidak ada solusi untuk tidak memiliki pemberitahuan, jadi saya harus berurusan dengan melihat pemberitahuan itu sampai saya memutuskan untuk mematikannya sama sekali.

Pada akhirnya, saya tidak tahu apakah saya membuang-buang waktu untuk menghilangkan semua peringatan dan pemberitahuan, atau bahwa saya benar-benar melakukan ini untuk kebaikan yang lebih besar.

Karena itu pertanyaan saya, apakah praktik yang baik untuk menghindari peringatan dan pemberitahuan sama sekali, atau apakah itu benar-benar tidak masalah?

Audite Marlow
sumber
6
"Kadang-kadang, tidak ada solusi untuk tidak memiliki pemberitahuan" Sudah lama sejak saya menggunakan PHP, tapi saya tidak ingat mengalami kasus di mana Anda dapat menghindari pemberitahuan / peringatan atau setidaknya menekannya secara lokal dengan@ .
CodesInChaos
27
Argumen paling meyakinkan yang pernah saya lihat adalah "pesan-pesan itu ada karena suatu alasan - membiarkan diri kita mengabaikan gelombang peringatan yang menyebabkan kita mengabaikan masalah aktual yang mungkin bisa dihindari." Dengan kata lain, jika tidak ada peringatan atau pemberitahuan selama operasi normal , peringatan atau pemberitahuan apa pun merupakan tanda masalah potensial; jika semuanya hanya berisik, Anda akan mulai memperhatikan masalah hanya setelah SHTF (dan mungkin setelah pelanggan melakukannya).
Piskvor
12
Menggunakan @ untuk menekan pemberitahuan, meskipun umum, umumnya dianggap sebagai hal yang buruk. Ini lebih buruk daripada hanya mematikan semua pemberitahuan karena Anda sekarang telah menyembunyikan masalah potensial. Dalam 15 tahun pemrograman php saya belum menemukan kasus di mana saya harus menekan pemberitahuan dalam kode yang saya kontrol.
Cerad
2
Apakah Anda hanya mematikan tampilan pemberitahuan ini atau sedang Anda lakukan error_reporting(0);? Saya selalu menggunakan error_reporting(E_ALL);dan satu-satunya perbedaan antara pembangunan dan produksi ini_set('display_errors', 'on');vs ini_set('display_errors', 'off');. Saya selalu berusaha memperbaiki pemberitahuan dan peringatan saat kode itu masih segar di pikiran saya. Saya sering mencatat log pada sistem produksi saya untuk melihat apakah ada peringatan dan pemberitahuan tambahan yang mungkin saya lewatkan.
MonkeyZeus
1
Saya sangat setuju dengan apa yang dikatakan @Cerad @. Setelah bertahun-tahun pemrograman PHP, saya belum menggunakan operator itu. Tidak sekali. Tidak pernah. Tidak hanya menyembunyikan potensi masalah, tetapi juga memiliki dampak kinerja: di belakang layar, PHP mematikan pelaporan kesalahan sebelum memanggil kode -> memanggil kode -> mengembalikannya ke nilai aslinya. Langkah-langkah ini mahal jika Anda memiliki lusinan atau ratusan @kode Anda.
Radu Murzea

Jawaban:

26

jika saya mengaktifkan peringatan dan pemberitahuan di situs web produksi langsung ini, mereka akan kelebihan beban dengan mereka.

Anda harus selalu mengaktifkan peringatan ke tingkat sepenuhnya dalam pengembangan, pengujian, dan QA, tetapi tidak dalam produksi. Sebenarnya, jika itu adalah aplikasi dogfooding, yaitu aplikasi yang Anda gunakan sendiri, maka Anda juga harus membuatnya dalam produksi.

Pada dasarnya: minta mereka dihidupkan dalam kasus-kasus di mana orang yang melihatnya berada dalam posisi untuk melakukan sesuatu terhadap mereka (pengembang dalam pengembangan dan pengujian dapat memperbaikinya sendiri, tester di QA dapat mengajukan bug, dan jika pengembang itu juga pengguna, maka ia juga dapat memperbaikinya dalam produksi), tetapi jangan nyalakan ketika orang yang melihat tidak bisa berbuat apa-apa terhadap mereka (pengguna dalam produksi, yang bahkan tidak tahu cara memprogram).

Idealnya, Anda juga ingin mengaktifkan memperlakukan peringatan sebagai kesalahan, tetapi itu hanya bekerja jika tidak ada yang memulai ;-) Tetapi ingatlah ini sebagai tujuan! Jika dimungkinkan untuk mengaktifkan / menonaktifkan ini berdasarkan per-file, aktifkan untuk semua file baru, dan hidupkan untuk semua file bebas-peringatan, dan jangan pernah mematikannya lagi setelah dihidupkan.

Jadi, apa yang harus dilakukan tentang kelebihan?

Anda membuat daftar setiap peringatan dan pemberitahuan, dan kemudian mematuhi aturan berikut:

  1. Tidak pernah, dalam keadaan apa pun, tidak menambahkan peringatan baru ke daftar. Setiap potongan kode baru, setiap suntingan, setiap perubahan, setiap tambalan, setiap komit tidak boleh memperkenalkan peringatan baru, itu hanya dapat memperbaikinya .
  2. Setiap kali Anda menyentuh sepotong kode, perbaiki setiap dan semua peringatan dalam sepotong kode itu. (Aturan Boyscout: selalu meninggalkan perkemahan dalam kondisi yang lebih baik daripada yang Anda temukan.) Dengan begitu, kode yang tidak penting dapat tetap penuh dengan peringatan, tetapi kode yang penting akan menjadi lebih bersih seiring waktu. "Sepotong kode" dapat berupa fungsi, kelas, file. Anda juga dapat melonggarkan aturan ini untuk mengatakan untuk memperbaiki setidaknya satu peringatan. Intinya adalah: perbaiki saat Anda menemukannya.

Catatan: keduanya mengharuskan Anda memiliki semacam database log dan mekanisme penyaringan log. Perhatikan juga, bahwa "log database" dan "mekanisme penyaringan log" hanya bisa berupa file teks dan grep.

Ini adalah bagian yang penting. Tanpa database, Anda tidak akan tahu kapan Anda menambahkan peringatan baru, dan tanpa pemfilteran, Anda masih memiliki masalah kelebihan.

Catatan # 2: ini tidak hanya berfungsi untuk peringatan, tetapi juga berfungsi untuk pemeriksa gaya, metrik kompleksitas, cakupan kode, alat analisis statis, dan sebagainya. Pada dasarnya:

  1. Jangan tambahkan masalah baru.
  2. Perbaiki masalah lama saat Anda menemukan mereka.

Ini memungkinkan Anda untuk dengan mudah memprioritaskan: kode yang sering diedit dan karenanya perlu mudah dibaca dan dipelihara, akan menjadi lebih baik seiring waktu. Kode yang tidak sering disentuh, tidak akan menjadi lebih baik, tetapi tidak apa-apa, karena tidak ada yang perlu melihatnya. Dan , setidaknya itu tidak akan bertambah buruk.

Tentu saja, tidak ada yang menghentikan Anda dari mengalokasikan waktu khusus untuk melakukan apa-apa selain memburu dan membunuh peringatan. Hanya sesering ini, ini tidak layak secara ekonomi, dan tugas Anda sebagai insinyur adalah mengingatnya. "Seorang insinyur adalah orang yang bisa membangun dengan dolar, apa yang bisa dibuat orang bodoh dengan dua."

Jörg W Mittag
sumber
3
Poin lain mengapa mematikan peringatan dan kesalahan yang mencapai pengguna tanpa filter: Sama informatifnya dengan peringatan bagi pengembang, mungkin membocorkan informasi sensitif (nama file, nama server lain yang terlibat, struktur kueri sql yang digunakan, ... )
Hagen von Eitzen
Peringatan dalam produksi harus masuk ke log, bukan ke pengguna! Kesalahan harus ke log, bukan ke pengguna. Situs web yang tidak menjebak kesalahan, mencatatnya, dan menyajikan halaman kesalahan yang sesuai bagi pengguna bukannya siap untuk diproduksi. PHP membuatnya sangat mudah untuk melakukan kesalahan ini, tetapi Anda harus tetap melakukannya dengan benar.
hobbs
49

Jika peringatan dan pemberitahuan berasal dari kode Anda, pasti perbaiki. Dari pengalaman saya, di 95% mungkin jinak, tetapi 5% menyoroti masalah nyata yang dapat menyebabkan banyak waktu yang dihabiskan untuk mengejar.

Jika mereka berasal dari kode pihak ketiga yang harus Anda gunakan untuk satu alasan atau yang lain, Anda umumnya tidak punya banyak pilihan.

Ini adalah pertanyaan yang berbeda jika basis kode legacy Anda benar-benar besar, maka Anda dapat memperlakukan kode legacy sebagai pihak ketiga, tetapi mengharuskan kode baru itu bebas peringatan.

Alexander Pogrebnyak
sumber
8
Saya bekerja di Java / eclipse, yang berbeda dari php jelas, tapi saya biasanya menemukan peringatan itu dimunculkan oleh 1) sesuatu yang mengkompilasi tetapi saya membuat kesalahan yang jelas atau 2) sesuatu yang baik-baik saja sekarang tetapi akan buruk di jalan
corsiKa
1
@corsiKa Saya sedang menerjemahkan komentar Anda untuk PHP tapi saya menyadari bahwa hanya satu kata yang perlu diubah.
wizzwizz4
3
Kecuali, tentu saja, peringatan-peringatan ini berasal dari StyleCop tentang urutan usingpernyataan Anda ...
Dan Pantry
12

Itu penting. Peringatan mungkin tidak mematahkan tes Anda atau bahkan muncul di alam liar untuk sementara waktu - tetapi itu bisa menjadi gejala bug yang menjulang. Saat ini saya mengembangkan terutama di C # / C ++ dan memiliki strategi yang jelas untuk menyingkirkan dan menjaga peringatan dari basis kode kami. Untungnya itu bukan ilmu roket =).

Jika bahasa tempat Anda bekerja memiliki kemampuan untuk memperlakukan peringatan sebagai kesalahan dan memiliki tingkat peringatan variabel, saya akan melakukan hal berikut:

  1. Turunkan level peringatan cukup jauh sehingga Anda tidak mendapatkan peringatan apa pun. Jika Anda berada di tingkat peringatan terendah dan Anda masih mendapatkan peringatan - cobalah untuk memperbaikinya. Jika Anda tidak dapat memperbaikinya, maka Anda sudah selesai sekarang, tetapi semoga Anda dapat memperbaikinya. Bagus.
  2. Karena Anda sekarang tidak memiliki peringatan (pada tingkat peringatan rendah kemungkinan besar), balik saklar dan perlakukan semua peringatan sebagai kesalahan.
  3. Coba naikkan tingkat peringatan dan perbaiki semua peringatan baru. Jika tidak bisa, turunkan kembali tingkat peringatan, tetapi jangan matikan memperlakukan peringatan sebagai kesalahan.

Saya mendapati bahwa ini tidak hanya berfungsi sebagai peringatan dari kode saya - tetapi juga mencegahnya .

PerryC
sumber