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.
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.
Jawaban:
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.
Untuk MMO yang saya kerjakan (pengembang 100ish, fokus PC), kami mencoba menambahkan berbagai macam pengujian otomatis dengan berbagai keberhasilan. Inilah yang berhasil:
Apa yang tidak berhasil:
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".
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.
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.
Pengalaman saya dengan Pengujian Otomatis selama pengembangan Crysis 2 tersedia di sini: http://yetanothergameprogrammingblog.blogspot.com/2010/06/aaa-automated-testing.html
Ringkasan:
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.