Software Testing is a very broad topic sprawling across many methodologies. The primary form is manual testing to confirm that the system under test is performing according to documented acceptance criteria. This form of testing is critical even for systems that have automated tests. Automated Testing also takes many forms. From Unit Testing to User Interface automation, automated tests provide a source of verification for basic workflows. It can be difficult to develop automated test systems based on the system being tested because the system must be instrumented in a way that permits the automated tests to access the underlying code.
Performance testing, which is used to determine the amount of information the System under test can handle in a given amount of time, is very similar to but distinctly different from load testing. Load testing is often a very punishing level of simulated user traffic to determine if a system will perform acceptably even when the amount of requests exceed the ability of the system to process in a timely manner. These forms of testing are especially necessary if a system is cloud native, running on an elastic system like AWS provides, then it becomes very important to test that the system has been architected to withstand moments when high demand causes temporary scaling to meet that demand.