Haruskah saya menulis tes untuk membuktikan bahwa menghapus kode memperbaiki bug?

14

Kadang-kadang saya akan lari ke dalam situasi di mana memperbaiki bug mengharuskan saya menghapus bagian kode. Purist TDD akan (saya berasumsi) menganjurkan menulis tes yang gagal, menghapus kode, kemudian menonton tes lulus.

Sekarang, tampaknya sangat aneh untuk melakukan tes yang menyatakan bahwa beberapa kode telah dihapus. Tentu, saya kira itu akan memastikan tidak ada yang menggali kontrol sumber dan memasukkan kode itu kembali, tetapi apakah itu layak? Jika sepadan, itu nampaknya kurang berharga daripada menulis tes untuk kode yang telah ditambahkan , kan?

jewewlett
sumber
8
Saya pikir setiap tes regresi berguna, terlepas dari bagaimana bug itu diperbaiki
Ismail Badawi
1
Tes tidak menyatakan kode telah dihapus - tes menegaskan bug telah diperbaiki ...
user253751

Jawaban:

50

Anda melihatnya dengan cara yang salah. Tes tidak menyatakan bahwa kode telah dihapus. Tes ini memang menegaskan fungsionalitas tertentu.

Tes tidak peduli tentang jumlah kode yang diperlukan untuk membuatnya lulus, juga tidak menyadari bahwa Anda telah menghapus beberapa kode. Nilai memiliki tes seperti itu sama dengan tes lain yang Anda buat karena bug: Anda memiliki kepercayaan terhadap tidak adanya bug ketika tes lulus dan integrasi tes ke dalam proses pembuatan memastikan Anda bahwa bug akan kemungkinan besar tidak akan diperkenalkan kembali.

Namun cara lain untuk melihatnya dari perspektif TDD adalah sebagai berikut: Ketika Anda tahu bahwa menghapus kode memperbaiki bug dan Anda kemudian bertanya-tanya apakah akan menulis tes, Anda sudah melakukan kesalahan TDD. Setelah Anda mulai mengerjakan bug, Anda harus terlebih dahulu menulis tes yang memastikan keberadaan bug dengan gagal. Hanya setelah itu Anda memperbaiki bug yang sebenarnya - yang mungkin memerlukan penghapusan kode atau tidak - dan lulus uji. Pertanyaan yang Anda ajukan bahkan tidak muncul dengan cara itu.

jujur
sumber
3
+1, tetapi saya dapat membayangkan situasi berikut: kode yang dihapus berisi beberapa fungsi yang tidak masuk akal yang ditambahkan seseorang yang tidak memahami domain masalah dengan benar. Sekarang, selama tinjauan kode, pengembang lain melihat bahwa seluruh bagian itu benar-benar omong kosong dan kode akan dihapus. Memiliki banyak tes untuk perilaku tidak masuk akal semacam itu dapat menggembungkan test suite Anda.
Doc Brown
2
Jelas fungsi yang dihapus menangani beberapa input / output yang salah. Jelas seseorang yang lebih jauh mungkin salah memahami masalah dengan cara yang sama. Jika Anda takut pengujian suite, saya tidak berpikir TDD cocok untuk Anda. Apa sih test suit mengasapi?
Dorus
3
@DocBrown: Jika mereka melakukan TDD, maka harus ada beberapa tes yang memerlukan fungsi yang absurd, jika tidak mereka bahkan tidak akan diizinkan untuk menulis kode itu di tempat pertama! Ingat, Anda hanya diperbolehkan menulis jumlah kode minimum absolut untuk mendapatkan kelulusan tes. Jika tidak ada tes seperti itu, maka kode tersebut seharusnya tidak pernah ditulis di tempat pertama dan hanya dapat dihapus. Jika ada adalah tes yang kekuatan yang perilaku tidak masuk akal, maka tes yang harus dihapus, dan sekarang kita berada di kasus yang sama yang saya jelaskan sebelumnya: tes hilang, menghapus kode.
Jörg W Mittag
Dalam kedua kasus, Anda tidak pernah menambahkan tes apa pun ke suite tes, dan dalam kasus kedua, Anda bahkan menghapusnya . Namun, jika ternyata tes tersebut benar-benar masuk akal, maka fungsionalitasnya tidak begitu masuk akal.
Jörg W Mittag