This website uses cookies to better the user experience of its visitors. Where applicable, this website uses a cookie control system, allowing users to allow or disallow the use of cookies on their computer/device on their first visit to the website. This complies with recent legislative requirements for websites to obtain explicit consent from users before leaving behind or reading files such as cookies on a user’s computer/device. To learn more click Cookie Policy.

Privacy preference center

Cookies are small files saved to a user’s computer/device hard drive that track, save, and store information about the user’s interactions and website use. They allow a website, through its server, to provide users with a tailored experience within the site. Users are advised to take necessary steps within their web browser security settings to block all cookies from this website and its external serving vendors if they wish to deny the use and saving of cookies from this website to their computer’s/device’s hard drive. To learn more click Cookie Policy.

Manage consent preferences

These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms. You can set your browser to block or alert you about these cookies, but some parts of the site will not then work. These cookies do not store any personally identifiable information.
These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our site. They help us to know which pages are the most and least popular and see how visitors move around the site. If you do not allow these cookies we will not know when you have visited our site, and will not be able to monitor its performance.
Cookies list
Name _rg_session
Provider rubygarage.org
Retention period 2 days
Type First party
Category Necessary
Description The website session cookie is set by the server to maintain the user's session state across different pages of the website. This cookie is essential for functionalities such as login persistence, ensuring a seamless and consistent user experience. The session cookie does not store personal data and is typically deleted when the browser is closed, enhancing privacy and security.
Name m
Provider m.stripe.com
Retention period 1 year 1 month
Type Third party
Category Necessary
Description The m cookie is set by Stripe and is used to help assess the risk associated with attempted transactions on the website. This cookie plays a critical role in fraud detection by identifying and analyzing patterns of behavior to distinguish between legitimate users and potentially fraudulent activity. It enhances the security of online transactions, ensuring that only authorized payments are processed while minimizing the risk of fraud.
Name __cf_bm
Provider .pipedrive.com
Retention period 1 hour
Type Third party
Category Necessary
Description The __cf_bm cookie is set by Cloudflare to support Cloudflare Bot Management. This cookie helps to identify and filter requests from bots, enhancing the security and performance of the website. By distinguishing between legitimate users and automated traffic, it ensures that the site remains protected from malicious bots and potential attacks. This functionality is crucial for maintaining the integrity and reliability of the site's operations.
Name _GRECAPTCHA
Provider .recaptcha.net
Retention period 6 months
Type Third party
Category Necessary
Description The _GRECAPTCHA cookie is set by Google reCAPTCHA to ensure that interactions with the website are from legitimate human users and not automated bots. This cookie helps protect forms, login pages, and other interactive elements from spam and abuse by analyzing user behavior. It is essential for the proper functioning of reCAPTCHA, providing a critical layer of security to maintain the integrity and reliability of the site's interactive features.
Name __cf_bm
Provider .calendly.com
Retention period 30 minutes
Type Third party
Category Necessary
Description The __cf_bm cookie is set by Cloudflare to distinguish between humans and bots. This cookie is beneficial for the website as it helps in making valid reports on the use of the website. By identifying and managing automated traffic, it ensures that analytics and performance metrics accurately reflect human user interactions, thereby enhancing site security and performance.
Name __cfruid
Provider .calendly.com
Retention period During session
Type Third party
Category Necessary
Description The __cfruid cookie is associated with websites using Cloudflare services. This cookie is used to identify trusted web traffic and enhance security. It helps Cloudflare manage and filter legitimate traffic from potentially harmful requests, thereby protecting the website from malicious activities such as DDoS attacks and ensuring reliable performance for genuine users.
Name OptanonConsent
Provider .calendly.com
Retention period 1 year
Type Third party
Category Necessary
Description The OptanonConsent cookie determines whether the visitor has accepted the cookie consent box, ensuring that the consent box will not be presented again upon re-entry to the site. This cookie helps maintain the user's consent preferences and compliance with privacy regulations by storing information about the categories of cookies the user has consented to and preventing unnecessary repetition of consent requests.
Name OptanonAlertBoxClosed
Provider .calendly.com
Retention period 1 year
Type Third party
Category Necessary
Description The OptanonAlertBoxClosed cookie is set after visitors have seen a cookie information notice and, in some cases, only when they actively close the notice. It ensures that the cookie consent message is not shown again to the user, enhancing the user experience by preventing repetitive notifications. This cookie helps manage user preferences and ensures compliance with privacy regulations by recording when the notice has been acknowledged.
Name referrer_user_id
Provider .calendly.com
Retention period 14 days
Type Third party
Category Necessary
Description The referrer_user_id cookie is set by Calendly to support the booking functionality on the website. This cookie helps track the source of referrals to the booking page, enabling Calendly to attribute bookings accurately and enhance the user experience by streamlining the scheduling process. It assists in managing user sessions and preferences during the booking workflow, ensuring efficient and reliable operation.
Name _calendly_session
Provider .calendly.com
Retention period 21 days
Type Third party
Category Necessary
Description The _calendly_session cookie is set by Calendly, a meeting scheduling tool, to enable the meeting scheduler to function within the website. This cookie facilitates the scheduling process by maintaining session information, allowing visitors to book meetings and add events to their calendars seamlessly. It ensures that the scheduling workflow operates smoothly, providing a consistent and reliable user experience.
Name _gat_UA-*
Provider rubygarage.org
Retention period 1 minute
Type First party
Category Analytics
Description The _gat_UA-* cookie is a pattern type cookie set by Google Analytics, where the pattern element in the name contains the unique identity number of the Google Analytics account or website it relates to. This cookie is a variation of the _gat cookie and is used to throttle the request rate, limiting the amount of data collected by Google Analytics on high traffic websites. It helps manage the volume of data recorded, ensuring efficient performance and accurate analytics reporting.
Name _ga
Provider rubygarage.org
Retention period 1 year 1 month 4 days
Type First party
Category Analytics
Description The _ga cookie is set by Google Analytics to calculate visitor, session, and campaign data for the site's analytics reports. It helps track how users interact with the website, providing insights into site usage and performance.
Name _ga_*
Provider rubygarage.org
Retention period 1 year 1 month 4 days
Type First party
Category Analytics
Description The _ga_* cookie is set by Google Analytics to store and count page views on the website. This cookie helps track the number of visits and interactions with the website, providing valuable data for performance and user behavior analysis. It belongs to the analytics category and plays a crucial role in generating detailed usage reports for site optimization.
Name _gid
Provider rubygarage.org
Retention period 1 day
Type First party
Category Analytics
Description The _gid cookie is set by Google Analytics to store information about how visitors use a website and to create an analytics report on the website's performance. This cookie collects data on visitor behavior, including pages visited, duration of the visit, and interactions with the website, helping site owners understand and improve user experience. It is part of the analytics category and typically expires after 24 hours.
Name _dc_gtm_UA-*
Provider rubygarage.org
Retention period 1 minute
Type First party
Category Analytics
Description The _dc_gtm_UA-* cookie is set by Google Analytics to help load the Google Analytics script tag via Google Tag Manager. This cookie facilitates the efficient loading of analytics tools, ensuring that data on user behavior and website performance is accurately collected and reported. It is categorized under analytics and assists in the seamless integration and functioning of Google Analytics on the website.

How to Write a Bug Report

  • 127084 views
  • 10 minutes
Sviatoslav A.

Sviatoslav A.

Copywriter

Elena K.

Elena K.

Head of Quality Assurance office

Share

Writing quality bug reports is a skill often overlooked by app development companies. But well-written bug reports can decrease the time between finding a bug and resolving it. Bugs can delay an app’s release, and problems with bugs can quickly spoil relationships with clients.

Today we’ll describe what a quality bug report should look like so you can avoid unnecessary delays in bug resolution and avoid strained client relations during your project development process.

Let’s compare a poor bug report with a good bug report

What does a poor bug report look like?

To understand how to write a quality bug report, let’s first look at how to write a poor one.

Imagine we’re working on a social networking website that connects football fans in group chats. After an update rolls out, a QA specialist fills out a bug report in JIRA. Let’s take a close look at this report:

How to Write a Bug Report

At first glance, everything seems fine with this bug report, doesn’t it? We have a description, a summary, and some other details related to the issue. What’s lacking? Let's dive deeper.

Bug ID: JIRA gives an ID to the bug automatically, so we see nothing wrong here.

Bug Summary: This information is located below the ID. The summary of this bug isn’t specific. There are various types of users, and this summary doesn’t specify for which user(s) the bug occurs. A developer working on this issue will have to ask additional questions to clarify.

Bug Details: The tester didn't provide any data about the application version and testing environment. We will talk through these details further in the article. As for the priority, testers usually assign a priority level, which may change later.

Bug Description: This section raises the most questions. Here, the tester should explain Steps to Reproduce, Actual Results, and Expected Results. A bug report should give as much relevant information as possible. If your QA representatives don't describe how to reproduce a bug thoroughly enough, then developers will waste time trying to figure out what’s wrong.

After reading the description in our screenshot, web developers will immediately ask what login credentials were used: admin, test user, or moderator. Also, they’ll need to know the server (environment) on which the bug was produced. In other words, did this happen on a testing server, for example https://testing-bugs.sprinklebit.com, or a production server, for example https://sprinklebit.com.

The tester should also have provided Expected results. These details help a developer — who may not be very familiar with the app — understand the issue faster. Finally, we don’t see any visual documentation of this bug, such as attached images.

How do you turn a poor bug report into a quality bug report?

Let's now take a look at the next screenshot. This documentation is much better than the previous bug report.

High quality bug report

What’s changed? The second bug report is much more specific. Web developers can work more efficiently when their documentation has all data they may require.

Let's explain what was improved in this second bug report.

The tester described important details in the summary: “Chat – the creator of a group conversation cannot rename it”. We also see other valuable information under the categories: Affects Version/s, Environment, and Fix Version.

The tester mentioned the version of the app in which the bug was detected. The environment is also specified, meaning the version of the website on which the bug was found. The tester further indicates in the bug description how the functionality must be implemented and shows how the bug was reproduced. The Steps to Reproduce discloses necessary login data, the address for the relevant version of the website, and a description of which buttons were clicked. The actual result is corroborated with a screenshot. Lastly, the tester didn't forget to mention the expected result.

We want to emphasize that any bug report should always be written in accordance with a set of rules. There aren't many of them, as the structure of a bug report is pretty much standard across all bug tracking programs.

Here are our further recommendations for how to create a high-quality bug report to make developers happier and more efficient. In the end, your application will benefit when bugs are correctly reported and resolved quickly.

High-quality bug report know-how

The aim of bug reporting is to explain an issue to web developers as soon as possible to aid overall project development. Before the QA services team starts writing a bug report, they should know the answers to the following questions:

  • What? – What has happened with the application?
  • How? – What did we click/do to produce the bug?
  • Where? – Where exactly in the app did we find the bug? What is the webpage and/or server (environment)?

The next part of our article shows a good structure for a bug report.

Structure of a website bug report

Bug ID

Your testers may use a bug tracking system such as Bugzilla, JIRA, Lean Testing, or some other software that automatically assigns an ID to the document. Alternately, testers should assign an ID manually. Using an ID will save much time for developers compared to the alternative of writing out a full title.

In practice, almost no one manually writes bug IDs today. But if you do, you could use an application’s abbreviation. For example, we use SB-WEB for the web version of SprinkleBit, or SB-MOB for the mobile version. Also, testers should add an index number for the current bug.

Good: SB-WEB-121 or SB-MOB-231

Bad: My-Beautiful-Website-#87123 or simply #112

Developers may work with several projects concurrently, so a well-defined bug ID will immediately cue them in to which application and version a bug was reproduced in.

Bug Summary

In JIRA a summary is similar to a title. The summary may be considered the main part of the bug report. For starters, we advise testers to use short and informative titles. A bug summary usually consists of an Epic and short description of the problem. Epic in JIRA is the name of a large chunk of functionality, like Chat or User Profile. A short description is one or two sentences that tell exactly what happened. Ask your testers to avoid describing emotional reactions or subjective opinions.

Good: “About the company screen. Red strip on the top of the screen” or “Layout issues in the 'Rules' screen.”

Bad: “Something wrong with Rules” or “Why are there problems with the screen???”

Bug Details

As experienced QA engineers, we strongly recommend that your testers state the application version as well as the test environment. Usually, an application is updated every two to three weeks. For example, we might issue a new version of an app with bug fixes every two weeks. This means that there’s no need to create a late bug report about some problem in the 2.01 version if we have already implemented the 2.21 version by now. Ask your testers to add new reports in a timely manner, and always to specify the exact version of the application in which they reproduced a bug.

A test environment can be a website version, an operating system, or a web browser depending on the type of the bug. For instance, you may have two websites – www.my-website.com and testing.my-website.com. These are two different environments (test server and production server) and they may exhibit different bugs. Therefore, testers must indicate this data as a URL in their bug report. A browser name and version is usually mentioned if layout issues were found. Ask testers to always report an environment. It makes the work much easier as web developers will know exactly where testers discovered an issue.

If your testers don't add this data, then developers may check an irrelevant test environment. They won't find a bug there and may even close the task while the bug persists.

Bug Severity and Bug Priority

These two metrics may either be listed as separate characteristics or united in one parameter. It depends on the bug tracking system your testers use. Bug Severity is an estimation of the impact of the bug on the application, along a scale ranging from critical (a bug blocks key functionality) to low (a bug is very difficult to reproduce; main functionality works as it should, but there are minor issues with some rarely used functions). Generally, testers use this tool.

Bug Priority, in turn, is a tool for outlining the hierarchy of bug fixes. Project managers usually set a priority. Bug Priority is ranked along the same scale as bug severity, from critical to low.

In short, if key features don’t work, then a bug is ranked as ‘critical’ for both priority and severity. But when a non-working feature is rarely used, we assign a critical level of Severity (this bug concerns functionality) and low level of Priority. Below you will find a real-life example.

Example:

“Wrong spelling in the H1 heading 'Thes is our website!' on the landing page.”

This bug gets Low Severity because it doesn't influence functionality. Users are still able to do something on this page. But we should assign High Priority to this bug, because this is a heading – the first thing a user will see when coming to your website. And there shouldn't be any spelling mistakes.

In reality, our testers initially specify the Priority in JIRA. They should then inform web developers and project managers about a bug and its priority and/or severity. Then the project manager may contact the client and tell them what happened. The client then decides whether this issue must be resolved as soon as possible or if it can wait. The client's opinion may be different from what a tester thinks, so these priorities may easily be changed.

Bug Description

Testers should provide developers with Steps to Reproduce and Results in this part of the bug report.

Steps to Reproduce

This part of a bug report is dedicated to a description of how the bug occurs. The more informative testers are, the better. Steps to Produce include:

  • The description of where in an application an action was taken. Testers should mention a browser, its version, and the system state: a user type, user state, system initial data, and the page where a user was.
  • Actions – what a tester does to produce a bug.
  • Actual results and Expected results.

An actual result is what happens when a tester reproduces a bug. Ask your QA team to provide a screenshot of the actual result for comparison with what was expected. An expected result is what we predicted as normal functionality under the given conditions.

In the next table, you will see a comparison of poorly-written Steps to Reproduce with well-written Steps to Reproduce.

Bad Steps to Reproduce Good Steps to Reproduce

1. Open the site http://www.hersheys.com

1. It was tested in Chrome 47 and Mozilla Firefox 38.

2. Log in.

2. Works only in Mozilla Firefox 38.

3. Exit your profile.

3. Go to https://www.hersheys.com/recipes/en_US/products/baking-pieces.html (sign in if it is necessary).

4. Go to “Products.”

4. Click “Reese’s Mini Pieces.”

5. Choose “Baking Pieces.”

5. Actual Result: The chosen item is deleted from the list.

6. Expected Result: The page with the detailed description of Reese’s Mini Pieces should be opened.

Attachments to the bug report

This is the last section of the bug report. If necessary, a tester may attach any relevant additional documentation. The goal is to gather as much documentation as possible. Attachments generally include: screenshots, a log.txt file, or a file that a tester was trying to import.

We just described how QA engineers at RubyGarage organize and report bugs. Some details may vary depending on the bug tracking software, but following these guidelines should help you produce well-written bug reports.

CONTENTS

Authors:

Sviatoslav A.

Sviatoslav A.

Copywriter

Elena K.

Elena K.

Head of Quality Assurance office

Rate this article!

Nay
So-so
Not bad
Good
Wow
47 rating, average 4.53 out of 5

Share article with

Comments (0)

There are no comments yet

Leave a comment

Subscribe via email and know it all first!