Did you know there are at least 60 defined software development methodologies that have come out over the past five decades? The various options boggle the mind. Waterfall, lean, and agile are some of the best known, but there are so many more, including Dynamic Systems Development Method (DSDM) and Test-Driven Development (TDD), as well as at least 30 hybrid options. Some have fallen out of favor, and even with all those that have evolved, new ones are also being conceived, such as Behavior-Driven Development (BDD).
Do there really need to be so many to choose from? How do you determine which one to use for designing your software? The short answer is: it depends. In fact, there is no single development methodology that will work for every software project. Some are better suited for smaller teams or applications, while others are ideal for specific industries due to regulatory requirements. For a comparison of many development methodologies using consistent metrics, refer to Capers Jones’ excellent book, Software Methodologies: A Quantitative Guide.
Regardless of which one you choose, there are some essential components or activities that apply to all the methodologies. These include (but are not limited to):
- Documentation of user requirements
- Estimates for development cost and schedule
- Goals and metrics for quality and risk
- Controls for change and configuration management
- Development of test strategy and test cases
For example, you need the ability to measure both productivity and quality with useful metrics such as Function Points. It is important to establish an appropriate measurement method with consistent counting mechanisms for projects, so that you can have confidence in the values and correlate them across projects. You should only track metrics that add value to your process.
You should also strive to leverage reusable components to streamline and optimize the development and test flows. Most software development is not about creating new and unique applications, but instead is replacing, modifying, interacting with, or enhancing legacy software. If you can identify common features used by your applications, you can cut down on the total development and test time if you can reference existing requirements or code modules for another project.
Another key consideration is how the software testing process ties into the development workflow. The transition to software development methodologies such as DevOps and agile has made implementing a corresponding testing methodology a higher priority. You can reduce the number of defects and improve the software quality when you implement an effective testing strategy and shift left the application testing to start earlier in the development cycle. It takes a conscious effort to make software testing a strategic component of your development workflow, and a strong commitment to do it more effectively with automation.
Beyond the basic functionality of the code, you have to ensure that the application interacts correctly through the user interface (UI) and application programming interfaces (APIs). Manual testing simply cannot cover all the use cases with sufficient thoroughness or speed. It is much more efficient to handle the challenges of API and UI testing with automated tools that reduce the time, effort, and cost of delivering high-quality software.
An automated testing plan also helps to reduce the costs of maintaining the software and its testing process. Test automation enables a stronger focus on quality at speed. The top expense of software development is the cost of finding and fixing bugs, so enabling automation earlier in the development life cycle can significantly reduce the cost impact and improve defect removal efficiency (DRE). Fewer defects directly translate to higher quality code and applications, in support of the defined goals and metrics.