Game Testing: Finding Bugs and Improving Gameplay

Lecture



Game testing is an integral part of the development process. It allows you to identify and fix bugs, improve the gameplay experience, and overall raise the quality of the product. In this lecture, we will look at various types of testing, as well as the methods and tools used to ensure high game quality. Game testing is an important stage of development aimed at identifying bugs and improving gameplay. Quality testing helps create a stable and engaging product that will meet players' expectations.

For testing video games, as in other fields, there are both universal and unique approaches to solving various tasks. Let's break them down!

Playtesting is one of the game testing methods, aimed at studying what kind of gameplay experience and emotions a player gets during the process. To conduct playtests, participants are given access to an early version of the game (testing is carried out before the official release of the game or its features). Most often, playtests involve not QA specialists but ordinary gamers, friends, relatives, or any other people who can look at the product with a fresh eye. They share feedback based on their impressions and gameplay experience, while observing the terms of the NDA signed before the start of testing.

There are different opinions about whether developers, including the QA team, should be involved in playtesting. Since they know the game inside out, their feedback may be less valuable than the opinion of representatives of the target audience. The goal of playtesting is to understand how interesting the game is to your target audience. The decision about whether to conduct playtests within the company or involve external participants depends on the capabilities and preferences of your team.

Why is game testing important?

  • Identifying bugs: Errors in the game can lead to its unstable operation, crashes, or incorrect behavior of game elements.
  • Improving gameplay: Testing allows you to assess how interesting, engaging, and balanced the game is.
  • Compliance with technical requirements: Checking the game's compatibility with various devices and platforms.
  • Ensuring quality: Testing guarantees that the game meets high quality standards and is ready for release.

Game Testing: Finding Bugs and Improving Gameplay

Speaking of types of testing specific to video games, I would single out a group such as Game Design Testing, into which I include Balance testing, Level Design testing, and "Fun Factor" testing.
Balance Testing involves checking that balance exists:
  • one weapon is not critically stronger/weaker than another in the same class,
  • among characters and their perks there is no overpowered combination of one kind or another,
  • character classes beat each other as intended (like in rock-paper-scissors),
  • the easy difficulty level is not too easy, the hard one is not too hard, and so on.

Sometimes it makes sense to think even about the game's meta, but this is more of an additional bonus, and such tasks clearly do not fall within the QA specialist's area of responsibility. However, QA can make notes and share their observations with the team.

Level Design Testing implies checking the game levels. Even a visually impressive level can turn out to be impassable due to, for example, invisible walls (when there is a model but textures are missing), holes in the floor (for example, due to incorrect joining of surfaces or models), or so-called Stuck points, places where the character gets stuck and cannot move further.

Fun Factor Testing is a fairly abstract type of testing that some single out separately, while others consider it part of Playtesting. Here the emphasis is on the "fun factor" of the gameplay. Even a perfectly balanced game can turn out to be boring, which will drive players away. At this stage, game mechanics are also checked: navigation, aiming, interaction with items, NPCs, and so on. Unsuccessful mechanics or unappealing art are usually revealed precisely here. If nothing irritates you during gameplay, then you are moving in the right direction.

We move on to the discussion of Visual Components Testing, which includes testing 3D models and scenes, 2D elements (sprites), and 2.5D objects.

3D Models Testing covers checking models (high-poly and low-poly) for compliance with visual requirements and the acceptable polygon count specified in the specifications. It also assesses the presence and use of all necessary texture maps, the correct display of the inner side of models (if they are visible), and the model's behavior during animation, including rigging and skinning.

Such checks allow you to detect possible problems in advance, for example, with texture maps, and, if necessary, bake new textures to eliminate the identified shortcomings.

2D and 2.5D Testing covers testing graphics for 2D and 2.5D games. This includes working with sprites (2D), as well as checking sprites or 3D models used in 2.5D projects, which are often applied in fighting games, side-scrollers, and roguelikes.

Examples of testing include identifying problems with the draw order of objects, such as the world and characters in isometric games, or the correct operation of the "window" showing the main character behind a wall (as in Fallout 1 and 2). There are also often nuances with transparent objects, which can interact with 3D elements or complex effects related to transparency.

One of the common problem scenarios is when an object consisting of several sprites dissolves or appears through an alpha effect, but the transparency of each sprite is processed separately. As a result, instead of a single whole, the player sees disjointed elements. To avoid such situations, the object can be pre-rendered into a texture and that texture used for the effect, preserving visual integrity.

When we talk about characters, we are talking not only about playable heroes and their models. This also includes NPCs and enemies with their artificial intelligence (AI). This opens up an extensive field for AI Testing, which covers such aspects as Pathfinding, AI Spawning, AI Reaction, Detection Range (for example, an NPC's vision cone), and other elements. After all, it is much more pleasant when the crowd behaves realistically, does not get stuck in objects, and enemies appear in logical places rather than right behind or in front of the player.

At this stage, the correct operation of impostors is also checked, that is, simplified models used for optimization. Impostors can be represented as 2D sprites in a 3D environment or low-poly models that offload system resources. For example, their use can be seen in the final battle of Serious Sam 4. However, impostors are used not only for AI but also for rendering distant elements of the game world, such as cities, forests, or mountains that the player sees at a distance. These objects are replaced with impostors until the player gets closer, which is known as a billboard sprite.

It is also important to test the Navigation Mesh (Nav Mesh) to make sure that NPCs and enemies do not collide with items or walls while moving.

You can learn more about the mechanics of interacting with crowds of NPCs here.

The use of tricks, such as replacing high-quality (high-poly) models with simplified (low-poly) ones or impostors, optimizing the balance and speed of polygon rendering in busy scenes, as well as processing effects, can significantly affect game performance and reduce FPS (frames per second). These aspects are checked as part of Performance Testing.

This category can also include Soak Testing, which helps identify memory leaks, and Stability Testing, aimed at detecting problems such as freezes, crashes, black screens, the inability to load a level, save corruption, and other errors.

However, a decrease in performance can occur not only due to a large number of models on the screen but also due to a high load with a large number of online players. Even with a small number of players, problems can arise if you have not tested the network code as part of Network Testing. This type of testing allows you to identify lags, connection drops, matchmaking problems, connection stability, input lag, and other nuances.

Special attention should be paid to bugs that arise with a poor internet connection. If your testing is carried out with a good internet connection, it is important to emulate low network quality conditions.

You can learn more about network code and connection types here.

Everything listed above already looks like a complex and cumbersome system. But this is only the tip of the iceberg, since we were mostly talking about the front-end part (the client). However, no one has canceled the back-end, and along with it Back-End Testing.

The back-end covers such important elements as databases, APIs (for example, REST API), telemetry, and many other aspects that ensure the functionality and stability of the application. Testing this part of the system helps make sure that the server logic works correctly, data is stored and processed without errors, and the interaction between the client and the server takes place efficiently and reliably.

We talked about testing hardware performance, but did not specify which exactly. After all, games need to be optimized and adapted for various devices and platforms: PlayStation 4/5, Xbox Series X/S, Nintendo Switch, Steam Deck, and a multitude of unique configurations of your personal computer. Compatibility Testing is responsible for this task.

Many platforms support different operating modes, for example, 4K 30FPS with Raytracing or 1080p 120FPS. The Nintendo Switch, in turn, operates in two modes: handheld (720p) and docked (1080p).

In addition, given the "gamepads everywhere and anywhere" trend, it is important to test the game's operation with a variety of controllers. This includes standard gamepads, a wheel and pedals for racing sims, joysticks, music controllers, and other devices. All of them must correctly display the corresponding icons when switching and work without errors on PC or console.

Separately, it is worth mentioning the actively developing market of VR and AR games and applications. VR and AR Testing deserve a separate approach, since these devices have many unique features. For example, one of the difficulties in developing and testing for VR is the effect of motion sickness, which can occur when using headsets. This "physical" limitation makes VR testing inaccessible to all specialists.

Types of game testing

  • Functional testing: Checking the compliance of game functions with the requirements of the technical specification.
  • Performance testing: Assessing the game's performance on various devices and under various loads.
  • User interface (UI) testing: Checking the convenience and intuitiveness of the interface.
  • Game balance testing: Assessing the balance between players and game elements.
  • Compatibility testing: Checking the game's operation on different devices and operating systems.
  • Localization testing: Checking the correctness of the translation and adaptation of the game for different regions.
  • Penetration testing: Searching for vulnerabilities in the game's security system.
  1. Functional testing

    • Checking the game's core functions for compliance with requirements.
    • Includes testing mechanics, interfaces, and interactions.
  2. Regression testing

    • Checking fixed bugs and new features for the emergence of new errors.
    • Ensures stability after changes are made.
  3. Performance testing

    • Assessing the game's performance on various devices and platforms.
    • Includes testing loading, frame rate, and response time.
  4. Usability Testing

    • Assessing the convenience and intuitiveness of interfaces and controls.
    • Includes collecting feedback from users and analyzing their behavior.
  5. Compatibility testing

    • Checking the game's operation on various devices, operating systems, and configurations.
    • Ensures the game's availability to a wide audience.

Game Testing: Finding Bugs and Improving Gameplay

Stages of the testing process

  1. Planning: Defining testing goals, drawing up test plans and scenarios.
  2. Preparing the test environment: Setting up the test environment, installing the necessary tools.
  3. Executing tests: Conducting manual and automated tests.
  4. Analyzing results: Analyzing the obtained data, identifying errors, and prioritizing them.
  5. Reporting: Compiling reports on the testing results.
  6. Fixing errors: Fixing the identified errors by developers.

Game Testing: Finding Bugs and Improving Gameplay

  1. Planning

    • Defining the goals and objectives of testing.
    • Developing test plans and scenarios.
  2. Preparation

    • Setting up the test environment and tools.
    • Preparing test data and accounts.
  3. Executing tests

    • Conducting tests in accordance with the plan.
    • Recording results and identifying bugs.
  4. Analysis and reporting

    • Analyzing the testing results and prioritizing bugs.
    • Compiling reports and handing them over to the development team.
  5. Fixing and retesting

    • Fixing the identified bugs and retesting to verify the fixes.
    • Ensuring the stability and quality of the game.

Game Testing: Finding Bugs and Improving Gameplay

Testing methods

  • Manual testing: The tester manually goes through the game, performing various actions and recording the errors found.
  • Automated testing: Using special tools to automate routine tests.
  • Beta testing: Involving external players to test the game before release.
  • A/B testing: Comparing two or more versions of the game to determine the most effective one.

Tools for game testing

  • Bug trackers: Systems for tracking and managing errors (for example, Jira, Trello).
  • Test automation tools: Selenium, Appium, Unity Test Runner.
  • Profilers: For analyzing game performance (for example, Unity Profiler, Unreal Engine Profiler).
  • Automated testing

    • Using scripts and programs to automate tests.
    • Examples of tools: Selenium, Appium, TestComplete.
  • Manual testing

    • Conducting tests manually to identify bugs and assess gameplay.
    • Includes the use of checklists and test cases.
  • Bug tracking systems

    • Using systems to record and manage bugs.
    • Examples of tools: JIRA, Bugzilla, Trello.

Roles in the testing process

  • Tester: Directly performs testing, identifies and records errors.
  • Automation tester: Develops and maintains automated tests.
  • Quality manager: Coordinates the testing process, plans and distributes tasks.

Improving gameplay through testing

  • Collecting feedback: Surveying players, analyzing forums and social networks.
  • Analyzing game metrics: Studying data on player behavior to identify problem areas.
  • Iterative testing: Continuous testing and making changes based on the results obtained.
It is important to keep in mind that, in addition to your own quality standards for the game, platform holders have their own standards. Such checks are often called a Technical Requirements Checklist, or TRC, and they are checked as part of Compliance testing and, often, not by your team but by the QA team on the platform holder's side. As part of this testing, you can also check in-game purchases, achievements, subscriptions, if you have them, as well as support for streaming service features. Often, a separate build "branches off" for such needs, which is polished up while changes to it do not affect the main build.
A similar situation happens during Alpha and Beta testing. Pre-Alpha, Alpha, and Beta Testing are no longer about the approach to testing; they are about a snapshot of the game at a certain point in time and checking the readiness of a certain scope at one stage or another. Previously, it was often implied that Alpha is still internal testing, and Beta is already external (for example, closed beta testing, when keys to a build are given to a certain number of players). Now, however, many games are released in early access, and alpha builds become available to a wide number of players. Live feedback lets developers understand what they are doing (in)correctly, which helps them respond promptly and meet players' needs.
But even at such early stages, it is important that players can conveniently use various controllers during gameplay and navigation through your game, and so we have come to Usability testing. There is no secret here: your game should be intuitive and pleasant to use.
I am more than sure that many readers of this article are auditory learners. Sound in games, as in cinema, is one of the most important and powerful tools for influencing the player. Audio testing is responsible for testing such nuances as the triggering and playback of music, sound effects (SFX), dialogues and lines, mixing music to match what is happening on screen, and so on. There is specialized software for working with sound, and the triggers of many effects and lines can be found in automatic mode. If you do not specialize in audio testing, then your tasks will most likely be limited to the points above. Your tasks will far from always be searching for and using the right sounds; the main thing is to implement the ability to play them under certain conditions, and then the audio team will do the remaining magic for you, inserting the right audio or creating something entirely new! It is always nice when the sound design in your game is top-notch!
And it is even nicer to use a game in your native language, plus entering the global market implies a greater reach of a potential audience. Armed with knowledge of I18N and L10N testing, you will be able to make it so that people enjoy your game even on the opposite side of the globe from you! As a peculiarity of checking game localization (Localization testing), it is worth mentioning the difference in time zones of your players and the server, as well as the possibility of manipulating the time and date on your device by changing the date and/or time through the calendar. This often leads to a variety of errors or an undesirable result. For example, if you have set some content to be displayed from a certain date, a cunning user can change the date to a future one and see in advance all the beauty you have prepared for them and spoil it for everyone. There's no need even to do data mining :) There are special localization teams to check the correctness of languages, but do not forget that it is within your power to check language-independent things as part of this testing, and it is worth doing this in advance!
It is strange that I have avoided mentioning the basics of basics for so long: **functional and non-functional testing**. Here there is room to roam, and you do not always need deep knowledge of games and their mechanics. The most important requirements document that you will definitely need is the Game Design Document (GDD). It describes all the main and important nuances about your game. There is even an opinion on the developers' side that testers do not need to understand games in order to test them, since there is a GDD and many other requirements docs. I no longer agree with this statement, since knowledge of mechanics, trends, and games in general helps analyze the found errors and create a set of events to prevent them from appearing in the future or the possibility of finding them at the earliest stages. Formally, yes, you can test without knowledge and understanding of many things, and development and testing not related to gameplay or changing core gameplay mechanics is often outsourced, but this way you can test anything, and it will be no different from Monkey Testing or, if the QA is extremely full of energy and enthusiasm but refuses to study the specifics of the domain, Gorilla Testing.
We have already talked about PC, consoles, even about VR and AR games, but we have not discussed the devices used by the majority of gamers: mobile phones. At the very least, it is important to know and understand the basics of Mobile Testing, since sooooo many games are released on mobile, and this market has long overtaken consoles and PC in revenue. Yes, these games are, for the most part, casual and hyper-casual, but far from all players are "hardcore" and have enough time to play AAA and indie games on PC and consoles. All the types of testing mentioned above are valid for mobile games too, but here it is also important to know the specifics of mobile devices and applications!
One should also not forget about Security Testing, the use of which globally does not differ from other fields. Games use user accounts, accounts from different systems, including online services and accounts from your consoles (for example, you need to play Rocket League through an Epic Games account but on the PlayStation system). Nowadays it is extremely important to pay enough attention to this aspect, because no one wants to lose even a single game that this person bought or spent money on, let alone lose an entire account with all the "hard-earned" goods!
It is also worth mentioning working with DRM systems (Denuvo, etc.) and Anti-Cheat programs (Easy Anti-Cheat, etc.).
As the final point for today in the "types of testing" section, it is important to single out Game Automation Testing. Automation in game dev is a fairly complex process. Many things are extremely difficult to automate, for example, gameplay, since it is important not only to "know" the character's location but also to understand what is happening around them. If you have a randomizer that spawns enemies at different times and in different quantities, or your elements for a "match-3" appear far from always in the same way, then you need to come up with something like a bot for automation and meaningful actions within your tests. I think you have already guessed that automating UI elements or navigation through screens such as the "Main Menu" will not be much trouble. Gameplay, however, is automated by writing your own bots. You can also use Image Recognition tools; they are also well suited for automating screens without gameplay. I wrote about one such interesting tool (Airtest) in my previous articles. Here they are: one, two, and three.

Varieties of "game" bugs

The category of Visual bugs will include:
  • Visual Artefacts - any visual bugs that do not fall under other types.
  • Missing Textures - missing/disappeared textures. Usually, in their place they try to put a "placeholder" in the form of a bright default texture shaped like a checkerboard. This is not mandatory, but thanks to this approach, missing textures are visible to the naked eye.
  • Z-fighting - this bug appears when several primitives are located at approximately the same distance from the camera and they have practically the same values in the Z-buffer, which tracks depth. Because of this, primitives may be partially displayed one over another.
  • Screen Tearing, or "screen tear," is a visual artifact in which information from several frames is displayed in one image.
  • Culling and Clipping - bugs related to the operation of the renderer and the graphics pipeline.
  • It is also worth singling out separately a similar but essentially different bug: collision problems. In video games, culling can be associated with a set of algorithms that respond to the interaction of two adjacent or overlapping geometries (collision detection). And to identify such bugs, there are special view modes.
Within the Audio bugs group, I will single out fairly basic but no less annoying things:
  • the inability to play SFX/music/dialogue,
  • a missed (triggered) playback,
  • poor mixing (the sound is too quiet or too loud),
  • distortions,
  • drops.
Level design bugs:
  • Invisible Walls can be either a bug or a feature. Previously, this was how the player character's movement was restricted, preventing them from going further than needed. Now, however, they try not to create "invisible obstacles," but rather to restrict "passability" using level design, for example, by placing an impassable barrier, a barricade, mountains, city gates, and so on. Showing the player that there is something ahead while using invisible walls to keep the character out of that zone are signs of bad level design. Now this is almost never done, and invisible walls can often be a consequence of level reconstruction: for example, some model might have been forgotten to be removed, or an invisible element was added as a temporary placeholder.
  • Map Holes are most often caused by the loose fitting of the planes of objects (floor, walls, etc.). These are places where the user can, unplanned by the developers, get outside the boundaries of the game zone. Such bugs are also often called Out of Bounds.
  • Navigation Mesh bugs are often related to level rebuilding or automatic mesh generation. For example, you moved objects, but the navigation mesh remained the old one. As a result, your NPCs may "walk into a wall" or any other object that they cannot go around, and they get stuck there (one of the cases of Stuck Points).
Artificial intelligence (AI) errors:
  • NPCs do not move, get stuck, do not follow the player,
  • the expected interaction with items does not work,
  • getting stuck,
  • NPCs do what was not intended initially, and so on.
Since we also have the part of the engine responsible for physics, it would be strange if there were no bugs with physics. Here there can be almost anything:
  • levitating objects,
  • unrealistic physics,
  • acceleration beyond the norm,
  • objects soaring "into space" due to the addition of vectors when processing contacts.
You could have seen bugs of this kind in memes of the most varied games, for example GTA 5 or, from the current hot topic, Cyberpunk 2077. A good breakdown of many bugs from Cyberpunk 2077, including the ones just described, can be watched here.
Stability and performance bugs include:
  • freezes,
  • crashes,
  • black screens,
  • the inability to load a level,
  • user-visible loading of high-poly models or of any objects at all,
  • FPS drops,
  • long loading,
  • micro-freezes (loading hitches).
  • an overly long game installation, as well as the inability to run the game on a PC with the minimum acceptable requirements.
Compatibility bugs are also not uncommon. Especially frequent examples look as follows:
  • on some video cards, crashes may occur (for example, at the minimum possible requirements or on new video cards on the market),
  • controllers of one brand or another do not work,
  • the game does not launch on some specific OS version,
  • a wireless headset outputs sound in mono, and so on.
Everyone has heard about the problems of online games. A poor connection, lags, "invisible players," or "I went around the corner and got killed," scoring errors, the inability to reconnect (if such a feature exists), packet loss during the game, discrepancies in the tallying of information between the client, the dedicated server, and the back-end. Also, with a poor connection, some interface elements can be used several times, something might not load and "disappear," and so on, but, as a rule, these are UI bugs and do not greatly affect the player's user experience.
Under localization and compliance bugs, from the non-trivial ones, we can include:
  • localization of advertising,
  • placing different materials in the same spots in different regions and countries (for example, in one country something is prohibited from being shown, but in another it is not prohibited, or the age rating under which the game falls may not allow something to be shown in one region or another).
  • manipulations with the date on your device and a failure in the client's operation with the server.
  • "classic" localization and internationalization bugs.

I think many people have seen this bug from Assassin's Creed. The reasons can be different: the mesh did not load or the material is simply wrong. And one should also not rule out the possibility of a LOD mesh being enabled that is not installed.

It would be strange if such a complex system as video games had no bugs. They exist, occur often, and this bestiary here is extremely diverse. Having familiarized yourself with the above-mentioned types of testing for games, I think you can guess that bugs in video games are far from only "404 not found" and "game crashed." Let's run through the most frequently encountered ones in the game industry!

The category of Visual bugs will include: any visible artifacts (Visible Artefacts), missing textures, Clipping, Culling, Screen tearing, Z-fighting.

You can see examples of visual bugs below:

Visual Artefacts - any visual bugs that do not fall under other types.

Game Testing: Finding Bugs and Improving Gameplay

Whoops... Something went wrong

Missing Textures - missing/disappeared textures. Usually, in their place they try to put a "placeholder" in the form of a bright default texture shaped like a checkerboard. This is not mandatory, but thanks to this approach, missing textures are visible to the naked eye.

Game Testing: Finding Bugs and Improving Gameplay

A missing texture and a good example of the "checkerboard" instead of the lost file

Z-fighting - this bug appears when several primitives are located at approximately the same distance from the camera and they have practically the same values in the Z-buffer, which tracks depth. Because of this, primitives may be partially displayed one over another.

Z-fighting, also called stitching or planefighting, is a phenomenon in 3D rendering that occurs when two or more primitives are at very close distances from the camera. This causes them to have almost equal or close values in the z-buffer, which tracks depth. This means that when rendering a certain pixel, it is ambiguous which of the two primitives is drawn in that pixel, since the z-buffer cannot accurately distinguish which one is farther from the other. [ 1 ] If one pixel were unambiguously closer, the less close one could be discarded. This is especially common with coplanar polygons, where two faces occupy essentially the same space, and neither is in front. As a result, the affected pixels are rendered with fragments from one polygon or the other arbitrarily, in a manner determined by the precision of the z-buffer. It can also change when the scene or camera changes, causing one polygon to "win" the z-test, then the other, and so on. The overall effect is a flickering, noisy rasterization of two polygons that "fight" for the color of the screen pixels. This problem is usually caused by limited subpixel precision, rounding errors of floating- and fixed-point.

The higher the precision of the z-buffer, the less likely z-fighting is to occur. But for coplanar polygons, the problem is inevitable unless corrective action is taken.

Game Testing: Finding Bugs and Improving Gameplay

A demonstration of z-fighting with several colors and textures on a gray background

Game Testing: Finding Bugs and Improving Gameplay

Screen Tearing, or "screen tear," is a visual artifact in which information from several frames is displayed in one image.

Game Testing: Finding Bugs and Improving Gameplay

Game Testing: Finding Bugs and Improving Gameplay

Culling and Clipping - bugs related to the operation of the renderer and the graphics pipeline. Often it is the intersection of two objects, in which one covers the geometry of the other, hiding it from view. If we delve a little deeper, then Culling is the discarding of what is known to be invisible. In that case, the game will not even try to render this segment. Culling comes in different types, and here are its examples: frustum culling - discarding based on the view frustum, backface culling - discarding "back" faces, occlusion culling - discarding faces due to the fact that they are covered by other geometry, depth culling - the overlapping of one geometry by another that has already been drawn, but based on the depth buffer. And when a fairly large polygon is drawn and everything that is known to be outside the screen is cut off from it, that is already Clipping.
Also, it is worth singling out separately a similar but essentially different bug: collision problems. In video games, culling can be associated with a set of algorithms that respond to the interaction of two adjacent or overlapping geometries (collision detection). And to identify such bugs, there are special view modes, but I will talk about that in the next article.

Game Testing: Finding Bugs and Improving Gameplay

This is how you can easily "enter" an object with a broken collision (or without one at all)

Game Testing: Finding Bugs and Improving Gameplay

A bug of this kind can also be described with the term occlusion, i.e. the overlapping of one object by another not as intended.

Within the Audio bugs group, I will single out fairly basic but no less annoying things: the inability to play SFX/music/dialogue, a missed (triggered) playback, poor mixing (the sound is too quiet or too loud), distortions, drops.

Level design bugs - invisible walls, map holes, stuck spots, and so on. I would also classify bugs related to the nav mesh (Navigation Mesh) as level design bugs. Below I will give a few examples of level design bugs:

Invisible Walls can be either a bug or a feature. Previously, this was how the player character's movement was restricted, preventing them from going further than needed. Now, however, they try not to create "invisible obstacles," but rather to restrict "passability" using level design, for example, by placing an impassable barrier, a barricade, mountains, city gates, and so on. Showing the player that there is something ahead while using invisible walls to keep the character out of that zone are signs of bad level design. Now this is almost never done, and invisible walls can often be a consequence of level reconstruction: for example, some model might have been forgotten to be removed, or an invisible element was added as a temporary placeholder.

Game Testing: Finding Bugs and Improving Gameplay

Game Testing: Finding Bugs and Improving Gameplay

The hero cannot go further because of an invisible wall, yet the road never ends...

Map Holes are most often caused by the loose fitting of the planes of objects (floor, walls, etc.). These are places where the user can, unplanned by the developers, get outside the boundaries of the game zone. Such bugs are also often called Out of Bounds.

Game Testing: Finding Bugs and Improving Gameplay

And this is what your game looks like "from the inside"

Navigation Mesh bugs are often related to level rebuilding or automatic mesh generation. For example, you moved objects, but the navigation mesh remained the old one. As a result, your NPCs may "walk into a wall" or any other object that they cannot go around, and they get stuck there (one of the cases of Stuck Points).

Game Testing: Finding Bugs and Improving Gameplay

Here the Nav Mesh passes through the objects in the red circle

Artificial intelligence (AI) errors: NPCs do not move, get stuck, do not follow the player, the expected interaction with items does not work, getting stuck, NPCs do what was not intended initially, and so on.

Since we also have the part of the engine responsible for physics, it would be strange if there were no bugs with physics. Here there can be almost anything: levitating objects, unrealistic physics, acceleration beyond the norm, as well as objects soaring "into space" due to the addition of vectors when processing contacts. You could have seen bugs of this kind in memes of the most varied games, for example GTA 5 or, from the current hot topic, Cyberpunk 2077. A good breakdown of many bugs from Cyberpunk 2077, including the ones just described, can be watched here.

Game Testing: Finding Bugs and Improving Gameplay

Roach, what are you doing???

Game Testing: Finding Bugs and Improving Gameplay

Flying cars in Cyberpunk 2077 are not a rare sight

Stability and performance bugs include freezes, crashes, black screens, the inability to load a level, user-visible loading of high-poly models or of any objects at all, FPS drops, loooooooong loading, as well as micro-freezes (loading hitches). Here I will also add an overly long game installation, as well as the inability to run the game on a PC with the minimum acceptable requirements.

Game Testing: Finding Bugs and Improving Gameplay

Sorry, I didn't recognize you... Your face didn't load

Compatibility bugs are also not uncommon. Especially frequent examples look as follows: on some video cards, crashes may occur (for example, at the minimum possible requirements or on new video cards on the market), controllers of one brand or another do not work, the game does not launch on some specific OS version, a wireless headset outputs sound in mono, and so on.

Everyone has heard about the problems of online games. A poor connection, lags, "invisible players," or "I went around the corner and got killed," scoring errors, the inability to reconnect (if such a feature exists), packet loss during the game, discrepancies in the tallying of information between the client, the dedicated server, and the back-end. Also, with a poor connection, some interface elements can be used several times, something might not load and "disappear," and so on, but, as a rule, these are UI bugs and do not greatly affect the player's user experience.

Game Testing: Finding Bugs and Improving Gameplay

With this many repetitions, this is apparently no longer a bug but a feature. Time to introduce queues like in Diablo 2

Under localization and compliance bugs, from the non-trivial ones, we can include localization of advertising, placing different materials in the same spots in different regions and countries (for example, in one country something is prohibited from being shown, but in another it is not prohibited, or the age rating under which the game falls may not allow something to be shown in one region or another). I would also classify manipulations with the date on your device and a failure in the client's operation with the server here. And of course, no one has canceled the "classic" localization and internationalization bugs. You can read more about them and about approaches to their correct and complete testing in my article.

Game Testing: Finding Bugs and Improving Gameplay

Why do I need text? It's clear enough where to click!

Game Testing: Finding Bugs and Improving Gameplay

People, and horses, and everything all mixed together here

Approaches and tools

Cheat Codes / Cheat Menu

Cheat codes were originally not easter eggs or useful goodies for players so that they could load a certain level or set infinite health/money for themselves, and they were not even conceived for saves, although they can be applied that way. Cheat codes were used by developers to debug games. Due to various limitations, they had to be entered on a certain game screen or menu. Over time, the codes leaked to the public and became extremely in demand for obvious "godly" reasons.
Now, however, instead of codes that need to be memorized and entered for a long time, Cheat Menus are used, which already contain lists of cheat codes grouped into a convenient form for use. This list can be called up on almost any screen, but if the code does not fit the current conditions, then it will not execute (for example, if you try to spawn an object in the main menu). A cheat menu is not standard functionality; each game has both a unique appearance and unique code responsible for its implementation.
However, with great power also comes great responsibility: the use of cheat codes can lead to bugs that are impossible to achieve in real game conditions in any way. It is precisely for this reason that fairly complex and even "strange" bugs need to be rechecked and reproduced without the use of cheat codes, and you should also always keep in mind the entire flow that the player must go through to run into this problem. It is also worth taking into account that there is a high probability that a particular bug, easily reproducible with the help of cheats, will never be encountered by the player in practice.

The in-game console

The console in a game can be and often is used as a tool useful in testing. It is usually called up by pressing the "~" (tilde) key, and drops down either at the bottom as a small line or at the top of the screen, occupying a decent part of it. I think many people have used the console in Counter Strike 1.6, turning your character from right-handed to left-handed or changing the characteristics of your crosshair. However, the console was not enabled by default: it had to be activated in advance in Options.
Using the console on dev builds (for example, directly from the Unreal Editor), you can connect the back-end to the test accounts you need, speed up or slow down the game (not the FPS, but specifically in-game actions), use cheat codes, turn on and off the HUD you need, and much more.

In-game HUDs (Heads-Up Display)

Extremely useful tools, which, however, cannot be obtained without the help of developers. HUD widgets are often called up using a console command. Depending on how the developers set up the HUD, one or another piece of information will be displayed for certain needs. Using such elements, it is extremely convenient to keep track of damage dealt, progress on challenges, the use of consumables, and so on.
It is worth mentioning that such HUDs are developed by developers specifically for debugging needs, and they may well not exist in your project.

Weapon room / Training room

Rooms of this kind, as a rule, contain weapons, characters, enemies (including bosses), surfaces, items (consumables), vehicles. In general, everything necessary and theoretically necessary that may come in handy for testing during gameplay. In addition to all of the above, in such spaces rooms can be created for certain needs: for example, in one, items can be arranged in such a way as to check whether a barrier of a certain size protects you while crouching, standing, and so on; in another room - whether the character can pass between objects, and so on.
Such spaces are usually found in fairly large games, since creating them requires a budget and developers who can assemble everything necessary together. Then you will be able to "build up" the spaces you need within this map yourself, if you know how to use the engine's editor.

Configuration files

Configuration files are encountered everywhere, and you can use them for a wide variety of needs. In dev builds, there are more such files than in the release version, and through them you can turn features on/off, change resolutions, control the logging level, specify which back-end to connect to, control graphics settings, and much more. Often, fans of "games in their age" (older games) dig around in configuration files (for example, of the ".ini" format) to set up the operability of old games on new hardware, if a corresponding patch or reissue was not released for it. The number and volume of available settings and their format can differ radically from game to game, even if the games are written on the same engine.

Managing your internet connection

An extremely important point to check nowadays, since even in single-player games there can be (and most often are found) elements tied to online. Unfortunately, there is no unique and all-encompassing tool here. Personally, I find it pleasant and convenient to use the Clumsy tool as a helper in this matter. The program manipulates not the game but your connection as a whole, which makes Clumsy a convenient tool for managing your connection for absolutely any needs: web, standalone software, and so on. Within this tool, you can control such ways of degrading your internet connection as Lag, Drop, Throttle, Out of order, Duplicate, and Tamper. Moreover, you can do this both for Inbound and Outbound, specifying the chances of encountering this problem.
View modes
Game engines have functionality such as "view modes," which helps you see the type of data being processed in your scene, as well as diagnose any errors or unexpected results. The most common view modes have their own hotkeys, and they may differ from engine to engine, but you can always view all of them from the view mode or call them up using the corresponding command in the console. Below I will give a few examples based on the View Modes from Unreal Engine, and you can read more and in greater detail in the engine's documentation. Let's take a look at a few of them.

The toolset of game platforms

All game platforms provide developers with their own toolset for uploading and testing the game through their system. For example, Steam allows you, through your game's Properties menu, to switch languages (localization), launch the game with your own parameters (for example, launching the game with the parameters you need or overriding the values of the parameters used), allows you to verify the integrity of the game files, manually check for updates from your CI/CD system, and much more! And of course, platforms allow you to download and add your game to your library via a special code. And if the game is already available for players to download, or you want to use different environments for different teams, then for such needs game platforms provide the ability to use different Branches. For example, one branch looks at the master client - test backend ("working environment"), and the second - the production client - live backend (release environment).
This method is extremely convenient to use and helps all members of one team or even different teams use the versions of the game they all need without affecting each other. When using the "working environment," platforms also ask before launching about the need to run the anti-cheat system.
In many cases, testers do not even need to use the Editor build (launching the game through the game engine's editor), since most needs are covered, by default, by the build from the platform. Also, this version of the build is as close as possible to what the end player will get, which is an important criterion for choosing these builds as the main candidates for regression testing.

General tools

Speaking of tools that are not directly related to testing but can make your life easier, I would single out the following: VCS (Perforce, Git), game engine editors, Grafana, and Playfab.
Testing in gambling games/casinos (Gambling)
Gambling (from the English "Gambling" - a game of chance) is a game in which the result depends entirely or to a significant extent on chance (luck).
Although gambling is a collective type for many games, bookmaker bets, binary options, and gaming tournaments, the testing of each specific subtype may differ. In addition, gambling can either relate to game testing in some cases or have nothing to do with it at all.
From the specific:
  • interaction with legislation;

Conclusion

These are far from all the varieties of game bugs, but they are, perhaps, the most frequently encountered. Here I did not touch upon inconsistency bugs, such as "an element is recorded in blueprints one way, on the back-end another way, an object or its attributes (ID, description, etc.) were forgotten to be added somewhere," and so on. And I did not touch upon them because this is no longer about the specifics of games, but rather about malfunctions in general that can occur in many programs.

Game testing is a continuous process that begins at the early stages of development and continues right up to release. Quality testing allows you to create games that not only work stably but also bring enjoyment to players. Game testing is a comprehensive process that requires attention to detail and a systematic approach. Quality testing helps create a stable and engaging product that will meet players' expectations and ensure success in the market.

And what bugs have you encountered while playing or working on a game? I would be glad to chat with you about this and other relevant topics in the comments!

Questions for discussion

Tasks for independent work

See also

Comments

To leave a comment

If you have any suggestion, idea, thanks or comment, feel free to write. We really value feedback and are glad to hear your opinion.
To reply

Lectures and tutorial on "Computer games developming, game-design"

Terms: Computer games developming, game-design