Saya suka "merah / hijau / refactor" untuk RoR, dll.
Pekerjaan harian saya melibatkan pemrosesan batch file yang sangat besar dari pihak ketiga dengan python dan alat kustom lainnya.
Churn pada atribut dari file-file ini tinggi, sehingga ada banyak perbaikan / peningkatan yang diterapkan cukup sering.
Pengujian regresi melalui badan data uji yang diketahui dengan hasil yang diharapkan tidak ada. Hal yang paling dekat adalah berjalan melawan batch terakhir dengan kasus uji baru yang dikodekan dengan tangan, pastikan tidak meledak, kemudian lakukan pemeriksaan spot dan uji statistik untuk melihat apakah data masih terlihat OK.
T >> Bagaimana cara membawa prinsip TDD ke lingkungan seperti ini?
Jawaban:
Hanya FYI: Pengujian unit tidak setara dengan TDD. TDD adalah suatu proses di mana pengujian unit merupakan elemen.
Dengan itu, jika Anda ingin menerapkan pengujian unit, maka ada beberapa hal yang dapat Anda lakukan:
Semua kode / peningkatan baru diuji
Dengan cara ini Anda tidak harus melalui dan menguji semua unit yang sudah ada, sehingga punuk awal pelaksanaan pengujian unit jauh lebih kecil.
Uji setiap potongan data
Menguji sesuatu yang dapat berisi sejumlah besar data dapat menyebabkan banyak kasus tepi dan kesenjangan dalam cakupan pengujian. Sebagai gantinya, pertimbangkan opsi 0, 1, banyak. Uji 'kumpulan' dengan 0 elemen, 1 elemen, dan banyak elemen. Dalam kasus 1 elemen, uji berbagai permutasi tempat data untuk elemen itu berada.
Dari sana, uji kasus tepi (batas atas dengan ukuran elemen individu, dan jumlah elemen dalam batch). Jika Anda menjalankan tes secara teratur, dan Anda memiliki tes yang berjalan lama (batch besar?), Sebagian besar pelari tes memungkinkan kategorisasi sehingga Anda dapat menjalankan kasus uji secara terpisah (setiap malam?).
Itu akan memberi Anda basis yang kuat.
Menggunakan data aktual
Memberi makan data 'aktual' yang sebelumnya digunakan seperti yang Anda lakukan sekarang bukanlah ide yang buruk. Cukup lengkapi dengan data uji yang terbentuk dengan baik sehingga Anda segera mengetahui titik kegagalan tertentu. Pada kegagalan untuk menangani data aktual, Anda dapat memeriksa hasil proses batch, menghasilkan unit test untuk mereplikasi kesalahan, dan kemudian Anda kembali ke merah / hijau / refactor dengan kasus regresi yang bermanfaat.
sumber
Sama seperti lingkungan lainnya.
Pisahkan logika menjadi tingkat granularitas terkecil. Ini akan memberi Anda seperangkat aturan untuk proses tersebut, setiap aturan akan mencakup satu item logika yang diperlukan untuk proses Anda.
Kemudian tulis tes untuk setiap aturan. Tes-tes ini akan gagal. Tulis kode untuk memperbaiki tes.
Pengujian regresi dengan data uji yang diketahui yang Anda bicarakan bukan pengujian unit. Itu akan menjadi pengujian integrasi, ini berbeda dari TDD. Dengan TDD Anda mungkin memiliki tes tunggal untuk menguji apakah Anda dapat memuat file, tetapi umumnya tidak ada tes lain yang benar-benar mendekati file data dengan data uji. Alih-alih, Anda akan mensimulasikan data yang diperlukan untuk menjalankan aturan tertentu menggunakan objek mengejek.
sumber
Mulailah dengan strategi perangkat lunak yang baik, lalu terapkan TDD.
(Penafian: Saya mungkin salah paham "churn", atau TDD, atau keduanya.)
Inilah strategi yang saya sarankan untuk pemrosesan batch "data kotor": Specify-Triage-Execute.
Berita gembira efisiensi:
Simpan semua hasil Triage (historis atau saat ini) yang terkait dengan catatan. Jika tidak ada modul Triage yang dimodifikasi sejak dijalankan terakhir, maka tidak harus dijalankan kembali pada data lama.
Tidbit "Anda harus tahu apa yang ingin Anda bangun sebelum melakukan TDD":
Specify-Triage-Execute adalah salah satu cara untuk menjaga agar persyaratan dapat dikelola di setiap level dan memungkinkan pertumbuhan di masa depan.
(Jika ada yang tahu istilah standar yang benar untuk ketiga langkah tersebut, beri tahu saya, saya akan mengedit jawaban saya.)
sumber