Apakah kita memerlukan data pengujian atau dapatkah kita mengandalkan pengujian unit dan pengujian manual?

10

Kami sedang mengerjakan proyek PHP / MySQL sedang / besar. Kami sedang melakukan pengujian unit dengan PHPUnit & QUnit dan kami memiliki dua penguji penuh waktu yang secara manual menguji aplikasi. Data pengujian (tiruan) kami saat ini dibuat dengan skrip SQL.

Kami memiliki masalah dengan memelihara skrip untuk data pengujian. Logika bisnis cukup kompleks dan satu perubahan "sederhana" dalam data uji sering menghasilkan beberapa bug dalam aplikasi (yang bukan bug nyata, hanya produk dari data yang tidak valid). Ini telah menjadi beban besar bagi seluruh tim karena kami terus membuat dan mengubah tabel.

Saya tidak benar-benar melihat titik mempertahankan data uji dalam skrip karena semuanya dapat ditambahkan secara manual dalam aplikasi dalam waktu sekitar 5 menit dengan UI. PM kami tidak setuju dan mengatakan bahwa memiliki proyek yang tidak dapat kami gunakan dengan data uji adalah praktik yang buruk.

Haruskah kita meninggalkan pemeliharaan skrip dengan data uji dan biarkan penguji untuk menguji aplikasi tanpa data? Apa praktik terbaik?

Christian P
sumber

Jawaban:

4

Anda mencampurkan dua konsep yang berbeda. Salah satunya adalah verifikasi , yang didasarkan pada Unit Testing dan Peer Reviews. Ini dapat dilakukan oleh pengembang sendiri, tanpa data uji dan maksudnya adalah untuk memverifikasi bahwa satu set persyaratan terpenuhi.

Yang kedua adalah validasi , dan ini dilakukan oleh QA (penguji Anda). Untuk langkah ini Anda perlu data uji karena tester tidak perlu memiliki pengetahuan tentang pemrograman dalam aplikasi, hanya kasus penggunaan yang dimaksudkan. Tujuannya adalah untuk memvalidasi bahwa aplikasi berperilaku sebagaimana dimaksud dalam lingkungan produksi.

Kedua proses itu penting dan perlu untuk memberikan produk yang berkualitas kepada pelanggan. Anda tidak dapat mengandalkan unit test saja. Yang perlu Anda ketahui adalah cara yang andal untuk menangani data pengujian Anda untuk memastikan data yang valid.

EDIT: OK, saya mendapatkan apa yang Anda minta. Jawabannya adalah ya, karena pekerjaan Penguji bukan untuk menghasilkan data uji, hanya untuk menguji aplikasi. Anda perlu membuat skrip dengan cara yang memungkinkan perawatan lebih mudah dan memastikan data yang valid dimasukkan. Tanpa data uji, tester tidak akan memiliki apa pun untuk diuji. Karena itu, jika Anda memiliki akses ke lingkungan pengujian , saya tidak mengerti mengapa Anda tidak dapat memasukkan data pengujian secara manual daripada menggunakan skrip.

AJC
sumber
Mungkin saya salah menjawab pertanyaan saya dengan menyebutkan unit testing dan data tes. Saya mengerti bahwa validasi tidak sama dengan pengujian unit. Masalah saya di sini adalah bahwa data uji yang kami buat dengan skrip dapat dibuat melalui UI dalam 5 menit. Untuk memasukkan data ini ke dalam aplikasi yang tidak perlu Anda ketahui pemrograman, Anda hanya perlu mengikuti test case.
Christian P
@ christian.p periksa pembaruan saya mengenai klarifikasi Anda atas pertanyaan itu.
AJC
Jadi solusi Anda adalah meninggalkan skrip dan hanya menambahkan data uji manual melalui UI? Bagaimana dengan jawaban yang diberikan P.Brian.Mackey dan jawabannya untuk menggabungkan data dengan UI?
Christian P
@ christian.p Yah, saya setuju bahwa Anda harus menggunakan skrip. TETAPI tidak ada formalitas, atau aturan yang mengatakan Anda HARUS melakukannya. Alasan utama untuk menggunakan skrip untuk menghasilkan data tiruan adalah kecepatan (otomatisasi) dan akses (ke lingkungan pengujian). Jika Anda memiliki akses dan IS IS lebih cepat dan lebih mudah untuk melakukannya secara manual, tidak ada alasan Anda tidak dapat melakukannya. (TETAPI menyimpan log data yang Anda uji dengan).
AJC
setiap tester memiliki lingkungan pengujian sendiri dan penguji benar-benar menjatuhkan db beberapa kali sehari, jadi tidak praktis untuk menambahkan data uji secara manual, tetapi kami dapat meminta mereka dengan sopan untuk menambahkan beberapa data untuk pengujian.
Christian P
6

Ya, memiliki unit test dan mock-up data adalah praktik terbaik. Manajer proyek sudah benar. Karena melakukan perubahan "sederhana" dalam data pengujian sering menghasilkan bug, maka itulah inti masalahnya.

Kode perlu diperbaiki. Tidak melakukannya (mengatakan hei kita tidak perlu tes) bukan perbaikan, itu hanya menambah hutang teknis . Memecah kode menjadi beberapa unit yang lebih kecil yang bisa diuji karena tidak dapat mengidentifikasi unit tanpa kerusakan adalah masalah.

Mulai lakukan refactor. Pertahankan perbaikan yang kecil agar dapat dikelola. Cari anti-pola seperti kelas / metode Dewa, tidak mengikuti KERING, tanggung jawab tunggal, dll ...

Akhirnya, lihat ke TDD untuk melihat apakah itu bekerja untuk tim. TDD bekerja dengan baik untuk memastikan semua kode Anda dapat diuji (karena Anda menulis tes terlebih dahulu) dan juga memastikan Anda tetap ramping dengan menulis kode yang cukup untuk lulus tes (meminimalkan lebih dari rekayasa).

Secara umum, jika serangkaian proses logika bisnis yang kompleks menghasilkan satu set data, maka saya melihatnya sebagai laporan. Enkapsulasi laporan. Jalankan laporan dan gunakan objek yang dihasilkan sebagai input untuk tes berikutnya.

P.Brian.Mackey
sumber
Saya perlu mengklarifikasi hal-hal sedikit: "Perubahan sederhana dalam data pengujian menghasilkan bug" - masalah di sini tidak ada dalam aplikasi - aplikasi berfungsi dengan baik ketika data valid (dan Anda tidak dapat menambahkan data yang tidak valid secara manual) . Masalahnya di sini adalah bahwa data pengujian yang tidak valid dapat menghasilkan kesalahan saat mencoba mengerjakan data itu. Jadi kita perlu menguji data uji juga?
Christian P
Jangan sampai tersandung pada kesalahan herring merah. Fakta bahwa data pengujian memperkenalkan bug adalah masalah yang berbeda secara bersamaan. Menghapus tes bukanlah perbaikan, "memerintah pemerintah" adalah sesuatu yang sepenuhnya berbeda. Masalahnya adalah kode. Itu tidak dapat diuji karena Anda memberi tahu kami bahwa Anda tidak dapat menulis tes yang tidak merusak barang. Itu sebabnya Anda perlu meningkatkan kode.
P.Brian.Mackey
Mungkin Anda salah mengerti pertanyaan saya. Kami memiliki tes unit kerja dan setiap fungsionalitas baru yang kami tulis memiliki tes unit. Saya tidak menyarankan agar kita menghapus tes yang tidak lulus atau bahwa kita tidak menulis tes sama sekali. Saya hanya menyarankan agar kita tidak menggunakan skrip untuk membuat data tiruan dalam database karena penguji manual melakukan hal yang sama.
Christian P
"Saya tidak benar-benar melihat titik mempertahankan data pengujian dalam skrip" <- Menjatuhkan dukungan tes adalah apa yang saya katakan. Bukan penghapusan tes lama. Itu ide yang buruk. Anda mengurangi reproduktifitas dan menyambungkan diri Anda dengan UI yang merupakan bagian dari hal yang Anda coba uji dan dapat beradaptasi dengan perubahan. Pisahkan diri Anda dari UI. Jaga otomatisasi data.
P.Brian.Mackey
Tetapi bagaimana kita mengatasi masalah data tiruan yang tidak valid? Jika kita terus membuat data tiruan untuk basis data, bagaimana kita memeriksa apakah data tiruan itu ok atau tidak? Jika aturan bisnis mensyaratkan nilai X = 2 dan database menerima X = 100 - bagaimana kita memeriksa integritas data pengujian ketika aturan bisnis itu kompleks?
Christian P
1

Ini adalah masalah yang sangat umum dan juga sangat sulit. Tes otomatis yang dijalankan terhadap databse (bahkan basis data dalam memori, seperti HSQLDB ) biasanya lambat, tidak deterministik dan, karena kegagalan tes hanya menunjukkan bahwa ada masalah di suatu tempat dalam kode Anda atau dalam data Anda, mereka tidak banyak informatif.

Dalam pengalaman saya, strategi terbaik adalah fokus pada unit test untuk logika bisnis. Cobalah untuk mencakup sebanyak mungkin kode domain inti Anda. Jika Anda mendapatkan bagian ini dengan benar, yang merupakan tantangan tersendiri, Anda akan mencapai hubungan biaya-manfaat terbaik untuk pengujian otomatis. Adapun lapisan ketekunan, saya biasanya berinvestasi jauh lebih sedikit pada tes otomatis dan menyerahkannya kepada penguji manual yang berdedikasi.

Tetapi jika Anda benar-benar ingin (atau perlu) mengotomatiskan tes kegigihan, saya akan merekomendasikan Anda untuk membaca Growing Object-Oriented Software, Dipandu oleh Tes . Buku ini memiliki seluruh bab yang didedikasikan untuk tes kegigihan.

Otavio Macedo
sumber