Menulis ulang perangkat lunak menggunakan metodologi Agile

13

Misalkan Anda harus menulis ulang seluruh aplikasi menggunakan metodologi Agile, bagaimana Anda melakukannya?

Saya kira Anda bisa menulis banyak cerita pengguna berdasarkan perilaku sistem Anda saat ini. Dan kemudian menerapkannya dalam iterasi kecil. Tetapi ini tidak berarti bahwa kita memiliki persyaratan UP FRONT ??

Juga, kapan Anda akan mulai merilis? Agile mengatakan kita harus merilis lebih awal dan sering, tetapi tidak masuk akal untuk melepaskannya sebelum penulisan ulang selesai.

Asier Barrenetxea
sumber
4
Menulis ulang seluruh aplikasi tidak pernah merupakan ide yang baik. Lihat menulis ulang Netscape . Banyak yang hilang dalam menulis ulang seluruh aplikasi. Pengetahuan dikodifikasikan dalam sumber dan harus ditemukan kembali dalam penulisan ulang. Sangat mudah untuk menemukan kode dan menyatakan "Mengapa mereka melakukannya dengan cara ini?" Saya bisa melakukannya lebih baik dan lebih sedikit! Sebagian besar waktu, sekali dalam kode pengembang mengerti mengapa itu sebelumnya ditulis sedemikian rupa. Pembicaraan Code Simplicity to
Chuck Conway
Mengajukan pertanyaan menunjukkan Anda tidak memiliki pengalaman dengan Agile untuk menggunakannya secara efektif untuk usaha besar. Secara pribadi bagaimana saya akan melakukannya (dengan asumsi "melarikan diri" keluar dari pertanyaan) adalah mulai dengan membatasi paparan saya dan menerapkan strategi pengendalian kerusakan jika (ketika) itu berbentuk buah pir.
mattnz
Anda tidak berpikir syarat baru akan dibuat selama seluruh proses pembangunan kembali ini?
JeffO
diposting silang dari SO: stackoverflow.com/questions/13168314/…
gnat
Bukankah menulis ulang seluruh aplikasi akan sangat tidak tangkas?
Pieter B

Jawaban:

15

Hancurkan menjadi epos tingkat tinggi. Ambil setiap area fungsional aplikasi, satu langkah pada satu waktu.

Hancurkan satu epik ke dalam sekelompok cerita (potongan yang dapat digunakan - apa pun yang meningkatkan aplikasi) dan kelola seperti yang Anda lakukan jika Anda tidak memiliki aplikasi yang ada, dengan satu pengecualian: Jika memungkinkan, buatlah sedemikian rupa sehingga Anda dapat dapat mengimplementasikan satu fungsi tersebut sebagai bagian dari, atau bersama, aplikasi asli.

Ketika Agilis mengatakan "rilis lebih awal dan sering", itu tidak berarti produksi. Jika Anda akan mengganti aplikasi yang sudah ada, Anda harus menggunakan area pementasan untuk sering melepaskan, dan pastikan pengguna Anda menguji sistem di sana. Ini masih akan memberi mereka ruang untuk memprioritaskan pekerjaan berikutnya dan untuk memastikan bahwa tidak ada yang Anda lepaskan untuk produksi akan menurunkan nilai produk.

Setelah Anda merilis satu komponen ke produksi, pindah ke yang berikutnya.

pdr
sumber
Apa yang dikatakan @ pdr.
KodeKreachor
3
Selama periode rilis non-produksi, dogfood aplikasi, bahkan jika dalam VM, untuk merasakan penggunaan dan kelengkapan karena semua persyaratan diketahui di muka dan kemungkinan besar adalah domain / BI yang signifikan dalam tim pengembangan.
JustinC
10

kami baru saja melalui pengalaman seperti itu (saya sebagai pemilik produk scrum). Kami butuh dua tahun untuk mencapai sesuatu yang bisa dirilis. Namun tetap saja, gesit membawa banyak manfaat bagi kami.

Pertama: Menulis ulang total pada dasarnya tidak gesit sama sekali. Sebagai gantinya Anda harus mempertimbangkan refactoring sepotong produk yang ada demi sepotong. Itu telah dibahas dalam pertanyaan lain. Jadi mari kita asumsikan itu harus ditulis ulang.

Kemudian memang, Anda mulai dengan log balik yang mencakup semua kasus penggunaan yang relevan dari produk yang ada. Tapi tolong jangan mendekatinya sebagai spesifikasi penulisan. Itu terlalu detail. Itu harus lengkap (jika tidak, Anda tidak dapat melakukan perencanaan rilis). Dan seharusnya tidak terlalu rumit (jika tidak, Anda sedang menulis spesifikasi di muka). Inilah cara kami mendekati itu:

  • mengkategorikan pengguna produk lama. Identifikasi pengguna yang hanya membutuhkan sebagian kecil dari produk lama dan masih mendapatkan sesuatu yang bermanfaat darinya. Mereka menentukan epos pertama Anda.

  • Kemudian tambahkan epos yang memungkinkan kategori pengguna lain pindah ke produk baru. Dll hingga Anda memiliki log balik yang mencakup semua pengguna.

  • kemungkinan besar, epos-epos ini perlu dipecah lebih lanjut. Jika memungkinkan, cobalah untuk membagi sehingga setiap bagian masih memiliki beberapa nilai. Jika itu tidak layak, maka setidaknya pastikan setiap bagian dapat diperagakan.

  • ketika Anda memiliki 20-50 epos, mintalah tim memperkirakannya.

  • pisahkan epos paling top ke dalam User Stories yang menurut tim layak dilakukan dalam sprint. Jangan lakukan itu untuk semua epos, hanya yang ada di atas. Anda akan punya banyak waktu untuk membagi sisanya.

Kapan akan dirilis secara eksternal! Itu adalah keputusan bisnis. Setidaknya pendekatan ini memberi Anda kesempatan untuk merilis lebih awal ke kategori pengguna tertentu. Itu bisa berguna jika manajemen merasa gugup tentang proyek yang tampaknya tidak pernah berakhir ini.

Kris Van Bael
sumber
4
A total rewrite is by nature not agile at all. You should instead consider refactoring the existing product piece by piece.Kata yang lebih benar tidak pernah diucapkan.
maple_shaft
4

Lepaskan Sekarang Jika Anda Bisa

Pertanyaan Anda tentang kapan Anda mulai mengeluarkan kode itu adalah pertanyaan yang hebat. Saya pikir dua ketentuan berlaku. Pertama, bahwa Anda memiliki "kualitas yang cukup baik", dan kedua bahwa Anda memenuhi persyaratan untuk MVP (produk minimum yang layak).

Roma (dan Agile) Tidak Dibangun dalam Sehari

Mungkin Anda siap dengan tim tangkas turnkey untuk mengambil alih pada hari pertama. Bagi sebagian besar organisasi, ada pekerjaan dan biaya pelatihan, retooling, dan pembentukan biasa, menyerbu, menormalkan, melakukan siklus membangun tim. Jadilah yang terdepan tentang risiko dan biaya, berhati-hatilah untuk menetapkan harapan yang realistis, dan siap dan siap untuk mengadvokasi pendekatan Anda.

Menjadi Bootstrapper Reuse

Seperti kekuatan fusi, penggunaan kembali kode adalah dan akan selalu menjadi solusi masa depan untuk masalah ekonomi kita. Perasaan saya adalah bahwa pengembang sering mengatakan mereka percaya pada penggunaan kembali, tetapi hanya jenis penggunaan kembali yang dimulai setelah mereka membangun kerangka kerja baru, daripada jenis di mana mereka membangun apa yang telah dilakukan orang lain. Bagaimana itu bisa bekerja sampai seseorang mau memilih untuk membangun di atas fondasi orang lain? Paling-paling, itu berarti menulis ulang setiap beberapa tahun ketika kepemimpinan tim berubah.

Mengapa Melepaskan Dini Dan Sering?

Melepaskan lebih awal dan sering kali merupakan mantra karena berbagai alasan. Ini memberi kehidupan pada diskusi kita tentang apa yang harus menjadi produk, itu membuat nyata di mana kita berada, dan itu memberi kita dasar untuk perubahan iteratif / tambahan. Kecepatan rilis cukup invarian untuk gesit, dengan perbedaannya adalah siapa yang menerima rilis (pelanggan pengganti atau pengguna akhir). Sebelum gesit, pemeliharaan diperkirakan mencapai 60% dari biaya sistem perangkat lunak. Ini adalah sumber banyak kekhawatiran bagi para manajer dan lainnya, beberapa yang merasa rilis produk adalah tempat perangkat lunak mati. Bagi mereka, semuanya setelah rilis adalah pengerjaan ulang dan pembayaran untuk memperbaiki produk yang sudah mereka bayar sekali.

Pra-rilis tidak alami

Kent Beck menulis bahwa pra-rilis adalah keadaan yang tidak wajar untuk produk perangkat lunak. Ini tentu saja merupakan waktu yang tidak nyaman karena ini adalah saat ketika Anda tidak memiliki pelanggan dan Anda membayar untuk produk daripada produk yang membayar untuk Anda.

Jangan Mengkritik Tim Sebelumnya

Meskipun mungkin mengatur pengembang yang mengambil alih penulisan ulang sebagai pahlawan dan penyelamatan proyek, saya pikir ada biaya untuk mengkritik prestasi tim sebelumnya.

  • Pertama, jika Anda membiarkan orang membuat keputusan sendiri tentang tim sebelumnya, Anda memiliki lebih banyak waktu dan energi untuk misi Anda yang sebenarnya.
  • Ini akan menjadi canggung jika Anda perlu bekerja dengan anggota tim sebelumnya, baik pengembang maupun pemangku kepentingan seperti manajer produk, manajer proyek, atau pelanggan.
  • Jika Anda bisa membuatnya berfungsi, Anda mungkin mendapati diri Anda menerima (atau lebih buruk lagi mengambil) penghargaan atas apa yang dilakukan tim sebelumnya.
  • Rata-rata, tim sebelumnya mungkin rata-rata. Rata-rata, Anda mungkin rata-rata. Anda memiliki lebih banyak pekerjaan daripada tim sebelumnya karena Anda memiliki metodologi baru untuk ditempatkan di samping proyek.
  • Jika tim lama itu mengerikan, kecuali Anda juga mengerikan, Anda akhirnya akan mendapatkan pujian karena lebih baik daripada mengerikan. Jika mereka lebih baik daripada yang mengerikan, dan Anda tidak terlihat lebih baik, mengatakan mereka mengerikan dapat mengundang perbandingan yang tidak menyenangkan.
  • Jika tim lama lebih baik daripada yang Anda pikirkan, dan Anda mendapat masalah karena organisasi rusak atau masalahnya tidak jelas atau sangat sulit, segalanya akan lebih baik bagi Anda jika Anda belum secara signifikan meningkatkan harapan.
  • Jika mereka mengharapkan apa yang mereka dapatkan, tetapi Anda melakukan lebih baik, itu adalah kemenangan bagi Anda.
  • Menahan diri dari kritik adalah perilaku yang baik, dan menunjukkan bahwa Anda memiliki kelas.
Pengembang Don
sumber
Anda lupa satu hal lagi. Tim lama menetapkan harapan pelanggan. Anda harus mengatur ulang dengan melakukannya lebih baik, atau melakukan hal-hal dengan cara yang persis sama. Berapa banyak pers yang dimiliki Windows 8 karena tidak memiliki tombol Mulai, namun iOS dan Android tidak pernah melakukannya dan tidak ada yang berpikir untuk menyebutkannya.
mattnz
2

Diminta oleh komentar oleh @Chuck dan referensi ke Netscape pada dasarnya mengatakan jangan menulis ulang, dan tanggapan yang sah menjawab bahwa dia OP tidak menanyakan apakah dia harus. - Siklus pengembangan perangkat lunak yang benar-benar gesit mencegah penulisan ulang. Menulis ulang hampir selalu mematahkan banyak prinsip di balik Agile. Menggunakan perangkat lunak saat ini sebagai garis dasar prinsip-prinsip Agile ini (dari Agile Manifesto ) tidak dapat dipenuhi dengan penulisan ulang.

  • Pengiriman awal dan berkesinambungan dari perangkat lunak yang berharga . - pelanggan tidak akan mendapatkan nilai awal jika diukur dengan apa yang sudah mereka miliki
  • Mengirimkan perangkat lunak yang sering bekerja - minggu ke bulan - seberapa besar proyeknya, dapatkah Anda dengan jujur ​​mengatakan bahwa pelanggan akan mendapatkan sesuatu yang lebih berguna bagi mereka dalam waktu dekat.
  • Perangkat lunak yang berfungsi adalah ukuran utama kemajuan - bekerja dibandingkan dengan garis dasar tidak akan terjadi dengan tergesa-gesa
  • Proses lincah mempromosikan pembangunan berkelanjutan. - Mengingat pelanggan memiliki garis dasar yang berfungsi, tekanan akan menyala untuk memberikan fungsionalitas yang lebih baik. Ini tidak mungkin dilakukan pada kecepatan yang berkelanjutan
  • Kesederhanaan - seni memaksimalkan jumlah pekerjaan yang tidak dilakukan - sangat penting. ini mengatakan semuanya benar-benar ...

"Seandainya kamu harus menulis ulang seluruh aplikasi menggunakan metodologi Agile, bagaimana kamu melakukannya?"

Pertanyaannya didasarkan pada premis yang salah - Bahwa penulisan ulang dapat dianggap Agile.

mattnz
sumber
2

Pertimbangkan apakah Anda dapat merilis aplikasi yang ditulis ulang sedikit demi sedikit, dan memilikinya di sisi produksi bersisian dengan yang lama.

Untuk aplikasi web khususnya, mungkin cukup mudah untuk memindahkan satu bagian dari aplikasi ke platform baru, dan meminta permintaan rute penyeimbang beban Anda ke sistem yang sesuai. Kemudian, tulis cerita yang memungkinkan Anda menghasilkan halaman pertama, dan mengirimkannya dengan gesit.

Aplikasi desktop bisa jadi lebih rumit, tetapi seringkali akan mungkin.

Anda sedang mencari jahitan - tempat di mana dimungkinkan bagi sistem lama untuk mengambil alih tanggung jawabnya dengan yang baru, tanpa perlu menulis ulang sepenuhnya.

Mungkin ada beberapa logika bisnis mandiri yang dapat dipindahkan ke layanan web atau kerangka kerja baru, dan aplikasi lama dapat dimodifikasi menggunakannya daripada kode lama. Teruslah mengukir potongan di jahitan sampai apa yang tersisa dapat dikelola semua dalam satu gigitan.

Jika Anda tidak dapat menemukan jahitan apa pun, maka Anda mungkin perlu mencari jenis pendekatan big bang yang disarankan dalam beberapa jawaban lain. Tetapi bersiaplah untuk perjalanan panjang sebelum Anda mencapai tujuan Anda, terutama jika Anda diharapkan untuk terus mengembangkan sistem lama secara paralel ...

Bill Michell
sumber
1

Agile mengatakan kita harus merilis lebih awal dan sering, tetapi tidak masuk akal untuk melepaskannya sebelum penulisan ulang selesai.

Sebenarnya, IMHO ini adalah titik kunci - semakin awal Anda mendapatkan bagian dari aplikasi yang ditulis ulang dalam produksi (dan idealnya menggantikan fungsi dari sistem lama), semakin besar kemungkinan proyek Anda akan berhasil. Jika Anda pikir ini tidak masuk akal, pikirkan lebih keras - hampir selalu ada kemungkinan untuk melepaskan komponen.

Ini mungkin berarti seseorang harus mengubah sesuatu di aplikasi lama, misalnya, menambahkan beberapa antarmuka baru untuk berinteraksi dengan aplikasi yang ditulis ulang selama waktu penulisan ulang tidak selesai. Tetapi menurut pengalaman saya, pekerjaan tambahan seperti itu selalu bermanfaat untuk dirinya sendiri.

Setelah bagian pertama dari aplikasi baru diproduksi, pendekatan yang gesit dan iteratif akan menjadi jelas. Persyaratan akan berubah, cerita pengguna Anda akan berubah atau mendapatkan prioritas baru, dan mudah-mudahan Anda akan mengganti lebih banyak fungsi dari sistem lama dalam langkah-langkah kecil.

Doc Brown
sumber