Friday, January 13, 2012

Why testing is ignored by companies?

Some of the reasons why companies feel reluctant to do quality testing are:

  1. A major problem in software testing is that it often over-runs its budget and schedule. Witttaker (1999) reports that software project management fails more often because of schedule over-runs than budget over-runs. If a schedule over-run is not possible, the time reserved for testing is often reduced (Karhu, Taipale, & Smolander, 2009). Good practices recommend testing to be given equal time as the actual code development.

  2.  Most of the companies don’t have the enough resources and money to perform quality testing. They cannot bear the cost of maintaining a separate test team.

  3. Its not only time and money, the companies might not have the expertise to perform the testing. As discussed in the previous section, the automated testing might require some sophisticated tools, which might require special training and learning. Companies might not be ready to do such an investment.

  4. Companies might not have the dedicated test environment to test for specific configurations. It involves lot of money to set up test bed for multi-platform testing

  5.  Companies feel that the time involved in testing could be better use for developing more features in their product and so try to minimize the task of testing. 

  • Whittaker, R. (1999). What went wrong? Unsuccessful information technology projects. Information Management and Computer Security 7(1) 23–29.
  • Karhu, K., Taipale, O.,&  Smolander, K. (2009). Investigating the relationship between schedules and knowledge transfer in software testing. Information and Software Technology, 51, 663–677

Thursday, January 5, 2012

Test Driven Development in outsourcing environment

In case of small software Development Company which has outsourced the development to another company, the role of the first company is like a customer who is paying for the services provided by the outsourcing company. The role of Test Driven Development (TDD) is of great advantage in this scenario.
 The client company (one who outsourced the project) ideally would like to make sure that the requirements are clearly understood by the outsourcing company. Test driven development approach involves that the test should be written first before the actual code is developed. The test serves as documentation for the functionality the code is going to deliver as the test code will be testing for some of the features to be provided by the code. The outsourcing team can discuss the tests with the client to ensure that the tests cover meets the requirements.  The tests are technical in nature with no fancy English words which gives room for multiple interpretations, so it is easier for both the parties to come to the same conclusion and avoid confusions in later stages of development.

Test driven development is usually done following Agile methodology of short sprint cycles. So the outsourcing team can give the updates on the progress of the software more frequently. This also reduces the chances of getting lost away from the requirements which is an important issue in case of outsourcing. Number of passing tests can serve as a measure for the progress of the outsourcing team. Also “Pass or Fail” measurements of the tests provide a clear picture of whether the solution meets the test and hence the requirement specification, so at any given time the client has an idea of how many requirements have been met by the outsourcing company. This is a better indication of progress compared to the traditional approach of tracking the percentage of the tasks completed.

Requirements keep changing. TDD helps the outsourcing team to easily accommodate the changing requirements from the client. So the development is more flexible. The automated tests developed as part of TDD help the outsourcing team to undergo regression testing and correct the sections of code that stopped working with the changes in the requirements.
So TDD is beneficial for the client company to effectively communicate the requirements and to track the progress on the development. For the outsourcing company TDD is beneficial from the overall software development perspective.

In case of the Big company the outsourcing is not of the entire project but of certain modules. The organization is more like geographically distributed teams working for the same project. In this situation communication is a big barrier. The language disparity might make the things worse. The TDD methodology of writing the tests first before the actual code development help in making sure that the requirements are properly understood by all geographically distributed team members.  The tests act as the requirement specification document which was the case of small software company  too.

The outsourcing company is generally in different time zone to get the development happening round the clock.  So the availability of all the employees working on the project at the same time is difficult to get this makes the project management a bit difficult. But the scrum updates in the form of mails/online scrum tools can be a solution to understanding the progress on the project.  
TDD enables anybody to just run the test cases and find out what sections of the code are failing. So if a shared version control system is being used then the coordinator can “get” the tests and run them to find out the progress and potential problems in the code. The failure cases can be later discussed over phone or email.

TDD is very helpful at the time of integration. Integrating the modules that are being developed by the outsourcing team with the other modules can be easily done with TDD. TDD ensures that at the time of module completion all the sections of code are well tested and fully functional. So it is easy to put everything together.

Thus TDD seems to be a good methodology when opting for the software outsourcing.