I’ve started dedicating more and more time to Software Testing since Q3-2014. Talking about Software Testing is like swimming in the Ocean, there are so many many aspects that we can discuss: understanding the context, the actors, the trends, the approaches, methodologies, tools, levels, standards, certifications and so on… I strongly suggest to look at The Foundation Level Syllabus which forms the basis for the International Software Testing Qualification: follow that link http://www.istqb.org/downloads/syllabi/foundation-level-syllabus.html
So, I will talk about Software Testing in that post, what it is basically and how it should, even must, be integrated in the SDLC. Very soon, I will try to publish more about Software Testing tools, software testing and related processes, the terminology used in Software testing, standards, terms like TCoE, APM, APDEX, the different testing types, levels, functional and non-functional testing, etc. Let’s go…
A few words about the SDLC
Everybody knows what SDLC is; it stands for “Software Development Life Cycle” aka “Systems Development Life Cycle” and this is basically the process which consists in several phases, defined by engineers and architects, in order to analyze, plan, build and deliver applications.
Model of the SDLC from Wikipedia
This said, there are many SDLC models that have been established in order to achieve distinctive objectives and Software Testing is being carried out differently in these models:
- Waterfall model: Each phase must be completed fully before the next phase can begin. Testing starts only after the development is complete.
- V-Model: Verification and Validation model. Testing is planned in parallel with a corresponding phase of development.
- Incremental model: Whole requirement is divided into various builds with multiple development cycles including a Testing phase.
- RAD / Rapid Application Model: Components are developed in parallel as if they were mini projects and each project contains with phases like Business Modeling, Data Modeling, Process Modeling, Application Build and finally Testing & Turnover.
- Spiral: Similar to the incremental model but with more importance placed on risk analysis. It’s divided into 4 phases, Planning, Risk Analysis, Engineering (Coding + Testing) and Evaluation.
- Agile: Small incremental releases being built on previous functionality and every release is thoroughly being tested to ensure software quality.
Naturally, development models have evolved over time as shown below:
What about Software Testing?
According to IEEE standard, Software Testing can be defined as “A process of analyzing a software item to detect the differences between existing and required conditions (that is defects/errors/bugs) and to evaluate the features of the software item”.
James Bach’s definition of testing: “Testing is questioning a product in order to evaluate it”.
Cem Kaner’s definition of testing too: “Testing is an Empirical technical investigation done to provide stakeholders, information about quality of a product or a service.”
Who is performing Tests?
Software testing is not a “one person” job. It takes a Team with a Tester, Testing Coordinator, Test Analyst, Test Manager… In our current culture of IT, a Testing Team should be different than the Development Team.
Why should we Test?
“A clever person solves a problem. A wise person avoids it.” – Albert Einstein
Software Testing is a challenge of real-world businesses because all organizations depend on Software. Nowadays, applications are indeed the engine that drives businesses by engaging customers, enabling partners and employees. Once upon a time, a business was built on a product and customers were installing those products on single computers. Today, organizations are deploying solutions that consist in myriads of products and these products operate across many servers in complex and distributed environments. In other words, what we mean by “application” today is very different than what we meant 10-20 years ago. On the other hand, applications are under massive stress from increasing volumes of data (Big Data), from accesses all around the world, at any time and from anywhere (Mobility). So, applications must perform for all devices, platforms, with quadrupled connection speeds and survive with major usage spikes (IoT).
Crashes of applications, web platforms becoming either too slow or completely unavailable can cause frustrated users and cost millions in lost revenue mainly for e-business companies. In these cases, the value of performance testing becomes vital but a little too late. As a consequence, Testing when implemented properly throughout the development cycle significantly reduces this risk. Including performance testing very early in your development life cycle supervises by adding significant value to the project and it reduces considerably the costs.
Software testing is an important part of the Software Development Life Cycle today but it is a rigorous work and also accounts for nearly half of the cost of the system development. No one really wants to open the Pandora’s box of Testing: quoted “It’s expensive. It’s time consuming”. Nevertheless, it’s fundamental to ensure that customers have a positive experience and that applications are reliable all time. Choosing speed and quantity over quality has never been a good long-term business strategy. By testing applications, I confirm that benefits are fully maximised.