Software Quality and Quality Assurance ====================================== **Why Smarter.** Quality is usually taught in fragments: a unit testing chapter here, a linter there, a CI tutorial on a project with three tests. Students rarely see a complete quality process that already works on a large codebase, or learn what each layer catches and what slips through. Smarter has one, and every layer is in the repository: - **Tests at scale.** More than **seven thousand** unit tests across Python and React, built on time-test code infrastructure like `SmarterTestBase `__ and shared mixins that test every resource's broker, API and views the same way. - **Test doubles that protect production.** The development containers hold live cloud credentials, so an `in-memory provider `__ replaces every DNS, certificate, Kubernetes and email call in tests, and a `custom test runner `__ skips the tests that need real infrastructure unless they are asked for. - **Coverage with a target.** At least 90% for each Django app, 95% where that takes moderate effort, measured with ``make coverage`` and reported to Codecov under separate `Python and React flags `__. - **Checks before every commit.** The `pre-commit hooks `__, black, isort, flake8, autoflake, pyupgrade, pydocstringformatter, bandit, codespell, Prettier and ESLint, secret detection and commitlint, are the project's one lint standard (:doc:`ADR 028 `). - **CI and releases.** A `test workflow `__ that rebuilds the developer environment step by step, with caches and no cloud credentials, separate workflows for builds, chart releases and deployments, and `semantic-release `__ that turns conventional commits into versions and changelogs. - **Quality when agents write the code.** Most new code is written by coding agents, against a definition of done in `CLAUDE.md `__ and the `testing skills `__, so students can study how a quality process holds up when the author is a model. Students see a complete quality process that already works, rather than assembling one from fragments, and can measure where it is strong and where it is not. **What the course covers.** What quality means: defects and their cost, the test pyramid and shifting left; writing good unit tests; testing Django, with fixtures and cleanup without transaction rollback; test doubles, and where to patch; integration tests, Celery tasks and tagged tests; front end tests with Vitest, Testing Library, Storybook and MSW; static analysis and the pre-commit hooks; code review, including code written by AI agents; documentation as quality; CI with GitHub Actions, caching and matrix builds; conventional commits and automated releases; and measuring quality with coverage, mutation testing, flaky test detection and the DORA metrics. **Look at.** - `.pre-commit-config.yaml `__ and `.github/workflows/ `__. - Any app's ``tests/`` folder, such as `guardrail/tests/ `__, and `smarter/smarter/lib/unittest/ `__. - `codecov.yml `__ and the ``coverage`` target in the `Makefile `__. Each course plan lists every file that it uses under *Smarter in the Source Code*. **Read.** :doc:`/smarter-framework/developer-reference/devops/test`, :doc:`/smarter-framework/developer-reference/devops/ci-cd`, :doc:`/smarter-framework/guides/semantic-versioning`, :doc:`ADR 013 on testing `, :doc:`ADR 028 on code quality `. **Exercises.** - Run ``make coverage`` for one Django app, find its least covered module, and raise its coverage with meaningful tests. - Introduce a deliberate bug, and see which tests, hooks and CI jobs catch it, and which do not. - Fork the repository, add a ``push`` or ``pull_request`` trigger to ``test.yml``, which upstream starts by hand, and get it passing on the fork. Use it as an autograder for later assignments. - Review a pull request written by a coding agent, and decide whether each of its tests checks behavior or only executes lines. **Course plans.** Three complete, ready-to-teach plans, each with a schedule, graded assignments and rubrics, two capstone projects, recommended texts, further study and technical prerequisites. See :doc:`course-formats` for what the formats have in common. .. toctree:: :maxdepth: 1 Classroom bootcamp: 8 hours Two-week online course: 6 hours Four-week online course: 12 hours See the :doc:`Smarter Instructor Guide ` to install Smarter and set up a class.