Correctly identifying when you test could be just as important as what. Below are types of testing according to scope.
Static testing occurs when requirements are written. Question requirements and spell out what each one means.
Concerns: Setting up a system to track and link requirements to test cases, negotiating business needs with technical feasibility, clarifying scope.
Unit testing occurs when coding begins. Practice Test-Driven Development by translating requirements into tests before writing the code.
Concerns: Treating test code like application code, getting developer buy-in, communicating technical implementation, performance, pair programming.
System testing occurs when a build is released. Employ black-box testing: step back from the code and assess the feature as a whole for consistency.
Concerns: Adherence to common design standards, equivalence partitioning, boundary value analysis, fighting scope creep, usability, creating test data.
System integration testing (SIT)
SIT occurs when integrating multiple components. Use white-box or grey-box testing to target the interactions and traffic between components.
Concerns: API testing, stubbing and mocking, identifying request paths throughout the system, performance benchmarking, observability and analysis.
Business acceptance testing (BAT)
BAT occurs when the code is assessed against overall business goals. Seek out SMEs who can help you verify expected outcomes.
Concerns: Adherence to business requirements and regulations, process testing, simplifying request flows, identifying potential customer pain points.
User acceptance testing (UAT)
User acceptance testing occurs before code is released to production. Map test cases to requirements and test real-world scenarios.
Concerns: Testing for superuser workflows, data cleansing, verifying real user behavior from historical logs, exploratory testing, end-to-end performance.
Regression testing occurs between builds. Supplement a robust automation test suite with nuanced manual test cases that address known problem areas.
Concerns: Setting up a CI/CD pipeline, deciding what to automate, consolidating test and development tools, tracking failures over time.
Remember: testing is an attitude.