Skip to content
QA Workflow Assistant

Blog

Requirements Traceability with Jira and Xray: From Stories to Evidence

How to achieve RTM-style requirements traceability using Jira stories and Xray Tests—coverage reports, criterion IDs, build evidence, forward/backward links, and a worked example.

QA Workflow Assistant12 min read
  • xray
  • jira
  • traceability
  • rtm
  • qa

Requirements traceability answers one question with receipts: for this requirement, which tests cover it, and what happened on the build you shipped? In a Jira shop, the durable way to answer that is not a lonely spreadsheet—it is Jira stories and epics as requirements, Xray Tests linked to those issues, and Test Executions that carry build and environment. That combination produces RTM-style evidence you can regenerate instead of hand-maintaining.

This guide shows how to implement requirements traceability jira xray workflows in practice. It pairs with the conceptual requirements traceability matrix article and the broader Jira test management guide. Tooling companions: Xray tutorial, Xray Test Sets, Xray Test Execution, Xray best practices, and the positioning piece Jira vs Xray. Case-writing inputs that make traceability cheap: acceptance criteria examples and how to write QA test cases.

What “good” traceability looks like in Jira + Xray

At minimum you need a chain:

  1. Requirement — epic, story, or dedicated requirement issue (for example `PROJ-884`)
  2. Acceptance criteria — numbered inside the story (AC-1, AC-2)
  3. Xray Test — reusable case linked to the requirement (for example `CHK-101`)
  4. Test Execution — dated run with status per Test on a named build
  5. Defect — optional link when status is Fail (for example `BUG-2291`)

If any link is missing, you have folklore. If all links exist, coverage reports and filters become your living RTM.

Forward vs backward

DirectionQuestionXray/Jira mechanism
ForwardIs every requirement covered?Coverage report / requirements ↔ Tests
BackwardWhy does this Test exist?Test’s linked stories/epics
BidirectionalBothLinks maintained both ways by design

Backward links stop orphan Tests. Forward links stop untested criteria. Auditors usually want both; agile teams need both to keep suites honest.

Criterion-level IDs: the habit that prevents false coverage

Story-level linking alone lies. A story with five acceptance criteria and two Tests often shows as “covered” when three criteria were never touched.

Practical convention

Inside each story, number criteria:

AC-1: Valid code reduces order total after tax
AC-2: Expired code is rejected with a recoverable message
AC-3: Only one code applies per order

Put AC-1 (or `PROJ-884/AC-1`) in the Test description, a custom field, or a structured label your reports can filter. Patterns for writing criteria that survive tracing are in acceptance criteria examples.

Why this matters for regulated and agile teams alike

Regulated teams need criterion-level evidence for audits. Agile teams need it so “story Done” does not hide untested rules. Same habit, different audience.

Linking model: stories, epics, and Tests

Prefer stories as the primary requirement node

Epics are useful rollups, but day-to-day coverage should attach to stories (or finer requirement issues). Epic-only linking creates giant blobs where gaps hide.

When creating or editing an Xray Test, link it to the Jira story it verifies. Avoid relying on “we mentioned `PROJ-884` in a comment once.” Comments are not coverage.

One Test, multiple requirements—use sparingly

Shared platform behavior can map to several stories. List all of them. If a Test claims six stories, suspect a mega-test and split—see Xray best practices.

Coverage reports as the living RTM

Xray coverage views replace the spreadsheet refresh ritual when links and Executions are healthy.

What to read in a coverage report

SignalInterpretationAction
Requirement with 0 TestsUntestedWrite or link cases
Tests with no recent ExecutionPaper coverageSchedule a run
Fail on P0/P1Release riskDefect + retest gate
Only positive TestsLopsided designAdd negatives/edges
Pass without build fieldWeak evidenceFix Execution hygiene

Treat “not covered” as a first-class row in any export you still keep for auditors. Omitting gaps makes the matrix look healthier than reality—the classic RTM failure mode described in the requirements traceability matrix guide.

Build-level evidence

A Pass that is not tied to a build is a rumor. Every Test Execution should record:

  • Build or version (2026.08.3, image tag, or commit SHA)
  • Environment (staging, preprod)
  • Scope (which Set or filter)

Create a new Execution per meaningful run. Overwriting last week’s statuses destroys the historical half of traceability. Logistics: Xray Test Execution.

Evidence attachments on Fail

Link `BUG-2291`, screenshots, logs. Traceability is not only “which Test”—it is “what broke and where is the proof.”

Regulated vs agile: same spine, different ceremony

ConcernAgile product teamRegulated / audit-heavy
Requirement sourceJira storiesStories + controlled requirement IDs
Criterion IDsStrongly recommendedMandatory
Execution retentionRecent releasesPolicy-defined retention
Export formatDashboard + filtersFormal RTM export per release
Sign-offSquad recommendationNamed approver + evidence pack
Non-functional reqsOften informalExplicit rows with Tests

Agile teams should not wait for an auditor to invent criterion IDs. The cost of adding AC-n while writing the story is near zero; the cost of reconstructing them after a incident is not.

Worked example: checkout discount codes

Story `PROJ-884` sits under epic `PROJ-800` (Checkout resilience). Criteria AC-1..AC-3 as above. Related invoice story `PROJ-885`.

Traceability table (RTM view)

Req IDACSummaryTest IDsTypePriExecutionStatusBuildDefect
PROJ-884AC-1Valid code reduces total after taxCHK-101PositiveP1TEX-2026-08-3-CHKPass2026.08.3
PROJ-884AC-1Valid code reduces total after taxCHK-102EdgeP2TEX-2026-08-3-CHKPass2026.08.3
PROJ-884AC-2Expired code rejected recoverablyCHK-110NegativeP1TEX-2026-08-3-CHKFail2026.08.3BUG-2291
PROJ-884AC-2Expired code rejected recoverablyCHK-111NegativeP2TEX-2026-08-3-CHKPass2026.08.3
PROJ-884AC-3Only one code per orderCHK-120NegativeP1TEX-2026-08-3-CHKBlocked2026.08.3BUG-2288
PROJ-884AC-3Only one code per orderNot covered
PROJ-885AC-1Discount as separate invoice lineINV-044PositiveP2TEX-2026-08-3-INVPass2026.08.3

How to read it in five minutes

  • AC-2 is not Done: P1 Fail with `BUG-2291`.
  • AC-3 is dangerous: Blocked plus an explicit not-covered row.
  • `PROJ-885` is only positively covered—refund interaction still missing.

In Xray, the same facts should be reachable without the spreadsheet: open `PROJ-884`, inspect linked Tests, open Execution TEX-2026-08-3-CHK, filter Fail/Blocked.

Set composition for this feature

  • SET-CHECKOUT-DISCOUNT — feature Tests for the story
  • Promote `CHK-101` and `CHK-110` into SET-REGRESSION-CORE after they prove durable
  • Smoke stays thin—do not dump every edge into smoke

Set design details: Xray Test Sets. Regression promotion: regression test cases.

Building the chain step by step

1. Write atomic acceptance criteria

One criterion, one falsifiable behavior. Vague criteria produce vague Tests. Use acceptance criteria examples.

2. Choose coverage depth

Match Basic / Standard / Deep to risk—payments and auth skew Deep. Framework: Basic, Standard, or Deep coverage.

3. Author Tests with trace fields

Titles, steps, expected results, priority (test case priority), and requirement/AC references. Craft guide: how to write QA test cases.

Link to `PROJ-884`, add to the feature Set, avoid release mega-Sets (Xray best practices).

5. Execute on a named build

Create Execution, set build/env, record honest statuses (Xray Test Execution).

6. Publish risk, not only percentages

Stakeholder summary: Fail/Blocked on P0/P1, uncovered ACs, deferred TODOs.

7. Regenerate the matrix when asked

Export or screenshot coverage for the release tag. Do not maintain a parallel forever-spreadsheet unless regulation forces a signed artifact—and even then, generate it from Xray.

Common gaps (and how they show up)

GapSymptomFix
Story-level only linking“Covered” with untested ACsCriterion IDs on Tests
Tests without ExecutionsGreen coverage, no evidenceRequire Execution before Done
Missing build on ExecutionUnusable audit trailMandatory build field
Orphan TestsSuite bloatBlock create without requirement link
Mega-testsOpaque FailuresSplit to one behavior
Pass used for “skipped”Fake readinessKeep TODO + report gap
Confluence duplicate RTMDrift within a sprintSingle source: Jira/Xray links
No negativesHappy-path false confidenceDesign negatives per AC

If you are still deciding whether you need Xray for this chain, read Jira vs Xray. Light Jira-only checklists can carry early teams; they rarely survive audit or multi-squad regression without becoming a shadow TM tool.

Gap deep-dive: “covered” that is not executed

The most expensive false signal is a requirement with linked Tests that have never run on the candidate build. Coverage reports that only count links will look green. Always pair coverage with Execution filters for the release version. If your process allows “link equals Done,” you have replaced testing with filing.

Gap deep-dive: criterion drift after story edits

Product rewrites AC-2 in the story body but Tests still describe the old rule. Traceability then proves the wrong thing. Mitigate by requiring a Test review checkbox on story edits that touch ACs, and by storing the AC ID plus a short summary on the Test so mismatches are visible without opening Jira history.

Forward and backward review rituals

Before development Done

Forward check: every AC has at least one linked Test (or an explicit waiver). Waivers should be explicit issues or comments with an owner and expiry—not silent omissions. A missing row that everyone “knows about” is not traceability.

Before release

Execution check: P0/P1 Tests for in-scope requirements show Pass on the release build, or Fail with accepted defects. Export or snapshot the coverage view for the release tag so the evidence pack matches the bits you shipped, not last Tuesday’s staging run.

Monthly suite hygiene

Backward check: sample Tests and confirm their requirement links still exist and make sense after refactors. Delete or archive Tests whose stories were abandoned. Relink Tests when a story was split and the old key no longer represents the behavior.

These rituals take less time than rebuilding an RTM from memory after a production incident.

Sample release evidence checklist

  • Every in-scope story has numbered ACs
  • Every AC is linked to at least one Test or an explicit waiver
  • Test Execution names the release build and environment
  • Failures link defect keys
  • Unexecuted P0/P1 cases are listed in the release note
  • Coverage export (if required) is stored with the release folder

Keep the checklist short enough that people will run it. Long compliance theater documents get skipped; a half-page gate gets used.

Tooling assistance without breaking ownership

Drafting Tests from stories is faster when acceptance criteria are already numbered. Generate structured cases, review them, then push or create linked Xray Tests so traceability starts at authoring time rather than as archaeology. Setup and export flow: Docs. Plan limits for assisted generation: Pricing. The human still owns risk calls and release recommendations.

For end-to-end Jira QA operating models, return to the Jira test management guide. For hands-on Xray setup, use the Xray tutorial.

Conclusion

Requirements traceability with Jira and Xray is RTM thinking implemented as links and Executions: stories hold numbered criteria, Xray Tests link to those requirements, coverage reports expose gaps, and build-tagged Executions turn Pass/Fail into evidence. Keep criterion-level IDs, refuse story-only false coverage, and regenerate matrices from the tool instead of hand-maintaining a second truth. Done this way, traceability supports both agile speed and regulated proof without becoming a spreadsheet cult.

FAQ

Do we still need a spreadsheet RTM if we use Xray?

Usually no for day-to-day work. You may export a formal table per release for auditors. Keep Xray as the system of record so the export cannot drift.

Can epics replace stories for linking?

Epics are fine as rollups, but linking only at epic level hides story and criterion gaps. Prefer story (or dedicated requirement) links.

How granular should criterion IDs be?

One ID per independently verifiable rule. If two rules can fail independently, they need separate IDs and usually separate Tests.

What if a requirement changes mid-sprint?

Version the criterion text, mark linked Tests for review, and keep prior Execution history intact. Traceability includes change history, not only the latest happy path.

How do non-functional requirements fit?

Create explicit criteria for performance, accessibility, and security, and link Tests the same way. They are often the first “not covered” rows—exactly why they belong in the matrix.

Is Jira alone enough for traceability?

For tiny teams, a careful checklist can approximate it. For reusable evidence across builds and squads, Jira + Xray (or equivalent TM) is the realistic path—see Jira vs Xray.

Improve your QA workflow faster

QA Workflow Assistant helps QA engineers generate structured test cases from Jira stories, improve coverage, and organize testing workflows.

→ Try QA Workflow Assistant

Stay ahead in QA

Get practical QA guides, Jira & Xray tutorials, testing checklists, AI testing insights, and occasional product updates.

No spam. Unsubscribe anytime.