The world of Information Technology (IT) today is flooded with acronyms and terminologies which add to the enigma around our already mysterious sphere of work - 'Software'. If you have tried explaining 'Software' to a farmer as I attempted once, you might empathize with this sentiment.
Quality Assurance (QA) and its subset - Testing - encounters similar buzz words doing the rounds in every industry domain. If you ask me, 'Agile' and 'DevOps' are two such confounding words in QA currently. In this post, I will attempt to address some key questions related to these two topics with respect to QA and highlight the value-add they deliver to the software life-cycle.
'Faster, cheaper and better' - factors referred to as Time to Market, Cost and Quality in the industry - enjoy no letup in today's competitive business landscape. In the software leg of this race between organizations, the benefits gained via collaboration, continuity and agility in QA are emerging as clear factors for differentiation. Most enterprises today, aim to push their products out quicker than their competition, and more consistently into the market; being unable to do so could easily harm, or even kill a company and its products. The Agile methodology aims to address this concern. DevOps - a concept which originated in an Agile environment - with its two key components - 'Continuous Integration and Continuous Delivery/Deployment (CICD)', attempts to take agile processes and best practices to the next level by minimizing time to market and optimizing cost and quality. Here is a brief context of the history and market for Agile & DevOps before looking at their impact on QA:
- History of Agile and DevOps -Agile has been around for nearly fifteen years now, beginning with the 'Agile Manifesto' at a gathering of industry thought leaders at Snowbird, Utah, United States in 2001. DevOps has had a relatively short history, tracing its roots back to Agile conferences in Toronto and Belgium (years 2008-09). Here is a good short blog on the history of DevOps for further reading click here. The goal was to resolve conflicts, improve collaboration and include agile principles between 'Dev' & 'Ops' teams to get work done quickly.
- What is the market for DevOps? - Agile today is accepted as a mainstream software development methodology with more than 50% of organizations worldwide (as per an annual report) already implementing this model. The testing market for this is already proven. The market for DevOps according to a leading research house, will 'go up from $1.9bn to $2.3bn in 2016 and DevOps will move towards being a mainstream strategy employed by 25% of the Global 2000 organizations'. The market for testing is expected to follow suit, as an integral component of DevOps. A Large Consumer Goods major based in the United Kingdom wanted to shift most of its projects to the Agile and DevOps mode to keep up with competition and eventually outdo them. So where does QA and Testing fit in?
Here are some key aspects:
- How is QA and testing evolving in an Agile & DevOps world?
Agile and DevOps have impacted all teams in the software lifecycle, including QA. Testing is viewed as one of the main levers for reducing time to market within the Agile and DevOps world. The ask for QA in this new approach is greater agility (reflected in the agile term 'test velocity'), continuity (reflected in the DevOps terms 'Continuous Testing' and 'Continuous Monitoring') and collaboration with developers, operations staff, release engineers, system admins etc. In addition all stakeholders need to put on their testing hat more frequently and continuously to ensure success in this approach. The key challenges for QA in this world are how to deliver value while testing in these shorter timeframes how to manage environment challenges and to how to shift left (predictive testing with developers) and shift right (testing with Ops and real time monitoring). The traditional QA TCoE is evolving into a distributed (as against co-located), co-managed (as against pure managed services by vendor), collaborative (with all teams in SDLC interacting) and hybrid (agile along with traditional waterfall) model.
- What are a tester's responsibilities in this context?
Is a separate role for performing testing justified? Very much so, when we look at the role of person who is primarily a tester, though his/her basic responsibilities remain the same, the requirements in terms of skillsets have increased. Testers need to better understand development, business operations and customer expectations. Following an Agile and DevOps approach does not mean that a tester is no longer required. As specified above, every team in the lifecycle is required to perform testing due to the continuous nature of integration and delivery. In addition to this, the QA cycle which features 'System Testing' (among other forms of dedicated testing), is still very much required. Once the build is certified in the QA environment, it can be deployed into production (Additional delivery to Acceptance and Staging environments for tests by users and Ops teams respectively are advisable however). Testers in this world need to be able to understand the application, prioritize their testing using predictive analytics where necessary, understand tools including virtualization tools better, use automation effectively and enable continuous delivery and strive to assure quality beyond testing. This explains the emergence of the 'Software development engineer tester' (SDET) or Developer-tester role in some organizations. In this world the roles for testing include core testers, developer testers (with skills like 'test- driven development' (TDD), and 'behavior-driven development' (BDD)), automation testers, specialized (performance, security, data and infra) testers, operations testers and business user testers assuring Quality throughout the Agile and DevOps lifecycle.
- Why is automated testing more of a buzzword here?
Will Manual Testing die as fallout? Due to the nature of integration, continuity and agility involved in the Agile and DevOps life-cycle, repeatability of tests is an expected fallout, and that coupled with shorter timeframes render testing more towards automation. Right from unit tests to integrated build, smoke, acceptance, system and regression tests etc., automating the tests helps teams in each stage to ensure benefits in terms of Cost, time and quality, helps detect defects earlier in the cycle and gives greater control over testing. Shift left techniques for automation testing such as TDD, BDD, API testing are emerging as key levers for agile delivery. This however does not mean manual testing has no role in this model. Exploratory manual testing is still required at every stage of the Agile and DevOps lifecycle and by every team to uncover potential issues. In the System Test phase, traditional manual tests as earlier, are the basis on which functional and non - functional automated tests are decided and executed. Similarly, acceptance tests run by users are still primarily performed in a manual manner, as earlier.
The answers to these questions are not set in stone and are evolving, across organizations, even as you read this blog.
In my next post I will touch upon the various approaches to testing in Agile and DevOps adopted by organizations around the world today.