Saya telah banyak berpikir akhir-akhir ini tentang bagaimana membangun tim pengembangan lean. Pada akhirnya, saya ingin membuka rumah perangkat lunak kecil saya sendiri dengan sejumlah kecil orang yang berpikiran sama. Tujuannya bukan untuk menjadi kaya, tetapi untuk memiliki lingkungan kerja yang sehat.
Sejauh ini, saya mendefinisikan tim lean sebagai berikut:
- Kecil;
- Mengorganisir diri;
- Semua anggota harus memiliki QA dalam pikiran;
- Anggota harus mampu melakukan banyak peran
Poin terakhir adalah di mana saya sedikit khawatir karena, seperti mantra ...
Pengembang membuat penguji buruk.
Sementara saya mengerti bahwa, seringkali, pengembang "terlalu dekat" dengan kode mereka atau kode rekan mereka untuk membuat penilaian kualitas tingkat yang lebih tinggi, saya tidak yakin mereka adalah penguji buruk de-facto . Sebaliknya, saya berpendapat bahwa kualitas pengembang yang baik tumpang tindih dengan kualitas tester yang baik.
Dengan asumsi ini benar, saya telah memikirkan berbagai cara untuk mengatasi masalah dev / tester dan saya percaya saya telah datang dengan model yang layak.
Model saya membutuhkan:
- Rumah perangkat lunak kecil dengan 2+ proyek
- Pendekatan Agile (iteratif) untuk pengembangan dan pengiriman
- 1 tim per proyek
- Semua anggota tim akan menjadi Pengembang Perangkat Lunak
- Deskripsi pekerjaan mereka jelas akan menyatakan Pengembangan , Jaminan Kualitas , Pengujian , dan Pengiriman sebagai tanggung jawab
Jika semua prasyarat ini telah dipenuhi, maka proyek dapat diatur dengan cara berikut (contoh ini akan merujuk pada dua proyek, A dan B ):
- Setiap anggota tim akan berganti-ganti antara peran Pengembang dan peran Penguji
- Jika anggota tim adalah Pengembang di proyek A , mereka akan menjadi Penguji di proyek B
- Anggota akan bekerja pada hanya 1 proyek pada suatu waktu, dan karena itu diharapkan akan bertindak sebagai salah satu Dev atau Tester.
- Sebuah Siklus Peran terdiri dari 3 iterasi sebagai Dev dan 2 iterasi sebagai Tester (sekali lagi, pada dua proyek yang berbeda)
- Tim proyek akan memiliki 3 Dev dan 2 Penguji setiap saat.
- Siklus Peran Anggota harus keluar dari fase dengan 1 iterasi.
- Ini meminimalkan perubahan tim yang mendadak. Untuk setiap iterasi, 2 Devs dan 1 Tester akan tetap sama dengan iterasi sebelumnya.
Mengingat hal di atas, saya melihat Pro dan Kontra berikut:
Pro
- Mendistribusikan pengetahuan proyek di seluruh perusahaan.
- Pastikan anggota tim tidak menguji kode yang mereka bantu tulis.
- Siklus peran di luar fase berarti tidak ada proyek yang pernah memiliki anggota yang beralih 100%.
- Pergantian peran mematahkan monoton proyek yang membosankan.
Cons
- Iterasi kedua proyek sangat erat. Jika satu proyek membatalkan iterasi setengah jalan dan mulai lagi, maka kedua proyek akan tidak sinkron. Ini akan membuat siklus peran sulit untuk dikelola.
- Bergantung pada mempekerjakan Pengembang terbuka bekerja sebagai Penguji juga.
Saya telah menerima tinjauan beragam ketika mendiskusikan pendekatan ini dengan teman dan kolega. Beberapa percaya bahwa beberapa pengembang akan ingin berganti peran seperti ini, sementara yang lain memberi tahu saya bahwa mereka secara pribadi akan senang untuk mencobanya.
Jadi pertanyaan saya adalah: Bisakah model seperti itu berhasil dalam praktik? Jika tidak, mungkinkah itu diubah menjadi model yang berfungsi?
Catatan: Demi singkatnya, saya hanya fokus pada peran Dev dan Tester. Saya akan memperluas peran lain jika diperlukan.
sumber
Jawaban:
Saya tidak setuju dengan itu
Sebagian besar tim yang saya kerjakan dalam karier saya belum memiliki dukungan QA. Ini termasuk beberapa perusahaan besar dan global yang melibatkan produk seperti sistem masuk dan pendaftaran global mereka. Dalam kasus lain, saya memiliki 30% dari pendapatan perusahaan berjalan melalui kotak di meja saya. (Praktek-praktek ini tidak disarankan BTW;)) Perusahaan-perusahaan ini bergantung pada para insinyur untuk memastikan kode mereka bekerja dengan benar. Dan kami, yang berorientasi pada detail, sedikit kompulsif, dan bangga dengan pekerjaan kami, akan berusaha keras untuk memastikan perangkat lunak kami bekerja dengan benar.
Juga, sebagai pengembang saya melakukan lebih banyak pengujian daripada Penguji. Saya secara rutin menguji unit kode saya hingga 90%, atau 100% jika saya tidak bekerja dengan Java.
Saya suka bekerja dengan Penguji karena mereka datang dari perspektif yang berbeda, dan menangkap hal-hal yang saya tidak pikirkan. Tetapi saya benar-benar tidak mengandalkan mereka untuk menyediakan lebih dari sekitar 30-50% cakupan tes, sementara saya menganggap diri saya bertanggung jawab atas 100%. (BTW Itu bukan slam pada mereka - mereka biasanya menyebar tipis di seluruh proyek.)
Daripada bertanya kepada insinyur dalam wawancara jika mereka ingin melakukan QA, tanyakan: jika ada bug yang muncul dalam produksi, siapa yang bertanggung jawab? Jika saya memperkenalkan bug, dan pelanggan mengalaminya, saya merasa buruk dan bertanggung jawab. Saya tidak menyalahkan orang-orang QA. IMHO Itu jenis insinyur yang ingin Anda pekerjakan (dan bekerja dengan)
Metode saya untuk memastikan kualitas adalah a) pengujian unit super agresif (meskipun saya tidak bisa memaksa diri untuk melakukan Uji-Driven Devlopment penuh), b) proses peninjauan kode yang kuat sangat membantu, dan c) mengintegrasikan intoleransi dan ketidaksabaran dengan cacat ke dalam budaya tim.
Saya selalu tersadar bahwa orang-orang yang paling senior adalah mereka yang paling rajin dan perhatian bahkan terhadap masalah-masalah kecil, karena mereka dapat menunjukkan masalah yang lebih besar. Tetapi terutama mereka adalah orang-orang yang paling bersedia menghabiskan waktu untuk memperbaikinya.
Tetapi sebagian besar tim yang saya kerjakan, terutama untuk perusahaan kecil, belum memiliki komponen QA formal.
sumber
Saya setuju dengan jawaban @Rob Y, dan ingin menambahkan beberapa poin:
Dalam tangkas, penguji yang berdedikasi dalam tim adalah anti-pola, karena mereka memaksa tim untuk bekerja pipa dan secara inheren tidak efisien. Anda terus-menerus berakhir dengan cerita-cerita yang "dev selesai" tetapi tidak diuji. Penguji khusus baik-baik saja jika mereka bekerja di luar tim (atau tim terpisah).
Dev membuat penguji buruk ... dan penguji membuat penguji buruk. QA sulit. Faktanya, ini sangat sulit. Masalah Anda mungkin bukan orang dan peran. Masalah Anda mungkin karena perangkat lunak Anda tergeser. Sekali lagi, dengan gesit, adalah tanggung jawab tim Anda untuk menguji sebelum produksi (apakah mereka telah mendedikasikan QA atau tidak).
QA adalah bagian dari pengembangan, seperti refactoring, arsitektur, dll. Merupakan tanggung jawab tim pengembangan untuk menghasilkan perangkat lunak dengan standar realistis tertentu yang disepakati. QA tidak akan meningkatkan standar itu. Pengembang yang lebih baik mungkin akan melakukannya.
Provokasi: Siapa bilang QA lebih baik daripada pengembang di QA-ing? Itu adalah sesuatu yang orang katakan tetapi ... [rujukan?] Mentalitas "peretas" yang dibutuhkan dari QA adalah mentalitas pengembang. Faktanya, pada dasarnya semua peretas adalah atau pengembang, bukan QA ...
Provokasi 2: 99% pekerjaan QA dapat (dan, berani saya katakan, harus ) diotomatisasi melalui skrip. Tim yang baik akan melakukan ini, dan untuk melakukan ini dengan benar, Anda perlu ... pengembang.
sumber
Pada pekerjaan sebelumnya, kami hanya memiliki pengembang dan tidak ada staf QA. Akibatnya, tidak ada orang lain yang bisa disalahkan jika masalah berhasil sampai ke produksi. Kami mengambil tanggung jawab QA kami dengan sangat serius, dan sangat bergantung pada suite pengujian otomatis. Karena menulis tes otomatis masih dikode, itu bukan masalah besar untuk membuat pengembang melakukannya.
Kuncinya adalah menjadikannya bagian dari budaya tim, dan bagian dari setiap proyek. Kami menulis rencana pengujian (hanya daftar tes singkat yang kami maksudkan untuk sebuah proyek), dan pengembang lain akan meninjau dan menyarankan kasus dan skenario yang kami lewatkan.
Jika Anda teliti tentang hal itu, itu bisa bekerja dengan sangat baik. Itu berhasil bagi kami - kami memiliki waktu kerja yang baik dan cacat rendah dalam layanan web e-commerce yang selalu aktif.
sumber
Pertama peringatan - Saya telah bekerja secara profesional sebagai insinyur QA dan insinyur perangkat lunak.
Apa pun mungkin.
Tergantung pada jenis pengujian yang Anda butuhkan. Jika Anda membutuhkan pengujian manual berulang-kali yang mematikan, monoton, berulang untuk memastikan bahwa setiap layar atau elemen benar-benar telah diterjemahkan ke Bahasa Elbon ... Anda akan mengalami masalah.
Dan dalam pengalaman saya, setiap proyek membutuhkan setidaknya sedikit pengujian semacam ini (bahkan jika tidak setiap proyek melakukan pengujian semacam itu). Masalahnya adalah Anda tidak mendapatkan pengujian semacam ini dari orang yang tidak terbiasa dengan praktik terbaik QA. Sial, Anda bahkan tidak mendapatkannya dari orang yang tahu praktik terbaik, tetapi "percaya" pada pengembangnya.
Sebagai penguji, Anda tidak bisa mempercayai pengembang. Saya telah kehilangan hitungan bug yang saya temukan bahwa "tidak mungkin disebabkan oleh perubahan itu" atau "bekerja dengan baik di kotak dev saya".
Bahkan jika Anda dapat menemukan pengembang yang dapat mentolerir tidak melakukan apa yang mereka sukai 2 minggu dari 5 Anda juga akan mengalami kontradiksi inti ini. Lebih buruk lagi, Anda menghabiskan waktu dan energi untuk melatih orang untuk menjadi baik di dua pekerjaan daripada satu. Perusahaan memiliki waktu yang cukup sulit untuk menemukan dan melatih orang-orang hebat dalam satu pekerjaan, apalagi dua.
Mungkin Anda luar biasa dalam beberapa hal yang belum saya temui - tapi saya ragu.
sumber
Saya pikir itu bisa berhasil, tetapi ada beberapa hal yang saya pastikan Anda lakukan.
Proyek sinkronisasi sepertinya bukan solusi praktis. Jika seseorang adalah penguji pada suatu proyek, mereka mungkin menjadi kandidat terbaik untuk menggantikan seorang programmer dan sebaliknya.
Rencana ini tidak membiarkan tim cukup mengatur diri sendiri. Satu strategi mungkin tidak cocok untuk semua tim dan semua proyek.
sumber