{"id":2924,"date":"2024-08-24T12:24:07","date_gmt":"2024-08-24T11:24:07","guid":{"rendered":"https:\/\/contentlabstudy.com\/soft\/?p=2924"},"modified":"2026-09-24T21:15:42","modified_gmt":"2026-09-24T20:15:42","slug":"quality-assurance","status":"publish","type":"post","link":"https:\/\/contentlabstudy.com\/soft\/quality-assurance\/","title":{"rendered":"Quality Assurance"},"content":{"rendered":"<p><strong>Quality assurance<\/strong> is the system that makes \u201cwe meant to\u201d into \u201cwe would have caught that.\u201d Testing is a subset. QA also includes the definition of done, who can release, and how production tells you the definition was a lie.<\/p>\n<h2>The pyramid, used honestly<\/h2>\n<ul>\n<li><strong>Unit:<\/strong> fast, deterministic, no I\/O. Domain rules and parsers live here.<\/li>\n<li><strong>Integration:<\/strong> your code plus a real collaborator (testcontainers Postgres, HTTP to a stub). This is where ORMs and SQL actually fail.<\/li>\n<li><strong>End-to-end:<\/strong> few, expensive, closest to the user. See <a href=\"\/soft\/e2e-test-frameworks\/\">E2E frameworks<\/a>.<\/li>\n<\/ul>\n<p>Invert the pyramid (mostly UI tests) and you wait 40 minutes to learn a null check is missing.<\/p>\n<h2>Shift left without dumping it on QA<\/h2>\n<p>Engineers own automated checks in the same PR as the code. QA owns risk: charters for exploratory testing, production-like data, \u201cwhat did we not think of.\u201d A QA department that only clicks the happy path after freeze is a queue, not a quality system.<\/p>\n<h2>Release quality<\/h2>\n<ul>\n<li>CI red means do not merge. Flakes are defects in the suite.<\/li>\n<li>Feature flags beat giant-bang releases.<\/li>\n<li>You need a rollback or forward-fix path <em>before<\/em> you need it.<\/li>\n<\/ul>\n<h2>Example<\/h2>\n<p>A pricing rule has a unit test for the numbers, and one end-to-end test walks through checkout.<\/p>\n<h2>What breaks it<\/h2>\n<p>The only check is a 40-minute browser suite. A wrong rounding rule waits for that suite, and half the time the failure is a selector. Put the rule in the unit test.<\/p>\n<h2>Pitfalls<\/h2>\n<ul>\n<li>Coverage % as a goal. 100% of a wrong spec is still wrong.<\/li>\n<li>Environments that only exist on one laptop.<\/li>\n<li>No owner for flaky tests \u2014 they train the team to ignore red.<\/li>\n<\/ul>\n<p>Related: <a href=\"\/soft\/tdd-test-driven-development\/\">TDD<\/a>, <a href=\"\/soft\/behavior-driven-development-bdd\/\">BDD<\/a>, <a href=\"\/soft\/code-smells\/\">code smells<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quality assurance is the system that makes \u201cwe meant to\u201d into \u201cwe would have caught that.\u201d Testing is a subset. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[12],"tags":[],"class_list":["post-2924","post","type-post","status-publish","format-standard","hentry","category-quality-assurance"],"_links":{"self":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts\/2924","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/comments?post=2924"}],"version-history":[{"count":4,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts\/2924\/revisions"}],"predecessor-version":[{"id":3230,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts\/2924\/revisions\/3230"}],"wp:attachment":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/media?parent=2924"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/categories?post=2924"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/tags?post=2924"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}