Saya akan memberikan ceramah kepada departemen saya minggu depan tentang pengujian unit dan pengembangan yang digerakkan oleh pengujian. Sebagai bagian dari ini, saya akan menunjukkan beberapa contoh dunia nyata dari beberapa kode yang saya tulis baru-baru ini, tetapi saya juga ingin menunjukkan beberapa contoh yang sangat sederhana yang akan saya tulis dalam ceramah.
Saya telah mencari di web untuk contoh-contoh yang baik, tetapi saya telah berjuang untuk menemukan yang cocok untuk bidang pengembangan kami. Hampir semua perangkat lunak yang kami tulis adalah sistem kontrol tertanam dalam yang dijalankan pada mikrokontroler kecil. Ada banyak kode C yang mudah diterapkan untuk pengujian unit (saya akan berbicara tentang pengujian unit pada PC daripada pada target itu sendiri) selama Anda menghindari lapisan 'bawah': hal-hal yang berbicara langsung ke peripheral mikrokontroler. Namun, sebagian besar contoh yang saya temukan cenderung didasarkan pada pemrosesan string (mis. Contoh angka Romawi Dive Into Python yang sangat baik) dan karena kita jarang menggunakan string, ini tidak benar-benar cocok (tentang satu-satunya fungsi perpustakaan yang biasanya digunakan kode kita adalah memcpy
, memcmp
dan memset
,strcat
atau ekspresi reguler kurang tepat).
Jadi, pada pertanyaan: bisakah ada yang menawarkan beberapa contoh fungsi yang bagus yang dapat saya gunakan untuk menunjukkan pengujian unit dalam sesi langsung? Jawaban yang bagus menurut pendapat saya (dapat berubah) mungkin adalah:
- Sebuah fungsi yang cukup sederhana sehingga siapa pun (bahkan mereka yang hanya menulis kode sesekali) dapat mengerti;
- Fungsi yang tidak tampak sia-sia (yaitu mengerjakan paritas atau CRC mungkin lebih baik daripada fungsi yang mengalikan dua angka bersamaan dan menambahkan konstanta acak);
- Sebuah fungsi yang cukup pendek untuk ditulis di depan ruangan orang (saya dapat memanfaatkan banyak clipboard Vim untuk mengurangi kesalahan ...);
- Fungsi yang mengambil angka, array, pointer atau struktur sebagai parameter dan mengembalikan sesuatu yang serupa, daripada menangani string;
- Fungsi yang memiliki kesalahan sederhana (misalnya,
>
bukan>=
) yang mudah dimasukkan ke dalam yang akan tetap bekerja dalam kebanyakan kasus tetapi akan pecah dengan beberapa kasus tepi tertentu: mudah diidentifikasi dan diperbaiki dengan uji unit.
Adakah pikiran?
Meskipun mungkin tidak relevan, tes itu sendiri mungkin akan ditulis dalam C ++ menggunakan Google Test Framework: semua header kami sudah memiliki #ifdef __cplusplus extern "C" {
pembungkus di sekitarnya; ini telah bekerja dengan baik dengan tes yang saya lakukan sejauh ini.