Introduction: Why Software Testing Matters
Testing is a vital part of the entire software development process. Without it, companies are more likely to deliver products that are poor quality, difficult to use, prone to bugs, and even vulnerable to security threats.
At worst, the failure to test and then subsequently deliver inferior products can do serious damage to a company’s reputation and brand. It can also make customers think twice about buying the company’s products.
Testing has long been a key part of the software development lifecycle, but the approach to testing is undergoing fundamental changes. One of the biggest trends is leveraging the Agile Method for the testing process as a replacement for traditional testing methods.
A report by research firm Frost & Sullivan released in May 2018 noted that the increasing global presence of big data analytics, cloud computing and the Internet of Things (IoT) are expected to “propel the software testing market to transfigure the software testing approaches.”
The software market is creating new products largely based on these IT trends, and that is leading to a shift in the testing market. The market is expected to grow at a 14% compound annual growth rate (CAGR) over the next few years, Frost & Sullivan says, with the rise of Agile testing and DevOps.
But the industry faces several challenges and threats. The emergence of new digital services, wearable devices, cryptocurrencies, the IoT, and big data/analytics – among other trends – is affecting how software needs to be tested. Software developers more than ever need to ensure that products are secure against growing cyber threats, provide the needed integration with other products, and deliver quality services. And they need to do this while maintaining shortened development cycles to keep up with the complexity and rapidly changing dynamics of the software market, the report says.
Frost & Sullivan illustrates the challenges currently facing the software testing discipline by citing the recent fall of prices in bitcoin. The collapse of MtGox that led to the loss of millions of dollars in assets was due to a bug in the bitcoin software that was at first not realized by the developers, the report says. The bug was due to a loophole in the software that was exploited by a group of hackers.
The same emerging trends that are providing tremendous opportunities for the software market are also creating disruptions in testing.
Software glitches that go undetected in the development and testing processes show the weaknesses in software testing.
Maximizing IT productivity and Agile team software labor capitalization
No matter where you are in your Agile transformation journey, you can benefit from understanding the ideal future state.Watch the webinar • Maximizing IT productivity and Agile team software labor capitalization
Gartner 2020 Enterprise Agile Planning Tools Magic QuadrantRead the report • Gartner 2020 Enterprise Agile Planning Tools Magic Quadrant
Testing with the Traditional Model
Software testing traditionally has taken place as part of the waterfall model of software development. Waterfall is a linear sequential design approach in which the progress of a project flows in a largely downward direction (as with an actual waterfall), and it tends to less iterative and flexible than other approaches.
Typical phases of a waterfall software development model might include:
Each phase consists of various tasks and has different goals in the project, and the output of one phase becomes the input of the next phase in the sequence. A phase must be completed before the next one can begin.
The model originated in the manufacturing and construction sectors before becoming more broadly adopted and was the first model to be widely used in the software industry.
The waterfall development model is most suitable when:
- Project requirements, the development environment, and the technology tools in use are stable and there are not frequent changes that crop up
- A software application is small
- Requirements of the project are clear to development team members
- Members are well trained
Waterfall has its advantages. For example, the model:
- Is relatively simple and easy to understand and use
- Works well with smaller projects
- Is easy to maintain because the phases are rigid and precise
- Fully documents the results of a development project
Among its shortcomings are that the model is not:
- Designed to adapt to changes in project requirements
- Conducive to moving from one phase back to an earlier one if a revision is needed
- Ideal for larger and more complex development projects
- Ideal for projects that span long time periods or are ongoing
With the waterfall model, software testing is conducted as one of the later stages. That means it’s harder for team members to identify risks or challenges in earlier phases, which makes it more difficult to have a risk mitigation strategy.
Software testing with the waterfall model is usually handled as a separate project phase after all development is complete, and in many cases, there is a handoff between two separate departments. This creates the potential for disconnect, misunderstanding, or confusion about objectives.
Unfortunately, since testing is one of the last phases of the model and previous phases such as analysis, design, and development typically run long, testing is often cut short. Project managers have a fixed time, scope, and cost plan, and they need to end the project as planned. As a result, testing—and software quality—suffers.
Technology products can have very long lifespans, with multiple follow-on releases built on top of the original product. Quality problems in that first release become the basis for compounding quality problems over time. So while the project manager might hit the project budget and timeline target for an initial development initiative, the long-term impact is higher total costs for the company because of the ongoing need for patches and updates to fix earlier glitches.
Rise of the Agile Method
The Agile Method of software development provides an alternative approach for testing software.
The method is an approach to project management that’s designed to help software development teams effectively address the dynamics and uncertainties associated with the creation of new software. Among the hallmarks of Agile is that it employs incremental, iterative sequences of work commonly known as “sprints.”
Sprints are the times allotted for specific phases of a development project, and they’re considered complete when the time period set for a phase expires. Work on that phase ends, even if team members think more effort is needed, and the next phase of the project begins and runs through its designated time frame. This process continues until all the phases of the project are complete.
The inspiration for this development method is the Agile Manifesto, which consists of four main tenets:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
The manifesto maintains that there is value in processes and tools, comprehensive documentation, contract negotiation, and following a plan. But the greater value comes from individuals and interactions, working software, customer collaboration, and responding to change.
The two main development models that fall under the Agile Method are Scrum and Kanban. Scrum is one of the most popular software testing methodologies and is also a framework for managing work with an emphasis on software development. With this model, teams of three to nine developers divide work into actions that can be completed within sprints and track their progress and re-plan in 15-minute meetings called daily scrums.
The Scrum model offers a flexible product development strategy that enables development teams to work as individual units to reach a common goal and lets teams self-organize by encouraging physical proximity or online collaboration of all team members, as well as daily face-to-face communication among team members.
Kanban is a way to design, manage, and enhance the workflow of a development project, allowing organizations to begin with their existing workflow and make gradual improvements by:
- Visualizing the flow of work
- Limiting work in progress
- Focusing on completing the work
Kanban is particularly applicable in situations where work arrives in an unpredictable fashion or when a development team wants to deploy work as soon as it’s ready, rather than waiting for other work items.
In a report on the Agile market, Transparency Market Research said the rapid technological development taking place means companies today need to be dynamic and able to achieve faster time-to-market and at the same time reduce costs. Agile development promotes a disciplined approach to processes and involves checks and adaptations at various stages of software development, the report says. This calls for accountability and results in encouraging the use of best engineering practices, resulting in rapid delivery of quality software and business approaches aligned with customer needs.
Agile’s Impact on Testing
In Agile methods, testing is embedded in the development process. Software developers are trained to write tests either before or alongside the code they write. Each subsystem of a program is encapsulated in a set of unit tests that ensure that it keeps doing what it’s supposed to do. This makes it much easier to identify and isolate problems as the product evolves over time. Given that software product development can be dynamic and many factors can impact performance and vulnerability, this is an important capability of testing.
Testers are situated as members of the development team so that they can perform tests as small incremental pieces of functionality are completed. Closer collaboration and much shorter feedback loops allow problems to be found sooner, preventing further problems from being built on top of them. This allows developers to more easily fix problems, since the work they’re doing is much more top-of-mind.
Testers in Agile organizations often receive additional training and access to better tools, which allows them to write and execute automated tests against the user interface and application programming interfaces.
These automated tests and the unit tests mentioned earlier are critical factors in the ability of Agile teams to remain fast over an extended period. Without them, Agile methods can deliver an initial burst of speed but then grind to a halt as the weight of manual testing makes rapid iterative releases impossible.
An increasing number of companies are adopting the Agile methodology as a part of continuous integration in software development, according to the Frost & Sullivan research.
As the software market is becoming more dynamic than ever with software product lifecycles shortening, developers now want to launch their products as early as possible.
The Agile method is slowly increasing its dominance over the software testing market, Frost & Sullivan says. “In Agile methodology developers and testers collaborate at early stages of the product lifecycle, and then continue working together throughout,” the firm notes.
The method is closely tied to another fast-growing trend, the use of DevOps. The DevOps model is at the forefront of the software testing market, the firm says. While Agile is a form of continuous integration culture in software testing, DevOps is more of a continuous development culture, it says.
Companies are adopting this extension of Agile culture, which integrates the Agile tactics or infrastructure of software testing with collaboration of development and operations in the software development lifecycle. While Agile is ousting the waterfall methodology, DevOps is slated to collaborate with Agile to extend the prospects of Agile culture in delivering qualitative and fail-safe software applications, Frost & Sullivan says.
While Agile and DevOps are the trending strategic culture of software testing, test automation is the technology that will be responsible for effective implementation of these cultures in testing. The quality assurance principles that Agile and DevOps focuses on cannot be as easily achieved by manual testing, the firm notes. Software testing considering Agile principles is a continuous process, and test automation is the emerging technology that could ensure effectiveness and efficiency of the process.
Agile Testing Methods
There are several methods of software testing within Agile. Here’s a summary of each, as described by the Agile Alliance, a nonprofit organization that supports people who explore and apply the Agile method.
Behavior-driven development (BDD)
BDD is a synthesis and refinement of practices stemming from Test Driven Development (TDD) and Acceptance Test Driven Development (ATDD). BDD augments TDD and ATDD with tactics such as:
- Applying the “Five Whys” principle to each proposed user story, so that its purpose is clearly related to business outcomes
- Implementing only those behaviors that contribute most directly to these business outcomes, to minimize waste
- Describing behaviors in a single notation that is directly accessible to domain experts, testers, and developers, to improve communication
- Applying these techniques to the lowest levels of abstraction of the software
Acceptance test-driven development (ATDD)
ATDD involves team members with different perspectives (for example, developers, testers, customers/users) who collaborate to write acceptance tests in advance of deploying the corresponding functionality in a product. The collaborative discussions that lead to the acceptance test cover the different perspectives of the team members, such as what problem is the software trying to solve, how they might be solved, and what challenges might arise. Ultimately these efforts serve to verify that the software functions as intended.
Exploratory testing emphasizes the tester’s autonomy, skill, and creativity, much as other Agile practices emphasize these same qualities in developers. It recommends performing various test-related activities, such as test design and execution, throughout a project rather than in a fixed sequence and at a particular “phase” of the project. The method also emphasizes the mutually supportive nature of these techniques, and the need for a plurality of testing approaches rather than a formal test plan.
Conclusion – creating a plan of action
Regardless of the testing method used, software testing based on the Agile Method of software development provides some clear advantages to organizations looking to enhance their development processes.
Fierce competition in the market and greater demands for quality from customers, as well as pressure for regulatory compliance and strong security measures, have elevated software testing to a new level of importance for development operations.
Business users and consumers don’t tolerate software that doesn’t work, and a lack of quality has a direct impact on a company’s brand. And with the increased scrutiny on cyber security, any software that hits the market with major vulnerabilities is nearly certain to fail.
The Agile Method has transformed the process of developing software. More organizations are in the midst of digital transformations as they look to enhance the way they manage data and deliver digital services to internal users and customers. And as they continue these transformation efforts, Agile will no doubt play a significant role.
Does it make sense for an organization to move to the Agile Method of development and testing? That depends a great deal on the overall goals of the organization, its culture, competencies and skill sets, customers, markets, and other factors.
At the very least, however, IT, operations, and business leaders need to evaluate the current methods of development that are used within their organizations and determine if Agile is the way to go for development and testing.