Mencari Studi Kasus tentang Bagaimana TDD Meningkatkan Kualitas dan / atau Kecepatan Pengembangan [ditutup]

14

Di perusahaan saya, saya mencoba membuat alasan mengapa kita harus melakukan TDD. Saat ini sebagian besar pengembang hanya melakukan apa pun yang mereka bisa untuk menyelesaikan proyek, kemudian pergi menambahkan unit test setelah fakta untuk memenuhi metrik manajer. Setiap contoh dari perusahaan terkemuka yang melakukan TDD dan melihat manfaatnya akan sangat dihargai.

Matt West
sumber
1
Sebenarnya saya pikir "menambahkan tes unit, dan berharap manajer mereka tidak melihat mereka 'membuang-buang waktu" "lebih umum daripada" menambahkan tes unit untuk memenuhi metrik manajer ", tapi saya rasa itu sebabnya beberapa studi kasus akan menyenangkan.
Carson63000
1
Juga TDD memungkinkan Anda untuk sangat awal dalam proses menentukan kapan Anda selesai karena Anda memiliki semua tes yang harus lulus.
@ user1249 TDD tidak mengatakan "tulis semua tes sebelum menulis kode apa pun". Dikatakan "tulis satu tes yang gagal, dan satu hal untuk membuatnya lulus; ulangi seperlunya". Jika Anda menulis semua tes Anda terlebih dahulu, Anda kehilangan putaran umpan balik yang ketat antara tes dan kode produksi, yang merupakan salah satu alasan utama untuk menggunakan TDD di tempat pertama.
Frank Shearar

Jawaban:

8

Studi tentang 4 proyek di IBM dan Microsoft. Diterbitkan dalam jurnal Rekayasa Perangkat Lunak Emperical .

Studi Empiris Menunjukkan Pengembangan Berbasis Tes Meningkatkan Kualitas

Sebuah makalah yang pertama kali diterbitkan dalam jurnal Rekayasa Perangkat Lunak Empiris melaporkan: "TDD tampaknya berlaku di berbagai domain dan secara signifikan dapat mengurangi kepadatan cacat perangkat lunak yang dikembangkan tanpa pengurangan produktivitas yang signifikan dari tim pengembang." Studi ini membandingkan 4 proyek, di Microsoft dan IBM yang menggunakan TDD dengan proyek serupa yang tidak menggunakan ...

Makalah ini mencakup 1 studi kasus di IBM dan 3 dari Microsoft. Setiap studi kasus membandingkan dua tim yang bekerja pada produk yang sama, menggunakan bahasa dan teknologi pengembangan yang sama, di bawah manajer tingkat tinggi yang sama, hanya satu yang menggunakan pengembangan yang digerakkan oleh pengujian (TDD). Tidak ada tim yang tahu bahwa mereka akan menjadi bagian dari studi selama siklus pengembangan mereka. Studi kasus IBM mengikuti tim yang melakukan pengembangan driver perangkat. Kasing Microsoft mengikuti tim yang mengerjakan Windows, MSN, dan Visual Studio.

Makalah ini menjelaskan praktik TDD yang digunakan oleh tim sebagai alur kerja menit ke menit, serta alur kerja tingkat tugas ...

rwong
sumber
6

Ada bab tentang TDD dengan studi kasus dalam buku baru-baru ini, "Pembuatan Perangkat Lunak: Apa yang berhasil dan mengapa kami mempercayainya". Tetapi Anda mungkin kecewa, karena jika saya ingat dengan benar, penelitian ini tidak mengungkap manfaat nyata apa pun bagi TDD. Studi kasus tetap menarik, dan buku itu secara umum adalah salah satu buku perangkat lunak terbaik yang pernah saya baca baru-baru ini. Ini berisi banyak studi kasus tentang hal-hal seperti pemrograman pasangan, ulasan kode, dll.

Kevin
sumber
4

Coba lihat ini: TDD Terbukti Efektif! Atau itu?

... ketika Phil Haack mengumumkan bahwa Penelitian Mendukung Efektivitas TDD, saya lebih tertarik untuk melihat apa yang sebenarnya terdapat dalam laporan terkait . Phil mengutip dari abstrak.

Kami menemukan bahwa rata-rata siswa yang pertama kali mengerjakan tes menulis lebih banyak tes dan, pada gilirannya, siswa yang menulis lebih banyak tes cenderung lebih produktif. Kami juga mengamati bahwa kualitas minimum meningkat secara linier dengan jumlah tes programmer, terlepas dari strategi pengembangan yang digunakan.

Phil jelas telah membaca sisa laporan dan memberikan karya favoritnya yang sepertinya sesuai dengan judulnya. Salah satu hal yang saya khawatirkan ketika saya melihat hal-hal yang mendukung praktik pengembangan perangkat lunak terbaru dan terhebat, bagaimanapun, adalah kecenderungan yang kuat terhadap bias konfirmasi - mencari konfirmasi teori saat ini dan mengabaikan indikator tandingan.

Jadi, menjadi tipe penasaran dan karena TDD adalah sesuatu yang saya perhatikan untuk melihat apakah itu sesuatu yang mungkin ingin saya adopsi sendiri suatu hari, saya masuk ke laporan ...

... tanpa pertanyaan, pengujian terlebih dahulu mengarah pada memiliki lebih banyak tes per unit fungsional. Pertanyaannya adalah apakah ini berharga. Studi ini tampaknya mengindikasikan bahwa ini mungkin bukan masalahnya, setidaknya jika kualitas adalah keuntungan yang Anda inginkan. Tapi kemudian, saya tidak terkejut bahwa jumlah tes tidak sesuai dengan kualitas sama seperti saya tidak terkejut bahwa jumlah baris kode tidak sesuai dengan produktivitas.

Penulis memiliki banyak poin bagus tentang TDD yang tidak terlalu efektif (imo walaupun hyped to death)

stijn
sumber
Saya tidak yakin bagaimana saya dapat memposting lebih dari tautan tanpa menduplikasi konten yang tertaut? The menyediakan apa yang diminta OP: studi kasus TDD dan tinjauan studi itu.
stijn
4

lihat berapa banyak waktu yang Anda dan klien habiskan untuk menguji perangkat lunak secara manual; bandingkan dengan perkiraan berapa lama tes otomatis gaya TDD akan diambil. Singkirkan perbedaannya

menurut pengalaman saya, tes otomatis TDD adalah emas karena memberikan asuransi dan menghilangkan sejumlah besar pengujian manual

seperti yang ditunjukkan oleh Andres F, Anda dapat memperoleh manfaat ini hanya dari pengujian otomatis, tidak harus TDD - namun, TDD memerlukan tes otomatis alih-alih menjadi hal yang baru saja dipikirkan atau menyenangkan.

Terpaksa untuk berpikir tentang pengujian terlebih dahulu juga memaksa Anda untuk berpikir tentang masalah terkait kualitas - seperti modularitas, desain antarmuka, dan sebagainya - sebelum Anda mulai menulis kode.

Secara pribadi, saya percaya salah satu manfaat terbesar dari TDD adalah bahwa menulis tes terlebih dahulu menjaga spesifikasi apa yang sebenarnya harus dilakukan oleh kode saat Anda menulis kode, daripada mengurutkannya. -sebagai kode Anda.

Steven A. Lowe
sumber
2
Saya setuju, tetapi juga penting untuk dicatat bahwa lulus tes unit tidak berarti perangkat lunak itu benar, hanya saja ia melakukan apa yang diuji unit kecuali. Jika pengujian unit bermasalah maka perangkat lunak mungkin memiliki bug juga. Jika tidak lulus, perangkat lunak bahkan mungkin benar, jika tes unit bermasalah. Inilah sebabnya mengapa pengujian manual juga diperlukan.
Tamás Szelei
1
Tujuan TDD yang dinyatakan bukan untuk mengurangi pengujian manual, tetapi untuk meningkatkan desain. Tes otomatis adalah konsep ortogonal untuk TDD; Anda dapat memilikinya tanpa TDD.
Andres F.
@AndresF. Anda benar; jawaban diedit
Steven A. Lowe
2

Anda ingin membuat kasus untuk itu: sarankan Anda melakukannya untuk proyek berikutnya, dan kemudian belajar darinya. Jika ternyata itu bekerja dengan baik untuk Anda, maka saya harap Anda akan terus menggunakannya dan jika perlu waktu lebih lama untuk mengerjakan proyek dan / atau menghabiskan seluruh waktu Anda menulis tes alih-alih mengkode, maka Anda pasti akan membuangnya sebagai sebuah kegagalan.

Saya pikir solusi dunia nyata adalah (seperti banyak hal) di tengah jalan, Anda ingin tes tetapi Anda tidak ingin tes lebih penting daripada proyek.

(secara pribadi saya pikir TDD adalah mode, kedengarannya bagus dalam teori, tetapi dalam praktiknya ... tidak begitu baik. Saya menemukan pengujian integrasi jauh lebih penting, tetapi itu bisa saja jenis proyek kompleks yang saya kerjakan).

gbjbaanb
sumber
2

Saya telah bekerja menggunakan TDD selama 2 tahun dan di mana saya bekerja pada saat itu, kami semua enggan untuk menggunakan termasuk manajer. Namun itu segera berubah menjadi hal yang benar juga. Manfaat yang segera kami perhatikan adalah

  • Menemukan bug pada tahap awal.
  • Menulis kode yang lebih baik tanpa disadari.
  • Kode Anda sekarang lebih mudah dikelola karena pengujian Anda semuanya dalam potongan kecil (kami memiliki fungsi yang 300-400 baris) konyol. Sekarang maks 30 dan semua diuji secara independen.

Para manajer tidak akan tahu karena mereka semua tertarik pada satu hal "Sudahkah Anda selesai". Tetapi kemudian mereka mengeluh ketika perangkat lunak terus rusak tanpa disadari. Dengan cakupan yang baik dan tes yang masuk akal. Ini bukan kuantitas tetapi kualitas yang Anda dapat benar-benar melihat ketika seseorang merusak suatu fungsi. Sayangnya juga sulit jika Anda sendirian. Saya memiliki masalah yang sama, karena Anda mungkin perlu mengubah kode misalnya kelas dasar dll sehingga Anda dapat membuat bagian dari perangkat lunak dapat diuji.

Saya memberi Anda sebuah contoh. Saya ingin mengejek repositori tetapi tidak ada antarmuka dan saya perlu menyuntikkan repositori ke dalam lapisan layanan saya dan karenanya menambahkan / memodifikasi konstruktor di seluruh toko, ini ternyata menjadi masalah besar tetapi dalam akhirnya saya memiliki lebih dari 200 tes hanya menguji satu area sistem dan mereka terkesan.

Saya biasanya melakukan hal berikut:

  • Saya menjaga unittests saya sangat singkat
  • Hanya 1 menegaskan. Tidak ada roulette Rusia.
  • Saya menguji skenario positif-negatif dan pengecualian

Mengenai studi kasus saya takut, saya tidak yakin saya pernah melihat. Anda perlu membangun proyek Anda dan menjadi studi kasus Anda. Mereka mungkin terkesan juga.

Saya harap ini membantu

brix
sumber