Jika bug berumur 5+ tahun, lalu apakah itu fitur? [Tutup]

18

Izinkan saya menambahkan detail: Saya bekerja di tempat kelembagaan dengan banyak coder, penguji, analis QA, pemilik produk, dll. Dan di sini ada sesuatu yang menggangguku:

Kami telah mampu menjual perangkat lunak jelek (walaupun cukup fungsional) selama lebih dari satu dekade. Ini memiliki banyak fitur dan produk ini kompetitif, tetapi ada beberapa bug serius di luar sana, serta ribuan "potongan kertas" - sedikit gangguan yang klien harus terbiasa.

Sangat menyakitkan saya untuk melihat beberapa hal karena saya sangat percaya bahwa jika komputer tidak membantu membuat hidup kita lebih mudah, maka kita tidak boleh menggunakannya. Saya memiliki kepercayaan pada rekan-rekan saya - mereka cerdas, mampu, dan dapat meningkatkan hal-hal ketika fokusnya adalah melakukan hal itu.

Tetapi, mungkin sulit untuk melaporkan bug terhadap beberapa fungsi lama tanpa melihatnya ditutup atau dilupakan. "Berhasil seperti itu selama ribuan tahun" adalah jawaban yang khas. Juga, ketika QA melakukan regresi, mereka cenderung mencari apa pun yang berbeda sebanyak apa pun yang tampaknya tidak benar. Jadi, perbaikan terhadap masalah lama dapat ditulis sebagai bug, karena "sudah seperti itu bahkan sebelum waktu saya".

Penulis kode muda dalam diri saya berpikir: tulis ulang hal aneh ini! Sebagai seseorang yang memiliki kesempatan untuk menjadi dekat dengan penjualan, klien, saya ingin memberikan manfaat dari keraguan terhadap pendekatan ini.

Saya tertarik dengan pendapat / pengalaman Anda juga. Cobalah mempertimbangkan risiko, untung-untung, dan faktor non-teknis lainnya.

Pekerjaan
sumber
2
Saya pikir maksud Anda "... bekerja seperti itu selama ribuan tahun."
Onion-Knight
Jangan pernah menulis ulang. Kecuali jika runtuh dengan sendirinya (Anda tidak dapat menambahkan lebih banyak hal-hal yang melanggar) Anda akan memperkenalkan lebih banyak bug kemudian memperbaiki ketika Anda memutuskan untuk menulis ulang (dan juga waktu)
Jika Anda tidak kehilangan pelanggan sekarang, suatu hari Anda akan kehilangannya. Seseorang pada akhirnya akan meyakinkan orang bahwa perangkat lunak mereka lebih mudah daripada milik Anda. Sekarang, Anda mungkin tidak seharusnya menangani ini sendiri. Ini adalah perubahan budaya di perusahaan Anda ... tidak ada yang dapat atau harus Anda lakukan sendiri.
Brad

Jawaban:

14

Aku merasakan sakitmu.

Tetapi memperbaiki sesuatu hanya karena bug bukan alasan yang cukup baik.

Anda harus memastikan perbaikan Anda tidak akan merusak kode lain (bukan hanya milik Anda tetapi kode klien Anda yang menggunakan kode Anda). Jika Anda mendorong perbaikan dan ini merusak setiap sistem pelanggan Anda akan memiliki beberapa pelanggan yang sangat tidak puas.

Ada banyak contoh terkenal di mana kode baru ditulis untuk menggantikan sistem yang lama. Di mana mereka harus secara eksplisit menambahkan fungsionalitas bug di sistem lama karena pengguna bergantung pada bug itu (Tidak akan menyebutkan nama, tetapi saya yakin Anda bisa google itu).

Tes Regresi pada dasarnya adalah tes dari apa yang pelanggan Anda harapkan terjadi Sebelum menghapus tes regresi pastikan itu tidak akan menyakiti seseorang (ini hampir mustahil). Jika Anda dapat memperbaiki bug DAN ini tidak merusak tes regresi maka itu adalah perbaikan yang nyata.

Martin York
sumber
Bagian pengujian regresi adalah benar dengan asumsi bahwa Anda benar-benar mengetahui tingkat cakupan tes yang sesuai.
Pemdas
di sisi lain, jika Anda membuat kode GUI, maka ada sedikit ketergantungan; pengguna berevolusi lebih mudah.
Matthieu M.
@Matthieu M .: Benar sekali. Lebih mudah untuk mengubah kebiasaan (selama Anda berinvestasi dalam memperbaiki kebiasaan) daripada memperbaiki (banyak) sistem otomatis (sebagian besar orang akan lupa di ruang belakang).
Martin York
3

beberapa hal yang perlu dipertimbangkan ketika memutuskan untuk memperbaiki bug ... tidak termasuk semua cara.

  • Apakah ini penting (sistem macet)? ... jelas ini diperbaiki
  • Apakah pelanggan sering mengeluh tentang hal itu? Ini bisa berupa bug karena ada sesuatu yang rusak dalam kode atau bisa juga bug persyaratan seperti fitur tersebut tidak ramah pengguna atau mereka mengharapkannya bekerja secara berbeda.
  • Dari sudut pandang bisnis, apakah lebih bermanfaat untuk memperbaiki bug atau mengimplementasikan fitur baru?
  • Apakah bug tersebut memerlukan perubahan arsitektur yang signifikan atau apakah itu merupakan bagian dari sistem yang sangat diandalkan oleh subsistem lain? Ini dapat secara drastis memengaruhi waktu pengujian dan memperumit cakupan pengujian yang diperlukan untuk memvalidasi bug? Jika ini benar-benar tua, kadang-kadang sulit untuk memahami apa lagi yang akan mempengaruhi sistem dengan memodifikasi bagian kode kereta.
  • Apakah Anda kehilangan pelanggan potensial karena sistem kereta
Pemda
sumber
Kehilangan pelanggan potensial - itu sulit bagi saya, dan bahkan untuk penjualan / pemasaran untuk mengetahui, tetapi tingkat retensi telah tinggi (meskipun biaya switching juga tinggi). Boleh dibilang Anda hampir tidak bisa mengetahui apakah Anda lebih baik melakukan A daripada melakukan B, kecuali Anda benar-benar melakukan pengujian A / B.
Ayub
1
Saya tidak yakin bagaimana ini berlaku dalam kasus Anda, tetapi kami sering (Seperempat) melakukan pertemuan dengan teknisi penjualan kami untuk membahas masalah di lapangan yang telah mencegah mereka melakukan penjualan. Ini dapat mencakup fitur yang hilang, atau sesuatu berfungsi buruk dari perspektif interaksi pengguna ... dll.
Pemdas
3

Tentukan bug. "Spesifikasi mengatakan diurutkan berdasarkan tanggal, tetapi diurutkan berdasarkan jumlah transaksi" tidak selalu merupakan bug dalam kode. Mungkin itu adalah perubahan tidak berdokumen - kadang-kadang, di suatu tempat, seseorang meminta perubahan urutan tetapi spesifikasi, persyaratan, manual (bahkan tombol dan label pada UI) tidak diubah agar sesuai, dan tidak ada yang keberatan. Bagi Anda untuk muncul dan mengubahnya kembali ke "menurut tanggal" akan menyebabkan kekacauan, dan bagi Anda untuk memperbarui ui, spek, manual dll pada dasarnya membuang-buang waktu Anda, dengan kemungkinan pengecualian dari sedikit "teori broken windows" . "

Beberapa hal jelas merupakan bug. Jika Anda mengklik tombol ini, itu meledak. Atau, jika Anda mengklik tombol ini pada hari Senin, itu meledak. Kecuali jika seseorang menugaskan Anda untuk menginvestasikan waktu untuk memahami alasannya, Anda dapat menghabiskan banyak upaya untuk menyelidiki. Dan begitu Anda mengetahui alasannya, bisa jadi Anda tidak dapat mengubahnya, karena itu akan merusak sesuatu yang lebih penting bagi pengguna atau manajemen.

Jika Anda melihat "kecerobohan" - kebocoran memori, kode yang jelas membutuhkan beberapa optimasi, indentasi dan penamaan konvensi yang tidak cocok dengan Anda - itu sangat menggoda untuk memperbaikinya suatu hari ketika Anda tidak memiliki hal lain untuk dilakukan, atau pada waktu Anda sendiri . Namun, "perbaikan" ini mengacaukan sejarah dalam kontrol sumber untuk sedikit atau tanpa manfaat, risiko bencana seperti "kami tidak pernah mengkompilasi modul itu karena biner yang kami gunakan dalam produksi dibangun dari kode yang telah hilang, dan Anda hanya menimpa itu ", dan dapat dengan serius mengecewakan orang yang" kesalahan "Anda" memperbaiki ".

Saya merekomendasikan satu lawan satu dengan atasan Anda. Jelaskan apa yang mengganggu Anda - apakah itu gaya pengkodean, hal-hal yang Anda yakini pasti mengganggu pengguna, angka yang tidak akurat, ketidakkonsistenan, atau bencana yang menunggu untuk terjadi? Kemudian tanyakan arah dan (ini kuncinya) ambil.

Kate Gregory
sumber
2

Jika Anda ingin memperbaiki bug yang sudah lama, Anda harus berhati-hati untuk tidak merusak fungsi yang ada. Jika ada unit test, ini lebih mudah, tetapi mengingat usia perusahaan dan perangkat lunak yang tersirat, mereka tidak ada. Saya akan merekomendasikan membaca buku Refactoring oleh Martin Fowler karena ini membahas cara memperbaiki dan memperbaiki bug dengan benar sambil mencoba meminimalkan efek samping. Saya juga merekomendasikan untuk memastikan perusahaan tidak masalah dengan Anda melalui bug lama selama waktu reguler. Mereka mungkin hanya membiarkan Anda melakukan ini jika Anda melakukannya lembur dari waktu.

Juga, jika bug telah menjadi fitur yaitu sebenarnya digunakan oleh klien karena memang memberikan sesuatu, pastikan untuk memberikan pengganti yang sesuai ketika mereka menginginkan perilaku itu (atau hanya mendokumentasikannya sebagai fitur alih-alih bug).

indyK1ng
sumber