Dalam sebuah proyek di mana ada persyaratan non-fungsional yang menentukan waktu eksekusi maksimum untuk tindakan tertentu, QA harus memeriksa kinerja tindakan ini pada mesin khusus menggunakan perangkat keras yang tepat di bawah beban yang tepat, baik perangkat keras dan beban yang ditentukan dalam persyaratan.
Di sisi lain, beberapa perubahan yang salah pada kode sumber dapat sangat mempengaruhi kinerja. Memperhatikan dampak negatif ini sejak dini , sebelum kode sumber mencapai kendali sumber dan diverifikasi oleh departemen QA, dapat bermanfaat dalam hal waktu yang hilang oleh departemen QA yang melaporkan masalah tersebut, dan oleh pengembang yang memperbaikinya beberapa komitmen kemudian.
Untuk melakukan ini, apakah itu ide yang bagus:
Untuk menggunakan unit test untuk memiliki gagasan tentang waktu yang dihabiskan melaksanakan action² sama n kali,
Untuk menggunakan batas waktu uji setiap melalui
[TestMethod, Timeout(200)]
atribut dalam C #?
Saya mengharapkan beberapa masalah dengan pendekatan ini:
Secara konseptual , tes unit tidak benar-benar untuk itu: mereka diharapkan untuk menguji sebagian kecil kode, tidak lebih: pemeriksaan persyaratan fungsional, atau tes integrasi, atau tes kinerja.
Apakah batas waktu uji unit dalam Visual Studio benar-benar mengukur apa yang diharapkan untuk diukur, dengan mempertimbangkan bahwa inisialisasi dan pembersihan tidak ada untuk tes tersebut atau terlalu pendek untuk mempengaruhi hasil?
Mengukur kinerja dengan cara ini jelek. Menjalankan benchmark pada mesin apa saja — terlepas dari perangkat keras, beban, dll. Seperti melakukan benchmark yang menunjukkan bahwa satu produk basis data selalu lebih cepat daripada yang lain. Di sisi lain, saya tidak berharap unit test itu menjadi hasil yang pasti, atau sesuatu yang digunakan oleh departemen QA . Unit test tersebut akan digunakan hanya untuk memberikan gambaran umum tentang kinerja yang diharapkan, dan pada dasarnya untuk mengingatkan pengembang bahwa modifikasi terakhirnya merusak sesuatu, sangat mempengaruhi kinerja .
Pengembangan Tes Didorong (TDD) tidak mungkin untuk tes tersebut. Bagaimana ini bisa gagal, sejak awal, sebelum mulai mengimplementasikan kode?
Terlalu banyak tes kinerja akan memengaruhi waktu yang diperlukan untuk menjalankan tes, sehingga pendekatan ini terbatas pada tindakan singkat saja.
Mempertimbangkan masalah-masalah itu, saya masih merasa menarik untuk menggunakan tes unit tersebut jika dikombinasikan dengan metrik kinerja nyata oleh departemen QA.
Apakah aku salah? Apakah ada masalah lain yang membuatnya benar-benar tidak dapat diterima untuk menggunakan tes unit untuk ini?
Jika saya salah, apa cara yang benar untuk mengingatkan pengembang bahwa perubahan kode sumber sangat memengaruhi kinerja, sebelum kode sumber mencapai kontrol sumber dan diverifikasi oleh departemen QA?
¹ Sebenarnya, tes unit diharapkan hanya berjalan pada PC pengembang yang memiliki kinerja perangkat keras yang sebanding, yang mengurangi kesenjangan antara mesin tercepat yang tidak akan pernah bisa gagal dalam tes kinerja, dan mesin paling lambat yang tidak akan pernah berhasil melewatinya.
² Dengan tindakan, maksud saya sepotong kode yang agak pendek yang menghabiskan beberapa milidetik untuk dijalankan.