Bagaimana staf QA dapat menguji logika caching yang tidak dapat mereka lihat?

33

Saya baru saja menerapkan lapisan caching di aplikasi web saya, dan sekarang saya bertanya-tanya bagaimana QA seharusnya mengujinya, karena caching transparan bagi pengguna.

Satu ide yang saya miliki adalah untuk meletakkan logging dalam metode yang memanggil kode yang mengisi cache, dan merekam ketika suatu objek ditarik dari cache dan ketika itu membutuhkan rekreasi dari database, dan kemudian penguji dapat melihat log untuk melihat apakah, misalnya, objek tertentu dimuat ulang dari db setiap 10 menit, bukannya setiap tampilan halaman.

Tetapi adakah yang bisa menyarankan beberapa praktik yang lebih baik untuk situasi ini?

Joshua Frank
sumber
6
terkait: Metodologi Uji Muatan
nyamuk
5
Saya bekerja pada kinerja sepanjang hari dan "bagaimana QA dapat menguji perubahan Anda?" adalah pertanyaan yang sering saya tanyakan.
Brandon
1
Yah umumnya cache dimaksudkan untuk mempercepat operasi dengan menyimpan hasil dalam memori yang seharusnya berasal dari sumber lain (db, server jarak jauh, metode komputasi mahal, dll). Oleh karena itu, mengukur waktu yang seharusnya diperlukan saat memukul cache sepertinya cara paling sederhana. Periksa juga masalah cache basi (pembaruan pada data aktual tidak muncul karena versi sebelumnya masih di-cache)
GordonM

Jawaban:

37

Satu pertanyaan adalah apakah cache itu sendiri benar-benar persyaratan yang harus diuji oleh QA. Caching meningkatkan kinerja, sehingga mereka dapat menguji perbedaan kinerja untuk memastikannya memenuhi beberapa persyaratan.

Tapi ide bagus untuk melakukan beberapa pengujian di sekitar caching, siapa pun yang bertanggung jawab untuk itu. Kami menggunakan penghitung kinerja. Jika sistem cache Anda mengambil keuntungan dari ini, mereka mudah. Jika ada cara untuk mendapatkan hitungan dari cache itu sendiri, itu adalah pilihan lain.

Menggunakan pendekatan Anda juga bagus. Jika salah satu dari ini dibungkus dengan tes otomatis yang memeriksa hasil, maka tidak ada yang harus melihat log untuk menemukan jawaban.

Andy Wiesendanger
sumber
+1 untuk menguji kinerja alih-alih caching. Nilai bisnis apa yang di-cache sendiri? (Tidak ada.) Tentunya Anda sedang berupaya menuju dampak nyata pada sesuatu - mengapa lagi Anda menghabiskan waktu mengimplementasikannya? Uji dampaknya.
alexanderbird
74

Anda menerapkan cache (saya berasumsi) karena sistem tidak berkinerja cukup baik. Itu adalah sesuatu yang relevan bagi pengguna. Berikut adalah hal-hal yang dapat diperiksa QA:

  • Bahwa sistem, setelah cache diperkenalkan, masih benar. Ini berarti mereka harus berusaha mengelabui cache untuk menyediakan data basi, yang merupakan sesuatu yang dapat diverifikasi oleh QA, dan memastikan tidak ada lagi yang rusak.
  • Bahwa sistem sekarang memenuhi ambang batas kinerja yang tidak terpenuhi ketika Anda memutuskan untuk meningkatkan kinerja. Mereka dapat membandingkan pengukuran lama dan membandingkannya dengan yang baru.

Ingat, pengguna (dan, dengan ekstensi, QA) tidak peduli bagaimana Anda memecahkan masalah. Mereka hanya peduli bahwa masalahnya selesai dan tidak menciptakan masalah baru. Ini benar apakah Anda menerapkan caching, String parsing yang ditingkatkan, melakukan upgrade perangkat keras, atau menaburkan debu peri ajaib di server.

durron597
sumber
1
Menyatakan bahwa QA tidak peduli bagaimana Anda menyelesaikan masalah adalah pandangan yang sangat sederhana tentang apa yang QA tertarik. Mereka peduli apakah Anda benar-benar meningkatkan kinerja, memperkenalkan utang teknis tambahan, risiko, atau cacat, dll.
Eric
4
@ Eric Dalam pengembangan perangkat lunak, "QA" sebagai grup umumnya tidak merujuk pada pengembang / insinyur. Hutang teknis adalah masalah pengembang / insinyur (dan masalah manajemen karena dapat memengaruhi jadwal, biaya, dll.). Hal yang sama berlaku untuk risiko. Tugas QA adalah memastikan bahwa perangkat lunak tersebut memenuhi persyaratan (dan mungkin secara tidak sengaja membantu dalam proses pembilasan persyaratan yang tidak jelas). Jika mereka peduli dengan implementasi sama sekali, itu hanya harus sebagai cara mencari cara kreatif untuk memecahkan sistem.
jpmc26
3
@ Eric Saya tidak bingung. "QA" tidak merujuk kepada penguji dalam perangkat lunak. Anda mengartikan istilah ini secara luas sehingga harus mencakup seluruh perusahaan yang mengembangkan perangkat lunak dan bahkan klien jika itu adalah sistem yang dibuat khusus untuk mereka, karena setiap orang memiliki andil dalam hal kualitas.
jpmc26
1
@ Eric Tolong jangan membuat saya berdebat tentang bagaimana bahasa dan semantik bekerja dengan Anda. Saya menantang Anda untuk menemukan 5 instance di StackExchange ini di mana istilah itu digunakan dalam waktu kurang dari 30 menit. Selain itu, bahkan dengan definisi itu, yang terbaik yang dapat dilakukan oleh kelompok QA terpisah untuk mengatasi masalah di luar produk itu sendiri adalah dengan memberlakukan kebijakan pada pengembang, dan ketika kebijakan dan proses ditingkatkan di atas membuat produk yang baik, Anda biasanya berakhir dengan produk yang buruk. Juga, saya dapat meyakinkan Anda bahwa orang-orang "QA" yang paling banyak bekerja sama dengan saya adalah penguji, dan tidak banyak bicara tentang proses pengembangan saya.
jpmc26
4
@ Eric: tidak ada yang menghentikan perusahaan atau sekelompok orang yang mendefinisikan "QA" sebagai pandangan yang lebih holistik. Namun, dalam pengalaman saya (di 5 perusahaan yang sangat berbeda) tahap QA seperti yang disebut - dan mereka yang berspesialisasi di dalamnya - dalam pengembangan perangkat lunak biasanya berfokus pada pengujian kotak hitam perilaku sistem. Sementara kami juga mungkin memiliki "Kontrol Kualitas", "Kwalitee" dan lebih banyak nama yang diciptakan untuk mencakup sudut spesialis pada masalah kualitas yang lebih luas.
Neil Slater
3

Mengubur logika bisnis penting atau status sistem jauh di dalam kotak hitam membuat sulit memverifikasi perilaku sistem yang benar. Lebih mudah untuk menguji secara menyeluruh perilaku komponen tunggal dalam sistem daripada keseluruhan sistem. Saya lebih suka mengekspos hal-hal seperti itu secara eksplisit melalui beberapa mekanisme sehingga dapat unit / regresi / integrasi / QA diuji dengan cara yang bermakna.

Salah satu opsi dengan cache adalah membuka halaman khusus yang memberikan beberapa rincian tentang cache (konten, status, dll.). Ini dapat membantu dengan debugging dalam pengembangan dan berpotensi dalam produksi. QA juga dapat menggunakan halaman ini untuk membuat test case untuk cache jika mereka diberikan perincian tentang apa perilaku cache yang diharapkan. Menggunakan penghitung kinerja dan / atau file log untuk secara eksplisit mendokumentasikan perilaku cache adalah pendekatan lain yang kurang terlihat tetapi layak.

Perhatikan bahwa pendekatan ini bukan pengganti untuk pengujian kinerja ujung ke ujung. Ini adalah mekanisme untuk memastikan cache itu sendiri berperilaku dengan benar. Pengujian kinerja harus digunakan untuk menentukan apakah caching memiliki efek yang diinginkan pada kinerja.

Juga catat bahwa menukar komponen sistem dengan yang baru yang mengimplementasikan antarmuka yang sama seperti memperkenalkan cache bisa menjadi perubahan yang tidak stabil dan kompleks. Dengan contoh cache, Anda memperkenalkan status dalam apa yang sebelumnya tidak bernegara, yang dapat membuat bug yang lebih sulit ditemukan atau direproduksi. Perubahan seperti itu harus selalu disertai dengan pengujian regresi penuh untuk memverifikasi perilaku sistem yang diharapkan.

Eric
sumber
3

Tes kinerja, seperti ditunjukkan dalam jawaban Andy.

Saya telah menemukan bahwa hambatan terbesar untuk menerapkan caching (dan kinerja) di banyak organisasi sebenarnya memiliki lingkungan di mana Anda dapat melakukan pengujian kinerja yang baik dan menjalankan tes untuk berbagai beban dunia nyata dan tes kinerja.

Untuk mendapatkan ini, Anda harus mengatur lingkungan pengujian kinerja yang, sedekat mungkin, dan memungkinkan biaya, mencerminkan produksi. Ini mungkin TIDAK akan menjadi lingkungan pengembangan Anda saat ini yang harus lebih kecil dan lebih mandiri untuk memungkinkan pengembangan aplikasi yang cepat. Lingkungan pengembangan juga cenderung menggunakan caching lebih sedikit sehingga tidak mewakili produksi dengan baik untuk pengujian kinerja.

Dalam lingkungan pengujian kinerja, aplikasi harus berjalan dalam 'mode' produksi. Anda harus lebih dari satu server jika produksi berhasil, kumpulan koneksi basis data dan caching harus ditetapkan untuk lingkungan produksi, dll.

Anda juga ingin mempertimbangkan alat untuk membantu pengujian beban.
jmeter sangat populer meskipun saya merasa cukup tidak ramah dan primitif untuk digunakan.
Rute lain yang saya gunakan adalah dengan hanya url curldengan skrip ruby.

Agar jelas

  • pengujian kinerja garis dasar adalah untuk menguji waktu SATU permintaan membuat.
  • pengujian beban mirip dengan pengujian kinerja tetapi melihat respons ketika sistem juga di bawah beban dari permintaan lainnya.

Anda juga dapat menemukan tautan berikut bermanfaat:

Michael Durrant
sumber
2

Ingatlah untuk meminta penguji untuk mem-boot ulang server dan memeriksa apakah data yang mereka masukkan masih ada. Saya melihat sebuah sistem yang memiliki beberapa bulan pengujian, gagal ketika itu dilakukan!

Bagian tersulit untuk diuji adalah bagaimanapun data diperbarui, tidak pernah ada hasil kedaluwarsa yang dikembalikan dari cache.

Ini sebagian dapat dibantu dengan selalu menggunakan data dalam cache untuk mengisi halaman konfirmasi yang dilihat pengguna setelah mereka melakukan perubahan. Misalnya tidak menggunakan objek yang Anda gunakan untuk memperbarui database, tetapi meminta data dari cache, yang kemudian memintanya dari database. Sedikit lebih lambat, tetapi jauh lebih mungkin untuk menampilkan bug lebih cepat.

Ian
sumber
1

Yang ini sebenarnya memiliki jawaban yang sangat mudah dan ini terkait dengan tingkat caching. Apa yang akan Anda amati ketika caching itu benar adalah tidak adanya permintaan pada target permintaan. Jadi, itu datang ke frase QA basi dari "hasil yang diharapkan."

Jika menerapkan cache di tingkat web, maka saya berharap bahwa item yang terkena caching hanya akan muncul sekali untuk setiap sesi pengguna yang diuji (jika menerapkan cache klien) atau sekali untuk beberapa pengguna (jika menerapkan cache gaya CDN). Jika Anda menerapkan cache di tingkat data untuk hasil umum, maka saya akan berharap untuk melihat rasio hit cache yang tinggi di tingkat cache Anda bersama dengan tidak adanya pertanyaan di log profil untuk tingkat data.

dll ...

James Pulley
sumber
0

Beberapa hal lebih baik diuji oleh seorang programmer, mungkin orang yang menulis kode, menggunakan unit test. Menguji kebenaran kode caching Anda adalah salah satunya. (Dari cara Anda mengajukan pertanyaan ini, saya menganggap bahwa orang-orang QA Anda memperlakukan aplikasi sebagai "kotak hitam" dan mengujinya melalui antarmuka eksternal.)

Alex D
sumber
0

Logika cache adalah sesuatu yang harus diuji unit oleh pengembang karena QA terutama melakukan pengujian black-box.

QA hanya akan peduli pada aspek kinerja atau perbaikan apa pun yang Anda implementasikan, Anda dapat memberikan QA mekanisme untuk mengaktifkan / menonaktifkan caching atau mekanisme apa pun yang Anda gunakan untuk meningkatkan kinerja, dan kemudian mereka dapat memverifikasi perbedaan kinerja. Tentu saja QA juga bisa memverifikasi rilis lama terhadap peningkatan kinerja Anda juga.

Fred Thomsen
sumber
-4

Ketika saya menguji solusi caching, kami telah mengimplementasikan apa yang telah kami uji kinerja dasarnya. Kami telah melakukan solusi caching untuk hasil XML dan setelah cache dibutuhkan waktu sangat rendah untuk memberikan respons. Kami juga telah memeriksanya dengan log server dengan memeriksa entri log.

pengguna204667
sumber
3
Saya tidak yakin saya mengerti apa yang Anda katakan, atau apa jawaban Anda mengatakan bahwa tidak ada dalam tujuh jawaban sebelumnya.