As people in the software industry realize the importance of testing, there is no way, testing functions can be minimized on software projects. However unnecessary testing will lead to only waste of time and money. So how to ensure that the software product is tested effectively in least time and yet achieve good results?
Most project managers find it difficult to allot resources for testing at early stage of the project. They think that first they should have something developed so that it can be shown to customers and feel satisfied that they have been doing something worthwhile and the effort is visible. How wrong is this thinking?
Off course people are always hard pressed to show results as early as possible. This is only possible when they have something to show. If the project manager first thinks about testing, allots resources and tries to ensure no defects are injected in the software product being developed then he/she has something less to show to the customer as development will be lot slower. This is one factor which goes against early software testing.
But smart and experienced project managers know better. They are able to justify their early deployment of testing functions using charts to show if they don’t go this way then what bad effects will be expected later on. They will be able to convince the management and the customers that the overall time required for completion of the project will be much less if they deploy testing early in the project. It is because fixing defects later results in more defects enteering in the software product due to multplying effect of one defect passed on from say a defective design into many defects developed in the construction later.
In test driven development, business logic is tested first using unit testing before a class to implement that logic is written. This ensures that the business logic will be correctly implemented and chances of defects due to faulty business logic will be much less. Imagine if you have not done any testing at unit level and built your components. Surely at system level you are going to find defects which will be lot more. When you did testing at unit level, you ensure that chances of defects at system level will be lot less. At system level, many untested classes developed by developers will lead to so many defects that testing and removing them will take lot more time compared to when each class was tested and defects removed at unit level.
In my next post I will delve on benefits of testing techniques.