На уровне юнит-, компонентного и интеграционного тестирования - это мозг тестирования. Хороший программист - это тот, чей код сразу пригоден к использованию и редко возвращается на доработку. Поэтому он должен быть в какой-то мере и системным аналитиком, и тестировщиком.
Если возьмёшь стандартную модель водопада, то манки-кодер - это нижний слой, малоопытный программист - два нижних слоя, а полноценный программист - 4 нижних слоя.
А бизнес слой - это уже область заказчика.
Но тут есть нюанс. Особенность программирования - в том, что оно устраняет из процесса повторяющиеся операции, поэтому от программиста вряд ли стоит ожидать, что он вручную день за днём будет исполнять одни и те же тесты. Пару раз прогнал, понял как работает, автоматизировал. Этим он отличается от выделенного тестировщика, который не может самостоятельно автоматизировать свою работу, а может в лучшем случае подобрать худо-бедно подходящий готовый инструмент.
Кстати, все нынешние модные методологии разработки являются попыткой урезать модель водопада ("принял постановку - формализовал - спроектировал - сделал - проверил"

и работают, только пока кто-то в цепочке самостоятельно закрывает выброшенные участки водопада на свой страх и риск. Например, скрам - это выброшенные фазы функционального и технического проектирования (и соответствующие им фазы тестирования). Когда его реализуют "по книжке", с командой, набранной с нуля, получается много бестолковой суеты и софт низкого качества на выходе (а то и вообще без софта).
И у манки-кодеров, конечно, свой взгляд на это дело, потому что кроме своего самого нижнего квадратика они ничего не видят, но считают себя самым важным звеном.