Pengujian game secara otomatis [ditutup]

54

Apakah ada metode pengujian game secara otomatis?

Pengalaman khusus dihargai, dengan informasi yang relevan tentang proyek seperti platform dan jenis permainan jika itu membantu dengan klarifikasi.

slicedlime
sumber

Jawaban:

74

Game mandiri satu orang. Itu adalah permainan tangki multipemain dengan medan yang dapat dirusak, dan medan yang dapat dirusak serta kode tumbukan terbukti agak serpihan.

Saya akhirnya mencurangi beberapa AI dasar bodoh (dengan "bodoh", maksud saya "benar-benar bodoh" - mereka secara acak akan memilih "drive menuju tank musuh", "drive away from tank musuh", dan "drive dalam arah acak" ", sembari menembakkan senjata utama secara acak) dan memainkan game dengan framerate maksimum saat merekam penekanan tombol. Saya mendapat sekitar 10-15x realtime. Kode ini sangat ditegaskan, jadi jika ada yang salah, itu akan membuang seluruh log penekanan tombol ke disk bersama dengan laporan kesalahan dan seed acak awal. Saya kemudian bisa pergi dan memutar ulang keypress log untuk menduplikat keadaan dengan tepat, atau hanya men-debug dari laporan kesalahan.

Saya membiarkannya berjalan terus-menerus selama berbulan-bulan. Pada awalnya jarang mendapatkan satu jam tanpa menabrak - saya harus duduk di sana dan mengasuhnya selama seminggu, membunuh beberapa bug yang tidak jelas per hari. Akhirnya sampai pada titik di mana ia berjalan selama satu minggu di antara kegagalan, yang berarti sekitar 1500 jam pemain per kecelakaan.

Itu sangat berharga dan saya sungguh-sungguh merekomendasikannya.

ZorbaTHut
sumber
1
Sangat apik! Ya, keylog adalah kemenangan murni.
David McGraw
1
Saya bingung: "memasang beberapa AI dasar bodoh" dan "merekam penekanan tombol" - siapa yang menekan tombol? Saya pikir Anda membiarkan AI Anda bermain sendiri tanpa manusia? Apakah Anda benar-benar membiarkan AI Anda memainkan game dengan mensimulasikan penekanan tombol alih-alih memanggil fungsi api? Sekarang itu akan menjadi apik!
Dave O.
4
@Dave Ya saya akui itu berpotensi membingungkan. AI dirancang untuk menyediakan semua output mereka melalui pengontrol yang disimulasikan. Mereka mengambil status permainan sebagai input, tetapi tidak mengubah kondisi game dengan cara apa pun. Ini mungkin merupakan ide yang mengerikan dengan UI mouse tetapi seluruh antarmuka dilakukan dengan gamepad, jadi itu agak jelek tapi fungsional. Saya merekam penekanan tombol virtual AI, dan di samping itu, kode yang sama mencatat penekanan tombol nyata ketika mengujinya dengan teman-teman.
ZorbaTHut
32

Untuk MMO yang saya kerjakan (pengembang 100ish, fokus PC), kami mencoba menambahkan berbagai macam pengujian otomatis dengan berbagai keberhasilan. Inilah yang berhasil:

  • Tes dasar selama proses pembuatan otomatis kami adalah kemenangan besar. Ini termasuk tugas-tugas seperti membuat karakter, mentransfer peta, menjalankan beberapa tes UI skrip dan mencari perilaku yang diharapkan. Ini menangkap sejumlah besar bug sebelum mereka benar-benar sampai ke perusahaan.
  • Pada akhir infrastruktur server, kami mengembangkan banyak tes otomatis berbeda yang mensimulasikan transaksi server MMO khas. Kami kemudian dapat memutar ini dalam berbagai keadaan untuk membandingkan kinerja atau memastikan keamanan. Seiring waktu, tes ini menjadi lebih dan lebih akurat hingga berubah menjadi pemutaran data yang direkam secara langsung
  • Kami menulis "pemain palsu" yang akan berkeliaran secara acak di seluruh dunia, melompat, membunuh, dan mengatakan hal-hal acak dalam obrolan. Ini menemukan sejumlah besar masalah fisika dan infrastruktur.

Apa yang tidak berhasil:

  • Kami mencoba menambahkan beberapa tes otomatis berorientasi tempur yang sangat spesifik ke pembuat otomatis, tetapi ini pada dasarnya tidak pernah berhasil. Ini akan bekerja selama sekitar 3 hari setelah diimplementasikan, sampai seorang desainer atau artis mengubah sesuatu dan tes akan gagal, membuang alarm gagal. 90% dari waktu itu bukan masalah nyata. Tes-tes ini terlalu rapuh, dan benar-benar menguji gameplay tertentu pada peta tertentu dengan kekuatan tertentu bisa tidak dapat dipertahankan
  • Kami mencoba menerapkan tes kinerja otomatis yang akan membandingkan kinerja klien (FPS rata-rata, dll) dengan kinerja yang direkam dari seminggu yang lalu. Ini juga cukup rapuh karena demo yang kami gunakan untuk ini cenderung membusuk cukup sering, dan sulit untuk memastikan apakah perlambatan disebabkan oleh kerugian aktual dalam kinerja atau efek samping dari proses pengujian.
Ben Zeigler
sumber
18

Bekerja pada gim strategi 4x dengan pertarungan 3d (anggap Homeworld bertemu Masters Of Orion) yang sayangnya tidak pernah melihat hari yang cerah ketika perusahaan kehabisan dana ..

Saya selalu memastikan bahwa Anda bisa memainkan permainan tanpa pemain manusia sehingga kami bisa membiarkan permainan berjalan semalam.

Kami dapat mematikan pertarungan 3d (disederhanakan menjadi hasil acak) dan kami membiarkan mesin strategi AI bermain sendiri. Ini menemukan banyak bug dan masalah. Tidak hanya menunjukkan bug stopper tetapi bug strategi di mana (mis.) Strategi AI akan menemui jalan buntu dan menghabiskan 1000 putaran ternyata tidak melakukan "hal yang benar". Bug semacam ini sulit dikenali hanya "bermain game".

PhillC
sumber
Hm, saya tidak akan menganggap ini sebagai pengujian otomatis - tapi saya kira Anda benar. Saya telah melakukan hal yang sama selama beberapa tahun, tidak pernah berpikir seperti itu.
mmyers
13

Pada penembak orang pertama yang saya kerjakan (Descent 3 - linux / mac / windows, ~ 30 orang di tim pada tahun 1999), kemampuan merekam / memutar demo ternyata sangat berguna. Saya membuat pilihan di mana Anda dapat memutar demo secepat permainan dapat membuat bingkai, dan itu menjadi cara yang bagus untuk memverifikasi kinerja setelah banyak hal berubah.

Itu juga menjalankan banyak kode di luar sistem rendering, jadi itu adalah pemeriksaan kewarasan yang bagus. Setelah melakukan banyak perubahan, saya hanya bisa menjalankan pemutaran demo gameplay 10 menit. Sering kali itu akan menangkap bug di daerah yang saya tidak akan berpikir untuk memeriksa sendiri.

kevin42
sumber
8

Kami memiliki penembak openworld (x360, PS3, PC) yang menggunakan smoketest cepat pada server build - itu memuat game, melangkah melalui ujung depan, berlari [avatar] ke depan, membuang screenshot, dan keluar. Jika cctray mendeteksi jalan keluar yang bersih, pembangunannya berhasil.

Kami menjalankannya selama sekitar tahun terakhir proyek, dan dengan ukuran tim ~ 100 devs.

Itu efektif dalam menangkap bug showstopping tetapi mudah untuk membuat build yang melewati level smoketest tetapi gagal pada level "nyata" yang paling, atau tidak bekerja dalam multipemain, atau membuat AI AI jadi tidak sempurna, jadi itu tidak sempurna. Itu pasti layak dilakukan.

Saya sudah mendengar sejak saya pergi, mereka mulai menjalankan smoketest yang lebih besar, yang diangkut ke beberapa PC. Tampaknya memelihara smoketests adalah masalah, dan ada tim kecil yang didedikasikan untuk hanya menjaga server dan perangkat lunak tetap terjaga, jadi saya tidak bisa mengatakan apakah itu berhasil atau tidak.

tenpn
sumber
6

Pengalaman saya dengan Pengujian Otomatis selama pengembangan Crysis 2 tersedia di sini: http://yetanothergameprogrammingblog.blogspot.com/2010/06/aaa-automated-testing.html

Ringkasan:

  • Pengujian otomatis meningkatkan stabilitas hasil, meningkatkan produktivitas untuk pembuat konten dan insinyur
  • Pengujian otomatis adalah alat yang efektif untuk meningkatkan kualitas kode dan mengurangi kemungkinan harus bekerja lembur
  • Industri Game secara keseluruhan sangat reaksioner secara umum, pengujian otomatis memenuhi beberapa argumen yang tidak masuk akal
  • Jangan menyebutnya pengujian, menyebutnya sesuatu yang lain, hampir apa pun (Lihat Pengembangan Perilaku-Didorong)
  • Bersikap fleksibel, menulis tes yang baik itu sulit dan membutuhkan keterampilan yang tidak banyak tersedia di Industri Game
Francesco Carucci
sumber
2

Pengembangan game sebenarnya adalah salah satu kasus di mana pengujian unit tampaknya masuk akal bagi saya, karena interaksi antara sistem diskrit sangat umum. Desain per kontrak tentu saja merupakan bagian dari ini, dan harus direncanakan sejak hari pertama pengembangan, tetapi saya tidak melihat mengapa itu tidak dapat diimplementasikan kemudian dengan asumsi di mana cara untuk melakukannya ada.

Bagian yang sulit tentu saja adalah pengujian integrasi. Banyak permainan yang bisa diuji hanya dengan demo-looping atau semacamnya, tetapi hal-hal itu secara konsep cukup mudah untuk di-debug - di mana saya lebih tertarik menghabiskan waktu saya mengekspos bug yang akan terjadi ketika seorang pemain melakukan sesuatu, dengan pola pikir bahwa bug yang tidak pernah dilihat pemain jelas kurang penting daripada bug yang dilakukan pemain.

Yang cukup sulit, tentu saja. Taktik yang berfungsi pada aplikasi lain (fuzzing, diharapkan lulus / diharapkan gagal, dll.) Tidak berfungsi dengan baik di sini. Dalam sistem skrip sepertinya membangun serangkaian tes skrip untuk mensimulasikan pemain adalah cara untuk pergi (lihat jawaban JZig). Tetapi pengujian khusus untuk hal-hal yang mungkin ditemui pemain secara langsung mengejutkan saya sebagai tempat terbaik untuk memfokuskan waktu Anda untuk keperluan pengujian manusia dan otomatis.

Ed Ropple
sumber
9
Tetapi pemain tidak pernah melakukan apa yang Anda harapkan dilakukan oleh orang waras. Itu sebabnya Anda tidak melihat hal-hal seperti gangguan lift di Call of Duty sampai setelah rilis. Karena ada ribuan orang yang melakukan hal-hal yang tidak pernah dipikirkan oleh pengembang dan penguji. Segera setelah seseorang membuat simulasi sempurna gamer berusia 16 tahun yang obsesif-kompulsif, kita akan mencapai singularitas pengembangan permainan :)
Casey Wagner