1
Test Scenario
High-level condition to be tested
Planning
A test scenario is a one-sentence statement of what needs to be validated, without specifying the exact steps. It answers "what" not "how." A single scenario can generate multiple test cases covering different data combinations or paths.
Example: "Verify that a user can complete KYC with a temporary SIN." This scenario spawns test cases for valid expiry, expired date, missing date, and consentToUseSIN=false.
2
Test Case
Step-by-step instructions to verify functionality
Planning
The atomic unit of testing. A test case contains: preconditions, exact input data, execution steps, expected result, and postconditions. A well-written test case is self-contained, reproducible, and unambiguous — another person should get the same result running it.
Example: TC-001: Given a user with pending agreements, when GET /v1/market-data/pending-agreements is called with a valid user JWT, then the response is 200 with hasPendingAgreements: true.
3
Test Suite
Group of test cases for a module
Planning
A logical grouping of related test cases, typically by feature, module, or regression scope. Suites allow selective execution (run only auth tests after an auth change), track pass/fail rates per area, and define the scope of each test cycle. In Cypress and Playwright, a spec file maps to a suite.
Tip: Structure suites by feature, not by test type. A "KYC suite" that covers smoke + regression + edge cases is more actionable than a flat "regression suite" mixing unrelated features.
4
Test Data
Input values used during testing
Planning
Test data includes all inputs, preconditions, and environment state needed to execute a test. Good test data is deterministic (same run, same result), isolated (doesn't depend on other tests), and covers valid, invalid, and boundary values. In fintech, test data must also comply with data privacy rules — synthetic data and SIN generators are essential.
Tip: Never share test users between automated tests running in parallel. Each test should own its data or reset state explicitly to avoid flakiness.
5
Test Plan
Strategy, scope, and schedule of testing
Planning
A living document that defines scope, objectives, approach, resources, environments, schedule, entry/exit criteria, and risk assessment for a testing effort. It is the contract between QA and stakeholders about what will and won't be tested — and the basis for all estimations. It should be updated as the project evolves.
Key sections: Scope (in/out), Test types to be performed, Environments (SIT/UAT/Pre-prod), Entry criteria (build deployed), Exit criteria (pass rate ≥ 95%, no Critical open), Risks and mitigations.
6
RTM
Mapping of requirements to test cases
Planning
Requirements Traceability Matrix: a document that links each requirement to the test cases that verify it, and tracks their execution status. It ensures full coverage (every requirement has at least one test), surfaces gaps, and provides audit evidence for compliance-driven projects. Critical for regulated industries like fintech.
Columns: Requirement ID → Requirement description → Test case IDs → Execution status → Pass/Fail. A missing test case for a requirement is a coverage gap — not a backlog item.
7
Functional Testing
Validates expected functionality
Test Types
Tests whether the system does what the requirements specify — "does it work?" regardless of how. Covers every business rule, user flow, and edge case. Functional testing is black-box by nature: the tester provides inputs and observes outputs without needing to know the internal implementation.
Example: Verify that submitting a tax residency form with a Brazilian TIN of exactly 11 characters returns 204. Verify that 10 characters returns 400 with a specific error message.
8
Non-Functional Testing
Checks performance, security, usability
Test Types
Tests how well the system performs its functions, not whether it performs them. Includes performance (response times under load), security (auth, injection, data exposure), accessibility (screen readers, WCAG compliance), usability (UI clarity), and reliability (uptime, error recovery). Often skipped under pressure — and the source of production incidents.
Examples: Load test: P95 response < 2s under 100 concurrent users. Security: JWT with expired scope returns 401, not 200. A11y: all form fields have associated labels readable by axe-core.
9
Exploratory Testing
Learning + testing without scripts
Test Types
Simultaneous learning, test design, and execution where the tester's knowledge and intuition guide what to test next — no predefined scripts. Most effective for finding issues that scripted tests miss: edge cases not in requirements, unexpected UI interactions, and integration gaps. Quality of results depends heavily on domain expertise.
Approach: Use charter-based sessions ("explore the tax residency flow for edge cases around dual citizenship, time-box 60 min"), log discoveries in real-time, and debrief to extract new test cases from findings.
10
Smoke Testing
Basic build verification
Test Types
A shallow, wide pass over the most critical functionality to confirm a new build is stable enough for further testing. If smoke tests fail, the build is rejected and returned to developers — there's no point running the full suite. Should be fully automated and run on every deployment, completing in minutes.
Rule of thumb: Smoke tests should cover the 20% of features that are used 80% of the time. Login, main navigation, and the primary user action are always candidates. Target: < 5 minutes total.
11
Sanity Testing
Quick checks for specific areas
Test Types
A focused, narrow check on a specific area after a bug fix or minor change, to verify the fix works and nothing immediately adjacent broke. Unlike smoke testing — which is broad and runs on every build — sanity testing is targeted and context-driven. It's often done manually by the QA who filed the bug.
Difference from regression: Sanity = "does this specific fix work?" Regression = "does the whole system still work?" Run sanity first; if it passes, proceed to regression. If it fails, reject immediately.
12
Regression Testing
Ensure new code doesn't break existing features
Test Types
Re-running previously passing tests after code changes to ensure no existing functionality was broken. This is the primary driver for test automation — manual regression is unsustainable as codebases grow. A well-maintained automated regression suite is the safety net for continuous delivery.
Risk-based approach: Not all tests need to run on every change. Map tests to code areas. A backend-only change to the tax service doesn't need UI regression on the personal info screen. Prioritize by change impact.
13
Retesting
Testing failed test cases after bug fix
Test Types
Executing a specific test case that previously failed, after the defect has been fixed, to confirm the fix resolves the issue. Retesting is narrowly scoped to the failing scenario — it is not regression testing. Once the retest passes, regression follows to check for side effects introduced by the fix.
Workflow: Bug filed → Dev fixes → QA retests the exact failing case → if pass, run regression on affected area → if regression passes, close the bug. Never close a bug based on developer word alone.
14
Defect Life Cycle
Bug journey from open to close
Defects
The sequence of states a defect passes through: New → Assigned → Open (being fixed) → Fixed → Retesting → Verified → Closed. Side paths include Rejected (not a bug), Deferred (won't fix now), and Duplicate. Each state transition has an owner, criteria, and a required action. Skipping steps is a process failure.
Common mistake: Closing bugs directly from "Fixed" without a Retesting step. The developer believes it's fixed; QA must verify independently before closing. Skipping this step inflates false-close rates.
15
Severity
Impact of a defect on the system
Defects
Measures the technical damage a defect causes to the system. Assigned by QA. Levels: Critical (system crash, data loss, security breach), Major (core feature broken, no workaround), Minor (feature works but degraded), Trivial (cosmetic, no functional impact). Severity is objective — it's about what broke, not who cares.
Classic mismatch: A typo on the landing page is Trivial severity but could be High priority if the CEO noticed it. A data calculation error in tax reporting is Critical severity but Low priority if the feature isn't live yet.
16
Priority
Urgency of fixing the defect
Defects
Measures business urgency — how quickly the defect must be fixed. Assigned by the product owner or business stakeholders, not QA. High priority bugs are fixed in the current sprint regardless of severity; Low priority may be deferred to a future release. Priority reflects business impact, deadlines, and stakeholder visibility.
Decision matrix: High Severity + High Priority = fix now, block release. High Severity + Low Priority = schedule soon, risk-accept for this release. Low Severity + High Priority = fast fix (cosmetic but visible to CEO). Low + Low = backlog.
17
BVA
Testing at input boundaries
Technique
Boundary Value Analysis: a black-box technique that tests input values at and around the edges of valid/invalid partitions. Most defects concentrate at boundaries — off-by-one errors in validation logic are extremely common. For a range, test: min-1, min, min+1, max-1, max, max+1.
Example: A TIN field accepts 5–50 characters. Test: 4 chars (invalid), 5 chars (valid), 6 chars (valid), 49 chars (valid), 50 chars (valid), 51 chars (invalid). Applied to responsive design: test viewport at 519px and 520px if the layout changes at 520px.
18
EP
Grouping inputs into valid/invalid sets
Technique
Equivalence Partitioning: divides all possible inputs into classes where every value in a class is expected to behave identically. You test one representative value per class instead of every possible input. This dramatically reduces test count while maintaining coverage. Always combined with BVA for complete technique coverage.
Example: For tax residency country selection — EP classes: Canada (special logic), USA (special logic), countries requiring TIN, countries not requiring TIN, countries with optional TIN. You don't need to test all 190+ countries — one from each class suffices.
19
UAT
End-user validation of requirements
Test Types
User Acceptance Testing: the final testing phase where real users or business representatives validate that the system meets business requirements and is fit for purpose. UAT success is typically the production go-live gate. It validates business value — not just technical correctness. QA enables UAT; users execute it.
QA's role in UAT: Prepare test environments, seed test accounts, write test scripts for business users, triage defects found during UAT, and track resolution. UAT findings that weren't caught in QA are a signal of a coverage gap.
20
QA
Process to prevent defects
Concepts
Quality Assurance is a proactive, process-oriented discipline focused on preventing defects before they occur. QA is not just testing — it includes process audits, definition of standards, code review participation, shift-left practices, and continuous improvement of the development pipeline. QA improves the conditions under which software is built.
Shift-left examples: Reviewing acceptance criteria before development starts, writing test cases from requirements (not after the build), catching design ambiguities in refinement sessions, adding linting and static analysis to CI before any QA manual step.
21
QC
Finding defects in the product
Concepts
Quality Control is a reactive, product-oriented activity focused on finding defects in an already-built artifact. Testing is a QC activity. The key distinction: QA prevents defects by improving processes; QC detects them by inspecting the product. In practice, QA teams do both — but the mental model matters for where energy is invested.
The difference in practice: Writing test cases from requirements (before the build) is QA. Executing those test cases against the build is QC. A team that only does QC is reactive and will always be downstream of quality problems.
22
Bug Leakage
Bugs missed in testing, found later
Defects
A defect that escaped the testing phase and was discovered in production — by the customer, a monitoring alert, or post-release QA. High leakage rates are a signal of inadequate coverage, poor test data, missing test types, or pressure to release without completing test cycles. Tracked as the Escape Rate metric.
Prevention: Root-cause every leaked bug — was the test case missing? Was it skipped due to time pressure? Was it a test data gap? The answer drives the remediation: add test cases, improve process, or fix test data strategy. Never just fix the bug and move on.
23
Bug Release
Known bugs released intentionally
Defects
A known defect intentionally shipped to production with explicit business sign-off — because the fix is too risky near a release, a workaround exists, or the business impact is acceptable. Requires formal documentation: who approved it, the workaround, the timeline for resolution, and the risk acceptance criteria.
Process: QA documents the defect and its risk → PO/PM formally accepts → release notes include the known issue → a follow-up ticket is created for the fix → production monitoring is heightened. "We'll fix it later" without documentation is negligence, not a bug release.
24
Automation Testing
Using tools to auto-execute tests
Automation
Using code and tools to execute tests automatically, reducing manual effort, increasing repeatability, and enabling fast CI feedback. Automation is not a replacement for manual testing — it's best suited for regression, smoke, and data-driven scenarios. Poorly designed automation is worse than none: it creates false confidence and high maintenance cost.
Automate when: the test is run frequently, the steps are deterministic, the area is stable (no UI churn), and failure has high impact. Don't automate: one-off exploratory sessions, UI that changes every sprint, or tests that require human judgment.
25
CI/CD
Automated integration and deployment
Automation
Continuous Integration (merge frequently, run automated tests on every commit) and Continuous Delivery/Deployment (automatically deploy builds that pass all gates). Tests are the quality gate: if they fail, the pipeline blocks the deploy. QA owns the test strategy inside the pipeline — not just what tests exist, but what runs at each stage and what constitutes a blocking failure.
Pipeline stages: Commit → lint + unit tests (fast feedback, <2min) → integration tests → E2E smoke suite → deploy to SIT → full regression → deploy to UAT. Each stage must have a clear pass/fail contract. Flaky tests in CI erode trust in the entire pipeline.
26
Assertions
Validating expected vs actual result
Technique
An assertion is a verification checkpoint in an automated test that compares the actual result against the expected value and fails the test if they don't match. A test without assertions is not a test — it's just code that runs. Good assertions are specific (check the exact value, not just "truthy"), meaningful, and produce clear failure messages that point to the root cause.
Bad: expect(response.status).to.exist — passes for any status, including 500. Good: expect(response.status).to.equal(204) + expect(response.body).to.be.empty — fails precisely when the contract breaks.
27
API Testing
Testing backend using tools like Postman
Automation
Testing application programming interfaces directly — bypassing the UI — to validate request/response contracts, authentication, authorization scopes, error handling, data integrity, and performance. API tests are faster, more stable, and easier to maintain than UI tests. They belong at the integration layer of the test pyramid and are the best ROI for automation.
What to assert on every API test: status code, response body schema (not just presence — validate field types and values), response time (flag slow endpoints), error message format on 4xx/5xx, and auth behavior (valid token = 200, invalid = 401, wrong scope = 403).
28
Load Testing
Testing under expected user load
Automation
Validates that the system meets performance SLAs (response time, throughput, error rate) under expected and peak concurrent users. Distinct from stress testing (push beyond limits to find breaking point) and spike testing (sudden traffic surge). Runs against a production-like environment with realistic data. Tools: k6, JMeter, Gatling.
Key metrics to track: P95 and P99 response times (not averages — averages hide tail latency), error rate under load, throughput (requests/sec), and resource saturation (CPU, memory, DB connections). A passing average with a P99 of 10s is a production incident waiting to happen.
29
Integration Testing
Checking interaction between modules
Test Types
Verifies that multiple components or services work correctly together — validating the contracts and data flows at integration points. Each service may work in isolation but fail when combined due to mismatched schemas, auth handoffs, or timing issues. Critical in microservice architectures where the number of integration points grows with each service added.
What integration tests catch that unit tests miss: A service returns a field as a string, but the consuming service expects an integer. Both pass their unit tests. Integration fails. Contract testing (Pact) and consumer-driven contracts formalize this layer.
30
E2E Testing
Verifying complete user flow
Test Types
End-to-End tests validate complete user workflows from the UI through all system layers (frontend → API → database), simulating real user behavior in a real environment. They provide the highest confidence but are the most expensive to maintain — slow, brittle to UI changes, and environment-dependent. Reserve E2E for the most critical happy paths and highest-risk flows.
The pyramid rule: Many unit tests, fewer integration tests, even fewer E2E tests. A 1000-test E2E suite is an anti-pattern — it's slow, hard to debug, and becomes the bottleneck. Focus E2E on the flows whose failure would immediately block users: login, account creation, checkout, KYC submission.