Apakah TDD efektif?

Selama diskusi yang menarik, satu orang yang sangat dihormati "mengingkari" argumen "tidak bisa dihancurkan":
Ada banyak penelitian yang menunjukkan keefektifan TDD.

Betulkah. Jika Anda pergi ke Google Cendekia, palu dalam kata kunci "TDD" dan "Efisiensi" - akan ada banyak artikel ilmiah , tetapi apakah itu sesederhana itu? Meskipun saya sendiri penggemar berat TDD, saya juga menganggap diri saya skeptis, dan memutuskan untuk memeriksa apakah telah terbukti secara ilmiah bahwa TDD sangat keren.

Saya menemukan kurangnya skeptisisme Anda mengganggu

Test-driven development (TDD) telah bersama kami sejak lama, dan selama ini menjadi bahan perdebatan sengit. Inti dari TDD adalah bahwa Anda perlu memulai pengembangan dengan menulis uji Unit jatuh, setelah kode ditulis yang akan membuat tes ini "hijau", dan seterusnya dalam satu lingkaran. Bagi mereka yang tidak mutakhir, Anda dapat melihat panduan TDD di IDE Idea .

Beberapa pengembang yakin bahwa TDD meningkatkan efisiensi dan kualitas setidaknya 146%. Beberapa pengembang tahu pasti bahwa TDD sepenuhnya omong kosong, dan menulis tes sebelum menulis kode seperti bermain ski di atas aspal. Kompromi antara kelompok-kelompok pembangunan ini tidak layak untuk ditunggu.

Namun kembali ke sains. Secara kebetulan, kebetulan bahwa saya sedang belajar di program Master Wrexham Glyndŵr University di bidang Ilmu Komputer dengan Big Data Analytics (omong-omong - saya merekomendasikannya kepada semua orang, dan saya akan menulis tentang hal itu secara terpisah) dan sekarang saya akan melalui modul Penelitian Kritis, di mana mereka mengajarkan Anda untuk membaca artikel ilmiah dan menganalisis validitasnya.
Apa bukti kami?

Memang ada banyak penelitian tentang efektivitas dan kegunaan TDD. Namun, jika Anda membaca studi sendiri, Anda akan melihat bahwa mereka sampai pada kesimpulan yang bertentangan .

Misalnya, dalam laporan "Evaluasi Eksperimental Efektivitas dan Efisiensi Pengembangan Didorong Uji", yang diterbitkan pada 2007, disimpulkan bahwa TDD meningkatkan produktivitas pengembang tanpa mempengaruhi kualitas [1].

Dalam laporan lain, yang meneliti temuan beberapa penelitian lain dan melakukan penelitiannya sendiri, “Mengevaluasi Efektivitas Pengembangan yang Didorong oleh Tes: Keuntungan dan Jebakan”, 2017 menyimpulkan bahwa TDD dapat meningkatkan kualitas produk, tetapi mengarah pada produktivitas yang lebih rendah. Selain itu, telah diamati bahwa sebagian besar pengembang menemukan TDD tidak alami [2].

Menurut penelitian lain, "Eksperimen Replikasi pada Efektivitas Pengembangan Tes-Pertama", 2013, peneliti tidak dapat menemukan efek yang meyakinkan dan signifikan dari pendekatan Uji-Pertama atau Uji-Terakhir pada produktivitas pengembang atau kualitas produk [3].

Untuk memalu paku ke dalam peti mati “bukti” dari keefektifan dan kegunaan TDD, Anda dapat membaca laporan ikhtisar “Tinjauan Umum Proyek Penelitian dan Percobaan Pengembangan yang Didorong oleh Penelitian”, 2012 [4], di mana, berdasarkan sejumlah besar studi yang tersedia, mereka mencoba mengambil kesimpulan tentang bukti tersebut. efisiensi dan efek positif dari TDD. Para penulis menyimpulkan bahwa tidak ada bukti yang meyakinkan tentang efek menguntungkan dari TDD. Perbedaan dalam hasil penelitian sebelumnya, penulis mendukung Bias konfirmasi - studi yang menunjukkan efektivitas TDD pada awalnya didasarkan pada hipotesis bahwa TDD efektif.
Jadi mengapa orang (termasuk saya) menganggap TDD sebagai latihan yang hebat?
Setelah membaca penelitian, saya hanya punya satu jawaban logis - efektivitas dan penerapan TDD terutama tergantung pada pengembang tertentu. Studi tentang efektivitas TDD, tampaknya, belum cukup memperhitungkan bahwa pengembang bukan robot, dan TDD bukan program. Untuk beberapa pengembang, TDD akan membawa hasil yang baik, untuk beberapa tidak akan ada perbedaan yang signifikan antara tes TDD dan tes Unit sederhana, karena beberapa TDD akan menyebabkan penurunan kualitas, produktivitas dan motivasi.

Pemrograman adalah kegiatan sosial. Masalah dengan interaksi sosial adalah bahwa itu bukan ilmu pasti. Masih mencari tahu bagaimana melakukan percobaan ilmiah lebih atau kurang untuk mengkonfirmasi / membantah hipotesis ini. Untuk memulai, saya menawarkan survei.

Jika Anda tiba-tiba ingin berbagi publikasi ini dengan kolega Anda yang berbahasa Inggris, ada versi bahasa Inggris yang sedikit lebih formal: medium.com/@alexspush/is-tdd-effective-2474c0471ac4

Daftar sumber

[1] A. Gupta, P. Jalote “Evaluasi Eksperimental dari Efektivitas dan Efisiensi Pengembangan Berbasis Tes "dipresentasikan pada Simposium Internasional Pertama tentang Rekayasa dan Pengukuran Perangkat Lunak Empiris, Madrid, Spanyol, 2007
[2] Z. Khanam, M. Ahsan," Mengevaluasi Efektivitas Pengembangan Berbasis Tes: Keuntungan dan Jebakan " Jurnal Internasional Penelitian Teknik Terapan vol. 12, no 18, hal. 7705, 2017. Tersedia: www.ripublication.com/ijaer17/ijaerv12n18_81.pdf . [Diakses 13 Mei 2020].
[3] D. Fucci, B. Turhan, "Eksperimen Replikasi tentang Keefektifan Pengembangan Uji-Pertama" dipresentasikan pada ACM / IEEE International Simposium tentang Rekayasa dan Pengukuran Perangkat Lunak Empiris, Baltimore, MD, USA, 2013
[4] A. Bulajic, S. Sambasivam dan R. Stojic "Tinjauan Proyek Penelitian dan Eksperimen Pengembangan Tes Didorong" disajikan pada Prosiding Informing Sains & Konferensi Pendidikan TI (InSITE), 2012. Tersedia: pdfs.semanticscholar.org/3278/971bb53a25822171df127d47a57243ddbb. . [Diakses 13 Mei 2020].

All Articles