Application testing: setting a new quality benchmark with every project
In today's business landscape, software applications play an integral role. By getting the requirements for an application right first time, Enable's clients are free to focus on what matters: profitable growth, business transformation, and achieving their company's vision.
The approach for any software design and build lifecycle should focus on ensuring that all of your requirements have been fully understood and delivered. The fact that software testing plays a vital role in this process is well understood, but the variety of topics that need to be considered can often be overlooked.
This article draws attention to six types of application testing that Enable recommends. By being attentive to testing of this kind as early as possible in the implementation process, an application is a lot more likely to be secure, reliable, efficient, maintainable and provide a high standard of usability.
1. Identifying and fixing bugs early
One of the most obvious benefits of application testing is to identify and fix any bugs before releasing software to users. This will considerably reduce the risk of any potential faults once the application is being used in a ‘live’ capacity. Enable implements a user acceptance testing (UAT) process that allows for any bugs to be identified within a test environment that closely matches real-world conditions in terms of configuration and data. This process allows for ongoing iterative refinement of the software until you are completely satisfied that it meets your needs.
It can be extremely difficult to simulate how an application will perform in a live environment without realistic data. Performance issues can often go unnoticed until significant data loads are introduced, at which point certain areas of a system may become unstable. By proactively performing data and user volume load testing, Enable are able to identify and resolve performance issues, ensuring that an application can comfortably handle anticipated data volumes once launched.
3. User experience
Despite being taken for granted by some, user experience (UX) is one of the most important features of a system; While there are many ways in which a client's requirements could be achieved through software, if what is developed is unusable or confusing this can result in user mistakes, reduced productivity or even the total failure of the project to meet its objectives.
To meet the high standards we set ourselves, we conduct a UX planning exercise for each area of work. The key point of this exercise is that, before any code is written, the team has considered the different possibilities for the look of what is to be created and how the user will interact with it. Planning is one part of the UX process but reviews are required to help consolidate it. During the build phase, UX reviews are held periodically to consider what has been developed and if it is the best that it can be for the client.
Applications have become a common target for attackers. Relatively simple vulnerabilities can be used to gain access to confidential information or even to gain full control of a server environment. Due to the potentially devastating level of damage an attack could achieve, it is critical that applications are not susceptible to security breaches. By performing security testing, Enable ensures that our software is protected from common threats such as Cross-Site Request Forgery (CSRF), Cross-Site Scripting (XSS), Path traversal and SQL injection attacks -- to name a few.
Our team are highly conscious of web application security and use experience as well as tried and tested Microsoft technology at the core of each solution to mitigate against common attacks.
5. Browser compatibility
As there are some slight variations between how different browsers process and display the same code, our software must be compatible with all of our clients' preferred choices. Enable conducts cross-browser compatibility testing with all the known major browsers including Google Chrome, Internet Explorer (or its current incarnation Microsoft Edge), Firefox, Safari and Opera to ensure that the end product functions consistently across multiple browsers, operating systems and devices.
6. The power of automation
Unit testing is a software development process where programmatic tests are written to confirm the functionality of a small unit of code, which will usually be a component within a much larger system. The goal of unit testing is to take these small units of an application, isolate them from the rest of the codebase and determine whether the unit behaves as expected. In essence, the unit test provides a contract that the unit of code must satisfy in order to pass the test.
The benefit of unit tests are that they can be run automatically during development work or as part of a continuous integration process. These automated test runs can test in seconds what would normally take many hours with traditional manual testing. Not only are unit tests more efficient, they are also more accurate as they are not prone to human error. In many cases, unit tests can identify bugs before they even have the chance to affect end users. They also help to ensure that changes made to the unit at a later date do not break previously working parts of the unit.
Test-driven development (TDD) is a software development process which builds upon the ideas of automated testing. This process provides measurable quality and confidence in the software along with a number of unit tests which verify the code that was written. In TDD, a developer follows a cycle in order to create each unit of code, where the implementation of the unit is only advanced in response to the creation of unit tests.
Developers get immediate feedback on their implementation. There is no need to run the entire application to verify one particular feature works as expected. By writing tests first and only writing code to pass these tests, we can ensure that all requirements are covered by unit tests. TDD leads developers to think about code in small units -- code written via TDD is often more extensible and easier to maintain.
Strong application testing results in high-quality software.
Our goal is for every project to set a new benchmark for quality. We learn from every engagement and feed lessons learned into the next piece of work in a controlled environment while working to structured quality assured processes. This subtle but constant evolution ensures that we are moving forward while preserving all the elements of our robust methodology that clients choose us for. Our people have room to innovate and experiment within the structure of a highly disciplined approach.