Ketika rekan kerja saya berpikir bahwa tidak perlu melakukan tes pada PC-nya, dia membuat perubahan, melakukan dan kemudian mendorong. Kemudian dia menguji pada server produksi dan menyadari bahwa dia membuat kesalahan. Itu terjadi seminggu sekali. Sekarang saya melihat bahwa dia membuat 3 komit dan mendorong dengan penyebaran ke server produksi dalam 5 menit.
Saya mengatakan kepadanya beberapa kali bahwa ini bukan cara kerja yang baik dilakukan. Saya tidak ingin bersikap kasar kepadanya lagi dan dia berada dalam status yang sama dengan saya di perusahaan dan dia telah bekerja lebih dari saya di sini.
Saya ingin perilaku ini dihukum dengan cara tertentu atau menjadikannya tidak menyenangkan sebanyak mungkin.
Sebelum saya mulai, perusahaan itu menggunakan metode-metode antik, seperti FTP, dan tidak ada kontrol versi.
Saya memaksa mereka / kami untuk menggunakan Git, Bitbucket, Dploy.io, dan HipChat. Penyebaran tidak otomatis, seseorang harus masuk ke dply.io dan tekan tombol deploy.
Sekarang, bagaimana saya bisa memaksa mereka untuk tidak menguji pada server produksi? Sesuatu seperti bot HipChat dapat merasakan bahwa ada pengeditan berulang pada baris yang sama dan mengirimkan pemberitahuan kepada programmer.
sumber
Jawaban:
Anda memerlukan proses Jaminan Kualitas (QA) yang tepat.
Dalam tim pengembangan perangkat lunak profesional, Anda tidak mendorong dari hak pengembangan ke produksi. Anda memiliki setidaknya tiga lingkungan terpisah: pengembangan, pementasan dan produksi.
Ketika Anda berpikir bahwa Anda mendapatkan sesuatu yang berfungsi di lingkungan pengembangan Anda, Anda mendorong untuk melakukan pementasan terlebih dahulu, di mana setiap komit diuji oleh tim QA, dan hanya jika tes itu berhasil, itu akan didorong ke produksi. Idealnya, pengembangan, pengujian dan mendorong produksi dilakukan oleh orang yang terpisah. Ini dapat dipastikan dengan mengonfigurasi sistem otomasi bangunan Anda dengan cara yang hanya dapat digunakan pengembang dari pengembangan hingga pementasan dan bahwa tim QA hanya dapat menyebar dari pementasan ke produksi.
Ketika Anda tidak dapat membujuk manajemen untuk mempekerjakan seseorang untuk melakukan QA Anda, maka mungkin salah satu dari Anda dapat memainkan peran itu untuk yang lain. Saya tidak pernah bekerja dengan diploy.io, tetapi beberapa sistem otomasi bangunan dapat dikonfigurasikan sedemikian rupa sehingga pengguna dapat menggunakan baik dari pengembangan hingga pementasan dan dari pementasan ke produksi, tetapi tidak melakukan keduanya untuk bangunan yang sama, sehingga orang kedua selalu diperlukan (tetapi pastikan Anda memiliki beberapa orang cadangan untuk saat-saat ketika salah satu dari Anda tidak ada).
Pilihan lain adalah meminta staf pendukung Anda melakukan QA. Ini mungkin tampak seperti pekerjaan tambahan bagi mereka, tetapi juga memastikan bahwa mereka mengetahui adanya perubahan pada aplikasi yang dapat menyelamatkan mereka beberapa pekerjaan dalam jangka panjang.
sumber
Anda mungkin ingin mendapatkan server dev, dan lebih disukai lingkungan pementasan juga. Tidak seorang pun boleh mendorong dari lokal ke produksi kecuali untuk situs web pribadi mereka sendiri. Proses penyebaran Anda seharusnya hanya mendukung dev-> staging-> prod. Anda mungkin ingin seseorang yang bertanggung jawab untuk menandatangani rilis baru - tergantung pada organisasi, ini bisa menjadi pemimpin proyek, QA yang berdedikasi atau tugas yang berputar setiap minggu (dengan pengingat yang nyata misalnya hanya orang dengan mainan berbulu yang dapat melakukannya pada minggu itu). Dorong). Namun, diskusikan dengan tim Anda terlebih dahulu untuk mendapatkan dukungan (lihat di bawah).
Anda bisa meminta suite pengujian Anda (Anda punya salah satunya, kan?) Termasuk cek yang menentukan apakah Anda berada di server produksi dan, jika ya, mengirim semua email di kantor berkata
Looks like $username is testing on prod, watch out
. Mungkin mempermalukan rekan kerja Anda di depan umum tidak menyenangkan. Atau Anda dapat membuat batasan teknis seperti IP-melarang tim Anda untuk melihat prod (yang dapat Anda angkat tetapi Anda harus menjustifikasi).Tapi saya tidak merekomendasikannya, Anda akan terlihat seperti masalah, bukan orang yang menguji pada prod dan Anda bisa membuat diri Anda sangat tidak populer dengan orang-orang di tim yang tidak peduli.
Tentunya yang benar-benar Anda inginkan bukan agar perilaku ini dihukum tetapi agar tidak dihentikan ?
Sangat bagus bahwa Anda menganjurkan peningkatan alur kerja, tetapi sepertinya Anda tidak terlalu memikirkan kolega Anda dan / atau bahwa Anda tidak memiliki dukungan penuh dari mereka. Hal ini kemungkinan mengakibatkan rekan setengah berinteraksi dengan alur kerja, melakukan minimum yang diperlukan untuk mendapatkan kode ke produksi dan tidak benar-benar mengikuti semangat alur kerja, yang akan berarti lebih banyak waktu dihabiskan untuk menyelesaikan. Dan ketika Anda menghabiskan lebih banyak waktu untuk membersihkan hasil interaksi yang tidak memadai dengan alur kerja (karena tidak ada orang lain yang peduli, kan?) Semua orang akan mempertanyakan alur kerja itu sendiri.
Jadi mulailah dengan percakapan.
Cari tahu mengapa hal itu terjadi (apakah mesin kolega Anda tidak sebagus pengujian? Apakah kolega Anda tidak yakin dengan cabang fitur atau terjebak dalam pola pikir svn di mana komit dan dorong sama?), Jelaskan mengapa merupakan masalah bagi Anda bahwa kode yang belum diuji berjalan pada dev / staging / prod, dan lihat apakah Anda dapat melakukan sesuatu untuk mengubah mengapa itu terjadi (kolega Anda akan lebih mungkin melakukan apa yang Anda inginkan jika Anda baru saja membuatnya lebih baik untuk menguji secara lokal daripada jika Anda baru saja mencaci maki mereka).
Jika Anda tidak dapat menyelesaikannya dan itu benar-benar mengarah pada perbedaan pendapat, jadwalkan diskusi di seluruh tim dalam pertemuan retrospektif Anda berikutnya, lihat apa yang dilakukan dan dipikirkan oleh rekan kerja Anda. Buat kasus Anda, tetapi dengarkan konsensus. Mungkin tim Anda mengatakan tidak apa-apa untuk menguji perbaikan tekstual secara lokal, dan Anda hanya memiliki aturan bahwa tidak ada fitur besar yang belum dicoba. Tuliskan dalam pertemuan dan bacakan apa yang Anda putuskan secara kolektif tentang apa yang diizinkan pada masing-masing lingkungan. Tetapkan tanggal dalam beberapa bulan untuk memeriksanya, mungkin secara retrospektif.
sumber
Di tempat kerja, kami menghindari ini dengan menggunakan Gerrit . Gerrit adalah sistem peninjauan kode yang bertindak sebagai gerbang ke cabang Git utama / produksi Anda yang secara konvensional disebut "master". Anda memiliki ulasan kode, bukan? Sepertinya Anda secara pribadi melakukannya dengan sangat baik. Dengan Gerrit, Anda mendorong ke semacam cabang pementasan yang, setelah Anda dan rekan kerja Anda melakukan proses peninjauan kode dengan memuaskan, Gerrit kemudian bergabung ke cabang master Anda. Anda bahkan dapat mengaitkan Gerrit ke server CI untuk menjalankan tes unit sebelum siapa pun mendapat email untuk meninjau perubahan. Jika Anda tidak memiliki server tempat Anda dapat menyiapkan alat CI, Codeship memiliki rencana gratis yang bagus untuk digunakan sebagai bukti konsep.
Terakhir, tentu saja, adalah untuk mengotomatiskan penyebaran produksi hanya dari produk-produk build yang disetujui yang telah selamat dari tinjauan kode dan pengujian unit. Ada beberapa teknologi keren yang muncul untuk ini, yang saya tidak akan menyebutkan karena khawatir itu akan menjadi umpan api.
Pergi ke atasan Anda dengan solusi. Yang ini berlaku bahkan untuk Anda, dan merupakan cara untuk meningkatkan kualitas kode semua orang, bukan hanya menghukum rekan kerja Anda.
sumber
Saya melihat ini sebagai masalah besar manusia - proses ada di sana dan alat ada di sana, tetapi prosesnya tidak diikuti.
Saya setuju dengan apa yang orang lain katakan di sini, tentang kemungkinan bahwa itu sangat mungkin pengembang yang bersangkutan hanya terjebak dalam SVN pola pikir, dan mungkin berpikir bahwa ia adalah mengikuti proses.
Saya menemukan bahwa cara terbaik untuk mengatasi masalah seperti ini, terutama di mana mungkin tidak ada atasan yang jelas, tidak berputar di sekitar hukuman atau penghapusan akses - ini hanya mengarah pada kebencian dan karena sepertinya Anda adalah pendukung keras mengikuti prosesnya (selalu ada satu, dan saya pernah menjadi 'lelaki itu' sebelumnya), Andalah yang paling bisa mengatasi panasnya. Berputar di sekitar membawa orang untuk menyetujui proses pertama
Di sinilah pertemuan terstruktur, seperti "pelajaran yang dipelajari" -jenis rapat setelah insiden besar dalam produksi, bisa sangat berguna. Cobalah membuat semua orang setuju, termasuk pengembang yang bersangkutan, bahwa tinjauan kode, pengujian unit, pengujian komprehensif, dll. Semua harus dilakukan setiap waktu (dan Anda dapat mulai memperkenalkan gagasan tentang lingkungan pementasan di sini juga). Seharusnya tidak sulit, dan itu sangat masuk akal. Kemudian minta tim untuk membuat beberapa aturan yang solid bersama, tentang bagaimana hal itu harus dilakukan. Semakin banyak pengembang yang menyebabkan masalah berkontribusi, semakin mereka akan merasa seperti mematuhi aturan, dan mulai melihat mengapa perilaku mereka menjadi masalah.
Poin terakhir, jangan pernah jatuh ke "baik, itu lebih baik daripada dulu!" perangkap. Selalu ada ruang untuk perbaikan. Adalah umum bagi orang-orang di industri IT, dalam pengalaman saya, untuk mulai menerima apa yang mereka miliki, setelah beberapa perbaikan. Penyelesaian kemudian berlanjut, sampai Anda tiba-tiba berada di titik krisis lagi.
sumber
Ini tidak biasa , terutama di tim kecil. Jangan membuat masalah besar tentang hal itu, tetapi buat aturan informal:
Hancurkan bangunan, bawa donat.
Salah satu dari 1) Anda akan mendapatkan donat dua kali seminggu atau 2) mereka akan mematuhi standar.
Bawa itu dalam rapat. Tidak menuduh, jangan menyebut siapa pun dengan nama, tetapi sesuatu yang mirip dengan, "Sejak kami memperkenalkan kontrol versi dan standar penerapan, segalanya menjadi jauh lebih mudah dan server lebih banyak dari waktu yang biasanya. Ini hebat! Namun masih tergoda untuk mengambil jalan pintas dan mengirim tanpa pengujian yang tepat. Ini adalah pertaruhan, dan server kami ada di jalur. Saya menyarankan bahwa mulai sekarang jika ada di antara kita yang mengirimkan kode yang merusak server, orang yang bertanggung jawab membawa masuk donat untuk tim pada hari berikutnya. "
Ganti sesuatu yang lain untuk donat jika diinginkan, dan jangan membuatnya mahal - makan siang untuk seluruh tim akan terlalu banyak, tetapi kotak donat $ 5 atau nampan buah / sayuran, atau keripik dan celup, dll, dll mungkin akan mengganggu cukup untuk membuat mereka benar-benar menimbang risiko terhadap kemudahan melewatkan pengujian tanpa menjadikannya beban yang akan mendorong mereka menjauh dari tim atau perusahaan.
sumber
Alih-alih memaksa kolega Anda, cobalah membuat mereka melihat sesuatu dari sudut pandang Anda. Ini akan membuat segalanya lebih mudah bagi semua orang. Yang membawaku ke ...
Mengapa Anda merasa kesulitan dengan masalah di server langsung, tetapi tidak untuk orang ini? Apakah Anda tahu sesuatu yang tidak dia ketahui? Apa yang dapat Anda lakukan untuk membuatnya melihat hal-hal seperti yang Anda lakukan?
Jika Anda berhasil dengan ini, Anda akan mengeluarkan yang terbaik dalam dirinya dan dia akan menemukan solusi untuk masalah yang tidak pernah Anda pikirkan.
Secara umum, cobalah bekerja sama dengan orang-orang untuk memecahkan masalah daripada memaksa mereka ke dalam proses yang tidak dimengerti.
sumber
Apa hal terburuk yang bisa terjadi? Apakah Anda memiliki cadangan yang cukup baik sehingga bug yang memodifikasi catatan acak di database Anda dapat diperbaiki dengan mengembalikan versi lama?
Katakanlah Anda memiliki bug di mana Anda menggunakan id rekaman, dan secara tidak sengaja jumlah tagihan dalam sen disimpan dalam variabel yang digunakan untuk id rekaman. Jadi jika saya membayar $ 12,34 maka catatan dengan id 1234 akan dimodifikasi. Bisakah Anda pulih dari itu, jika perangkat lunak berjalan selama beberapa jam hingga bug terdeteksi? (Jika record dan record 1234 yang benar diperbarui, Anda hanya akan mendeteksi ini ketika record 1234 digunakan, sehingga ini bisa tidak terdeteksi selama beberapa saat).
Sekarang tanyakan pengembang Anda yang sangat termotivasi apa pendapatnya tentang ini. Jelas dia tidak bisa mengklaim bahwa dia tidak pernah membuat kesalahan, karena dia pernah melakukannya di masa lalu.
sumber
Anda memahami dengan jelas berbagai kemungkinan proses dan solusi teknis. Masalahnya adalah bagaimana mengelola rekan kerja.
Ini pada dasarnya adalah latihan manajemen perubahan.
Pertama, saya akan berbicara dengan pendirinya untuk memastikan dia setuju dengan sudut pandang Anda. Jika ada pemadaman produksi, saya berharap bahwa pendiri akan sangat peduli tentang itu dan perubahan keinginan.
Kedua, Anda bekerja dalam tim kecil dan sepertinya layak untuk melibatkan seluruh tim dalam peningkatan proses.
Menyiapkan retrospektif proses reguler (misalnya setiap minggu). Memiliki seluruh tim:
Seharusnya mengikuti secara alami bahwa seluruh tim kemudian juga membantu memastikan kepatuhan dengan praktik yang ditingkatkan.
sumber
Saya pikir Anda telah mengidentifikasi beberapa masalah:
Terus terang saya pikir setup itu hanya gila. Minimal orang-orang yang dapat secara manual memicu dorongan untuk produksi harus dibatasi pada set orang yang dapat dipercaya sepenuhnya untuk meninjau dan menguji semua perubahan keluar secara menyeluruh (terlepas dari siapa yang telah membuat perubahan) sebelum memicu dorongan. Memberi siapa pun dengan izin untuk memeriksa dalam kode kekuatan untuk secara sewenang-wenang memicu produksi hanya meminta masalah. Tidak hanya dari pengembang yang ceroboh dan / atau tidak kompeten, tetapi juga dari yang tidak puas atau pihak ketiga jahat yang kebetulan membahayakan salah satu akun Anda.
Dan jika Anda akan menggunakan proses tombol-tekan untuk menyebarkan setiap perubahan yang diperiksa, maka Anda perlu memiliki rangkaian lengkap tes otomatis di tempat, dan menekan tombol perlu menjalankannya (dan batalkan penyebaran jika semua tes gagal!). Proses Anda seharusnya tidak mengizinkan kode yang bahkan belum diuji secara dangkal untuk mencapai titik di mana ia digunakan untuk sistem produksi.
Rekan kerja Anda telah melakukan kesalahan besar dalam hal memeriksa kode tanpa menguji terlebih dahulu. Organisasi Anda telah melakukan kesalahan yang jauh lebih besar dengan mengadopsi proses penyebaran yang memungkinkan kode yang belum diuji mencapai produksi dalam keadaan apa pun.
Jadi urutan pertama bisnis adalah memperbaiki proses penyebaran. Entah membatasi siapa yang dapat memicu dorongan untuk produksi, atau memasukkan sejumlah pengujian yang wajar ke dalam proses penyebaran otomatis Anda, atau keduanya.
Secara khusus, sepertinya Anda kehilangan " definisi selesai " yang jelas, dan / atau menggunakan yang tidak termasuk "kode telah diuji" sebagai faktor gating pada pemeriksaan kode dalam / menyebarkan kode ke produksi. Jika Anda memiliki ini, alih-alih hanya menunjukkan bahwa "kode yang baik tidak diproduksi dengan cara ini" Anda bisa mengatakan "kode ini tidak memenuhi standar minimum yang kita semua sepakati, dan harus lebih baik dalam masa depan".
Anda harus mencoba membangun budaya yang mengkomunikasikan dengan jelas apa yang diharapkan dari pengembang dan standar serta tingkat kualitas yang harus dijunjung tinggi. Menyiapkan definisi selesai yang mencakup setidaknya pengujian manual (atau lebih disukai, testcas otomatis yang dapat dijalankan sebagai bagian dari proses build / deploy) akan membantu dengan itu. Seperti dapat memiliki konsekuensi untuk melanggar build. Atau konsekuensi yang lebih parah karena melanggar sistem produksi. Perhatikan bahwa kedua hal tersebut harus benar-benar mandiri, dan seharusnya sama sekali tidak mungkin untuk menghancurkan baik sistem produksi maupun sistem produksi secara bersamaan (karena sistem yang rusak seharusnya tidak dapat digunakan).
sumber
Anda harus mengintegrasikan proses Tinjauan Integrasi + Peer Berkelanjutan di perusahaan. Bitbucket membuatnya mudah.
Dan +1 ke server dev disarankan oleh pengguna lain.
Jangan bersikap kasar padanya, itu hanya akan merusak hubungan kerja Anda.
sumber