Functional testing is very much what it sounds like. It is testing the system to see that each component functions properly. It sees that every action that should take place, through the code, does take place. In the end, the goal is to see that every feature of the software works and that the user can do everything that is promised.
The testing can be accomplished by using design specifications, such as design team-provided use cases, or through functional specifications from the client. These specifications might include everything from integrations and user screens to user commands and data manipulations to business processes and searches. During these tests, the structure of the internal program is not usually considered. And it often follows these six basic steps:
Usability is the testing of how usable a software is. The goal is to evaluate how easily the user interfaces are to interact with–basically, whether the product is user-friendly. There are five components that testers check for with usability:
Usability is seen as an irreplaceable step in quality assurance because it evaluates how real users will interact with the system. But to effectively measure this, it is essential to know who the end users will be, what their needs are, and what their behaviors are.
Load testing is a form of software testing that aims to see how the application behaves under both normal and peak usage conditions. The end goal is to see just how much the system can handle without the performance suffering. Load testing is normally done under one of two conditions. Sometimes it will be executed with the goal of gathering qualitative data in the field (i.e. in the ‘real world’). Other times it will be done to measure the capabilities of the system in controlled lab conditions.
There are two possible methods for conducting load testing. The first is for longevity or endurance, to see how a system can handle moderate, yet constant, world load for an extended period of time. The second is volume testing, to see how a system reacts to a limited time of peak work load.
Both of these methods allow testers to identify component limitations, bugs and bottlenecks.
Load testing is different from stress testing in that the goal of load testing is to see how the system reacts under peak work load. Whereas, stress testing is to see how extreme of work loads the systems can handle.
The goal of performance testing is to determine a system’s performance under a certain load. This includes both its responsiveness and its stability. Many times testers will use this form of testing to investigate quality attributes of the system, including resource usage, reliability and scalability.
Results are achieved by gathering quantitative evidence of the system’s millions of instructions per second number or response time. By doing this, testers are able to see if the specifications provided by the manufacturer are accurate. These specifications can include everything from reliability and efficiency to speed and data transfer rate to bandwidth and throughput.
A major benefit of performance testing is that it serves as a diagnostic aid. It locates communication bottlenecks so that single point or component problems are solved, allowing the system to work much better.
The goal of security testing is to uncover system vulnerabilities and see whether its resources and data are safe from intruders. Testers look for potential openings for attacks, hacks or unauthorized logins. They also evaluate the effectiveness of any firewalls or encryption in the applications. The goal is to make sure that the software behaves when maliciously attacked. Non-repudiation, authorization, availability, authentication, integrity and confidentiality are the basic security concepts that are covered by this testing.
There are seven commonly used tactics when security testing:
Discovery: Pinpointing systems within the software that could have potential vulnerabilities.
Vulnerability Scan: Exploring for known security issues with automated tools that match known vulnerability conditions.