Even though testing is usually grouped into a single activity on most development infographics then, in reality, developing high-quality software requires dozens, if not hundreds, of different tests throughout the process.
A well-thought-out and robust testing methodology not only ensures that the final product works as intended, but also that developers do not build further features on top of an already flawed foundation. Doing so would ultimately make development more time-consuming, expensive, and inefficient.
Although the exact testing steps of a particular project may vary somewhat, in general, any piece of software developed at Uptime goes through the following tests.
It is up to each developer to make sure that the code they write does exactly what they want. This does not mean running large and complex automated tests and trying out every possible edge case – that’s done by experienced testers – but it does mean making sure the code works well on an ongoing basis. For example, if a front-end developer has created a contact form and button to submit said form, he or she should try to use it, as such making sure that no critical errors appear when doing so.
This is a simplified example, but with this approach and continuous small-scale testing, a large number of small bugs and mistakes can be eliminated in the early stages of development, which can have a major impact on the system’s performance and reliability.
Static code analysis
Using a variety of testing software, testers and QA engineers can determine if the written code fully follows the established standards. Static code analysis uses automated systems that detect common security vulnerabilities, deviations from standards, and various other errors. All of this is done in a testing environment without executing the code.
During unit testing, a developer creates automated processes that test all the components within the software with as many different inputs as possible to ensure that each of them works flawlessly.
With this approach, one can verify that each individual component meets its requirements. On the other hand, using an automated approach means that you can try out more edge cases than you could using only manual labor.
Code review is a process in which developers read each other’s code to find inconsistencies and ensure consistency of style. During this process, it’s possible to find potential vulnerabilities, style issues, or problems that may arise at a later stage of development.
Although developers can often write almost flawless code, looking at the same lines of code all day can cause a situation where your mistakes are no longer noticeable. Using another person with a fresh perspective makes it possible to find the errors that were originally missed.
In addition to being able to offer the features expected from it, one must make sure that the system as a whole can cope under load as well. To achieve this, all parts of the system are tested with a set number of (virtual) users to identify at what point does the system breaks and, if necessary, further resources are invested to manage higher loads.
It is worth remembering though that each piece of software has a distinct purpose: an in-house invoice management software, which is used by three people, is not usually designed to serve a million users at once. It may still work very well with a thousand concurrent users, but when the scale changes drastically, it usually requires additional investment in both hardware and software to keep the system up and running.
In addition to the software being tested by your development partner, depending on the specifics of the project, the same tests can also be performed by your in-house development team. However, if no such team exists, you can be sure that ongoing functionality testing is a part of the development process.
This means that if a component is at a stage where it can be tried by a user, Uptime will ask the customer to try it out and provide feedback. This feedback will help the development team to understand if the requirements are being met.
A larger circle
Depending on the specific project, there may be dozens of different layers of customer functionality testing: the first phase with a customer representative, then with the entire project team, then with the entire company, then with a small number of end-users, then most of the end-users, and so on.
It is also worth remembering that good software development includes continuous improvement and problem solving, so potential issues may also be identified and fixed during longer-term monitoring (for example, if some updates have caused problems three months after the software was deployed).
The benefits of Agile development
While years ago, it was a common practice to develop a piece of software from the beginning to the end in one go and only then start testing it, then the use of Agile methodologies helps to keep the risks lower throughout the development process.
In Agile development, the final product is developed in distinct stages, which means that each individual system is created as if it were a small product, which allows it to be effectively analyzed, tested, and deployed. Take, for example, an order management system. With Agile development, the development process would be broken down into many smaller parts: the order entry component, the order verification component, the payment component, and so on.
By doing so, one can make sure that each individual part of the complete system works well, and all possible issues are detected early and fixed before they can cause problems.