What is Software Testing?

Posted in Functional Testing What is Software Testing?

What is Software Testing? Generally speaking, testing can be defined as a process undertaken to find out how well something works. Software testing is no different. It is the art of evaluating a specific attribute or quality of a program or system and determining if it meets the expectations of the software developers, users, and business needs.

Additionally, software testing is more than just the attempt to find errors and debug a system. Its purpose is not only to determine reliability and efficiency, but it is also an integral part of quality assurance and usability. Therefore, software testing is a unique balance of quality, budget, and time, which can be adapted and fitted to meet different business needs. When any industry or company determines that new software is needed, there is a procedure and cycle that most testing will follow. This is commonly referred to as the Software Development Lifecycle and is comprised of five non-distinct stages. These stages are considered non-distinct due to the testing that must remain continuous throughout the lifecycle entirety. The five different stages are: Planning, Analysis, Design, Implementation, and Maintenance.

Planning
The first phase of development is set aside for planning. In this phase of software development, determining that there is a problem with the current process or systems is a must. Usually this is relayed to an analyst by an end user, and then a feasibility study is underway to determine what should be done about the current problem and if a new system is practical.

Analysis
The second phase of the software development life cycle is Analysis. Once it is determined that new system is needed, much analysis is done to determine the requirements of the projected new system. During this phase, it is important that the old system is studied to better understand its flaws and its good attributes. After the old system is studied in-depth, and requirements are prepared, a prototype of the new system is developed. The analyst usually creates a flow chart or diagram listing the functions of the future system, but not exactly how those features will work.

Design
After it is determined that a new system is needed, and the old system is analyzed, the Design phase begins. The Design phase will fabricate the new system along with the specifications the analysts determined were important. The Design phase is primarily attended by project managers, developers, and analysts. However, usually the software tester would want to also attend meetings at this stage and get involved in the construction of the system and become familiar with the process. The developers will then order all the software and hardware that is needed to develop the new system. They will also incorporate security and use many system models and flow charts to determine what best fits the client's needs.

Implementation
The fourth phase of software development is Implementation. The major function of this phase is to write and test the program. The majority of the software tester's responsibilities will fall into this phase. This is where the different levels of testing will occur based on client needs. For example, they may want to test just system integration, or they may want system integration testing, regression, and user-acceptance completed before the new system is deployed. The actual deployment of the new system occurs during this phase of the life-cycle, once the testers have completed their role and the client determines that all requirements and expectations have been met and the new system is usable.

Maintenance
The final phase is Maintenance. Once the system is implemented, usually there will be changes that need to be made, or bugs that are found after the new system is launched. During this phase additional testing is often performed, and the new system will go through many repairs and upgrades. Once the system is upgraded, it will be tested again, and go back to the fourth phase, Implementation, to determine if the upgraded system is ready for deployment based on whether it has fixed the errors that were initially discovered upon launch.

The software development lifecycle has had many models developed around its initial phases, and used to further breakdown how the software development should flow into creation. Two of the most commonly known models are the traditional, Waterfall model and the iterative, Agile model.

The Waterfall model is a sequential model based on the five phases of the software development lifecycle. With this type of model the software development is seen as flowing downward through each phase. To follow this model many companies follow the processes in a sequential manner. They first create the requirements and set them in stone, complete the design, implement the system, test, and then maintain the system. When testing occurs after implementation, any bugs or defects that could have been found by doing initial testing before implementation are found late in the process, which often creates many more errors in the system and increases the expense of fixing them. With this model there is no jumping back and forth or overlap between the phases.

Another widely used software development model based on the software development life-cycle is the Agile model. This model contrasts from the Waterfall model because testing is done throughout the entire model as opposed to just the very end. Therefore, the testing that occurs throughout this model makes bugs or defects easier to detect and fix at an earlier stage in the process. A later article will cover the Agile process in more detail.