1) Есть различные фазы тестирования ПО: модульное, интеграционное, системное итд
Как правило используются различные инструменты для автоматического тестирования.
Что бы создать автоматизированный тест, необходимы навыки программирования.
Соответственно программирование теста и называется "писать тест"
2)
Модульное тестирование (юнит-тестирование) — тестируется минимально возможный для тестирования компонент, например, отдельный класс или функция. Часто модульное тестирование осуществляется разработчиками ПО.
Интеграционное тестирование — тестируются интерфейсы между компонентами, подсистемами или системами. При наличии резерва времени на данной стадии тестирование ведётся итерационно, с постепенным подключением последующих подсистем.
Системное тестирование — тестируется интегрированная система на её соответствие требованиям.
https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%81%D...
3) Море. Зависит от вида ПО (сайт, десктоп, мобильное приложение), языка, итд.
Мы в той или иной степени используем PHPunit, Codeception, Selenium
4) Можно
в том числеи тыкать, да. Но не просто, а осмысленно - с проверкой граничных значений.
Называется ручное тестирование, некоторые вещи другими способами проверять очень геморройно.