Saya tidak pernah suka pengujian unit. Saya selalu berpikir itu meningkatkan jumlah pekerjaan yang harus saya lakukan.
Ternyata, itu hanya berlaku dalam hal jumlah sebenarnya baris kode yang Anda tulis dan lebih jauh lagi, ini sepenuhnya diimbangi dengan peningkatan jumlah baris kode bermanfaat yang dapat Anda tulis dalam satu jam dengan pengujian dan pengembangan yang didorong oleh pengujian.
Sekarang saya suka tes unit karena memungkinkan saya untuk menulis kode yang berguna, yang cukup sering berfungsi pertama kali! (amit-amit)
Saya telah menemukan bahwa orang-orang enggan melakukan tes unit atau memulai proyek dengan pengembangan yang didorong oleh tes jika mereka berada di bawah garis waktu yang ketat atau dalam lingkungan di mana orang lain tidak melakukannya, jadi mereka tidak melakukannya. Agak suka, penolakan budaya bahkan untuk mencoba.
Saya pikir salah satu hal paling kuat tentang pengujian unit adalah keyakinan bahwa itu memberi Anda untuk melakukan refactoring. Ini juga memberikan harapan baru yang ditemukan, bahwa saya dapat memberikan kode saya kepada orang lain untuk memperbaiki / meningkatkan, dan jika unit test saya masih berfungsi, saya dapat menggunakan versi baru perpustakaan yang mereka modifikasi, cukup banyak, tanpa rasa takut.
Aspek terakhir dari unit testing ini yang saya pikir perlu nama baru. Tes unit lebih mirip kontrak apa yang harus dilakukan kode ini sekarang, dan di masa depan.
Ketika saya mendengar kata pengujian, saya memikirkan tikus dalam kandang, dengan beberapa percobaan dilakukan pada mereka untuk melihat efektivitas senyawa. Ini bukan pengujian unit, kami tidak mencoba kode yang berbeda untuk melihat apa pendekatan yang paling efektif, kami mendefinisikan output apa yang kami harapkan dengan input apa. Dalam contoh tikus, tes unit lebih seperti definisi tentang bagaimana alam semesta akan bekerja sebagai lawan dari percobaan yang dilakukan pada tikus.
Apakah saya bingung atau ada orang lain yang melihat penolakan ini untuk melakukan pengujian dan apakah mereka pikir itu alasan yang sama mengapa mereka tidak mau melakukannya?
Apa alasan Anda / orang lain untuk tidak menguji?
Menurut Anda, motivasi mereka bukan pada pengujian unit?
Dan sebagai nama baru untuk pengujian unit yang mungkin dapat mengatasi beberapa keberatan, bagaimana dengan jContract? (Sedikit Jawa sentris saya tahu :), atau Kontrak Unit?
sumber
Jawaban:
Pengujian kata dalam pengujian unit membuat orang berpikir ini adalah pengujian integrasi atau pengujian antarmuka pengguna karena hanya itulah jenis pengujian yang pernah mereka lakukan. Ini seperti menempatkan java ke javascript.
Ketika sesuatu memiliki nama yang buruk dan itu mempengaruhi pemikiran orang-orang tentang hal itu disebut kesalahan pembingkaian. Kesalahan pembingkaian cenderung dangkal - orang pintar dan dapat melihat semua jenis nama buruk, metafora buruk.
Ketergantungan yang sulit untuk diejek / dipalsukan /
Pengujian unit memiliki jumlah konsep yang sederhana dan jumlah pekerjaan yang tidak sepele perlu dilakukan sebelum seseorang berhenti menulis tes unit yang buruk dan mulai menulis yang baik. Ketika orang menjadi lebih baik dalam menjelaskan apa itu unit testing, adopsi akan meningkat. Dalam pengalaman saya, pengujian unit memiliki efek magis dekat pada produktivitas dan kualitas kode. Tapi itu tidak dimulai seperti itu. Saya awalnya menggunakan kerangka pengujian unit sebagai cara yang nyaman untuk menulis tes integrasi.
sumber
Konsep perubahan nama telah disahkan. Ini disebut Pengembangan Berbasis Perilaku . Orang-orang yang datang dengan itu memperhatikan banyak argumen yang sama ditambah kecocokan yang tidak wajar untuk menguji sesuatu yang belum dibuat. Alih-alih, konsep mereka adalah menulis spesifikasi yang dapat dieksekusi (yang sebenarnya adalah tentang TDD).
Saya perhatikan pushback yang sama. Saya juga memperhatikan bahwa sejumlah orang tidak tahu bagaimana menulis unit test. Mereka kurang dalam disiplin proses ilmiah, dan hanya menggunakan kerangka uji unit sebagai cara untuk menyatukan semuanya dan memulai debugger. Singkatnya, mereka tidak benar-benar meningkatkan penggunaan waktu mereka. Saya tidak bisa memberi tahu Anda berapa banyak unit test yang saya lihat yang panjangnya puluhan baris (lebih dari 30 baris) dan bukan satu pernyataan tegas. Ketika saya melihat itu, saya tahu sudah waktunya untuk bekerja dengan pengembang dan mengajari mereka apa itu penegasan, dan bagaimana menulis unit test yang benar-benar diuji.
sumber
Kontrak disebut "antarmuka" dalam banyak kasus di sini. Memiliki unit test tidak menjamin kontrak sendiri, karena Anda dapat mengubah tes juga, jadi Anda tidak benar-benar tahu bahwa Anda dapat menggunakan versi baru perpustakaan hanya karena perpustakaan diuji. Anda perlu menguji kode yang menggunakan perpustakaan juga. Itu tidak berbeda dari pengujian unit lain, jadi saya tidak melihat mengapa itu perlu nama baru.
Saya pikir, seperti Anda, bahwa kebanyakan orang enggan melakukan tes karena mereka pikir itu lebih banyak pekerjaan dan tidak ada gunanya.
sumber
Saya akan memberi tahu Anda mengapa saya tidak suka TDD: ini bukan karena saya tidak bisa melihat nilainya di dalamnya, atau mengenali manfaat suite uji yang dapat saya jalankan untuk memverifikasi semua kode saya setelah setiap modifikasi.
Itu karena saya tidak membutuhkannya. Saya seorang siswa sekolah yang cukup tua, ketika saya masih kecil, kami tidak memiliki debugger terintegrasi yang mewah dengan edit-dan-terus menulis kode, dan kompilasi dapat memakan waktu yang cukup lama sehingga kami harus mendapatkan sesuatu benar, benar dari awal. Dengan pelatihan seperti itu, saya tidak benar-benar melihat bahwa menulis banyak unit test akan membuat saya lebih produktif atau kode saya lebih bebas bug.
Saya memang menguji kode saya, tetapi seperti yang selalu saya lakukan, ini lebih pada keseluruhan daripada pada masing-masing bagian. Jadi mungkin saya memang memiliki 'unit test', tetapi mereka agak berbutir kasar.
Jadi itulah alasan saya. Saya tidak dapat melihat perlunya bagi saya untuk melakukannya. Kode yang saya hasilkan cukup baik dan jika itu masalahnya, mengapa saya harus mengubah proses saya untuk memperbaiki sesuatu yang tidak rusak?
sumber