When building software, be it a website, a mobile app or a web service, there is one element that many customers underestimate.
A good product is achieved by having a combination of good a development team, Project Manager and technology. Building the correct test cases and thorough testing is usually not a priority, however taking time to define the core functionality of the system and how this should behave facilitates the work in the testing phase and leads to a better product.
We do agree that it is almost impossible to test everything, however it can certainly be approached using the different types of testing methods according to the purpose for which they are created.
To find out which type to use and for what purpose, you need to consider all the different testing types and select the most suitable method.
The most common types of test methodologies are User interface, Functionality, Integration, Usability, Performance, Database Security and User Acceptance testing. While some of these areas may overlap with others, in general, each type of test case has its own category and is used to test a certain specific area of software.
User interface Testing
UI test cases are used to verify that specific parts of the graphical user interface (GUI) work as expected. These types of test cases can be used to identify grammatical and spelling errors, links, and anything else the user sees or interacts with.
These tests are usually written by the test team, but the design team can also get involved as they are more familiar with the interface. UI test cases are types of tests that are typically done on browsers. Browsers tend to render differently, and UI test cases help ensure that the application behaves consistently across browsers.
These test cases will be run once the development phase is complete.
Example: How can I see my website on a small screen like a mobile phone or on a desktop? Does anything change if the screen is a portrait or landscape?
Functionality testing is used to find out if an application behaves as it is expected. The tests identify the success or failure of the functions that the software should perform.
Functionality Tests are a type of black-box tests that derive from the specifications or user stories of the software under consideration.
This allows you to run tests without having to access the internal structures of the software being tested. The team that writes these test cases and tests are typically the members of the analysis or development team themselves because the activity is part of the normal quality control processes. They can be written and executed as soon as development makes a first function available for testing. To facilitate development, they can be written before code, if necessary.
As specified above, they can be written and run as soon as it is feasible to do so and should be repeated whenever updates are added, or whenever necessary.
Example: A user's confirmation can successfully upload a profile photo.
Integration tests are intended to determine how the different modules interact with each other. The main purpose of the integration test is to ensure that the interfaces between the different modules work correctly.
The testing team identifies which areas need to be tested for integration, while the development team will provide input on how those test cases should be written. Either of these two teams can proceed to write the tests.
They check that even modules that already work individually are able to work together.
Example: Checking the link between the home page and the "favorites" section. When adding an item as a "favorite", from the home page, is it displayed in the "Favorites" section?
Usability tests can often be referred to as "activities" or "scenarios". Instead of providing detailed instructions for performing the test, the tester is presented with a scenario or high-level task to complete.
Usability testing helps identify how a user approaches and uses the application in a natural way. They help guide the tester through various situations and flows and assume that no prior knowledge of the application is required.
These tests are typically prepared by the design team in conjunction with the testing team. Usability tests must be performed before the user acceptance tests.
Example: Can the user successfully add more than one item to the cart? How is this experience?
Performance tests validate the response times and overall effectiveness of an application. That is, after performing an action, how long does it take for the system to respond? Performance test cases must have a very clear set of success criteria.
The testing team typically writes the test cases and they are often automated. A large application can have hundreds or thousands of performance tests. Automating these tests and running them often allows you to expose scenarios where your application doesn't run at the expected level.
Performance tests help you understand real-world application performance. These can be written after the testing team has received the performance requirements from the product team. However, many performance issues can be identified manually without specifying the requirements.
Example: How long does it take for the system to authenticate a user and load the next page? When multiple people log in at the same time, does the application remain stable?
Database tests examine what goes on behind the scenes. The UI is clean, and everything seems to work ... but where is all this data going?
To write these test cases, you need to have a thorough understanding of the entire application, database tables, and stored procedures. The testing team often uses SQL queries to develop database test cases.
Database tests are used to verify that the developer has written the code in order to store and manage data consistently and securely.
Example: Let's consider creating a user profile. When the user submits their profile, the following should be tested regarding the database.
Did the application store the input data in the database?
Was data lost in the process?
Partially executed data must not have been saved.
Security tests help ensure that the application restricts actions and permissions, if necessary. These tests are written to protect data when and where it needs to be safeguarded.
Security tests are used to perform penetration testing and other types of security-based tests.
Authentication and encryption are often the main focus in security test cases. The security team (if any) is usually responsible for writing and conducting these tests.
Example: If a user reaches X number of unsuccessful login attempts, is the account locked out? Is a user able to upload data without being logged in?
User Acceptance Testing
User acceptance testing or "UAT" help the team test the user acceptance test environment. These test cases must be large, covering all areas of the application.
The purpose of this testing is not to find bugs (hopefully they have already been found and fixed in previous tests), but to verify that the application is acceptable to the user. So when they do a test, are the results of that test and the experience of that test acceptable?
Since many other types of testing have already been done at the time of starting UAT, the focus is not so much on a granular level, but more on the big picture. User acceptance test cases are used by the end user or client and prepared by the testing team or product manager. This is perhaps the most important testing phase as it is the last step before going into production.
Example: If you are testing, a photo management application for a photo studio, the customer (user) needs to verify that they are able to upload and manage their photos to suit business needs.