Unity for Game Testers: Complete masterclass for beginners | Руслан Мурга | Skillshare

Playback Speed


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Unity for Game Testers: Complete masterclass for beginners

teacher avatar Руслан Мурга

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Lessons in This Class

    • 1.

      Introduction

      3:38

    • 2.

      The Role of QA

      3:55

    • 3.

      Installing Unity Hub

      3:34

    • 4.

      Adding Unity project

      5:05

    • 5.

      Adding Unity project via Fork

      3:45

    • 6.

      Assignment

      1:18

    • 7.

      Main Unity elements

      4:25

    • 8.

      Object and Inspector

      5:01

    • 9.

      Character details

      5:28

    • 10.

      Basics of Prefab

      4:01

    • 11.

      Search Bars

      3:15

    • 12.

      Additional debug features

      3:29

    • 13.

      UI. Canvas

      3:36

    • 14.

      Rect Transform

      2:48

    • 15.

      Buttons, Icons, Text

      6:30

    • 16.

      Raycast

      2:08

    • 17.

      Event System

      2:22

    • 18.

      Player Controller

      3:53

    • 19.

      Player Script

      3:43

    • 20.

      Console functionality

      3:56

    • 21.

      Decoding Unity Errors

      5:09

    • 22.

      Errors Sorting

      3:22

    • 23.

      Game Manager

      2:46

    • 24.

      Simulator basics

      3:59

    • 25.

      Creating the build

      2:57

    • 26.

      Performing Smoke test

      3:46

    • 27.

      Logfile of the build

      2:09

    • 28.

      Basics of folder structure and cheats

      1:55

    • 29.

      Introduction to performance indicators

      2:36

    • 30.

      Profiler

      2:38

    • 31.

      Spike catching

      1:57

    • 32.

      Garbage Collector

      3:15

    • 33.

      Client and Server

      6:09

    • 34.

      Possible network issues

      3:37

    • 35.

      Game Persistence

      5:55

    • 36.

      JSON

      5:45

    • 37.

      Remote config file

      4:34

    • 38.

      AB Testing

      6:43

    • 39.

      SDK Basic

      4:14

    • 40.

      What is analytics

      3:23

    • 41.

      ADS in games

      3:27

    • 42.

      Compatibility testing

      6:25

    • 43.

      Wrappers

      4:51

    • 44.

      Example of good bug report

      7:49

    • 45.

      Example of good Test Case

      6:40

    • 46.

      Test Plan

      6:23

    • 47.

      CICD Basics

      6:32

    • 48.

      Bug Triage

      6:16

    • 49.

      Black Box testing practice

      19:18

    • 50.

      Practical testing in Unity (2D game)

      19:32

    • 51.

      Practical tutorial 2

      16:07

  • --
  • Beginner level
  • Intermediate level
  • Advanced level
  • All levels

Community Generated

The level is determined by a majority opinion of students who have reviewed this class. The teacher's recommendation is shown until at least 5 student responses are collected.

5

Students

--

Projects

About This Class

Course Overview: Technical QA for Games in Unity
Master the essential skills required to become a professional Game QA Engineer. This course bridges the gap between basic playtesting and technical quality assurance by diving deep into the Unity Engine ecosystem.
You will begin with foundational setup and navigation before progressing into the technical heart of game development. The curriculum is designed to give you hands-on experience with:

  • Unity Essentials: Navigating the Inspector, managing Prefabs, and understanding UI Event Systems.
  • Debugging & Scripting: Learning to decode Unity errors, utilize the Console, and analyze Player Scripts to pinpoint root causes.
  • Performance Optimization: Mastering the Profiler, identifying Spike catching issues, and understanding the impact of the Garbage Collector on gameplay.
  • Advanced Systems: Exploring Client/Server networking, JSON data persistence, AB Testing, and SDK integration for analytics and ads.
  • Professional Documentation: Crafting high-quality bug reports, test cases, and test plans that meet industry standards. 

By the end of this course, you will move beyond "finding bugs" to "analyzing systems," performing Smoke tests, managing builds, and executing Black Box testing within real 2D game environments. Whether you are looking to break into the industry or level up your technical troubleshooting, this course provides the toolkit needed for modern game deployment.

Meet Your Teacher

Worked in Game testing for 6 years. Released a few AAA titles.
Places of Work: Ubisoft, N-iX Game &VR Studio

Main areas - PC/Console game testing, VR Game development
Has experience in managing a team of 70 QA testers.

Main Releases: Assassin's Creed Origins, Tom Clancy`s The Division 2, Rainbow Six Extraction

See full profile

Level: All Levels

Class Ratings

Expectations Met?
    Exceeded!
  • 0%
  • Yes
  • 0%
  • Somewhat
  • 0%
  • Not really
  • 0%

Why Join Skillshare?

Take award-winning Skillshare Original Classes

Each class has short lessons, hands-on projects

Your membership supports Skillshare teachers

Learn From Anywhere

Take classes on the go with the Skillshare app. Stream or download to watch on the plane, the subway, or wherever you learn best.

Transcripts

1. Introduction: Hello, everyone. I'm glad to welcome you to the Unity QA course. My name is Maxim. I am a senior game DQ engineer, and for the last five years, I have lived in breezed the architecture of virtual worlds. My journey through the industry hasn't been a straight line. I have worked across the entire spectrum of game development from the raw creative energy of small India performers to the massive complex ecosystems ofA titles. But regardless of the scale, one thing because my passion for the constructing how these worlds are built. I have spent thousands of hours inside the Unity engine specialized in its quirks, its power, and it's hidden pitfalls. I created this curse because I want to share this specialized knowledge with you. I'm not here to teach you how to play games for living. I'm here to teach you how to outdid them like an engineer. Now you might ask, why is masterinnity so vital in 2026? The answer is simple. The line between development and testing has completely vanished. In today's landscape, unity isn't just an engine. It's the global backbone for everything from hyperalistic mobile experiences to the latest frontiers in external reality and driving environments. In 2026, studios are not looking for button pers who only report symptoms. They are looking for specialists. Can navigate the universal render pipeline, understand the logic and the buck, real time systems on the fly. As the industry moves towards more complex tdural and AI integrated worlds, your ability to speak unity is no longer just an advantage. It is your survival kit. Most testers operate in what we call black box. They see a buck on the screen, they report the symptom, and they hope developer knows how to fix it. In this course, we are breaking the box open. We will start by mastering the unit architecture. You want just look at the character. You will understand the relationship between them objects and components. Master Dan Spector learning to use Tibug mode to expose the hidden variables developers often tuck away from the surface. We will use the scene hierarchy as our map to navigate the local logical structure of any project. Once we understand structure will move to the forensic toolkit. We'll dive deep into the physics metrics, solving the mysteries of why objects pass through each other legos or a simple pickup acts like a solid brick wall, but a game that works in only half the battle, it has to perform. I'm going to show you how to weaponize the UIT profiler. You will learn to read CPU spikes and memory leaks with surgical precision. You would not just report the game slide. You will point to the exact script or asset that's killing the frame rate. You will be the person who brings the solutions, not just problems to prove your skills. We will perform a full rebox audit on a sabotaged first person shooter project. Personally hidden five critical logic failures in this build. You will solve the Sonic crouch by audit and arithmetic. You will fix the plane guard by catching hard coded value arts. You will notice the inverted barred by identified mass errors, the UI scripts. This is where you move from testing to root cause analysis. By the end of this course, you won't just be a tester. You will be a technical partner to developers. Someone who speaks their language understands that 2026 tech stack and earns their respect. If you are ready to stop guessing and start deconstructing, let's get to work. Welcome to the course. 2. The Role of QA: Hi. In this lesson, we'll talk about something very important. Why a que engineer should even bother learning unity? At first glance, it might feel like your job is just to test the build, run the game, and gauge box. So why open the engine, dig into SNS components and the console? Let's start with the context. Unity is one of the most popular game engines in the world. It's used for mobile games in the projects on steam, Apps, and even simulations and educational products. You're aiming for a career in in depth, chances are pretty high that at least one of the projects you will work will be made in unity. Unity is not just a program where things move on the screen. It's a whole ecosystem, themes, prefabs, components, scripts, logging, profiling, test runners. And a QA who can navigate all of that instantly becomes much more valuable for any team. To make it clear, let's compare unity to Unreal engine. Unreal is used more often in large projects and AAA games where you need top tier graphics and very complex materials. The entry barrier is higher. There are tons of settings, and usually the team has dedicated technical people working with the engine. Unit, on the other hand, is more about speed and flexibility. It's easier to start with, easier to find open source projects, examples, plugins and tutorials. For QA, this means, you can relatively quickly learn how to open real projects, see how they're built and even reproduce bugs without any magic. Now, the most interesting part, what kind of unity specific box QA can catch if they understand the engine a bit. Example, the play button in the game does not work. A tester with no unity knowledge might just write. Play button doesn't work. A QA who can open the thin, check the canvas, and the inspector might notice that the button has missing script or the onclick event is not configured. Then another example is the player falls through the floor. A less experienced QA might say physics is broken, but a QA who understands the structure will open the project and check if it has a collider, if it is on the right layer, and if the physics settings are correct. You see pink models or pink squares instead of textures. That's a unity classic missing or broken shader material. Instead of the graphics are broken, you can immediately point out that it is shader material issue. What does this give to the team? First, you save developer's time. Instead of age it doesn't work. You provide a more precise description where exactly the problem is and under which conditions it appears. Second, you can better prioritize box. You understand where the critical object is and where it just a visual glitch that doesn't block the player. On top of that, Unity gives QA access to powerful tools. The console logs, the profiler for performance, data strunner for automated tests, addressables, for checking, content loading, and much more. We'll go through all of this in the course, but the main idea is simple. A QA who knows Unity stops being the person who just clicks through the game and becomes a real part of the technical team. In this course, our goal is to turn you into exactly that kind of specialist. And we will start with the basics. Installing unity, creating your first project, connecting it hub, and setting up a working environment. You can use practice throughout the course. In the next lesson, we will move from theory to practice. We will install Unity Hub and Unity Editor and create the first project we'll use later. 3. Installing Unity Hub: All right, let's move to the practice. In this lesson, we'll go step by step through installing Unity Hub, adding the right version of Unity Editor, and creating your first project. We'll start with the Unity Hub. Unity Hub is a kind of manager for engine versions and projects. You will rarely launch the editor directly. Almost everything goes through the hub. First of all, you need to open your browser and go to the official Unity website to the download section. We're looking for Unity Hub. Download the Installer and run it just like any other application. After the successful installation, just open it. This is your first time, it might ask you to sign in. You can create a free Unity account that will be more than enough for learning and the most IT projects. Next, we need a Unity version. In the Install step, click Install Editor. For learning, we'll use a LTS version. For example, Unity 2021 0.3 LTS, LTS stands for the long term support, stable branch without some experimental features. A, this is perfect. Few surprises. Before installation, the Hub will suggest died modules. This part is important for testers. You need to make sure that you select Windows Build support or the platform you build for. If you plan to test mobile builds at Android Build Support right away. This will save you time in the future lessons. After that, simply click Install and wait. Depending on your Internet speed and your PC, it might take a few minutes. Once the editor is installed, we'll create our first project. In Unity Hub, go to the project step, click New Project or New. Choose a template. For this course, we'll use three D core template, a basic project without extra systems. Give your project a clear name, for example, Unity QA demo and choose a folder where it will be stored. Unity will import the initial files and open the editor window. You will see the interface, scene, game, arch inspector project. We'll explore each of these in more detail in the next sections. But for now, there is one key thing. The project has been created successfully. You can hit the play button to make sure the scene runs. At this stage, check if there are any red errors in the console, if the scene runs without crashes, if the interface looks normal. This is already your first small test of Unity project. In the next lesson, we will let another important part of your working environment. You will see how K uses git, track changes, and why it's important even if you're working alone. Now I'm going to show you how to open the project. Once you have installed the Unity version, create project. You simply click on your project name and run it. Once the unit you will boot your project, you will see here the ERRchy, the game theme, project, console, inspector Profiler, and many other. We will dig into them in the fuser lessons. But for now, you just need to select some scene, for example, menu, click Play and play. That's it. 4. Adding Unity project: Come back. In the previous lesson, we successfully installed Unity Hub and created a blank template. However, as you might have noticed at the very end of that video, I launched a fully finished working project to demonstrate the engine's capabilities. You might be wondering where it came from. Today, let's figure out exactly how I did it. In the real world, you will rarely start with a blank screen. Usually, you join a project that already exists. So in this lesson, you will learn how to get an open source project from GitHub and launch it correctly on your machine. First, a quick word about projects live. Developers don't pass games around on USB drives or via Google Drive. Code lives in repositories. For a Q engineer, this is critical. You need to know how to get the latest version of the game to test it. We will be using Github. It's the industry standard for Weston code. Think of it as a library where all the versions of the game are stored. For this course, I have prepared a link for Demo project. Check the lesson description. On the repository page, look for the green code button. You have two main options here to download deep. This simply downloads the project as an archive. Or to clone. Clone is the professional method using I commands to link your computer to the seller. To keep things simple for now, let's select download Zip. Download T and unzip to the folder computer. And one crucial tip, make sure the folder pass does not contain non Latin characters like Kirilk or special symbols. Keep the past simple. For example, Unity demo. Now let's feed this project to the Unity Hub. Open the Hub. I already have it open it. I go to the project step. Instead of clicking a new project like we did last time, click Add Ad Project from Disc. And locate the navigative folder, you just unzipped. Important. You need to select the specific folder that contains assets and project settings folder inside of it. If you select a folder level too high or too low, Unity would not recognize it as a valid project. Once selected, the project will appear in your list. Now, look at the editor version column. It is located here. In QA, this happens all the time. The version of Unity installed on your PC is different from the version the developer used to make the game. You might see a worrying icon. If you have the exact version installed, that's great. If not, Unity Hub will suggest opening it with your current version. Click on the project name, it will ask change version or upgrade. For our learning purposes, click Change version and select the one you installed in lesson two. But please note in real job, upgrading the engine can break the game, but for now, it's fine, you will see something like that window, and you can select any version you would like. But it is better to stick to the version of the build. As you click on the title of your project, the engine will be launching. It looks like that. The first time you open a downloaded project, it will take significantly longer than usual. Unity needs to import assets, convert textures, and compile scripts. You might see window saying resolving packages. This is normal. Just wait a bit. If you see a window called safe mode, it means that there are compilation errors in the code. This is a major red flag for a tester, but if the project opens normally, you are good to go success. The project is open. Check the console tap at the bottom. Are there any red error messages? Next step will be finding the scene in the project window here, look for the scenes folder and open the main file. Usually, it's called level one, game or main. In that case of that project, you can taboo clic condemn you. And it will open the starting scene. Then just hit the play button at the top. And if the game runs, the character moves and nothing crashes. Congratulations. You have successfully set up a working environment. You know how a live working project with real code and graphics, not just an empty template, but looking at the screen, it can be overwhelming, arch, vector, project window. What do all of this do? In the next lessons, we will take a tour the Unity interface, specifically from a QA perspective. We will learn where to look for box and how to navigate this complex tool, see you there. 5. Adding Unity project via Fork: Come back in the previous lesson, we downloaded our project is a simple Zip file. That was the quick and dirty way. And today, we're going to download the exact same project again. But this time, we'll do it in a professional way. We're going to clone it. Why? Because the loading Zip is a one time thing. Cloning creates a live link to the server. If the developers update the game tomorrow, the deep user has to unload everything again. The clone user just clicks on button to get the updates. To do this, we need a Git client. I will be using Fork. This is fantastic tool for Windows and Mac that visualizes the history of the project. If you haven't started yet, pause the video and unload it now, it's free for evaluation and perfect for our needs. Let's go back to the GitHub page of our open source project. Look for the green button that says code as we did in the previous lesson, click it. You see here some link. You need to copy it. This is DDPs link on the server which contains the code for that project. Let's open the fork again and clone that project. Here in the file tap, you can see clone button, simply click it, and the program will automatically detect your clipboard. Then just select the destination folder. You would like, put the name, but I suggest not to change it and click Clone here, the fork will start automatically downloading on the project in the mentioned folder. You will see something like progress bar and the words sets that loading some scripts downloading, et cetera. Just wait a bit. This project is not too complicated and overloaded, so download should not take more than 5 minutes. Fork is not just downloading the files, but the entire history of the project. Every change the original developers ver made, once it finishes, you won't see just a list of files. You will see a commit history like here, this is a beautiful graph son who changed it, what and when. This is why we use fork. As a QA, if your back appears, you can look at this graph to see what changed recently. Once the project has been loaded, just check the folder on your computer that you set. You should see the assets folder, the product settings folder, and some files like GIT, never touched ID files because they are the brain of your repository. If you delete them, the link to the server will be broken. After all, you should launch the Unity Hub, click again at from repository. Let me get to the folder you just downloaded, created, and run the process again. Your project will appear here in a few seconds and you will be able to run it. And we are in. You now have the exact project I showed you, but connected to the real repository via work, you are now set up like a real developer. In the next lesson, we will have a small practice. You will be needed to run everything we did to have the same project that I have. So in the fuser lessons, we are able to be on the one wave. 6. Assignment: Have covered a lot of ground. I need to help editors, Hub, fork, and cloning. Now it's time to stop watching and start doing. In the lesson, your assignment is to replicate exactly what we have done so far on your own computer. This is critical because you cannot learn K. Just by watching videos, you need to build muscle memory. What you should do Install Git download and install the common line tool. This is a backbone of your reversion control. Then install client like fork that I mentioned in the previous lessons. Ensure Unity Hub is up and running. This is your gateway to managing unity editors projects. Go to the Github page of the open source project. Check exactly which the project requires to avoid compatibility issues. Unity Hub, install that specific editor version that project requires, and remember to include Windows build support that will be needed in the fuser lessons. Then colon the repository using fork. Try to evodTip and load method. You want to practice the professional overflow, add the project to the Unity cup and launch it. If the project opens and you can press without crashing, you have succeeded. 7. Main Unity elements: Welcome to the Section two. We're going to explore the Unity interface using our D platform or project. Looking at these panels can feel overwhelming. But every window here has a specific job. As a QA engineer, you not need to be an artist or a corder to use them. You just need to know which window gives you the data you need. First, the big window in the middle is the scene view. This is your three D or two D workspace. It shows the game world exactly as it is built, including things the player cannot see. The main goal of it is visual inspection and navigation. This is where you fly around to check level design, find invisible barriers or look at enemies that are waiting off screen. Move your mouse into the scene view, called right click to pen around. Find the snowman and ice box. Notice the white box outlines around them. Those are colliders, invisible to the player, but visible to you here. Move to the left side, the ear arch window. What is it? This is a text list of every single object that currently exists in the open scene. Main goal of it is locating objects. If you can find the coin in the visual chaos on the sinew, you search for it here by name. You can simply type a player and find the exact player. He exact location in the scene. You can expand now, look to the right, the inspector window. This is the property panel. It shows all the settings, numbers, and logic attached to the object you selected. Main goal of it is verification and manipulation. This is where you check if the hell actually 100 or if gravity is enabled. Use this to change values while the game is running test box. Let's select Ice box, and with Ice box selected, look at the components. Transform, shows position, x that. This tells you exactly where the object is, what coordinates have. Spread renderer shows the image. You can test it by changing the color, let's say to the red and see that ice cube has changed. And let's move to the rigid body. It shows physics. You can uncheck the simulated or change mass. If the box feels too heavy in the game, you check this number to prove it. Now look at the bottom, the project window. This is your file browser. It shows every file sitting on your hard drive for this game, each script, sound, image, or prefab. The main goal feed is asset management. Unlike the ERRch which shows what is in the level. This shows what is available to use in general. For example, let's open prefabs. Use here ice box that we change it. Snowman and to trees. If the level feels empty, you can drag a tree one, let's say, from here into a scene to verify if it's a level design issue or a technical issue. And finally, click the tab at the top code game. This renders the game exactly as the player will see it. Main goal of it is simulation. This is where you test UI placement, camera spector ratios, and what actually visible on screen versus what is hidden. Switch between SN and game taps. Notice how the zone box disappears in the game view. That's because the game hides the bucTolsT the cap. SN is where you look around. Erchin is the list of what's alive. Inspector shows you details and settings. The project window is the library of your files, and the game tab is the final output. In the next lesson, we will dive deeper into game objects and components to understand how a player is actually built. 8. Object and Inspector: Back in Unity, everything you see the fox, the coins, the ground is called a game object. But here is the secret. A game object is really just an empty container. Think of it like a cardboard box. By itself, it can't move. It can be seen, and it has no physics. To prove this, select the ice box in the hierarchy and look at the inspector. See the name at the top. That's just a label on the box. To make this box actually do work, we have to put things inside of it. These things are called components. Every single game object has one mandatory component, the transform. Basically, this component answers the question. Where am I? Is main goal is positioning at sizing. Without it, the object wouldn't exist in the universe. See it in action. Look at the transform component of the ice box, find the position Y value, hover your mouse over the Y label and track it left and right. You see the box moving up and down in the scene. You're directly changing its coordinates. Why does a QA care? Well, when a player reports a bug, saying, the crate is floating in the air, you don't guess. You looked right here. If the Y value is incorrect, you know it's a placement bug. Now, how do we actually see the box? That is the job of the sprite renderer. This component handles the visuals. It tells Unity exactly which image file paste onto our cardboard box. Look to the inspector again. You see the sprite fields, says ice box. That's the image file. Tread this. Click the small checkbox next to the names Bright renderer to turn it off. The box vanishes. But notice the game object is still selected, the container is still there, but the paint is invisible. Here is the QAus case. Invisible enemy box happened exactly like this. The object is still running, the enemy is still attacking, but the renderer got disabled. Now you know where to check. So we have a box and we can see it. But does it feel real? That is the job of the reheat body today. This component as physics simulation, specifically mess and gravity. Check the settings. The mass is set to one. If you change this to 100, the box becomes incredibly heavy and our fox might struggle to push. Also look at gravity scale. It is set to one. If you set this to zero, the box will float away into space like a ghost. Let's check this. You see that the ice box it just disappear because as I said, it just float away into space. For QA, this kind of knowledge is critical. If an object falls to the floor or acts weirdly, taking the rigid body is your first step. Usually someone forgot to turn on simulate it on. Finally, let's talk about relationships. Game objects can actually hold other game objects inside of them. This is called parenting. Go to archy and find the player. Oh Fox. Click the arrow to expand it. See those objects inside. The ground check, light to D footsteps impact effect. The fox is the parent, and these are the children. The main goal here is grouping. Wherever the parent goes, the children follow, try moving the player object. Notice that light to D moves perfectly with him. This is huge for QA. If you see a buck where a weapon is floating ten feet behind the character, it means the child object that moved away from the parent. The link is technically working, the offset is wrong. So to the game object is the container. The transform places it and the render throws it. The rigid body moves, the object, and the parenting glues them together. Now that you know how objects are built in the next lesson, we will perform some digital surgery to break them intentionally. 9. Character details: Hello again. In the last lesson, we build an object. Today we're going to do the opposite. We're going to perform digital surgery on Fox character. As a queue engineer, you don't usually build the game. Your job is to dissect it to find out why it's broken. We're going to take our fox and disable his vital organs one by one to see exactly how specific box happen. First, press play. Let the fox settle on the ground, then play pose. Select the player in the ear arch. And look at the transform. This component is the object GPS. Is main goal to track location. Let's mess with it. Hover over the position viable and drag it to the right. See the fox float into the sky. Now pause, he falls back down. Here is the QAuse case. When you write a bug report like player stuck in the wall, never just say stuck. Look at this component. If you write player stuck at coordinates X, then Y three. You just save the developer 15 minutes of searching, give them the exact map coordinates of the bug. Now let's look for the visuals. You might notice the player object itself doesn't have a picture attached. Into the games, developer often put the art on a child object. Expand the player arrow. We have already expanded and select the child named SR, which stands for sprite renderer. This components only job is to throw the fox and check the box next to sprite renderer. The fox disappears, but look at the game view. The camera is still moving, right? The logict is alive, but the ghost is invisible. Let's turn it again and eat here. Q scenario is the invisible enemy bug. If you get attacked by nothing, it means the enemy exists, but the specific component failure to load. So you can simply find in the Ear arching the enemy. For example, check its sprite renderer if it's a turn one. Now please reenable sprite so we can see him and select the player parent again. Find the capsule collider to you see that green outline around the box in the scene view, that is his solid physical shell. While the game is playing, I checked the clutter component, and he falls straight through the floor into the void. If you ever see a buck where a player walks through the lock door or falls through the ground, 99% of the time the collider component was accidentally disabled or resize it to be too small to show you exactly what is the capsule collider, you can move to the scene, navigate zoom in to your fox player and turn off capsule collider. This green thing is actually your collider. It will be set up by developers or artists, so you could not never touch it. Just check whether it appears or not. Finally, let's look at the brain. Find the script component, likely named as player controller or moment. We can see here player controller. This is where the developer exposes the game rules. Find the arable like move speed. Currently, it's set to eight. Change it to be 40, right around the game. Um, at first, you need to stop the game, set 14, and run it again. Now, you will see the extremely high speed of the fox. These can be called small stress testing. Can the players keep the entire level if they move too fast? Does the game crash, I jump force is set to zero, you test these limits right here in the inspector. And finally, to recap our surgery, you can check transform for coordinates a cup, renderer for visibility of your object, collider for solidness, and scripts for game balance. Next up, we look at the prefabs, the blueprint system that let us create an army of snowmen without building them one by one. 10. Basics of Prefab: Bag, imagine that our level has 50 trees. The game designer decides. These trees are too small, make them double size. If we didn't have prefabs, the developer would have to click 15 different trees and resize them one by one. That's a nightmare. Instead, Unity uses prefabs. Think of Prefab as a master rumbertmp. You change the stamp once every single stamped image the game updates instantly. For QA, that means that fixed in level one can accidentally break level five because they share the same stamp. Do you know if an object is a prefab? Look at the text color. As you can see, some text is black or white. This means this is unique object. It exists only here, for example, point to the snowman. The text is blue, blue means linked. It means that object is just a clone of a file on your hard drive. Give a warning. If you see an object that should be a prefab, you're 100% sure it's a prefab, but the text is black or gray. It means the link is broken, the enemy would not get any future updates. Call this unpacked. So where is the master file? Select the snowman in the ER archie. Look at the top of the inspector. See the line says Brief up. Yeah, right here. Click the button and say select. Unity jumps to the project window and highlights the snowman file. This file is real object. The Van scene is just a ghost. And the use case for you is like if you find a bug in the Snowman'sE art, check this file. If the file is wrong. Every snowman in the game is wrong. Now let's do some magic. Double click the Snowman file in the project window. The background turns blue. We are now in the pre filed mode. Select the snowman here. And change its scale to, let's say, two, two, and two. Now click the B icon here and see that every snowman now is a giant. This is how regression box happen. A developer changes a prefab to fix a specific level, but forgets that the same prefab is used on ten other levels where that change breaks the game, and your mission is to catch such box. But what if you want just one specific snowman to be tiny? Select one specific snowmen in the scene, change the skill back to one, one, and one. Look at the Spector numbers. They are a they was. But if we put new numbers, they are bold. This is called override. It means I'm still a prefab. But for this specific setting, I'm ignoring the master. Use case here is, if developer says I fix the boss health points, but the boss in the level three still has the old HPA. Check if the HP number is bold. Someone might have manually overridden in the specific level blocking the update. To recap, blue is a prefab. That's good. But black is unpacked, risky thing. Both numbers or text is an overwrit local thing. 11. Search Bars: Welcome Inter Lesson five. In real project with thousands of files, you can just scroll through lists. You need to use the compute tools to find exactly what you need. Today, we will master the search bars and the secret TBC mode. Let's start with the Erg. Click the search bar at the top of it and type Ice. Not just that ice box remains bright, but everything else turns gray. This is the fastest way to check level content. Imagine the designer says, I put 50 coins in this label. Instead of counting them, just type coin. If the list shows only 40 items, you know, ten are missing immediately. Now let's see the project wn go. This is your file atabase. You can search by name, but as a QAP, you should search by type. Click search bar and type exactly type Prefab. The window instantly filters to show only the blue cups, ice box, no man, trees, it hides all the scripts, sounds, textures, and other things. This is in amazing tool for the asset audit. If you need to find every single sound file or prefab to check for Samson, you simply type as we did. Type prefab and see all prefabs that project has. Now the coolest trick debug mode, select the player object. Look at AIDS inspector. You see the nice clean sliders developer build. But sometimes data is hidden. Click the tiny three dots at the very top right of the inspector tab. Select Debug mode. The inspector changes. The nice sliders disappear and you see raw variables. Look at the rigid body to D. You can now see internal physics data like velocity that was hidden before. Sometimes the fox refuses to move, but you don't know why. Switch to debug mode. If you see the velocity is not a number, you know, the physics engine has crashed. Let's check the console. Click the button called error pose. This is your kind of trap. If you enable error pose, the moment a red error happens, the game will freeze frame automatically. This is perfect for crashes or some start bucks. If the game breaks, the instant pound, error pose catches the exact frame it happens so you can see what's went from. We will talk in detail about the console in the next lessons, but this is kind of light recorder that you can use to catch some crashes. 12. Additional debug features: Welcome back student. As a QA, you have two eyes. One eye looks at the game view. This is what the player sees. The nice art and the fox, the other eye looks at the scene view. This is the matrix, you to the logic, the invisible valves, and the traps. Today, we learn to switch between them to catch visual box. Let's start in the scene view as we are. Select the snowman in the Ear arch. Now imagine this level is huge and you can't find him. Hower your mouse over the SNU and press F key. The camera snaps instantly to the nomen. F stands for focus. This case could be like this is your Teleport button. If a buck report says gleich on coin number 45, you don't search for it. You select coin 45 and hierarchy, press F, and order. Now let's look at the Kell Zone box at the bottom. It might be hard to see. In the sinew Tubb, click the Kismus button. The small globe suddenly outlines appear. You can see the green box around the player colder and the red box for the zone. This is how you find invisible wolves. If the fox is hidden something in the empty air, turn on Gizmus. You will likely see a straight green box floating there. Also, by highlighting the Gizmus, you can simply move the objects. The center and move. Now the whole object moves with your cursor and now switch to the game you. This is the player screen. Look at the toolbar. It probably says free aspect. Click the drop down. This allows you to simulate different screens. Select full HD. This is kind of standard monitor. Now, select let's say 16 to nine. You will simulate another aspect, and use case for you could be, for example, you have the game with a coin count, I you see it is cut off the screen. First of all, you can try changing the aspect ratios different. To verify that the buck is with the aspect. Let's check some kind of ultimate debugging tool. And you hit the play, make the fog jump by pressing spacebar and immediately press Pause and now click the button next to pause the step button. Click it a few times. The game advances one single frame at a time. Why this could be handsome for you. If you see a glitch, like the animation popping or feed clipping through the ground, and this is how you prove it. You catch the buck in a slow motion, and to recap everything we spoke about, you can use F to teleport kisms to see invisible walls and move items then resolution settings to check the UI. 13. UI. Canvas: Welcome to the Section three. We're moving from the game world Fox and Snowman to the interface. Score buttons and menus. In unity, UI doesn't just float in the air. It lives on a specific object called the canvas. Think of the canvas as a giant sheet of glass placed in front of the camera. Everything painted on the glass is UI. If you don't have a canvas, you can't have a single button. Look at your ear arch. You see the object named Canvas, select it. I already did this, so on the screen, you can see the canvas opened. You see scene view, Canvas. Now let's look at this scene view. You might be confused. The canvas looks like an enormous thing compared to the outer level. That's normal. Look at the inspector component called canvas. The random mode is set to screen space overlay is located here. As I'm pointing out, this means that I don't care where the fox is. I don't care about TD space. I will simply page this I directly onto the player's screen. Here we can have use case. This is a standard for menus and hats. If a B report says this menu is clipping the walls, it means render mots room. It should be overlay which puts it on top of everything. Let's see how it looks in the game. Here, you see these hearts, these coins, and here it is just like that. So it simply overrides the scene and places on top of our game. In some cases, you want the UI to have three D depths like particles flying in front on the menu. For that, developers use screen space camera. So we can simply change. And if you switch to this mode, you need to ask which camera? You need to track here main camera. In this open source project that we are learning on, we don't have camera. So you can try this by downloading some another project which will contain some scenes and render camera. You will see here Sandro Domino and you can select here the main camera or camera or something called camera. Slot. And the case for the QA would be like if the UI suddenly disappears or gets covered by game objects, for example, Trepan in front of the score can check if the developer used camera mode, but probably forgot to assign some camera. It is a common missing reference back. Also we have here the third option world space. This threads the oil like a normal object in the game. It gets small, it rotates and the fox can walk past it. We use this for health bars that float above the enemy's head. Some kind of QU case would be if you see a float in the space that is huge or upside down, it's WorldSpace canvas with a patterns form. For now, let's switch back to the overlay. Because we want our coin counter to stay stuck on the screen. In conclusion, the canvas is the root. If you disable the canvas object, the entire UA vanishes. Let's try this out. We have here canvas games in. If we turn it off, we see that our coins and hells bars just disappear. 14. Rect Transform: Come back. Let's select the player, the Fox. As you can see, he has a transform position X, Y, that. Now let's select a UI element like let's say $1, a coin. As you can see, it has wrecked transform, not regular transform. It's just because UI doesn't have a position, it has a width, height, and the most importantly, anchors. Why do we need anchors? Let's imagine you place a coin counter in the top right corner of your PC monitor, and now you play the game, let's say on iPad or Smbile. The screen is shorter. The coin counter might end up of screen or floating in the middle. That's why anchors are important thing to maintain before the release, let's say. For example, you have set your anchors to zero. Now let's switch to free aspect. It's gone. It's go off screen. You see it is changing its position because it's not linked to some point, let's say, on some iPad or mobile device or even strange aspect ratio, this icon could just be off screen. Your task as a tester is to verify that encores are set up and on different resolutions, you can see the icon placed where it should be by design. To check if the anchor is set in direc transform, you can click in that square, select Center, for example, and also for the image, and try to change aspects. As you can see, it is not going off screen, but on the free aspect, it's still kind of upper by height by position. So you should verify with the designer where it should be. The thing you should remember is that standard transform is for the games itself for the levels, for the characters, for the ice cubes, no man, coins placed on the level, et cetera. But wrecked transform is for the UI, and encores keep things from drifting away. In the next lesson, let's look at the actual elements, text and images. 15. Buttons, Icons, Text: Finally, let's talk about the pattern. To find it, you should go to the scenes, open the menu scene and see that two dial Ma platformer play and cute two buttons in the Ear arche, select play and see here the pattern. Button is usually just an image with a script attached. As you can see, here is the button component and image. We have no image, no spread attached, so it just filled with white square. As you can see, try a lot of states of the button. Like normal color, highlighted color, pressed color, selected color, disabled color, some multipliers fades and other things. Now we see the normal color. We can change, let's say, highlighted color to be red and pressed color to be green. And now we should see when you highlight the red. And when you press, I press my left mouse button. Green color. So it simply changes the colors, handles all the colors here in the button script. Kind of Kuse case would be if you disable a button, but it still looks clickable. Check the disabled color. It should be gray. If it's still white, the user will be confused. So simply we have disabled color and gray. Let's stop the play mode. Let's change it to kind of blue to differentiate. And to make this date like disabled, just click that interactable button. If you uncheck this field, it means that button is not interactable. So it is disabled, it touches disabled color as we decided it would be blue. So now if you will run the game, you will not be able to click this button at all. To wrap up what we said above is images. They show art. Text shows data, buttons, handle clicks. But what happens if you have a button, but clicking it does nothing. It might be blocked by ghost. Let's talk about recast in our next lesson. A object is usually just an empty rectangle until we had an image component. Select one of your taller objects in the canvas. I selected this one. This one. Let's look at the inspector. As you can see, here is source image. In this slot, the coin sprite leaves. You can change it on any kind of sprite you have in the object. But let's keep taller one. And let's look at the image tag setting. It's a bit lower. As you can see this ton, we have simple sliced, tilted and filled. Simple, it just draws the picture. Slice it. Used for buttons, so borders don't get blurry and stretched. And field is used for health bars. Kind of DIU case would be if the health bar isn't draining, you need to check if the developer forgot to set the type to field. If it's set too simple, scaling it will just squish the image. Let's look at some examples of image types. So as I said, simple, draw the picture. Slice it is used for buttons. So in such case, it would not be visible. It should fix the borders so they don't get blurry and stretched. As for the tilted, you can see that it throws some kind of pixels per unit. Increasing the value will increase the amount of in icons placed inside of this slot, and the last one is filled. This one does some field amount like radial field. You just see we can do like half the icon or full icon or any kind of another solution. Now let's select a text object, go and pick up text in the arch. You see it highlighted, so let's type in the text field some long sentence. Let's say, square 099999. The text in this scene might just disappear or get cut off. This is controlled by horizontal or vertical overflow. This setting. As you see, by changing the method of overflow, the text is showed by another truncate. Let's say just cuts the text that isn't in the box, like hides it. Yeah. The overflow does nothing. The ellipsis shows like dots mentioning that some text is hidden and many other things does the same. Use case here is localization issues. If the game is translated, let's say to German words are really long, the text might break the UI. You can test this by typing some long random string into the inspector, into this field, like I did to see if the UI explodes or not, and by changing some overflow settings, you can also verify this is a B. 16. Raycast: Welcome into lesson four. How does Unity know you clicked the button? It's simple. It shoots a laser or recast from your mouse cursor to the screen. The first v element, it hits, it clicks. But here's the tanger. Some transparent items can block that laser. Let's verify that. On the same scene menu in the scene view, select the play button. Here you can see on the image, under the image recast target with two states checked and unchecked. If it's set to checked, it means that I can be clicked, I block the mouse. If unchecked, I'm a ghost. The mouse passes through me. QS scenario is imagine, you have a level complete screen that fades out. If the screen is invisible, like Alpha set to zero, but Recas target is still checked, it acts like an invisible glass wall. You won't be able to click anything in the game. If you ever report a box saying, I can't click the Starkm button, do this, look at the ERT. Is there panel or text below the button in the list? Like we have Play button. Here we have text and verify if, does that object have recast target checked? You select text, you move to the inspector, extra settings. Recast target. Yeah, it is checked. In some cases, that could be the blocker. The button is fine, but it's been covered by some invisible shield. So q rule, any image that doesn't need to be clicked, like in I context, you should usually have recast target unchecked to improve performance and prevent box. So the recast target determines if an object is solid to the mouse, but who actually calculates the click? That's the job of the event system about which we will talk in the next lesson. 17. Event System: Hello, look at your ER arch. You see an object called Even system. It usually sits there quietly ignored. But the object is the power cord of your UI. It has components like standalone input model. It listens to your mouse, keyboard, and touchscreen. Let's see what happens if you lose it. Select the even system, press delete, and press Play. I'm clicking the Play button, cute button. So another clicks. That doesn't work. Nothing happens. The jo is dead, like the visuals are there from canvas, but the brain is gone. The Ius case is if you lower the level and none of the buttons work, check the ararta D developer accidentally delete the even system, or maybe they have two even systems fighting each other. Now just press control that to undo our deletion. And look what we have here. We have here horizontal lexis vertical lexis some other things. And let's talk short about horizontal axis and vertical xs. These things, they are mapping the UI navigation to your WASD keys or controller joystick. And the use case here might be if a player says, I can't navigate the menu with my Xbox controller. You can check here. Is the input model set up correctly? Are all of the headings are present? Also, this object handles touch input for the mobile. Without it, tapping the screen dust mask. This one. So you need to check the Sandal input model if everything is here. Let's recap a bit. The event system is kind of simple. You need exactly one. No more, no less. Canvas holds the UI, anchors keep it on screen, Recast target blocks the mouse, and even system listens for clicks. Now you are ready to test the front end of any game. In Section four, we will start digging into the code. See you there. 18. Player Controller: Welcome to the Section four. Up until now, we have treated the game like a black box. We click buttons and hope they work. Now we're going to open the box, select your player object in the ER arch. And find the player controller script. This is the brain. It tells the fox how fast to run, how high to jump, and when to die. To a developer, this is a text file. To you, it is a control panel. Look at the settings exposed here. We have more speed, jump force, double jump force, and many others. These are the public variables. Developer intentionally created these sliders so you can tune the game. Let's use them to break things. Let's press play Let's change, move speed. Let's say two T, press Enter, and try. The fox zooms across the screen instantly. That's because we just changed one variable. This is kind of stress test in this case. You might ask, if the player gets speed boost power up, will the eclipse the walls? You don't need to ask Dev to make a power up. You just simulate it right here by changing simple variable. Look further down in the setting called control mode. I now is set to PC. Click the drop down and you can see the mobile. This variable is NAM. It acts like a switch. If you're testing the mobile UI on your computer, don't just guess. Switch this to mobile. The script will see this change and enable the touch screen options. If you report, mobile controls don't work on PC Editor, check these settings at first. But what about the logic? You cannot see. In this script in the code, there is a variable called I grounded bull. The game uses is to decide if you're allowed to jump. But look at the inspector. It is missing. That's because it is private. What if you have a buck where the fox refuses to jump? You need to know if the game thinks is he grounded. Here is the trick. You can switch to the debug mode and see that it exists. You can see that it is great out and you cannot change anything here. As I said, it is a private variable, so you cannot work with it, but you can use it like Xray. If you play the game you can see it became checked. It is because you are standing on the platform that accommodates you as you are grounded. It allows you to stay on it. One last check. Look at the player Anim and footsteps. If these slots ever say none or missing, the game will crash the moment you try to run. A rule is to always check for none in the script slots before you press play. These kind of properties that are set by designers or developers. So you should not tie them, but you can simply check if they are assigned in their slots, not causing the errors in the console. Let's recap a bit. Public variables let you kind of stress test the game. Debug mode reveals hidden logic like we had is grounded bull. In the next lesson, we will look at the code file itself to understand when these checks happen. 19. Player Script: Come back in lesson two. In the last lesson, we changed variables in the inspector. Now let's look at when these changes actually happen. Let's open your player controller script. You can do it either by finding script in the project right here, or if you have inspector open it, you can write Mouse button, click Edit script. And it will open. It will ID. Please know that you should have some ID on your device so it can be processed. When you installed Unity, there was a check mark to install Visual Studio. If you haven't done that, you can simply move to your Unity Hub, proceed to install the installs and install Visual Studio or just download on Microsoft website. Find in this script private void star. This is the setup phase. You need to run this block exactly one time. The framed object is created. Look at the code inside. This means that the script is gathering its tools. It grabs the physics and the particle system. Here is the QAS case. If the game crashes immediately when they level loads with a no reference exception, it's usually here. It means the fox tries to grab his footsteps particle system, but it wasn't there. If the crash happens instantly, look at the start. Basically, you might not even look at this. You can just describe this in your bug report to navigate the developer at exact point. This will save time for him to fix these. Now let's look at private void update. This is the game loop. This code runs every single frame. If your game is running at 60 FPS, this code triggers 60 times per second. Look at what is inside. It is constantly asking, are we on the ground? Did the player press jump? As case here is where performance box hide. If a developer puts a heavy calculation here, the game will lag because it tries to do it 60 times per second. So if you see an error in the console that counts up like crazy, one, two, 100, 1,000, the error is inside update. Let's trace it back. Look at lines inside update. Is grounded bull can double jump equals true here. This logic says, if we are touching the ground, a recharge stable jump. Imagine a box where the player can jump infinitely. You would look here, is this property getting stuck as true. If so, the game things you're always on the floor, so it keeps giving you infinite jumps. Let's look at a dead code. Scroll down to the public void hoot. This code is commended out with slash this means that shooting system is not working in the game. If you press the shoot button and nothing happens, Junior QA might say button is broken, but Senior QA looks at the code and says the logic is commented. The feature is not implemented yet and you just saved an hour of debugging. Let's recap if you look at start, it means that the game runs once. Crashes here happen on lot. If you look at update, it runs forever. Errors here, samdiconsPublic functions, controls exposed to the UA. In the next lesson, we will look at the stack trays. The treasure map that tell us exactly which line of d exploded. 20. Console functionality: The last lesson, we looked at the code. Now let's talk about what happens when the code breaks. When unity crashes or throws an error, it doesn't just scream help. It leaves a detailed map of exactly where the crime happened. This map is called the stack trace. To understand it, we're going to intentionally break our fox with a fake error. Open your player controller script. Scroll up to the void start function. Avoid start function. We're going to add a line that forces Unity to report the failure. Inside of brackets of start between these two, you need to add deadline the budt Log error, some texts BQA test system failure, and press Controls to save these changes. Then let's go back to Unite. You need to play the game, press Control R to update old scripts, then press Play again. And immediately, you will see a red error appear in the console. You can pause the game or just continue looking at it without pausing. Let's look at the console interface. You have here clear collapse, error pause, and to drop down. Clear. This button wipes the history. Use it if you have old errors confusing you. Collapse. If you click this, identical errors stack up into one line. If you see a number like 999 plus, it means that happen in every frame, likely in the update, and error pause button. If you turn this on, the game will freeze the exact millisecond and error happens. Let's click on the red error message to highlight it. Look at the text box at the bottom of the console. This is a tag trace. You read it from top to bottom, the message. The top line says, QATest system failure. This tells you what exactly happened, the location, and look at the end. It says the root, the place where that error happens. Exactly at the line 53, let's open the Visual Studio, Line 53, where we place at our loc error, a small hint. You can double click the red error line in the console. And it will open the exact line of code where the issue happens. In the real crash, this line might be where the mass failed or where the game tries to load missing file. You don't need to fix the code. You just need to screenshot that line, screenshot Console or anything related to this, just to show the developer exact issue where it where it is located and its name. That should be enough. Before we finish, let's go back to the script and delete that debug, so our game works again. Simply remove it. Control S, and pose control. I reloads the script. We can play again. Yeah, no errors. Nice. So to wrap up everything we spoke about, read text in the console. That's error. File name number is the exact location. If you double click, you do report to the exact line of code. And in the next lesson, we will learn the big three exceptions, specific errors, names like no reference that you will see like 90% of the time. 21. Decoding Unity Errors: Welcome back. In the last lesson, we saw how to read an error map. Now let's learn the names of the monsters you find there. As a QA, you will see hundreds of different errors, but 90% of them will be just three types. No reference exception, the missing link, unassigned reference exception, the empty slot, and index out of range exception, the last overflow. And today, we're going to summon the king of all errors, the null reference. Select your player object and look at the player's controller component. Find the slot named footsteps. Currently, it holds a particle system. This is the link. The code expects to find a particle systems here to play dust effects when you run. Let's break it. Click the tiny circle. It's a selector and choose none. The slot should now say non particle system. We have just stolen the fox shoes. Now press Play button. Oh, you see a lot of red errors here. What does this translate to? It means the coat tried to touch something, but it crasped and thin air. In our specific case, the start function tried to grab the emission settings on the footsteps, but since we remove them, it grabbed no or nothing. You cannot change the settings of nothing. This is the most common Bu report. If you see no reference, your first instinct should be check the inspector slots. True. So you basically stop the game, look at the player controller, and if you see the empty slot, that's the issue. Probably it is here. You can try to select some let's say properties, assign them, and check if the game runs without issues. From the experience, you will be working with the more complex projects than our. So probably it is better to deliver this work to the developers. So the main goal is just to validate that nothing in the inspector has none. If something has none, probably it's the cause of the issues in the console. You can do. You can capture the screenshot of the issue of the console. You can screenshot the place where none exists and deliver this in your bug report for developer. The second type is index out of ranch exception. This happens with lists or inventory systems. It means trying to grab item number five from a bag that holds only two items. Our fox doesn't have a list. So let's fake one. Open your player controller script in the start function, add these two lines of code. A back and trying to grab. Save this and return back to Unitiu. Run the game, press pause, go to top. Here it is index out of range exception. So the logic count is wrong. Usually this happens when developer tries to load level ten, but the array of levels only goes up to nine. This is a common issue, and the third one is unassigned reference exception. This is the polite cousin of null reference. It happens when you need to check the slots before the code runs. DC this error. It means the exact same thing as null reference. You forgot to dig something into the inspector. However, this specific error usually tells you the variable name in the error message like variable, let's say packed effect has not been assigned. It is literally telling you which slot is empty. You can simply read the error, find the slot with that name and fill it. Here how it looks like. I did none for the impact effect, started the game. And receive assignment reference exception, variable has not been assigned, which means that impact effect in the player controller has none. To recap everything. No reference means that slot is empty while run time. An assigned reference simply the same slot is empty, but it's just an editor check, and index out of range tries to access a list item that does not exist. 22. Errors Sorting: Come to the final lesson of Section four. We already know that red means error, the games broken. But sometimes the console talks to you in white or yellow. This is the traffic light system. The white lock means that I'm working correctly. The yellow is warning. Be careful. Something is weird. Red, as you already know, like I crashed. Let's modify our code to see this in action. Let's open player controller again. Let's navigate to the start function and add two lines of messages that Cancel system will just print for us. Please add these two lines, Debug clock with something debugged lock warning. Save this script, go back to Unity, press play. Now you see that you have white, yellow and red. Let's go back to the top of the console. Here it is. The white message says QA status player is ready. Like developer use this to track logic, like player spun, do open it, score edit. So nothing critical here. The yellow message says Q warning. This is test warning this is crucial. A warning means the game did not crash, but something is wrong. Maybe a sound file is missing or texture is too big, and hint here is never ignore yellow. It might not break the game now, but it could cause lag or memory issues later. You should speak with the developers asking whether this yellow error means something critical right now and log that to your back tracking system. A big project, the console can get spamming. You might have 5,000 of different logs. Look at the top right corner of the console window. Here you can see three icons, white yellow and red. If you click, one of the means it just disappears. It hides. It hides from the console. So you can create you can show only say red errors or only yellow errors or only white errors. This can be handy if you're hunting for, let's say, crash. You can simply turn off white, yellow, and turn non red. So you work only with the crashes errors, no references, and many others. Don't forget to get back to your script and delete those to the bug lines and others if you have. So we keep our code clean. To recap Section four, the inspector is gray box testing and variable check. Stack trace is the map to the crash. No reference is the missing link, and the ox warnings are the health monitor of your project. See you in the Section five. 23. Game Manager: Welcome to the Section five. We're leaving the actor, the Fox and meeting the director. In almost every game, there is one invisible object that controls ruse, the game manager. It doesn't run, jump, or shoot. Instead, it counts points, decides when the game is over, and tells the UI what to display. Select the game manager in your ER arch. Look at the inspector for the game manager object. As you see, it acts like a switchboard. It connects the logic to the UI. Here you can see coin text. This tells the manager where to write the score. Level complete panel. This is the screen that pop ups when you win. Player controller, it knows where the fox is. But what happens if these cables get unplugged? Let's try it. Let's in level complete panel, switch to none. Now let's play the game. And let's try to finish it. You see what happens? The game stops, but nothing appears. The screen is frozen. You cannot click next level, exit or any kind of buttons. This is called a soft lock. The game logic worked, but the UI logic failed. It tried to show a panel that didn't exist. Soft locks are the high severity box. Whenever you find one, checking the game manager's reference is your first step. Also, during the session, we'll earn some coins. But what if we start game again? We see zero here. This game currently has no safe system. It uses session state. The game manager holds the coin count in a private variable that lives only as long as the game is running. So it is like if you start the app and your coins are gone, this is correct behavior for this project. But if you had a safe system using player preps, the coins would stay. As a QA, you must always ask the designer should this data be persistent, saved somewhere or transistent session only. But for this game is transistent. Finally, reconnect your level complete panel so the game works again. To recap, the game manager is a single referee. If it loses a reference, the game soft locks. In the next lesson, we will look to test inputs, specifically, how to trick the game into syncing PC is a mobile phone. 24. Simulator basics: QA. You often need to test mobile features on your PC. What if your Unity editor doesn't have a phone view? First, let's check your toolbox. Go to Window General. If you see device simulator, you're safe. If you don't see it, you need to go Window package manager, select here Unity registry and search for simulator devices. Yes, it is. And click Install. I have it installed, so just if you don't see it under the window general, do these steps. Now, let's test the input logic. Select the player object. Look at the control mode. Here now we have PC, let's switch it to mobile and press play. Now, if you will try to move your fox with WHD buttons, you cannot. This is the correct behavior. You successfully verify that the code that is related to control mode changes and working. You switch it to logic flag and the PC controls now gone. Even if you don't see on screen buttons yet, you confirm that input lock works. Now stop the game as when you see what the players is. In your game view here, switch here. We need to see what the player see. So we should switch from game to simulator. And your game now is inside the tablet frame. You can switch here to any device you would like. For example, iPhone 12. Let's run the game. You can rotate, landscape and portrait mode. And by this, you can verify that the notch is not covering any UI. Everything looks good. The most quick cases here might be like the notch covering score, that rounded corner, cut off the pause button, exit button, and does the game like not going out of the borders. We are in the simulator mode in mobile mode, we should see the touch buttons. It might be that in that project, we don't have them implemented, so we might not see them. But usually in the mobile games, if you test them using your PC in Editor, you should see here the buttons like on real device. And this is a very good case for QA to find such high priority back. Like mobile controls are active in logic, but UI buttons are invisible. So you simply do all actions as we did and verify whether the buttons are active or not. Don't forget to switch your game back to the game, return to the scene, return control mode to PC, so we can move our fox again. Finally, to recap, package manager installs missing tools like in the window, package manager can find something or you can simply check all the list with everything Unity needs to work properly. It depends on your project. Many of these you might not even need control mode as we did from PC to mobile switches the internal logic and simulator. It reveals layouts, mobile layouts with which we can find bugs like the Notch bug. 25. Creating the build: Back, you probably know how to click the build button because we did that in Section one. But do you know what are you building? In QA, we deal with two types of builds release build and development build. Release built, this is for the players. It is optimized fast and secure. But as a development build, this is for us, for our internal testing. It allows us to connect diagnostic tools and see errors. Today, we're going to configure a proper Kiwa build. Let's navigate to the file, build settings. And look what we have there. Let's look at the white box at the top. Scenes in build, you see scenes Mullah menu on the right. He number zero. Level, number one. This is a critical moment. When a developer writes code like to load scene one, they are trust in this list. So if you ever test a game where clicking Start accidentally reloads the menu instead of the game, you should check this list. Usually, the scenes are in the wrong order. Level is zero, menu is one, you should always ensure the splash screen or menu scene are at index zero. Now let's look at the settings on the bottom right. Find the checkbox, label it development Build. Check it. Notice that some of the options became active. Why does a QA should care about this? If you report it back saying the game feels laggy, the developer will ask, Did you capture a profile? Cannot capture data from a normal build? You must request a development build. It essentially leaves the hood of the car open so you can inspect the engine while driving. Also, let's look at the architecture drop down. Suggest as Intel 64 bit and Intel 32 bit. If you are testing for kind of very old office computers, you might need 32 bit. But if you try to run 64 bit game on 32 bit Windows, it crashes instantly on Fung. So be way to select the correct one. By default, it says 64 bit. As we will need some logs in the lesson five, I suggest you to run the build right now with development build tick. So just select your folder under the project folder. Don't save anything. Verify that you have checked Bs scenes and let Unity build the game for you. 26. Performing Smoke test: Come back. You have just built another version of the game. Now, let's answer the question. Do we spend 8 hours testing every single all collision? Now, first, we perform a smoke test. The term comes from plumbing. You pump smoke into a pipe system. If you see smoke leaking out, you don't bother fixing the smoke cracks yet. You know, the whole system is broken. In QA, a smoke test is a ten minute pass to answer one question. Is build stable enough to start testing. The game crashes on line or the started button doesn't work, we simply reject a built immediately and send it back to the developer. Let's run our test. Double click on your dot xle to deplatform. Check number one, doesn't launch. It sounds silly, but crash on startup is very common thing. If you see the unit display screen, you pass step one. Check number two, resolution and UI. First, look at your main menu. Since we left the default settings, the game likely launched in the full screen. Three pressing O plus Enter. That's a switch to Window mode. In the editor, the UI always look perfect because you said the resolution manually. In a standalone build, the game has to guess the player's monitor size. If the start button is cut off or off screen, fail the smoke test. Now let's click the Play button. Does the scene change from menu to level. We confirmed in the build settings that menu is zero and level is one. If this button does nothing, it means the scenes list is empty or the button isn't hooked up. This is a blocker. You cannot test the gameplay if you can't enter the level. Once in the game, do some actions like run, jump, move the eblock, collect money, et cetera. Like we see that inputs work, that's great. Here is an example of test that you can only do in the build focus loss. While running, press T plus Tap to switch to your desktop or browser. While I'm doing this combination, the fox like freezing. If I click on the window, everything became okay. The main questions here could be, did the game crash? Did the music loop? Did the fox fall through the floor while we were tapped out? Robot game should autopause or at least handle losing focus gracefully. If taping breaks the physics, a specific standalone build back. Finally, how do you te? In the editor, we press the stop button. But in the build, you don't have that. If your project, don't have any exit buttons, you're stuck. You have to use force cut out plus a four. For a PC game, missing Cute button is a valid bug. So you should discuss this with your designers, developers, whether it already has that cute button or not. Because if you agree that cute button should be and you don't see it, that's a bug. Main idea of smoke is, if you have the game that launches, plays, closes without crashing, without freezes, this means that smoke test is passed. You can work with that build, test it, and tent and lock any other box you may observe. 27. Logfile of the build: In the last lesson, we run our game as an executable. But imagine this you send a built to a tester, they double click it and easily closes. They observe a crash. They ask you what happened. But you can say, check the console because there is no console in the build game. However, Unity always writes down what happens. It just hides. This is called the player log. Let's find that player log. This requires some detective work on Windows, but on the video, you could see the full root. It's like hard drive C users, your username, app data, Lolo default company, to the platformer. You are now in the hidden storage of your computer. Let's open this log. Simply open it with your notepad. You will see a lot of words here, a lot of lines of something. Let's see what is it. This look familiar to the Unity Console. You can see here something like initial sense inversion, some information about your PC, some driver things. Your log that you created during previous lessons, some new back information, et cetera. Simply, it's a clone of Unity console, but made with TixtFle. So if you ever observe some crashes, free slacks during development build testing, you should navigate to this player that log file, inspect it, find no reference or another type of issue, screenshot it or copy paste into your bug report, and that's all. Important thing is that Unity overwrites this file every time you launch the game. So if the game crashes, and then the user reopens it to see if it works, the crash lock is deleted and replaced by new. So you should, after the crash, immediately navigate to this file, copy and paste it in case not to lose everything. 28. Basics of folder structure and cheats: Many junior testers make a classic mistake. They copy the dot file to bet, give to a friend, and say, Here is my game, and it fails immediately. Why this happens? Because dot is just a brain. The body, textures, sounds, levels, they live in a separate folder. If you open our two Dipo former Unity, build folder, you may see there are some folders, file, and others. Our body lives in dip former data folder. If you open it, you could see here levels and other assets that we have in that project. This also could be a part of smoke testing when you have built from Unity. We can open that folder and validate everything is here because if this folder would be empty, this simply means that you would need to rebuild from Unity to restore the files. Tomson was corrupted during the build. One more important thing for QA is to have a lot of development flex or easily to say the Buck cheat panel because QA needs some tools to test faster, like wood mode, speed up, money cheat, and others. Playing the game at normal speed is too slow. QA doesn't have much time to test the whole game without hits, and it's normal to have a lot of cheats during the development phase. The main idea is not to pass them into the release build. Means that you should not hesitate to ask your developers to provide you with some cheat panel or even simple lines of code that will simplify your life, and you will simply press some hot key that will make some things in the project that basically will speed up the testing process. 29. Introduction to performance indicators: Come to the Section six. We are now entering the world of performance testing. Before we open the heavy machinery, we need a simple speedometer. Look at your game view in the top tool bar, click the stats button. This gray box is your dashboard. Right now, your game is running at roughly 66 FPS. This is good. A smooth game typically aims for 60, but look at the number next to it. To a developer, this milliseconds number is actually more important than FPS. Why do we care about the milliseconds? Imagine that you have a budget of 16 milliseconds to draw one frame. Your game is currently using 15.1 0.3. You're very close to the limit. If you just two more milliseconds of heavy coat or pig explosions, your game will drop below 60 FPS and start to statter. As a QA, you don't just report low FPS. You should report the spike in milliseconds, like game runs at eight milliseconds normally, but spikes to 25 milliseconds when the bot for example. That tells the deaf exactly how much optimization they need. Look at batches, 29. Think of a badge as a conversation. Every time unity wants to draw something, it has to pick up the phone and tell the graphics card, draw this snowman. That is one badge. If you have 1,000 objects, you don't want 1,000 phone calls, that's slow. The oportunity to bundle them up and say, draw these 50 trees at once. Look at saved by patching 2029 batches is excellent for mobile. If this number was 2000, your phone would melt. A sudden jump in batches usually means dynamic batching broke. Look at trees and words. These are the complexity of your art. Of triangles is nothing. Modern forms can handle 1,000 hundred easily. However, if you import a three D model of car that wasn't optimized well, this number could jump to 5,000 hundred. If the game lacks only when you're looking at specific object like detailed statue, you should check this number. If trees jumps from two K to 2000 K, you found issue an unoptimized asset. By this, your baseline is set 15 milliseconds and 29 batches. Write this down. In the next lesson, we will open the profiler, the Deep diagnostic tool, and we will record a spike to see what pushes us over the 16 milliseconds budget. 30. Profiler: In the last lesson, we used the stats window, our speedometer. Now, we use the profiler. It is inside the code. Let's open it. Find Windows, Analysis, profiler. Open it here. Look at this. The colorful graph moving from right to left, this is kind of hard pit of your computer. What we have here, something green. It's rendering or graphics, something blue that are scripts or logic and yellow. That's sync or waiting. If the graph is flat, the patient is stable. If you see a giant spike, the patient just had a heart attack. Look at the top tool bar of the profiler, attached to player. I should say play mode. This means we're testing the game inside of the editor. Record. The red circle button. It must be clicked to capture the data. You can stop or start De profile. You should leave this off. It makes the game run extremely slow and isn't needed actually for general QA. Let's do a short test. Click inside of your game view and make the focus jump or collect coin. For example, let's move. Let's collect them. Let's make some jump, slide the ice, more jumps, more movement, more coins. Watch the graph. Did the blue or green line jump slightly? That are the computer thinking. Now, let's freeze time. While the game is still running, click the stop or pause button on the Unity Editor. The profiler graph stops moving. You can now scroll back and forth on the timeline. Click on the highest spike you can find, for example, this one. When you click a frame, a vertical bland appears. Now look at the ER arch view at the bottom half of the window. This list tells you exactly what happened in the 16 milliseconds. A junior QAs panic, CPU is 100% yellow. Is the game broken? The answer is no. Yellow usually stands for VCN technology or wait for target FPS. It literally means the game is running so fast the CPU is waiting for the monitor to catch up. If you see high yellow, your game is actually optimized. If you see high blue or green, that is lag. You now know how to freeze a frame, but how do you create a real expec test? In the ex lesson, let's try it. 31. Spike catching: Welcome to Lesson three. In real job. You would not write Le code, but you'll find it to learn what it looks like. We have attached a script code Leg generator to our fox. It has one job. When I press L Hotkey, it forces the CPU to do 5 million mess problems instantly. This simulates an optimized code, like a developer trying to calculate the best of 500 enemies in a single frame. Now I will do this experiment. Since I already attached the script named Leg generator to the player object, now I press Play Game. And when they run and press L, look what happens. The game freezes for a second, but see what happens in the profiler. Let's suppose. There are some blue stacks in the ear arch at the bottom. You may see here the cause of that blue he scrapper, L generator update. That's what I added. And by this, you have just traced the leg back to the specific function that caused it. In a real report, you would write spike of the 281 milliseconds detected. Profile indicates lag generator script is the cause. Pretty simple. Also, as you see, the color is blue. As I said before, blue means scripts. If spike was green, it would mean rendering, something related to texture, shadows or something. As a QA, differentiating between bad code and bad art is the most valuable hint you can give to the theft team. But what happens when the game runs out of memory. In the next lesson, we look for garbage collector, the silent killer of mobile performance. 32. Garbage Collector: Far we have talked about the CPU, the brain. Now let's talk about the RAM, the memory. Think of your game memory like a dinner party. Here we have the allocation. It means every time the game bounces an enemy or creates text message, it takes a clean plate from a cupboard. The garbage is when the enemy dies, the plate is now dirty and left on the table, and the garbage collector or GC means that eventually the table is full. The game freezes completely while degenitorGC. Is to watch the plates. The lack that this is like leg Spike. As a KA, your job is to identify when the enemy is making too many dirty plates. We not need to write code to see this. We just need to configure too. Let's get back to the profiler. Look at the bottom half we know the Arch list. To remember you, you can switch from timeline to Archie here. By default, you see columns like time millisecond, self millisecond. Right click on that bar and make sure that you see a lock is turned on. This is your trash meter. Measures garbage collection allocation. How many bytes of treasure create in this specific frame. Now let's press play and record a few seconds of gameplay, doing some jumps, collecting coins, and something else. Jumping, collecting coins, more jumping. My nice. Pause the game. Let's click on some frame. Let's select this one, for example. Look at the GC log column. In a perfectly optimized game, during normal gameplay, the number should be zero bytes or very close to it. Basically, zero bytes mean that the game is clean and no trash is being made. 20 bytes is acceptable, probably some score update. If we have 1 kilobyte plus, it's warning sign that something is incorrect, or even if we have 1 megabyte plus, this is critical back. This means that the game is dumping a massive around amount of trash every frame. Example, at that moment, we have 1.6 kilobytes. That's a warning that something happened during the player loop with some script, some update thing, some UI thing, et cetera. So you can just gather this information, attached to your B report saying that something is happening here, what create some press. Basically, if you see a game that lags every five or 10 seconds, read Nic. This means that something is not okay. So garbage appear, and you just need to investigate here by looking at the frames, doing short profile session, capturing screenshots of places where the GCA lock is high, and shib this to the developer, saying that probably we have a memory leak or just hig JC location here and here, and developers will take a look. 33. Client and Server: Welcome to the Section seven. We are leaving the safe world offline gaming and entering the complex world of networking. Today, we're answering the biggest architectural question in GMQA. Who is the boss? Is it declined or is it a server? Is this lesson? We will learn the concept of server authority versus client authority. Discuss why you can g this Unity project, but you can hug for example, word craft, review the critical QA scenarios involving data synchronization and look at real world bugs are declined and server is agreed. Why does it matter? We have two main architectures, the client and server. The client is how our current project works right now. The code simply runs on your PC. If you use, for example, a two heat engine or some another to change your progress or coins or sales. The game accepted without any verification from server or another instance. There are pros and cons. The pros are that this way could be developed fast and works of fun. There is no need in any Internet connection. The biggest con is that everyone can cheat. So probably it would not be interested to play game that could be hacked in a minute. The server alterative is how games like Clash of Clans Word for Craft and another's work. When you try to buy a sword, your game doesn't say, I have a sword. Your game sends a request. May buy a sword. The server checks your wallet. If you have the money, the server says, yes, you know have a sword. You have your memory to say to swords, please, the server says, Let's try, but we actually have zero purchase dent, and the most box in the games happen because the client thinks it has authority. But the server says, no, now that we understand the architecture. Let's talk how to break it. You don't need fancy tools for this. You just need your phone or PC and some creative timing. Here are three most critical tests you need to perform to any network game. First, we have the expensive download test. Imagine player is on a bus using their expensive mobile data plan. Open your game and it's silently starting download, 500 megabyte update in the background. By the time they get home, they have lost $10 in data charges. They will likely reach and leave one star review. To test this, you need to turn off your Wi Fi and connect strictly to four G or five G. Launch the game and try trigger download. Your goal is to verify that the worrying pop up appears. Asking the user like you are not on the Wi Fi. Do you want to download some amount of data? If the game downloads without asking, that's a bug. Second, here's the network handover. This happens constantly in real life. A player starts a match in their living room on Wi Fi, but then they walk out in the front door to catch a bus. Their phone has to switch from Wi Fi to FD while the game is running. To test this, you can simply start a match on Wi Fi, and in the middle of direction, simply turn off your rotor or toggle the WiFi switch on your phone. Would happen. The game should pause for a second, maybe show some reconnecting spinner and then resume exactly where you left off. What often happens in the game panics? The session ID from the WiFi Match doesn't match the IP address and the FG connection and the server kicks the player out to the main menu. Your job is to ensure the transition is seamless. And finally, we have the version mismatch test. This is a logic test. Every Tuesday games usually get a server update. Let's say the server is now on the version 1.1, which includes a new fires word. However, the player hasn't gone to the app store yet. They're still playing on the version 1.0, which doesn't know what is Fire's word. If the old client tries to talk to the new server, the game will likely crash because it receives data it doesn't understand. To test this, you intentionally install an old version of the app and try to log in to the live server. The expected behavior is a hard stop. A Pop up that says update required and the button that takes you to the app store. If the game lets you play twel version, you have a critical compatibility back. And let's talk about real box found in production that cost companies millions. The first bug example is the infinite exploit. The bug was that in earlier shooter game, the code for decrease MO was on the client. So the hackers just deleted that line in their local files, and in the result, they could shoot forever. The server never checked. They actually had pallets. It just excepted, like, I shot you message. The nice fix for that might be to move MO counter to the server. Second buck example, the ghost item or desynchronization. The buck is like when player picks something, let's say potion, the client plays the sound and removes the potion from the ground, but the Internet packet was lost. And the result, client thinks that I have a potion, but the server sees that the potion is still on the ground, and when the player tries to trink it, nothing happens. Or worse, another player walks by and picks up the invisible potion. The last example is the offline purchase for free stuff. The player clicks example by 100 games. The game adds the games immediately, then tries to talk to the app store. Player turns on airplane mode, clicks by, get the Jams and closes up. So in that case, the poster never gets the request for money, and the company see zero revenue. That's a critical. Now, you understand what is the client server, the difference and why it is important to store some things on the server and some on the client. In the next lesson, we will simulate latency. We're going to intentionally break our threat connection to see how the game handles lag and repo banion. 34. Possible network issues: Welcome to the lesson too. We know that the server is the boss, but the boss lives far away. When you press jump, the signal has to travel to the server and back. This delay is called latency or pink. In this lesson, we'll simulate bet connections, visualize pink, and learn how games use lack compensation to hide delays. Let's visualize this delay. I have modified the log generator file we created recently. You may do the same. I will share in the description, the code. You may pass in the x simulator and try the same. After changes, please press Play. Press the space and observe the painful delay that happened. After pressing space. That is actually the latency, how it happens in modern multiplayer games. Let's talk more about the physics of the Internet to have more explanation about. When you press a button, that signal has to travel through copper wires and fiber optics to a server halfway across the world, and then come all the way back. This round trips takes time, and we call that time latency or pink. If your pink is 20 milliseconds, the game feels instant. But if your pin is 300 milliseconds, you're living in the past. To hide this, developers use a trick called Black compensation. The game clan guesses where the enemy should be and draws them there. If the guess is wrong, you see the enemy port or snap into new position. We call this Rubber bending, and it feels awful to the player. So how do we test this? We can't just hope for bad Internet. We have to simulate it. First, you need to test the high pin limit. Game has a breaking point. You may use a tool like Clumsy or Unity like simulator to force a 500 milliseconds delay and watch at your character. Does the moment become jerky? Or if your project contains bullets, do they go through enemies without hurting them? At some point, the game should essentially tell the player your connection is to pull the play. Next, you need to test for Jitter. Constant lack is annoying, but random lack is worse. This happens when your pin jumps from 50 milliseconds to 500 milliseconds and back again in seconds. This confuses the prediction code. You want to see if the physics engine explodes. Sometimes these spikes can cause players to fall through the floor and the packet loss. This is when the data doesn't arrive at all. Set your simulator to drop 5% of packets. In a shooter game, this looks like shooting a full clip of EO but doing zero damage. You need to verify if the game attempts to resend that information, or even just ignores the action entirely. Let me share with you one real world back from production. In the famous racing game, the lack compensation was too aggressive. If a car had a bad connection, the server would guess where it was going. But when the real data arrived, the server realized that guess was wrong and snapped the car back 50 meters. This caused cars to look like they were vibrating or reporting across the track. 35. Game Persistence: Welcome to the Lesson Tree. So far, every time we close our game, the fox forgets everything. It forgets the coins we collected and the level we reached. This is because the game's prey is currently living in our session memory. It gets wiped the moment the app closes. For a game to matter, it needs persistence. It needs to write a letter to the hard drive saying here is where the player stopped. As a QA, you are the guardian of this memory. If a player loses, they say file, they don't just lose data. They lose hours of their life. They will never forgive the name and they will likely delete it immediately. In this lesson, we're going to explore how games save data, the difference between simple local saves and complex cloud saves and how to verify that your game doesn't accidentally wipe its own memory. Deep Dive theory, how saving actually works. Let's look under the hood. The game usually starts safe with something called serialization. Imagine your game status is a messy room full of objects, cloth bars, inventory items, quest flax. Can't just stub that room into a file. You have to pack it into boxes. Serialization is the process of turning that messy room into a neat text string so the computer can write to a disk for simple data like sound volume or a high score. Developers use something like player press on Windows, save to the registry. On mobile, it's a simple a Mali file. It's fast, easy, and totally insecure for complex data like an RPG inventory with 500 items, developers use JSON or binary files. These are the structured language that looks like a list. And here is the danger version. Imagine the game saves a file, says, HAS, mana, gold, then you update the game to version two. The new code expects file to say health stamina, mana and gold. If the game tries to read the old file using the new map, it gets confused. It might treat mana as stamina and suddenly the player logs in and has zero mana because the data shifted on each to the left. And this is called Emigration failure, and it is the most common reason for data wipes after an update. Since we are you find a Nicole today, let's focus entirely on how to test this. You don't need to be hacker. You just need to be destructive. First, you must master the to a loop. First time user experience. This is the most important part of a game, tutorial. To test this, you need to simulate a brain vibe on mobile, for example, you can go to upsetting storage click data on PC, you might have to delete a file in your documents folder. Test is simple. Place the tutorial, wipe the data, let it again. What are you looking for? Static variables? Sometimes lazy developers stores the tutorial complete flag in the calls temporary memory, not the safe file. So when you wipe the safe file, the game still thinks you finished tutorial. You log in the fresh user, but the welcome pop ups never appear leaving you confused and stuck. Second is the migration test. This is critical before any update. What you should do is to install the old version, which is life on the store. Play it, earn some coins, buy something. Do not uninstall it. Then install the new version. The test built over the old one. And launch the game. Did your sword that you bought or whatever you want, disappeared? Did your coins reset to zero? This confirms if the Immigration logic correctly updated your old safe file to the new format. If this fails, you cannot release it. The third case is the corrupted safe simulation. Happens if the phone laptop battery dies exactly while the game is showing the saving icon. You can verify the game's safety by manually breaking a SA file. For example, open the save file on your PC, delete something from it, save it, and now watch the game. Good optimized game we'll see the file is broken and restore a backup from Cloud, but not optimize it or the game in development, we try to read the broken text, panic and crash. Let's talk about the real world box. The most famous one is the update vibe. Some popular Mobile ar PG released an update where the developer accidentally changed the capitalization of safe file. The game started looking for saved that capitals, but the old file was the lowercase S. On iPhones, that didn't matter, but on Android, the file names are sensitive, so millions of Android players logged in to find their level 50 characters, and they were completely gone, simply because the game couldn't see the old file. Another scary one is the cloud conflict. This happens when a player plays offline on their tablet earning coins and then later plays line on their iPhone. When they reconnect, the server sees two different files, different timestamps. Poorly written system will simply overwrite the newer file with the older one, effectively stealing the progress made on the phone and reverting the account back in time. In the next lesson, we will learn what is Tison, how it looks like, and what we can test. 36. JSON: Welcome to the Lesson four. We have established that the client talk to the server, but what language do they actually speak? They don't speak English and they usually don't speak in complex binary code. They speak JSON or Javascript object nation. It might sound technical, but JSON is essentially just a text message. It is the standard format for almost every game on the market. When you open a loot box, the server doesn't send you a sword. It sends you a text file that says that you've got a sword. As a QA you will often hear developers ask something like, did you check the payload or is the API returning the right Jason? In this lesson, we're going to demystify this. Learn how to read this language, why it is so fragile and how a single missing comma in a text file can crash $1 million game. Let's visualize what happens when you log into a game. Your game sends a request. Who am I? The server replies with a JSON file. It looks remarkably simple, almost like a grocery list. It relies on two things, keys and values. The key is the label, for example, user name and the value is the data. Example, Fox player, why is this popular? Because it is human readable. You can open a resonFle in not pAD and you don't need to be coder to understand it. You can clearly see, for example, that gold amount is 500 and understand that the player has 500 gold. However, this simplicity hides a massive risk strictness. Computers are incredibly dump. They rely on the key names matching 100% perfectly. If the server sends a reward, label it as AMT, 50, but the game client code is looking for the world amount, 50. The client would not find it. It won't try to find something similar. It will simply panic and assume the value is zero. This is the API contract. The server team and the clienteam must agree on the exact spelling of every single word. A QA, if you see a buck where UI element is empty or score is zero, your first instinct should be, did the error change the spelling of a key? Let's talk about use cases. First, the parsing error. This requires perfect grammar. It needs curly braces to start and end and commas between every item. Server has a hiccup and sends a message missing a single comma, the game client will fail to parse or read it. How to spot it? Usually, the game handles this gracefully by showing a generic connection error pop up. But sometimes the game will just freeze on a odon spinner because it is waiting forever to understand the message that makes no sense. If you see AJSOPaseEception, in the logs, you know, the server sent bad grammar. Is a data type mismatch. In code, number 50 is very different from a word 50. Imagine the shop expects a number, so it can do some mess. If the server suddenly starts sending the number as a string, the game tries to do mass on a word. You can subtract ten from the world 50. Spot it. This often results in none or not a number, appearing in the UI or the game crashing when you try to buy something. The third one is the null or empty field. What happens if you have no Klan? The server might send Klan is null, but some developer might try to display your clan name without checking if it exists first. How can you spot it? You might see the actual world Null appear in the player profile, or the game might through a null reference exception. There's the profile page. You must always test accounts that have empty data without friends without items, without clans to verify that the game handles the emptiness correctly. Jason bugs are silent killers that often result in a funny but destructive outcomes. Take the billionaire bug for example, a server was sending the GOT amount as a text string. Someone on the server team accidentally added a space at the end of the number, so it sent 1,000 space instead of 1,000. When the game tried to convert the text into a number, it failed because of the space. Instead of defaulting to zero, a logic error caused it to default to the maximum possible integer the computer could hold or 2 billion. Players locked it to find themselves infinitely rich during the game economy overnight. Another classic example is date format. The set was sending dates in the United States format, months, day or February 1. But the clad in Europe was built to expect day months on February 1. The European clients read the date and thought it was January 2. This caused daily log in streks to reset randomly for thousands of European players leading to the flout of support tickets because they just lost their progress. Mostly sons look like that the name and the key, probably some arrays might appear with something with a lot of IDs. For example, we have some food storage app and the doughnut has different types. So they are marked with different IDs that are related to the doughnuts. Another thing is topping, a lot of toppings still related to donuts, but they are another array. In the next lesson, let's talk about remote config, which allows us to change the game without any updates. S 37. Remote config file: Welcome to the Lesson five. Remote Config allows us to change the game without any updates. We can tune difficulty or tune on events from the server. Today, we will build a config system and test fullback values. First of all, we need to create game Config. Let's do it. Create Sear Sharp Script. Game Config. Amazing. Let's open it. After you successfully created a C Sharp script, you should copy and paste the code that will be provided in the description to this lesson. Then run the game. Notice the speed on the fox. Let's change it using our code here in the player's bit. This one is some kind of JSON string. In the production, the massive games, it will be dedicated JSON file in which you or developers will change the values. Let's have here 100 safe, get back to Unity, control error to reload. Let's press play again. As you can see the speed has changed. So we just simply change the Fox speed using JSON, not touching nothing in the player controller in the unity. So as I said, on the production, you will work with real JSONs using, for example, NopaD and you will actually not you, but developers, designers will simply change their values, but you will be able to look at them to compare them and to find some box. Why this one is crucial for us, because it allows for AB testing and stage outs, we can tell the server to give 50% of players card mode and 50% easy mode to see which is better. It is also a safety switch. If you launch a new feature and it crashes, we can disable it remotely. For everyone instantly without doing any updates to the game. What could be the Qaus cases? First, you should test the fallback or offline lunch. What happens if the server is down? The game must save some default values. If the server doesn't send a speed value, the game shouldn't set speed to zero. It should be default set by Unity. On the mobile, it's easily to test in airplane mode. But on the PC, you will need to turn off Wi Fi or unplug desernt cable. Second, you can perform the extreme value test. Config are typed by humans. If a designer accidentally types 1,000 instead of ten, that's the game crash. The code should have clamping logic to keep numbers within safe limits. The last one, you can test the live update scenario. Some games update config while you play. If gravity changes mid jump, the player might glitch, should verify that new configs are applied only at safe moments like in the main menu. One very common bu in production is decimal point. Designer in Europe set the price to four comma 99. The system expected a dot four dot 99. The system just dropped the coma taking the price 499. Players were amazed with this change. So you should test pretty tough thing because it may produce unexpected bugs in production, making players furious. As we touched a bit AB testing, let's talk about it in the next lesson. 38. AB Testing: Welcome to Lesson six. Have you ever noticed that sometimes your friends version of the game looks slightly different from yours? Maybe their shop button is green, but yours is blue, or maybe the tutorial is shorter for them. You are likely participants in AB test. AP testing or split testing is how modern game studios make decisions. Instead of guessing is level one to hart, they run an experiment. For example, group A, they place normal game, but group B, they play a version where enemies have 50% less heals. Developers then watch the data. If group B plays for longer hours and spends more money, the studio knows the easy mod is better, and they roll it out to everyone. But for QA, AB tests are a nightmare. You aren't just testing one game anymore. You are testing two or more different versions of the game simultaneously. If you don't know which group you are in, you might report about textually an intentional experiment. In this lesson, you will learn how the servers playing buckets the golden rule of user identity, how to organize your testing, and what happens when experiments go on. Does the game decide who gets the blue button and who gets the green one? It uses a system called bucketing. Imagine every new player is given a random ID number. The server looks at the last digit or at ID. If the digit is 0-4, it receives group A. If the digit is five to nine, then it's group B. This leads us to the most critical concept in this entire lesson, sticky buckets. Sticky means consistent. Once a player is assigned to group B, they must stay in group B forever or until the experiment adds. Imagine if you were in the easy difficulty group on Monday, you love the game, but on Tuesday, you log in and the server accidentally switches you to the hard difficulty group. Suddenly, you can beat even level one. You get frustrated and te the game. The data scientists looking at the logs will be confused. Why did the player te? Was it the easy mode or hard mode? Because the bucket wasn't sticky, the data is corrupted. As a QA, very fine stickiness is your number one priority. Testing experiments requires a methodical approach. You can't just play around. Here are three mandatory tests. Test number one is the fresh install roll or simply very fine randomization. Your goal is to ensure that new players are actually being split up. What you can do is to install the game, check which group you're in, then delete tab and wipe all data to reset your ID. Then reinstall, check the group again, repeat this ten or 20 times. The past criteria is that you should see a mix of blue and grip shops, something like 50 50. It will fail if you do this 20 times and always, you will get a blue shop or let's say group B. It means that an optimization is broken, or the experiment is turned off. So always verify that with your managers, team leads, design team, and others. Test number two is the persistence check, verifying that stickiness. You should ensure that player never switches group accidentally. Actions are to log in and confirm that you are in group B. Then close the app, simply restart it, turn off any Internet, still restart it, update the app, the new version, restart it. The ps criteria is that your shop will stay green every single time after you close the app, fail your connectivity or update the app to new version. You still see the green one or group B, as we agreed. But the fail if it sometime will revert to blue or group A, that means you have a leaky bucket, not sticky. The test number three, you can do is the cross platform identity. You should ensure that the experiment follows the account but not the device. You should log in sample on your phone and see that you are in group A, and then you log in with the same account data, for example, on tablet or PC or Console, and you should see that another device you choose also shows group A. So if you see group B, it means it failed, you should create a bug. Why this actually a bug? Imagine that group A sells some magic word that exists only in group A, Group B doesn't. You buy it on your phone where you are in the group A, then you will decide to switch to your tablet or PC, which is group B. The Gipe might simply crash because it doesn't know what that item is. Let's look at the production horror stories or real word Bx. When IB tests fail, they don't just break the game. They often cause community scandals. The first one is the price discrimination. Pyramid was then YM Studio wanted to see if players would pay more for items. They put group A on the standard prices, let's say, $5 and group B on inflated prices, $10 for the exact same item. They didn't hide this well. Players talk to each other and screenshots hit read it immediately, like, why is my friend paying half of that? What I am. The lesson should be never be test pricing unless you ate well and you are pretty careful to release that. The second story is the broken tutorial variant. The experiment was to remove the tutorial group B to speed up the gameplay. The logic that gave players their starting weapon was inside the tutorial fade. And the result, group A played normally, but group B skipped the tutorial, but also skipped in their weapon, they enter at Level one with empty hands, could not attack and got slaughtered. Retention for group B was 0%. The lesson is that you always regress all the passes in your game the same as the main pass. You now understand that it works on my machine is not enough. You have to ask which version of the machine or which version of the built. This concludes Section seven. You have mastered working Theta, JS fix and experiments. Next up is Section eight integrations. We will look at the two so we didn't write decays, and analytics. 39. SDK Basic: Welcome to the Section eight. We have built a game with our own code, and it works perfectly. But in the real world, your boss will talk and say, we will add Facebook login or we need Google ads to make money. Now, do our developers sit down and write the code to talk to Facebook servers from scratch? No, that would take years. Instead, they just unload a suitcase of code provided by Facebook. This suitcase is called an SDK or software development kit. Don't install this developers do, but you are the one who has to deal with the mess when they break. And this decay is like inviting a stranger into your house. They bring their own furniture, their own roofs, and sometimes they break your windows. In this lesson, you are going to learn how to locate these hidden files, understand why we call them black boxes, and explore the nightmare known as dependency hell. Do we call SDK the necessary evil? First, think of them as a black box. When a developer writes a moment script, we can open it and fix the tipo. But when we import the Facebook is decay, it comes as a pre compiled file like dot TL. We cannot see inside of it. If it crashes, we just get a generic error. Your strategy here isn't to fix the code. It's to act like a detective. You need to look the crash log and ask. This crash happening in let's say my game dot cs or inside Facebook is DK. If it's inside SDK, you cannot fix it. You just had to the developer to update the SDK version. Second, there is the nightmare of dependency hell. Maging ATS SDK needs a specific file called support Library version one. But then Analytics SDK needs support Library version two. When Unity tries to rebuild the game, it sees two different versions, the same file and panics. The build fails immediately. AQA, if a build fails right after developer merges and use decay, this is almost always the reason. SDK are the most fragile part of mole development, and when they break, they break hard. The most famous example is the Facebook rash of 2020. Book updated a configuration on their servers one afternoon. Thousands of apps used the Facebook SDK for login. The SDK didn't know how to handle this new server change and crashed instantly on launch. The scary part crashed the apps for everyone, even users who didn't use Facebook login because the SDK inlays automatically when the app started. Here is how you test these invisible tools. Start with the race condition. Or in a serization test. Asks take time to wake up, usually a few seconds after the game launches. If you click the watch at button, the millisecond the game starts, the Dame might not be ready yet. Poorly written code will crash because it tries to talk to an SDK that is still asleep. You should stress test this by launching tap and tapping buttons instantly. Finally, test the offline SDK. Most of the case assume you have the Internet. If you launch the game in airplane mode, that's the Analytics SDK hang the entire game because it's trying to connect forever. A third party tool should never break your main game. Look just because the WiFi is off. Next, try the permissions blocker. Many SDK, like the camera or microphone need permission from the. Happens if they say no, uninstall the app, reinstall it. And when the Pop up asks a camera, click the Ni. Then try to use this feature. App should show a polite error message, but if it freezes or crashes, because it assumes you said yes, sets fail, another common issue is below that build. The developer red at SDK, but forgot to remove the demo assets that came with it. The game sign tramped from 50 megabytes to 150. Because the decay include four K video examples hidden deep in the folders. This hurts download rate significantly, and it's absent Q should always catch by checking the final size of the build. 40. What is analytics: Welcome to the lesson two. How do developers know if level one is too hard or if players are ignoring the shop? They don't guess. They use analytics. Analytics are invisible spies in the game that report back to a dashboard. They track a funnel. Player starts, player plays, player wins. You must verify that these spies are telling the truth. If the level completely went fires when the player actually died, the data is corrupted and designers will make bad decisions based on lies. In this lesson, we will learn how to verify events in logs and how to spot data pollution. Are we actually looking here? First, the event name. This is the label like item purchased. At QAU need to be a spelling teacher. Level start from capital and levels start from minimized letter are two completely different events to the computer. Developer changes the case in halfway through development, the data history is broken because the computer things, it's a new separate event. Second, we have the funnel. This is a sequence of events like steps in a recipe. Step one, step two, step three. Your job is to try and break the sequence. If you fail step two, that's step three still fire. If so, that's a back. The data will tell the designers that everyone is finishing the tutorial, but in reality, everyone is skipping it. Here are the three ways you can ruin the data scientists day and how to prevent it. First, check for the double fire or spam bug. Walk into the level finish line, then walk back out, then walk in again. That's the event, let's say level complete fire twice. If so, the data will report that you beat the level two times. This inflates numbers and makes the level look more popular than it is. The code should have a flex to ensure it only fires once. The second, test the timing mismatch. Try to die the exac same moment you touch the finish line. I see both level fail and level complete at the same time. This confuses the analytics engine. Did the player win or lose? Logic states should always be mutually explosive. And third, verify the offline queue. Analytics are vital, and we can't lose them just because the user is in a subway tunnel. Off your Internet play level and then turn the Internet back. A good analytic system will cache or save the events while offline and upload them in a badge when the connection returns. If those events are lost forever, you have a data gap. Bad data is often worse than no data. A serious legal example is DDPR violation. In Europe, you must get user consent before taking them. A buck occurred where the analytics Day started tracking before the user clicked, I agree. Even though they eventually agreed, tracking them for those first 2 seconds was illegal and resulted in a funny side, there was a null item. A developer tracked item bought, but forgot to attach the name of the item. The monthly report showed 1 million purchases of null. The gym knew people were buying Samson, but they had no idea what, so they couldn't optimize the 41. ADS in games: Welcome to the lesson. Let's talk briefly about the ads. This is mostly the topic for bio testing, which will be extended in another course. But still, let's take a look at it. In free to play games, the rewarded video is a contract. The player gives us 30 seconds of their time, and we give them 50 coins. This involves a complex handshake between the game and the net work. Number one buck we face here is the callback failure. If the reward comes too early, players will exploit it. If the rewards never comes, player will age. So what can go wrong in this simple loop? The most common issue is the pause back. When an ad plays, it covers the screen, but the game is often still running underneath. If the developer forgets to set some property, your director might be getting attacked by zombies while you are watching Shampoo commercial. You will hear the sounds on the background, which is terrible user experience. Then there is a concept of at waterfall. Games don't just ask one at provider. They ask a list like, Hey, add mop. Do you have an ad? No, hey, Unity you? Yes, this process takes time. Sometimes five to 10 seconds. The Watch Ed button should be great out during this search. If it's clickable while the game is syn in, click in with White Cash App. And here are the money tests you must run on every release. First, the airplane trick. Click watched, wait for the video to start and then immediately toggle airplane. When the video finishes, the SDK tries to tell the server success, but it can't reach the Internet. Poorly written games will hang go on the black screen forever. The correct behavior is a polite error message saying reword cannot be verified. The second is the mesh test. Since lodging and takes a second. Try tapping the watch at button ten times rapidly with two fingers. If the quote isn't safe, you might launch two ds on top of each other. This confuses the logic. You might watch two ds, but get zero rewards or watch one t and get ten rewards. And third, the resume crash. Click Watch at then immediately minimize the app, press home button, for example, and open five another heavy apps like Instagram or Maps. Then go back to the game. The operating system might have killed the ad process to save memory. But does the game resume gracefully or it does crash because it lost the connection to that. Talk about some real world bugs. Let's say that AD bugs are usually marked as critical because they involve real money. One famous exploit was the infinite gold glitch. Developer accidentally put give reward line of code before the show ad. Players realized that could click the button, get the coins instantly, and then force closed worth watching the video. Head the game, economy was reined within hours, another annoying bug is the mute. Ads often take control of the phone audio focus to play their sound. After the head finishes, they are supposed to give that control back to the game, but often they don't. The player returns to the game in total silence and has to restart the app to get their music back. 42. Compatibility testing: Welcome to the Lesson four. Testing on mobile is actually hard, but testing on PC is the hardest. You might ask why. I would say that because on a console, every let's say, PS five, ps four is the same. But on PC or mobile, every player has a different setup, especially on the PC. Example, player A has a four k monitor and runs at 1.44 Hertz. Player B has tiny laptop and uses a touchpad. As a QA, you must verify that the game works on both of them. In this lesson, we will discuss the fragmentation of the PC Ecosystem, specifically focusing on aspect ratios, inputs, and frame rate. Why is PC compatibility so fragile? One major reason is expect ratios. Most games are built for standard resolution like 16 to nine, but PC gamers love ultra vite monitors 21 to nine. If you don't test this, your game will look stretched like characters are short and fat or the U elements might float in the middle of the screen instead of the corners. Then there is a refresher. Console games often to 60 FPS. PC gamers might play at 144 FPS or even 240 ps. There is a classic back where game physics are tied to the frame rate. If games code, say move 1 meter per frame, a player at 60 FPS moves 60 meters, but a player at 144 Ps moves 144 meters. The high NPC player literally runs faster than everyone else. Also, when we talk about DC compatibility, we focus on the big three. First is a GPU or your graphics card. This is the heart of games visuals. In Q, we look for VRAM limits. If our game uses, let's say, 6 gigabytes of textures, but the player only has 4 gigabytes video the game will swap data to the slow hard drive causing starters. You need to know if your game supports integrated graphics or if it requires a dedicated card. Second, is the CPU, the brain. The CPU handles the physics, the EI, logic, all scripts, et cetera. A common back here is thread optimization. If your game is single threaded, it might run poorly even on high end machine. As a que, we monitor CPU usage to see if the game is choking the processor. The third is RAM or system memory. If the game leaks memory, meaning it takes RAM but never gives it back, the player's computer will eventually run out leading to a hard crash to the disk clock. This is why we always keep text manager open during PC testing. But what are the most QAS cases you can do while doing that compatibility tests. Here are the must pass test for N EPC game. First, the ID tap stress test. Players usually multitask play the game in the exclusive full screen mode, then press Alt plus step to go to the desktop or another open application in the Bground then click back to the game. You can do this ten times rapidly, and what can happen is that bad optimized games, they will crash with some graphics device lost error or some sounds may disappear or even in multiplayer game, your server might lost connection with you. Second, you can check for ghost input. This happens when a player has a joystick plug, for example, for some flight simulator or racing game, but he's playing your game with a keyboard. Sometimes the game detects the joystic slide drift and paritizis over the keyboard causing the character to walk left or right constantly. Must ensure that the game respects the last active device. The third thing is the four k scale. On a four k monitor, pixels are very small. If the developer set the text size to 20 pixels, it looks fine on standard screen, but on four k, it will be microscopic and unreadable at all. We need to verify the US scales up to remain readable on high resolution displays. The next thing is how do we actually test for millions of different BCC taps? We use the hardware tiers. First, the minimum specs stress test. You should always have potato PC in the office, a machine that barely meets the minimum requirements listed. If the game crashes or drops below 30 FPS on this machine, the minimum specs on your store page RLI. You must report this. Second, is the resolution and aspect ratio outdid. BC gamers, as I said before, use everything from square monitors to massive ultra white displays. If your UI is hard coded for ten ATP, it will stretched or float in the middle of the screen on ultravt. You must erify that UI anchors correctly across all instions. And the last one is the high refresh rate physics. Some players have 144 hertz or 240 hertz monitors. If your game physics are tied to the frame rate, the player with 144 hertz monitor might only run. Let's see some real world bugs. BPC birds are legendary for their bugs. One of the most infamous was the physics speed up in flout 76. The physics engine was tied to the frame rate. Players realized that if they looked at the ground, which is easy to render, their frame rate would shoot up and they could run at sonic speeds across the web. Include the lesson. As a QA professional, you should use different PC setups to verify that both potato PCs and high end machines work as they should. Also, checking different UIs, different skiing options, resolution options. Applications and refresh rates are crucial to make sure that each player is satisfied with graphics, game overall balance, and other things. See you in the next lesson. 43. Wrappers: Come to the Lesson five. When you play a game on steam, you are not just running the file. You're running the game inside the steam client. This rapper provides critical features. For example, DRM or digital rights management. Check in if you actually own this game. It also provides you achievements. These pop ups when you kill a boss or doing some first finish race game or another, and the overlay, the menu that appears when you press Shift tab. SQ these are crucial things to check before the launch. If the overlay posses the game, but not the inputs, player may lose all their progress in 1 second. If the RN fails, pirates will steal the game on day one. Let's talk about the overlay. When the user opens the overlay, the game technically loses focus, but it is visibly steal on the screen. The buck happens when the game things, you are holding down the double key because you are walking and you press Shift tab. You enter the chat but character keeps walking into a wall or into a cliff. The game should actually pause everything if you open the overlay, if you're talking about the single player story games. Because of course, in the multiplayer games, it is not possible to stop for you everything, but you should assume this. Then there is a DRAM. When the game boots, it asks team does this user have a valid ticket? Valid pass? If you don't test this, you might release a DRM free version by this is simple. You should close Team completely and try to run the game directly from the folder. It is installed. Launches without opening steam gland, you have failed a DRM check. That's it. Let's talk about some use cases. First, the offline mode to test. Steam allows playing without Internet. If you go to steam and then go offline, you can play the game and unlock an achievement. Then close the game and go online, and your achievement should pop up retroactively. If it is lost forever, that's actually back. The second is the cloud conflict. Let's say PC one has aa file with hundred coins, and PC two has a safe with 200 coins. You can play on PC one offline, then PC two online. And when you reconnect PC one, steam should show a cloud conflict dialog asking, which file you would like to keep. At bet integration will simply overwrite the newer file with the older one without asking you, which might do refund from player. The third thing is a four gut. Players often for skewed games. Can earn achievement and immediately press T four. Did the achievement unlock on the server side, but the game didn't save locally. This creates a logic mismatch where you have to finish the game achievement, but the last checkpoint is still active in your Safe file. Storing decoration box are public and embarrassing. A classic is the broken text achievement. The developer may forgot to upload the text to the achievement to the stem dashboard. So players might unlock achievement name some test name. For example, as it here on real example, ACH, 001 name. This is achievement in the real game, which is released and players or some achievement received this achievement with placeholder name. This looks incredible and professional. So don't be shy to use at least cheats to cover all achievements in your game if it is not possible to create them manually. Also, as we talk, you should verify DRM because there was a case named review bomb in Steam. A game edit a complex DRM that checked the server every 5 minutes. But if the players Internet flickered the gamepost because it was not able to verify that the player owns this game. And this game got mostly negative reviews due to this light integration of DRM. So you should do as we talk with you. Simply close Team, run the game from the folder see if it launches, who is opening, steam client or without. That's it for Section eight, and let's move to the Section nine in which we will talk more about the reports, some test cases, the plans, and other documents and the box they keep. Because, of course, documentation also should be written correctly, so we will see what are the most crucial parts to keep with professional and what things should be reviewed at first. See you the next section. 44. Example of good bug report: Welcome to the Lesson one of Section nine. If a Jira ticket is the currency of quality assurance, then the summary is the face of that coin. A good summary is like a newspaper headline. It must be scannable. Developers often look at last of 100 bucks at once. If your title is the Fox falls, you have wasted their time. A professional summary uses the formula like feature in brackets, plus what happened, plus under what condition? For our Fox game that looks like physics, player falls room platform if game is posed while platform is in motion. In this let's say ten words, developer knows the system which is broken, the object, and the trigger. Now let's talk about the two most misunderstood fields in severity and priority. Severity, actually, is a technical measure of how much the game is broken. There are four gradations like S one, it's a blocker. The game won't even start. S two major, it breaks core gameplay. Some core feature like jumping, saving I know coins, capturing is broken. S three, it's minor. Small bleach, some design bug, and as for Smetic some kind of tipo in the credits. Thing that is well hidden and amount of players will notice it. And actually, it does nothing to acre gameplay and overall filling of the game. But the priority is a business measure of how fast we need to fix it. Imagine tipo on the main buy button in the shop. Technically, the severity is as for because the game works fine. That's actually lower than minor ratio. The priority might be immediate, B zero or B one, because it makes the company look untrustworthy and stops people from spending money. Conversely, imagine a crash that only happens if a player stays in the credit screen for 4 hours. The severity is as one, it's crash, but the priority is low. It's a P three, because almost nobody will ever see it. Nobody will stay in the credit screen for 4 hours. Learning to separate technical impact from business urgency is what separates junior from senior one. Next we have environment. It's actually the build on which we notice the bog. It is the platform on which was testing inputs used there might be some CPU used, GPU used if you use BC compatibility testing. Amount of AM you have some specific examples version, et cetera. This is especially crucial thing if, as I said, you are doing BC testing because on the console, it might be simple maybe platform, BS five inputsens Imput you will just type the build. Next thing is steps to reproduce. This must be kind of robotic number, at least. No stories of love. If you tell developer I was jumping around and then something happened, they have to recreate your entire play session. But if you say one, for example, launch level to then navigate to some moving platform, or even if you can find Unity, which name object has, that would be amazing. Then do some action, do some action, and last action. So they can process this. They can do step by step easily and create the book in let's say seconds, not hours by plane entire session. So you should keep it actually simple and pretty easy to read. Then we define the actual versus expected results. You were saying that I saw something, but the design document promised it another thing. This prevents developer from replying. It's not a Betsy feature. If the expected result is grounded in the game's design, the box stays open until it is fixed. So if we see that let's say platform continues its movement, but player loses its collision and fall through the platform. But our game design document or designer says that player should remain parented to the platform and stay on the surface when the game resumes. Means that it should be like this, and we are confirming this by writing here, the expeded result. So developers know how it should be and what actually the bug is. And finally, the evidence. Some video recording that is ultimate proof of the bug. Shows developer exactly what the glitch looks like. But the video only shows the symptom, show the cause you need locks, if possible, of course, not every bock require locks. Attaching this to your ticket is showing the exact line of code that failed. Mostly, it is used for crashes, freezes or major box because for example, for some art box, ding video and screenshot is pretty enough. As you can see the simplified how it could look like. But in Jira, you will have to degate the session section as attachments. You will attach your video in MP four or moth format and log file. Developers will open them and look what actually the buck is. Let's look at the incorrect buck report. The summary, the foxes follow and some description like I was playing the level, and then I jumped on moving thing and press something and then I do it. Why this is bad? I think you understand why? Because it has very good summary. It doesn't explain why or when. Some kind of emotion language annoying, please fix, fix up. You cannot say fix as soon as possible because your manager sets the priority on the things and asks developer to fix or not a app. Also, there are no steps, so developer has to guess what is moving thing and how to trigger actually this bull. This buck is missing. Environment, which built version, the bag cure, which device, it was produced. Also, there are no attachments at all, and of course, there are no expected results. So probably we even don't have this link in our design document. So developer could say, it's not a bug, it's feature. To conclude this lesson, I want to say that project to project, the bug reports depends the changes. Because some of companies use, for example, these fields, some use another, some of them, for example, have also some description field in which you can say more details. Some of them use I don't know, different things. But the core fields that you should have and keep them field are as you talk. The precise summary you make by formula, right, set severity and priority. Actually, the priority is set by your manager, not by you. The only exception would be if you're senior or lead QA or you don't have a manager, but still, you're going to lead. We set the priority, you can set only the severity in most of the cases. Then environment in which BC happen at step two reproduces the most crucial thing, actual expected results and your attachment. After that, your Bug report will look perfectly. Developers will say, thank you. 45. Example of good Test Case: Come to the lesson too. We know how to report. But how do we know what to test in the first place? You cannot rely on your memory. If you try to just remember to test the sound volume, you will forget it on Friday afternoon. We need documentation. And in this lesson, we will explore the difference between the test case and the Fast checklist and when to use each. Do you use which format? The test case is for regression testing. This happens when the game is feature complete. A test case has specific steps and unexpected result, which we might take from our game design document which is say finished. For example, expected result, Fox jumps approximate 2 meters and pretend you have new camera which tests it and Fox only jumps 1.5 meters. Fail this test case, but checklist, if you have checklist, you will have probably something like jumping works and it will pass. So it concludes that the checklist is mostly for smoke testing. This is for you when you get a new build, you don't have time to read 500 lines of text. You just scan the list like shop, check jump, safe, et cetera. It assumes you already know the game and you do basic tests. Let's look at some examples of correct incorrect test case. The incorrects case, you might see on the picture here, we have some IDs, some title, preconditions, no preconditions, actually, some three steps and expect result. Why this is bad? Because you don't have ID pattern. One is too simple. If your game is not like we are testing during this course, which has only a few inputs, one sound, and few assets, you should use here something like let's call on a bit like test case, Fox game Mv 01. Could be I don't know, some ID, say, it doesn't matter. It could be actually this case, fox, maybe functionality like physics physics. So B H zero, one, and you might have here 100 cases. You will know actually where from which game and which functionality, this case is, then you can link them into let's say, your bug reports or other kind of documentation look at another thing, it is missing preconditions. If the fox in the air in the menu, the test might fail, but we don't know why. This is actually a good thing to know that precondition for this case is like, you should load something. You should be in some state and don't pause your game. And after that, this case might pass. If you don't do that, you will not be sure about it. The next thing is some vague steps like open the game, press space, see if the fog jumps. It looks like some checklist, some checklist. For the smoke. Like you open the game, you market is done, press space to jump. Okay, the fox jumps. That's all. You should write here. The exact and accurate steps like let's look here. Press the jump, input key, and note which input key we have right now set by our designer. Then let's observe the Fox vertical position in some exact view and observe the components. Agree that this looks better than this and looks more like test case, more solid. And the last thing is subjective result. Here you can see that the tester wrote like Fox jumps. Okay, and it looks good. It looks good. It's not an engineering requirement. Because one person's good is another person's buggy. You should learned it because something good for you, let's say in level design might be some bug or misunderstanding or even usability bug because try a lot of design issues. So you must verify everything accordingly to the design document, to the design, vision, and accurate test case. Let's look what we have here in the correct test case. As we saw ID, I think you agree it's better than just one. What is one. This gives us precision. Test case, game functionality, and the number of test case in this let's say folder. Title, like verify, single jump heat and animation state while grounded. So we know what we're doing. We are fine, single jump head. So it is accordingly to our document. It's 1 meter. Okay? We have some preconditions. We should pad level one. We should have the grounded state as it is here. Game dot post. We have some steps here, how to create this test case. And of course, we have expected result. It is possibly taken from game design document like the Fox, some value, for example, decreased by 2.5 units or as I said by 1 meter. We jump, we will find it. I jumped by 1 meter. Speaking about the checklist, it might look actually like simple Excel or document and written like let's say I don't know, ground is present. We have written the checklist. You know, it's the simple thing, as I told you is for smoke testing, like the bill launches plus while we launch the game, while we launch the level, is the ground present here, plus when we jump, plus actually fox jump, as it moves to the heat. Plus, that's pretty simple thing that can cover basic things you know that are working in a simple way. You know that Fox jump, you should press Space Bar and it actually should jump. It should move on some heat. The build launch you run your X file and the but actually open again, open main menu, shows you some title screen, launch level one, et cetera. So you keep it simple. You just write it before your smoke testing of the build. That's pretty it from this lesson. And with the next one, we will talk about the test plan. So see if 46. Test Plan: Welcome to the lesson tree. Let's talk about test plan. In the previous lessons we learned how to report single back and how to write single test case. But now the clock is ticking. The developer just gave you a build at 4:00 P.M. On Friday and you can test everything. This is where the test plan becomes your best friend. The test plan is not just a list of tests. It's strategy. It defines the scope, what we are touching, and more importantly, what we are not touching. The developer only changed the eyes, physics, a junior tester might waste 3 hours checking the main menu settings, but professional key focuses where the code actually changed. Let's take a look at very brief, simple example of this plan. You can look for them in the Internet. There are a lot of examples, a lot of different makeups of it. It could be as written one and in the picture one in Canva, in Mirror, in Vima lot of places. You can use it as you would like, but let's look at let's say the most important things for now. We have test plan our project name, and let's say Winter release. Version code, our goal, we should verify that new ice level, we release our ice level features and ensure that jump and safe systems haven't broken. We're doing regression. Our scope for this is in scope, some new physics, new MAA, and safe float functionality. What we have out of scope is multiplayer and mac and in explode testing on Windows only. We have test levels. We are doing during this winter release. The smoke test, which is 15 minutes we're launching the game, we look if Fox game can launch. If we can enter Level one, the game, find that MI is here actually, and do we have safe load functionality. Then for example, sngy test for 1 hour. Does this new physics actually make the Fox light. And during this release, we're doing regression. We're taking, for example, full day the fox still jump correctly in the old forest level. So we change it, here the physics, and at that new level, of course, we should check our previous levels colliding with the physics if they are not broken. And let's say we have entry and exit criteria, like the pass, let's say, the pass level. For entry, we have built number is available in build pipeline, and all in progress tickets are moved to test or in fun and exit criteria might be like 100% of sof stopper box and critical box are fixed and verified during this release. In other words, let's entry criteria is you check list before testing. Is the build ready on the pipeline? Did developers finish their good review? Because if you start testing too early, you're testing let's say broken build. It is not ready yet. Criteria if you're definitional done. In gamef you will almost never have zero box. There is always some tiny texture glitch or small TIPA. So your criteria might say we can ship as long as there are zero ostopersen critical box. And this is where you as a QA help producer decide if the game is good enough the players. Also this plan might have one more category, which is named risk assessment. It is not actually required from Junior Qs, but I will let you know that it exists. Let's say what happens if the safe system, which we added here, it fails during testing. We need some plan B because we plan our release and you should act in real environment will be testing on different branches. Test the new feature on one branch while the main game is being prepared for release on another. Understanding this map transforms you from person who winds back into release engineer who ensures the game actually makes it to the store. So you should have, let's say, risk assessment plan, you type here. For example, plan A, we have zero. Let's say showstoppers. Zero major issues. We covered all game with regression and everything is good. But what if, as I said, the safe system fails? You should release the system. We promised our players or investors. You should have plan B in which we fails, we have failed core system test. So we are doing, for example, another branch, reverting. So we revert something from our reserve branch in which the system was working or the system don't exist at all, and we are letting or players or investors or any kind of human ways for this release that this thing is actually broken, we're aware of it, so we're giving you plan B. That's actually pretty simple this plan, but as for now, this is enough for you. You can go through the web and search for some examples, but most of the the plans you may find there are more for software price. Y a lot of strict things, and they should be pretty accurate. So try a lot of risks, a lot of criteria, a lot of test definitions, big scope, and other things. Also, we forgot to mention deadlines, but I think that in the company in which you will pass your interview, they will already have some template for so you will just adapt to it, knowing that we have scope, we have basically test levels, something to test. We have some criteria to pass this plan. We have risks, we have deadlines, for example, and it's not actually for you, but for your probability manager, we may have resources, three depths, one QA, and you can calculate some human errors, but it's not in it. As for now, probably we'll talk about this in another course, more senor one. For now, let's move to the next lesson. 47. CICD Basics: Welcome to Lesson four. In a professional studio, developers don't just email you the game file. They use a pipeline or CICD. The pipeline is a robot like Jenkins or HTHub actions that takes the code, compiles it, and spits out a build for you to test. But here is the cage all builds are equal. A build from a feature branch is very different from a build from the main branch. In this lesson, we will learn the GitFlow strategy and how to map your testing plan to the specific branch you are testing. Imagine the code is a tree. We have feature branches. They have names like feature, some double jump. This is a single developer working on a single task. It is highly unstable and your job is to do destructive testing. Try to break that specific feature and ignore the rest of the game. We have developed branch where all things merge together. It should be stable, but often it breaks when two features conflict, and your job is to do integration testing, like did the jump functionality merge correctly with the shop, for example, or skin animation or anything. The last thing is main branch or release. The code goes to the public here. It should be frozen and solid without any changes and well tested. You do here full regression, and on main branch, usually we at only critical buck fixes. In the project we have to deep platform Unity, there was only one branch main because the game is actually small and the man who did it decided not to break into the feature or develop branches. So he just used to push the code into one branch, and that's all. But in reality in big production projects, there will be a lot of branches. Develop feature main under developer might be another branches, similar to it under feature 100 other branches, but the main or release will be one. As I said, it is your release branch from where the players receive the game and which will be built using the pipeline, CD pipeline. As this project doesn't go with some pipeline, I will just briefly show you the solutions that might exist. But please take note that the project to project on some project, guys use Tim City on some projects, they use Jenkins, some project uses GitHub actions. You can briefly understand what they are doing just to know the difference between them. In general, for example, Timsty which I use on daily basis, that's simple thing. There is the have to mention of build process. You can see here, we have some build pipeline from some branch. It is called master. It might be released, it might be actually developed. It might be any branch you would like to build. But let's say we're doing automation of our core branch to deliver it by night to the players with some update. So we managed our automation. Developers run the script. They wrote the script, they run the script, uploaded it here, and you or your lead starts the run, and TeamCity starts to build actually your code, your range, and after all of these nodes, it simply downloads built to your designated pass. It may be some Google folder or program folder or any other kind of storage you would like. And then you simply push your Z file to steam, APIC or any other solution, and players receive it as of date. As you can see here, there are a few actually differences between Jenkins and TeamCity. The main difference is that Jenkins requires manual setup. It is local based, but the Team City is cloud based and provides some kind of integrations, some plugins, some fest setups and other things. But of course, if you talk about Jenkins, it is open source, so it is free to use. But the Tim City is BaiyT so to some of the things, SSD plan is automatic flow that guides your game from developers computer through the stages of building destin and releasing. Typically the draw four major phases is ors. So pipeline triggers whenever code is pushed to repository master, for example. Then the robot on server side transforms all the code that was pushed to random product like for PC or APK for Android. Then if the pipeline has some auto tests, unit tests or integration tests, some security scans, does it to ensure that changes haven't broken and missing and the last thing is deploy. So the final build is automatically delivered to some repository, some folder or whenever you would like, and then you push the game to steam Epic, Google Play market, app store or any solution. So as a QA from all of this lesson, you should learn that on feature branches, you trying to do some kind of destructive testing, negative testing, positive testing, you trying to break specific feature that is provided by developer in this particular branch. You're ignoring the rest of the game. For example, let's pretend that on the feature branch, we had improved UI. So here was the updated scene, you're switching to this branch, pulling the code, getting to Unity to this file and verifying that everything is working correctly in this particular case. Then if we move to develop branch, let's say that this feature got merger to develop you're switching to develop and find that there are no conflicts. You verify that this improved UI works with old UI or any other features that may contradict. And after that, if everything okay, these updates are going to main, and here you're doing full regression of new updated UI, old UI, and any other systems that your game has. After that, it goes to pilin, doing the build, and releasing to the players. 48. Bug Triage: Welcome to Lesson five. You have worked hard, but you have field 100 bucks, and the release is scheduled for tomorrow afternoon. But here's the coded hadality of game development. The developers only have time to fix ten of those bags. Who decides which bugs leave and which bugs they're cutting? This happens in a meeting called Bug Triage. It is a high stakes negotiation where the goal is not to fix every bug but to decide which bugs are acceptable, which not to ship to the players. In this lesson, we're going to look at the roles involved, the trig categories and the ultimate goal balancing game quality against the reality of deadline. Of all, let's decide who does what? Rage meeting is not just for QA. It's a trivversation between different departments, each with their own goal. Let's say you're AQA, lead or the person involved. You're the voice of the user. Your goal is to fight with the best possible experience to fix as much box as possible and the most major ones. You provide the evidence, the bog reports, which includes locks, rapper steps, and the impact the user might observe. Then here comes the lead developer. Their goal is to explain the risk of fix. They might say, I can fit the picture bleach, but it requires changing the entire rendering engine 24 hours before lunch. It's actually too dangerous. And here comes the producer. Their goal is to hit the release date without shifting it. Look at the budget, the marketing, schedule, deadline, and make the final yes or a no decision on whether a box stays open, or it is reschedule it to another print or we just close it as would not fix. The main goal of this meeting is alignment. We want to ensure that if a buck is shipped to 1 million players, everyone in the room has agreed the risk is worth the reward. Let's look at some simple agenda template. What we have here, Title I is Barge agenda. We have a meeting frequency like we're doing it daily or we're doing it weekly or on request. Its duration is required ATMDs a developer, project manager or producer the numbers. We should include here total open box, how many we have in our Block. Flow, are we finding box faster than we're fixing them? Because if yes, you might need to delay the release, have a lot of them unfixed. And the blockers we have simple list of B zero or P one bugs that are currently stopping the QATeam from finishing test plan. Remember, in test plan, we have entry and exit criteria and the absence of B zero box might be shortstop for us to complete this plan for the spring. Then we have the new arrivals, for every new bug found, the must decide, we should confirm its priority severity, does everyone in the room agree on how broken this is the risk of fix, like developers, they do estimate if fixing this bug endeavor di should be fixed right now before the release fix later or ship as known bug or won't fix at all. Al address zombies, reopen a box. Box we had previously, but they still occur or occur this new instance with different steps, let's say, and the last one is the exit review. Like, do we still have throw stoppers or critical box, and is the current stable enough to move from better to release candidate and actually ship we send deadline to the players? QA, you must learn to negotiate. If a producer wants to mark a crash as known B, you need to pull up your data and say, this crash happens to 10% of users. That is 1,000 hundred people who can play, for example, and using these numbers, you might win the argument and push all the forces to fix that crash as soon as possible. Let's try a real world example. Imagine you have three bucks left and only 1 hour of death time. It's Friday afternoon and everyone is going to home. What we have, we have Bk A. It is high severity, but low priority. If players stand still for 2 hours in the forest, the game crashes. Have Bk B with low severity but high priority. The snowman enemy level two has no sound effects. B C with medium severity, but critical priority. The gold continue is cut off on some phone screens. What is the correct rash decision? Junior might be B A because crashes are scary, but Senior K knows that almost no one stands still for 2 hours in the forest in one location to trigger a crash. B is actually annoying that Snowman has no sound effects, but it's just audio. It's just one effect on level two. And there choice is B C because it affects the players understanding of their progress. If they can't see how much gold they have, they can't engage with the shop. It is a business priority that protects the game's economy. In TriH, we SQA always protect the core loop first. Have you ever seen this bug from Assassins Great Unity? Actually, this bug was likely found in Trig. The team marked it as low reproducibility and decided to ship anyway to hit the Christmas deadline. This one became a global meme and permanently damaged the brand's reputation. So Trig is where the science of QA meets the art of game design. It's where you prove that you're just a tester, but stakeholder in the game success. That actually the end of Section nine. So let's move to the practice. We will test our focus game to find some box, to lock them. I will show it like live demonstration. And before this, I will break it a bit because currently the game looks pretty stable and no metro box exists. So I will do some things in the code to break it and showcase you how the QA in Unity works on daily basis to find the bags, to reproduce them, and to lock them. So see you in the next section. 49. Black Box testing practice: Hello, and welcome to the Section ten. This is the last section of that Unity QA course. And in this section, we will have three lessons, which will be like practice. At first lesson, we will play the gray box tested open source game, which is made by Unity and is created to understand which box we may occur in standalone builds. Then in lesson two, we will return to our Fox game, and it will be broken intentionally by me to showcase some bugs that may occur in such games like platformers with slight amount A and some physics and mechanics. So we will look at them, log them, find them. And in the last sort lesson of the section, we will look at another project, some more complex three D shooter game, which is built on Unity assets and can be downloaded by everyone. Without any issues, it also will be a bit maintained by me to showcase the possible box you may occur during your job. So stay tuned and let's move on. In this lesson, let's focus on the standalone built of game that I will share with you. So you also can upload it, play it, find the same box to feel how it is. It is named gray box. Testing link on it will be shared with you, and let's start. Here is the first buck. The player can move through the wall. This wall contains no collider, so user can simply walk through it. Let's test other walls. Another at looks great. So yeah, here is the first buck in this room. The wall which doesn't contain any collider and player can step through it. Let's lock it in our bug list. So the third thing is, let's do like gira. It is physics component, and description would be like player can clip through the solid walls using camera rotation. Is severity will be major. As it actually breaks the level design boundaries. Players should don't observe such things this game has the second level after you break the lb, but some games might just fol you to the void because it might be some boundary. Let's move on. And for splets post the game. Oh from what I can see, player can move. So we pose the game, and there are some glitches on the screen. I think it is supposed to be here by design, but still we see some glitches, and we see that moving mouse and using WASD and keyboard, Ms player move. That's another bug. That's no moving during pause. Let's also lock it. So what we care? Here here, UI player inputs, I'll say remains active while pos menu is open. Its ty will be high because as I said, player could accidentally walk off a cliff while changing some settings or doing some maintenance here or even let's say it is multiplayer game with 64 players, and some player wants bathroom quick or anything, some phone ran he used pause and game actually is not pause. That's especially in the single player games. Let's say some multiplayer games may work like that, but still, if we click pause, the mouse should not be rotatable and the player should not walk using the keyboard. Both should be static. Mouse should be for selecting resume, restart at menu or another buttons. Let's move on. So as we saw, we might check colliders walls. Yeah, here is also LLD bag level art design, which means that the C lines are not aligned with each other, so this texture might be actually as you see, they are different, and I assume this game uses this as map design. But in real world games, such things might be treated as back as slows and back. Like lens are not aligned with each other, but let's assume this game is designed in that way because this is here squares and here rectangles. Here's the aer Bug. If we are interacting with object with the cube and press pause, the object is like unlinked from us. It launches away. If we unpause, it sticks to us again. It is another kind of bug. Let's strike it as some probably physics. Let's say interacting with objects during pause causes extreme velocity. Severity for this, I would say high because it breaks the physics engine. It might not harm, actually the game experiences after we unpos our object returns in our hands. So it should not be some critical or another kind of, but still it is high because let me show you something if in this particular game stand on this tile which opens the door and we push the cube. It may disappear out of the door and player will be soft locked here because cup is not respondable. Let's try one more case. What if we have the cube and try to move through the door? Yeah. As I said, the cube just fallen through the door and we can't interact with anything. We can open the door, but we can't pick up anymore. The cube. Yes. So player is soft locked here. How can we lock it? This is actually level design box design. Um let's call it puzzle box, and say that it can be force it door actually locked door. That's important. And the severity from this, we can put as critical because this is soft lock. Player, is forced to restart the level or cute at all, the game, which means that if the soft lock occur at the end of some very, very hard level and no restart from checkpoint, which was, let's say, here. It means that the player should complete this hard heart level again, which lead to bad reviews of the game. So it is important to check also some negative cases like that. Be aware. But we can restart and do positive test, move to another room. What we have here, I think colliders will be okay here. But let's do at least situative testing. Yeah, collaters are fine. What we have a cube, and we should be at the top. What do you think? How can we reach the top with the cube? Just jump on it. It doesn't multiply or jump heat. So probably we can take it. Yeah, it glitches and it gives you some velocity to the top, and you can move yourself to the top. That's also actually a box. I know that in this game it is kind of design solution, but this game is built to showcase a box which may occur during your job. So what we can write here? Let's say it is also physics. Actually the same third. Yeah, it is actually probably the same. The third part without pause. So interacting with we can say cube. We know that it is cube or puzzle box, standing on it and taking it cause player to move to top. We can say that. Severity for this will be actually medium. Why medium, not high because this buck is not something actually critical, something harmful for player. Player may live with that. Yeah, he may observe some new heights, reach some destinations, but actually, if it doesn't fail some quest, why not? It's bucket should be fixed, of course, before a lease pod. It's not such high as it may be. Let's move forward. I know whether we should keep this que pod. Yeah, we should keep it. And from what I see, we should transfer this coup here. How can we do it using this back with door. No, here it doesn't reproduce. Here, the door has probably some collider, which doesn't give a chance to do that. And still we need to have the door open it. So et's try to find something. But what if we for our game and move through the door? Yes, we can do it. That's also a buck because the player is not post, but everything in the game doors, buttons is post. That's actually the same back as we already looked with the system which is related to the post. And which doesn't stop player from moving. So when this, this second bug will be fixed. This also might be fixed along with it. Then another bug might be the objects may push you out of bounds. Let's try this. As we see, we have this collider here. But what if another object pushes our player through this wall? It is actually successful, and never minds that this wall has collider, actually. Your player might be thrown away, might be pushed out of box, anything may happen. So this is also a great test case. Let's try to see what we have here. As we can see this object tries us to push us through the wall but here it is unsuccessful. I cannot jump there, but I should be able to jump on this style, then on this style. Then on this and then on this, yes. I'm not sure which box should be in this room, actually. Probably also push out of walls, probably something here in the center. But we haven't absorbed any except this try to push out of bounds, but it is unsuccessful unless unlike the previous one, the walls are with gliders, everything is okay. That's great with move. What we have here, yeah, I think we should take this. We can use a glitch, I think to speed up a bitter process. We need three boxes. We have one. Actually, the second one. I think we can use the pause here and try to through this cube through the door and move. So we used to kind of exploit. And here also the leaves exploit. We will stand on this, pause our game and most of the This is actually the end of this Black Box testing game. We found five pretty You know, we SQA see them quite often in BA projects, especially in games with Open World, with a lot of some boundaries, and, you know, the pause bug happens quite often. So keep in mind this kind of bugs. We will try all of them, some related to physics, some related to UI design in the next lessons in the Fox game, in the three D shooter game. There also might be some walls. And yeah, we will try all of them, probably some may ocurre. So see you in the next lesson. 50. Practical testing in Unity (2D game): Hello, and welcome to the practice lesson. Today, we're going to test the fox game and issues first, like everything we'll find. Then we will inspect each pack to understand the root cause of it. We have a new build to the focus game. Let's first launch the game and see what is wrong with it. I will play and commentate and you can take notes. Let's launch the game. Alright, the game is live. Let's observe. Immediately, look at the score UI. I haven't moved. I haven't touched anything, but numbers are racing. We already have 16, 17, and it is raising. But we know that a score should be an integer, like one, two, three, five, ten, but this is a float Stimal. Actually, it looks like timer. It's already 30 seconds since you started actually. This one is a critical UI buck. You can log it as buck number one. UI score displays time instead of points. Son number two is when I move, I press right or left. Actually take character moves. But as we can see, as we can see sprite, it is frozen in idle pose. Like this animation is called idle and we do nothing. And when I move, the animation so change to move moving something like that. And when I move, it doesn't change. The physics works, but the visuals are frozen. It's definitely an animation bug you can lock it as B number two. Run animation fails to trigger less one. Observation number three, the coins, I can't check them. I can't pick them up. They are acting like some unbeatable rock instead of objects that they can pick up and which will add some score to me. Actually this is pretty simple back. You can log it as back number four. That coin is solid obstacle that cannot be collected. One more observation. Observation number four is when you press space par and then press it again, like our fox jumps again and again and again and moving out of the screen. If we spend space bar, this is actually the thing called infinite jump exploit. So we can lock this as bag player can jump in mid air, which means that player can spend the spacebar and do jump action many times without any delays or if it is if it should be by design that we press space bar and the character jumps only once, then yeah, it is a bug. Let's finish this level. Since we can't one more critical bug. We're trying to move into wind zone, actually level zone, some door. Let's pretend it is door and we can't complete the love. I'm standing right in the center of the door and nothing happens. Trying from top from another site, I can't finish the level. It refuses to finish. This is actually high priority buck, it's critical player can't finish the level. Log it as let's say win zone or level zone fails to trigger. Now we have our list. Now let's dig into the architecture and find the root cause for each one. Let's solve the UI mystery first. Why is showing a timer. In unity, this is a data binding error. The UI text component is a dump. It just displays what it is told. If it shows time, someone is pegging at time, what we can do. Let's open the manager script manager script. Here it is C manuscript. And we can look at Update. Oop. Update. See here it is marked as bug. Not to forget about it. Actually, this runs every single frame, and you can see here the string that tells us that it is time, it is not text, it is not score, it is not nothing that we need. It is time. And this is actually a classic Tibucqe that developer left us in production. We'll likely put this to here to test the pond probably for some boundaries and forgot to delete it. And actually, the root cause is that we have time function that we call in update each second, like 60, actually 60 times per second. And this loop overwrites our score data. So if you will notice something like this, when you start the level, and you see running some timer instead of the instead of some score, instead of some progress bar, you should open at the game manager script and look into update function and look actually something which tells you time instead of score. Or text or whenever your game should have in this field. Next, let's find out why didn't we win. This is actually a critical thing. This is like exit. It's like imagine like BP club. It checks the IT or simply tag of everyone who enters. To verify this, you can open your player and look at tag here. Top. Your tag right now is untagged, and to make it working, it should contain player because player is trying to enter the door. Also, how can we else verify that? We can find for something called exit trigger or exit or finish level script. Let's open it. Let's maximize and check that I close. Our door is waiting for tech equals player. Then we start our level exit. Let's verify it like that. We change it or tech to player, and move into door and the game finishes. Actually, if you have some game with exit condition or finish condition and your character when you move into this stor or finish line or any other finished condition and it doesn't actually finish, it ignores you completely. You should verify tag on player object on your character, it is actually player. Next, let's find out why our fox is sliding. Let's get back to our game. Actually, animation is driving by a state machine. To switch from idle to run, the code sends a specific signal parameter, and if the signal name has some tipo, the connection fails. Let's open the animation window. We need animator, so when we get window Animation animator. Here receded list is empty, but that is fine because in this architecture, in this game, specifically, the logic is on the parent, but the visuals are on the child object. To open correctly, you need to expand the player object here and to select SR. Now we see the live data, how it is going right now in the game. We haven't post it, so you can see that some progress bar is moving, animations are moving and actually look at the perimeters list. It is waiting for some bullion, which is called run, but a lower keys. Let's refine in Player controller script. Actually, which command should be? We should find something related to run. Yeah, here we have set animations function, and player anime is taught to start running animation in case we have running grand word from the capital, not from lowercase. But here it is named as lowercase. That's why it is not changing its state to run. But it changes to jump, for example. As you can see, it changes. But when moving, it doesn't change. The script simply cannot recognize the run state and changed animation run. This is a string literal mismatch. Actually, we can verify this back even without looking at the code. If you open animator and you look you have your game running. You look here and you see that the state simply don't change to another. You can capture this as video and share to developer the exact location that animation run doesn't go, and he can instigate that in the code base. And now let's find out why we are actually flying. Why can we Bam our spacebar and too many jumps. The jump logic asks a simple question. Is the ground sensor touching the ground layer? In this same view, turn on your gizmusT button, and look at this red circle. That is actually a sensor. Now let's look at player controller script. We controller script. Let's now get to ground layer and see that it is set to default. And let's check the player itself a bit above. The layer is also default, so the sensor is hitting the player's own feet and reporting ground detected. The player is effectively standing on their own shoes. So if we change here to, for example, ground something different, it yes. You cannot jump many times right now. I'm hitting the space bar as much as I can. Now it works only when the character hits the ground. Even sensor hits some grounds then it can actually jump. So the root cause here is layer mask self detection. So when you will observe such kind of bug, first of all, verify the match of layers because ground check, it includes the players on level here in this example. They should be different. So you can bug that the developer that the layers are identical, and character simply jumps from his own bits. And the last one that we have noticed, why did we bounce off the coin? Why can't we simply pick up it or interact somehow? Unit physics, every object is a solid all by default. To make it a pickup, you must turn it into a ghost by marking it as trigger. Let's find the coin. Prefab. We need to find it is named in this project as Toler, but it is coin. It is prefab. And let's look at box glider to D component here. Box glider to D, and here we're interested in is trigger trick box. It is unchecked. And because it is unchecked, the physics engine threads it as physical wall. Like we have something in code, some trigger, which never runs because as I said, the physics engine rejects the player before the script can fire if we will mark it. A trigger and, of course, launch the game. Stigger safe, launch the game. Yes, we can move through them right now. So the root cause of this specific buck was physics configuration error. Is trigger was disabled. You may ask if we checked the trigger, why we still can't pick up the object itself? We can move through it, okay, but there still cannot be picked up. The issue is the same as the tor exit issue. The different texts. As you can see, the prefab a tag coin on default layer. And if you will look at script, it will say that to pick up the coin, layer text should be. But if you open the player object right now the tech is untagged. You switch to player one, we will be able to proceed with collecting the coins. So that's actually common issue in such games like this platformer. When you cannot pick up something, interact with something, finish the game or trigger some condition, which you actually should always verify the text. Tech actually should be the object you're colliding as parent, let's say, if you're playing with character with a car with any kind of let's say object and you move close to coin to finish line, some door, any kind of trigger, you should verify the text is player. And there is the full audit. We found data binding issue, string literals, layer masks, physics, pick and text. This is kind of gray box testing method that separates professionals from ammeters. Now you can as practice, try to lock this box on your side for some kind of bug report, adding some screenshots, videos, or any announcer as you would like. And, of course, I suggest you to run the game and to try notice all of these issues and to find solutions to them. Actually, the good practice will be not to load exactly that game. I will provide it, of course, but to find another broken game from open source and try to deal with. Or to find some unity projects that are, for example, in Unity Hub, test projects, they are reconfigured. They have some assets, and you can simply ask, for example, the AI to break the game, making some box without letting you know which box it did. So you will simply replace scripts, and when you will run the game, you will not know which box it contains and you will play the game as we did during our practice session. We launched the game, we did some regression test, some smoke test. Then find out five issues, then we proceeded to investigation on them. So I highly recommend you to do the practice on your own, finding the evidence, the root cause of Ichi Buck, and understanding them. In the next lesson, we will work with another project with first person shooter, and in the same way, we will find five bucks and understand the root cause of them. See you there. 51. Practical tutorial 2: All right. Welcome back to the lab. We have just received the release candidate for the first person shooter Maker game. So development team has signed off on this claiming it's feature complete and bug free. But if we don't trust, we verify. I'm going to run a quick smoke test just play through the core mechanics, as we did in the Fox game to see how they feel before we look at the code. Let's start. Let's run the game. And third things first, let's check the damage feedback. I'm going to walk up to the enemy and take a few shots at me. I'm taking hits. Okay. But have you noticed that because p is inverse. I'm taking hits and like HP is increasing each hit and it does to me. It's acting like damaged meter, accumulating red as it get hurt rather than fell parts that trains. That's definitely a logic inversion. Let's note this bug. Now I think that I need to defend myself. I saw here a shotgun pickup. Usually, these are triggers, consumables. You walk through them, you get the gun. Let's grab it. Well, I'm just bouncing off. It's solid rock object. I'm physically colliding with it like a greater all, and the issue here is, as we saw in the Fox game, it doesn't marked as trigger, so I can pick it up, definitely. We will investigate this after our smoke session. Let's get back to the AI. I have design doc right here. Let's pretend they state that this security robot has a 20 meter detection range, so it should detect me while I'm standing here from this place. But it's not triggering to us. Let's get closer, more and more Yes, it is triggering to us, but not from 20 meters as design document states. It's triggering on us, like from 2 meters probably, like when we touch the face of each other. So he's definitely blind until point plant crane. That is way off from the 20 meters spec, we'll find out that. Okay, let's test a reversal. If I grab this chit pack, you see that chitbacs unlocked we see new L bar on our bottom left hot, and I'm going to hold space and St as I can see, there is C way fix. I can use it. But the fuel don't drain. The fuel bar is not moving at all. I'm using p over and over and nothing. So we definitely have infinite view here. That is another kind of ba. And one more check movement felix. Walking feels normal. Even if I press shift, I can move a bit faster like run. That's totally fine, but let's also check the crouch. I press CK, which stands for crouch and trying to move, and I just lounge it forward like a rocket. Crouching is supposed to slow you down for precision, but it's actually making it faster. A way more faster. So the math here is definitely broken. The logic, like the crouch, logic is opposite. Instead of slowing down, we are increasing our speed. Okay, we have found five solid. Some of them even critical box. And now most people just write a ticket and stop here. But we're going to find the root cause as we did in the fox game. Let's keep the game running, but let's pause it, not to fail anything. And let's look at the inspector to see why this is happening. Let's look at the house bar again. Go to the Canvas in their arch and let's find the fill image house. It would be under the hood. Actually, actually, we can use a search to find field image health. Usually in the most projects on the most projects, the bar, the MO bar, tag bar, any kind of bar, which has some field progress. It is named like field image, field image and the name of the system. Now we're looking at field image health in the inspector, which tells us that field amount of that progress bar is 0.6. That's true. It matches the screen. So it tells us that UI component itself is fine. The problem is the script within it. Developer likely flipped the formula calculating one minus health instead of just current health. Basically, if you open this object and you see the amount is correct, it matches what you see on the screen. You can state that the logic is wrong. Next, that shotgun that we couldn't pick up. So let pick up shotgun in the R arch and take a look at the box collider. His trigger property is unchecked. Without the check box, the physics agent threads this solid hole. It never fires the trigger event because it's physical collision bounds. If you check it, we will be able to pick up. Basically, each time you can pick up some consumable, some coin or other things that you should be able to pick up, find it on the scene. Take its name to Ear arching, find it, then check box collider. Is trigger should be checked. Now for the blind robot, we should select the enemy hoverbot in this case, and find its detection module script. It says, the detection range is 20, like design document says to us. So the data is correct. But we saw in the game that he didn't shoot until close range. When the data says one thing, like 20, and the game does another, it's almost always means that there is a line of code, some hard coded value, which is overriding this setting everything frame. To verify this, you actually can bind for detection module. Open it and look for the property which is set for our range. As we can see, detection range, property is set to 0.5, which means that it is hard coded. It doesn't use the value which comes from design document. Let's check the jet tech Select that's collapses. Let's select a player. Let's find JTBAC script, attach it to it. And, of course, let's switch to DBC mode to show more ables. We need to find current field ratio. Current field ratio. Here it is, and it is locked at one. The game knows that I'm flying, but the logic that substracts you is missing. It is an infinite loop of f engine. Basically, it means that it is also kind of hard coded in the code. So you can screenshot this value. You can do a video that your fuel never ends and report this to your developer. And also, let's check our super speed crouch. To do this, we should find player arter controller. And find the setting Mac speed crouched ratio. Mac speed crouched ratio is 0.5. It means 50% of speed, but why did we go first? The code is likely plan this wrong, maybe dividing by 0.5, which doubles the speed. The issue is in mass in logic in the script. In QA, you always compare the actual result. What happens in the game against the expected result. And this kind of variable or any another variable, let's say about this one, it represents the percentage of movement, speed, the player should keep while crouching, the value usually set to half of one, 0.5, which means 50% of speed. And the logic is, if your running speed is 10 meters/second, the code should calculate ten multiplied 0.5, which equals 5 meter/second. When the buck happens moving too fast, there are only two possibilities the data error or logic error. The data error is simple. Designer accidentally typed five instead of 0.5 in the inspector. In this case, the code is fine, but the input data is wrong, and you will notice it simply from looking at it. You will see here five and understand that Mexpet is just a tipo. But if it is a legi error, the data is correct, we see that like current, 0.5, but the programmer used the wrong formula for mass, like dividing instead of multiplying or adding speed in array. So by looking this variable first, you prove that the settings are correct. Therefore, the fact that the character is moving faster means that script logic is ignoring or minus in this number. And you may ask, how can I understand which able I should look for? In unit development, ables are almost always named using keywords that describe what they do. There is three step process you can learn. It is like what where method and which step one is, who is acting weird, like the game object. If the player is moving too fast, we should select the player if enemy is blind. We select the enemy. If the gun is not working, we're selecting the gun, et cetera. At step two, we're looking what mechanics working. The component. We're looking at the list of components, scripts on that object. If we have buck like I'm moving fast, we're looking for a script, player character controller or movement. If you have buck the enemy can see me. We're looking for script related to enemy, something like enemy controller or detection module. If you have I behavior. If you have some infinite line, we are looking for the script which is related to fl. Especially in this game, it's only one jet pack. And the third step is where is the setting, the variable itself. Now we're looking inside that script for key words related to the bo. In our case, crouching is fast. We're scanning all of these variables for words, crouch speed ratio modifier and when we inspect, we simply see that we have here speed crouched variable which corresponds to our issue because for example, in error doesn't apply to us, sprint speed modifier doesn't apply to us, Qate Put step as fix that's not we're looking for. We're looking for Crouch. Crouch there is only one variable, which is our correct thing. So how you can actually think. The problem is speed when I crouch. I need to find the script that controls player movement. You're selecting player because issue in player is related to player. And you get to player character controller. This script controls actually player character. Everything is what is related to our character. Then you scan or crouch, you're finding this exact readable and find it settings are correct, but the code is wrong. For example, forget backpack. Your thought process should be like I have infinite fuel, I need to find the jet pack settings. You're selecting player, you're finding the JetPack touch script, and you're scanning for fuel, duration or fill. You can find here the consumed duration, or if you're in the back mode, you will see current field ratio which is locked.