World’s largest virtual agentic engineering & quality conference
Master the bug life cycle stage by stage. Learn severity vs priority, P1-P3 classification, bug report templates, and how cloud testing shortens fix time.

Nazneen Ahmad
Author

Harish Rajora
Reviewer
Published on: September 26, 2025
Last Updated on: August 6, 2026
On This Page
The bug life cycle in software testing is the path a defect takes from log to close. Each state has one owner and one next step. Without that structure, bugs sit in the backlog until a customer hits them in production.
TL;DR
The bug life cycle, also called the defect life cycle, is the workflow a defect follows from discovery to closure, moving through nine main stages from New to Closed. QA teams use this structured path so every logged issue has a clear owner and is verified before it is resolved.
A bug is software behaving in a way it was not designed to, caused by anything from a misread requirement to a missing line of code. QA teams also call bugs "defects", and this guide uses the terms interchangeably.
Bugs can enter at any point in the Software Development Life Cycle, and dynamic testing only catches the ones that fail at runtime.
The bug life cycle, also called the defect life cycle, is the workflow a defect follows from discovery to closure. It starts the moment a tester logs the issue and ends only when a verifier confirms the fix and the defect cannot reproduce. Each state has a specific owner, a defined entry condition, and a defined exit condition, which is what makes the cycle auditable.

The bug life cycle is the workflow one defect moves through. The bug tracking life cycle is the tooling pipeline that runs that workflow across every defect. The bug report life cycle is the ticket itself as a record. Three different scopes, three different owners.
The 9 stages are New, Assigned, Open, Fixed, Pending Retest, Retest, Reopened, Verified, and Closed. Seven additional states (Rejected, Duplicate, Deferred, Not a Bug, Non-Reproducible, Cannot Be Fixed, Need More Information) handle defects that leave the happy path.
Tool conventions vary. Jira calls "Open" "In Progress", and some teams collapse Pending Retest into Retest, but the workflow logic is the same. The lifecycle of a testing bug walks the same path in a shorter, example-led format.
Some teams describe the bug life cycle in phases, others in stages; the terms are used interchangeably. A common grouping bundles the 9 stages into 3 phases:

Phases are useful for high-level reporting ("how many bugs are in the resolution phase this sprint?"); stages are what the tracker actually transitions through.
The first state in the cycle. The tester finds an issue during software testing, captures reproduction steps, environment details, and severity, and logs the report. New means "discovered and documented, but no developer has looked at it yet."
The test lead or triage committee approves the report and assigns it to a developer or development team. The bug now has a named owner and a target sprint.
The developer accepts the bug, reproduces it locally, and begins root-cause analysis. If during this stage the developer determines the report is invalid, a duplicate, or not worth fixing now, the bug moves to one of the alternate states (Rejected, Duplicate, Deferred) instead of progressing.
The developer has changed the code, run unit tests, and pushed the fix to a build the tester can validate. Fixed is a developer-side state; the QA team has not yet confirmed the resolution.
The fix is ready but the tester has not yet started validating it. Common reason: the build is queued behind other regression work. Tracking this state separately is useful because it surfaces fixes that are stuck waiting on test capacity, not on code.
The tester runs the original reproduction steps against the new build. The job is twofold: confirm the original bug no longer reproduces, and confirm the fix did not break adjacent functionality. Retesting and regression testing are different passes and should both run before close.
During Retest the tester finds the bug still reproduces, or a new bug surfaced because of the fix. The bug returns to Open and the cycle repeats. Repeated Reopens for the same bug are a strong signal that the root cause is not yet understood; consider a code review with senior engineers before the next attempt.
Retest passed. The tester confirms the bug is resolved on the target build and the regression check is clean. For a defect that first surfaced in a specific browser, that confirmation should cover every affected browser, not only the one the fix was coded in, which is where confirmation testing across browsers comes in.
The release or project manager marks the bug Closed once it has shipped in a release or is confirmed resolved in production. Closed is the only terminal state for a successful fix; it locks the audit trail and removes the bug from the active queue.
Defects do not always follow the happy path. Seven additional states handle the edge cases:
The cycle is owned by two main roles, the tester and the developer, but a healthy workflow names four to six participants so handoffs are unambiguous:
In larger organizations, a Department Head or CTO joins the triage call for P1 defects that touch compliance, security, or customer-impact thresholds. The principle stays the same: every state transition has a named owner, and the tool enforces the handoff. Defect management and bug triaging guides cover the responsibilities in more depth.
A defect changes owner five times on its way to Closed. The tester owns New, Retest, and Verified. Triage owns Assigned. The developer owns Open and Fixed. The release manager owns the build promotion, and the project manager owns closure. Every transition is a handoff between two named people.
Trace one concrete defect through all nine stages: "Checkout button unresponsive on iOS Safari." The owner column is the part most teams leave undefined.
| Stage | Owner | What happens to the checkout bug |
|---|---|---|
| 1. New | QA Engineer | Tester finds the button does nothing on iOS Safari, logs it with a session video and console error. |
| 2. Assigned | Dev Lead | Triage sets it S1/P1 (blocks purchases) and assigns it to a front-end developer. |
| 3. Open | Developer | Developer reproduces it and traces it to a touch-event handler that fails on WebKit. |
| 4. Fixed | Developer | Handler is patched, unit tests pass, and the bug is moved to Fixed with the commit linked. |
| 5. Pending Retest | Release Manager | The fix is promoted to the QA build, and the bug waits for a tester to verify it. |
| 6. Retest | QA Engineer | Tester re-runs the checkout flow on real iOS Safari and confirms the button now responds. |
| 7. Verified | QA Engineer | Behavior matches the expected result across the affected devices, so the bug is marked Verified. |
| 8. Reopened (if needed) | QA Engineer | If the button broke again on an older iOS version, the tester would Reopen and send it back to Assigned. |
| 9. Closed | Project Manager | With the fix verified and no regression, the ticket is Closed and folded into the regression suite. |
The single hardest transition here is stage 3: reproducing an iOS-Safari-only bug on a developer machine. Running the checkout flow on real iOS devices removes that friction, which is exactly why teams verify browser-specific defects on a real device cloud rather than a simulator.
Status is where the bug sits in the life cycle. Severity measures how badly the defect breaks the application, and the tester sets it at log time. Priority measures how urgently it must be fixed, and triage sets it. Severity and priority are independent scales that frequently disagree.
A login outage on production is High severity and P1 priority. A typo in a footer is Low severity but can still be P1 priority if it is the company name on the homepage.
| Label | What it measures | Who decides | Typical values |
|---|---|---|---|
| Status | Position in the life cycle workflow | Tracking tool transitions | New, Assigned, Open, Fixed, Retest, Verified, Closed |
| Severity | Functional impact on the user or system | QA or test lead | Critical (S1), Major (S2), Minor (S3), Cosmetic (S4) |
| Priority | Urgency to fix relative to release schedule | Product owner or triage committee | P1 (immediate), P2 (next sprint), P3 (backlog) |
The two scales decouple because the business impact of a defect is not always proportional to its technical impact. A crash that affects 0.1% of users may be S1 severity but only P2 priority because the fix carries high regression risk. Triage assigns priority; the tester assigns severity at log time.
Some teams add P0 (production-down, all-hands incident) above P1. Whichever scheme you use, the rule is to write the definitions into the team's testing charter so every triager applies them the same way.
Because severity and priority are independent scales, every bug lands in one of four quadrants. Each quadrant has a distinct real-world signature:
| Combination | Meaning | Real-world example |
|---|---|---|
| High Severity + High Priority | Critical failure users hit right now; fix immediately. | Payment gateway fails at checkout for all users. |
| High Severity + Low Priority | Serious break, but in a rarely used path; schedule the fix. | App crashes on a legacy OS version used by a tiny fraction of users. |
| Low Severity + High Priority | Minor technically, but highly visible; fix fast. | Company name misspelled in the homepage header. |
| Low Severity + Low Priority | Cosmetic and non-urgent; backlog it. | Slight padding misalignment on a settings page rarely visited. |
The two diagonal cases, where severity and priority disagree, are the ones that trip up new testers. Anchoring each bug to a quadrant during triage keeps those judgment calls consistent.
The six recurring failures are stalled handoffs at Pending Retest, inconsistent priority labels, workflow rigidity, flaky tests flooding the New queue, no visibility into status trends, and environment mismatches that trap bugs between Non-Reproducible and Need More Information.
Document every state with an owner and entry-exit condition, reject reports missing reproduction steps before Assigned, attach session artifacts at log time, run regression inside Retest rather than after Verified, review bugs older than 30 days monthly, and link the catching test case to the ticket.
A bug is critical when it blocks a core user action, loses or corrupts data, exposes a compliance or security gap, breaks the revenue path, regresses across multiple customers, or blocks a fixed deadline. Reproducibility decides how fast it can be triaged as critical.
Not every bug deserves a P1 ticket and an all-hands page. The criteria below are in rough order of weight.
Document these criteria in the team's testing charter and review them every quarter. Without a written bar, "critical" drifts to mean whatever the loudest stakeholder says it means, and the bug life cycle loses its prioritization signal.
Three practices drive most of the gains: define bug categories so triage routes automatically and metrics aggregate cleanly, log a root cause on every closed P1 to build a pattern library, and run the regression suite on every pull request so defects are caught before they reach the New state.
The other half of continuous improvement is the tooling you run the cycle on. The right tracker enforces the workflow, surfaces aging bugs, and integrates with the test runner so logging a defect takes a single click.
Jira is the default for agile and enterprise teams that need custom workflows. Bugzilla and MantisBT suit self-hosted open-source projects, GitHub Issues suits dev-led teams that want tickets next to code, Redmine adds planning, and Zoho BugTracker fits small teams already inside the Zoho suite.
| Tool | Best for | Notable strength |
|---|---|---|
| Jira | Agile teams, enterprise workflows | Custom workflows per project; deep integrations with CI/CD and source control |
| Bugzilla | Open-source projects, self-hosting | Free, mature, configurable email notifications and dependency tracking |
| Zoho BugTracker | Small to mid teams using Zoho suite | Custom fields, built-in analytics, low-friction setup |
| GitHub Issues | Open-source and dev-led teams | Tight code linkage, free for public repos, low overhead |
| MantisBT | Teams wanting a lightweight self-hosted tracker | Simple UI, free and open-source, easy email and RSS notifications |
| Redmine | Project-driven teams needing issues plus planning | Combines bug tracking with Gantt charts, wikis, and time tracking |
Whichever tracker you pick, the test runner should push bug context into it automatically, which is what the tracker integrations are for. Manual copy-paste of session details is where bug-handling time leaks. The test tool guide goes deeper on tracker selection criteria, and defect tracking covers how the queue is managed once tickets land.
Jira's default workflow carries fewer statuses than the 9-stage model, so teams map the canonical stages onto custom Bug statuses: New becomes To Do, Assigned becomes Selected for Development, Open becomes In Progress, Fixed and Pending Retest become In Review, Retest becomes QA Testing, and Verified and Closed become Done.
This is the same customization approach Jira test management uses to model test cases.
| Canonical stage | Jira status | Transition trigger |
|---|---|---|
| New | To Do | Tester creates issue with Bug type |
| Assigned | Selected for Development | Triage sets Assignee and Priority |
| Open | In Progress | Developer starts the fix |
| Fixed / Pending Retest | In Review | Pull request linked, awaiting QA |
| Retest | QA Testing | Tester picks up the build |
| Reopened | Reopened | Retest failed, routes back to In Progress |
| Verified / Closed | Done | QA verifies + release manager closes |
Two Jira features make this workflow run cleanly:
status = "In Review" AND updated < -3d AND priority in (P1, P2) surfaces bugs waiting on QA for more than 3 days, which is the most common stall point.Pair the Jira workflow with cloud test sessions and the bug ticket arrives pre-filled with reproduction video, console logs, network HAR, and device metadata. The bug-tracking integrations docs walk through the one-click setup for Jira specifically.
The states are identical to automation. What changes is the evidence trail: there is no auto-generated session video, no console dump, and no network HAR unless the tester captures them deliberately. That puts the whole burden of reproducibility on the written report.
Two stages carry different obligations than they do in automation, capture and retest:
The biggest manual-testing failure mode is the Reopened-Closed-Reopened thrash: a bug is fixed, retested as Verified on an emulator, closed in the build, then a customer hits it on a real device. Running manual exploratory sessions on a real device cloud avoids the emulator-vs-real-device gap and pairs each manual session with capture artifacts automatically, so the manual report carries the same evidence quality as an automation run.
The 9 stages are unchanged, but three mobile-specific factors push fix-time up: OS and device fragmentation means a bug is version-specific, the crash log replaces the browser console as the primary artifact, and store-review rejections carry an hours-long SLA that skips normal triage.
Two stages need extra attention for mobile apps:
TestMu AI runs Appium, Espresso, and XCUITest suites on 10,000+ real iOS and Android devices in the cloud, automatically capturing crash logs, device logs, video, and network traffic for every session. Bugs logged from these sessions arrive in Jira or your tracker of choice with all the artifacts a mobile developer needs to reproduce on the first attempt, which eliminates most Non-Reproducible bounces.
You track them as scored evaluation runs, not single tickets. An AI agent returns a different answer to the same input on every run, so Non-Reproducible stops being a rejection reason and becomes the normal condition. Each failure carries a quality metric, a risk level, and a confidence score instead of a binary status.
Three assumptions in the 9-stage model break the moment the system under test is a chatbot, a voice assistant, or an autonomous agent:
| Classic stage | AI agent equivalent | What changes |
|---|---|---|
| New | Failing scenario in an evaluation run | The unit of work is a scenario across many turns, not a single click path. |
| Severity | Risk level (Critical, High, Medium, Low) | Critical covers PII exposure and fabricated disclosures; Low covers tone drift. |
| Non-Reproducible | Confidence level (High, Medium, Low) | Instead of rejecting the report, you record how reliably it recurs across scenario volume. |
| Retest | Re-run the scenario set after the prompt or model change | Verification is statistical across a scenario set, not a single pass or fail. |
| Verified / Closed | Green, Yellow, or Red readiness verdict | Yellow means specific identified fixes are required, not "almost ready". |
| Regression suite | Scheduled re-scoring of production transcripts | Drift is caught on a schedule because the model changes without your deploy. |
Conventional observability watches latency, error codes, and throughput, all of which stay green while an agent invents a policy. Agent observability scores the content of the conversation. TestMu AI's Agent Testing platform grades chat and voice agents on nine quality dimensions: hallucination detection, bias detection, completeness, context awareness, response quality, conversation flow, tone consistency, positive user outcome, and root-cause understanding. Phone agents add 30+ call metrics including first call resolution, containment rate, and intent recognition accuracy.
Rather than one reviewer reading transcripts, 15+ specialized evaluator agents run the scenarios in parallel, each probing one failure mode. A Hallucination Hunter looks for invented facts, a Bias Detector looks for differential treatment across demographics, and a Security Researcher probes for prompt injection and data exfiltration. Every verdict ships with the conversation turn that produced it, which is the evidence a triage call needs to assign a risk level.
The security half of this maps to a published standard. The OWASP 2025 Top 10 Risk and Mitigations for LLMs and Gen AI Apps ranks Prompt Injection as LLM01:2025 and Sensitive Information Disclosure as LLM02:2025, which is what a red-team pass over prompt injection, jailbreak, data exfiltration, and PII leakage is testing for. Misinformation sits separately at LLM09:2025 and is caught by the hallucination metric rather than by red teaming. For the governance wrapper around all of it, the NIST AI Risk Management Framework (AI RMF 1.0), released in January 2023, organizes the work into its Govern, Map, Measure, and Manage functions.
The practical equivalent of "no P1 bugs open at release" is a CI gate that fails the build when a quality metric drops below threshold. The testmu-a2a-cli package runs an evaluation from any pipeline and exits non-zero on failure, so the gate wires into an existing job without a plugin:
pip install testmu-a2a-cli
# Fail the build if the agent drops below the 0.80 quality threshold
testmu-a2a test \
--agent https://my-bot.example.com/api/chat \
--spec "Customer support bot that handles billing and account issues" \
--count 30 \
--threshold 0.80 \
--format junit \
--output results.xml
# Red-team the same endpoint against OWASP LLM01 and LLM02
testmu-a2a redteam \
--agent https://my-bot.example.com/api/chat \
--categories prompt-injection,jailbreak,pii-leakageGate on the exit code the way you gate on a failing regression suite: a full evaluation on any agent prompt or model change, a reduced scenario count on infrastructure-only changes. Because the JUnit output is standard, the failures surface in the same CI report as the rest of the suite, and a Green to Yellow verdict change can page the on-call the same way a P1 does.
Note: Evaluate a chatbot, voice, or phone agent against hallucination, bias, and context-awareness metrics before it reaches production. Try TestMu AI free!
Run the test on a cloud grid that records the session, then log the bug from inside that session. The ticket arrives carrying video, console output, network traffic, and device metadata, so the developer never has to ask for the environment. This is what collapses the Non-Reproducible and Need More Information states.
TestMu AI runs manual and automation testing of websites and mobile apps on 10,000+ real devices across every major OS and browser combination. Four capabilities attack the stages where defects actually lose time:
Test Insights also flags chronically failing tests by failure frequency, which is how the flaky runs stop entering the New queue as if they were real defects. To wire one-click logging into automation runs, see the Mark as Bug in Automation Testing doc.
Assign a named person to every state, write the P1 to P3 definitions into the team charter, wire the tracker so reports arrive with evidence already attached, and set the metric thresholds that block an AI agent release. Those four changes fix the stalls described above.
Open your tracker and audit these four this week:
When every state has a name, an owner, and an SLA, bugs stop leaking into production. To close the loop between the test that caught the defect and the ticket that tracks it, TestMu AI's Test Manager keeps cases, cycles, and requirement-to-defect traceability in one workspace, so a Verified bug links back to the case that will catch its regression. For the batch of defects a release-time team hunt produces, and how to triage them before everyone leaves the room, see how to run a bug bash.
Author
Nazneen Ahmad is a freelance Technical Content SEO Writer with over 6 years of experience in crafting high ranking content on software testing, web development, and medical case studies. She has written 60+ technical blogs, including 50+ top-ranking articles focused on software testing and web development. Certified in Automation Basic and Advanced Training - XO 10, she blends subject knowledge with SEO strategies to create user focused, authoritative content. Over time, she has shifted from quick, keyword-heavy drafts to producing content that prioritizes user intent, readability, and topical authority to deliver lasting value.
Reviewer
Harish Rajora is a Software Developer 2 at Oracle India with over 6 years of hands-on experience in Python and cross-platform application development across Windows, macOS, and Linux. He has authored 800 + technical articles published across reputed platforms. He has also worked on several large-scale projects, including GenAI applications, and contributed to core engineering teams responsible for designing and implementing features used by millions. Harish has worked extensively with Django, shell scripting, and has led DevOps initiatives, building CI/CD pipelines using Jenkins, AWS, GitLab, and GitHub. He has completed his post-graduation with an M.Tech in Software Engineering from the Indian Institute of Information Technology (IIIT) Allahabad. Over the years, he has emphasized the importance of planning, documentation, ER diagrams, and system design to write clean, scalable, and maintainable code beyond just implementation.
Did you find this page helpful?
More Related Blogs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance