GDC 2005 - Maggotranch

Download Report

Transcript GDC 2005 - Maggotranch

Scalability Tools: Automated Testing
(30 minutes)
Overview
Hooking up your game
 external tools
 internal game changes
Applications & Gotchas
 engineering, QA, operations
 production & management
Summary & Questions
Review: controlled tests & actionable results
useful for many purposes
(1)
Repeatable tests, using N
synchronized game clients
(2)
Test Game
Programmer
High-level, actionable
reports for many audiences
Development Director
Executive
Automated testing accelerates large-scale game
development & helps predictability
Better game
earlier
Ship Date
% Complete
Oops
autoTest
Project
Start
Time Time
TSO case study: developer efficiency
Strong test support
Weak test support
Target
Launch
Measurable targets & projected trends give you
actionable progress metrics, early enough to react
Target
Oops
Any test
(e.g. # clients)
Time
First Passing
Test
Now
Any Time
(e.g. Alpha)
Success stories

Many game teams work with automated
testing

EA, Microsoft, any MMO, …

Automated testing has many highly
successful applications outside of game
development

Caveat: there are many ways to fail…
How to succeed

Plan for testing early



Fast, cheap test coverage is a major
change in production, be willing to adapt
your processes



Non-trivial system
Architectural implications
Make sure the entire team is on board
Deeper integration leads to greater value
Kearneyism: “make it easier to use than not to
use”
Automated testing components
Any Game
Startup
&
Control
Repeatable, Sync’ed
Test I/O
Collection
&
Analysis
Test Manager
Scriptable Test Client(s)
Report Manager
Test Selection/Setup
Control N Clients
RT probes
Emulated User Play Session(s)
Multi-client synchronization
Raw Data Collection
Aggregation / Summarization
Alarm Triggers
Input systems for automated testing
scripted
algorithmic
recorders
Game code
Multiple test applications are required, but each input type differs in
value per application. Scripting gives the best coverage.
Hierarchical automated testing
subsystem
unit
system
Multiple levels of testing gives you
• Faster ways to work with each level of code
• Incremental testing avoids noise & speeds defect isolation
Input (Scripted Test Clients)
Pseudo-code script of users play the game, and
what the game should do in response
createAvatar [sam]
enterLevel 99
buyObject knife
attack [opponent]
Validation steps
…
Command steps
checkAvatar [sam exists]
checkLevel 99 [loaded]
checkInventory [knife]
checkDamage [opponent]
…
Scripted Players: Implementation
Test Client (Null View)
Or, load both
Script Engine
Game Client
Game GUI
State
State
Commands
Presentation Layer
Game Logic
Test-specific input & output via a datadriven test client gives maximum flexibility
Load
Regression
Reusable
Scripts & Data
Input
API
Test Client
Output
API
Key Game States
Script-Specific
Logs & Metrics
Pass/Fail
Responsiveness
A Presentation Layer is often
unique to a game


Some automation scripts should read just
like QA test scripts for your game
NullView
TSO examples
Client
routeAvatar, useObject
 buyLot, enterLot
 socialInteraction (makeFriends, chat, …)

Input (data sets)

Repeatable tests in development,
faster load, edge conditions
Real data

Unpredictable user element
finds different bugs
Repeatable

Debugging & benchmarking

Edge cases & real world
performance
Mock data
Random
Common Gotchas

Not designing for testability


Retrofitting is expensive
Blowing the implementation
Brittle code
 Addressing perceived needs, not real needs


Use automated testing incorrectly
Testing the wrong thing @ the wrong time
 Not integrating with your processes
 Poor testing methodology

Testing the wrong time at the wrong time
Applying detailed testing while the game design is still shifting
and the code is still incomplete introduces noise and the
need to keep re-writing tests
Alpha
Alpha
Design
Space
Code
Completion
Time
Time
Build Acceptance Tests (BAT)
Stabilize the critical path for your team
 Keep people working by keeping critical things from breaking

Final Acceptance Tests (FAT)
Detailed tests to measure progress against milestones
 “Is the game done yet?” tests need to be phased in

More gotchas: poor testing
methodology & tools

Case 1: recorders


Case 2: completely invalid test procedures


Load & regression were needed; not
understanding maintenance cost
Distorted view of what really worked (GIGO)
Case 3: poor implementation planning

Limited usage (nature of tests led to high test
cost & programming skill required)
Case 4: not adapting development
processes
 Common theme: no senior engineering
analysis committed to the testing problem

Automated Testing for Online Games
Overview
Hooking up your game
 external tools
 internal game changes
Applications
 engineering, QA, operations
 production & management
Summary & Questions
Automated testing: strengths



Repeat massive numbers of
simple, easily measurable
tasks
Mine the results
Do all the above, in parallel,
for rapid iteration
“The difference between us and a computer is that the
computer is blindingly stupid, but it is capable of being
stupid many, many millions of times a second.”
Douglas Adams (1997 SCO Forum)
Semi-automated testing is best for
game development
Automation





Testing
Requirements
Rote work (“does
door108 still
open?”)
Scale
Repeatability
Accuracy
Parallelism
Integrate the two for best impact
Manual Testing




Creative bug hunting,
visuals
Judgment calls,
playability
Reacting to change,
Evaluating autoTest
results
Plan your attack with stakeholders
(retire risk early: QA, Production, Management)

Tough shipping requirements (e.g.)
Scale, reliability
 Regression costs


Development risk
Cost / risk of engineering & debugging
 Impact on content creation


Management risk

Schedule predictability & visibility
Automation focus areas (Larry’s “top 5”)

Scale is hard to get right
Critical path stability 
Keep team going forward
Performance
Non-determinism

Gets in the way of everything
Content regression

Massive, recurring $$
Compatibility & install 
Improves life for you & user
Yikes, that all sounds very expensive!


Yes, but remember, the alternative costs are
higher and do not always work
Costs of QA for a 6 player game – you need at
least 6 testers at the same time
Testers
 Consoles, TVs and disks & network
 Non-determinism


MMO regression costs: yikes2
10s to 100s of testers
 10 year code life cycle
 Constant release iterations

Stability: keep the team working!
(TSO use case: critical path analysis)
Test Case: Can an Avatar Sit in a Chair?
use_object ()
buy_object ()
enter_house ()
buy_house ()
create_avatar ()
login ()
Failures on the Critical
Path block access to
much of the game
Prevent critical path code breaks that take
down your team
Candidate code
Development
Sniff Test
Safe code
Pass / fail, diagnostics
Checkin
Stability & non-determinism (monkey tests)
Continual Repetition of Critical Path Unit Tests
Code Repository
Compilers
Reference Servers
AutoTest addresses non-determinism

Detection & reproduction of race
condition defects


Even low probability errors are exposed with
sufficient testing (random, structured, load,
aging)
Measurability of race condition defects

Occurs x% of the time, over 400x test runs
Monkey test: enterLot ()
Monkey test: 3 * enterLot ()
Four different behaviors in thirty runs!
Content testing (areas)

Regression
Error detection
Balancing / tuning

This topic is a tutorial in and of itself





Content regression is a huge cost problem
Many ways to automate it (algorithmic, scripted &
combined, …)
Differs wildly across game genres
Content testing (more examples)
Light mapping, shadow detection
 Asset correctness / sameness
 Compatibility testing
 Armor / damage
 Class balances
 Validating against old userData
 … (unique to each game)

Automated Testing for Online Games
(One Hour)
Overview
Hooking up your game
 external tools
 internal game changes
Applications
 engineering, QA, operations
 production & management
Summary & Questions
Summary: automated testing

Start early & make it easy to use

Strongly impacts your success

The bigger & more complex your game,
the more automated testing you need

You need commitment across the team

Engineering, QA, management, content
creation
Q&A & other resources


My email: larry.mellon_@_emergent.net
More material on automated testing for games

http://www.maggotranch.com/mmp.html




www.amazon.com: “Massively Multiplayer Game Development
II”



Chapters on automated testing and automated metrics systems
www.gamasutra.com: Dag Frommhold, Fabian Röken


Last year’s online engineering slides
This year’s slides
Talks on automated testing & scaling the development process
Lengthy article on applying automated testing in games
Microsoft: various groups & writings
From outside the gaming world



Kent Beck: anything on test-driven development
http://www.martinfowler.com/articles/continuousIntegration.htm
l#id108619: Continual integration testing
Amazon & Google: inside & outside our industry