Kotak hitam atau pengujian kotak putih - mana yang Anda lakukan pertama kali?
14
Pada tim yang sangat kecil, di mana pengujian kotak hitam dan kotak putih dilakukan oleh orang yang sama, yang mana yang harus dilakukan tester terlebih dahulu?
Saya pikir ini tergantung pada konteksnya. Apakah Anda selesai mengimplementasikan spesifikasi sebagian besar dan ingin memulai pengujian akhir Anda atau apakah Anda berbicara tentang kapan saja secara umum selama siklus pengembangan? Seperti disebutkan dalam jawaban, pelaksana Anda biasanya akan menulis unit test yang dapat dianggap sebagai bagian dari pengujian kotak whtie Anda karena pembuat kode ini memahami cara kerja bagian dalam dan ingin menegaskan fungsionalitas implementasi mereka sebelum melakukan.
Chris
Jawaban:
11
Apa pun pasti paling benar.
Serius, pengujian kotak putih (yaitu pengujian internal kode) idealnya harus dilakukan dengan tes unit oleh pengembang yang menulis kode. Tes unit akan dibangun dari waktu ke waktu, dan merupakan bagian dari proses pembangunan sehingga kami tidak membuang waktu penguji yang miskin dengan kode yang kami tahu tidak berfungsi sebagaimana mestinya. Pengujian unit menjadi lebih penting jika tim Anda lebih kecil - terutama karena Anda tidak memiliki pasukan penguji untuk menyelesaikan masalah.
Pengujian black-box (yaitu pengujian melalui antarmuka pengguna / sistem) biasanya dilakukan oleh sebagian besar penguji.
Semua pengujian perlu diprioritaskan pada seberapa kritis suatu fungsi untuk produk jadi. Jika misinya adalah menyediakan alat untuk melakukan X dan produk tidak melakukan X, itu masalah besar.
Kata baik, jawaban terbaik yang saya baca sejauh ini.
Chris
5
Hitam
Pengujian black-box untuk memverifikasi fitur. Pengujian kotak putih seperlunya jika ada yang rusak. Jika semua tes kotak hitam lulus dan cakupannya bagus, pengujian kotak putih tidak perlu.
Kecuali, tentu saja, pengujian kotak hitam tidak terjawab menguji fungsi kunci atau konfigurasi:}
Alan
3
@Lan: argumen yang sama berlaku untuk pengujian white-box, maka peringatan 'cakupan adalah baik'
Steven A. Lowe
1
Setuju - Saya kira pernyataan saya tergantung pada definisi Anda tentang cakupan yang baik.
Alan
1
@DocBrown Saya benar-benar tidak melihat bagaimana apa yang Anda jelaskan adalah sesuatu yang mirip seperti pengujian whitebox. Pengujian whitebox adalah tentang mengikuti jalur cabang dari implementasi yang diberikan, dan menulis kasus uji yang akan menjalankan semua jalur. Jika Anda belum memiliki implementasi, maka Anda tidak dapat per definisi membuat tes papan tulis. Dengan TDD dan BDD Anda menulis tes dari bentuk umum yang diberikan-kapan-kemudian. Anda mengatur data input atau keadaan prasyarat, memecat unit, dan melakukan pemeriksaan pada data output, atau mengakhiri panggilan negara atau pihak ketiga. Ini adalah definisi dari pengujian blackbox.
Sammi
1
@ SamJudge: menurut pemahaman saya, ketika Anda melihat ke dalam kode implementasi dan menggunakan informasi itu untuk merancang data uji yang sangat spesifik (yang kemudian dilewatkan melalui antarmuka publik), maka dibenarkan untuk menyebut pengujian kotak putih ini. Tes semacam itu juga gagal jika hasilnya tidak seperti yang diharapkan. Jika nanti Anda hanya melihat tes, Anda mungkin tidak dapat mengatakan dengan jelas "tes ini diproduksi oleh pendekatan kotak putih (atau kotak hitam)", tentu saja.
Doc Brown
3
Kotak hitam.
Komponen kotak putih biasanya tergantung pada komponen kotak hitam, jadi saya ingin menguji kotak hitam terlebih dahulu dan kemudian beralih ke kotak putih.
Saya tidak yakin apa yang Anda maksud dengan "komponen kotak hitam" dan "komponen kotak putih" - bagi saya mereka hanya "komponen" (yang dapat diuji dengan atau tanpa pengetahuan tentang kode atau arsitektur yang mendasarinya.
Alan
Saya tidak mengerti hubungan "tergantung" yang Anda sarankan di sini. Kotak hitam putih dan hitam bukan komponen, lebih merupakan gaya pengujian komponen apa pun seperti yang disebutkan Alan. Perbedaannya terletak pada pendekatan yang diambil untuk menguji komponen yang dimaksud.
Chris
2
Anda pertama-tama melakukan pengujian pengujian putih sebagai pembuat kode / pengembang untuk memastikan semuanya berjalan dengan baik. Kemudian Anda melakukan pengujian kotak hitam yang biasanya mencoba berpikir seolah-olah Anda adalah pengguna akhir, tanpa memikirkan struktur internal program. Kadang-kadang Anda perlu berpikir seperti pembuat kode / pengembang bahkan jika Anda melakukan pengujian hitam karena Anda mungkin menguji modul internal yang ditulis oleh orang lain dan Anda tidak memiliki akses ke kode.
Jika Anda ingin memiliki siklus tes yang baik, Anda harus meminta orang yang berbeda untuk melakukan keduanya :
Seorang pengembang yang berfokus terutama pada pengujian white-box tahu apa yang telah berubah dalam kode baru-baru ini, area mana yang lebih kompleks (dan karenanya cenderung rusak), dll. Dan dapat memfokuskan upaya dengan tepat di area ini yang kemungkinan besar akan menyebabkan cacat baru.
Di sisi lain, tester QA yang berfokus pada pengujian kotak hitam dapat lebih mudah mendekati pengujian seperti pengguna akhir. Tanpa pengetahuan internal tentang kode, mereka dapat mengambil pendekatan baru dan tidak bias oleh pengetahuan tentang bagaimana berbagai bagian dari solusi diimplementasikan. Mereka akan menangkap bug yang mungkin diabaikan oleh pengembang, atau regresi dari perubahan kode yang secara tidak sengaja merusak area aplikasi lainnya.
Untuk menjawab pertanyaan Anda, pengujian kotak putih harus dilakukan terlebih dahulu. Tetapi Anda benar-benar perlu memiliki orang yang berbeda melakukan pengujian kotak hitam jika Anda ingin menjadi efektif.
Saya suka memulai dengan pengujian kotak hitam, kemudian menggunakan informasi cakupan kode atau debugger untuk mencari tahu apa yang saya lakukan dan menganalisis apa yang terjadi.
Tetapi jawaban sebenarnya adalah itu tergantung . Saya cenderung menyelami kode lebih cepat (bahkan lebih dulu) jika saya melakukan pengujian API, tetapi jauh kemudian jika tujuan saya adalah untuk melihat beberapa skenario ujung ke ujung yang besar.
-1, TDD adalah pengujian kotak putih. Dalam TDD, penting untuk mengetahui kode apa yang terlibat dalam tes (dan apa yang tidak) untuk menulis tes berikutnya. Pengujian kotak hitam berarti bahwa seseorang yang tidak tahu kode (seorang tester, seseorang yang bahkan tidak perlu tahu cara kode), merancang tes.
Doc Brown
1
Maka kita tidak berlatih TDD dengan cara yang sama. TDD bagi saya adalah tentang menegakkan spesifikasi kelas / fungsi: tes ditulis untuk memeriksa bahwa kelas / fungsi berperilaku seperti yang ditentukan, tetapi tidak peduli bagaimana kode berperilaku di belakang layar selama spesifikasi tersebut ditegakkan ... yang diperlukan mengingat bahwa tes ditulis sebelum fungsi.
Matthieu M.
1
Pengujian kotak hitam, karena Anda menulis tes sebelum kode ada. Penguji perlu mengembangkan tes otomatis yang memakan waktu secara paralel dengan kode penulisan pengembang agar efisien pada tim kecil.
Jika kode sudah ditulis, saya sarankan Anda meluangkan waktu membuat sketsa cakupan tes dari sudut pandang kotak hitam untuk memastikan Anda mendapatkan waktu brainstorming sebelum Anda mengacaukan otak Anda dengan kode yang sebenarnya. Namun, Anda kemudian dapat beralih ke kotak putih dan melihat kode sebelum Anda terlalu jauh dengan pengujian yang sebenarnya untuk merasakan area berisiko dan untuk memprioritaskan tes yang Anda brainstorming sebelumnya (dan menambah mereka dengan tes baru dipikirkan oleh melihat bagian dari kode yang tampak rumit atau dipertanyakan).
Tidak juga. Saya mencoba untuk menulis tes yang baik menggunakan BICEP Kanan saya , dengan mengingat kondisi batas yang BENAR terlepas dari urutan apa yang mereka pikirkan. Keduanya adalah akronim yang diusulkan dalam Pengujian Unit Pragmatis .
Tujuan saya adalah fokus pada penulisan tes yang bagus, dan bukan warna mana yang harus ditulis terlebih dahulu.
'Putih' dan 'hitam' bukan istilah pengujian unit, jadi tentu saja Anda tidak mengkhawatirkannya. Tes unit adalah kotak putih de facto.
Ethel Evans
@Ethel Evans: Itu bukan tes kotak putih menurut definisi. Sebagian besar tes unit adalah tes kotak putih, tetapi itu bukan keharusan. Setiap tes yang memetakan domain input ke berbagai output fungsi adalah tes unit, tetapi tidak perlu mengetahui detail implementasi.
Steven Evers
0
Pertama lakukan pengujian kotak putih .
Go kedua untuk pengujian kotak hitam.
> Pengujian Kotak Hitam
I. Penguji harus memeriksa fungsionalitas aplikasi, seperti kotak Teks, tombol Radio, kotak daftar, tombol Perintah, ... dll. ,,
II Penguji harus memeriksa non fungsional aplikasi, seperti logo, Gambar, ejaan, dll. ,,
AKU AKU AKU. Penguji harus memeriksa seluruh aliran aplikasi.
Catatan: Untuk memeriksa kondisi Positif dan Negatif.
Jawaban:
Apa pun pasti paling benar.
Serius, pengujian kotak putih (yaitu pengujian internal kode) idealnya harus dilakukan dengan tes unit oleh pengembang yang menulis kode. Tes unit akan dibangun dari waktu ke waktu, dan merupakan bagian dari proses pembangunan sehingga kami tidak membuang waktu penguji yang miskin dengan kode yang kami tahu tidak berfungsi sebagaimana mestinya. Pengujian unit menjadi lebih penting jika tim Anda lebih kecil - terutama karena Anda tidak memiliki pasukan penguji untuk menyelesaikan masalah.
Pengujian black-box (yaitu pengujian melalui antarmuka pengguna / sistem) biasanya dilakukan oleh sebagian besar penguji.
Semua pengujian perlu diprioritaskan pada seberapa kritis suatu fungsi untuk produk jadi. Jika misinya adalah menyediakan alat untuk melakukan X dan produk tidak melakukan X, itu masalah besar.
sumber
Hitam
Pengujian black-box untuk memverifikasi fitur. Pengujian kotak putih seperlunya jika ada yang rusak. Jika semua tes kotak hitam lulus dan cakupannya bagus, pengujian kotak putih tidak perlu.
sumber
Kotak hitam.
Komponen kotak putih biasanya tergantung pada komponen kotak hitam, jadi saya ingin menguji kotak hitam terlebih dahulu dan kemudian beralih ke kotak putih.
sumber
Anda pertama-tama melakukan pengujian pengujian putih sebagai pembuat kode / pengembang untuk memastikan semuanya berjalan dengan baik. Kemudian Anda melakukan pengujian kotak hitam yang biasanya mencoba berpikir seolah-olah Anda adalah pengguna akhir, tanpa memikirkan struktur internal program. Kadang-kadang Anda perlu berpikir seperti pembuat kode / pengembang bahkan jika Anda melakukan pengujian hitam karena Anda mungkin menguji modul internal yang ditulis oleh orang lain dan Anda tidak memiliki akses ke kode.
sumber
Jika Anda ingin memiliki siklus tes yang baik, Anda harus meminta orang yang berbeda untuk melakukan keduanya :
Seorang pengembang yang berfokus terutama pada pengujian white-box tahu apa yang telah berubah dalam kode baru-baru ini, area mana yang lebih kompleks (dan karenanya cenderung rusak), dll. Dan dapat memfokuskan upaya dengan tepat di area ini yang kemungkinan besar akan menyebabkan cacat baru.
Di sisi lain, tester QA yang berfokus pada pengujian kotak hitam dapat lebih mudah mendekati pengujian seperti pengguna akhir. Tanpa pengetahuan internal tentang kode, mereka dapat mengambil pendekatan baru dan tidak bias oleh pengetahuan tentang bagaimana berbagai bagian dari solusi diimplementasikan. Mereka akan menangkap bug yang mungkin diabaikan oleh pengembang, atau regresi dari perubahan kode yang secara tidak sengaja merusak area aplikasi lainnya.
Untuk menjawab pertanyaan Anda, pengujian kotak putih harus dilakukan terlebih dahulu. Tetapi Anda benar-benar perlu memiliki orang yang berbeda melakukan pengujian kotak hitam jika Anda ingin menjadi efektif.
sumber
Saya suka memulai dengan pengujian kotak hitam, kemudian menggunakan informasi cakupan kode atau debugger untuk mencari tahu apa yang saya lakukan dan menganalisis apa yang terjadi.
Tetapi jawaban sebenarnya adalah itu tergantung . Saya cenderung menyelami kode lebih cepat (bahkan lebih dulu) jika saya melakukan pengujian API, tetapi jauh kemudian jika tujuan saya adalah untuk melihat beberapa skenario ujung ke ujung yang besar.
sumber
Saya akan mengatakan pengujian Black Box terlebih dahulu, hanya karena sebagai pendukung TDD, tes ditulis sebelum kode (atau kotak) ada :)
Pengujian White Box (sejauh yang saya mengerti) lebih berguna dalam pola pikir debugging.
sumber
Pengujian kotak hitam, karena Anda menulis tes sebelum kode ada. Penguji perlu mengembangkan tes otomatis yang memakan waktu secara paralel dengan kode penulisan pengembang agar efisien pada tim kecil.
Jika kode sudah ditulis, saya sarankan Anda meluangkan waktu membuat sketsa cakupan tes dari sudut pandang kotak hitam untuk memastikan Anda mendapatkan waktu brainstorming sebelum Anda mengacaukan otak Anda dengan kode yang sebenarnya. Namun, Anda kemudian dapat beralih ke kotak putih dan melihat kode sebelum Anda terlalu jauh dengan pengujian yang sebenarnya untuk merasakan area berisiko dan untuk memprioritaskan tes yang Anda brainstorming sebelumnya (dan menambah mereka dengan tes baru dipikirkan oleh melihat bagian dari kode yang tampak rumit atau dipertanyakan).
sumber
Tidak juga. Saya mencoba untuk menulis tes yang baik menggunakan BICEP Kanan saya , dengan mengingat kondisi batas yang BENAR terlepas dari urutan apa yang mereka pikirkan. Keduanya adalah akronim yang diusulkan dalam Pengujian Unit Pragmatis .
Tujuan saya adalah fokus pada penulisan tes yang bagus, dan bukan warna mana yang harus ditulis terlebih dahulu.
sumber
Pertama lakukan pengujian kotak putih .
Go kedua untuk pengujian kotak hitam.
> Pengujian Kotak Hitam
I. Penguji harus memeriksa fungsionalitas aplikasi, seperti kotak Teks, tombol Radio, kotak daftar, tombol Perintah, ... dll. ,,
II Penguji harus memeriksa non fungsional aplikasi, seperti logo, Gambar, ejaan, dll. ,,
AKU AKU AKU. Penguji harus memeriksa seluruh aliran aplikasi.
Catatan: Untuk memeriksa kondisi Positif dan Negatif.
sumber