Jako, że mam certyfikat Scrum, mam skłonność do metodologii Agile podczas opracowywania systemu, a nawet używam płótna z frameworka Scrum do zarządzania moją codzienną pracą.
Poza tym zastanawiam się, czy TDD jest opcją w rozwoju gier, czy jest opłacalna?
Jeśli wierzę w to pytanie GD, TDD nie ma większego zastosowania w tworzeniu gier.
Dlaczego MVC i TDD nie są częściej wykorzystywane w architekturze gier?
Pochodzę z programowania przemysłowego, w którym duże projekty o dużych budżetach muszą działać bezbłędnie, ponieważ mogłoby to doprowadzić do katastrofalnych scenariuszy, gdyby kod nie został dokładnie przetestowany wewnątrz i na zewnątrz.
Ponadto przestrzeganie zasad Scruma zachęca do dotrzymywania terminów pracy, podczas gdy każda akcja w Scrumie jest ograniczona czasowo! Zgadzam się więc, gdy w powyższym pytaniu mówią, aby przestać próbować zbudować system i zacząć pisać grę. Jest to, co mówi Scrum, staraj się nie budować idealnego systemu, po pierwsze: spraw, aby działał do końca Sprint. Następnie w razie potrzeby popraw kod podczas pracy w drugim sprincie!
Rozumiem, że jeśli nie wszystkie działy odpowiedzialne za rozwój gry korzystają ze Scrum, Scrum staje się bezużyteczny. Zastanówmy się jednak przez chwilę, że wszystkie działy używają Scruma ... Myślę, że TDD dobrze byłoby napisać kod bez błędów, choć nie chcesz pisać „idealnego” systemu / gry.
Więc moje pytanie jest następujące:
Czy TDD jest opłacalne w rozwoju gier?
źródło
Odpowiedzi:
Jest to z pewnością opłacalne, chociaż wielu programistów gier tak naprawdę nie przyłączyło się do tego pomysłu lub nie rozumie, jak testować skomplikowane systemy. Przyznaję, że rzadko go używam, z wyjątkiem łatwych do przetestowania systemów niezwiązanych z rozgrywką.
Spodziewaj się, że użyjesz wielu próbnych obiektów. Ze względu na to, jak wiele systemów jest ze sobą powiązanych, trudno jest przetestować ich poszczególne elementy.
Ponadto wielu rzeczy nie można dokładnie przetestować. Jak testujesz, powiedzmy, układ cząsteczkowy? Jak sprawdzasz, czy twój system animacji działa poprawnie? Wiele rzeczy ma charakter wizualny i nie jest oczywiste (przynajmniej dla mnie), jak wykonać odpowiednie testy.
Istnieje jednak wiele rzeczy, które niekoniecznie są testami jednostkowymi w tradycyjnym znaczeniu tego słowa, ale istnieją jako „testy” dla określonych funkcji. Rzeczy takie jak poziomy testowe dla nawigacji AI są dość powszechne, ale niekoniecznie są najłatwiejszymi do zautomatyzowania.
Istnieją pewne aspekty gier, które mogą (i prawdopodobnie powinny) mieć napisane dla nich testy jednostkowe. Należy przetestować każdy rodzaj ogólnego systemu „odczytu plików”. Może masz jakieś testy na inicjalizację sprzętu (powierzchnie 3D itp.). Może masz jakieś fałszywe serwery i przetestujesz kod interakcji klient / serwer. Rzeczy jak te.
źródło
Keys.Down
,Keys.Left
itd To znaczy, że gra nie wie, gdzie użytkownik chce iść wąż i wąż musi iść gdzie gra informuje go, choć jest to tylko wąż, który wie, jak poruszać się w różnych kierunkach, stąd też jego pozycja w grze. Powiedziawszy to, IMHO sprawia, żeSnake
klasa jest sprawdzalna! (Vector2.Zero
, z prędkością10.0f
na osi X i Y w tej grze 2D. Pierwsze pytanie brzmi: czy jest ustawione w swojej domniemanej pozycji początkowej i jak to przetestować? Uważasz wtedy, żePosition
nieruchomość zostanie publicznie wyeksponowana. Po drugie: jak to zrobić? Metody ruch powinien być dobry, więc można napisać test dla każdej metody kierunkuMoveDown
,MoveLeft
i tak dalej. Teraz idź i napisz deklarację metody i sprawdź, czy test narzeka. NastępnieMoveDown
wywołaniu metody! Ponieważ wiesz, żePosition
nieruchomość jest dokładnie testowana, jest to członek, na który możesz liczyć! Tutaj możesz odgadnąć kontynuację! ;-) To znaczy, że elementów wizualnych zdecydowanie nie można przetestować, ale wąż powinien wyglądać jak wąż, wszystko w zależności od tego, jakiego węża chcesz w grze. Artysta rysujący węża powinien wykazać wystarczającą satysfakcję z rysowania węża, czego oczywiście nie należy testować za pomocą TDD! Ale jego pozycja względem innych obiektów może, a także klasa reprezentująca tego węża. W rzeczywistości TDDNie sądzę, aby TDD było odpowiednie jako podstawa do rozwoju gier. Zautomatyzowane testowanie jednostek jako część metodologii, oczywiście, ale zbyt wiele kluczowych problemów związanych z tworzeniem gier jest subiektywne i nie może być testowane maszynowo, aby testy były motorem rozwoju. Jak zamierzasz napisać skryptowy test sprawdzający, czy mechanika gry jest fajna? Czy poziom jest atrakcyjny wizualnie? Nawet czy ukończenie poziomu zajmuje typowemu graczowi około 15 minut? TDD pasuje do sytuacji, w których dojrzałość projektu można zmierzyć ilościowo pod względem zgodności ze specyfikacją, a to po prostu nie jest rozwój gry.
źródło
Trudno jest dokładnie ustalić, o co pytasz, ponieważ tytuł dotyczy wyłącznie TDD, ale wydaje się, że Scrum stanowi integralną część pytania - i jak rozumiem, jedno nie wymaga drugiego.
To jest poprawne. Nie sądzę, żebym kiedykolwiek słyszał o tym używanym w praktyce w branży gier. (Ale potem nigdy nie słyszałem o tym, że jest używany poza branżą gier - tylko przez osoby prywatne).
Gry nie muszą działać bezbłędnie. Dlatego mniejszy nacisk kładziony jest na poprawność kodu. TDD nie gwarantuje poprawności kodu, ale niektórzy uważają, że zmniejsza to niepoprawność. Jeszcze nie widzę tego dowodu.
Nigdy nie widziałem metodologii, która nie zachęcałaby do terminów lub działań, które nie były ograniczone w czasie. Problem polega na tym, że bez względu na zastosowaną metodologię oszacowanie złożoności oprogramowania jest dość trudne. Nie jest to niemożliwe, ale dokładne oszacowanie nie ma wiele wspólnego z procesem. Jeśli moim zadaniem jest dodanie nowego panelu GUI lub naprawienie błędu animacji lub dodanie nowej statystyki do postaci, użycie Scruma wcale nie przyspieszy tego, a użycie TDD będzie spowolnić zadanie (z możliwą korzyścią późniejszego ograniczenia dalszych zadań konserwacyjnych). Z pewnością nie ułatwią oszacowania czasu trwania zadania.
Jeśli udowodniono, że TDD pisze lepszy kod niż inne metody, to tak.
Czy jest na to dowód? Fakt, że przemysł może z niego skorzystać, nie jest dowodem. Przemysł jest dobrze znany z wytwarzania słabego kodu, który jest dostarczany z opóźnieniem. Brak przykładów dużych projektów TDD, które zawiodły lub się spóźniły, może wynikać z tego, że jest to nowe podejście i niewiele osób faktycznie zakończyło taki projekt. (A te, które spóźniają się ... mogą nadal działać.)
Wykonalny? Oczywiście. Korzystny? To jeszcze nie zostało udowodnione.
źródło
Spacecraft
klasa staje się w pełni testowalną klasą z metodami i właściwościami. Tego rodzaju rzeczy absolutnie można, IMHO, w pełni przetestować przy użyciu TDD. Powiedzmy, że potrzebujesz statku kosmicznego, a następnie piszesz testy tego, czego potrzebujesz, aby wykonać jeden test na raz.przepraszam za mój słaby angielski i przepraszam za mój stronniczy punkt widzenia: nie jestem projektantem gier, ale programistą.
Myślę, że w tej dyskusji są pewne nieporozumienia. porozmawiam o TDD w bardziej ogólnej formie, tzw. BDD. Rozwój oparty na zachowaniach nie jest sposobem testowania projektu (testy są czymś w rodzaju efektów ubocznych). BDD to sposób na projektowanie , sposób na refaktoryzację i projektowanie oprogramowania podczas całej produkcji (patrz niektóre motta jako KISS, „zachowaj jakość”, „testuj wcześnie, testuj często”), a nie w pojedynczej fazie. BDD jest przeciwieństwem klasycznego procesu oprogramowania, takiego jak proces kaskadowy lub inna iteracyjna metodologia tworzenia oprogramowania.
Inną kwestią jest to, że testy automatyczne dotyczą funkcji, które mogą być testowane automatycznie przez maszynę obliczeniową. nie ma testu zabawy w grach i nie ma testu użyteczności graficznego interfejsu użytkownika. zabawa lub użyteczność to materiały do innych zadań, a nie do tworzenia oprogramowania, takich jak projektant interakcji, świat i poziom d. w ten sam sposób, w jaki części artystyczne (modelowanie, teksturowanie itp.) są przeznaczone dla artystów, którzy używają komputerów jako narzędzia kreatywności - oczywiście te prace mogą być wykonywane przez tę samą osobę, która pisze kod, ale nie o to chodzi. fizyka może być testowana, algorytmy optymalizacji mogą być testowane, pojedyncze zachowania obiektów mogą być testowane (z próbkami, skrótami i manekinami, jak wspomniano wcześniej)
ostatnia myśl jest taka, że imho to nie tylko projektowanie gier, ale cały pisanie kodu to sztuka.
źródło
Oto studium przypadku kogoś, kto uważa, że TDD i gamedev całkiem dobrze się mieszają:
http://powertwenty.com/kpd/downloads/TestDrivenDevelopmentInPython.pdf
Wprawdzie jest to niewielki projekt w Pygame, ale daje wyobrażenie, które części można przetestować za pomocą gry graficznej, a które nie. Byłem zaskoczony, jak wiele można zrobić z TDD w tym scenariuszu.
źródło
Nie, programowanie oparte na testach nie nadaje się do tworzenia gier. Na pewno możesz napisać testy dla części, które chcesz przetestować, ale proces tworzenia gry jest zupełnie inny niż testowanie oparte na testach, które wymaga dokładnych specyfikacji przed rozpoczęciem postępu.
Gry rzadko mają dokładną specyfikację po uruchomieniu. A jeśli tak, zawsze zmieniają się i ewoluują podczas procesu rozwoju.
Projektowanie gier jest sztuką, nie możesz mieć konkretnych testów, aby wiedzieć, kiedy sztuka jest dobra lub kompletna.
źródło