Bagaimana cara memperlakukan bug yang menurut pengguna adalah fitur?

15

Pertanyaan :

Apa cara yang tepat untuk mengatasi bug yang menurut pengguna merupakan fitur?

Elaborasi :

Saya menduga bahwa jika sebagian besar pengguna mengharapkannya sebagai fitur, itu harus dibiarkan "tidak tetap" atau "diperbaiki" agar lebih stabil? Namun, bagaimana jika persentase yang sangat kecil dari pengguna mengharapkannya menjadi fitur ... katakanlah 0,1% atau 1%, dan bug ini harus diperbaiki.

Secara teoritis, karena ini adalah perbaikan bug minor, ini dapat dikualifikasikan sebagai PATCH seperti yang dipertimbangkan oleh versi semantik: xyZ Namun, karena ini memecah kompatibilitas ke belakang (bahkan hanya untuk beberapa pengguna) itu seharusnya merupakan peningkatan UTAMA: Xyz Benar? Bisakah masih memenuhi syarat sebagai PATCH (karena itu tidak dimaksudkan sebagai fitur) selama itu didokumentasikan?

EDIT: Dalam kasus khusus ini, ini adalah bug dalam API dari perpustakaan yang digunakan secara internal yang digunakan pengembang lain.

robodude666
sumber
8
Bukankah semua fitur bug? ;)
Lawrence Aiello
2
menyediakan peralihan di versi baru yang mati secara default, dan ketika dihidupkan akan meniru perilaku lama? terjadi setiap saat. tidak ada berita,
teruskan
16
Suka pemanasan spasi ?
Karl Bielefeldt
Terkadang fitur tidak lebih dari bug seperti yang dijelaskan oleh departemen pemasaran.
Dan Pichelman
Memperbarui posting asli untuk mengklarifikasi itu bug di Perpustakaan yang digunakan secara internal; Saya pikir ini adalah kasus yang berbeda dari bug dalam produk yang dijual kepada pelanggan karena tidak mempengaruhi alur kerja atau kegunaan.
robodude666

Jawaban:

7

Saya menduga bahwa jika sebagian besar pengguna mengharapkannya sebagai fitur, itu harus dibiarkan "tidak tetap" atau "diperbaiki" agar lebih stabil?

Apakah bug menambah nilai? Jika demikian, ini lebih merupakan fitur. Terkadang "bug" dapat berakhir sebagai "fitur nilai tambah".

Sulit untuk benar-benar menjawab ini secara meyakinkan karena setiap situasi akan berbeda.

Dalam kasus khusus ini, ini adalah bug dalam API dari perpustakaan yang digunakan secara internal yang digunakan pengembang lain.

Dalam hal ini, saya akan menyertakan perbaikan sebagai bagian dari perubahan Anda berikutnya sehubungan dengan kompatibilitas mundur. Anda tidak dapat benar-benar melakukan ini secara konsisten di sebagian besar lingkungan dan mungkin ada jadwal / kerangka waktu untuk ini.

Sebagai pengembang, hal terakhir yang ingin saya tangani adalah API yang memiliki perilaku yang salah atau tidak konsisten. Bug dianggap sebagai ini.

Paling tidak, buat semacam "bug yang dikenal dengan versi saat ini" dokumen / wiki secara internal sehingga Anda dapat memastikan semua pengguna internal Anda mengetahui bahwa fungsionalitasnya seperti bug. Mudah-mudahan Anda memiliki cukup tes yang mencakup area di mana orang menggunakan fitur bug-sebagai-a-sehingga Anda akan melihat di mana / kapan hal-hal pecah ketika / jika Anda memperbaiki bug.

enderland
sumber
10

Saya akan merekomendasikan membuatnya lebih stabil. Pengguna adalah sumber kanonik dari apa yang dilakukan perangkat lunak Anda. Jika mereka menginginkannya, dan mengandalkannya, saya akan berpikir dua kali untuk menariknya.

Contoh yang bagus dari hal ini adalah mekanik "Skiing" di video game "Tribes". Awalnya bug dalam bagaimana mesin fisika menangani melompat di atas bukit, itu akhirnya menjadi salah satu mekanik game inti. Anda dapat membaca lebih banyak tentang ini di sini , jika Anda penasaran.

Morgen
sumber
3
Fitur Common Law .
Deduplicator
2
Contoh video game hebat lainnya adalah kemampuan untuk membatalkan perpindahan ke gerakan lain dalam versi Street Fighter yang lama ( en.wikipedia.org/wiki/… ). Awalnya bug, telah naik menjadi "fitur".
Michael
8

Karena bug ada di perpustakaan, berikut adalah pendekatan lain yang dapat Anda ambil:

  1. Buat tiruan dari fungsi perpustakaan yang salah. Dalam banyak kasus orang hanya menambahkan a 2ke nama fungsi dalam kasus-kasus ini, tetapi, jika Anda memiliki perubahan lain yang ingin Anda terapkan ke antarmuka fungsi itu, Anda mungkin juga memberinya nama yang sama sekali berbeda.

  2. Perbaiki bug di klon saja (dan terapkan semua perubahan antarmuka lain yang Anda inginkan saat sedang melakukannya).

  3. Deklarasikan fungsi asli sebagai usang.

  4. Hapus fungsi asli dalam beberapa rilis utama mendatang.

Pendekatan ini sangat berguna untuk fungsi yang antarmuka dasarnya rusak: Anda tidak langsung memecahkan kode pengguna, tetapi Anda memberikan peringatan kepada siapa pun yang bergantung pada kode yang rusak untuk transisi menggunakan kode tetap. Dan bahkan jika orang tidak mengindahkan peringatan, mereka tidak bisa menyalahkan Anda begitu Anda benar-benar menghapus fungsi yang rusak.

cmaster - mengembalikan monica
sumber
1
Dalam kasus khusus ini, fungsi "rusak" mungkin hidup tanpa batas karena memberikan perilaku yang berbeda (dan berharga) secara fundamental.
RubberDuck
Bagaimana klon ini bekerja lebih baik daripada versi utama baru menggunakan versi semantik?
Kat
@ Mike Ini menghindari melanggar semua kode lama yang bergantung pada bug. Bergantung pada seberapa banyak kode ini ada, ini bisa menjadi keuntungan besar. Jika Anda memecahkan kode pengguna dengan cara yang sulit diperbaiki orang, Anda mungkin menemukan versi perpustakaan baru Anda tidak digunakan sama sekali. Semua hal baik di versi baru Anda diabaikan hanya karena ambang adopsi terlalu tinggi; Anda telah merantai pengguna Anda ke versi lama. Jika Anda terus menyediakan "fitur", orang dapat segera beralih. Dan, tergantung pada komunikasi Anda tentang penghinaan itu, mereka juga akan mulai menghindari fungsi yang sudah usang itu.
cmaster - mengembalikan monica
4

Dalam kasus khusus ini, ini adalah bug dalam API dari perpustakaan yang digunakan secara internal yang digunakan pengembang lain.

Jika pengembang lain menganggap perilaku sebagai fitur, kemungkinan mereka telah menggunakannya dan membangun perangkat lunak yang berfungsi di atasnya. Memperbaiki bug mungkin akan merusak kode mereka yang ada, dan mereka akan menyalahkan Anda untuk ini. Ini menjadikan memperbaiki bug sebagai trade-off, dan Anda harus mempertimbangkannya

  • apakah benar-benar penting untuk memperbaiki bug, misalnya karena ada risiko tinggi membiarkan pengguna API Anda merusak aplikasi mereka seandainya bug tidak diperbaiki? Atau ini hanya tentang konsistensi dari API?

  • atau apakah lebih penting untuk menjaga perangkat lunak yang ada stabil, dan perpustakaan Anda kompatibel?

Jawaban atas pertanyaan itu tidak selalu sederhana, Anda harus memperhitungkan jumlah pengguna API yang mungkin, kemungkinan jumlah pekerjaan yang harus mereka ubah perangkat lunaknya, jumlah perangkat lunak yang akan rusak jika Anda mengubah API Anda , tetapi juga risiko apa yang mungkin terjadi jika Anda tidak memperbaiki API.

Hanya karena Anda mendokumentasikan perubahan bugfix di "daftar perubahan yang melanggar di rilis utama Anda berikutnya" tidak membuat pelanggan Anda senang - jika Anda melakukan ini, harus ada setidaknya beberapa bukti peluru alasan mengapa Anda tidak bisa membiarkan API seperti itu sebelumnya. Seringkali menjaga kompatibilitas ke belakang lebih penting daripada memperbaiki bug. Jadi perbaiki hanya jika Anda dapat memperkirakan dampak pada basis pengguna Anda dan perangkat lunak mereka dan Anda yakin Anda tidak akan menghasilkan upaya yang tidak masuk akal bagi mereka ketika mereka mencoba memperbarui ke rilis perpustakaan terbaru Anda. Dan jika Anda tidak memiliki informasi yang cukup untuk membuat perkiraan yang baik mengenai hal ini, mungkin akan lebih baik untuk tidak mengubah perilaku.

(Dan ya, jika Anda akan membuat perubahan API yang tidak kompatibel ke belakang, nomor versi Anda harus mengungkapkan ini dengan jelas, tidak masalah jika Anda menamakannya "perbaikan bug" atau tidak).

Doc Brown
sumber
1

Rangkullah itu. Itu dapat membuat seluruh produk Anda.

GunZ: Duel (sebuah game online) memiliki bug yang dapat Anda manfaatkan dan terus-menerus menyalahgunakan untuk mengubah hampir seluruh gameplay (disebut K-Style; cari di YouTube). Itu membuat keseluruhan permainan jauh lebih menantang; butuh keahlian dan membuatnya luar biasa dan menyenangkan .. sangat menyenangkan bahkan para moderator secara terbuka menggunakannya sebagai gaya permainan utama mereka.
Itu yang membuat game.
Saya tidak bermain selama bertahun-tahun tetapi sampai hari ini, sebagai seorang gamer, itu adalah salah satu permainan favorit saya sepanjang masa karena sangat berbasis keterampilan dan sangat menyenangkan, dan semua kehebatan ini hanya karena bug.

Mereka memang memperbaikinya pada akhirnya, tetapi orang-orang sangat membenci itu sehingga para iblis dengan serius menyadapnya kembali.

Jadi jawaban saya adalah menstabilkan dan memeliharanya (refactor jika diperlukan).


Cerita indah itu diucapkan, saya kira jawaban yang sama tidak berlaku untuk apa pun yang tidak memiliki keuntungan langsung. Jika bug Anda menyebabkan suatu peristiwa yang menyebabkan keuntungan, biasanya akan lebih pintar untuk memperbaiki bug, dan menemukan cara lain untuk mencapai apa pun yang ia bisa. Jika di luar ruang lingkup, pertimbangkan untuk tidak menggunakannya hanya karena berada di luar ruang lingkup, atau buat modul lain (mungkin yang kecil) untuk memperkenalkannya. Pada dasarnya: jangan melanggar prinsip tanggung jawab tunggal .

MasterMastic
sumber