Pengujian kotak hitam dan pengujian kotak putih menawarkan dua cara pengujian perangkat lunak yang berbeda. Sementara yang satu tidak secara inheren “lebih baik” dari yang lain, kedua bentuk memiliki pro dan kontra khusus untuk ditimbang terhadap kebutuhan penguji. Kedua bentuk ini tidak eksklusif satu sama lain dan “pengujian kotak abu-abu” mengadopsi karakteristik keduanya.
Pengujian kualitas kotak hitam memeriksa perangkat lunak murni untuk hasil dengan cara yang tidak memerlukan pengetahuan pemrograman atau pemahaman tentang kode perangkat lunak. Dalam bentuk pengujian berbasis hasil ini, penguji hanya mengetahui bahwa input tertentu harus menghasilkan output yang sesuai; penguji tidak memiliki pemahaman tentang bagaimana perangkat lunak benar-benar menciptakan keluaran. Beberapa metode pengujian tipikal meliputi tabel transisi keadaan, analisis nilai batas, dan tebakan kesalahan.
Kekuatan dan kelemahan pengujian kotak hitam bergantung pada kesederhanaan pengujian berbasis hasil dan kurangnya pengetahuan teknis yang diperlukan. Singkatnya, ini lebih mudah diterapkan, tetapi kesederhanaan itu membatasi ruang lingkup pengujian. Sebagian besar program memiliki ribuan, jika tidak jutaan masukan, sehingga praktis tidak mungkin untuk menguji setiap masukan/keluaran. Karena pengetahuan khusus tidak diperlukan, lebih mudah dan lebih murah untuk membangun tim pengujian. Meski begitu, perubahan reguler pada perangkat lunak cenderung merusak pengujian ini karena ketergantungannya pada antarmuka yang stabil, berpotensi memperpanjang pengujian dan menaikkan biaya. Terakhir, pengujian kualitas black-box memiliki potensi objektivitas yang lebih tinggi karena semua pengujian dilakukan dari sudut pandang pengguna; perancang biasanya bukan bagian dari proses.
Tes kotak putih perangkat lunak memeriksa cara kerja bagian dalam dari apa pun yang sedang diuji. Ini membutuhkan pengetahuan mendalam tentang kode perangkat lunak serta keterampilan pemrograman yang diperlukan untuk memperbaiki kesalahan. Beberapa contoh pengujian kotak putih meliputi pengujian mutasi, cakupan kode, dan injeksi kesalahan.
Pengujian kualitas kotak putih jauh lebih efisien daripada pengujian kotak hitam saat men-debug kode pemrograman. Penguji kotak putih akan menemukan bug lebih cepat karena pengetahuan mereka tentang perangkat lunak, tetapi keahlian dan pelatihan ini meningkatkan biaya. Dimungkinkan untuk membiayai biaya ini dengan pengujian otomatis pada area terisolasi dari kode pemrograman. Pengujian kotak putih juga berjuang untuk menguji perilaku tak terduga dari pengguna umum. Itu hanya dapat menguji input yang diantisipasi; ini biasanya tidak termasuk ide-ide eksperimental atau salah dari orang kebanyakan.
Dengan tim besar, pengujian menyeluruh terhadap perangkat lunak apa pun biasanya menggabungkan kedua jenis tersebut; ini disebut pengujian kotak abu-abu atau berlapis. Pengujian kualitas kotak abu-abu sering kali melibatkan grup kotak hitam yang mengirimkan laporan bug ke tim kotak putih, atau grup kotak putih yang memvalidasi perbaikan bug melalui input penguji lainnya.
Pertanyaan apakah akan menggunakan pengujian kotak hitam, kotak putih, atau kotak abu-abu hanya dapat dijawab jika pengembang mempertimbangkan kebutuhan, anggaran, dan kompleksitas perangkat lunak mereka. Meski begitu, hampir semua pengembangan perangkat lunak kontemporer menggunakan pengujian kualitas kotak abu-abu sebagai bagian alami dari proses rilis alfa dan beta.