First I will talk about my Black Box Testing, which is designed for me to test if the game functions correctly throughout development and is constantly updated throughout the creation of my game (compared to White Box Testing which is performed when the code is finished), and this ensures each mechanic works as intended before I move on to including the next one. It doesn't really look at the code as a whole, rather the actions the code actually does. Here is my Black Box test-log I made for my own Unity game, that has been continuously updated and dated (with the date each post was typed) throughout the development of my game:
Black box test-log:
Date
|
Test
No
|
Purpose
of testing
|
Input
|
Expected
output
|
Actual
output
|
Additional
comments
|
27/11/15
|
B1.1
|
Can the player make the
bird perform an action depending on the key pressed?
|
Left arrow key
|
The bird should walk to
the left and play the walking animation
|
The bird moves to the left
and plays the animation
|
The bird has no friction unless the
ground material object is applied to the trigger box of the ground object, as
that contains the friction for movement
|
|
B1.2
|
|
Right arrow key
|
The bird should walk to
the right and play the walking animation
|
The bird moves to the right and plays the animation
|
(See screenshot in player input blog
post for photo evidence.)
|
|
B1.3
|
|
Stop pressing an arrow key
|
The bird slows down gradually and then
stops, then plays the idle animation.
|
The bird slows down and plays the idle
animation when it has fully stopped moving
|
The friction causes the bird to
slightly slide forwards before it stops fully
|
|
B1.4
|
|
Spacebar
|
The bird should jump and play the jump
animation, if the player presses spacebar again before you land perform a
double jump
|
The bird is able to jump, double jump
and play the jumping animation, but infinitely without ever having to land.
|
The bird can keep jumping infinitely
through the air with no cooldown. Not intentional.
|
|
B1.5
|
|
Escape key
|
The game should bring up the pause
menu and freeze the game in the background
|
The pause menu successfully pops up,
and each button can be clicked on
|
The quit button doesn’t work in the
editor, but when the game is exported as a build it will work fine
|
29/11/15
|
B2.0
|
The bird should be able to stand on
platforms with a physics collider attached, and shouldn’t fall through out
|
Position the bird on top of a platform
|
The bird falls and lands on the
ground, and it stops them falling any further
|
The bird is capable of standing on a
platform
|
|
30/11/15
|
B1.4
|
Can the player make the
bird perform an action depending on the key pressed? (Repeated test)
|
Space bar
|
The bird should jump and play the jump
animation, if the player presses spacebar again before you land perform a
double jump
|
The bird is able to jump, double jump
and play the jumping animation, and they can only jump/ double jump once
until they touch the ground again
|
As of 30/11/15 the infinite jumping it
was fixed. Now the code for jumping and double jumping only works once and is
reset once the bird hits the ground again. So they can’t just jump in the air
forever (See screenshot in player input blog post for photo evidence.)
|
4/12/15
|
B3.0
|
Does the camera follow the bird around
the level?
|
Move the bird off-screen
|
If the bird moves off-screen the
camera should follow them (but still not move under the stage when the player
falls, as there are boundaries below it)
|
The camera successfully follows the
bird around the level, however it can follow them under the stage too
breaking the immersion of the game
|
Fixed as of 6/12/15. The camera
boundaries can be customised at any time in the camera’s settings
|
5/12/15
|
B4.0
|
Can the level restart if the bird
falls down a hole?
|
Make bird fall off the stage
|
If the bird falls off a stage then the
level should restart
|
When the bird falls down a hole the
level restarts successfully
|
A huge invisible object with a simple
collider is stretched under the whole level, so when the bird hits that
restart the game
|
7/12/15
|
B3.0
|
Does the camera follow the bird around
the level? (Repeated test)
|
Move the bird off-screen
|
If the bird moves off-screen the
camera should follow them (but still not move under the stage when the player
falls, as there are boundaries below it)
|
The camera successfully follows the
bird around the level, and also stops following them when it gets to certain
points, success!
|
|
12/12/15
|
B5.0
|
If the player collides with a
dangerous object, does it cause them harm and show feedback/ affect the UI
healthbar?
|
Collide with a dangerous object
|
If the player hits a spiky object,
they will be knocked back, play the bird’s damage animation and take 1 point
of damage while losing 1 point of health from their healthbar. After 5 points
they should die and restart the level
|
If the bird hits the object from the
side, they will successfully be knocked back, play the injured animation and
take 1 point of damage. However if they jump on top of the dangerous object,
they will die instantly unintentionally. Also the healthbar UI will not
change and is bugged to a static image
|
The damage code is inside various game
objects, from cacti, to spikes, fireballs and floating spikeballs
|
13/12/15
|
B5.0
|
If the player collides with a
dangerous object, does it cause them harm and show feedback? (Repeated test)
|
Collide with a dangerous object
|
If the player hits a spiky object,
they will be knocked back, play the bird’s damage animation and take 1 point
of damage. After 2 points they should die and restart the level
|
If the bird hits the object from the
side, they will successfully be knocked back, play the injured animation and
take 1 point of damage. However if they jump on top of the dangerous object,
they will die instantly.
|
Removed healthbar and reduced the bird’s
health to 2 for balancing reasons, taking 5 hits made the game too easy.
Still have a lingering issue with landing directly on spikes though
|
15/12/15
|
B5.0
|
If the player collides with a
dangerous object, does it cause them harm and show feedback? (Repeated test)
|
Collide with a dangerous object
|
If the player hits a spiky object,
they will be knocked back, play the bird’s damage animation and take 1 point
of damage. After 2 points they should die and restart the level
|
If the bird hits the object both from
the side and from above, they will successfully be knocked back, play the
injured animation and take 1 point of damage.
|
Previously on the 12th and
13th the damage code was bugged, however the code was amended and
now the player takes 1 point of damage from all angles (See screenshot in
damage blog post for photo evidence.)
|
17/12/15
|
B6.0
|
Can the game switch to the next level
when required?
|
Move the bird near a door (marked at
the end of a level) and press the E key
|
The game should load the next scene
and spawn the player into the new level when the bird collides with the door
game object and presses E. It also draws instruction text onto the screen,
and changes the text when the bird moves away again
|
The next level is successfully loaded
after the player is both touching the door and pressing E, and the text is
drawn onto the screen too
|
The door code is outdated and not
recommended to use as of Unity 5.3 (it was implemented before the update), so
it will need to be changed later-on, with another repeated test that I must
also perform.
(I did another test on 07/01/16 late
on, as I downgraded my Unity version back to 5.1)
|
19/12/15
|
B7.0
|
Testing to see if the collectable
coins function correctly
|
Make the bird run into and collect a
coin
|
The coin should destroy itself, play a
sound and add 1 point to the score at the top of the screen
|
The coin successfully destroys itself,
play a sound and add 1 point to the score at the top of the screen
|
Your score is also saved and carries
over between levels in conjunction with the game’s doors. But if you die in a
scene your score resets back to what it was at the start of that stage.
|
22/12/15
|
B8.1
|
Do the enemy dinosaurs have working
AI?
|
Move the bird within a certain
distance of a sleeping dinosaur
|
Wh
|
W
|
Multiple dinosaurs originally spawned
at the same position, but were quickly changed without the need of modifying
code as I’d included a set position in-game in the dinosaur’s animation
window
|
|
B8.2
|
|
Make the bird stay close to the
dinosaur, within that set distance required for it to wake up
|
If the bird as visible to the dinosaur
for a certain amount of time, it shoots a fireball towards the player’s
position that damages them in the same way as spikes do upon contact
|
The dinosaur never instantiates a fireball,
and doesn’t work as intended
|
The dinosaur plays the waking
animation just fine, but never attempts to attack the player
|
26/12/15
|
B6.0
|
Can the game switch to the next level
when required? (Repeated test)
|
Move the bird near a door (marked at
the end of a level) and press the E key
|
The game should load the next scene
and spawn the player into the new level when the bird collides with the door
game object and presses E. It also draws instruction text onto the screen,
and changes the text when the bird moves away again
|
The next level is successfully loaded
after the player is both touching the door and pressing E, and the text is
drawn onto the screen too
|
The code was successfully re-written
from loading ‘load level’ to ‘scene manager’, it has all been tested again
and works the same way as before, only loading times are faster now too!
(I did another test later on as I
downgraded my Unity version to 5.1)
|
28/12/15
|
B8.2
|
Do the enemy dinosaurs have AI that is
still broken? (Repeated test)
|
Make the bird stay close to the
dinosaur, within that set distance required for it to wake up
|
If the bird as visible to the dinosaur
for a certain amount of time, it shoots a fireball towards the player’s
position that damages them in the same way as spikes do upon contact
|
The dinosaur still does not
instantiate a fireball upon waking up
|
Modified the dinosaur’s code to no
avail, also changed a lot of its animation properties and settings
|
29/12/15
|
B8.2
|
Do the enemy dinosaurs have working
AI? (Repeated test)
|
Make the bird stay close to the
dinosaur, within that set distance required for it to wake up
|
If the bird as visible to the dinosaur
for a certain amount of time, it shoots a fireball towards the player’s
position that damages them in the same way as spikes do upon contact
|
The dinosaur now successfully attacks
the player. When you get nearby it will wait for a set amount of time and
shoot a fireball at you, and if you’re hit it will deal 1 point of damage,
knock you back and play the bird’s damage animation
|
After days of modifying code, the
dinosaur’s AI finally works as intended. This needed to be one of the most
tweaked scripts of my game to get it to function properly, with three
different test logs with different code and properties included each time
(See screenshot in AI blog post for photo evidence.)
|
31/12/15
|
B9.1
|
Does sound play in my game?
|
Load the game
|
When the game loads, play the looping
background music
|
The background music plays correctly
when the game begins
|
The music clip is attached to a black
game object inside an audio source component, and is set to play at the start
of the game and loop forever (See screenshot in sound blog post for photo
evidence.)
|
|
B9.2
|
|
Press spacebar
|
When the bird jumps with space, play
the jump sound. Also play the jump sound when the player double jumps.
|
The sound plays correctly when the
bird jumps
|
|
|
B9.3
|
|
Make the bird collide with a coin
|
When the player collects a coin, play
the corresponding sound
|
The correct sound plays when a coin is
collided with
|
|
07/01/16
|
B10.0
|
Does the game have a 3-minute timer
that counts down?
|
Load the game
|
The timer should count down from 180
seconds, and when it reaches 0 kill the bird and restart the game
|
The timer counts down as planned and
resets the stage when it reaches 0
|
The time counts in milliseconds, but
is only visible in seconds to the player as to not make the HUD too
convoluted (See screenshot in score blog post for photo evidence.)
|
07/01/16
|
B6.0
|
Can the game switch to the next level
when required? (Repeated test)
|
Move the bird near a door (marked at
the end of a level) and press the E key
|
The game should load the next scene
and spawn the player into the new level when the bird collides with the door
game object and presses E. It also draws instruction text onto the screen,
and changes the text when the bird moves away again
|
The next level is successfully loaded
after the player is both touching the door and pressing E, and the text is
drawn onto the screen too
|
My game’s Unity version was downgraded
back to 5.1 since that’s what version of Unity the PCs at Uni have. So I
rewrote the code to use ‘load level’ again.
|
Now for White Box Testing. Before I started making the game I created three UML diagrams (shown in the planning blog post) to show the code's structure and layout. The code itself has changed since then with those initial plans, but it still follows the same basic structure and layout since the game's code itself was based on those diagrams. This test-log below shows examples of me testing various different scripts and functions within my code, to see if they work as intended and what their output is.
White box test-log:
White box test-log:
Date
|
Test
No
|
Class
|
Function
|
Test
purpose
|
Input
|
Expected
output
|
Actual
output
|
Additional
comments
|
27/11/15
|
W1.1
|
Player
|
Void Update ()
|
Handles the keypresses of the player
|
Horizontal
|
Flip the bird left when left is
pressed
|
The bird flips left
|
|
|
W1.2
|
|
|
|
Horizontal
|
Flip the bird right when right is
pressed
|
The bird flips right
|
|
|
W1.3
|
|
|
|
Jump
|
Apply a force below the bird and move
it up. Checks to see if you’re touching the ground before jumping is allowed again.
|
The bird jumps, and also can double
jumps again. Checks to see if you’re touching the ground before jumping is
allowed again. Also as of 31/12/15 the bird makes a jumping sound.
|
Can only jump when the bird touches
the ground, and the grounded variable is set to true
|
28/11/15
|
W2.1
|
Player
|
Void FixedUpdate ()
|
Handles the keypresses of the player
|
Horizontal
|
Apply a force to the right of the bird
and move it
|
The bird moves right at a set speed
|
|
|
|
|
|
|
Horizontal
|
Apply a force to the left of the bird
and move it
|
The bird moves left at a set speed
|
|
|
W2.2
|
|
|
|
Release horizontal
|
Stop applying the force to the bird
and it slows down due to friction
|
The bird gradually slows down and then
stops
|
|
7/12/15
|
W3.0
|
CameraFollow
|
Void FixedUpdate ()
|
Code that makes the main camera track
the player’s position and follows the game object whenever it moves
|
Transform.position. x, player.transform.
position.x
|
Whenever the player moves left or
right, make the camera follow their position too
|
The camera follows the player in a smooth motion
|
The camera has set boundaries that are
assigned in the game object’s inspector view, it prevents it from moving out
of bounds and stops the player from seeing outside of the level
|
12/12/15
|
W4.0
|
Player
|
Void Die ()
|
Function is called when the player
dies
|
Col.gameobject.tag == “Bullet”
|
Restart the loaded scene and kill the
bird
|
The level successfully restarts
|
|
13/12/15
|
W5.1
|
Player
|
Void OnTriggerEnter2D ()
|
Code is run depending on the tagged
object that is collided with
|
Col.gameobject.tag == “Spike” at 2
health
|
Knockback the player, deal 1 damage
and play the damage animation
|
The bird gets knocked back, receives 1
damage and plays the damage animation
|
Code that runs depending on the object
the bird collides with
|
|
W5.2
|
|
|
|
Col.gameobject.tag == “Spike” (or
“Bullet”) at 1 health
|
Reference the ‘Die’ function. Restart
the level and kill he bird
|
The level restarts as intended
|
|
|
W5.3
|
|
|
|
Col.gameobject.tag == “Pit”
|
Reference the ‘Die’ function. Restart
the level and kill he bird regardless of your health
|
The level restarts as intended
|
|
19/12/15
|
W5.4
|
|
|
|
Col.gameobject.tag == “Coin”
|
Add 1 point to the score in the
GameMaster script, destroy the coin object and play the coin collection sound
|
The coin gets collected as intended
|
|
19/12/15
|
W6.1
|
GameMaster
|
Void Start ()
|
If you’re in the first level of the
game, set the value of the score to 0
|
SceneManager.
GetActiveScene
().buildIndex == 1
|
When you start the first level, the
displayed score will be 0
|
The score is successfully 0 when the
first level starts
|
Linked to the coin collection code
above
|
|
W6.2
|
|
Void Update()
|
Display the text ‘Points:’, that
changes whenever a coin is obtained
|
gm.points += 1; (in Player script)
|
The score goes up by 1 every time a
coin is collided with
|
The score displays at the top-right of
the screen, and increases by 1 for every coin
|
|
20/12/15
|
W7.1
|
Door
|
void OnTriggerStay2D (Collider2D col)
|
Test to see if the door object’s code
works
|
(Input.GetKeyDown ("e"))
|
When the player collides with the door
draw text on the screen, and when they press E inside the collision box,
advance to the next scene, and save the current score
|
The next level loads after pressing E.
Score carries over. The text is drawn on the screen when the bird collides
with the door
|
There are four different doors and
scripts for four levels of the game
|
|
W7.2
|
Door1
|
void OnTriggerStay2D (Collider2D col)
|
Test to see if the door object’s code
works
|
(Input.GetKeyDown ("e"))
|
When the player collides with the door
draw text on the screen, and when they press E inside the collision box,
advance to the next scene, and save the current score
|
The next level loads after pressing E.
Score carries over. The text is drawn on the screen when the bird collides
with the door
|
|
|
W7.3
|
Door2
|
void OnTriggerStay2D (Collider2D col)
|
Test to see if the door object’s code
works
|
(Input.GetKeyDown ("e"))
|
When the player collides with the door
draw text on the screen, and when they press E inside the collision box,
advance to the next scene, and save the current score
|
The next level loads after pressing E.
Score carries over. The text is drawn on the screen when the bird collides
with the door
|
|
|
W7.4
|
Door3
|
void OnTriggerStay2D (Collider2D col)
|
Test to see if the door object’s code
works
|
(Input.GetKeyDown ("e"))
|
When the player collides with the door
draw text on the screen, and when they press E inside the collision box,
advance to the next scene, and save the current score
|
The next level loads after pressing E.
Score carries over. The text is drawn on the screen when the bird collides
with the door
|
|
22/12/15
|
W8.1
|
DinoTurret
|
Void Update ()
|
Used to see if the Dinosaur should
turn left or right
|
target.transform. position.x >
transform.position.x
|
If the bird’s x (horizontal) position
is greater than the dino’s, make them face right to match the bird’s position
|
|
|
|
W8.2
|
|
|
|
target.transform. position.x <
transform.position.x
|
If the bird’s x (horizontal) position
is less than the dino’s, make them face right to match the bird’s position
|
|
|
|
W8.3
|
|
Void RangeCheck ()
|
Used to see if the Dino’s AI behaviour
should change depending on the player’s
distance
|
if(distance < wakeRange)
|
If the bird’s position is smaller than
the dino’s (they’re close by), wake them up
|
The dinosaur wakes up when the bird
comes within a set range
|
When the dinosaur is set to awake,
then it can start attacking the player
|
|
W8.4
|
|
|
|
if(distance > wakeRange)
|
If the bird’s position is greater than
the dino’s (they’re further away), keep sleeping
|
The dinosaur goes to sleep when the
bird moves a certain distance away
|
|
|
W8.5
|
|
Public Void Attack ()
|
Code that handles the dinosaur’s
attacking. When a bullet should be instantiated and in what direction
|
if (!attackingRight)
|
If the dinosaur Is facing left towards
the player, attack to the left (the ! means the opposite, so not facing right
means it must be left). Spawns a fireball towards the player that damages
them upon contact using the previous damage code
|
The dinosaur faces the player and
shoots a fireball at them every 1.8 seconds. If you’re hit, the bird takes
damage, knockback and plays the damage animation
|
The dinosaur stops firing if the
player moves away again
|
|
|
|
|
|
if (attackingRight)
|
If the dinosaur Is facing right
towards the player, attack to the right). Spawns a fireball towards the
player that damages them upon contact using the previous damage code
|
The dinosaur faces the player and
shoots a fireball at them every 1.8 seconds. If you’re hit, the bird takes
damage, knockback and plays the damage animation
|
|
31/12/15
|
W9.1
|
PauseMenu
|
Void Start ()
|
Code that disables the pause menu on
startup
|
PauseUI.SetActive (false);
|
Hides the menu when the game first
loads
|
The pause menu does not appear when
the game first starts
|
You don’t want the game to instantly
pause when you start the game, or else it’ll block the screen!
|
01/01/15
|
W10.1
|
|
Void Update ()
|
Code that makes the core of the pause
menu function
|
(Input.GetButton
Down ("Pause")
|
When the player presses Escape during
gameplay, pause the game by bringing up the menu and stopping the game
|
The menu loads up as intended when you
press Esc
|
A toggle-enabled pause menu using two if
statements to switch between states
|
|
W10.2
|
|
|
|
(Input.GetButton
Down ("Pause")
|
When the player presses Escape while
already paused, unpause the game and unfreeze the delta time
|
The menu closes correctly when Esc is
clicked
|
|
02/01/16
|
W11.1
|
|
Public Void Continue()
|
Handles the function for the continue
button
|
Continue button clicked
|
When the player presses continue during
while paused, unpause the game and unfreeze the delta time
|
The game unpauses and continues as
normal when this button is clicked
|
Each of the 4 pause menu buttons have
their own separate functions
|
|
W11.2
|
|
Public Void Restart()
|
Handles the function for the restart
button
|
Restart button clicked
|
Reloads the level that is currently
loaded to restart the game
|
When restart is pressed on the current
level restarts
|
|
|
W11.3
|
|
Public Void MainMenu()
|
Handles the function for the main menu
button
|
Main menu button clicked
|
Uses LoadLevel to load the main menu’s
scene
|
Takes you to the main menu scene when
clicked as intended
|
|
|
W11.4
|
|
Public Void Quit()
|
Handles the function for the quit
button
|
Quit button clicked
|
Simply closes the Unity application
|
Clicking the button in the built
version of the game (not in-editor) exits the application
|
|
03/01/16
|
W12.1
|
MainMenuButtons
|
Void Start()
|
Handles the help box toggle when the
game loads
|
infoOpen = false;
|
Hide the help section of the main menu
when the game first loads
|
The main menu hides as intended upon
the game’s bootup
|
We want to hide the help-box at first
as the text box is rather large, and covers a portion of the screen where most
players may only want to read it once and never need to view it again
|
04/01/16
|
W13.1
|
|
Public Void StartGame()
|
Handles the function for the start
button
|
Start button clicked
|
Loads the scene for the first level in
the game
|
When you click the button, it loads
the first level
|
Like the pause menu, each button has
their own function that reacts on click
|
|
W13.2
|
|
Public Void TestLevel()
|
Handles the function for the test
level button
|
Test level button clicked
|
Similar to the start button, only
loads the level that was used for testing the game’s mechanics instead
|
Loads the test level successfully
on-click
|
|
|
W13.3
|
|
Public Void InfoPanel()
|
Handles the function for the how to play
button
|
How to play button clicked
|
On button press at the start of the
game, it should unhide the big text box that explains the controls to the
player
|
When the button’s clicked the textbox
is successfully toggled on
|
Two tests for this button, one to see
if the help box appears, and one to see if it hides again
|
|
W13.4
|
|
|
|
|
On button press when the help box is
already on the screen, it should hide the big text box that explains the controls
to the player out of view
|
When the button is clicked for a
second time, the hint box is hidden again
|
|
|
W13.5
|
|
Public Void Quit()
|
Handles the function for the quit
button
|
|
|
|
|
07/01/16
|
W14.1
|
GameMaster
|
Void Update()
|
Decides when the timer should count
down, and what happens when it reaches 0
|
if (timer > 0.1)
|
If the timer value is greater than 0.1,
continue counting down from 180 seconds
|
The timer counts down for three
minutes as intended when the game loads
|
Uses two if statements to make a
choice, whether or not the timer is above or below a certain value and what
to do accordingly
|
|
W14.2
|
|
|
|
if (timer < 0.1)
|
If the timer value is less than 0.1,
kill the bird and restart the level
|
When the timer reaches 0 (from
whatever value it started at), the level restarts successfully
|
|
No comments:
Post a Comment