TDD - apa keuntungan / manfaat jangka pendek?

8

Cukup sering manfaat menggunakan TDD dianggap sebagai keuntungan 'jangka panjang' - kode keseluruhan akan lebih terstruktur, lebih dapat diuji, keseluruhan lebih sedikit bug yang dilaporkan oleh pelanggan, dll.

Namun, di mana manfaat jangka pendek menggunakan TDD? Adakah yang benar-benar berwujud dan mudah diukur?

Apakah penting untuk memiliki manfaat jangka pendek yang jelas (atau bahkan tidak jelas secara kuantitatif), jika keuntungan jangka panjang dapat diukur?

ratkok
sumber

Jawaban:

11

Ada beberapa manfaat jangka pendek untuk TDD, beberapa lebih dapat diukur daripada yang lain. Inilah beberapa dari atas kepala saya:

  • Kode bersih, mengikuti prinsip SOLID yang baik . Itu adalah jika Anda menjaga tes Anda sebersih kode Anda dan menghindari kode tes hybrid kotor , kode akan cenderung mengikuti SOLID. Kode bersih lebih mudah dibaca dan lebih mudah menjaga kode Anda dari awal. Man hour disimpan selama pemeliharaan, tetapi bijaksana jangka pendek: Anda akan mendapatkan kode pembersih lebih cepat (karena Anda memiliki beberapa tes untuk mendukung Anda).

  • Pengujian regresi dari awal; Jika Anda bangkrut, Anda akan tahu tentang itu ... dini. Didukung oleh server CI, ini akan menghemat rambut Anda. Waktu berjam-jam untuk memperbaiki bug yang mengalami kemunduran yang akan Anda temukan lebih awal tanpa tes sulit untuk diukur tetapi katakan saja itu adalah banyak waktu kerja.

  • Memungkinkan refactoring dilakukan tanpa terlalu banyak menebak. Jika Anda menyelesaikan rangkaian uji untuk suatu kelas, refactoring itu (seperti mengekstraksi metode, menggunakan struktur data lain, mengekstraksi kelas) akan mudah karena Anda telah mendefinisikan tes dari awal. Apa yang akan memakan waktu berhari-hari untuk memperbaiki satu kelas akan memakan waktu kurang dari satu; dan Anda dapat melakukannya segera jika Anda memiliki tes yang dilakukan sebelumnya.

  • Desain yang digerakkan tes memungkinkan Anda memperbaiki duplikasi kode lebih awal. Setidaknya jika Anda adalah programmer yang jeli; karena pengujian dengan kode duplikat (baik dalam kode pengujian dan kode produksi) dengan cepat menjadi tugas yang membosankan. Semakin pintar Anda dengan kode tes Anda, semakin baik hasilnya. Lebih sedikit kode, lebih sedikit kerumitan, lebih banyak jam kerja yang disimpan.

EDIT Juga ditambahkan oleh Frank Shearar, yang kebetulan saya setujui:

Pada titik mana pun Anda memiliki kode kerja (kecuali kasus uji yang saat ini bekerja dengan Anda).

Menemukan bug atau masalah desain lebih awal melalui TDD benar-benar tak ternilai dan sulit untuk mengukur berapa banyak yang Anda hemat dalam jam kerja; meskipun salah satu caranya adalah dengan menghitung jam yang sebelumnya Anda habiskan untuk mengerjakan masalah desain yang terlambat dikembangkan. Dengan tes unit, bagian dari kode Anda dapat dilakukan melalui tes Anda tanpa harus menjalankan aplikasi atau sistem Anda yang sebenarnya. Dengan cara itu Anda dapat meyakinkan diri melalui TDD yang beberapa bagian dari program anda bekerja tepat sekarang , meskipun mungkin tidak terhubung ke hal yang nyata pada saat ini.

Spoike
sumber
2
Dan: Pada titik mana pun Anda memiliki kode kerja (kecuali kasus uji yang saat ini Anda kerjakan).
Frank Shearar
2

Dalam jangka pendek, maksud Anda adalah proyek kecil, atau apakah yang Anda maksudkan adalah hari-hari awal proyek?

Saya berkeyakinan bahwa mendapatkan tes terintegrasi sambil meletakkan dasar awal akan membayar dividen segera karena Anda telah memverifikasi pilar di mana seluruh sisa proyek akan berdiri. Saya cenderung mendesain dari atas ke bawah dan menerapkan dari bawah ke atas sehingga ini masuk akal untuk cara saya bekerja.

Jika sekarang Anda hanya menangkap satu ketidakkonsistenan, pekerjaan Anda baru saja membayar sendiri dengan tidak harus men-debug program yang lebih kompleks nantinya.

Plus proyek Anda sudah disiapkan untuk pengujian dan Anda tidak perlu merombak rig nanti.

Patrick Hughes
sumber
2
Perangkat Lunak yang Berorientasi Objek Tumbuh Dipandu oleh Tes menyebut ini "kerangka berjalan" - sebuah struktur minimal yang memungkinkan uji menyeluruh dari ujung ke ujung arsitektur Anda, dan secara otomatis dapat digunakan. Setelah Anda memilikinya, Anda dapat dengan aman dan mantap meletakkan daging di tulang aplikasi, mengetahui bahwa saat Anda melakukannya, semua kode Anda berfungsi, dan Anda dapat menggunakannya kapan saja.
Frank Shearar
Yang saya maksud dengan 'keuntungan jangka pendek' adalah manfaat yang Anda dapatkan dengan melakukan TDD yang dapat dilihat / diakui dalam waktu singkat - terlepas dari ukuran proyek. Dan 'terlihat / dikenali' tidak hanya oleh orang-orang yang melakukan TDD tetapi juga lainnya (manajer, PM, pelanggan, dll).
ratkok
2

Manfaat jangka pendek yang saya temukan dari TDD adalah bahwa saya tidak harus berkonsentrasi terlalu keras pada apa yang saya coba capai.

Jika saya terganggu dari pekerjaan saya, tanpa TDD diperlukan beberapa menit untuk mengingatkan diri saya di mana saya berada ketika saya kembali ke tugas.

Dengan TDD saya hanya menjalankan tes melihat yang gagal dan langsung saya tahu apa yang saya coba capai. Saya bekerja lebih cepat dengan lebih sedikit sakit otak.

Mongus Pong
sumber
Ini yang menarik - tidak pernah memikirkan manfaat ini. Namun, ini mungkin tampak bahwa TDD akan mendorong atau mendukung multitasking yang saya yakini agak tangkas dan XP benar-benar mencoba untuk meminimalkan (jika tidak menghilangkan).
ratkok