test-driven gamedev - testy automatyczne a tworzenie gier
Post on 19-Jul-2015
206 Views
Preview:
TRANSCRIPT
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
top related