An insight to Innovative Agile or Spiral Software Testing
The intent of life cycle testing promotes testing by software testing professionals from some agency outside the development organization. The prime advantage of testing with life-cycle approach are that we have crystal clear requirements defined before hand, and it is comparatively easier for an external expert to verify the facts. Software testing is generally considered as a destructive activity aimed to challenge the work done by the developers.
On the contrary, spiral-testing psychology promotes more cooperation among the development organization and the quality assurance. The is based upon the hypothesis that, in an environment of rapid application development, all the available requirements may not be that precise as expected, or may be varying drastically. Unless precise requirements are in place, it would be extremely difficult task for the software testing engineers to define the test criteria. The best possible solution remains is that software testing & development teams must work in tandem.
Software testing team can act as extremely effective allies of the development teams, and if they work with a sense of harmony, their relationship can be transformed from adversaries to understanding partners. Such a transformation is feasible, since majorities of the software testing engineers sincerely wish to cooperate; and what they expect in
return is a little support and consideration to their ideas. All this is not all that simple and requires smart initiative by the project manager, wherein he can create an environment to extract the best out of the software testing team�s abilities. The role of the project manager is quite crucial as during the early stages of the development cycle he/she can establish a bridge of cooperation between the testing & the development team and can channelize effective communication throughout the product development cycle.Bridging the gaps between Tester and Developer Perceptions:
Understanding of the stumbling blocks in the way of healthy relationships between the software testing teams and the development teams, it is important to respect the roles & responsibilities of each other. Both testers and developers need to break the age old ice and rise above the traditional confrontation.
Software testing is an effor intensive task that is infinite as well as indefinite. Despite putting in long strenuous efforts, software testing engineers can�t claim with surety that they have found all the bugs in their application, or even all the most important problems.
Some of the testing engineers do not truly remain interested in their software testing activities due to the lack of adequate training on latest testing techniques & basic principles thereof. Knowledge of tools & techniques acquired through various books or seminars provide rigorous exposure to testing in addition to providing sound mathematical analytical abilities. In a real world scenario involving a software development project, it is not realistic to stick to structured requirement specifications as the essential prerequisite to an effective testing.
It is not an easy task to find out professionals that are truly efficient in software testing. Intelligent testing professional smartly evaluates the software deliverables and is an avid thinker requiring good deal of motivation to come out of a good quality software product. He/she places the testing profession in very high esteem beyond any comparison with that of development. Other attributes of a smart tester are; 1) Quick at learning things 2) Excellent team player 3) Owner of very good communication skills.
The output from the software developers appears quite tangible and real. A software developer promptly writes the code and quickly gets admiration from the clients, who generally being non-technical believe to be correct. Generally there is a perception in the developer�s community that one can�t find out any tangible results rather than structured, apparently useful & beautified perspective on software quality. Due to such perspectives, majority of developers and software testing engineers generally work together, but in an hostile and uncooperative manner.
There are several ways in which the roles of developers and software testing engineers remain in conflict. The intention and commitment of developer is to building a software product that is successful. Whereas software testing engineer tries and remains committed to improve the software by having minimum risk of failure by detecting maximum number of bugs. Prime focus of the developers remain on technology, thus software development is a time intensive activity consuming lot of effort and energy. On the other hand, a good software-testing engineer always remains motivated and committed to provide the finest piece of software application to the users for solving their problem.
It has been seen in majority of the development organizations, that testing takes the back seat till the completion of the application in the development cycle. Whereas fact remains is that quality can be realized only when project management team takes a holistic consideration of the software quality from all angles & not limiting it to function only.
Integration of QA and Development for the sake of Project Goal:
Intelligent project managers focus lies on the integration of testing and development activities wherein, the key intent of the software testing engineers is not to �break the piece of code� or destroy the developers work. Ideally, software-testing engineers are meant for evaluating, examining the software product quality as human meters with sole intention of finding out if the product comes up to the stated expectations of the customer. Testers are not to behave as a complaint box meant to embarrass the developers, rather they must share with them various ways and means to make the software product even better through their inputs. Progressive thinking testers tend to create an impression of being the �ears & eyes of the developers to improve the product quality.�
Same way the software development team needs to be truly committed to the product quality and consider the testing team as an active partner of the development team. They need to understand that irrespective of the fact they have spent huge amount of time and energy on the development, yet their entire effort is bound to fail, unless the software application comes up to the desired level of quality. The testing manager thus keeps on constantly reminding the project manager about the importance of this aspect all across the development cycle. Inculcating such a perception in the development team is the prime task of the project manager.
It is the prime duty of testing engineers to coordinate their activities with the schedule of the project and work in tandem with the development team. The project manager must ensure that they are kept informed of everything going on in the development, and must be included as a part of all status review and planning meetings. This way near the close of the development cycle the risk of introduction of new bugs as well as the well-known �side effects� gets drastically reduced, thereby reducing the need for highly time-consuming regression testing.
The project manager must encourage the testing engineers to have constant touch with all members in the development team. In addition to this testing engineers must establish very good relationship with the actual users of the software, who can render great help in understanding the acceptable quality standards in a better way. Thus testing engineers can provide effective feedback to the development team directly.
Testing managers are encouraged to regularly go through the printed manuals and online help whenever available. With this exercise, lot of burden of communication among testing & development teams can get relieved.
It is important for the testing engineers to have full knowledge of the objectives of the new software application being developed, how it is expected to work, how it actually performs, the schedule of development, changes proposed if any, and the status of reported problems.
At the same time it is important for the developers to understand;
1) Problems discovered;
2) Areas of the software product having bugs;
3) What is the perception of the users on the software product;
4) What needs to be tested;
5) What shall be the schedule of testing;
6) Details of the available testing resources;
7) What sort of inputs testing engineers need to have for testing the system;
8) What is the present status of the testing activities;
When quality assurance begins working in tandem with the software development team, the testing manager smartly interacts with the project manager seeking full fledged cooperation & interest by all team members so as to come out with one of the finest software product for the client.
To successfully achieve this spiral development methodologies or iterative development processes are deployed.
Iterative versus Spiral Development Methodology:
Spiral solution development methodologies are an evolutionary reaction to the conventional waterfall methodology being a sequential approach of systems development. Waterfall model of development bears a well-known drawback of excessive time consumption in delivering the software product.
On the contrary, spiral development methodologies expedite the product delivery. In spiral development an initial functioning system is quickly built and delivered, and subsequently improved through a chain of iterations. Due to the receipt of a product with at least some of the functionality, the client also becomes happy with the quick outcome. Added advantage is that the software product can be improved day by day due to iterative feedback; say for instance, users need not precisely describe each and every feature in complete detail in the beginning of the development, and enjoys freedom of reacting on every iteration.
Beauty of the spiral development approach is that the product continuously evolves over a passage of time; it does not remain static and in traditional sense, we can say that it may never be treated as completed. The term spiral or a cycle point to the fact that the conventional sequence of �analysis� – �design� – �coding� �testing� phases is quickly carried over a smaller scale within every spiral or cycle. These phases are repeated again within every subsequent spiral. The spiral development approach is generally associated with prototype development and rapid application development.
According to the conventional requirements-based testing, the product definition needs to be frozen even before the commencement of detailed test planning. However in case of spiral development, the product specifications and definition keep on evolving continuously all the time indefinitely; meaning thereby specifications are never frozen. Thus one may never be able to document the system design and comprehensive requirements definition.
The best feasible way to carryout testing under the spiral environment, remains to �dig into the spiral.� This calls for healthy working relationship between the quality assurance teams & the development teams. The software testing engineers can�t afford to remain at a distance from the development effort, and need to be quick in testing every new version as and when it gets ready. Testers are expected to keep every test iteration as brief as possible, so that the frequent evolution of the product iterations do not get disturbed. Every iterative test focuses firstly on the changed and enhanced features. If time permits within the spiral, testing engineers can plan automated regression tests. Such automated regression tests would call for sufficient time and resources for updation within every spiral.
Clients generally expect quick turnarounds on their change requests, for which they might not even do a formal release and may even add a new system feature within the current release itself. Thus the organization must have an effective, automated regression testing setup for managing such a quickly changing scenario. The testing manager would certainly like that at least a quick regression test is carried out before the release of the new version of the product.
In a way, we can understand spiral testing as a process of incremental building of the system by starting from the base. When every phase comes to a close, the entire structure is reevaluated & revised by the development & team.
Following picture describes the application of continuous quality improvement phases of spiral system development prescribed by Dr. Deming. Spiral approach is represented by testing phases like
1) Planning phase – involving test planning;
2) Design phase – involving test case design;
3) Coding phase – involving test development;
4) Testing phase – involving test execution and evaluation;
The spiral process starts with requirements analysis and planning to find out the desired functionality. This is followed by the design of the base components for the system and the functionality estimated during the previous step. Then we build and test the functionality. This constitutes a full iteration in a spiral.
After the completion of the 1st spiral, the system is offered to the users for evaluation and offering comments on functionality. This kick starts the 2nd iteration of the spiral. This process keeps on moving in loops within the spiral, till the development team and the users come to an understanding that the system can be considered as complete. From now onwards, the process of implementation begins.
If followed systematically, the spiral approach of system development is miraculously effective in ensuring close involvement of the users thereby ensuring that the users requirements are addressed to sufficient level of their satisfaction. This approach permits the system to adapt to quickly changing business requirements during the system development. Despite many benefits, this methodology suffers from a major drawback that it is difficult for the project managers to make any firm commitment on the date of implementation of a fully functional system. One can land up in never ending loops of spirals of several quadrants, without actually putting the system into actual production. Such a never-ending loop is known as �spiral death.�
Although one can experience many pros and cons of the waterfall development methodology being too rigid as compared to too much flexibility of the spiral development. On the other hand due to the extra flexibility of the spiral approach the software development team generally tend to ignore the user wants, thus the software product generally fails to comply the user verification tests. Hence This in the spiral approach quality assurance remains a highly significant component, that is aimed at ensuring that the user requirements are satisfied on priority.
Thus to take care of the above issue, iterative methodology comes as an innovative variation of the spiral methodology, wherein the development team is compelled to reach a strategically important point where the system shall be actually implemented. In iterative methodology, system is never treated to be truly complete, but it always remains evolutionary. In this the development reaches a point of close proximity of completion of the system that is quite sufficient to satisfy the needs of the end users.
The decision of the point of implementation is taken well before beginning the system, in addition to this the number of iterations along with the goals of every iteration are also decided in advance. When the final iteration is completed, the system is implemented irrespective of its state.
Many More Articles on Software Testing Approaches
An expert on R&D, Online Training and Publishing. He is M.Tech. (Honours) and is a part of the STG team since inception.