Apa perbedaan antara tes unit dan tes fungsional? Bisakah tes unit juga menguji fungsi?
Apa perbedaan antara tes unit dan tes fungsional? Bisakah tes unit juga menguji fungsi?
Jawaban:
Uji Unit - menguji unit individual, seperti metode (fungsi) di kelas, dengan semua dependensi diejek.
Uji Fungsional - Tes Integrasi AKA, menguji sepotong fungsionalitas dalam suatu sistem. Ini akan menguji banyak metode dan dapat berinteraksi dengan dependensi seperti Database atau Layanan Web.
Tes unit memberi tahu pengembang bahwa kode melakukan sesuatu dengan benar; tes fungsional memberi tahu pengembang bahwa kode melakukan hal yang benar .
Anda dapat membaca lebih lanjut di Pengujian Unit versus Pengujian Fungsional
Analogi kehidupan nyata yang dijelaskan dengan baik tentang pengujian unit dan pengujian fungsional dapat dijelaskan sebagai berikut,
Berkali-kali pengembangan suatu sistem disamakan dengan pembangunan rumah. Meskipun analogi ini tidak sepenuhnya benar, kita dapat mengembangkannya untuk tujuan memahami perbedaan antara tes unit dan fungsional.
Pengujian unit dianalogikan dengan inspektur bangunan yang mengunjungi lokasi konstruksi rumah. Ia fokus pada berbagai sistem internal rumah, fondasi, framing, listrik, pipa ledeng, dan sebagainya. Dia memastikan (tes) bahwa bagian-bagian rumah akan bekerja dengan benar dan aman, yaitu, memenuhi kode bangunan.
Tes fungsional dalam skenario ini analog dengan pemilik rumah yang mengunjungi situs konstruksi yang sama ini. Dia berasumsi bahwa sistem internal akan berperilaku tepat, bahwa inspektur bangunan sedang melakukan tugasnya. Pemilik rumah berfokus pada bagaimana rasanya tinggal di rumah ini. Dia prihatin dengan bagaimana rumah terlihat, apakah berbagai kamar ukuran yang nyaman, apakah rumah sesuai dengan kebutuhan keluarga, adalah jendela di tempat yang bagus untuk menangkap matahari pagi.
Pemilik rumah sedang melakukan tes fungsional di rumah. Ia memiliki perspektif pengguna.
Inspektur bangunan sedang melakukan tes unit di rumah. Dia memiliki perspektif pembangun.
Sebagai ringkasan,
Tes Unit ditulis dari perspektif pemrogram . Mereka dibuat untuk memastikan bahwa metode tertentu (atau unit ) dari kelas melakukan serangkaian tugas tertentu.
Tes Fungsional ditulis dari sudut pandang pengguna . Mereka memastikan bahwa sistem berfungsi seperti yang diharapkan pengguna.
Tes unit menguji unit perilaku independen . Apa itu unit perilaku? Ini adalah bagian terkecil dari sistem yang dapat diuji secara independen. (Definisi ini sebenarnya melingkar, TKI itu benar-benar bukan definisi sama sekali , tetapi tampaknya berfungsi cukup baik dalam praktiknya, karena Anda dapat memahaminya secara intuitif.)
Tes fungsional menguji fungsi independen.
Satu unit perilaku sangat kecil: sementara saya benar-benar tidak menyukai mantra "satu unit uji per metode" bodoh ini, dari sudut pandang ukuran itu hampir benar. Unit perilaku adalah sesuatu antara bagian dari suatu metode dan mungkin beberapa metode. Paling banyak objek, tetapi tidak lebih dari satu.
Sepotong fungsi biasanya terdiri dari banyak metode dan memotong beberapa objek dan seringkali melalui beberapa lapisan arsitektur.
Tes unit akan menjadi sesuatu seperti: ketika saya memanggil validate_country_code()
fungsi dan memberikannya kode negara 'ZZ'
itu harus kembali false
.
Tes fungsional adalah: ketika saya mengisi formulir pengiriman dengan kode negara ZZ
, saya harus diarahkan ke halaman bantuan yang memungkinkan saya untuk mengambil kode negara saya dari menu.
Tes unit ditulis oleh pengembang, untuk pengembang, dari perspektif pengembang.
Tes fungsional mungkin menghadap pengguna, dalam hal ini ditulis oleh pengembang bersama dengan pengguna (atau mungkin dengan alat yang tepat dan pengguna yang tepat bahkan oleh pengguna itu sendiri), untuk pengguna, dari perspektif pengguna. Atau mereka mungkin menghadap pengembang (misalnya ketika mereka menggambarkan beberapa fungsi internal yang tidak dipedulikan oleh pengguna), dalam hal ini ditulis oleh pengembang, untuk pengembang, tetapi masih dari perspektif pengguna.
Dalam kasus sebelumnya, tes fungsional juga dapat berfungsi sebagai tes penerimaan dan sebagai pengkodean persyaratan fungsional yang dapat dieksekusi atau spesifikasi fungsional, dalam kasus terakhir, tes tersebut juga dapat berfungsi sebagai tes integrasi.
Tes unit sering berubah, tes fungsional tidak boleh berubah dalam rilis utama.
TLDR:
Untuk menjawab pertanyaan: Unit Testing adalah subtipe dari Pengujian Fungsional.
Ada dua kelompok besar: Pengujian Fungsional dan Non-Fungsional . Ilustrasi (tidak lengkap) terbaik yang saya temukan adalah yang ini (sumber: www.inflectra.com ):
(1) Unit Testing: pengujian potongan kode kecil (fungsi / metode). Ini dapat dianggap sebagai pengujian fungsional (kotak putih).
Ketika fungsi disatukan, Anda membuat modul = bagian mandiri, mungkin dengan Antarmuka Pengguna yang dapat diuji (Modul Pengujian). Setelah Anda memiliki setidaknya dua modul terpisah, maka Anda merekatkannya dan kemudian datang:
(2) Pengujian Integrasi: ketika Anda menempatkan dua atau lebih potongan (sub) modul atau (sub) sistem bersama-sama dan melihat apakah mereka bermain bersama dengan baik.
Kemudian Anda mengintegrasikan modul ke-3, lalu ke-4 dan ke-5 dalam urutan apa pun yang Anda atau tim Anda inginkan, dan begitu semua potongan gambar ditempatkan bersama, datang
(3) Pengujian Sistem: menguji SW secara keseluruhan. Ini cukup banyak "pengujian Integrasi semua bagian".
Jika tidak apa-apa, maka datanglah
(4) Pengujian Penerimaan: apakah kita membangun apa yang sebenarnya diminta pelanggan? Tentu saja, Pengujian Penerimaan harus dilakukan sepanjang siklus hidup , tidak hanya pada tahap terakhir, di mana Anda menyadari bahwa pelanggan menginginkan mobil sport dan Anda membangun sebuah van.
Functional Test
bukan istilah standar dan memiliki arti berbeda untuk orang yang berbeda.
"Tes fungsional" tidak berarti Anda menguji fungsi (metode) dalam kode Anda. Itu berarti, secara umum, bahwa Anda menguji fungsionalitas sistem - ketika saya menjalankan foo file.txt
di baris perintah, garis-garis di file.txt
menjadi terbalik, mungkin. Sebaliknya, tes unit tunggal umumnya mencakup satu kasus metode tunggal - length("hello")
harus mengembalikan 5, dan length("hi")
harus mengembalikan 2.
Lihat juga garis IBM antara pengujian unit dan pengujian fungsional .
Perbedaan mendasarnya adalah uji fungsional menguji aplikasi dari luar, dari sudut pandang pengguna. Tes unit menguji aplikasi dari dalam, dari sudut pandang programmer. Tes fungsional harus membantu Anda membangun aplikasi dengan fungsionalitas yang tepat, dan menjamin Anda tidak pernah secara tidak sengaja memecahkannya. Tes unit akan membantu Anda menulis kode yang bersih dan bebas bug.
Diambil dari buku "Python TDD" karya Harry Percival
Menurut ISTQB keduanya tidak sebanding. Pengujian fungsional bukan pengujian integrasi.
Unit test adalah salah satu level tes dan pengujian fungsional adalah tipe pengujian.
Pada dasarnya:
Fungsi suatu sistem (atau komponen) adalah 'apa yang dilakukannya'. Ini biasanya dijelaskan dalam spesifikasi persyaratan, spesifikasi fungsional, atau dalam kasus penggunaan.
sementara
Pengujian komponen, juga dikenal sebagai pengujian unit, modul dan program, mencari cacat pada, dan memverifikasi fungsi perangkat lunak (misalnya modul, program, objek, kelas, dll.) Yang dapat diuji secara terpisah.
Menurut tes komponen / unit ISTQB dapat fungsional atau tidak-fungsional:
Pengujian komponen dapat mencakup pengujian fungsionalitas dan karakteristik non-fungsional spesifik seperti perilaku sumber daya (misalnya kebocoran memori), pengujian kinerja atau ketahanan, serta pengujian struktural (misalnya cakupan keputusan).
Kutipan dari Yayasan pengujian perangkat lunak - sertifikasi ISTQB
Di Rails, folder unit dimaksudkan untuk mengadakan tes untuk model Anda, folder fungsional dimaksudkan untuk mengadakan tes untuk pengendali Anda, dan folder integrasi dimaksudkan untuk mengadakan tes yang melibatkan sejumlah pengendali yang berinteraksi. Perlengkapan adalah cara mengatur data uji; mereka berada di folder perlengkapan. File test_helper.rb menyimpan konfigurasi default untuk pengujian Anda. u bisa mengunjungi ini .
Cara saya memikirkannya adalah seperti ini: Tes unit menetapkan bahwa kode melakukan apa yang Anda inginkan kode (misalnya Anda ingin menambahkan parameter a dan b, Anda sebenarnya menambahkannya, dan tidak mengurangi mereka), tes fungsional menguji bahwa semua kode bekerja bersama untuk mendapatkan hasil yang benar, sehingga apa yang Anda maksudkan kode sebenarnya mendapatkan hasil yang tepat dalam sistem.
AFAIK, pengujian unit BUKAN pengujian fungsional. Izinkan saya menjelaskan dengan contoh kecil. Anda ingin menguji apakah fungsi masuk aplikasi web email berfungsi atau tidak, sama seperti yang dilakukan pengguna. Untuk itu, tes fungsional Anda harus seperti ini.
1- existing email, wrong password -> login page should show error "wrong password"!
2- non-existing email, any password -> login page should show error "no such email".
3- existing email, right password -> user should be taken to his inbox page.
4- no @symbol in email, right password -> login page should say "errors in form, please fix them!"
Haruskah pengujian fungsional kami memeriksa apakah kami dapat masuk dengan input yang tidak valid? Misalnya. Email tidak memiliki simbol @, nama pengguna memiliki lebih dari satu titik (hanya satu titik yang diizinkan), .com muncul sebelum @ dll? Secara umum, tidak! Pengujian semacam itu masuk ke unit test Anda.
Anda dapat memeriksa apakah input yang tidak valid ditolak di dalam unit test seperti yang ditunjukkan pada tes di bawah ini.
class LoginInputsValidator
method validate_inputs_values(email, password)
1-If email is not like string.string@myapp.com, then throw error.
2-If email contains abusive words, then throw error.
3-If password is less than 10 chars, throw error.
Perhatikan bahwa uji fungsional 4 sebenarnya melakukan apa yang dilakukan uji unit 1. Terkadang, tes fungsional dapat mengulangi beberapa (tidak semua) pengujian yang dilakukan oleh unit test, karena berbagai alasan. Dalam contoh kami, kami menggunakan uji fungsional 4 untuk memeriksa apakah pesan kesalahan tertentu muncul saat memasukkan input yang tidak valid. Kami tidak ingin menguji apakah semua input buruk ditolak atau tidak. Itu adalah tugas unit test.
PENGUJIAN UNIT
Pengujian unit mencakup pengujian unit kode terkecil yang biasanya merupakan fungsi atau metode. Pengujian unit sebagian besar dilakukan oleh pengembang unit / metode / fungsi, karena mereka memahami inti dari suatu fungsi. Tujuan utama pengembang adalah untuk menutupi kode dengan unit test.
Ini memiliki batasan bahwa beberapa fungsi tidak dapat diuji melalui unit test. Bahkan setelah berhasil menyelesaikan semua tes unit; itu tidak menjamin operasi produk yang benar. Fungsi yang sama dapat digunakan di beberapa bagian sistem sementara tes unit ditulis hanya untuk satu penggunaan.
PENGUJIAN FUNGSIONAL
Ini adalah jenis pengujian Kotak Hitam di mana pengujian akan dilakukan pada aspek fungsional suatu produk tanpa melihat ke dalam kode. Pengujian fungsional sebagian besar dilakukan oleh penguji Software khusus. Ini akan mencakup teknik positif, negatif dan BVA menggunakan data yang tidak terstandarisasi untuk menguji fungsionalitas produk yang ditentukan. Cakupan tes dilakukan dengan cara yang lebih baik dengan tes fungsional daripada dengan tes unit. Ini menggunakan aplikasi GUI untuk pengujian, jadi lebih mudah untuk menentukan apa tepatnya bagian spesifik dari antarmuka yang bertanggung jawab untuk menentukan apa kode fungsi bertanggung jawab.
dengan sangat sederhana kita dapat mengatakan:
baca lebih lanjut di sini .
Tes Unit : - Pengujian unit terutama digunakan untuk menguji komponen produk dengan komponen khusus saat produk sedang dalam pengembangan. Jenis alat Junit dan Nunit juga akan membantu Anda menguji produk sesuai Unit. ** Daripada menyelesaikan masalah setelah Integrasi, selalu nyaman untuk menyelesaikannya di awal pengembangan.
Pengujian Fungsional: - Adapun mengenai Pengujian ada dua jenis utama Pengujian sebagai 1. Tes Fungsional 2. Tes Non-Fungsional.
Tes Non-Fungsional adalah tes di mana Penguji akan menguji bahwa Produk akan melakukan semua atribut kualitas yang tidak disebutkan oleh pelanggan tetapi atribut kualitas tersebut harus ada di sana. Seperti: -Kinerja, Kegunaan, Keamanan, Beban, Stres dll. Tetapi dalam Tes Fungsional : - Pelanggan sudah hadir dengan persyaratannya dan yang telah didokumentasikan dengan baik, Tugas penguji adalah untuk memeriksa ulang apakah fungsi aplikasi berfungsi sesuai ke Sistem yang Diajukan atau tidak. Untuk tujuan itu, Penguji harus menguji fungsionalitas yang Diimplementasikan dengan Sistem yang diusulkan.
Pengujian unit biasanya dilakukan oleh pengembang. Tujuan melakukan hal yang sama adalah untuk memastikan kode mereka berfungsi dengan baik. Aturan umum adalah untuk mencakup semua jalur dalam kode menggunakan pengujian unit.
Pengujian Fungsional : Ini adalah referensi yang bagus. Penjelasan Pengujian Fungsional