Oyun geliştirmede otomatik testler ne kadar yaygındır? [kapalı]


35

Oyun geliştiricileri birim ve entegrasyon testleri yazmak için kullanıyor mu? Bulmaca geliştiricileri arasında ne kadar yaygındır? Ve MMORPG ve FPSes geliştiricileri arasında?

(Oyun geliştirme konusunda hiçbir geçmişim yok, onunla çalışmaktan da korkuyorum - bu sadece başıma gelen bir şüphe. O yüzden, zaten otomatikleştirilmiş testler yazmayı sevdiğim için bile beni onları yazmaya ikna etmeye çalışmak zorunda kalmayacağım . )


3
Stack Exchange'de otomatikleştirilmiş sorular ne kadar yaygındır?
MichaelHouse


Sadece oyun endüstrisinde yaygın olmadıklarından, onları yazmaya devam etmek için çaba göstermemeniz gerektiği anlamına gelmez. Zaten bu soruyla hangi sorunu çözmeye çalışıyorsun?
Tetrad

@Tetrad Sadece soruyu okuyun. İkinci paragraf hepsini açıklar.
brandizzi

Yanıtlar:


37

Genel olarak, oyunların birim ve entegrasyon testleri o kadar yaygın değildir. Bunun nedeni oyunların gerçeklenme yönünün genellikle oyun mekaniğinin geri kalanına yakından bağlı olmasından kaynaklanmaktadır.

Bununla birlikte, oyun geliştirmede birim testi yapılabilir ve kod bunun için ayarlanmışsa büyük yararı olabilir. Bununla birlikte, oyunlara otomatik testler yazmak, genellikle oyunu normal bir oynatıcıdan daha yüksek hızda etkili bir şekilde oynatabilen bir AI programı biçiminde yazmak daha yaygın olabilir. Bu testte otomatik testle ilgili olarak bunu yapan geliştiricilerin mükemmel hikayeleri var . Bu tür otomatik testler potansiyel olarak daha iyidir, çünkü ünite testleri render motorunda bir hata yakalamayabilir, ancak otomatik testlerin böyle bir sorunu ortaya çıkarması daha olasıdır.

Sonunda, yine de, tüm bunlar stüdyoya bağlı. Bazı stüdyolar bazı otomatik testler gerçekleştirirken, diğerleri yaz boyunca saatlerce oyun oynamak için yaz boyunca 20 lise çocuğunu tutabilirler.


17
+1, çünkü hepimiz bu çocuklardan biri olmayı diliyoruz. :(
Bobby

13
@Bobby Kendin için konuş. En son Barney the Dinosaur oyunu gibi bir şeyi test etmek için görevlendirilmeseniz bile, buggy ve bitmemiş oyunları tekrar tekrar oynamaya zorlamak korkunç bir düşüncedir.
Dan Neely

9
@Bobby, yaklaşık 3-4 yıl boyunca KG'yim, yazılımı kırıp o sektörde çalışmayı seviyorsanız, çünkü 'bütün gün oyun oynamayı seviyorsunuz' gibi bir iş yapıyordum :)
JuniorDeveloper1208

9
QA'da yaklaşık altı ay kaldım. İşimdeki ikinci günümün sonunda arabama yürürken, kendime "Sonunda bu işten nefret etmek için kendimi görebildiğimi görebildiğimi" düşündüğümü hatırlıyorum. Ve üçüncü günümün sonunda, "Bu işten gerçekten nefret ediyorum". İşin talepleriyle başa çıkabilen iyi kalite güvence test edicileri altındaki ağırlığına değiyorlar ve onlardan daha fazla değer almadıkları ve tazmin edilmedikleri bir suç.
Trevor Powell,

16

Benim tecrübeme göre, çok yaygın değil.

Çoğunlukla ünite testi yapılmaz çünkü çoğu oyun geliştiricisi böyle şeylerin yaygınlaşmasından önce bir zaman ve kültürden gelir ve bu nedenle bu tür yöntemlerin gerekli olduğu iddiasını şimdi yapmak zordur. Bu, son yıllarda kullanıcının piyasaya sürüldükten sonra kendi yazılımını yamalayabileceği beklentisiyle daha da gerçek oldu.

Kısmen bunun nedeni oyun geliştirme endüstrisindeki baskın dilin C ++ olması ve ünite testlerinin diğer dillerden biraz daha hantal olmasını sağlamasıdır. Birim test çerçeveleri mevcuttur, ancak test durumlarının tespitini hızlandırmak için yansıma ve benzer püf noktalarını kullanabilen daha modern dillerde benzer sistemler kadar kullanımı kolay değildir.

Ayrıca, oyunlar genellikle kendilerini birim testlerine borç vermedikleri için - mantığın çoğu yarı deterministik kaynaklara (örn. Grafik donanımı, giriş zamanlamaları, kare hızı) bağlıdır, çıktının büyük kısmını ölçmek zordur (örn. Ekrandaki grafikler, ses efektleri) ve bazıları oyunun tam bağlamı dışında (örneğin, karmaşık reaktif AI, fizik simülasyonları) neredeyse anlamsız. İstisnalar var - çoğu, kodu bu şekilde yapmak için çok çalışıyorsanız - ancak tüm testlerde oyunlarda diğer yazılım türlerine göre daha pahalıdır ve bu nedenle maliyet / fayda oranı daha şüphelidir.

Entegrasyon testi gelince, oyun geliştirmede açıkça kullanıldığını açıkça duymadım ama birçok geliştirici mümkün olan tüm sistemin otomatik testlerini yaptı. Tahmin ediyorum, belki de 3 profesyonel geliştiriciden 1'i bunu yapmak isterim, çünkü her zaman kurulumu kolay değildir ve büyük olasılıkla her geliştiricinin (veya yayıncısının) bir QA'sına sahip olmasının faydaları azalır. manuel olarak benzer testleri yapacak olan departman. KG, genellikle geliştiricilere göre çok daha az ödenir; bu nedenle, üzerine fazladan kod zaman harcamak yerine, testlerden kendilerine ayrılmak ekonomik olabilir. (Kontrollü.)


5
Çıktının ölçülmesinin zor olduğu nokta. JSON’un sözdizimsel olarak doğru bir sınıfın tükürdüğünü otomatik olarak test etmek kolaydır, ancak atış gerçekten oyun oynamak olduğunda ragdolllerinizin kontrolden çıkmadığından emin olmanın tek yolu. En kötü yanı, bunun yan etkilerin fark edilmesini gerçekten zorlaştırmasıdır (yani, bir hatayı düzeltirsiniz, ancak şimdi oyunun diğer bazı uzak kısımları farklı davranır.)
jhocking

8

Bir oyun yazmanın, testler kadarıyla herhangi bir yazılımdan ne kadar farklı olduğunu anlamıyorum. Yazılımın her bir bileşeni, ister zamanlanmış bir olayı tetiklediğini, ister oyun içi karaktere komut göndererek ya da menü düğmelerine basarak, uygun yürütme için test edilmelidir.

Oyunun tamamlanmasının mümkün olup olmadığını test etmek farklı bir konudur ve ünite veya entegrasyon testlerine girmez.


8

Genel olarak, kullanıcı arayüzü testini otomatikleştirmek (normal programlarda bile) normal otomasyondan daha zordur. Bu nedenle, oyunlarınız için birim testleri yazabilseniz de, asıl oyunu test etmek daha zordur. Çoğu şirket oyunu çalıştırmak insan test kullanmak zaman tekrar.

Örneğin İşte onlar küçük Game Studio (2 Devs) bu işler nasıl açıklayan bir makale. Okuduklarımdan itibaren doğrulamaları çok ayrıntılı gözükmüyor gibi görünüyor (otomasyon oyunu başlatıyor ve herhangi bir hatayı / iddiasını kaydediyor).

Bununla birlikte, bazı şirketler yarı otomasyon konusunda oldukça başarılıdır (Microsoft Test Studios gibi). Diğer bir deyişle, Geliştiriciler veya SDET'ler, oyunu test etmeyi çok kolaylaştıran araçlar oluşturur. Örneğin Crackdown'ı veya Fable'ı nasıl test ettiklerini tartıştıkları Gamefest konuşmaları yapıldı . Örneğin, hala her nesnenin olması gerektiği yerde olduğunu doğrulayan test ediciler kullanıyorlar, ancak bu konumun anlık görüntüsünü alan bir araç kullanıyorlar, böylece insanın yaptığı tümün oyunu oynamak zorunda kalmadan görsel olarak orada olduğunu doğrulıyor.

İşte , oyunları test etmek için ne tür araçlar geliştirdikleri / kullandıkları hakkında güzel bir konuşma. "Test Lider Mücevherleri: Oyunlarımızın Artan Karmaşıklığının Önüne Çıkmak"


4

Bununla birlikte, MMO ve çok oyunculu sunucu kodunun biraz daha sık test edildiğine bahse girerim.

En azından, otomatik regresyon testleri yaygındı. Bunları sunucunun başlatılması sırasında toplu akıl sağlığı kontrolleri olarak görmüştüm, örneğin yeni bir "bulut" sunucunun oyuncuları kabul etmeye başlamadan önce doğru bir şekilde yapılandırıldığından emin olmak için; Bu durumda, 3-4 yıldan fazla bir süredir inşa edilmiş oldukça iyi bir regresyon paketi, yaklaşık 4 saniye sürdü, sanal bir ana bilgisayarı (boş bir işletim sistemi görüntüsünden) getirmek neredeyse 10 dakika sürdü, bu yüzden zamana değdi. Aynı testleri Subversion depomuzdaki bir "tinderbox" (sürekli derleme sistemi) üzerinde de denedik, içine sürünmeyi seven bazı sinir bozucu, oldukça yaygın hataları kontrol etmek için. nesnelerin etrafından geçerken kopyalarını oluşturun: nesne başlatması, önbellekleme, ve ağ geçiş kodu% 100'e yakındı; Test edilebilecek her şeyi düşündüğümüzü düşünmeye devam ettik ve sonra da “eğlenceli” yeni bir vaka keşfetti.

Üzerinde çalıştığım bazı MMO'larda, ilk birim testini gerçekleştirmek için "saplama istemcileri" geliştirdik ve genellikle yeni özelliklerin geçici birim testini yapmak için "operatör" komutları verdik. Bu, istemci bundan yararlanmaya hazır olmadan önce sunucu kodunu çalıştırmamıza izin verir ve hata kurtarma işleyicilerinin iyi çalışmasını sağlamak için "imkansız" durumları (örneğin bir duvarın içine bir oyuncuyu ışınlamak) uygular. Sunucuda çevrimiçi olarak yeni bir özellik oluşturmak bazen bunun için müşteri desteğinden daha az gün alabilir; tersine, bazen bizden önce gelirlerse sahte ama iyi biçimlendirilmiş verileri döndüren müşteri için "sahte" bir sunucu yöntemi oluşturmak zorunda kalırdık.

Ancak, genel olarak MMO gelişimi, çevreyi yansıtabilecek bu tür sorunların çoğuna maruz kalmaktadır. Gömülü oyun sistemlerinde çalışırken, “test etme”, yeniden kullanılabilir bazı widget kodları (örn. Metin editörleri) dışında hiçbir şey için neredeyse hiç duyulmamış bir durumdu.


3

Otomatik testlerin Oyun Geliştirmede bu kadar yaygın olmamasının bir başka nedeni de, çoğu oyun için, oyun piyasaya sürüldüğünde Oyun Beta'ya katılımın bir "avantaj" olduğunu düşünen pek çok Beta testi gönüllüsü olmasıdır. Otomatik testler elbette kalite gereksinimlerinden değil, aynı zamanda bütçe kısıtlamalarından da çıkmıştır. Bu nedenle, oyunlarda ücretsiz olarak denemeye hazır çok sayıda deneyimli test cihazı bulunduğundan, belki de bu otomatik testlerin bu kadar yaygın olmamasının bir başka nedenidir.


3

GDC 2011'de otomatik testler hakkında bir yuvarlak masa toplantısına katıldım . IIRC, odada yaklaşık 60 kişi vardı. Bir noktada moderatör birim test kapsamı anketi yaptı. Orada bir kişi % 90 daha kod kapsama iddia etti. Diğer herkes, % 1 oranında bir kapsama alanına girme düşüncesiyle güldü . Eğer bu grup bir bütün olarak sektörün adil bir temsili ise, otomatikleştirilmiş testlerin genel olarak pek bir şey olmadığını söyleyebilirim.

Buradaki diğer cevaplar neden olarak iyi sebepler vermektedir. İlk elden hesap açmanın faydalı olacağını düşündüm.


Rakamın çok düşük olmasına şaşırdım (gamedev'lerin üçte birinden fazlasının, benim cevabımda dediğim gibi, bu testleri kullanmasını beklememeyi umuyorum). Üzerinde çalıştığım sunucu yazılımı olan bazı kişisel anekdot kanıtları eklemek için % 70'in üzerinde birim test kapsamına sahiptir. Muhtemelen biraz sıkı çalışmayla% 85'e ulaşabilirim, ancak son% 15'i yapmak istemediğim çeşitli bağımlılık enjeksiyon sıkışmalarını içerecekti. Buna karşılık, istemci yazılımı birim sınaması neredeyse imkansızdır, bu nedenle manuel teste odaklanırız.
Kylotan

Bir Lua projesinde, anlatma ve alay etme kolaylığı sayesinde, geliştirme sırasında% 100 kapsama almayı başardım. Ancak, birçok testin ilgi çekici olmadığını farkettim (örneğin, kullanıcı arayüzünün tam olarak yerleştirilmesi veya verilerin yönlendirilmesi gereken ama gerçekten kodda yapılması gerekenler gibi). İşleri daha temiz tutmak için, kodu "motor" (yeniden kullanılabilir) ile oyuna özgü olarak ayırdım ve yalnızca tüm motor kodunu kapsadığından emin oldum, kapsama alanı oyun kodu için dalgalanıyor (hala düşük seviye sınıfları test etmek kolay ve fiziği karıştırmak kolay olduğu için özel fizik yapın, ancak artık yüksek seviye kullanıcı arayüzü / görüntü oluşturma).
hsandt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.