QUESTIONS AND ANSWERS
QA
How do you define a testing strategy when time is limited?
Start by understanding the change, acceptance criteria, and which failures would cause the greatest harm to users or the business. Clarify scope, dependencies, data, environments, owners, and expected evidence. Prioritize critical paths and high risks; choose fast tests that provide earlier feedback and reserve time to explore uncertain areas. Make explicit what will not be tested in time and what risk remains so the release decision is informed.
What can testing demonstrate—and what can it not demonstrate?
Testing can reveal defects and provide evidence of how a product behaves under the conditions tested; it cannot prove that no defects exist or cover every possible input and context. QA is broader than executing tests: it includes improving requirements, design, processes, and collaboration to prevent problems and sustain quality. Communicate findings, coverage, and residual risk rather than promising that a product is bug-free.
Which test levels and test types should you distinguish?
Test levels describe scope: component or unit, integration between components, the complete system, integration between systems, and acceptance. Test types describe the property being evaluated: functionality, performance, security, usability, among others, and can apply at multiple levels. For example, a performance test may evaluate a component or the complete system. Keeping these concepts separate helps you choose complementary evidence without unnecessary duplication.
How do static and dynamic testing differ, and how do verification and validation differ?
Static testing examines requirements, code, designs, or other artifacts without executing the software, through reviews or static analysis; it can find ambiguities and defects early. Dynamic testing executes the product and analyzes its results to find failures. Verification asks whether an artifact meets its specification; validation asks whether it solves the users’ real need. They complement each other: a review can find contradictory requirements that an execution test would not reveal.
Which techniques help you choose representative test cases?
Use equivalence partitioning to group values that should behave similarly and boundary value analysis to test around range limits. Apply decision tables when combinations of conditions change the outcome, and state-transition testing when the order of actions matters. For example, for a field accepting 1 to 100, test representative values inside and outside the range and the boundaries 0, 1, 100, and 101. Combine techniques according to the logic and risk rather than using them as a mechanical checklist.
What makes a test case clear, reproducible, and traceable?
Start from a verifiable condition in a requirement, story, or risk and specify preconditions, data, steps, and expected result. The expected result needs a reliable oracle, such as a business rule, API contract, or acceptance criterion. Maintain a link between requirement, risk, test, and result to identify gaps and assess the impact of changes. Avoid vague steps such as “check that it works”; state which observable behavior confirms success.
How do you apply risk-based prioritization throughout the work?
Identify what could fail and estimate likelihood and impact to users, operations, security, or compliance. Prioritize high-risk scenarios, such as payments, permissions, or data loss; add more coverage or independent testing where potential harm is greater. Reassess when code, dependencies, or usage changes, and when incident data becomes available. A score helps order effort, but does not replace team judgment or a conversation about accepted risks.
What should you automate, and how should effort be distributed across test levels?
Automate checks that are repeatable, deterministic, and valuable because of their frequency or the cost of running them manually. It is often useful to have many component tests, a moderate number of integration or API tests, and fewer complete UI journeys, which tend to be slower and more sensitive to the environment. This is not a required ratio: risk and maintenance cost should guide the choice. Keep human judgment for exploration, usability evaluation, and new scenarios; measure whether automation provides reliable feedback.
What should an API contract test verify?
Check that each operation follows the agreed contract: method, route, parameters, headers, status codes, data structure and types, and business rules. Include success and error responses, required and optional fields, and compatibility across version changes. If a specification exists, validate that consumer and provider agree with it. Receiving HTTP 200 is not enough: the response must be correct and useful to its consumer.
How do you test permissions and error cases in an API?
Test each operation with users in different roles, without authentication, and with access to their own and others’ resources. Verify that the server rejects unauthorized access and does not expose sensitive properties, even when identifiers or body fields are manipulated. Check invalid data, limits, pagination, idempotency where applicable, rate limiting, and dependency failures. Error responses should be safe and consistent, without exposing secrets, internal traces, or other users’ data.
How do you keep UI tests from becoming brittle?
Use UI tests for critical journeys that depend on real interaction, such as signing in or completing a purchase. Locate controls by role, accessible name, or visible text rather than coupling tests to CSS classes or the DOM’s internal structure. Each test should run independently with controlled state and data, and verify an observable result. Use condition-based waits, not fixed pauses; reserve UI tests for key flows and test business rules in faster layers.
When does exploratory testing add value?
Use it when requirements are incomplete, a change is new, failure patterns emerge, or you want to discover problems that existing cases do not anticipate. Define a mission and timebox, explore freely, and record paths, data, findings, and questions. If you find a defect, seek a minimal reproduction and create an automated test when it is stable and valuable. Exploratory testing is not aimless or a replacement for systematic regression; it complements known coverage with learning.
How do you prepare useful and safe test data?
Cover valid and invalid data, boundaries, combinations, and the states needed for each scenario. Use synthetic or anonymized data, avoid copying production personal information, and control who can access it. Prepare deterministic, unique values so tests can be repeated without collisions; remove or reset data afterward. Document assumptions such as time zone, currency, and locale, because they can change results even when the code is unchanged.
What makes a test environment reliable?
Keep application versions, configuration, and dependencies controlled and visible. The environment should be similar enough to production to reveal relevant differences, but isolated from real users and data. Use service doubles when you need to control external responses or failures; use real integration when compatibility with that service is part of the risk. Record known differences, reset state between runs, and prevent uncoordinated changes from making results irreproducible.
What should CI run, and how should feedback be structured?
On each change, run fast checks first, such as formatting, static analysis, compilation, and component tests; then add integration and API tests, plus a small set of critical UI journeys. Run broad matrices or expensive tests on a schedule where appropriate. Pin versions and data, set time limits, and publish useful results, logs, or traces. A failure should show which check failed and block integration according to agreed criteria, with a clear path to investigate or fix it.
How do you investigate and reduce flaky tests?
Confirm that a failure varies with the same change and save evidence from a failed run. Look for race conditions, shared state, unisolated data, arbitrary waits, resource limits, or external dependencies. Make the test independent and deterministic; replace fixed pauses with state-based waits when appropriate. Do not hide failures with unlimited retries or exclude the test indefinitely: record an owner and repair deadline, and distinguish a product failure from environment instability.
How do you design a performance test that produces useful evidence?
Define the objective before generating load: expected volume, concurrency, target latency, error rate, and duration. Choose a profile that represents expected usage, such as steady load, gradual ramp-up, or a spike; prepare realistic data and dependencies, and make sure the load generator is not the bottleneck. Observe latency percentiles, throughput, errors, and system resources. Test normal load, spikes, and sustained duration separately; compare results under consistent conditions and do not extrapolate from a small test without justification.
What should a basic security testing strategy include?
Integrate early reviews and static analysis, then dynamically test threats relevant to the product: authentication, authorization, input validation, session handling, configuration, and data exposure. Use threat modeling to identify assets, trust boundaries, and possible abuse; prioritize by risk rather than relying only on a generic checklist. Use OWASP guides to inform coverage, but adapt testing to the architecture and add expert review when the impact warrants it. QA testing does not replace a specialist security assessment for high-risk systems.
How do you evaluate the accessibility of an interface?
Use WCAG as a reference and combine automated tools with manual review: no scanner detects every issue. Navigate key flows using only a keyboard, inspect focus and navigation order, check accessible names and roles, contrast, alternative text, and error messages, and test with assistive technology when possible. Evaluate real pages and states, not just isolated components. Record scope, criterion assessed, evidence, and barriers; do not claim full conformance based on an automated score.
What is the difference between confirmation testing and regression testing?
Confirmation testing repeats the scenario that revealed a defect and checks that the fix resolves it. Regression testing looks for unintended effects of the change in other features, data, or integrations. Scope depends on impact and dependencies: it may include a component, API, UI flow, or other systems. If the defect could recur, retain a stable test in the appropriate suite and run enough regression coverage for the change’s risk.
How do you report and prioritize a defect?
Record a clear title, version and environment, preconditions, minimal steps, expected and actual results, frequency, impact, and evidence such as screenshots, logs, or a trace. During triage, confirm reproducibility, rule out duplicates, and determine severity based on impact and priority based on urgency; these are related but distinct dimensions. Assign a status and owner, and communicate what is needed to make a decision. A report should help reproduce and resolve the problem, not just label it “critical.”
Which metrics help assess quality without creating the wrong incentives?
Combine signals tied to objectives: coverage of requirements or risks, defects found before and after release, failure frequency, flaky-test rate, feedback time, and cost to fix. Code coverage measures which code the tests execute, not whether they verify the right behavior. Avoid standalone targets such as “zero defects” or increasing test count, which can hide risk or reward volume without value. Review trends and context alongside qualitative evidence.
How do you turn quality requirements into verifiable criteria?
Express needs as observable and measurable objectives: for example, an action must complete within a latency percentile under a specified load, or a flow must be operable by keyboard. Specify scope, context, threshold, and measurement method before testing. Consider characteristics such as performance, reliability, security, compatibility, accessibility, and maintainability according to the product. If a requirement uses vague terms such as “fast” or “easy,” agree on the evidence and threshold that will make it assessable.
What evidence supports a decision that a change is ready to release?
Compare results with agreed exit criteria: critical requirements covered, required tests passing, blocking defects resolved, and residual risks understood by the responsible people. Also consider untested changes, environment limitations, and available production signals. A green suite does not guarantee the absence of defects; a red suite does not always indicate a product defect. Document the decision, exceptions, and mitigations such as gradual rollout, monitoring, or rollback.
How can QA improve the process instead of only finding failures at the end?
Involve QA, development, and product in refining requirements; review stories and acceptance criteria before coding to find ambiguity. Integrate testing, static analysis, and early feedback into the workflow, and retain regression tests for important failures. In retrospectives, identify systemic causes—requirements, design, data, tools, or coordination—and assign concrete actions with follow-up. Shift-left means testing earlier while continuing to test later, not shifting all responsibility to one person.
For further study: the official ISTQB CTFL v4.0.1 syllabus, ISO/IEC 25010:2023 quality model, Playwright best practices and Playwright in CI, Postman API response tests and Postman performance testing, the OWASP Web Security Testing Guide and OWASP API Security Top 10, and W3C WCAG 2.2.