А я вот полностью согласен с DexterI. Только бы перефразировал таким образом: на основании требований/спецификаций/архитектуры системы/итд вполне возможно составить дизайн тестов, т.е предположить как что-либо может быть протестировано. Имея готовую реализацию, тесты можно имплементировать(как блин по-русски то будет?).2 DexterI: Возможно, возможно... Я представляю что для этого нужно и сразу погружаюсь в мечтательное состояние... Это ж какого качаства спецификации должны мне предоставляться, какие прототипы... А работа дизайнера интерфейса до написания кода... Testdriven development... Эх..
У нас как-то так и происходит все, хотя идеальных прототипов/спецификаций и проч. не имеем. Составляется тестовая документация, которая, сперва, должна отвечать на вопрос ЧТО будет тестироваться и частично КАК будет тестироваться. Частично, потому что на этот момент мы можем придумать тестовые конфигурации, процедуры тестирования, наборы входных параметров. Скрипты, с помощью которых тестирование происходит, пишутся немного после, когда функциональность продукта приобритает-более менее стабильный характер.
По ходу разработки остается только вносить изменения в тестовую документацию, зависящие от деталей реализации программы, при этом дизайн тестов практически не меняется. Иногда, конечно, какая-то функциональность исчезает или появляется, тогда приходится потрудиться над серьезными изменениями в тестах.