Uji Unit? Tes integrasi? Uji Regresi? Ujian penerimaan?

98

Adakah orang yang dapat dengan jelas menentukan level pengujian ini karena saya merasa sulit untuk membedakan saat melakukan pengujian TDD atau unit. Tolong jika ada yang bisa menjelaskan bagaimana, kapan menerapkannya?

Donny
sumber

Jawaban:

129

Secara singkat:

Pengujian unit - Anda menguji unit setiap bagian kode. Pikirkan setiap file atau kelas.

Pengujian integrasi - Saat menyatukan beberapa unit yang berinteraksi, Anda perlu melakukan pengujian Integrasi untuk memastikan bahwa mengintegrasikan unit-unit ini bersama-sama tidak menimbulkan kesalahan.

Pengujian regresi - setelah mengintegrasikan (dan mungkin memperbaiki), Anda harus menjalankan pengujian unit Anda lagi. Ini adalah pengujian regresi untuk memastikan bahwa perubahan lebih lanjut tidak merusak unit apa pun yang telah diuji. Pengujian unit yang sudah Anda lakukan telah menghasilkan pengujian unit yang dapat dijalankan berulang kali untuk pengujian regresi.

Tes penerimaan - ketika pengguna / pelanggan / bisnis menerima fungsionalitas, mereka (atau departemen pengujian Anda) akan melakukan tes Penerimaan untuk memastikan bahwa fungsionalitas tersebut memenuhi persyaratan mereka.

Anda mungkin juga ingin menyelidiki pengujian kotak putih dan kotak hitam. Ada juga pengujian kinerja dan beban, dan pengujian "'utilitas" yang perlu dipertimbangkan.

mikey
sumber
FYI, dalam Unit testing , unit yang diuji bisa dalam berbagai ukuran. Anda dapat, misalnya, menguji unit sekelompok kelas, satu metode, atau bahkan sebagai metode tunggal. Sumber: Bab BlueJ 9.3 "Pengujian unit dalam BlueJ".
Sebastian Nielsen
114

Uji unit: ketika gagal, ini memberi tahu Anda bagian mana dari kode Anda yang perlu diperbaiki.

Uji integrasi: ketika gagal, ia memberi tahu Anda bahwa bagian-bagian aplikasi Anda tidak bekerja sama seperti yang diharapkan.

Uji penerimaan: ketika gagal, ini memberi tahu Anda bahwa aplikasi tidak melakukan apa yang diharapkan pelanggan.

Uji regresi: ketika gagal, ini memberi tahu Anda bahwa aplikasi tidak lagi berperilaku seperti dulu.

Mathias
sumber
19

Berikut penjelasan sederhana untuk masing-masing tes yang disebutkan dan kapan tes tersebut dapat diterapkan:

Uji Unit unit dilakukan pada unit mandiri (biasanya kelas atau metode) dan harus dilakukan setiap kali unit telah diimplementasikan atau pemutakhiran unit telah selesai.

Ini berarti itu berjalan setiap kali Anda menulis kelas / metode, memperbaiki bug, mengubah fungsionalitas ...

Tes integrasi integrasi bertujuan untuk menguji seberapa baik beberapa unit berinteraksi satu sama lain. Jenis tes ini harus dilakukan Setiap kali bentuk komunikasi baru telah dibuat antara unit atau sifat interaksinya telah berubah.

Ini berarti dijalankan setiap kali unit yang baru ditulis diintegrasikan ke dalam sistem lainnya atau setiap kali unit yang berinteraksi dengan sistem lain telah diperbarui (dan berhasil menyelesaikan pengujian unitnya).

Uji Regresi Uji regresi dilakukan setiap kali ada yang berubah dalam sistem, untuk memeriksa bahwa tidak ada bug baru yang diperkenalkan.

Ini berarti dijalankan setelah semua tambalan, peningkatan, perbaikan bug. Pengujian regresi dapat dilihat sebagai kasus khusus dari uji unit gabungan dan uji integrasi.

Uji Penerimaan Uji penerimaan dilakukan jika relevan untuk memeriksa bahwa subsistem (mungkin seluruh sistem) memenuhi seluruh spesifikasinya.

Ini berarti ini terutama dijalankan sebelum menyelesaikan pengiriman baru atau mengumumkan penyelesaian tugas yang lebih besar. Lihat ini sebagai pemeriksaan terakhir Anda untuk melihat bahwa Anda telah benar-benar menyelesaikan tujuan Anda sebelum berlari ke klien / bos dan mengumumkan kemenangan.

Setidaknya begitulah cara saya belajar, meski saya yakin ada pandangan lain yang berlawanan. Either way, saya harap itu membantu.

Agentlien
sumber
Saya tidak bisa membedakan antara pengujian regresi dan pengujian unit. Maksud saya, setelah setiap perubahan / komit, Anda masih menjalankan pengujian unit Anda ... dan mereka dapat menangkap kesalahan yang diperkenalkan oleh kode baru. Baik?
Madu
@Honey Well, sebagian besar rangkaian pengujian regresi adalah pilihan dari beberapa atau semua pengujian unit dan integrasi Anda. Ini adalah hal kebijakan, seberapa banyak pengujian regresi yang ingin Anda lakukan. Perbedaan utamanya adalah Pengujian unit dilakukan dalam pengembangan aktif sementara pengujian regresi lebih merupakan sesuatu yang Anda gunakan untuk memeriksa bahwa project sebelumnya tidak rusak saat Anda kembali dan menambalnya.
Agentlien
AFAIK Anda sebenarnya tidak harus metode unit-test. Jika Anda menguji kelas, Anda harus memperlakukannya sebagai keseluruhan, jadi Anda menguji antarmuka publik kelas, bukan detail implementasinya. Meskipun Anda dapat menguji unit fungsi mandiri, itu bagus.
Qback
14

Saya akan mencoba:

  1. Uji unit: pengembang akan menulis satu untuk menguji komponen atau kelas individu.
  2. Tes integrasi: tes yang lebih ekstensif yang akan melibatkan beberapa komponen atau paket yang perlu berkolaborasi
  3. Tes regresi: Membuat satu perubahan pada aplikasi memaksa Anda untuk menjalankan kembali SEMUA tes dan memeriksa SEMUA fungsinya.
  4. Uji penerimaan: Pengguna akhir atau UM melakukan ini sebelum keluar untuk menerima pengiriman aplikasi. Tercantum "Aplikasi memenuhi persyaratan saya."
duffymo
sumber
14

Uji Unit: apakah metode tunggal saya berfungsi dengan benar? (TIDAK ADA dependensi, atau dependensi yang diolok-olok)

Uji Integrasi: apakah dua modul saya yang dikembangkan secara terpisah berfungsi dengan baik saat disatukan?

Uji Regresi: Apakah saya merusak sesuatu dengan mengubah / menulis kode baru? (menjalankan pengujian unit / integrasi dengan setiap komit secara teknis (otomatis) pengujian regresi). Lebih sering digunakan dalam konteks QA - manual atau otomatis.

Acceptance Test : pengujian dilakukan oleh klien, bahwa dia "menerima" SW yang dikirimkan

Andrejs
sumber
0

Tidak bisa berkomentar (reputasi rendah: - |) jadi ...

@Andrejs menjelaskan perbedaan antara lingkungan yang terkait dengan setiap jenis pengujian.

Pengujian unit biasanya dijalankan pada mesin developer (dan mungkin selama build CI) dengan dependensi tiruan ke resource / sistem lain.

Tes integrasi menurut definisi harus memiliki (beberapa derajat) ketersediaan ketergantungan; sumber daya dan sistem lain dipanggil sehingga lingkungan lebih representatif. Data untuk pengujian dapat diolok-olok atau sebagian kecil dari data produksi nyata yang dikaburkan.

Pengujian UAT / Penerimaan harus mewakili pengalaman dunia nyata kepada QA dan tim bisnis yang menerima perangkat lunak. Jadi membutuhkan integrasi penuh dan volume data yang realistis serta kumpulan data yang disamarkan / dikaburkan untuk memberikan kinerja yang realistis dan pengalaman pengguna akhir.

"Fasilitas" lain juga mungkin membutuhkan lingkungan sedekat mungkin dengan kenyataan untuk mensimulasikan pengalaman produksi misalnya pengujian kinerja, keamanan, ...

mhaselup
sumber