ESEspañol
QA · Bug Reporting Methodology

Reporting bugs is an act of design

A good bug report does more than describe a problem: it saves the team hours, speeds up the fix, and removes ambiguity. This is the structure I use so every case is clear the first time.

Scroll

Reporting principles

Before touching the keyboard, these are the rules that define the how and why of every report.

🎯

100% reproducible

If it cannot be reproduced, it is not a bug, it is an observation. Every step is numbered and verifiable.

🔍

Context, not opinions

Observed vs. expected behavior is described. Business decides the impact rating.

📎

Visible evidence

Screenshots, recordings, and attachments. A good report is understood without opening a side ticket.

Clear criteria

The fix does not end when it 'seems to work': it ends when the acceptance criteria are met.

How a report is built

Five sequential steps I follow from detecting the case until it is ready for handover.

01 / DETECT

Identify

I detect the case during exploratory or regression testing. I note the exact flow.

02 / REPRODUCE

Validate

I reproduce the bug in at least 2 cycles. I confirm it is not a flake (real intermittent).

03 / CAPTURE

Evidence

I take screenshots, record screen video, and export logs if the case requires it.

04 / DOCUMENT

Write

I write the report with the template: title, description, steps, expected, actual, criteria.

05 / REPORT

Deliver

I file the ticket with the correct priority, assign the module, and notify the owner.

How I document a bug

Every report follows the same internal structure (A→G). Apps change, the method does not.

ATitle
BDescription
CSteps
DExpected
EActual
FEvidence
GCriteria
BUG-2025-0142 · Module: Invoicing · Status: Reported
"Don't show this message again" does not persist after logging out
● Functional bug● Medium priority● Android / iOS
Description

Inside the Scan Invoice flow, an info screen is shown before allowing the user to continue scanning. When selecting "Don't show this message again", the system stops showing the alert while the user keeps the session active. However, if the user logs out and logs back in, the alert is shown again. This behavior indicates the preference is not being saved persistently.

Steps to reproduce
  1. Log in to the app with a valid user.
  2. Go to the Scan Invoice flow.
  3. On the info screen, tick "Don't show this message again".
  4. Continue the flow and verify the message is not shown again during the active session.
  5. Log out.
  6. Log in again with the same user.
  7. Go back to the Scan Invoice flow.
  8. Observe that the info screen is shown again.
Expected vs. actual result
✓ Expected

The preference is saved persistently. The info screen does not reappear, even after logging out and back in.

✕ Actual

The option only works inside the active session. On re-login, the message reappears.

Acceptance criteria
  • The "Don't show this message again" preference must be saved persistently.
  • The info screen must not reappear after logging out and back in.
  • The preference must remain associated with the corresponding user.
  • If another user logs in on the same device, their own configuration must be respected.
  • The behavior must be validated on Android and iOS.
  • If the user does not tick the option, the info screen must continue to show per the defined behavior.
Evidence

Evidence: Scan Invoice flow. The marked area corresponds to the affected checkbox.

ATitle
BDescription
CSteps
DExpected
EActual
FEvidence
GCriteria
BUG-2025-0151 · Module: Invoicing · OCR · Status: Reported
OCR skips products without a catalog match
● Functional bug● High priority● Backoffice / Web
Description

When uploading an invoice, the system does not show all products visible in the document when they do not exist in the catalog. Several products are seen in the invoice, but in the processed detail only some appear in the Extracted Products table. Products without a match must also be listed, marked as No match, so the user can review or associate them manually.

Steps to reproduce
  1. Log in to the system with a valid user.
  2. Upload an invoice containing several products.
  3. Wait for the OCR to process the invoice.
  4. Access the invoice detail from the Backoffice.
  5. Compare the visible products in the image with the products in the Extracted Products table.
  6. Verify that some visible products do not appear in the table.
Expected vs. actual result
✓ Expected

Show all products read, even without a match, with No match status so the user can review them.

✕ Actual

Only some products are listed. The system skips visible products that have no catalog match.

Acceptance criteria
  • The OCR must show all products read from the invoice.
  • Products without a match must be shown with No match status.
  • The system must not skip visible products just because they have no match.
  • The user must be able to manually review the non-matching products.
  • The product count in the detail must match the ones detected by OCR.
  • The information must include name, quantity, price, and total when visible.
  • The behavior must apply to every processed invoice.
Evidence

Evidence: Backoffice · Invoice detail. The invoice contains 3 products · the table only lists 2.

1 / 2

How I cover a feature before it is developed

Requested feature: the dashboard banner must count pending invoices and recognized points.

⌖ App: Pulso⌖ Banner to test⌖ App: Pulso

Client request

Inside the dashboard banner (My Dashboard), all pending invoices must be counted, including those with and without recognized points.

  • Count invoices in pending status.
  • Sum recognized points of each pending invoice.
  • Do not count approved, rejected, cancelled, or processed invoices.
  • Show the counter in the format:

🧪 Test cases (20)

20 total15 15 happy path5 5 to confirm
IDScenarioScene / caseTest dataExpected resultCategory
CP-01Base countUser with no pending invoices0 pending invoicesThe banner is not shown or shows 0 pending invoices · 0 recognized pts, per defined design.Conteo base
CP-02Base countOne pending invoice with recognized points1 pending invoice with 20 ptsThe banner shows 1 invoice pending review · 20 recognized pts.Conteo base
CP-03Base countOne pending invoice without recognized points1 pending invoice with 0 ptsThe banner shows 1 invoice pending review · 0 recognized pts.Conteo base
CP-04Base countSeveral pending invoices with points2 pending invoices: 10 pts + 30 ptsThe banner shows 2 invoices pending review · 40 recognized pts.Conteo base
CP-05Base countSeveral pending invoices without points2 pending invoices: 0 pts + 0 ptsThe banner shows 2 invoices pending review · 0 recognized pts.Conteo base
CP-06Base countMixed pending invoices1 invoice with 40 pts + 1 invoice with 0 ptsThe banner shows 2 invoices pending review · 40 recognized pts.Conteo base
CP-07Base countMultiple mixed invoices5 pending: 10, 0, 20, 0, 30 ptsThe banner shows 5 invoices pending review · 60 recognized pts.Conteo base
CP-08StatesApproved invoices must not be counted1 pending + 2 approvedOnly the pending one is counted. The banner shows 1 pending invoice.Estados
CP-09StatesRejected invoices must not be counted1 pending + 2 rejectedOnly the pending one is counted. The banner shows 1 pending invoice.Estados
CP-10StatesInvoices in other non-pending statesApproved, rejected, cancelled, or processed invoicesThey must not affect either the count or the recognized points.Estados
CP-11Edge casePending invoice with null pointsPending with points = nullIt must be counted as a pending invoice and the points must be treated as 0.Edge case
CP-12Edge casePending invoice with decimal points, if applicable1 invoice with 10.5 ptsValidate whether the system allows decimals or must round.Edge case
CP-13Edge caseSingular/plural of the text1 pending invoiceIt must read 1 pending invoice, not 1 invoices pending.Edge case
CP-14SynchronizationUpdate after scanning an invoiceThe user scans a new pending invoiceThe counter increases immediately or after refresh, per expected behavior.Sincronización
CP-15SynchronizationUpdate after approvalA pending invoice becomes approvedThe pending counter decreases and the recognized points update.Sincronización
CP-16SynchronizationUpdate after rejectionA pending invoice becomes rejectedThe counter decreases and its points are no longer summed.Sincronización
CP-17Multi-pharmacyUser with several pharmaciesThe user changes the active pharmacyThe banner must show only the pending invoices of the selected pharmacy.Multi-farmacia
CP-18SynchronizationPull to refresh / refresh buttonData changes in backendThe banner must update the quantity and the points correctly.Sincronización
CP-19ErrorsData load errorBackend does not respondShow controlled state: loading, error, or keep last valid data, per design.Errores
CP-20ErrorsUser offlineApp offlineIt must not show incorrect data; it must handle the offline state correctly.Errores

Work Method · Bug Reporting & Test Scenarios

Portfolio document · QA & Bug Documentation