Haruskah standar pengkodean ditegakkan oleh server integrasi berkelanjutan?

14

Haruskah pengkodean standar / gaya ditegakkan oleh server integrasi berkelanjutan menjalankan alat analisis statis (mis. PMD, StyleCop / FxCop) dan gagal membangun jika standar tidak diikuti? Apa jenis aturan yang tidak boleh digunakan untuk gagal membangun?

Leif Carlsen
sumber

Jawaban:

11

Standar Pengkodean harus ada karena suatu alasan ... dan ketidakpatuhan harus diperiksa.

Namun, tidak semua pelanggaran harus dianggap sebagai kesalahan - sama seperti tidak semua pelanggaran kompilasi. Di mana Anda menarik garis harus menjadi keputusan perusahaan dan alat.

Sebagai contoh, MISRA mendefinisikan aturannya sebagai Wajib dan Penasihat ... Saya akan menyarankan agar Penasihat mengizinkan bangunan untuk melanjutkan.

Andrew
sumber
9
Saya setuju dengan Anda (+1) tetapi hanya sebagian: Saya selalu bertanya pada diri sendiri mengapa seseorang harus mengaktifkan kompilator atau peringatan polisi gaya tertentu dan kemudian mengabaikannya. Enam bulan kemudian di setiap bangunan Anda mendapatkan beberapa ratus peringatan yang masih diabaikan begitu saja. Saya lebih suka mematikan peringatan seperti itu dan memiliki bangunan yang bersih, atau memutuskan untuk tidak mengabaikannya dan meminta mereka merusaknya (dilaporkan sebagai kesalahan).
Giorgio
1
@Giorgio - Saya setuju (sebagian besar) tetapi telah menemukan bahwa menjadi terlalu liberal dengan peringatan yang menghambat bisa menjadi resep untuk menyembunyikan masalah nyata ... jadi peringatan yang diabaikan harus diperiksa secara berkala
Andrew
5

Ini tidak sepenuhnya tidak pernah terdengar dan Anda akan tahu apakah itu akan bekerja untuk Anda hanya dengan mencobanya. Ada beberapa langkah yang bisa diambil sebelum itu.

Pertama, tim harus memutuskan standar bersama. Maka alat seperti ReSharper harus digunakan untuk memberi tahu pengembang jika mereka tidak mematuhi standar. Melakukan tinjauan sejawat pada setiap tugas dapat membantu lebih jauh.

Setelah langkah-langkah tersebut diambil, dapat dianggap menempatkan pemeriksaan standar pengkodean ke CI-server. Namun harus tetap dipertimbangkan jika bijaksana untuk membangun break karena tidak mematuhi standar pengkodean. Risikonya adalah Anda akan memiliki banyak bangunan rusak yang mungkin merusak arti bangunan rusak.

Alih-alih membuat build build, Anda bisa menjalankan alat dan meminta mereka membuat laporan. Jika mengkode pelanggaran standar tampaknya meningkat, Anda dapat mengumpulkan tim dan mencari tahu mengapa itu terjadi.

simoraman
sumber
2

Haruskah pengkodean standar / gaya ditegakkan oleh server integrasi berkelanjutan menjalankan alat analisis statis (mis. PMD, StyleCop / FxCop) dan gagal membangun jika standar tidak diikuti?

Pemeriksaan integrasi berkesinambungan harus sangat, sangat cepat. Setiap penundaan yang berarti akan membuat programmer Anda akan berkomitmen dan kehilangan jejak proses pemikiran mereka sambil menunggu hasil. Buat lebih lama dan mereka akan berkomitmen dan mendapatkan secangkir kopi atau mengobrol dengan teman kantor mereka tentang kinerja ceroboh terbaru dari beberapa tim olahraga. Penundaan itu sangat kontraproduktif. Beberapa hal sebaiknya diserahkan kepada build malam atau review kode.

Apa jenis aturan yang tidak boleh digunakan untuk gagal membangun?

Yang subyektif, untuk memulai. Bagaimana Anda menegakkan aturan "Kode akan mendokumentasikan diri sendiri atau berkomentar dengan baik"? Aturan "no magic number"? Itulah hal-hal yang sebaiknya diserahkan kepada tinjauan kode.

Kategori lainnya adalah pelanggaran terhadap aturan yang telah diberikan pengabaian. Mengingat basis kode yang cukup besar, pasti akan ada beberapa kode di mana melanggar standar adalah hal yang tepat untuk dilakukan.

David Hammen
sumber
2

Sebagai bagian dari Rencana Peningkatan Kualitas Perangkat Lunak, kami baru-baru ini memberi kode serangkaian sniff kode untuk diintegrasikan ke dalam proses pembuatan kami.

Kami membangun banyak, menjadi aplikasi PHP tidak ada kompilasi nyata sehingga build benar-benar merupakan unit test / analisis statis / pelari, dan kami mampu menghabiskan beberapa siklus untuk ini.

Kami memiliki beberapa masalah kualitas kode, dan beberapa kode lama dengan banyak masalah.

Mulai dengan dasar bahwa jika tidak gagal, komit akan diabaikan kami mulai mengkonfirmasikan komitmen terhadap standar pengkodean 'yang diinginkan' kami, dan gagal komit dengan kesalahan yang tidak memenuhi standar.

Pemeliharaan lahan terhenti, bahkan perbaikan paling sederhana untuk komponen lawas mengharuskan pengembang untuk memformat ulang sumber dalam jumlah besar, dan bangunan itu rusak lebih sering daripada tidak. Tak perlu dikatakan, kami mengubah kesalahan menjadi peringatan, dan sekarang mereka, diabaikan dan 'sebagian besar' sia-sia.

Jadi saya akan mengatakan ini (belajar dari pengalaman sulit).

Pastikan standar basis kode Anda cukup dekat dengan standar yang Anda tegaskan bahwa Anda tidak memerlukan dev untuk memformat ulang volume kode, secara instan. Atau .. Anda siap dan mengharapkan peningkatan upaya.

Menjadi tim kecil dengan persyaratan pengiriman yang sangat besar, kami tidak mampu mengubah tim menjadi operasi faktor-besar. Standar pengkodean kami sekarang sebagian besar ditangani oleh tinjauan manual, dan warisan sedang ditulis ulang sebagai bagian dari rencana perbaikan berkelanjutan.

Ketika saya mengatakan bahwa peringatan itu 'sebagian besar' tidak ada gunanya, nah kita sekarang menggunakannya untuk merekam statistik yang memungkinkan kita untuk mengukur kpi yang harus terus menunjukkan peningkatan.

Ketika kita menegakkan kembali sniff kode, kita akan mulai menyalakan, dan memperkenalkan beberapa sniff sekaligus sampai kita memiliki standar yang ditegakkan.

Gavin Howden
sumber
Persis. Jika tidak merusak bangunan, tidak berguna untuk mendapatkan kepatuhan dengan standar.
Andy
1

Itu akan tergantung pada tujuan dan strategi utama Anda .

Memaksa semua standar yang disebutkan dalam server CI mungkin tampak sangat menguntungkan. Namun, itu mungkin tidak praktis untuk tim pengembangan besar (lebih dari 6 pengembang), jika dilakukan pada setiap komit ke server. Menunggu server Anda merespons setelah melakukan, jangan sampai lama. Mungkin berpotensi menyebabkan waktu henti.

Namun, itu benar-benar sah untuk memblokir komit jika kode (yang sebenarnya berubah-set) memiliki masalah ketergantungan atau tidak dikompilasi. Namun, gagal kode karena tata letak kode dan beberapa konvensi penamaan mungkin terlalu parah dan tidak vital pembatasan untuk aturan komit server CI.

Tetapi sangat mungkin aturan yang membantu jika diterapkan pada malam hari.

Selain itu, alat re-factoring dapat membantu dalam menerapkan dan mempelajari standar - seperti penggunaan kembali atau JustCode oleh pengembang.

Yusubov
sumber
Saya tidak setuju. Ini tidak akan menjadi standar jika tidak dipaksakan oleh server build, terutama dalam tim besar. Selain itu, tidak ada yang harus menunggu untuk membangun server, pemeriksaan yang sama harus dilakukan oleh devs sebelum mereka melakukan.
Andy