Test-Driven Gamedev - testy automatyczne a tworzenie gier

Post on 19-Jul-2015

198 views 1 download

Transcript of Test-Driven Gamedev - testy automatyczne a tworzenie gier

TEST-DRIVEN GAMEDEVKonrad Gadzina

Senior Software EngineerWWW.GANYMEDE.EU

TESTY AUTOMATYCZNE A TWORZENIE GIER

TO W GRY NIE WYSTARCZY GRAĆ?

1

TESTOWANIE MANUALNECo nam daje?

• sprawdzanie grywalności i ogólnego odbioru gry• wyłapywanie exploitów

TESTOWANIE MANUALNECzego nam nie daje?

• pewności przy wprowadzaniu sporych zmian• szybkiej informacji zwrotnej• całkowitej powtarzalności

JAK AUTOMATYZOWAĆ TESTY?

2

A TO NIE ROBOTA TESTERÓW?

Większość osób myśli, że testowanie to piaskownica testerów. Sami programiści lubią tak myśleć.

TYPY TESTÓW

Konwencje podziału są różne, jedna z popularnych:• jednostkowe• funkcjonalne• integracyjne

Z CZYM DO CZEGO?

“Unit tests tell a developer that the code is doing things right; functional tests tell a developer that the code is doing the right things.”

http://www.softwaretestingtricks.com/2007/01/unit-testing-versus-functional-tests.html

TESTY JEDNOSTKOWE

• sprawdzają poprawność poszczególnych elementów w izolacji

• wymuszają modularną architekturę• pisane z perspektywy programisty• nie sprawdzają interakcji

TESTY FUNKCJONALNE

• sprawdzają poprawność interakcji między różnymi elementami programu

• pisane z perspektywy użytkownika

TESTY INTEGRACYJNE

• sprawdzają poprawność komunikacji z zewnętrznymi systemami

• są testami funkcjonalnymi

TEST-DRIVEN DEVELOPMENTIdea

• pisanie testów jednostkowych przed napisaniem kodu, który ma byćtestowany

• pisanie tylko tyle, ile jest konieczne w danym momencie, ani linijki więcej

• bardzo krótkie iteracje

TEST-DRIVEN DEVELOPMENTRed-green-refactor mantra

1. Napisz test, który nie przejdzie2. Dopisz kod produkcyjny, by test

przeszedł3. Refaktoruj

BEHAVIOUR-DRIVEN DEVELOPMENTZachowania

Tworzenie scenariuszy zachowań, które przekładają się na testy integracyjne.

Według niektórych „BDD is TDD done right”.

BEHAVIOUR-DRIVEN DEVELOPMENTKomunikacja

Założeniem BDD jest zapewnienie dobrej komunikacji między zespołem developerskim a klientem.

Tworzy się DSL – Domain Specific Lanuage, używany w scenariuszach i rozumiany przez obie strony.

TO CO Z TYMI GRAMI?

3

CZEMU NIE TESTUJEMYPozorna nieopłacalność testów

“However, for most game code that is written once and then discarded, unit tests generally do not make sense. The cost to hire an room full of QA testers to verify everything at the end of the project is often less than the cost to create the automated tests.”

http://www.gamedev.net/topic/648772-unit-testing-ftw/

CZEMU NIE TESTUJEMYPotencjalne problemy z testowaniem

“It is hard to write unit tests for code that is non-deterministic. If you have code involving random numbers, you won't be able to write a unit test that asserts an expected result.”

http://programmers.stackexchange.com/questions/250449/test-driven-development-for-complex-games

CZEMU NIE TESTUJEMY

Perspektywiczne myślenie oraz modularna architektura mogą rozwiązać wiele problemów.

“WIELCY GRACZE” A TESTY

"Whenever I come across a finicky looking bit of code now, I split it out into a separate pure function and write tests for it. Frighteningly, I often find something wrong in these cases, which means I'm probably not casting a wide enough net."

John Carmackhttp://gamasutra.com/view/news/169296/Indepth_Functional_programming_in_C.php

“WIELCY GRACZE” A TESTY

"I have never done real TDD. I make the excuse that real time stuff is harder to TDD for, but I know I don't do enough test."

John Carmackhttps://twitter.com/id_aa_carmack/status/459112425833246720

“WIELCY GRACZE” A TESTYOferty pracy w branżyUI / Scaleform Developer @ Rockstar:

“DESIRED● Working knowledge of C++.● (..)● Experience with UNIT testing.”

Senior Software Engineer, C++ - Infrastructure @ Blizzard:

“Pluses● Experience with C++11● (..)● Experience designing and implementing unit tests“

UNITY TEST TOOLS

Darmowe narzędzie rozwijane przez Unity. Ułatwia:

• testy jednostkowe

• testy integracyjne

DEMO!

4

YASICYet Another Space Ivaders Clone

• gra rekrutacyjna do Ganymede• JavaScript – Phaser + Jasmine• Behaviour-Driven Development

http://fenixb3.github.io/YASIC/

JAK TDD WYCHODZI ZE STARCIA Z LEGACY CODE?

5

DOBRZE, A TY?

Zmiany w starym kodzie, którego nie znamy są często ryzykowne. Wystąpienie regresji jest bardzo prawdopodobne, wydajność programistów jest niższa.

EDIT AND PRAY VS COVER AND MODIFY

“To me, legacy code is simply code without tests.”Michael C. Feathers

ZMIANY W LEGACY CODESiatka bezpieczeństwa

1. Zidentyfikuj miejsca wymagające zmiany

2. Znajdź miejsca do testowania3. Rozbij zależności4. Napisz testy5. Dokonaj zmian i zrefaktoruj

JAK WDROŻYĆ SIĘ W TDD?

6

CODING DOJO

Spotkanie, na którym grupa ludzi rozwiązuje problemy programistyczne z wykorzystaniem TDD.

Wyróżniamy:• Prepared Kata• Randori Kata

CODING DOJOPrepared Kata

• jedna osoba rozwiązuje cały problem• pozostali mogą sugerować kolejne testy• przyjaźniejsze przy pierwszym kontakcie z

TDD

CODING DOJORandori Kata

• pair programming• zmiana w parze po pewnym czasie• „baby steps”

PODSUMOWANIE

7