Story Time...
Once a student counselor was addressing a gathering of students. He held up a very large and heavy book and asked the students "what will happen if I continue to hold this book in this fashion for another five minutes?". "Your hand might begin to ache, but nothing serious", replied the students. "OK, then what will happen if I hold it for five long hours amidst all difficulties and pain?", counselor asked. "You will feel a terrible pain", one student replied. "Your hand will go numb and you won't be able to recover from it for a long time" another student said. Similarly different students came up with different answers. Having patiently listened to all the opinions from the students the counselor said "Right...Actually all of them are possibilities...". Then he said "my next question is during the five hours what is the parameter that changed which caused me so much pain and agony? What makes holding the book for five minutes different from holding the book for five hours?". Students were absolutely silent. Then counselor gave the answer himself. "Well my dear students, if you look at the case closely you will see that actually nothing has changed during the five hours. The weight of the book has remained constant all the time. It is my bad attitude to hold the book so hardly for a very long time that would give me the pain. Similarly in life sometimes you need to take a break from your work and do something else, something refreshing. Trying to hold on to something so hardly will make your life a lot difficult and painful."
Enough with the stories. Today I'm going to take a small break with the Web services stuff for a change (as far as my blog is concerned). Taking breaks from usual stuff once in a while is a key aspect in effective stress management. We at WSO2 do it all the time in many ways (playing foosball, writing blogs etc.).
Software Testing...The Boring Stuff...
Any software system has a life cycle associated with it. The major phases of the software life cycle are specification, designing, implementation, testing and maintenance. The duration of each stage and how much money is spent on each stage is determined by many factors like scale of the software being developed, type of software process being used etc. However software testing is a key aspect of any software development project. A software system which has not been subjected to thorough testing are more likely to fail and cause damage during general operation. Such software systems will be harmful to the organizations that use them and also to the organizations that developed them. So software testing is increasingly becoming a very important phase of the software life cycle and already a number of software processes have been developed which give more priority to software testing. Software development techniques like RAD (Rapid Application Development) clearly emphasizes the importance of testing by adopting concepts like regression testing. Software testing could be performed in different ways at different levels using one of the many available methods. These testing methods go by various names such as unit testing, integration testing, black box testing and so on.
"Testing is so damn important. But isn't it boring?", one may ask. My answer to this question has always been and always will be "hell yeah!!!". However probably I'm not the only developer who hates software testing. Most software developers around the world are very eager and interested towards writing code and developing software rather than testing them. (When I say testing I mean testing thoroughly, based on a formal testing plan) This is a main reason why most popular IDEs today come with built-in facilities for testing programs. (So at least the basic functionalities will be tested by the developers) Also that's probably why many organizations have QA teams, so that the developers could be kept away from boring testing overhead.
A trend of the IT industry has been to automate the uniform (and boring) work and let machines handle them. Then the human employees can be assigned to jobs which require more creativity and thinking. As a result we can see more and more software developing organizations these days adopt test automation systems which put the responsibility of software testing on machines (Well almost!! A human operator should still be responsible of preparing the testing plan). Test automation saves lot of time, money and man power. Many software tools and systems have been built for test automation and available in the general software market. Two of the simplest software tools used for software testing are JUnit (for Java projects) and NUnit (for .NET projects) Test automation is a very exciting and useful process. But it is also one of the most challenging tasks a software developer can ever undertake. There are just too many parameters the developer of a test automation system should keep in his mind. (bug tracking, performance measurement, logging, reporting to name a few)
However most of the test automation systems out there are not really successful. Most of them are optimized for a certain class of projects and is not suitable for other types of projects. (Practically speaking with the wide range of technologies available for software development, developing a test automation system that can operate equally well in all scenarios is impossible.) Also the level of logging and reporting capabilities associated with most test automation systems are very irritating and of hardly any use.
Doing it WSO2 Way...
We at WSO2 has recently initiated a venture to develop a test automation system mainly for the internal use of the organization. The project is still at the conception phase and I myself and several other developers are doing research on various technologies which will be used to develop the system. Since WSO2 has a reputation for always doing things differently (or doing things better) we have decided to do this also in a different way. Instead of developing yet another test automation system we are going to blend the test automation system with many other functional elements. We are mainly thinking of a way to get the BI(Business Intelligence) concepts to enhance the functionalities provided by the test automation system. Also there will be a interop-portal from which everybody can perform tests on WSO2 projects through the WWW and analyze the results. When completed it will have state of the art reporting and presentation capabilities. Sounds cool, isn't it...?
(More information on this project will follow...)