RPL BAB 8 (Pengujian)



Nama         : Santi
Npm           :43a87007150347
Kelas          : S1/SI/3B/P

BAB 8
Pengujian
Dalam proyek pengembangan perangkat lunak, kesalahan dapat diperkenalkan pada setiap tahap selama pengembangan.  Meskipun kesalahan yang terdeteksi setelah setiap tahap dengan teknik seperti inspeksi, beberapa kesalahan tetap tidak terdeteksi.  Pada akhirnya, ini yang tersisa kesalahan tercermin dalam kode. Oleh karena itu, kode akhir mungkin memiliki beberapa persyaratan kesalahan dan kesalahan desain, selain untuk kesalahan yang diperkenalkan selama coding aktivitas. Untuk memastikan kualitas perangkat lunak yang dikirimkan akhir, cacat ini harus dihapus. Ada dua jenis pendekatan untuk mengidentifikasi cacat pada software- statis dan dinamis. Dalam analisis statis, kode ini tidak dijalankan tetapi dievaluasi
melalui beberapa proses atau beberapa alat untuk mencari cacat. inspeksi kode,
yang kita bahas dalam bab sebelumnya, adalah salah satu pendekatan statis. Lain
adalah analisis statis kode melalui penggunaan alat-alat. Dalam analisis dinamis, kode
adalah dieksekusi, dan eksekusi yang digunakan untuk menentukan cacat. Pengujian adalah
Teknik dinamis umum paling yang digunakan. Memang, pengujian adalah yang paling
umum digunakan teknik untuk mendeteksi cacat, dan melakukan sangat kritis
peran untuk memastikan kualitas.
Selama pengujian, perangkat lunak yang diuji (SUT) dijalankan dengan himpunan berhingga
kasus uji, dan perilaku sistem untuk uji kasus ini dievaluasi
untuk menentukan apakah sistem kinerja seperti yang diharapkan. Tujuan dasar dari
pengujian adalah untuk meningkatkan kepercayaan diri dalam fungsi SUT. Dan seperti pengujian
sangat mahal dan dapat mengkonsumsi jumlah yang tidak terbatas dari usaha, tambahan
Tujuan praktis adalah untuk mencapai kepercayaan yang diinginkan seefisien mungkin.
Jelas, efektivitas dan efisiensi pengujian sangat bergantung pada tes
kasus yang dipilih. Banyak dari bab ini karena dikhususkan untuk menguji seleksi kasus.
Dalam bab ini kita akan membahas:
- Konsep dasar dan definisi yang berkaitan dengan pengujian, seperti kesalahan, kesalahan, kegagalan,
kasus uji, test suite, memanfaatkan uji, dll
- Pengujian proses pengujian-bagaimana direncanakan dan bagaimana pengujian unit adalah
dilakukan.
- Temukan Uji kasus menggunakan pendekatan pengujian black-box.
- Temukan Uji kasus menggunakan pendekatan kotak putih.
- Beberapa metrik seperti cakupan dan kehandalan yang dapat digunakan selama pengujian.

8.1 Konsep Pengujian
Pada bagian ini kita akan mendefinisikan beberapa istilah yang umum digunakan
ketika membahas pengujian. Kemudian kita akan membahas beberapa masalah dasar yang berkaitan dengan bagaimana
pengujian dilakukan, dan pentingnya psikologi tester.

8.1.1 Kesalahan, Fault, dan Kegagalan
Ketika mendiskusikan pengujian yang biasa kita gunakan istilah-istilah seperti kesalahan, kesalahan, kegagalan dll Mari kita mulai dengan mendefinisikan konsep-konsep ini jelas [52].
Kesalahan istilah digunakan dalam dua cara yang berbeda. Hal ini mengacu pada perbedaan tersebut
antara dihitung, mengamati, atau diukur nilai dan benar, ditetapkan, atau
nilai teoritis yang benar. Artinya, kesalahan mengacu pada perbedaan antara
output aktual dari perangkat lunak dan output yang benar. Dalam interpretasi ini, kesalahan
pada dasarnya adalah ukuran perbedaan antara aktual dan ideal. Kesalahan
juga digunakan untuk merujuk pada tindakan manusia yang menghasilkan perangkat lunak yang
mengandung cacat atau kesalahan. Definisi ini cukup umum dan mencakup semua tahap.
Kesalahan adalah suatu kondisi yang menyebabkan sistem gagal dalam melakukan nya dibutuhkan
fungsi. Sebuah kesalahan adalah alasan dasar untuk kerusakan perangkat lunak dan praktis
identik dengan bug istilah yang umum digunakan, atau agak lebih umum
cacat jangka. Kesalahan Istilah ini juga sering digunakan untuk merujuk pada cacat (mengambil
variasi definisi kedua error). Dalam buku ini kita akan terus menggunakan
istilah dengan cara yang umum digunakan, dan tidak ada perbedaan yang jelas akan
dibuat antara kesalahan dan kesalahan, kecuali jika diperlukan.
Kegagalan adalah ketidakmampuan sistem atau komponen untuk melakukan dibutuhkan
fungsi sesuai dengan spesifikasinya. Sebuah kegagalan perangkat lunak terjadi jika perilaku dari software
ini berbeda dengan perilaku tertentu. Kegagalan mungkin disebabkan
oleh faktor fungsional atau kinerja. Perhatikan bahwa definisi tidak menyiratkan
bahwa kegagalan harus diperhatikan. Ada kemungkinan bahwa kegagalan mungkin terjadi tapi tidak
terdeteksi. Ada beberapa implikasi dari definisi tersebut. Kehadiran kesalahan (dalam
negara) menyiratkan bahwa kegagalan harus terjadi, dan ketaatan kegagalan
menyiratkan bahwa suatu kesalahan harus hadir dalam sistem. Namun, kehadiran
kesalahan tidak berarti bahwa kegagalan harus terjadi. Kehadiran kesalahan dalam
sistem hanya menyiratkan bahwa kesalahan memiliki potensi untuk menyebabkan kegagalan. Apakah
kesalahan sebenarnya memanifestasikan dirinya dalam durasi waktu tertentu tergantung pada
bagaimana software dijalankan.
Ada konsekuensi langsung dari ini pada pengujian. Jika selama pengujian kami tidak
mengamati kesalahan, kita tidak bisa mengatakan apa-apa tentang ada atau tidak adanya
kesalahan dalam sistem. Jika, di sisi lain, kita amati beberapa kegagalan, kita bisa
mengatakan bahwa ada beberapa kesalahan dalam sistem. Hubungan ini dari kesalahan dan
Kegagalan membuat tugas memilih kasus uji untuk pengujian yang sangat menantang-an
Tujuan saat memilih uji kasus adalah untuk memilih orang-orang yang akan mengungkapkan cacat,
jika ada. Idealnya kami ingin set kasus uji harus sedemikian rupa sehingga jika ada
setiap cacat dalam sistem, beberapa kasus uji di set akan mengungkapkannya-sesuatu
mustahil untuk mencapai dalam kebanyakan situasi.
Perlu dicatat bahwa selama proses pengujian, hanya kegagalan yang diamati,
dimana kehadiran kesalahan disimpulkan. Artinya, pengujian hanya mengungkapkan
kehadiran kesalahan. Kesalahan yang sebenarnya diidentifikasi oleh kegiatan terpisah,
sering disebut sebagai "debugging." Dengan kata lain, untuk mengidentifikasi kesalahan, setelah
pengujian telah mengungkapkan adanya kesalahan, tugas mahal debugging
telah akan dilakukan. Ini adalah salah satu alasan mengapa pengujian adalah mahal
metode untuk identifikasi kesalahan.

 8.1.2 Uji Kasus, Test Suite, dan Test Harness
Sejauh ini kita telah menggunakan kasus uji istilah atau mengatur kasus uji informal. Mari kita
mendefinisikan mereka lebih tepat. Sebuah test case (sering disebut tes) dapat dianggap
sebagai terdiri dari satu set input tes dan kondisi eksekusi, yang dirancang
untuk latihan SUT dengan cara tertentu [52]. Umumnya, kasus uji juga
menentukan hasil yang diharapkan dari pelaksanaan SUT di bawah yang ditentukan
kondisi pelaksanaan dan masukan uji. Sekelompok kasus uji terkait yang
umumnya dilaksanakan bersama-sama untuk menguji beberapa perilaku tertentu atau aspek dari SUT
sering disebut sebagai test suite. Perhatikan bahwa dalam kasus uji, masukan uji dan kondisi ekseku
si disebutkan terpisah. Uji input adalah nilai-nilai tertentu dari parameter atau input lain yang diberikan
kepada SUT baik oleh pengguna atau program lain. Eksekusi kondisi, di sisi lain, mencerminkan keadaan
dari sistem dan lingkungan yang juga berdampak pada perilaku SUT. Jadi, misalnya, saat uji coba
fungsi untuk menambahkan catatan dalam database jika tidak sudah ada,
perilaku fungsi akan tergantung baik pada nilai catatan masukan sebagai
serta keadaan database. Dan kasus uji perlu menentukan baik. Untuk
Misalnya, kasus uji untuk fungsi ini mungkin menentukan rekor r sebagai masukan, dan
mungkin menentukan bahwa negara database sedemikian rupa sehingga r sudah ada di dalamnya.
Pengujian dapat dilakukan secara manual dengan tester melaksanakan uji kasus di
test suite dan kemudian memeriksa apakah perilaku tersebut sebagaimana ditetapkan dalam kasus uji.
Ini adalah proses yang sangat rumit, terutama ketika test suite berisi besar jumlah kasus uji. Itu menjadi
lebih rumit karena test suite sering harus dijalankan setiap kali SUT berubah. Oleh karena itu, saat ini
tren adalah untuk mengotomatisasi pengujian.
Dengan pengujian otomatis, kasus uji biasanya panggilan fungsi (atau metode
doa), yang melakukan semua kegiatan uji kasus-set data uji
dan kondisi pengujian, memanggil SUT per kasus uji, membandingkan
Hasil kembali dengan hasil yang diharapkan, dan menyatakan untuk tester apakah
SUT gagal atau lulus ujian. Dengan kata lain, dengan pengujian otomatis,
mengeksekusi kasus uji dasarnya berarti melaksanakan fungsi ini. Sebuah test suite
maka akan menjadi set fungsi tersebut, masing-masing mewakili kasus uji. Untuk menguji
SUT dengan test suite, umumnya skrip tes otomatis akan ditulis
yang akan memanggil uji kasus dalam urutan yang diinginkan.
Untuk memiliki suite tes dieksekusi secara otomatis, kita akan membutuhkan sebuah kerangka di
yang input tes dapat didefinisikan, input didefinisikan dapat digunakan oleh fungsi
mewakili kasus uji, test script otomatis dapat ditulis, SUT
dapat dieksekusi oleh script ini, dan hasil dari seluruh pengujian dilaporkan kepada
penguji. Banyak kerangka pengujian sekarang ada yang izin semua ini harus dilakukan dalam
cara yang sederhana. Sebuah kerangka pengujian juga kadang-kadang disebut memanfaatkan tes.
Sebuah memanfaatkan uji atau kerangka tes membuat kehidupan tester sederhana dengan memberikan
cara mudah mendefinisikan test suite, dijalankan, dan pelaporan hasil.
Dengan kerangka tes, tes suite didefinisikan sekali, dan kemudian setiap kali diperlukan,
pengujian lengkap dapat dilakukan dengan klik tombol atau memberikan perintah.

8.1.3 Psikologi Pengujian
Seperti disebutkan, dalam pengujian, perangkat lunak yang diuji (SUT) dijalankan dengan
mengatur kasus uji. Seperti yang dibahas, merancang satu set kasus uji yang akan menjamin
bahwa semua kesalahan akan terdeteksi tidak layak. Selain itu, tidak ada yang formal
atau metode yang tepat untuk memilih uji kasus. Meskipun ada sejumlah heuristik dan aturan praktis
untuk memutuskan uji kasus, memilih kasus uji masih kegiatan kreatif yang mengandalkan kecerdikan
tester. Karena ini, psikologi orang yang melakukan pengujian menjadi penting.
Sebuah tujuan dasar pengujian adalah untuk mendeteksi kesalahan yang mungkin ada di
program. Oleh karena itu, seseorang tidak harus memulai pengujian dengan maksud menunjukkan
bahwa karya Program; bukan maksud harus menunjukkan bahwa program tidak
kerja; untuk mengungkapkan cacat yang mungkin ada. Karena ini, pengujian juga telah
didefinisikan sebagai proses eksekusi program dengan maksud menemukan kesalahan
[68].
Penekanan pada maksud yang tepat dari pengujian tidak masalah sepele karena
uji kasus dirancang oleh manusia, dan manusia memiliki kecenderungan
untuk melakukan tindakan untuk mencapai tujuan yang mereka miliki dalam pikiran. Jadi, jika tujuannya adalah
untuk menunjukkan bahwa program kerjanya, kita dapat secara sadar atau tidak sadar
pilih kasus uji yang akan mencoba untuk menunjukkan tujuan itu dan yang akan mengalahkan
tujuan dasar pengujian. Di sisi lain, jika tujuannya adalah untuk menunjukkan bahwa
program tidak bekerja, kami akan menantang akal kita untuk menemukan kasus uji
mencapai tujuan itu, dan kita cenderung untuk mendeteksi lebih banyak kesalahan. Pengujian pada dasarnya adalah
Proses destruktif, di mana tester harus memperlakukan program sebagai musuh
yang harus dikalahkan oleh tester dengan menunjukkan adanya kesalahan. Ini adalah
salah satu alasan mengapa banyak organisasi mempekerjakan pengujian independen yang
pengujian dilakukan oleh tim yang tidak terlibat dalam membangun sistem.

8.1.4 Tingkat Pengujian
Pengujian biasanya diandalkan untuk mendeteksi kesalahan yang tersisa dari tahap awal,
selain kesalahan diperkenalkan selama coding sendiri. Karena ini, berbeda
tingkat pengujian yang digunakan dalam proses pengujian; setiap tingkat pengujian bertujuan untuk
menguji aspek yang berbeda dari sistem.
Tingkat dasar unit testing, pengujian integrasi, pengujian sistem, dan
ujian penerimaan. Tingkat ini berbeda dari pengujian upaya untuk mendeteksi berbeda
jenis kesalahan. Hubungan antara kesalahan diperkenalkan dalam fase yang berbeda, dan
tingkat yang berbeda dari pengujian ditunjukkan pada Gambar 8.1.
Tingkat pertama pengujian disebut unit testing, yang kita bahas di
bab sebelumnya. Unit pengujian pada dasarnya untuk verifikasi kode yang dihasilkan
oleh programmer individu, dan biasanya dilakukan oleh programmer dari
modul. Umumnya, sebuah modul yang ditawarkan oleh programmer untuk integrasi dan
menggunakan oleh orang lain hanya setelah telah unit diuji memuaskan.
Tingkat berikutnya pengujian sering disebut pengujian integrasi. Dalam hal ini, banyak unit yang
modul diuji digabungkan menjadi subsistem, yang kemudian diuji. Hasil
di sini adalah untuk melihat apakah modul dapat diintegrasikan dengan benar. Oleh karena itu, penekanannya adalah
Gambar 8.1: Tingkat pengujian.
pada pengujian antarmuka antara modul. Kegiatan pengujian ini dapat dianggap
menguji desain.
Tingkat berikutnya adalah pengujian sistem dan pengujian penerimaan. Berikut seluruh yang
sistem perangkat lunak diuji. Dokumen acuan untuk proses ini adalah
dokumen persyaratan, dan tujuannya adalah untuk melihat apakah perangkat lunak memenuhi persyaratan.
Hal ini sering latihan besar, yang untuk proyek-proyek besar dapat berlangsung banyak
minggu atau bulan. Ini pada dasarnya adalah latihan validasi, dan dalam banyak situasi
itu adalah satu-satunya kegiatan validasi. pengujian penerimaan sering dilakukan
dengan data yang realistis dari klien untuk menunjukkan bahwa perangkat lunak tersebut bekerja
memuaskan. Hal itu dapat dilakukan dalam pengaturan di mana perangkat lunak adalah untuk akhirnya
fungsi. pengujian penerimaan dasarnya menguji apakah sistem memuaskan
memecahkan masalah bagi yang ditugaskan.
Tingkat ini pengujian dilakukan ketika sistem sedang dibangun dari
komponen yang telah dikodekan. Ada lagi tingkat pengujian, yang disebut
pengujian regresi, yang dilakukan ketika beberapa perubahan yang dibuat untuk yang sudah ada
sistem. Kita tahu bahwa perubahan yang mendasar untuk perangkat lunak; perangkat lunak apapun harus
mengalami perubahan. Namun, ketika modifikasi yang dibuat untuk sistem yang ada,
pengujian juga harus dilakukan untuk memastikan bahwa modifikasi belum punya
efek samping yang tidak diinginkan membuat beberapa layanan sebelumnya rusak. Itu adalah,
selain memastikan perilaku yang diinginkan dari layanan baru, pengujian harus memastikan
bahwa perilaku yang diinginkan dari layanan lama dipertahankan. Ini adalah tugas
pengujian regresi. sistem dipertahankan, bersama dengan output yang dihasilkan oleh sistem yang lama.
uji kasus ini dijalankan lagi pada sistem dimodifikasi dan outputnya
dibandingkan dengan output sebelumnya untuk memastikan bahwa sistem ini bekerja sebagai
sebelum di uji kasus ini. Hal ini sering merupakan tugas besar ketika modifikasi
yang dibuat untuk sistem yang ada.
pengujian regresi lengkap sistem yang besar dapat mengambil cukup banyak
waktu, bahkan jika otomatisasi digunakan. Jika perubahan kecil dibuat untuk sistem,
sering pertimbangan praktis mengharuskan seluruh test suite tidak dieksekusi,
tapi pengujian regresi dilakukan dengan hanya sebagian dari kasus uji. ini membutuhkan
sesuai memilih kasus uji dari suite yang dapat menguji bagian-bagian dari
sistem yang dapat dipengaruhi oleh perubahan. Tes seleksi kasus untuk regresi
pengujian adalah area penelitian aktif dan banyak pendekatan yang berbeda telah
diusulkan dalam literatur untuk ini. Kita tidak akan membahas lebih jauh lagi.

8.2 Proses Pengujian
Tujuan dasar dari proses pengembangan perangkat lunak adalah untuk menghasilkan perangkat lunak yang
tidak memiliki kesalahan atau sangat sedikit kesalahan. Pengujian adalah kegiatan pengendalian kualitas yang
berfokus pada identifikasi cacat (yang kemudian dihapus). Kita telah melihat bahwa
berbagai tingkat pengujian yang diperlukan untuk mendeteksi cacat disuntikkan selama
berbagai tugas dalam proyek. Dan pada tingkat kelipatan SUTs dapat diuji. Dan
untuk pengujian setiap SUT, uji kasus harus dirancang dan kemudian dieksekusi.
Secara keseluruhan, pengujian dalam proyek adalah tugas kompleks yang juga mengkonsumsi maksimal
upaya. Oleh karena itu, pengujian harus dilakukan dengan benar dalam suatu proyek. pengujian
Proses untuk sebuah proyek terdiri dari tiga perencanaan tugas-test, uji kasus tingkat tinggi
desain, dan pelaksanaan tes. Kami akan membahas ini dalam bagian ini.

 Rencana 8.2.1 Uji
Secara umum, dalam sebuah proyek, pengujian dimulai dengan rencana tes dan berakhir
dengan keberhasilan pelaksanaan pengujian penerimaan. Sebuah rencana uji adalah dokumen umum
untuk seluruh proyek yang mendefinisikan ruang lingkup, pendekatan yang akan diambil, dan
jadwal pengujian, serta mengidentifikasi item tes untuk pengujian dan
personil yang bertanggung jawab untuk kegiatan yang berbeda dari pengujian. Rencana pengujian
dapat dilakukan dengan baik sebelum pengujian yang sebenarnya dimulai dan dapat dilakukan secara paralel
dengan kegiatan coding dan desain. Input untuk membentuk tes
Rencana adalah: (1) rencana proyek, (2) dokumen persyaratan, dan (3) arsitektur atau dokumen desain. Rencana proyek diperlukan untuk memastikan bahwa rencana uji
konsisten dengan rencana mutu secara keseluruhan untuk proyek dan jadwal pengujian
cocok dengan rencana proyek. Persyaratan dokumen dan desain
dokumen adalah dokumen-dokumen dasar yang digunakan untuk memilih unit test dan memutuskan
pendekatan yang akan digunakan selama pengujian. Sebuah rencana uji harus memuat
berikut:

- Spesifikasi Unit Uji
- Fitur yang akan diuji
- Pendekatan untuk pengujian
- Kiriman Uji
- Jadwal dan tugas alokasi
Seperti yang terlihat sebelumnya, tingkat yang berbeda dari pengujian harus dilakukan dalam sebuah proyek.
Tingkat ditentukan dalam rencana uji dengan mengidentifikasi unit tes untuk
proyek. Sebuah unit tes adalah seperangkat satu atau lebih modul yang membentuk perangkat lunak di bawah
test (SUT). Identifikasi unit tes menetapkan berbagai tingkat
pengujian yang akan dilakukan dalam proyek. Umumnya, sejumlah unit uji
terbentuk selama pengujian, mulai dari modul-tingkat yang lebih rendah, yang memiliki
menjadi unit diuji. Artinya, pertama modul yang harus diuji secara individual
ditetapkan sebagai unit tes. Kemudian unit-tingkat yang lebih tinggi ditentukan, yang mungkin
menjadi kombinasi dari unit sudah diuji atau menggabungkan beberapa sudah diuji
unit dengan beberapa modul belum teruji. Ide dasar di balik unit tes pembentuk
memastikan bahwa pengujian yang dilakukan secara bertahap, dengan kenaikan masing-masing
termasuk hanya beberapa aspek yang perlu diuji.
Merupakan faktor penting saat membentuk unit adalah "testability" dari unit. SEBUAH
Unit harus sedemikian rupa sehingga dapat dengan mudah diuji. Dengan kata lain, itu harus
mungkin untuk membentuk bermakna kasus uji dan melaksanakan unit tanpa banyak usaha
dengan uji kasus ini. Misalnya, sebuah modul yang memanipulasi data yang kompleks
struktur yang terbentuk dari input file dengan modul masukan mungkin tidak cocok
Unit dari sudut pandang testability, sebagai pembentuk uji bermakna kasus untuk
unit akan sulit, dan sopir rutinitas akan harus ditulis untuk mengkonversi
masukan dari file atau terminal yang diberikan oleh tester ke struktur data
cocok untuk modul. Dalam hal ini, mungkin akan lebih baik untuk membentuk unit dengan
termasuk modul input juga. Kemudian masukan berkas yang diharapkan oleh input
Modul dapat berisi uji kasus.
Fitur yang akan diuji mencakup semua fitur perangkat lunak dan kombinasi fitur
yang harus diuji. Sebuah fitur perangkat lunak adalah karakteristik software tertentu
atau tersirat oleh persyaratan atau dokumen desain. Ini mungkin termasuk
fungsionalitas, kinerja, kendala desain, dan atribut.  Pendekatan untuk pengujian menentukan pendekatan keseluruhan yang harus diikuti dalam
proyek saat ini. Teknik-teknik yang akan digunakan untuk menilai upaya pengujian
juga harus ditentukan. Hal ini kadang-kadang disebut kriteria pengujian atau
kriteria untuk mengevaluasi set kasus uji yang digunakan dalam pengujian. Pada sebelumnya
bagian kita bahas banyak kriteria untuk mengevaluasi dan memilih uji kasus.
kiriman pengujian harus ditentukan dalam rencana uji sebelum yang sebenarnya
pengujian dimulai. Kiriman bisa menjadi daftar kasus uji yang digunakan, rinci
Hasil pengujian termasuk daftar cacat yang ditemukan, ringkasan laporan tes, dan
Data tentang cakupan kode.
Rencana uji biasanya juga menentukan jadwal dan upaya untuk dibelanjakan pada
kegiatan yang berbeda dari pengujian, dan alat-alat yang akan digunakan. Jadwal ini harus
konsisten dengan jadwal proyek secara keseluruhan. Rencana rinci mungkin daftar
semua tugas pengujian dan mengalokasikan mereka untuk menguji sumber daya yang bertanggung jawab
untuk melakukan mereka. Banyak produk besar memiliki tim pengujian terpisah dan
Oleh karena itu rencana tes terpisah. Sebuah proyek yang lebih kecil mungkin termasuk rencana tes sebagai
bagian dari rencana kualitas dalam rencana manajemen proyek.

Pendekatan untuk pengujian menentukan pendekatan keseluruhan yang harus diikuti dalam
proyek saat ini. Teknik-teknik yang akan digunakan untuk menilai upaya pengujian
juga harus ditentukan. Hal ini kadang-kadang disebut kriteria pengujian atau
kriteria untuk mengevaluasi set kasus uji yang digunakan dalam pengujian. Pada sebelumnya
bagian kita bahas banyak kriteria untuk mengevaluasi dan memilih uji kasus.
kiriman pengujian harus ditentukan dalam rencana uji sebelum yang sebenarnya
pengujian dimulai. Kiriman bisa menjadi daftar kasus uji yang digunakan, rinci
Hasil pengujian termasuk daftar cacat yang ditemukan, ringkasan laporan tes, dan
Data tentang cakupan kode.
Rencana uji biasanya juga menentukan jadwal dan upaya untuk dibelanjakan pada
kegiatan yang berbeda dari pengujian, dan alat-alat yang akan digunakan. Jadwal ini harus
konsisten dengan jadwal proyek secara keseluruhan. Rencana rinci mungkin daftar
semua tugas pengujian dan mengalokasikan mereka untuk menguji sumber daya yang bertanggung jawab
untuk melakukan mereka. Banyak produk besar memiliki tim pengujian terpisah dan
Oleh karena itu rencana tes terpisah. Sebuah proyek yang lebih kecil mungkin termasuk rencana tes sebagai
bagian dari rencana kualitas dalam rencana manajemen proyek.

8.2.2 Uji Desain Case
Rencana uji berfokus pada bagaimana pengujian untuk proyek tersebut akan dilanjutkan, yang
unit akan diuji, dan pendekatan apa (dan alat) yang akan digunakan selama
berbagai tahap pengujian. Namun, itu tidak berurusan dengan rincian pengujian
unit, juga tidak menentukan uji kasus yang akan digunakan.
desain kasus uji harus dilakukan secara terpisah untuk masing-masing unit. Berdasarkan
Pendekatan yang ditentukan dalam rencana uji, dan fitur yang akan diuji, kasus uji
dirancang dan ditetapkan untuk menguji unit. Uji kasus spesifikasi memberi,
untuk setiap unit yang akan diuji, semua kasus uji, masukan yang akan digunakan dalam kasus tes,
kondisi sedang diuji oleh ujian, dan hasil yang diharapkan untuk tes mereka
kasus. Jika uji kasus yang ditentukan dalam dokumen, spesifikasi terlihat seperti
tabel bentuk yang ditunjukkan pada Gambar 8.2.
putaran yang berbeda dari pengujian. Artinya, kadang-kadang dokumen spesifikasi kasus uji
juga digunakan untuk merekam hasil pengujian. Dalam putaran pengujian,
hasil dari semua kasus uji dicatat (yaitu, lulus atau gagal). Mudah-mudahan, dalam beberapa
putaran semua kasus uji akan berlalu.
Dengan kerangka pengujian dan pengujian otomatis, script pengujian dapat
dianggap sebagai spesifikasi ujian, karena mereka jelas menunjukkan apa yang input
yang diberikan dan apa output yang diharapkan. Dengan komentar yang sesuai, maksud dari
kasus uji juga dapat dengan mudah ditentukan.
desain kasus uji merupakan kegiatan utama dalam proses pengujian. seleksi yang seksama
kasus uji yang memenuhi kriteria dan pendekatan tertentu sangat penting untuk
pengujian yang tepat. Kami kemudian akan mempertimbangkan teknik yang berbeda untuk merancang baik
uji kasus.
Ada beberapa alasan bagus mengapa kasus uji yang ditentukan sebelum mereka
digunakan untuk pengujian. Hal ini diketahui bahwa pengujian memiliki keterbatasan parah dan efektivitas
pengujian sangat bergantung pada sifat yang tepat dari uji kasus.
Oleh karena itu penting untuk memastikan bahwa himpunan kasus uji yang digunakan adalah dari tinggi
kualitas. Evaluasi kasus uji sering dilakukan melalui review uji kasus. Sebagai
untuk setiap review, dokumen atau pekerjaan produk formal diperlukan, untuk meninjau
uji kasus, tes dokumen kasus spesifikasi diperlukan. Ini adalah utama
Alasan untuk mendokumentasikan kasus uji. Dokumen uji kasus spesifikasi
Ulasan, menggunakan proses formil, untuk memastikan bahwa uji kasus yang
konsisten dengan kebijakan yang ditetapkan dalam rencana, memenuhi kriteria yang dipilih, dan
mencakup berbagai aspek unit yang akan diuji. Dengan meninjau kondisi
sedang diuji oleh kasus uji, pengulas juga dapat memeriksa apakah semua penting
kondisi sedang diuji.
Alasan lain untuk menentukan kasus uji dalam sebuah dokumen atau naskah adalah
bahwa dengan melakukan hal ini, tester dapat melihat pengujian unit dalam totalitas dan
efek dari total set uji kasus. Jenis evaluasi ini sulit dilakukan di
on-the-fly pengujian di mana kasus uji ditentukan sebagai hasil pengujian. Juga
memungkinkan mengoptimalkan jumlah kasus uji evaluasi dari test suite mungkin
menunjukkan bahwa beberapa kasus uji yang berlebihan.

Eksekusi 8.2.3 Uji Kasus
Dengan spesifikasi kasus uji, langkah berikutnya dalam proses pengujian adalah untuk
mengeksekusi mereka. Langkah ini juga tidak mudah. Spesifikasi kasus uji
hanya menentukan set kasus uji untuk unit yang akan diuji. Namun, mengeksekusi
uji kasus mungkin memerlukan pembangunan modul driver atau bertopik. Mungkin juga
membutuhkan modul untuk mengatur lingkungan sebagaimana tercantum dalam rencana uji dan uji
spesifikasi kasus. Hanya setelah semua ini siap bisa uji kasus dieksekusi  Jika kerangka uji yang digunakan, maka pengaturan lingkungan sebagai
serta masukan untuk kasus uji sudah dilakukan di skrip pengujian, dan eksekusi
sangat mudah.
Selama tes eksekusi kasus, cacat yang ditemukan. Cacat ini kemudian diperbaiki
dan tesing dilakukan lagi untuk memverifikasi perbaikan. Untuk memfasilitasi pelaporan dan pelacakan
cacat yang ditemukan selama pengujian (dan kegiatan pengendalian mutu lainnya), cacat yang ditemukan
sering login. Cacat logging sangat penting dalam suatu perangkat lunak besar
proyek yang mungkin memiliki ratusan atau ribuan cacat yang ditemukan oleh
orang yang berbeda pada berbagai tahap proyek. Seringkali orang yang perbaikan yang
cacat bukan orang yang menemukan atau melaporkan cacat. Misalnya, tester
mungkin menemukan cacat sementara pengembang kode sebenarnya memperbaikinya. Di
seperti skenario, pelaporan cacat dan penutupan tidak bisa dilakukan secara informal. Itu
penggunaan mekanisme informal dapat dengan mudah menyebabkan cacat yang ditemukan namun kemudian
dilupakan, sehingga cacat tidak mendapatkan dihapus atau usaha ekstra dalam temuan
cacat lagi. Oleh karena itu, cacat yang ditemukan harus dicatat dengan baik dalam sistem
dan penutupan mereka dilacak. Cacat logging dan pelacakan dianggap salah satu
praktik terbaik untuk mengelola proyek [17], dan diikuti oleh perangkat lunak yang paling
organisasi.
Mari kita memahami siklus hidup cacat. Sebuah cacat dapat ditemukan dengan
siapa pun kapan saja. Ketika cacat yang ditemukan, maka login kontrol cacat
sistem, bersama dengan informasi yang cukup tentang cacat. cacat kemudian
di negara "yang disampaikan," pada dasarnya menyiratkan bahwa telah login bersama
dengan informasi tentang hal itu. Pekerjaan memperbaiki cacat tersebut kemudian ditugaskan untuk beberapa
orang, yang umumnya penulis dokumen atau kode yang cacat
ditemukan. Orang yang ditugaskan melakukan debugging dan perbaikan cacat dilaporkan,
dan cacat kemudian memasuki "tetap" negara. Namun, cacat yang tetap adalah
masih tidak dianggap sebagai dilakukan sepenuhnya. Penetapan sukses cacat diverifikasi.
Verifikasi ini dapat dilakukan oleh orang lain (sering submitter), atau oleh
tim uji, dan biasanya melibatkan menjalankan beberapa tes. Setelah cacat memperbaiki adalah
diverifikasi, maka cacat dapat ditandai sebagai "tertutup." Dengan kata lain, umum
Siklus hidup cacat memiliki tiga negara-diajukan, tetap, dan ditutup, seperti yang ditunjukkan
pada Gambar 8.3. Sebuah cacat yang tidak tertutup juga disebut terbuka.
Mis, [58]). Idealnya, pada akhir proyek, tidak ada cacat terbuka harus tetap.
Namun, situasi yang ideal ini sering tidak praktis untuk sistem yang paling besar.
Selain menggunakan log untuk melacak cacat, data di log juga bisa
digunakan untuk tujuan analisis. Kami akan membahas beberapa analisis mungkin nanti di
bab

Pengujian 8.3 Black-Box
Sebagaimana telah kita lihat, baik desain kasus uji adalah kunci untuk pengujian sesuai SUT.
Tujuannya saat uji coba SUT adalah untuk mendeteksi sebagian besar (mudah-mudahan semua) dari cacat,
melalui sekecil serangkaian uji kasus mungkin. Karena tujuan dasar ini,
penting untuk memilih kasus uji dengan hati-hati-yang terbaik adalah uji kasus-kasus yang memiliki
probabilitas tinggi mendeteksi cacat, jika ada, dan juga yang eksekusi
akan memberikan keyakinan bahwa tidak ada kegagalan selama pengujian menunjukkan bahwa ada beberapa
(Mudah-mudahan tidak ada) cacat dalam perangkat lunak.
Ada dua pendekatan dasar untuk merancang uji kasus untuk digunakan dalam
pengujian: black-box dan white-box. Dalam kotak hitam pengujian struktur
Program tidak dianggap. Uji kasus diputuskan hanya berdasarkan dari
persyaratan atau spesifikasi program atau modul, dan internal
modul atau program tidak dipertimbangkan untuk pemilihan kasus uji. Di dalam
bagian, kami akan menyajikan beberapa teknik untuk menghasilkan kasus uji untuk kotak hitam
pengujian. pengujian kotak putih dibahas pada bagian berikutnya.
Dalam pengujian black-box, tester hanya tahu masukan yang bisa diberikan kepada
sistem dan apa keluaran sistem harus memberikan. Dengan kata lain, dasar
untuk memutuskan uji kasus adalah persyaratan atau spesifikasi dari sistem atau
modul. Bentuk pengujian juga disebut uji fungsional atau perilaku.
Prosedur pengujian fungsional yang paling jelas adalah pengujian mendalam, yang
tidak praktis. Salah satu kriteria untuk menghasilkan uji kasus adalah untuk menghasilkan mereka secara acak.
Strategi ini memiliki sedikit kesempatan untuk menghasilkan satu set kasus uji yang
dekat optimal (yaitu, yang mendeteksi kesalahan maksimum dengan uji minimum
kasus). Oleh karena itu, kita perlu beberapa kriteria lain atau aturan untuk memilih uji kasus.
Tidak ada aturan resmi untuk merancang uji kasus untuk pengujian fungsional. Namun,
ada sejumlah teknik atau heuristik yang dapat digunakan untuk memilih
uji kasus yang telah ditemukan untuk menjadi sangat sukses dalam mendeteksi kesalahan. Sini
kami menyebutkan beberapa teknik ini.

8.3.1 Equivalence Class Partisi
Karena kita tidak dapat melakukan pengujian mendalam, pendekatan alami berikutnya adalah membagi
domain input ke dalam satu set kelas kesetaraan, sehingga jika karya Program
benar untuk nilai, maka akan bekerja dengan benar untuk semua nilai-nilai lain dalam
kelas. Jika kita memang bisa mengidentifikasi kelas tersebut, maka pengujian program dengan satu
Nilai dari masing-masing kelas kesetaraan setara dengan melakukan tes lengkap
program.
Namun, tanpa melihat struktur internal program, itu adalah
mungkin untuk menentukan kelas kesetaraan yang ideal seperti (bahkan dengan internal
struktur, biasanya tidak bisa dilakukan). Metode kesetaraan kelas partisi
[68] mencoba untuk mendekati ideal ini. Kelas kesetaraan terbentuk dari input
dimana perilaku sistem ditentukan atau diharapkan untuk menjadi serupa. Setiap
kelompok masukan yang perilaku tersebut diharapkan akan berbeda dari orang lain
dianggap sebagai kelas kesetaraan yang terpisah. Dasar pemikiran pembentukan kesetaraan
kelas seperti ini adalah asumsi bahwa jika spesifikasi memerlukan sama
perilaku untuk setiap elemen dalam kelas nilai-nilai, maka program akan cenderung
dibangun sehingga baik berhasil atau gagal untuk masing-masing nilai di kelas itu.
Misalnya, spesifikasi modul yang menentukan nilai absolut
untuk bilangan bulat menentukan satu perilaku untuk bilangan bulat positif dan satu lagi untuk negatif
bilangan bulat. Dalam hal ini, kita akan membentuk dua kesetaraan kelas-satu yang terdiri dari
bilangan bulat positif dan terdiri lainnya dari bilangan bulat negatif.
Untuk perangkat lunak yang kuat, kita juga harus mempertimbangkan masukan tidak valid. Artinya, kita harus
mendefinisikan kelas kesetaraan untuk input tidak valid juga.
kelas kesetaraan biasanya dibentuk dengan mempertimbangkan setiap kondisi yang ditentukan
pada masukan sebagai menentukan kelas kesetaraan valid dan satu atau lebih valid
kelas kesetaraan. Sebagai contoh, jika kondisi masukan menentukan rentang nilai
(Katakanlah, 0 <count <Max), kemudian membentuk kelas kesetaraan valid dengan kisaran yang
dan dua kelas kesetaraan tidak valid, satu dengan nilai kurang dari batas bawah
rentang (yaitu, menghitung <0) dan yang lainnya dengan nilai yang lebih tinggi daripada yang lebih tinggi
terikat (hitung> Max). Jika input menetapkan seperangkat nilai-nilai dan persyaratan
menentukan perilaku yang berbeda untuk unsur yang berbeda di set, maka berlaku
kelas kesetaraan dibentuk untuk masing-masing elemen dalam set dan tidak valid
kelas untuk suatu entitas yang tidak termasuk ke set.
Salah satu pendekatan umum untuk menentukan kelas kesetaraan adalah sebagai berikut. Jika
ada alasan untuk percaya bahwa seluruh rentang input tidak akan diperlakukan
dengan cara yang sama, maka kisaran harus dipecah menjadi dua atau lebih kesetaraan
kelas, masing-masing terdiri dari nilai-nilai yang perilaku diharapkan untuk menjadi serupa.
Misalnya, untuk input karakter, jika kita memiliki alasan untuk percaya bahwa
Program akan melakukan tindakan yang berbeda jika karakter adalah huruf, angka, atau
karakter khusus, maka kita harus membagi input menjadi tiga kesetaraan valid kelas.
Pendekatan lain untuk membentuk kelas kesetaraan adalah untuk mempertimbangkan khusus
nilai yang perilaku dapat berbeda sebagai kelas kesetaraan. Untuk
Misalnya, nilai 0 bisa menjadi nilai khusus untuk input integer.
Juga, untuk setiap kelas kesetaraan valid, satu atau lebih valid kesetaraan kelas
harus diidentifikasi.
Hal ini sering berguna untuk mempertimbangkan kelas kesetaraan dalam output. Untuk output
kelas kesetaraan, tujuannya adalah untuk memiliki input sehingga output untuk tes yang
Kasus terletak di kelas keluaran kesetaraan. Sebagai contoh, pertimbangkan sebuah program untuk
menentukan tingkat pengembalian untuk beberapa investasi. Ada tiga keluaran jelas
tingkat kesetaraan kelas-positif pengembalian, tingkat pengembalian negatif, dan nol
tingkat pengembalian. Selama pengujian, penting untuk menguji masing-masing, yang
adalah, memberi masukan sehingga masing-masing tiga output ini dihasilkan. Menentukan
uji kasus untuk kelas keluaran mungkin lebih sulit, tetapi kelas keluaran memiliki
telah ditemukan untuk mengungkapkan kesalahan yang tidak diungkapkan oleh hanya mempertimbangkan input
kelas.
Setelah kelas kesetaraan yang dipilih untuk masing-masing input, maka masalah
adalah untuk memilih kasus uji sesuai. Ada berbagai cara untuk memilih uji kasus.
Salah satu strategi adalah memilih setiap kasus uji yang mencakup sebanyak kesetaraan valid
kelas karena dapat, dan satu kasus tes terpisah untuk setiap kelas kesetaraan tidak valid.
Strategi agak lebih baik yang membutuhkan lebih banyak uji kasus adalah memiliki kasus uji
menutupi paling banyak satu kelas kesetaraan berlaku untuk setiap masukan, dan memiliki satu terpisah
kasus uji untuk setiap kelas kesetaraan tidak valid. Dalam kasus terakhir, jumlah uji
kasus untuk kelas kesetaraan berlaku adalah sama dengan jumlah terbesar dari kesetaraan
kelas untuk setiap masukan, ditambah jumlah total kelas kesetaraan tidak valid.
Sebagai contoh, mempertimbangkan program yang mengambil dua input-string s dari
panjang sampai dengan N dan integer n. Program ini adalah untuk menentukan n atas
tertinggi terjadi karakter dalam s. tester percaya bahwa programmer
mungkin berurusan dengan berbagai jenis karakter secara terpisah. Satu set valid dan
kelas kesetaraan tidak valid untuk ini dapat dilihat pada Tabel 8.1.
Dengan ini sebagai kelas ekivalen, kita harus memilih uji kasus. SEBUAH
kasus uji untuk ini adalah sepasang nilai untuk s dan n. Dengan strategi pertama untuk
memutuskan uji kasus, satu kasus uji dapat: s sebagai string panjang kurang dari
N yang mengandung huruf kecil, huruf besar, angka, dan karakter khusus; dan n sebagai
jumlah 5. uji kasus satu ini meliputi semua kelas kesetaraan yang valid (EQ1
melalui EQ6). Kemudian kita akan memiliki satu kasus uji masing-masing untuk menutupi IEQ1, IEQ2,
dan IEQ3. Artinya, total empat kasus uji yang dibutuhkan.
Dengan pendekatan kedua, dalam satu kasus uji kita dapat menutupi satu kesetaraan
kelas untuk satu masukan saja. Jadi, satu kasus uji dapat: string angka, dan
jumlah 5. Ini mencakup EQ1 dan EQ6. Maka kita akan membutuhkan uji kasus untuk EQ2
melalui EQ5, dan uji kasus terpisah untuk IEQ1 melalui IEQ3.
8.3.2 Analisis Nilai Batas
Ia telah mengamati bahwa program yang bekerja dengan benar untuk satu set nilai-nilai di
kelas kesetaraan gagal pada beberapa nilai khusus. Nilai-nilai ini sering berbaring di
batas dari kelas kesetaraan. Uji kasus yang memiliki nilai-nilai pada batas-batas
kesetaraan kelas karena itu cenderung "-yield tinggi" uji kasus, dan
memilih uji kasus tersebut adalah tujuan dari analisis nilai batas. dalam batas
analisis nilai [68], kita memilih masukan untuk kasus uji dari kesetaraan
kelas, sehingga input terletak di tepi kelas ekivalen. Batas
nilai untuk setiap kelas kesetaraan, termasuk kelas ekivalen dari output,
harus ditutup. batas nilai uji kasus juga disebut "kasus-kasus ekstrim."
Oleh karena itu, kita dapat mengatakan bahwa kasus uji batas nilai adalah seperangkat input data yang
terletak di tepi atau batas dari kelas data input atau yang menghasilkan keluaran
yang terletak pada batas kelas data output.
Dalam kasus rentang, untuk analisis nilai batas hal ini berguna untuk memilih
elemen batas jangkauan dan nilai yang tidak valid hanya di luar kedua ujung
(Untuk dua kelas kesetaraan tidak valid). Jadi, jika kisaran adalah 0,0? x? 1.0, maka
uji kasus yang 0,0, 1,0 (input valid), dan -0.1, dan 1,1 (untuk input tidak valid).
Demikian pula, jika input adalah daftar, perhatian harus difokuskan pada pertama dan terakhir
elemen daftar. Kami juga harus mempertimbangkan output untuk analisis nilai batas. Jika
kelas kesetaraan dapat diidentifikasi dalam output, kita harus mencoba untuk menghasilkan uji
kasus yang akan menghasilkan output yang terletak pada batas kesetaraan yang
kelas. Selain itu, kami harus mencoba untuk membentuk uji kasus yang akan menghasilkan
output yang tidak terletak pada kelas kesetaraan. (Jika kita dapat menghasilkan masukan
Kasus yang menghasilkan output di luar kelas kesetaraan, kami telah mendeteksi
kesalahan.)
Seperti di kesetaraan kelas partisi, dalam analisis nilai batas kami pertama kali.
menentukan nilai untuk masing-masing variabel yang harus dilakukan selama pengujian.
Jika ada beberapa masukan, lalu bagaimana seharusnya set kasus uji terbentuk
meliputi nilai batas? Misalkan setiap variabel masukan memiliki jangkauan yang ditetapkan.
Kemudian ada enam nilai-batas ujung ekstrim dari jangkauan, hanya di luar
ujungnya, dan sebelum berakhir. Jika berbagai integer adalah min ke max,
maka enam nilai-nilai min-1, min, min + 1, max-1, max, max + 1. Seharusnya
ada n variabel input tersebut. Ada dua strategi untuk menggabungkan
nilai batas untuk variabel yang berbeda dalam kasus uji.
Dalam strategi pertama, kita pilih nilai batas yang berbeda untuk satu variabel,
dan menjaga variabel lain di beberapa nilai nominal. Dan kita pilih satu kasus uji
yang terdiri dari nilai nominal semua variabel. Dalam hal ini, kita akan memiliki 6n + 1
uji kasus. Untuk dua variabel X dan Y, 13 kasus tes akan seperti yang ditunjukkan pada
Gambar 8.4.
Gambar 8.4: Uji kasus untuk analisis nilai batas.
Strategi lain akan mencoba semua kemungkinan kombinasi untuk nilai untuk
variabel yang berbeda. Karena ada tujuh nilai untuk setiap variabel (enam batas
nilai-nilai dan satu nilai nominal), jika ada n variabel, akan ada total
uji 7N kasus-terlalu besar untuk pengujian praktis.

8.3.3 Berpasangan Pengujian
Ada umumnya banyak parameter yang menentukan perilaku perangkat lunak
sistem. Parameter ini bisa menjadi masukan langsung ke perangkat lunak atau implisit
pengaturan seperti yang untuk perangkat. Parameter ini dapat mengambil nilai yang berbeda, dan
untuk beberapa dari mereka perangkat lunak mungkin tidak bekerja dengan benar. Banyak cacat di
software umumnya melibatkan satu syarat, yaitu, beberapa nilai khusus salah satu.
parameter. cacat seperti ini disebut kesalahan single-mode [70]. contoh sederhana
dari single-mode kesalahan yang lunak tidak mampu mencetak untuk jenis tertentu dari
printer, sebuah perangkat lunak yang tidak dapat menghitung ongkos benar ketika wisatawan adalah
minor, dan perangkat lunak penagihan telepon yang tidak menghitung tagihan dengan benar
untuk negara tertentu.
kesalahan single-mode dapat dideteksi dengan menguji untuk nilai yang berbeda dari yang berbeda
parameter. Jadi, jika ada n parameter untuk sistem, dan masing-masing dari
mereka dapat mengambil nilai-nilai m yang berbeda (atau m kelas yang berbeda dari nilai-nilai, masing-masing kelas
yang dianggap sebagai yang sama untuk tujuan pengujian seperti di kelas kesetaraan
partisi), maka dengan setiap kasus uji kita dapat menguji satu nilai yang berbeda dari masing-masing
parameter. Dengan kata lain, kita dapat menguji untuk semua nilai yang berbeda di tes m
kasus.
Namun, semua kesalahan yang tidak single-mode dan ada kombinasi dari input
yang mengungkapkan adanya kesalahan: misalnya, perangkat lunak penagihan telepon yang
tidak menghitung dengan benar untuk malam panggilan (satu parameter) ke tertentu
negara (parameter lain), atau sistem tiket maskapai penerbangan yang memiliki salah
perilaku ketika kecil (satu parameter) adalah perjalanan kelas bisnis (lain
parameter) dan tidak tinggal selama akhir pekan (parameter ketiga). multimode ini
kesalahan dapat terungkap selama pengujian dengan mencoba kombinasi yang berbeda dari
nilai-parameter pendekatan yang disebut pengujian kombinatorial.
Sayangnya, pengujian kombinasi penuh sering tidak layak. Untuk sistem
dengan n parameter, masing-masing memiliki nilai-nilai m, jumlah kombinasi yang berbeda
adalah nm. Untuk sistem sederhana dengan 5 parameter, masing-masing memiliki 5 nilai yang berbeda,
jumlah total kombinasi adalah 3.125. Dan jika pengujian setiap kombinasi
membutuhkan waktu 5 menit, itu akan mengambil alih 1 bulan untuk menguji semua kombinasi. Jelas,
untuk sistem yang kompleks yang memiliki banyak parameter dan masing-masing parameter mungkin memiliki
banyak nilai, pengujian kombinatorial penuh tidak layak dan praktis teknik
diperlukan untuk mengurangi jumlah tes.
Beberapa penelitian telah menunjukkan bahwa sebagian besar kesalahan software yang terungkap pada beberapa
khusus nilai tunggal atau oleh interaksi dari sepasang nilai [25]. Itu, sebagian besar
kesalahan cenderung baik single-mode atau double-mode. Untuk pengujian untuk doublemode
kesalahan, kita tidak perlu menguji sistem dengan semua kombinasi parameter
nilai-nilai, tetapi perlu menguji sehingga semua kombinasi nilai untuk setiap pasangan
parameter tersebut dilakukan. Ini disebut pengujian berpasangan. Dalam pengujian berpasangan, semua pasangan nilai harus dilakukan selama pengujian. Jika
ada n parameter, masing-masing dengan nilai-nilai m, kemudian antara setiap dua parameter
kita harus m? pasang m. Parameter pertama akan memiliki ini banyak pasangan dengan masing-masing
dari n yang tersisa - 1 parameter, yang kedua akan memiliki pasangan baru dengan
n - 2 parameter (sebagai pasangan dengan yang pertama sudah termasuk dalam pertama
pasang parameter), ketiga akan memiliki pasangan dengan n - 3 parameter, dan sebagainya.
Artinya, jumlah pasangan adalah m? m? n? (N - 1) / 2.
Tujuan dari pengujian berpasangan adalah untuk memiliki satu set kasus uji yang mencakup semua
pasangan. Karena ada n parameter, kasus uji adalah kombinasi dari nilai-nilai
parameter ini dan akan mencakup (n-1) + (n-2) + ... = n (n-1) / 2 pasang. Dalam
kasus terbaik ketika masing-masing pasangan ditutupi tepat sekali oleh salah satu ujian, m2 yang berbeda
uji kasus akan diperlukan untuk menutupi semua pasangan.
Sebagai contoh, pertimbangkan produk perangkat lunak yang dikembangkan untuk beberapa
platform yang menggunakan browser sebagai interface-nya. Misalkan perangkat lunak yang
dirancang untuk bekerja selama tiga sistem operasi yang berbeda dan tiga yang berbeda
browser. Selain itu, sebagai produk memori intensif ada keinginan untuk
menguji kinerjanya di bawah tingkat yang berbeda dari memori. Jadi, kita memiliki berikut
tiga parameter dengan nilai-nilai yang berbeda:
Sistem operasi: Windows, Solaris, Linux
Ukuran memori: 128M, 256M, 512M
Browser: IE, Netscape, Mozilla
Untuk diskusi, kita dapat mengatakan bahwa sistem memiliki tiga parameter: A (operasi
sistem), B (ukuran memori), dan C (browser). Masing-masing dapat memiliki
tiga nilai yang akan kita sebut sebagai a1, a2, a3, b1, b2, b3, dan c1, c2, c3. Itu
jumlah total kombinasi berpasangan adalah 9 * 3 = 27. Jumlah kasus uji,
Namun, untuk menutupi semua pasangan jauh lebih sedikit. Sebuah ujian yang terdiri dari nilai-nilai
dari tiga parameter meliputi tiga kombinasi (A-B, B-C, dan A-C).
Oleh karena itu, dalam kasus terbaik, kita dapat mencakup semua 27 kombinasi dengan 27/3 = 9 kasus uji.
uji kasus ini ditunjukkan pada Tabel 8.2, bersama dengan pasangan mereka menutupi.  Seperti harus jelas, menghasilkan uji kasus untuk menutupi semua pasangan tidak sederhana
tugas. Minimum set kasus uji adalah bahwa di mana masing-masing pasangan ditutupi oleh
tepat satu kasus uji. Seringkali, hal itu tidak akan mungkin untuk menghasilkan set minimum
kasus uji, terutama ketika jumlah nilai parameter yang berbeda  berbeda. Berbagai algoritma telah diusulkan, dan beberapa program yang
tersedia secara online untuk menghasilkan uji kasus untuk menutupi semua pasangan.
Untuk situasi di mana generasi panduan layak, pendekatan berikut
dapat diikuti. Mulailah dengan awal kasus uji dibentuk oleh semua kombinasi
nilai-nilai untuk dua parameter yang memiliki jumlah terbesar dari nilai-nilai (seperti
kita harus memiliki setidaknya ini banyak kasus tes untuk menguji semua pasangan untuk kedua
parameter). Kemudian menyelesaikan setiap kasus uji ini dengan menambahkan nilai lainnya
parameter sehingga mereka menambahkan pasangan yang belum tercakup oleh
Kasus cobaan. Ketika semua selesai, membentuk tambahan kasus uji dengan menggabungkan sebagai
banyak pasangan terungkap mungkin. Pada dasarnya kita menghasilkan uji kasus tersebut
bahwa ujian mencakup banyak pasangan baru sebanyak mungkin. Dengan menghindari meliputi
pasang beberapa kali, kita dapat menghasilkan satu set kecil kasus uji yang mencakup semua
pasang. algoritma efisien menghasilkan jumlah terkecil kasus uji untuk
pengujian berpasangan ada. Dalam [25] contoh diberikan di mana untuk 13 parameter,
masing-masing memiliki tiga nilai yang berbeda, semua pasangan akan dibahas dalam hanya 15 kasus uji,
sedangkan jumlah total kombinasi lebih dari 1 juta!
pengujian berpasangan adalah cara praktis untuk menguji sistem perangkat lunak besar yang
telah banyak parameter yang berbeda dengan fungsi yang berbeda diharapkan untuk berbeda
nilai-nilai. Sebuah contoh akan menjadi sistem penagihan (untuk telepon, hotel, maskapai penerbangan, dll)
yang memiliki tingkat yang berbeda untuk nilai parameter yang berbeda. Ini juga merupakan praktis
Pendekatan untuk produk perangkat lunak pengujian tujuan umum yang diharapkan
berjalan pada platform yang berbeda dan konfigurasi, atau sistem yang diharapkan
bekerja dengan berbagai jenis sistem.

8.3.4 Kasus Khusus
Telah terlihat bahwa program sering menghasilkan perilaku yang salah ketika input
membentuk beberapa kasus khusus. Alasannya adalah bahwa dalam program, beberapa kombinasi dari
input perlu perlakuan khusus, dan memberikan penanganan yang tepat untuk khusus ini
kasus mudah diabaikan. Sebagai contoh, dalam sebuah rutinitas aritmatika, jika ada
divisi dan pembagi adalah nol, beberapa tindakan khusus telah diambil, yang bisa
mudah dilupakan oleh programmer. Ini kasus khusus membentuk khususnya
baik uji kasus, yang dapat mengungkapkan kesalahan yang biasanya tidak terdeteksi oleh
uji kasus lainnya.
kasus khusus akan sering bergantung pada struktur data dan fungsi
modul. Tidak ada aturan untuk menentukan kasus-kasus khusus, dan penguji memiliki
untuk menggunakan intuisi dan pengalamannya untuk mengidentifikasi kasus-kasus seperti tes. Karena itu,
menentukan kasus khusus juga disebut kesalahan menebak.
Psikologi sangat penting untuk kesalahan menebak. tester harus
memainkan "pembela setan" dan mencoba untuk menebak asumsi yang salah yang  programmer bisa membuat dan situasi programmer bisa memiliki
diabaikan atau tidak ditangani secara benar. Pada dasarnya, tester sedang mencoba untuk mengidentifikasi
situasi rawan kesalahan. Kemudian uji kasus yang ditulis untuk situasi ini. Untuk
Misalnya, dalam masalah menemukan jumlah kata yang berbeda dalam file
(Dibahas dalam bab-bab sebelumnya) beberapa kasus khusus dapat: file kosong,
hanya satu kata dalam file, hanya satu kata dalam satu baris, beberapa baris kosong di input
File, kehadiran lebih dari satu kosong antara kata-kata, semua kata yang sama,
kata-kata yang sudah disortir, dan kosong di awal dan akhir file.
asumsi yang salah biasanya dibuat karena spesifikasi yang tidak
menyelesaikan atau penulis spesifikasi mungkin tidak telah menyatakan beberapa properti,
dengan asumsi mereka untuk menjadi jelas. Setiap kali ada ketergantungan pada pemahaman diam-diam
daripada pernyataan eksplisit dari spesifikasi, ada ruang untuk membuat salah
asumsi. Sering, asumsi yang salah yang dibuat tentang lingkungan.
Namun, harus dicatat bahwa kasus-kasus khusus sangat tergantung pada
masalah, dan tester harus benar-benar mencoba untuk "masuk ke sepatu" dari desainer
dan coder untuk menentukan kasus ini.

8.3.5 Pengujian Negara Berbasis
Ada beberapa sistem yang pada dasarnya stateless di bahwa untuk input yang sama
mereka selalu memberikan output yang sama atau menunjukkan perilaku yang sama. banyak bets
sistem pengolahan, sistem komputasi, dan server jatuh dalam kategori ini. Di
hardware, sirkuit kombinasi jatuh dalam kategori ini. Pada tingkat yang lebih kecil, yang paling
fungsi seharusnya berperilaku dengan cara ini. Namun demikian, banyak
sistem yang perilakunya negara-berbasis di bahwa untuk masukan identik mereka berperilaku
berbeda pada waktu yang berbeda dan dapat menghasilkan output yang berbeda. Alasannya
untuk perilaku yang berbeda adalah bahwa keadaan dari sistem mungkin berbeda. di lain
kata-kata, perilaku dan output dari sistem tidak hanya tergantung pada input
tersedia, tetapi juga pada keadaan dari sistem. Keadaan dari sistem tergantung
pada input terakhir sistem telah menerima. Dengan kata lain, negara merupakan
dampak kumulatif dari semua input terakhir pada sistem. Dalam perangkat keras,
sistem sekuensial jatuh dalam kategori ini. Dalam perangkat lunak, banyak sistem yang besar jatuh
kategori ini sebagai negara terakhir yang ditangkap di database atau file dan digunakan untuk kontrol
perilaku sistem. Untuk sistem seperti ini, pendekatan lain untuk memilih
uji kasus adalah berbasis negara pendekatan pengujian [22].
Secara teoritis, perangkat lunak yang menyelamatkan negara dapat dimodelkan sebagai mesin negara.
Namun, ruang keadaan dari setiap program yang wajar adalah hampir tak terbatas,
karena merupakan produk silang dari domain dari semua variabel yang membentuk negara.
Bagi banyak sistem ruang keadaan dapat dibagi menjadi beberapa negara, masing-masing
mewakili kombinasi logis dari nilai-nilai variabel negara yang berbeda yang  berbagi beberapa properti yang menarik [9]. Jika himpunan negara dari suatu sistem adalah dikelola,
model keadaan dari sistem dapat dibangun. Sebuah model negara untuk sistem memiliki
empat komponen:
- Serikat. Merupakan dampak dari input masa lalu ke sistem.
- Transisi. Mewakili bagaimana keadaan sistem berubah dari satu negara
yang lain dalam menanggapi beberapa peristiwa.
- Acara. Input ke sistem.
- Tindakan. Output untuk acara.
Model negara menunjukkan apa yang terjadi transisi negara dan tindakan apa yang
dilakukan dalam suatu sistem dalam menanggapi peristiwa. Ketika model negara dibangun dari
persyaratan sistem, kita hanya dapat mencakup negara-negara, transisi, dan
tindakan yang dinyatakan dalam persyaratan atau dapat disimpulkan dari mereka. Jika
informasi lebih lanjut tersedia dari spesifikasi desain, maka keadaan kaya
Model dapat dibangun.
Misalnya, pertimbangkan contoh survei mahasiswa dibahas dalam Bab 5.
Menurut persyaratan, sistem yang akan dibuat untuk mengambil siswa
survei. Siswa mengambil survei dan dikembalikan hasil saat ini
survei. Hasil survei dapat menjadi tua sampai lima survei. Kami menganggap arsitektur
yang memiliki cache antara server dan database, dan di mana
survei dan hasil cache dan diperbarui hanya setelah lima survei, pada saat kedatangan
dari permintaan. arsitektur yang diusulkan memiliki database di belakang, yang mungkin
turun.
Untuk membuat model mesin negara dari sistem ini, kita melihat bahwa dari rangkaian
6 permintaan, pertama 5 dapat diperlakukan berbeda. Oleh karena itu, kita bagi menjadi dua
menyatakan: satu mewakili penerimaan dari 1 - 4 permintaan (state 1), dan
lainnya yang mewakili penerima permintaan 5 (state 2). Selanjutnya kita melihat bahwa
database dapat naik atau turun, dan itu bisa turun di setiap dari dua negara.
Namun, perilaku permintaan, jika database yang turun, mungkin berbeda.
Oleh karena itu, kita menciptakan sepasang negara (negara 3 dan 4). Setelah database memiliki
gagal, maka 5 permintaan pertama dilayani menggunakan data lama. Ketika suatu permintaan
menerima setelah menerima 5 permintaan, sistem memasuki negara gagal (state 5), di
yang tidak memberikan respon apapun. Ketika sistem pulih dari gagal
negara, itu harus segera memperbarui cache, maka pergi ke negara 2. Negara
Model untuk sistem ini ditunjukkan pada Gambar 8.5 (i merupakan masukan dari
pengguna untuk mengambil survei).
Perhatikan bahwa kita mengasumsikan bahwa model keadaan dari sistem dapat dibuat
dari spesifikasi atau desain. Ini adalah bagaimana sebagian besar pemodelan negara dilakukan, dan
itu adalah bagaimana model dibangun dalam contoh. Setelah model negara dibangun,
kita dapat menggunakannya untuk memilih uji kasus. Ketika desain diimplementasikan, tes ini
Gambar 8.5: Model Negara untuk sistem survei mahasiswa.
kasus dapat digunakan untuk menguji kode. Hal ini karena ini kita memperlakukan berbasis negara
pengujian sebagai strategi pengujian kotak hitam.
Namun, model negara sering membutuhkan informasi tentang desain
sistem. Dalam contoh di atas, beberapa pengetahuan tentang arsitektur digunakan.
Kadang-kadang membuat model negara mungkin memerlukan informasi rinci tentang
desain sistem. Misalnya, untuk kelas, kita telah melihat bahwa negara
pemodelan dilakukan selama desain, dan ketika banyak yang sudah diketahui tentang
kelas, atribut, dan metode. Karena ini, pengujian berbasis negara mungkin
dianggap sebagai agak antara kotak hitam dan pengujian kotak putih. Seperti itu
strategi kadang-kadang disebut abu-abu kotak pengujian.
Mengingat model keadaan sistem, bagaimana harus menguji kasus dihasilkan? Banyak
kriteria cakupan telah diusulkan [69]. Kami hanya membahas beberapa di sini. Seharusnya
set uji kasus T. Beberapa kriteria adalah:
- Semua cakupan transisi (AT). T harus memastikan bahwa setiap transisi dalam
Grafik negara dilaksanakan.
- Semua transisi pasangan cakupan (ATP). T harus melaksanakan semua pasangan yang berdekatan
transisi. (Sepasang transisi yang berdekatan terdiri dari dua transisi: suatu
transisi yang masuk ke negara dan transisi keluar dari negara itu.)
- Cakupan pohon Transisi (TT). T harus melaksanakan semua jalur sederhana, di mana
jalan yang sederhana adalah salah satu yang dimulai dari keadaan awal dan mencapai negara
bahwa ia telah dikunjungi di jalan ini atau keadaan akhir.
Kriteria pertama menyatakan bahwa selama pengujian semua transisi dipecat. Ini
juga akan memastikan bahwa semua negara yang dikunjungi. Cakupan Pasangan transisi adalah
Kriteria kuat mensyaratkan bahwa semua kombinasi yang masuk dan keluar  transisi untuk setiap negara harus dilakukan oleh T. Jika negara memiliki dua masuk
transisi t1 dan t2, dan dua transisi keluar t3 dan t4, kemudian satu set tes
kasus T yang mengeksekusi t1; t3 dan t2; t4 akan memuaskan AT. Namun, untuk memenuhi ATP,
T juga harus memastikan pelaksanaan t1; t4 dan t2; t3. Cakupan pohon transisi
bernama cara ini sebagai pohon transisi dapat dibangun dari grafik
dan kemudian digunakan untuk mengidentifikasi jalur. Di ATP, kita akan melampaui transisi,
dan menyatakan bahwa jalan yang berbeda dalam diagram negara harus dieksekusi selama
pengujian. ATP umumnya akan mencakup AT.
Untuk contoh di atas, himpunan kasus uji untuk AT diberikan di bawah pada Tabel
8.3. Berikut req () berarti bahwa permintaan untuk mengambil survei harus diberikan,
gagal () berarti bahwa database harus gagal, dan memulihkan () berarti bahwa
Database gagal harus dipulihkan.
Seperti yang kita lihat, pengujian berbasis negara menarik perhatian negara-negara dan transisi.
Bahkan dalam kasus sederhana di atas, kita dapat melihat skenario yang berbeda diuji
(Mis, perilaku sistem ketika database gagal, dan perilaku sistem ketika
gagal dan pulih setelah itu). Banyak dari skenario ini mudah untuk mengabaikan jika
uji kasus dirancang hanya dengan melihat domain input. Set uji
kasus lebih kaya jika kriteria lain yang digunakan. Untuk contoh ini, kita biarkan sebagai
latihan untuk menentukan kasus uji untuk kriteria lainnya.

Pengujian 8.4 White-Box
Pada bagian sebelumnya kita membahas pengujian black-box, yang berkaitan dengan
fungsi bahwa program diuji seharusnya melakukan dan tidak
berurusan dengan struktur internal program yang bertanggung jawab untuk benar-benar menerapkan
fungsi itu. Dengan demikian, pengujian black-box yang bersangkutan dengan fungsi
daripada pelaksanaan program. White-kotak pengujian, di sisi lain  tangan, berkaitan dengan pengujian pelaksanaan program. tujuannya
pengujian ini bukan untuk melaksanakan semua input atau output kondisi yang berbeda (meskipun
yang mungkin merupakan produk) tapi untuk melaksanakan pemrograman yang berbeda
struktur dan struktur data yang digunakan dalam program ini. Pengujian kotak putih juga
disebut pengujian struktural, dan kami akan menggunakan dua istilah bergantian.
Untuk menguji struktur dari sebuah program, pengujian struktural bertujuan untuk mencapai tes
kasus yang akan memaksa cakupan yang diinginkan dari struktur yang berbeda. berbagai kriteria
telah diusulkan untuk ini. Berbeda dengan kriteria pengujian fungsional, yang
sering tidak tepat, kriteria untuk pengujian struktural umumnya cukup
tepat karena mereka didasarkan pada struktur program, yang bersifat formal dan tepat.
Di sini kita akan membahas salah satu pendekatan untuk pengujian struktural: berbasis aliran kontrol
pengujian, yang paling umum digunakan dalam praktek.

8.4.1 Kriteria Flow Control Berbasis
Kriteria berbasis struktur yang paling umum didasarkan pada aliran kontrol
program. Dalam kriteria ini, grafik aliran kontrol dari program dianggap
dan cakupan berbagai aspek grafik ditetapkan sebagai kriteria. Karenanya,
sebelum kita mempertimbangkan kriteria, mari kita tepat menentukan grafik aliran kontrol untuk
sebuah program.
Biarkan grafik kontrol aliran (atau hanya mengalir grafik) dari program P G. A
node dalam grafik ini merupakan blok pernyataan yang selalu dieksekusi
bersama-sama, yaitu, setiap kali pernyataan pertama dijalankan, semua pernyataan lain
juga dieksekusi. Tepi (i, j) (dari simpul i ke simpul j) merupakan kemungkinan
transfer kontrol setelah mengeksekusi pernyataan terakhir dari blok diwakili
oleh simpul i ke pernyataan pertama dari blok yang diwakili oleh simpul j. Sebuah node
sesuai dengan blok yang pernyataan pertama adalah pernyataan awal P adalah
disebut node awal G, dan node sesuai dengan blok yang lalu
Pernyataan adalah pernyataan keluar disebut node keluar [73]. Sebuah jalan adalah terbatas
urutan node (n1, n2, ..., nk), k> 1, sehingga ada tepi (ni, ni + 1)
untuk semua node ni dalam urutan (kecuali node nk terakhir). Sebuah path lengkap adalah
jalan yang simpul pertama adalah awal node dan node terakhir adalah simpul keluar. Sekarang mari kita mempertimbangkan kriteria berbasis aliran kontrol. Mungkin cakupan yang paling sederhana
Kriteria adalah cakupan pernyataan, yang mensyaratkan bahwa setiap pernyataan dari
Program dilaksanakan setidaknya sekali selama pengujian. Dengan kata lain, itu membutuhkan
bahwa jalan dieksekusi selama pengujian mencakup semua node dalam grafik. Ini
juga disebut kriteria semua-node [73].
Kriteria cakupan ini tidak sangat kuat, dan dapat meninggalkan kesalahan terdeteksi.
Sebagai contoh, jika ada jika pernyataan dalam program tanpa memiliki lagi
klausa, kriteria cakupan pernyataan untuk pernyataan ini akan dipenuhi oleh kasus uji yang mengevaluasi kondisi true. Tidak ada kasus uji yang diperlukan yang memastikan
bahwa kondisi dalam laporan jika false. Ini adalah serius
kekurangan karena keputusan dalam program ini adalah potensi sumber kesalahan. Sebagai
contoh, pertimbangkan fungsi berikut untuk menghitung nilai absolut dari
jumlah:
int abs (x)
int x;
{
if (x >= 0) x = 0 - x;
return (x)
}Program ini jelas salah. Misalkan kita menjalankan fungsi dengan set uji kasus {x = 0} (yaitu, set hanya memiliki satu test case). Pernyataan
kriteria cakupan akan puas dengan menguji dengan set ini, tapi kesalahan akan
tidak terungkap.
Kriteria cakupan yang lebih umum adalah cakupan cabang, yang mengharuskan
setiap tepi dalam grafik kontrol aliran dilalui setidaknya sekali selama pengujian.
Dengan kata lain, cakupan cabang mensyaratkan bahwa setiap keputusan dalam program menjadi
dievaluasi untuk nilai-nilai benar dan salah setidaknya sekali selama pengujian. pengujian berdasarkan
pada cakupan cabang sering disebut pengujian cabang. Cakupan cabang 100%
Kriteria ini juga disebut kriteria all-tepi [73]. cakupan cabang menyiratkan pernyataan
cakupan, karena setiap pernyataan adalah bagian dari beberapa cabang. Dalam sebelumnya
Misalnya, satu set kasus uji memuaskan kriteria ini akan mendeteksi kesalahan.
Masalahnya dengan cakupan cabang datang jika keputusan memiliki banyak kondisi
di dalamnya (yang terdiri dari ekspresi Boolean dengan operator Boolean dan dan atau).
Dalam situasi seperti itu, keputusan dapat mengevaluasi untuk benar dan salah tanpa benar-benar
berolahraga semua kondisi. Sebagai contoh, perhatikan fungsi berikut yang
memeriksa validitas dari item data. Item data valid jika terletak antara 0
dan 100.
int check(x)
int x;
{
if ((x >= ) && (x <= 200))
check = True;
else check = False;
}
Modul ini tidak benar, seperti yang memeriksa x? 200 bukan 100 (mungkin
kesalahan pengetikan dibuat oleh programmer). Misalkan modul diuji dengan
set berikut kasus uji: {x = 5, x = -5}. Kriteria cakupan cabang
akan puas untuk modul ini dengan set ini. Namun, kesalahan tidak akan
mengungkapkan, dan perilaku modul konsisten dengan spesifikasinya
untuk semua kasus uji di set ini. Dengan demikian, kriteria cakupan puas, tetapi
Kesalahan tidak terdeteksi. Hal ini terjadi karena keputusan sedang mengevaluasi untuk benar dan
palsu karena kondisi (x? 0). Kondisi (x? 200) tidak pernah mengevaluasi
false selama tes ini, maka kesalahan dalam kondisi ini tidak terungkap.
Masalah ini dapat diatasi dengan mensyaratkan bahwa semua kondisi mengevaluasi
benar dan salah. Namun, situasi dapat terjadi di mana keputusan mungkin tidak mendapatkan
nilai-nilai baik benar dan salah bahkan jika setiap kondisi individu mengevaluasi untuk benar
dan palsu. Solusi yang jelas untuk masalah ini adalah dengan mewajibkan keputusan / kondisi
cakupan, di mana semua keputusan dan semua kondisi dalam keputusan mengambil
nilai-nilai benar dan salah selama pengujian.
Penelitian telah menunjukkan bahwa ada banyak kesalahan yang kehadirannya tidak terdeteksi
dengan pengujian cabang karena beberapa kesalahan terkait dengan beberapa kombinasi
cabang dan kehadiran mereka ini diungkapkan oleh sebuah eksekusi yang mengikuti jalan
yang meliputi cabang mereka. Oleh karena itu, kriteria cakupan yang lebih umum adalah salah satu
yang mengharuskan semua jalur yang mungkin dalam grafik kontrol aliran dilaksanakan selama
pengujian. Ini disebut kriteria cakupan jalur atau kriteria semua-jalan, dan
pengujian berdasarkan kriteria ini sering disebut pengujian jalan. kesulitan
dengan kriteria ini adalah bahwa program yang mengandung loop dapat memiliki tak terbatas
jumlah path yang mungkin. Selain itu, tidak semua jalur dalam grafik mungkin "layak"
dalam arti bahwa ada mungkin tidak ada masukan untuk jalan mana yang bisa
dieksekusi.
Sebagai kriteria cakupan jalur mengarah ke sejumlah berpotensi tak terbatas
jalur, beberapa upaya telah dilakukan untuk menunjukkan kriteria antara cabang
cakupan dan cakupan jalan. Tujuan dasar dari pendekatan ini adalah untuk memilih
mengatur jalur yang memastikan kriteria cakupan cabang dan mencoba beberapa jalur lain yang
dapat membantu mengungkapkan kesalahan. Salah satu metode untuk membatasi jumlah jalur adalah untuk mempertimbangkan
dua jalur yang sama jika mereka hanya berbeda dalam subpaths mereka yang disebabkan karena
untuk loop. Bahkan dengan pembatasan ini, jumlah jalur bisa sangat Ini harus menunjukkan bahwa tidak ada kriteria ini cukup untuk mendeteksi semua
jenis kesalahan dalam program. Misalnya, jika program yang hilang kendali
aliran jalur yang diperlukan untuk memeriksa nilai khusus (seperti pointer sama nil
dan pembagi sama dengan nol), kemudian bahkan mengeksekusi semua jalan belum tentu
mendeteksi kesalahan. Demikian pula, jika set jalur adalah seperti yang mereka memenuhi allpath yang
kriteria tapi latihan hanya satu bagian dari kondisi majemuk, maka
set tidak akan mengungkapkan kesalahan dalam bagian dari kondisi yang tidak dilaksanakan.
Oleh karena itu, bahkan kriteria cakupan jalur, yang merupakan terkuat kriteria
kita telah membahas, tidak cukup kuat untuk menjamin deteksi semua kesalahan.

8.4.2 Uji Generation Kasus dan Dukungan Perangkat
Setelah kriteria cakupan diputuskan, dua masalah harus dipecahkan untuk menggunakan
kriteria yang dipilih untuk pengujian. Yang pertama adalah untuk memutuskan apakah satu set kasus uji memuaskan
kriteria, dan yang kedua adalah untuk menghasilkan satu set kasus uji untuk kriteria tertentu.
Memutuskan apakah satu set kasus uji memenuhi kriteria tanpa bantuan apapun
alat adalah tugas yang rumit, meskipun secara teoritis mungkin untuk melakukan secara manual.
Untuk hampir semua teknik pengujian struktural, alat yang digunakan untuk menentukan
apakah kriteria tersebut telah puas. Umumnya, alat ini akan memberikan
umpan balik mengenai apa yang perlu diuji untuk sepenuhnya memenuhi kriteria.
Untuk menghasilkan uji kasus, alat-alat yang tidak mudah tersedia, dan karena
sifat dari masalah (yaitu, undecidability dari "kelayakan" dari jalan), sepenuhnya
alat otomatis untuk memilih uji kasus untuk memenuhi kriteria umumnya tidak
mungkin. Oleh karena itu, alat bisa, di terbaik, membantu tester. Salah satu metode untuk menghasilkan
uji kasus adalah untuk secara acak memilih data uji sampai kriteria yang diinginkan puas
(Yang ditentukan oleh alat). Hal ini dapat mengakibatkan banyak berlebihan uji kasus,
karena banyak kasus uji akan melaksanakan jalur yang sama.
Sebagai generasi uji kasus tidak dapat sepenuhnya otomatis, sering kasus uji
seleksi dilakukan secara manual oleh tester dengan melakukan pengujian struktural dalam
cara berulang, dimulai dengan kasus uji awal yang ditetapkan dan memilih lebih uji
kasus berdasarkan umpan balik yang diberikan oleh alat untuk evaluasi kasus uji. Itu
alat uji kasus evaluasi dapat membedakan mana jalan harus dieksekusi atau yang
mutan perlu dibunuh. Informasi ini dapat digunakan untuk memilih tes lebih lanjut
kasus.
Bahkan dengan bantuan alat, memilih uji kasus bukanlah proses yang sederhana.
Memilih uji kasus untuk mengeksekusi beberapa bagian kode yang belum unexecuted sering
sangat sulit. Karena ini, dan untuk alasan lain, kriteria seringkali
melemah. Misalnya, bukan membutuhkan cakupan 100% dari pernyataan dan
cabang, tujuannya mungkin untuk mencapai beberapa persentase diterima tinggi (tapi
kurang dari 100%). Ada banyak alat yang tersedia untuk pernyataan dan cakupan cabang, kriteria
yang paling sering digunakan. Kedua alat komersial dan freeware yang tersedia
untuk bahasa sumber yang berbeda. Alat-alat ini sering juga memberikan cakupan yang lebih tinggi tingkat
Data seperti cakupan fungsi, cakupan metode, dan cakupan kelas. Untuk mendapatkan
cakupan data, pelaksanaan program selama pengujian harus erat
dipantau. Hal ini membutuhkan bahwa program akan diinstrumentasi sehingga diperlukan
Data dapat dikumpulkan. Sebuah metode umum instrumenting adalah untuk memasukkan beberapa 

Laporan disebut probe dalam program ini. Satu-satunya tujuan dari probe adalah
untuk menghasilkan data tentang pelaksanaan program selama pengujian yang dapat digunakan untuk
menghitung cakupan. Dengan ini, kita dapat mengidentifikasi tiga fase dalam menghasilkan
Data cakupan:
1. Instrumen program dengan probe
2. Jalankan program dengan kasus uji
3. Menganalisis hasil data pemeriksaan
penyisipan Probe dapat dilakukan secara otomatis oleh preprocessor. Pelaksanaan
program ini dilakukan oleh tester. Setelah pengujian, data cakupan ditampilkan
dengan representasi alat-kadang grafis juga ditampilkan.

8.5 Metrik
Kita telah melihat bahwa selama pengujian perangkat lunak yang diuji dijalankan dengan set
kasus uji. Sebagai kualitas perangkat lunak yang dikirimkan tergantung substansial pada
kualitas pengujian, sebuah pertanyaan alami beberapa muncul saat uji coba:
- Seberapa baik adalah pengujian yang telah dilakukan?
- Bagaimana kualitas atau keandalan software setelah pengujian selesai?
Selama pengujian, tujuan utama dari metrik adalah mencoba untuk menjawab ini dan
pertanyaan terkait lainnya. Kita akan membahas beberapa metrik yang dapat digunakan untuk ini
tujuan.

 8.5.1 Analisis Cakupan
Salah satu pendekatan yang paling umum digunakan untuk mengevaluasi ketelitian yang
pengujian adalah dengan menggunakan beberapa langkah cakupan. Kami telah dibahas di atas beberapa
langkah-langkah cakupan umum yang digunakan dalam cakupan praktek-pernyataan
dan cakupan cabang. Untuk menggunakan langkah-langkah cakupan ini untuk mengevaluasi kualitas
pengujian, alat analisis cakupan yang tepat harus digunakan yang dapat
menginformasikan tidak hanya cakupan dicapai selama pengujian tetapi juga yang bagian
belum tercakup.
Seringkali, organisasi membangun pedoman untuk tingkat cakupan yang harus
dicapai selama pengujian. Umumnya, persyaratan cakupan akan lebih tinggi untuk
unit testing, tetapi lebih rendah untuk pengujian sistem seperti itu jauh lebih sulit untuk memastikan
pelaksanaan blok diidentifikasi ketika seluruh sistem sedang dieksekusi. Sering  persyaratan cakupan di tingkat unit dapat 90% sampai 100% (perlu diingat bahwa
100% mungkin tidak selalu mungkin karena mungkin ada kode unreachable).
Selain cakupan konstruksi Program, cakupan persyaratan juga
sering diperiksa. Hal ini untuk memfasilitasi evaluasi ini yang di uji kasus spesifikasi
persyaratan atau ketentuan yang diuji disebutkan. cakupan ini
umumnya didirikan dengan mengevaluasi set kasus uji untuk memastikan bahwa cukup
jumlah kasus uji dengan data yang sesuai disertakan untuk semua persyaratan.
Cakupan ukuran di sini adalah persentase persyaratan atau klausa mereka / -
kondisi yang setidaknya satu kasus uji ada. Seringkali cakupan penuh mungkin
diperlukan pada tingkat kebutuhan sebelum pengujian dianggap sebagai diterima.
8.5.2 Keandalan
Setelah pengujian dilakukan dan perangkat lunak disampaikan, pembangunan dianggap
lebih. Ini jelas akan diinginkan untuk tahu, dalam hal kuantitatif, yang
keandalan software yang disampaikan. Sebagai keandalan software tergantung
jauh pada kualitas pengujian, dengan menilai kehandalan kami juga dapat menilai
kualitas pengujian. Atau, estimasi reliabilitas dapat digunakan untuk memutuskan
apakah pengujian cukup telah dilakukan. Dengan kata lain, selain karakteristik
properti kualitas penting dari produk yang disampaikan, kehandalan estimasi
memiliki peran langsung dalam proyek manajemen-dapat digunakan oleh proyek
Manajer untuk memutuskan apakah pengujian cukup telah dilakukan dan kapan harus berhenti
pengujian.
Keandalan produk menentukan kemungkinan operasi kegagalan-bebas
bahwa produk untuk durasi waktu tertentu. Kebanyakan model kehandalan mengharuskan
terjadinya kegagalan menjadi fenomena acak. Dalam perangkat lunak meskipun
kegagalan terjadi karena bug yang sudah ada sebelumnya, asumsi ini umumnya akan terus untuk
besar sistem, tetapi mungkin tidak berlaku untuk program kecil yang memiliki bug (di mana
satu kasus mungkin dapat memprediksi kegagalan). Oleh karena itu, pemodelan keandalan
lebih berarti bagi sistem yang lebih besar.
Misalkan X variabel acak yang mewakili kehidupan sistem. Keandalan
sistem adalah probabilitas bahwa sistem tidak gagal pada saat t. di lain
kata-kata, Keandalan sistem yang juga dapat ditentukan sebagai waktu yang berarti kegagalan
(MTTF). MTTF mewakili hidup yang diharapkan dari sistem. Dari keandalan
Fungsi, dapat diperoleh sebagai [80].
Keandalan juga dapat didefinisikan dalam hal intensitas kegagalan yang kegagalan
tingkat (yaitu, jumlah kegagalan per satuan waktu) dari perangkat lunak pada waktu t.
Dari perspektif pengukuran, selama pengujian, pengukuran tingkat kegagalan
adalah yang paling mudah, jika cacat sedang login. Cara mudah untuk melakukan ini adalah untuk menghitung
jumlah kegagalan setiap minggu atau setiap hari selama tahap terakhir pengujian.
Dan jumlah kegagalan dapat didekati dengan jumlah cacat login.
(Meskipun kegagalan dan cacat yang berbeda, dalam tahap terakhir dari pengujian itu
diasumsikan bahwa cacat yang menyebabkan kegagalan yang segera diperbaiki cukup dan karena itu
tidak menyebabkan beberapa kegagalan.) Secara umum, tingkat kegagalan ini meningkat di awal
pengujian karena semakin banyak cacat yang ditemukan, puncak suatu tempat di tengah
pengujian, dan kemudian terus menurun sebagai cacat sedikit dilaporkan. Untuk sebuah
diberikan test suite, jika semua cacat tetap, maka harus ada hampir tidak ada kegagalan
menuju akhir. Dan yang bisa dianggap sebagai waktu yang tepat untuk rilis ini
perangkat lunak. Artinya, kriteria rilis dapat bahwa tingkat kegagalan di rilis
Waktu adalah nol kegagalan dalam beberapa durasi waktu, atau nol kegagalan saat mengeksekusi
test suite.
Meskipun pelacakan tingkat kegagalan memberikan rasa kasar dari kehandalan dalam hal
kegagalan per hari atau per minggu, untuk keandalan estimasi yang lebih akurat, lebih baik
model harus digunakan. model perangkat lunak keandalan adalah tugas yang kompleks, yang membutuhkan
model ketat dan analisis statistik canggih. Banyak model memiliki
telah diusulkan untuk penilaian keandalan software, dan survei dari banyak
model diberikan dalam [33, 67].
Perlu disebutkan bahwa kegagalan software juga sangat bergantung pada
lingkungan di mana ia mengeksekusi, tingkat kegagalan yang dialami dalam pengujian
akan mencerminkan keandalan tertinggi dialami oleh pengguna setelah rilis software
hanya jika pengujian erat meniru perilaku pengguna. Ini tidak mungkin terjadi,
terutama dengan tingkat yang lebih rendah dari pengujian. Namun, seringkali pada tingkat yang lebih tinggi, aktif
upaya dilakukan untuk memiliki ujian akhir Suite meniru penggunaan aktual. Jika ini adalah
kasus, maka estimasi reliabilitas dapat diterapkan dengan keyakinan yang lebih tinggi.

8.5.3 Cacat Removal Efficiency
Analisis lain yang menarik adalah efisiensi removal cacat, meskipun ini hanya dapat
ditentukan beberapa saat setelah perangkat lunak telah dirilis. Tujuan dari ini
analisis adalah untuk mengevaluasi efektivitas proses pengujian yang digunakan,
bukan kualitas pengujian untuk sebuah proyek. Analisis ini berguna untuk meningkatkan
proses pengujian di masa depan.
Biasanya, setelah perangkat lunak telah dirilis ke klien, klien akan
menemukan cacat, yang harus tetap (umumnya oleh pengembang asli, karena ini
sering menjadi bagian dari kontrak). Data cacat ini juga umumnya login. Dalam beberapa bulan, sebagian besar cacat akan ditemukan oleh klien (sering
"Garansi" periode 3 sampai 6 bulan).
Setelah total jumlah cacat (atau pendekatan dekat dengan total)
diketahui, efisiensi removal cacat (DRE) pengujian dapat dihitung.
Efisiensi removal cacat dari aktivitas pengendalian mutu didefinisikan sebagai
persentase penurunan jumlah cacat dengan menjalankan kegiatan [61].
Sebagai contoh, misalkan total jumlah cacat login adalah 500, dari yang
20 ditemukan setelah melahirkan, dan 200 ditemukan selama pengujian sistem.
Efisiensi removal cacat pengujian sistem adalah 200/220 (hanya sekitar 90%), sebagai
jumlah cacat hadir dalam sistem ketika pengujian dimulai adalah 220.
Efisiensi removal cacat dari proses kualitas secara keseluruhan 480/500, yang
adalah 96%. Kebetulan, tingkat DRE layak dan apa yang banyak komersial
organisasi mencapai.
Ini harus jelas bahwa DRE adalah konsep umum yang dapat diterapkan untuk
aktivitas penghapusan cacat. Sebagai contoh, kita dapat menghitung DRE desain
review, atau unit testing. Hal ini dapat dilakukan jika untuk setiap cacat, selain logging saat
dan di mana cacat ditemukan, fase di mana cacat diperkenalkan
juga dianalisis dan dicatat. Dengan informasi ini, ketika semua cacat yang
login, DRE tugas kontrol kualitas utama dapat ditentukan. Ini
Informasi ini sangat berguna dalam meningkatkan kualitas proses keseluruhan.

8.6 Ringkasan
- Pengujian adalah metode yang dinamis untuk verifikasi dan validasi, di mana perangkat lunak
untuk diuji dilaksanakan dengan hati-hati dirancang kasus uji dan
perilaku sistem software diamati. Sebuah test case adalah seperangkat input
dan kondisi pengujian bersama dengan hasil yang diharapkan dari pengujian. Sebuah test suite
adalah seperangkat kasus uji yang umumnya dijalankan bersama-sama untuk menguji beberapa spesifik
tingkah laku. Selama pengujian hanya kegagalan sistem yang diamati,
dari mana kehadiran kesalahan disimpulkan; kegiatan yang terpisah harus
dilakukan untuk mengidentifikasi kesalahan dan menghapus mereka.
- Tujuan dari pengujian adalah untuk meningkatkan kepercayaan dalam kebenaran perangkat lunak.
Untuk ini, himpunan kasus uji yang digunakan untuk pengujian harus sedemikian rupa sehingga untuk
cacat pada sistem, ada kemungkinan menjadi kasus uji yang akan mengungkapkannya.
Untuk memastikan hal ini, penting bahwa uji kasus secara hati-hati dirancang dengan
maksud mengungkapkan cacat.
- Karena keterbatasan metode verifikasi untuk tahap awal, desain
dan kesalahan persyaratan juga muncul dalam kode. Pengujian ini digunakan untuk mendeteksi
kesalahan ini juga, selain kesalahan diperkenalkan selama coding
tahap. Oleh karena itu, berbagai tingkat pengujian yang sering digunakan untuk mendeteksi cacat
disuntikkan selama tahap-tahap yang berbeda. Tingkat pengujian umum digunakan adalah
unit testing, pengujian integrasi, pengujian sistem, dan pengujian penerimaan.
- Untuk menguji produk software, pengujian secara keseluruhan harus direncanakan, dan untuk
menguji setiap unit diidentifikasi dalam rencana, uji kasus harus dirancang dengan hati-hati
untuk mengungkapkan kesalahan dan ditetapkan dalam dokumen atau naskah tes.
- Ada dua pendekatan untuk merancang uji kasus: kotak hitam dan putih-kotak.
Dalam pengujian black-box, logika internal dari sistem di bawah pengujian tidak dianggap
dan uji kasus diputuskan dari spesifikasi atau persyaratan.
Kesetaraan kelas partisi, analisis nilai batas, dan causeeffect
grafik adalah contoh dari metode untuk memilih kasus uji untuk kotak hitam
pengujian. pengujian berbasis negara adalah pendekatan lain di mana sistem dimodelkan
sebagai mesin negara dan kemudian model ini digunakan untuk memilih uji kasus menggunakan
beberapa transisi atau kriteria cakupan berbasis jalan. pengujian berbasis negara juga bisa
dipandang sebagai abu-abu kotak pengujian dalam yang sering membutuhkan informasi lebih dari
hanya persyaratan.
- Dalam pengujian white-box, uji kasus diputuskan berdasarkan logika internal
dari program yang sedang diuji. Seringkali kriteria yang ditentukan, tetapi prosedur
untuk memilih uji kasus untuk memenuhi kriteria yang tersisa untuk tester. Yang paling
Kriteria umum adalah cakupan pernyataan dan cakupan cabang.
- The metrik utama bunga selama pengujian adalah keandalan dari perangkat lunak
di bawah pengujian. Jika cacat sedang login, keandalan dapat dinilai dalam hal
dari tingkat kegagalan per minggu atau hari, meskipun model yang lebih baik untuk estimasi ada.
Cakupan dicapai selama pengujian, dan efisiensi removal cacat, yang lainnya
metrik bunga.

Komentar

Postingan populer dari blog ini

CARA MERUBAH BAHASA DI FOXIT READER (PDF)

Tugas 1. Pengertian Waterfall, Prototyping, Iterative, RUP, Time boxing, extreme programing & Agile