Seberapa umum pengujian otomatis dalam pengembangan game? [Tutup]

35

Apakah gamer pengembang gunakan untuk menulis unit dan tes integrasi? Seberapa umumkah itu di antara para pengembang puzzle? Dan di antara pengembang MMORPG dan FPSes?

(Saya tidak memiliki latar belakang dalam pengembangan game, saya juga tidak tertarik untuk bekerja dengannya - itu hanya keraguan yang terpikir oleh saya. Jadi, tidak perlu mencoba meyakinkan saya untuk menulisnya, bahkan karena saya sudah suka menulis tes otomatis. )

brandizzi
sumber
3
Seberapa umum pertanyaan otomatis di Stack Exchange?
MichaelHouse
2
kemungkinan duplikat pengujian game secara Otomatis
bummzack
Hanya karena mereka tidak umum di industri game tidak berarti Anda tidak harus berusaha untuk terus menulisnya. Masalah apa yang Anda coba selesaikan dengan pertanyaan ini?
Tetrad
@Tradrad Baca saja pertanyaannya. Paragraf kedua menjelaskan semuanya.
brandizzi

Jawaban:

37

Secara umum, pengujian unit dan integrasi gim tidak umum. Ini sebagian besar karena aspek rendering permainan biasanya terkait erat dengan mekanik permainan lainnya sehingga sangat sulit untuk benar-benar menulis unit test yang berfungsi.

Yang mengatakan, pengujian unit dapat terjadi dalam pengembangan game, dan jika kode diatur untuk itu, itu bisa sangat bermanfaat. Namun, bisa jauh lebih umum untuk menulis tes otomatis untuk gim, biasanya dalam bentuk program AI yang secara efektif dapat memainkan gim dengan kecepatan lebih tinggi daripada pemain normal. Ada beberapa kisah luar biasa dari pengembang yang melakukan hal itu dalam pertanyaan tentang pengujian otomatis ini . Pengujian otomatis semacam ini berpotensi lebih baik, karena pengujian unit mungkin tidak menangkap bug di mesin render, tetapi pengujian otomatis lebih mungkin untuk mengekspos masalah seperti itu.

Pada akhirnya, ini semua tergantung pada studio. Beberapa studio akan melakukan semacam pengujian otomatis, sementara yang lain mungkin hanya mempekerjakan 20 anak sekolah menengah selama musim panas untuk bermain game mereka selama berjam-jam.

thedaian
sumber
17
Memberi +1 hanya karena kita semua berharap kita adalah salah satu dari anak-anak ini. :(
Bobby
13
@Obby Bicaralah untuk dirimu sendiri. Terpaksa bermain buggy dan game yang belum selesai berulang kali adalah pemikiran yang mengerikan, bahkan jika Anda tidak ditugaskan untuk menguji sesuatu seperti game Barney the Dinosaur terbaru.
Dan Neely
9
@ Bob, saya adalah QA selama sekitar 3-4 tahun, ini adalah pekerjaan yang hebat jika Anda suka memecahkan perangkat lunak dan bekerja di industri itu, tetapi jangan lakukan itu karena 'Anda suka bermain game sepanjang hari' :)
JuniorDeveloper1208
9
Saya berada di QA selama sekitar enam bulan. Sambil berjalan ke mobil saya di akhir hari kedua saya di tempat kerja, saya ingat dengan jelas berpikir dalam hati, "Saya bisa melihat diri saya akhirnya membenci pekerjaan ini." Dan di akhir hari ketiga saya, "Saya benar-benar benci pekerjaan ini." Penguji QA yang baik yang dapat mengatasi tuntutan pekerjaan bernilai emas, dan itu merupakan kejahatan karena mereka tidak dihargai dan diberi kompensasi lebih tinggi daripada mereka.
Trevor Powell
16

Dalam pengalaman saya, itu tidak terlalu umum.

Sebagian besar pengujian unit tidak terjadi karena sebagian besar pengembang game berasal dari waktu dan budaya sebelum hal-hal seperti itu tersebar luas, dan karena itu sulit untuk membuat argumen sekarang karena metode seperti itu diperlukan. Ini menjadi lebih benar dalam beberapa tahun terakhir dengan harapan bahwa pengguna dapat menambal perangkat lunaknya sendiri setelah rilis.

Sebagian karena bahasa yang dominan di industri pengembangan game adalah C ++ dan itu membuat pengujian unit sedikit lebih rumit daripada bahasa lain. Kerangka kerja pengujian unit ada tetapi tidak semudah menggunakan sistem serupa dalam bahasa yang lebih modern yang dapat menggunakan refleksi dan trik serupa untuk mempercepat deteksi kasus uji.

Juga, itu karena permainan umumnya tidak cocok untuk pengujian unit - banyak dari logika tergantung pada sumber semi-deterministik (misalnya perangkat keras grafis, timing input, frame rate), sebagian besar output sulit diukur (misalnya. pada layar grafis, efek suara) dan beberapa hampir tidak berarti di luar pembuatan konteks permainan penuh (mis. AI reaktif kompleks, simulasi fisika). Ada pengecualian - banyak, jika Anda bekerja keras untuk membuat kode seperti itu - tetapi secara keseluruhan pengujian lebih mahal dalam game daripada di sebagian besar jenis perangkat lunak lain dan karenanya rasio biaya / manfaat lebih meragukan.

Sedangkan untuk pengujian integrasi, saya belum pernah mendengar istilah yang secara eksplisit digunakan dalam pengembangan game tetapi banyak pengembang melakukan tes otomatis dari seluruh sistem jika memungkinkan. Pada tebakan saya akan mengatakan mungkin 1 dari 3 pengembang pro melakukan ini, karena tidak selalu mudah untuk mengatur, dan karena manfaatnya berkurang oleh fakta bahwa hampir setiap pengembang menengah ke besar (atau penerbit mereka) memiliki QA departemen yang secara manual akan melakukan tes serupa. QA biasanya dibayar jauh lebih sedikit daripada pengembang sehingga dianggap ekonomis untuk menyerahkan pengujian kepada mereka, daripada menginvestasikan waktu kode tambahan untuknya. (Kontroversial.)

Kylotan
sumber
5
Poin bagus tentang output menjadi sulit untuk diukur. Sangat mudah untuk secara otomatis menguji bahwa suatu kelas meludahkan, katakanlah, JSON yang benar secara sintaksis, tetapi satu-satunya cara untuk memastikan bahwa ragdolls Anda tidak lepas kendali ketika tembakan adalah untuk benar-benar memainkan permainan. Bagian terburuknya adalah hal ini membuatnya sangat sulit untuk melihat efek samping (mis. Anda memperbaiki bug, tetapi sekarang beberapa bagian terpencil lain dari permainan berperilaku berbeda.)
jhocking
8

Saya tidak melihat bagaimana menulis permainan berbeda dengan perangkat lunak lain sejauh pengujian berlangsung. Setiap komponen perangkat lunak, apakah itu memicu peristiwa waktunya, mengirim perintah ke karakter dalam game, atau menekan tombol menu, harus diuji untuk eksekusi yang tepat.

Menguji apakah permainan bisa diselesaikan adalah masalah yang berbeda dan tidak termasuk dalam unit atau pengujian integrasi.

Makanan Tangan
sumber
8

Secara umum pengujian UI otomatis (bahkan dalam program reguler) lebih sulit daripada otomatisasi biasa. Jadi meskipun Anda bisa menulis unit test untuk gim Anda, menguji gim yang sebenarnya lebih sulit. Sebagian besar perusahaan menggunakan penguji manusia yang menjalankan game berkali -kali.

Sebagai contoh, Berikut adalah artikel yang menjelaskan bagaimana mereka melakukannya di Game Studio kecil (2 devs). Dari apa yang saya baca sepertinya validasi mereka tidak terlalu detail (otomatisasi memulai permainan dan mencatat kesalahan / pernyataan).

Namun beberapa perusahaan sangat sukses dengan semi otomatisasi (Seperti Microsoft Test Studios). Artinya, Pengembang atau SDET membangun alat yang membuat pengujian game lebih mudah. Ada pembicaraan Gamefest di mana mereka membahas bagaimana mereka menguji Crackdown misalnya atau Fable. Misalnya, mereka masih menggunakan penguji yang memverifikasi bahwa setiap objek berada di tempat yang seharusnya tetapi mereka menggunakan alat yang mengambil snapshot dari lokasi itu sehingga semua yang dilakukan manusia secara visual memverifikasi itu ada di sana tanpa harus bermain game.

Berikut ini adalah pembicaraan yang baik tentang alat apa yang mereka bangun / gunakan untuk menguji permainan. Ini disebut "Test Lead Gems: Keluar di Depan Kompleksitas yang Meningkat dari Permainan Kami"

Krolth
sumber
4

Saya ingin bertaruh bahwa MMO dan kode server multipemain, sedikit lebih sering diuji.

Paling tidak, tes regresi otomatis sudah biasa dilakukan. Saya telah melihat ini diimplementasikan sebagai pemeriksaan kewarasan massal selama server start-up, misalnya memastikan bahwa server "cloud" baru dikonfigurasi dengan benar sebelum mulai menerima pemain; suite regresi yang cukup bagus yang dibangun selama 3-4 tahun, dalam hal ini, berlari dalam waktu sekitar 4 detik, sementara membawa host virtual (dari gambar OS kosong) membutuhkan waktu hampir 10 menit, jadi itu layak waktu. Kami menjalankan tes yang sama pada "tinderbox" (sistem pembangunan berkelanjutan) pada repositori Subversion kami untuk memeriksa beberapa kesalahan yang cukup umum dan menyebalkan yang suka menyusup kembali. Secara khusus, fungsi multi-server memiliki kebiasaan buruk dalam mencoba untuk membuat duplikat objek saat mereka diedarkan: objek objek, caching, dan kode kelulusan jaringan mendekati 100% tercakup; kami terus berpikir bahwa kami telah memikirkan segala hal yang dapat diuji, dan kemudian menemukan beberapa "menyenangkan," kasus tepi baru.

Di beberapa MMO yang telah saya kerjakan, kami juga akan mengembangkan "rintisan klien" untuk melakukan pengujian unit awal, dan biasanya memberikan perintah "operator" untuk melakukan pengujian unit ad-hoc fitur baru. Ini memungkinkan kami mengeksekusi kode server sebelum klien siap untuk mengambil keuntungan darinya, dan melakukan situasi yang "tidak mungkin" (misalnya memindahkan pemain di dalam dinding) untuk memastikan bahwa penangan pemulihan kesalahan akan bekerja dengan baik. Membawa fitur baru secara online di server terkadang membutuhkan waktu berhari-hari kurang dari dukungan klien untuk itu; sebaliknya, kadang-kadang kita harus membuat metode server "dummy" untuk klien, mengembalikan data palsu tapi terbentuk dengan baik, jika mereka mendahului kita.

Namun, pengembangan MMO secara umum lebih banyak mengalami masalah seperti ini, yang mungkin mencerminkan lingkungan. Ketika saya sedang bekerja pada sistem permainan tertanam, "pengujian" praktis tidak pernah terdengar untuk apa pun kecuali beberapa kode widget yang dapat digunakan kembali (misalnya editor teks).

BRPocock
sumber
3

Alasan lain mengapa pengujian otomatis tidak umum dalam Pengembangan Game yang dapat dipertimbangkan adalah bahwa untuk sebagian besar game ada banyak sukarelawan pengujian Beta yang menganggap partisipasi Game Beta sebagai "ujung" ketika game dirilis. Pengujian otomatis tentu saja tumbuh dari persyaratan kualitas, tetapi juga di luar batasan anggaran. Oleh karena itu, karena dalam permainan ada banyak penguji berpengalaman yang siap untuk menguji secara gratis, mungkin inilah alasan lain mengapa tes otomatis tidak tersebar luas.

Oke
sumber
3

Saya berpartisipasi dalam diskusi meja bundar tentang pengujian otomatis di GDC 2011 . IIRC, ada sekitar 60 orang di ruangan itu. Pada satu titik, moderator mengambil survei cakupan unit test. Ada satu orang yang mengklaim cakupan kode lebih dari 90%. Semua orang menertawakan membayangkan akan mencapai 1% pertanggungan. Jika grup itu adalah representasi industri yang adil secara keseluruhan, saya akan mengatakan pengujian otomatis umumnya tidak banyak terjadi, jika tidak sama sekali.

Jawaban lain di sini memberikan alasan yang bagus mengapa. Saya hanya berpikir akan bermanfaat jika memiliki akun tangan pertama.

Michael Kristofik
sumber
Saya terkejut angkanya sangat rendah (walaupun saya tidak akan mengharapkan lebih dari sepertiga dari gamedev untuk menggunakan tes seperti itu, seperti yang saya katakan dalam jawaban saya.) Untuk menambahkan beberapa bukti anekdotal pribadi, perangkat lunak server yang sedang saya kerjakan memiliki cakupan tes unit lebih dari 70%. Saya mungkin bisa mencapai 85% dengan sedikit kerja keras, tetapi 15% terakhir akan melibatkan berbagai contortions injeksi ketergantungan yang saya tidak mau lakukan. Sebagai perbandingan, perangkat lunak klien hampir tidak mungkin untuk unit test sehingga kami fokus pada pengujian manual.
Kylotan
Pada proyek Lua, berkat kemudahan stubbing dan ejekan, saya berhasil menjaga cakupan 100% selama pengembangan. Namun, saya melihat banyak tes yang tidak menarik (seperti pengujian penempatan UI yang tepat, atau apa pun yang harus didorong data tetapi kebetulan dilakukan dalam kode yang benar-benar). Agar semuanya lebih bersih, saya membagi kode antara "engine" (dapat digunakan kembali) dan khusus game, dan hanya memastikan untuk mencakup semua kode mesin, sementara cakupan berfluktuasi untuk kode game (saya masih menguji kelas tingkat rendah karena mudah untuk lakukan, dan ubahsuaikan fisika karena mudah dikacaukan; tetapi tidak UI / rendering tingkat tinggi lagi).
hsandt