The Importance of TestingAbout Blog Projects
Why can't we let the public decide?
Thanks to the capabilities of the modern day computer and the growth of the Internet, society has become fixated around immediate results. Fast speeds and high performance are now a necessity and it is very easy to go elsewhere if a website is not up to the task. Due to this, combined with the ever increasing capabilities of today's products, testing has never been more important. As an example, take Microsoft's Windows 3.x or a more up-to-date Windows Vista (to name but a few). Microsoft were so keen to release their shiny new product that they seemed more interested in marketing it than ironing out bugs like the famous blue screen of death, causing a wave of internet abuse and disappointed rants. The Internet really can make or break your product if you don't take the time to test it.
How can I fix every bug?
Obviously there is no way of assuring a one hundred percent clean piece of code, but we can try! All products out there are subject to error detection under the public eye, but it is almost unforgivable if those errors are either found almost immediately, or continue to be a problem in later releases. The trick is finding as many errors as possible, before the product's release date. If this gets postponed for any reason, it could damage future sales. As I mentioned before, people want things now and most will simply find another similar product out there to use. There are many ways to find issues, loosely fitting into the categories User Testing and Functional Testing, such as Usability Testing and Performance Testing. The main concerns when testing code are Can I break it? and Is it easy to understand?.
Unit testing is a great way of finding small errors that are hidden within the overall product code, because it can isolate individual components. Unit tests are normally automated, returning an error if they find something that was unexpected. Clearly the programmer needs to understand each component and what they are expecting, since these tests normally return a boolean value. The easiest and more straight-forward way of creating a unit test would be to use a framework such as JUnit. Using a framework enables all developers to keep track of their unit tests and it is clear where and when something goes wrong. For more information click here. Testing the product as a whole can be very time consuming and subjective. There may be a certain order you follow when using the product, or you simply never some across a certain rarely used component. Unit tests can be created to isolate every component and returning a boolean ensures the test either does what is expected or doesn't. It is entirely objective.
As well as functional tests, looking at the inner workings of the code behind the product, usability tests can be designed to get a feel for the user's experience. Usually, this involves manually trawling through the program, trying to find and issues, but some of it can be automated. Selenium is a great tool for generating different routes that a user may take, automatically clicking on buttons and submitting forms. It can open in the browser so you can even watch its progress, which would either finish with no errors, or flag up a line of code which is causing a problem. However, this is where its limits lie, it clearly can't tell you how it "felt" during its experiences with the site! That's where human testing comes into play.
In order to get a feel for how the program impacts on its target audience, the only effective way is to get "real" people to test it. I say "real" in the loosest of terms, since I am referring to teams of professional testers and not simply the general public, which really is the best test for a program. The advantage of having a team of trained testers is that they know how to find loop holes in programs and can really test it to its usability limits. Getting a number of personal views is the most objective way of ironing out any issues. The problem with using testers however is the fact that they have a general idea of how to work such programs, since they do it all the time. The best people to test a program are those with no experience at all, maybe managers of other teams, or people who work in customer relations. Of course, the best way of knowing whether your product can withstand the onslaught of users, from any background, is to apply ALL these testing approaches and more!
A commonly used form of testing within industry is Acceptance Testing, which ensures all initial requirements are met by the finished product. This could quite easily be automated, but a requirement such as "Does it look right in all browsers" will probably need some form of user testing as well. A key member of any User Acceptance Test team will need to be very objective in their approach to comparative analysis of all the business requirements. It is very important that they distance themselves from the products capabilities and simply focus on the basic points that it was initially designed to meet. Companies can loose a great deal if these points are not met, no matter how good the end result is. Here is a guide to get started with Acceptance Testing, avoiding the common mistakes.
Other Forms of Testing
There are many other ways to test your product, deciding upon which depends on your target audience. If for example you intend on distributing globally, load testing is a must. Selenium can be used to start with, as you can specify multiple threads, but there are others. Here are a list of places to start. You may also need to carry out some stress testing, which is basically load testing until the product fails. This is a great way of testing its capabilities before releasing it to the public, as it is better for any failures to occur within the testing phase, so that further development can be applied, without impairing customer sales. Compatibility testing would also be beneficial, since it prepares your product for use on many different operating systems and devices. If your were developing a mobile application, you may want to make sure it works on all major devices, such as Android, IPhone and Blackberry. If you were developing a web application, you would need to ensure it works in major browsers such as IE7/8/9, Google Chrome and Firefox (Even Safari if you are feeling productive!).
What if I Can't Test Everything?
Product testing is clearly a big deal if you want your product to be a success, so you wont be able to cover everything. The key thing to remember is not to leave too little time for it, make testing a big part of the product life cycle. Depending on your resources and target audience, you may be able to get away with a few key areas, but I would recommend that Load Testing and User Testing are always carried out, because they are at the forefront of the customer experience. If your product can't handle the pressure of lots of users, you have already marked your limitations when in comes to profit, and if it can't hold the user's attention then that's the least of your worries! Your product needs to be simple and easy to understand, because nobody has time to figure these things out any more. Successful load monitoring can also help you to prepare a fail-safe if the strain becomes too large. Once you are happy that these issues are solved, try to think of effective unit tests that will help iron out any hidden bugs. After this first stage, you can be happy that you have a fairly reliable product, which can withstand a surge in customer use. You can then look at installing some ideas for expanding the product with addons and upgrades, but that is going beyond the scope of this article.
Testing is Just the Beginning
A sturdy product that can last up to and beyond its expected lifespan is a worthy candidate for upgrading. If you can develop a product with room to grow, then there is a much higher chance of it growing rapidly. For cases like this, testing is even more important, because you may find yourself struggling to keep up. The first few weeks after release are the most crucial and will flag up a lot of the "obvious" issues. These need to be tackled immediately, as well as any further testing around the implicated area. It is one thing to test the product initially, but if you want it to expand and adapt, the testing process should never really finish. Work out a strategy, develop a maintenace plan and keep finding those issues. Without a dedicated, organised and objective test team, you may find yourself, throwing in the towell early and trying to find the next one-hit-wonder product.