Apa sajakah strategi yang dapat digunakan untuk mengotomatisasi pembuatan kasus uji unit? Aspek apa yang perlu Anda perhatikan di setiap kelas untuk dapat menghasilkan setidaknya kerangka kasus uji yang layak?
Saya menyadari solusi otomatis yang komprehensif tidak praktis, tetapi saya ingin mempercepat pembuatan tes setidaknya dengan membuat kerangka. Saya tidak mencari contoh kode, mungkin hanya beberapa saran untuk memulai atau contoh di mana sesuatu seperti ini telah dilakukan sehingga saya dapat melihat bagaimana mereka mendekatinya dan apa yang mungkin dilakukan.
Saya terutama tertarik pada metode untuk membuat kerangka unit test di PHP, yang tidak menyediakan semua alat yang bahasa lain mampu, seperti mengisyaratkan tipe lengkap , misalnya.
sumber
Jawaban:
Strategi dan kerangka Anda tergantung, secara non-sepele, pada jenis tes apa yang ingin Anda hasilkan, cakupan apa yang Anda cari, dan bahasa / lingkungan tempat Anda bekerja.
Cukup mudah untuk menulis generator tes yang, untuk bahasa seperti C atau Java, membaca tanda tangan kelas dan secara otomatis menghasilkan tes untuk kasus sudut standar (meneruskan 0, 2 nilai acak, MAX_INT, MIN_INT, ke argumen integer, nulls untuk nullables , dll ...). Anda kemudian dapat menjalankan tes yang dihasilkan, mencatat hasil untuk setiap tes, dan secara manual menyaringnya untuk menghapus yang tidak relevan, menyetujui hasil yang dapat diterima untuk tes yang lulus (sehingga mereka dapat secara otomatis lulus sejak saat itu), dan menandai sebagai yang tidak valid yang gagal .
Anda dapat menambah ini dengan memberi tag / komentar / refactoring kelas untuk membantu generator Anda dengan petunjuk tambahan. Anda mungkin memiliki tag yang mencantumkan semua perkecualian yang mungkin yang diajukan oleh pemanggilan metode, atau yang memberikan kisaran bilangan bulat yang valid untuk argumen bilangan bulat berkurang. Lihatlah ini sebagai tangan pendek karena harus menulis tes sendiri.
Jadi, berikut adalah beberapa komponen yang ingin Anda lihat:
Ada banyak kerangka kerja pengujian di luar sana yang sudah menyertakan potongan fungsi ini untuk berbagai bahasa dan platform. Meskipun cukup mudah untuk mulai melakukan pekerjaan ini sendiri dan menumbuhkan kerangka kerja semacam ini secara in-house, ini juga merupakan proyek jangka panjang tanpa akhir yang mungkin akan meniru pekerjaan yang sudah ada. Saya akan merekomendasikan meluangkan waktu yang signifikan untuk melihat apa yang tersedia terlebih dahulu, dan kemudian memutuskan apakah layak untuk menyelam.
sumber
Saya belum memiliki kesempatan untuk menggunakannya pada aplikasi dengan ukuran atau kompleksitas yang berarti, tetapi ada alat, termasuk Google CodePro AnalytiX , yang mengotomatisasi pembuatan unit test untuk aplikasi Java . Saya juga menemukan produk komersial, Tes C ++ Parasoft , yang tampaknya memungkinkan untuk pembuatan tes unit C ++
Aplikasi ini menggunakan heuristik untuk menghasilkan kasus uji. Saya tidak yakin bahwa ada satu kerangka kerja yang dapat Anda gunakan untuk menghasilkan kerangka, tetapi ada konstruksi yang dapat Anda cari. Saya cenderung fokus pada loop, pernyataan kondisional (
if
blok,switch
/case
pernyataan), dan pengecualian, dan membuat kasus uji yang memaksa jalur eksekusi yang berbeda untuk dilakukan.Saya tidak akan fokus pada mempercepat penulisan tes dengan mencoba membuat kerangka atau templat, tetapi dengan meningkatkan analisis spesifikasi dan / atau implementasi dan menulis tes berkualitas tinggi. Mampu mengidentifikasi tes apa yang menambah nilai paling awal, menulis itu, dan kemudian mengisi lubang kemudian akan berdampak lebih besar pada produktivitas dan kualitas.
Hanya untuk memberikan publisitas lagi, Falcon mencoba CodePro pada sebuah proyek dan menulis sedikit uraian tentang pengalamannya .
sumber
Saya menulis generator untuk mempercepat pengujian unit untuk proyek .NET beberapa tahun yang lalu. Ada basis kode besar tanpa unit test dan bertujuan untuk dengan cepat meningkatkan cakupan dasar. Berikut adalah beberapa catatan yang mungkin bisa membantu:
data-driven testing
banyak membantu, jika basis kode Anda mengizinkan. Kerangka uji membuat tabel database untuk setiap unit tes untuk menyimpan data uji, sehingga setiap baris dalam tabel itu adalah tes terpisah dan tidak diperlukan kode tambahan ( Aturan Representasi ). Dari titik ini, pengujian yang sebenarnya dapat dengan mudah dibuat secara otomatis atau dimasukkan secara manual.smoke test
setidaknya berfungsi sebagai . Untuk area dengan risiko lebih tinggi, tes manual tambahan ditulis.Untuk meringkas, saya setuju bahwa solusi generik tidak praktis (jika memungkinkan). Saya percaya peluangnya lebih baik jika basis kode cocok untuk pembuatan uji dan kerangka uji dapat mengambil keuntungan dari strukturnya.
(Sebagai catatan tambahan, ada Pex , tetapi untuk .NET)
sumber