Building Quality Into the Software Development Process
In today’s ever-evolving software development world, companies across every vertical must achieve a continuous delivery model to stay ahead of technology obsolescence, as well as the industry competition. A manual testing methodology is too time intensive and prone to mistakes to keep up with an agile delivery cycle. An automated testing process is almost as mission-critical to determining strategic direction and project success as the development process itself.
Recognizing the Different Automated Tests for Software Development
The automated testing umbrella includes many types of tests, including:
- Unit tests
- Integration Service tests
- UI tests
Each type of test addresses a specific use case and has distinctive benefits and restrictions to consider. In Mike Cohn’s book Succeeding with Agile, he described the “testing pyramid” concept, which outlines the different types of automated testing and where they are most applicable.
Unit Tests: Single Path Test for a Single Method in Isolation
Unit tests are code that actively tests a single path for a single method in isolation. Unit tests do not cross application tiers like a web server making a call to an application server, or an application server making a call to a database. Instead, these tests typically use mocking frameworks to simulate how tiers or classes interact. Making code testable usually requires the programmer to adhere to tried and true design patterns with the most important concepts summed up in the SOLID principles. Unit tests are cheap to write and maintain. However, they interact with a code in a way that an end-user or stakeholder never will and do not test how application tiers communicate.
Integration Service Tests: Verify How Methods and Classes Interact
Service tests are code that tests how methods and classes interact with other methods and classes, or how application tiers interact with each other. An excellent example of a service test would be to test an API call to get a predefined result from a database. Service tests may require some infrastructure to be provisioned and maintained, as well as defined data records to be available. This type of testing does take more time to write and introduces a higher level of brittleness to the test runner due to the infrastructure requirements. However, they interact with the code in a closer fashion to how an end-user would.
UI Tests: Fully Automated Tests
UI tests are fully automated tests that start with the UI and thoroughly test all tiers of the application. They typically use a framework tool like Selenium (for web application testing) and physically click on the links and actions in the app. UI tests require data that is either set up before a test run or require the test to create all necessary data for successful execution. UI tests take a significant investment to build and maintain and are the most fragile compared to the other types of tests. However, UI tests simulate precisely how an end-user will interact with the system.
When to Consider Manual Testing to Increase Quality in the Software Development Process
When talking about automated testing, it’s important to question when and where to include manual testing. UI automated testing is a sound option for testing pre-defined paths. However, this type of testing is generally not a great choice when identifying edge cases, overall user interaction, or deciding if something looks good. Manual testing is much better at quickly identifying the more human aspects of software and is much faster and cheaper to run in the early stages of a product or a feature. The quick feedback loops are instrumental in catching potential bugs and usability issues that an automated test will typically miss. Once a product or feature has hit a level of maturity, UI testing starts to become more valuable to automate the repetitive regression tests.
All Testing Has its Unique Place When Building Software
Each type of testing has its place in the overall landscape of building quality software. However, they typically have areas of strength regarding what they cover and when they are built. Unit tests are very good at hiding isolated business logic and are usually produced during the development phase. Service tests are very good at covering some portion of end-to-end testing and are built during the development phase. UI testing is good at covering regression testing and is typically built much later in the process. Manual testing is invaluable in feature creation to test areas automated tests cannot or are too expensive to build.
Each software delivery team must make informed decisions regarding which types of testing add the most value to their product and should deliver automated tests with the final product. These decisions should be revisited as the product matures to ensure seamless system integration, shorter delivery times, and drive higher project ROI once launched.
Still have questions about automated and manual testing? Contact InfoWorks today to speak with an onsite technical specialist.