Quanto sono comuni i test automatizzati nello sviluppo del gioco? [chiuso]


35

Gli sviluppatori dei giocatori usano per scrivere test di unità e integrazione? Quanto è comune tra gli sviluppatori di puzzle? E tra gli sviluppatori di MMORPG e FPS?

(Non ho alcuna preparazione nello sviluppo del gioco, né sto pensando a come lavorarci - è solo un dubbio che mi è venuto in mente. Quindi, non c'è bisogno di cercare di convincermi a scriverli, anche perché mi piace già scrivere test automatici. )


3
Quanto sono comuni le domande automatizzate su Stack Exchange?
MichaelHouse

2
possibile duplicato di Test automatizzati di giochi
bummzack,

Solo perché non sono comuni nel settore dei giochi non significa che non dovresti sforzarti di continuare a scriverli. Quale problema stai cercando di risolvere con questa domanda comunque?
Tetrad,

@Tetrad Basta leggere la domanda. Il secondo paragrafo spiega tutto.
brandizzi il

Risposte:


37

In generale, i test unitari e di integrazione dei giochi non sono così comuni. Ciò è dovuto principalmente al fatto che l'aspetto di rendering dei giochi è di solito strettamente legato al resto della meccanica di gioco che può essere molto difficile scrivere test di unità che funzionano.

Detto questo, nello sviluppo del gioco possono verificarsi test unitari e, se il codice è impostato per esso, può essere di grande beneficio. Tuttavia, può essere molto più comune scrivere test automatici per i giochi, di solito sotto forma di un programma di intelligenza artificiale che può effettivamente giocare a una velocità superiore rispetto a un normale giocatore. Ci sono alcune storie eccellenti di sviluppatori che fanno proprio questo in questa domanda sui test automatizzati . Questo tipo di test automatizzato è potenzialmente migliore, poiché i test unitari potrebbero non rilevare un bug nel motore di rendering, ma è più probabile che un test automatizzato esponga un tale problema.

Alla fine, però, tutto dipende dallo studio. Alcuni studi effettueranno una sorta di test automatizzati, mentre altri potrebbero assumere 20 ragazzi delle scuole superiori durante l'estate per giocare per ore e ore.


17
+1 solo perché tutti vorremmo essere uno di questi bambini. :(
Bobby,

13
@Bobby Parla per te. Essere costretti a giocare ripetutamente a giochi buggy e incompiuti è un pensiero orribile, anche se non finisci per essere assegnato a testare qualcosa come l'ultimo gioco Barney the Dinosaur.
Dan Neely,

9
@Bobby, sono stato QA per circa 3-4 anni, è un ottimo lavoro se ti piace rompere il software e lavorare in quel settore, ma non farlo perché 'ti piace giocare tutto il giorno' :)
JuniorDeveloper1208

9
Sono stato in QA per circa sei mesi. Mentre cammino verso la mia macchina alla fine del mio secondo giorno di lavoro, mi ricordo vividamente di aver pensato a me stesso, "Riesco a vedermi alla fine arrivare a odiare questo lavoro". E alla fine del mio terzo giorno, "Odio davvero questo lavoro". I buoni tester QA in grado di far fronte alle richieste del lavoro valgono il loro peso in oro, ed è un crimine che non sono valutati e compensati più di quanto non siano.
Trevor Powell,

16

Nella mia esperienza, non è molto comune.

Principalmente i test unitari non si verificano perché la maggior parte degli sviluppatori di giochi proviene da un tempo e da una cultura prima che cose del genere fossero molto diffuse, e quindi è difficile argomentare ora che tali metodi sono necessari. Ciò è diventato ancora più vero negli ultimi anni con l'aspettativa che l'utente sia in grado di correggere il proprio software dopo il rilascio.

In parte è perché il linguaggio dominante nel settore dello sviluppo dei giochi è il C ++ e questo rende i test delle unità un po 'più ingombranti rispetto ad altri linguaggi. Esistono framework di unit test ma non sono così facili da usare come sistemi simili in linguaggi più moderni che possono usare la riflessione e trucchi simili per accelerare il rilevamento dei casi di test.

Inoltre, è perché i giochi generalmente non si prestano al test unitario - gran parte della logica dipende da fonti semi-deterministiche (ad es. Hardware grafico, tempi di input, frame rate), gran parte dell'output è difficile da misurare (ad es. grafica sullo schermo, effetti sonori) e alcuni sono quasi privi di significato al di fuori dell'intero contesto di gioco (ad es. AI reattivi complessi, simulazioni fisiche). Ci sono eccezioni - molte, se lavori sodo per rendere il codice in quel modo - ma nel complesso i test sono più costosi nei giochi rispetto alla maggior parte degli altri tipi di software e quindi il rapporto costi / benefici è più dubbio.

Per quanto riguarda i test di integrazione, non ho mai sentito parlare del termine esplicitamente utilizzato nello sviluppo del gioco, ma molti sviluppatori conducono test automatizzati sull'intero sistema, ove possibile. Probabilmente direi che forse 1 sviluppatore professionista su 3 lo fa, poiché non è sempre facile da configurare e perché i vantaggi sono ridotti dal fatto che praticamente tutti gli sviluppatori di medie e grandi dimensioni (o i loro editori) hanno un QA dipartimento che eseguirà manualmente test simili. Il QA è in genere pagato molto meno degli sviluppatori, quindi può essere considerato economico lasciare test a loro, piuttosto che investire del tempo in più su di esso. (Controverso.)


5
Un grande punto sull'output è difficile da misurare. È facile testare automaticamente che una classe sputa, per esempio, JSON sintatticamente corretta, ma l'unico modo per assicurarsi che i tuoi ragdoll non girino fuori controllo quando il tiro è effettivamente giocare. La parte peggiore è che questo rende davvero difficile notare effetti collaterali (es. Correggi un bug, ma ora qualche altra parte remota del gioco si comporta in modo diverso.)
jhocking

8

Non vedo come la scrittura di un gioco sia diversa da qualsiasi altro software per quanto riguarda i test. Ogni componente del software, che si tratti di attivare un evento a tempo, inviare comandi a un personaggio in gioco o premere i pulsanti del menu, deve essere testato per la corretta esecuzione.

Verificare se è possibile completare il gioco è una questione diversa e non rientra nei test unitari o di integrazione.


8

In generale l'automazione dei test dell'interfaccia utente (anche nei programmi regolari) è più difficile dell'automazione regolare. Quindi, anche se puoi scrivere unit test per i tuoi giochi, testare il gioco reale è più difficile. La maggior parte delle aziende utilizza tester umani che eseguono il gioco più volte .

Ad esempio Ecco un articolo che spiega come lo fanno in un piccolo Game Studio (2 sviluppatori). Da quello che ho letto sembra che la loro convalida non sia molto dettagliata (l'automazione avvia il gioco e registra eventuali errori / asserzioni).

Tuttavia, alcune aziende hanno molto successo con la semi-automazione (come Microsoft Test Studios). Cioè, gli sviluppatori o gli SDET creano strumenti che rendono molto più semplice il test del gioco. Ci sono state discussioni su Gamefest in cui discutono di come hanno testato Crackdown, ad esempio o Fable. Ad esempio, usano ancora tester che verificano che ogni oggetto sia dove dovrebbe essere, ma usano uno strumento che cattura un'istantanea di quella posizione in modo che tutto ciò che l'umano fa sia visivamente verificare che sia lì senza dover giocare.

Ecco una buona chiacchierata su che tipo di strumenti costruiscono / usano per testare i giochi. Si chiama "Test Gemme: uscire di fronte alla crescente complessità dei nostri giochi"


4

Scommetterei che MMO e il codice server multiplayer, tuttavia, sono un po 'più spesso testati.

Per lo meno, i test di regressione automatizzata sono stati comuni. Ho visto questi implementati come controlli di integrità di massa durante l'avvio del server, ad esempio per assicurarsi che un nuovo server "cloud" sia stato configurato correttamente prima che inizi ad accettare i giocatori; una suite di regressione abbastanza buona costruita in 3-4 anni, in quel caso, è stata eseguita in circa 4 secondi, mentre il richiamo di un host virtuale (da un'immagine del sistema operativo vuota) ha richiesto quasi 10 minuti, quindi ne è valsa la pena. Abbiamo eseguito gli stessi test su un "tinderbox" (sistema di generazione continua) nel nostro repository Subversion per verificare la presenza di errori fastidiosi e abbastanza comuni a cui piaceva insinuarsi. In particolare, la funzionalità multi-server aveva la brutta abitudine di provare a creare duplicati di oggetti mentre venivano passati: l'oggetto istanziazione, memorizzazione nella cache, e il codice di passaggio della rete era coperto quasi al 100%; continuavamo a pensare di aver pensato a tutto ciò che poteva essere testato, e poi scoprire un nuovo "bordo" divertente.

In diversi MMO su cui ho lavorato, svilupperemmo anche "client stub" per eseguire i test unitari iniziali e di solito fornivamo comandi "operatore" per eseguire test unitari ad hoc di nuove funzionalità. Questo ci consente di eseguire il codice del server prima che il client fosse pronto a sfruttarlo e di esercitare situazioni "impossibili" (ad es. Teletrasportare un giocatore all'interno di un muro) per garantire che i gestori di recupero errori funzionassero bene. Portare una nuova funzionalità online sul server a volte potrebbe richiedere molti giorni in meno rispetto al supporto client per essa; al contrario, a volte dovremmo creare un metodo server "fittizio" per il client, restituendo dati falsi ma ben formati, se ci anticipassero.

Tuttavia, lo sviluppo di MMO in generale è soggetto a molti più problemi di questo tipo, che potrebbero riflettere l'ambiente. Quando stavo lavorando su sistemi di gioco incorporati, il "testing" era praticamente inaudito per tutto tranne che per un codice widget riutilizzabile (ad es. Editor di testo).


3

Un altro motivo per cui i test automatici non sono così comuni nello sviluppo di giochi che si può considerare è che per la maggior parte dei giochi ci sono molti volontari di beta testing che impediscono la partecipazione di Game Beta come "vantaggio" quando il gioco viene rilasciato. I test automatizzati sono ovviamente cresciuti dai requisiti di qualità, ma anche dalle restrizioni di budget. Pertanto, poiché nei giochi ci sono molti tester esperti che sono pronti a testare gratuitamente, forse questo è un altro motivo per cui i test automatici non sono così diffusi.


3

Ho partecipato a una tavola rotonda sulla sperimentazione automatizzata al GDC 2011 . IIRC, c'erano circa 60 persone nella stanza. Ad un certo punto il moderatore ha condotto un sondaggio sulla copertura dei test unitari. C'era una persona che ha richiesto una copertura del codice superiore al 90%. Tutti gli altri ridevano al pensiero di raggiungere una copertura dell'1% . Se quel gruppo è una rappresentazione equa del settore nel suo complesso, direi che i test automatizzati generalmente non accadono molto, se non del tutto.

Le altre risposte qui forniscono buoni motivi per cui. Ho solo pensato che sarebbe stato utile avere un account di prima mano.


Sono sorpreso che la cifra sia così bassa (anche se non mi aspetto che più di un terzo dei gamedev utilizzi tali test, come ho detto nella mia risposta.) Per aggiungere alcune prove aneddotiche personali, il software server su cui sto lavorando ha una copertura del test unitario superiore al 70%. Probabilmente potrei arrivare all'85% con un po 'di duro lavoro, ma l'ultimo 15% implicherebbe varie contorsioni di iniezione di dipendenza che non sono disposto a fare. In confronto, il software client è quasi impossibile da testare l'unità, quindi ci concentriamo sul test manuale.
Kylotan,

In un progetto Lua, grazie alla facilità di stub e derisione, sono riuscito a mantenere una copertura del 100% durante lo sviluppo. Tuttavia, ho notato che molti test non sono stati interessanti (come testare il posizionamento esatto dell'interfaccia utente o qualsiasi cosa che dovrebbe essere guidata dai dati ma che si è effettivamente svolta nel codice). Per mantenere le cose più pulite, ho diviso il codice tra "motore" (riutilizzabile) e specifico del gioco e mi sono assicurato solo di coprire tutto il codice del motore, mentre la copertura oscilla per il codice del gioco (continuo a testare le classi di basso livello in quanto è facile da e fisica personalizzata in quanto è facile sbagliare, ma non più UI / rendering di alto livello).
sabato
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.