Программирование нужно знать на очень хорошем уровне. И если задача программиста вывернуть мозг и сделать, чтобы работало, то задача тестировщика дважды вывернуть мозг и проверить, что работает, так как написано в ТЗ. А это порой сложнее, чем просто писать код. Как говорится, хорошего кода не бывает, есть недоработка тестировщика.)