Sisipan berguna untuk memberi tahu Anda tentang keadaan internal program . Misalnya, bahwa struktur data Anda memiliki status yang valid, misalnya, bahwa Time
struktur data tidak memiliki nilai 25:61:61
. Kondisi yang diperiksa dengan menegaskan adalah:
Prasyarat, yang memastikan bahwa penelepon menjaga kontraknya,
Postconditions, yang memastikan bahwa callee menyimpan kontraknya, dan
Invarian, yang memastikan bahwa struktur data selalu memiliki beberapa properti setelah fungsi kembali. Invarian adalah suatu kondisi yang merupakan prasyarat dan postkondisi.
Tes unit berguna untuk memberi tahu Anda tentang perilaku eksternal modul . Anda Stack
mungkin memiliki status yang konsisten setelah push()
metode dipanggil, tetapi jika ukuran tumpukan tidak bertambah tiga setelah disebut tiga kali, maka itu adalah kesalahan. (Misalnya, kasus sepele di mana push()
implementasi yang salah hanya memeriksa pernyataan dan keluar.)
Sebenarnya, perbedaan utama antara tes menegaskan dan unit adalah tes unit memiliki data uji (nilai untuk menjalankan program), sedangkan menegaskan tidak. Artinya, Anda dapat menjalankan tes unit Anda secara otomatis, sementara Anda tidak dapat mengatakan hal yang sama untuk pernyataan. Demi diskusi ini, saya berasumsi bahwa Anda berbicara tentang mengeksekusi program dalam konteks tes fungsi tingkat tinggi (yang menjalankan seluruh program, dan tidak menggerakkan modul seperti tes unit). Jika Anda tidak berbicara tentang tes fungsi otomatis sebagai sarana untuk "melihat input nyata", maka jelas nilainya terletak pada otomatisasi, dan dengan demikian unit test akan menang. Jika Anda membicarakan hal ini dalam konteks pengujian fungsi (otomatis), lihat di bawah.
Mungkin ada beberapa tumpang tindih dalam apa yang sedang diuji. Sebagai contoh, Stack
postcondition sebuah sebenarnya dapat menyatakan bahwa ukuran stack meningkat satu. Tetapi ada batas untuk apa yang dapat dilakukan dalam pernyataan itu: Haruskah itu juga memeriksa bahwa elemen atas adalah apa yang baru saja ditambahkan?
Untuk keduanya, tujuannya adalah untuk meningkatkan kualitas. Untuk pengujian unit, tujuannya adalah menemukan bug. Untuk pernyataan, tujuannya adalah untuk mempermudah debugging dengan mengamati status program yang tidak valid segera setelah terjadi.
Perhatikan bahwa tidak ada teknik yang memverifikasi kebenaran. Bahkan, jika Anda melakukan pengujian unit dengan tujuan untuk memverifikasi program itu benar, Anda kemungkinan akan datang dengan tes yang tidak menarik yang Anda tahu akan berhasil. Ini adalah efek psikologis: Anda akan melakukan apa pun untuk memenuhi tujuan Anda. Jika tujuan Anda adalah menemukan bug, aktivitas Anda akan mencerminkan hal itu.
Keduanya penting, dan memiliki tujuan masing-masing.
[Sebagai catatan terakhir tentang pernyataan: Untuk mendapatkan nilai maksimal, Anda harus menggunakannya di semua titik kritis dalam program Anda, dan bukan beberapa fungsi utama. Jika tidak, sumber asli masalah mungkin telah ditutup dan sulit dideteksi tanpa berjam-jam melakukan debugging.]
:-)