In order to carry out testing tasks testers need to have knowledge of how requirements, specifications, and designs are developed and how different methodologies can be applied. They should understand how errors and defects are introduced into the software artifacts even at early stages of the life cycle. Testers should have strong programming backgrounds to help them visualize how code works, how it behaves, and the possible defects it could contain. They also need coding experience to support the development of the test harnesses which often involve a considerable coding effort in themselves