Saya mengerjakan proyek besar (lebih seperti kombinasi puluhan proyek mini yang tidak dapat dipisahkan dengan mudah karena manajemen ketergantungan yang buruk, tapi itu diskusi yang berbeda) di Jawa menggunakan gerhana. Kami telah mematikan sejumlah peringatan dari pengaturan kompiler dan proyek masih memiliki lebih dari 10.000 peringatan.
Saya seorang pendukung besar untuk mencoba mengatasi semua peringatan, memperbaikinya semua jika mungkin, dan bagi mereka yang melihat ke dalam dan dianggap aman, tekan mereka. (Hal yang sama berlaku untuk obsesi keagamaan saya dengan menandai semua metode yang diimplementasikan / diganti sebagai @Override). Argumen terbesar saya adalah bahwa secara umum peringatan membantu Anda menemukan bug potensial selama waktu kompilasi. Mungkin dari 99 dari 100 kali, peringatannya tidak signifikan, tapi saya pikir kepala yang menggaruk itu menghemat satu kali mencegah bug besar, itu semua sepadan. (Alasan saya yang lain adalah OCD saya yang jelas dengan kode bersih).
Namun, banyak rekan tim saya tampaknya tidak peduli. Saya sesekali memperbaiki peringatan ketika saya menemukan mereka (tapi Anda tahu itu sulit ketika Anda menyentuh kode yang ditulis oleh rekan kerja). Sekarang dengan lebih banyak peringatan daripada kelas, keuntungan dari peringatan sangat diminimalkan, karena ketika peringatan adalah hal yang biasa, tidak ada yang akan repot-repot melihat semuanya.
Bagaimana saya bisa meyakinkan rekan tim saya (atau kekuatan yang ada) bahwa peringatan perlu ditangani (atau ditekan ketika diselidiki sepenuhnya)? Atau haruskah saya meyakinkan diri sendiri bahwa saya gila?
Terima kasih
(PS Saya lupa menyebutkan apa yang akhirnya mendorong saya untuk mengirim pertanyaan ini adalah saya sedih melihat bahwa saya memperbaiki peringatan lebih lambat daripada yang dihasilkan)
javac
.-Wall -Wextra -Werror
(yaitu, mengaktifkan sebagian besar peringatan yang tersedia, memperlakukan semuanya sebagai kesalahan). Eclipse C ++ hampir tidak dapat digunakan lagi: /Jawaban:
Anda dapat melakukan dua hal.
Tekankan bahwa peringatan ada karena suatu alasan. Penulis kompiler tidak memasukkan mereka karena mereka kejam. Orang-orang di industri kami umumnya sangat membantu. Banyak peringatan sangat membantu.
Kumpulkan riwayat kegagalan spektakuler yang muncul dari peringatan yang diabaikan. Pencarian web untuk "Perhatikan peringatan kompiler" mengembalikan beberapa anekdot.
Obsesi Anda
@Override
bukanlah "obsesi". Itu adalah hal yang baik. Pernah salah mengeja nama metode?sumber
if (error = 0)
bukannyaif (error == 0)
. Selain itu, banyak peringatan juga membuatnya lebih mudah untuk menemukan kesalahan kompiler tanpa harus mengarungi rim peringatan.Bacaan yang relevan di sini . C ++, tetapi masih relevan. Saya terutama menyukai contoh ini (komentar kode adalah milik saya):
Sering kali, peringatan akan berarti perbedaan antara aplikasi mogok dengan kesalahan yang sebenarnya akan membantu Anda melacak cacat desain dan memperbaikinya (seperti pengindeksan yang aman ) atau aplikasi membuat asumsi dan kemudian benar-benar berperilaku salah atau cara yang salah (yang akan terjadi dengan typecasting tidak aman ). Demikian pula, mereka juga menunjukkan kode cacat atau mati yang dapat dihapus (blok kode tidak dapat dijangkau, variabel yang tidak digunakan), yang dapat dianggap optimasi kode, atau tidak diperhitungkan - untuk kasus yang akan muncul dalam pengujian, seperti contoh di atas untuk C ++. Perhatikan bahwa contoh ini menghasilkan kesalahan waktu kompilasi di Jawa.
Jadi, memperbaiki peringatan memiliki (setidaknya) beberapa keuntungan bagi manajemen:
Perhatikan bahwa saya masih seorang junior dev yang hanya tahu sedikit tentang manajemen proyek, jadi jika saya telah mengatakan sesuatu yang salah tolong perbaiki pemikiran saya dan beri saya kesempatan untuk mengedit sebelum Anda menurunkan saya dari keberadaan :)
sumber
Saya pernah mengerjakan proyek dengan karakteristik serupa di masa lalu. Yang satu ini pada mulanya ditulis di Jawa 1.4. Setelah Java 5 dengan obat generik keluar, orang dapat membayangkan jumlah peringatan yang dilemparkan oleh kompiler untuk setiap penggunaan API Koleksi.
Mungkin perlu beberapa waktu untuk menghilangkan semua peringatan, dengan mulai menggunakan obat generik. Itu adalah faktor yang harus diperhitungkan, tetapi ketika Anda harus meyakinkan seseorang (terutama manajer Anda) bahwa itu perlu diperbaiki, Anda akan memerlukan data yang sulit, seperti
Anda bisa terus menyajikan tagihan yang menunjukkan bagaimana Anda kehilangan waktu dan uang dengan mengabaikan peringatan "tertentu", dan seseorang akan mendapatkan ide. Bagian kuncinya adalah bahwa tidak semua peringatan layak dilihat, setidaknya tidak segera; dengan kata-kata yang lebih sederhana, Anda perlu menetapkan prioritas peringatan yang perlu ditangani segera. Untuk mulai dengan, pertimbangkan yang berkaitan dengan bug yang Anda lihat di proyek Anda.
Anda juga dapat membuat catatan di pelacak bug, ketika Anda memperbaiki bug, bahwa bug tersebut bisa dihindari dengan tidak mengabaikan peringatan (atau mungkin dengan menjalankan PMD atau FindBugs jika Anda memiliki CI atau membangun sistem). Selama ada cukup banyak bug yang dapat diperbaiki dengan mengindahkan peringatan kompiler, poin Anda tentang melihat peringatan kompiler akan valid. Kalau tidak, itu adalah keputusan bisnis, dan biasanya tidak sepadan dengan waktu yang dihabiskan untuk melawan pertempuran ini.
sumber
Jika Anda berhasil dan tim Anda memutuskan untuk mematuhi peringatan, Anda harus mengambil pendekatan langkah-bijaksana. Tidak ada yang bisa dan akan 10000 peringatan dalam satu waktu. Jadi, Anda dapat memilih yang paling penting (bug yang memiliki probabilitas tinggi) dan menonaktifkan yang kurang penting. Jika sudah diperbaiki, tambah lagi tingkat peringatan. Selain itu, Anda bisa mulai dengan FindBugs, yang memperingatkan kode yang hampir selalu berupa bug.
sumber
Saya sepenuhnya setuju dengan Anda, itu adalah praktik terbaik untuk membersihkan peringatan kompilasi sebanyak mungkin. Anda menyebutkan bahwa tim Anda menggunakan Eclipse sebagai alat pengembangan. Eclipse adalah alat yang sangat baik untuk membantu Anda membersihkan kode dan membuat konsistensi gaya kode.
Eclipse akan membuat beberapa file properti untuk preferensi tersebut di bawah folder .settings, Anda dapat menyalinnya ke proyek Java lainnya dan memeriksanya di SCM sebagai bagian dari kode sumber.
Anda dapat memeriksa kode Eclipse untuk melihat bagaimana pengembang Eclipse melakukannya.
sumber
Anda memiliki dua cara untuk menghilangkan semua peringatan (dan saya setuju itu dapat menyembunyikan bug halus):
Saya percaya bahwa 1 tidak layak dalam kasus Anda lagi. Mungkin ini juga akan memakan waktu lama karena banyaknya peringatan yang akan ditampilkan dalam output produktivitas sehingga manajemen perlu mengetahui pula.
Jadi, saran saya adalah: Angkat dengan bos, yakinkan dia ini bom yang berdetak, dan minta dibuatkan kebijakan resmi.
sumber
Saya hanya akan mengatakan kepada mereka bahwa sebagian besar dari ini adalah peringatan yang tidak penting dan sangat penting bagi kita untuk menghapusnya dari daftar. Sehingga kita tidak akan melewatkan peringatan signifikan nyata di tengah orang banyak, seperti yang terjadi!
sumber
Anda akan membutuhkan banyak kesabaran dalam mencoba meyakinkan mereka, menghapus peringatan ketika melakukan pemrograman pasangan akan membantu orang lain mengambil kebiasaan itu. Sarankan mereka untuk membaca Java Efektif 'Item 24: Menghilangkan peringatan yang tidak dicentang' (untuk koleksi umum). Dan mungkin mengabaikan banyak contoh ketika orang tidak mengikuti saran Anda;)
sumber
Pendekatan yang efektif di sini adalah dengan menyiapkan server Integrasi Berkelanjutan yang secara otomatis membangun proyek dan menjalankan tes setiap kali ada orang yang memeriksa kode. Jika Anda belum menggunakan ini, Anda harus melakukannya, dan tidak terlalu sulit untuk meyakinkan orang lain tentang manfaat melakukannya.
Meyakinkan manajemen / tim tentang manfaat melakukan hal ini (mencegah pembangunan yang buruk dari penyebaran, menemukan bug lebih awal, terutama yang secara tidak sengaja memengaruhi bagian lain dari perangkat lunak, mempertahankan pengujian regresi, pengujian awal dan sering, dll.)
Instal server CI dengan semua tes lulus (jika Anda tidak memiliki tes, tulis tes cepat yang lulus, sehingga semua orang melihat bahwa itu hijau).
Siapkan email atau pemberitahuan lain tentang status setiap bangunan. Penting di sini untuk memasukkan siapa yang memeriksa dalam kode, apa perubahannya (atau tautan ke komit), dan status + output dari build. Ini adalah langkah penting, karena menyebabkan visibilitas di seluruh tim baik untuk kesuksesan maupun untuk kegagalan.
Perbarui server CI untuk membuat tes gagal jika ada peringatan. Ini akan dilihat oleh pimpinan dan pimpinan tim sebagai peningkatan disiplin tim secara sistematis, dan tidak ada yang mau bertanggung jawab atas semua kegagalan email yang keluar.
(opsional) dapatkan baik dan culun dengan ini, dengan menambahkan beberapa dashboard terlihat, lampu lava, lampu berkedip, dll untuk menunjukkan status membangun dan siapa yang merusak / memperbaikinya.
sumber