Saya bekerja dalam pemrosesan gambar (terutama OCR) dan saya bertanya-tanya bagaimana saya harus mengintegrasikan tes unit dalam pengembangan saya.
Saya sudah menggunakan unit test untuk jenis kode yang lebih "umum" tetapi ketika berurusan dengan kode pemrosesan gambar, saya tidak yakin bagaimana menghadapinya. Jenis kode ini selalu memerlukan input / output data gambar dan mengejek ini tidak jelas. Untuk saat ini saya lebih banyak melakukan tes integrasi tetapi butuh beberapa saat untuk menjalankan dan saya ingin beberapa ide tentang cara memecah kode semacam ini menjadi unit test sehingga saya dapat menjalankannya lebih cepat.
Sunting: Menganalisis karakter dapat melalui banyak langkah yang melibatkan banyak rotasi, penskalaan dan operasi morfologis. Langkah-langkah ini sering berubah ketika algoritma sedang dikembangkan. Dengan demikian input dan output yang diharapkan dapat berevolusi banyak saat pengujian. Setiap karakter dapat berukuran 100x100 piksel sehingga hardcoding dalam kode atau bekerja dengan data yang dihasilkan tidak perlu dipertanyakan.
sumber
Jawaban:
Saya bekerja dengan perangkat lunak perekaman / analitik / streaming video dan kami menghadapi masalah yang sangat mirip. Di bawah ini adalah solusi kami, tidak yakin bagaimana itu akan berhasil dalam jangka panjang, tetapi untuk saat ini tampaknya berhasil.
Simpan gambar input / output sebagai sumber daya dalam proyek unit test Anda. Kemudian minta unit test memverifikasi bahwa ketika input tertentu diberikan, output spesifik tersebut dihasilkan.
9/10 kali ketika Anda memperbaiki kode dan menambahkan fungsionalitas lain, Anda akan mengharapkan perilaku rutin penanganan gambar Anda tidak berubah, jadi jika semua unit test tiba-tiba mulai gagal, kemungkinan karena kesalahan.
Di sisi lain, jika Anda membuat perubahan dalam algoritma yang sebenarnya, itu juga akan mengakibatkan kegagalan unit test. Dalam hal ini, Anda harus memverifikasi secara manual / visual bahwa hasilnya benar dan jika hasilnya bagus, perbarui sumber daya gambar untuk membuat unit test lulus lagi.
Dalam proyek kami, kami akhirnya mengembangkan sumber video "palsu" (atau mengejek jika Anda mau), yang dapat memberi kami data baik untuk input maupun output. Tetapi data itu sendiri tidak palsu, itu sebenarnya ditangkap menggunakan kelas rekaman data pembantu dari sistem yang berjalan ketika kami menjalankan tes manual dan memverifikasi bahwa semuanya bekerja.
sumber