Не совсем понимаю разницу между позитивными и негативными тестовыми сценариями.
При логине на этот форум вы
а) можете указать правильные логин/пароль,
б) можете указать неправильные логин/пароль или любую абракадабру, что одно и то же (вот вам и класс эквивалентности вводимых данных).
В обоих случаях у вас есть ожидаемый результат:
а) добро пожаловать,
б) не добро, но попытайтесь ещё раз.
И а), и б) — это позитивные сценарии, „happy path”. Вы точно знаете, что должно произойти, вы создаёте эти ситуации, и вы наблюдаете ожидаемый результат.
Ваш случай с телефоном сплошной позитив:
- Ввести номер телефона. Нажать кнопку отправить. Все ОЖИДАЕМО хорошо. Позитив.
- Ввести слишком длинный номер телефона. Нажать кнопку отправить. Ошибка, всё ОЖИДАЕМО нехорошо. Позитив.
- Ввести дурацкие спецсимволы (к слову — как именно? Какой современный телефон позволяет в поле набора номера ввести что-то кроме цифр, "*", "#" и "+"? Ну, допустим…) Нажать кнопку отправить. Ошибка. ПРЕДСКАЗУЕМАЯ и ОЖИДАЕМАЯ. Сплошной позитив.
И пусть для первого сценария логина на форуме есть только один набор символов, а для второго сценария их «12345!"№;%йцукенqwerty67890» вариантов — у вас есть ожидаемый результат и система ведёт себя точно так, как это было [кем-то когда-то] предусмотрено. Три тысячи раз вводите абракадабру в поля ввода и каждый раз должен быть один ответ: «Логин или пароль неверны». Система не ломается, не отказывает вам в обслуживании, не умирает, а продолжает работать так, как задумано. Это позитивное тестирование.
Негативное тестирование — это поиск и создание ситуаций, при которых происходит отклонение от „happy path” и наблюдается непредусмотренный результат. Это отклонение от предусмотренных сценариев и поиск непредусмотренных.
Тут слово «негатив» не в смысле ПЛОХОЕ или ДАВАЙ ЛОМАЙ, а в смысле «противоположное позитивному», как в классической лёгонькой фотографической промышленности.
Каким может быть негативное тестирование для формы логина этого форума? «В лоб» — да особо ничего не сделать, разве что вводить sql-инъекции, но современные системы к таким штукам уже устойчивы, и чем менее самодельная система, тем меньше шансов её так просто разломать.
Раньше, когда ПО было более наколеннописанным, программист мог что-то завтыкать и не предусмотреть, что в поле ввода зарплаты бухгалтер может ввести что-то ещё кроме цифр — нарочно или случайно. Ну и всё на этом, такие значения невозможно суммировать, бо integer и string хоть и могут содержать цифры, но по сути они несовместимы. Надо сперва привести тип string к типу integer и ещё много всякого, а это целый список того, что надо сделать и проверить. Из древней древности на вас смотрят тени тестировщиков, которые положили свои жизни только на ввод абракадабры в поле логина… а сегодняшние фреймворки это всё обрабатывают заранее, и бухгалтер получит алерт об ошибке ввода задолго до того, как им будет нажата кнопка «Enter» — если ему вообще позволят эту кнопку нажать.
А давайте посмотрим, как этот форум вообще устроен. Неудачный логин выводит нас на страницу /forum/index.php?app=core&module=global§ion=login&do=process — что это за модули вызываются? Что это за система вообще? ipboard? Какие у них есть уязвимости? Как до них можно добраться? Какие данные и условия передачи данных они обрабатывают, а какие нет? Берите лопату и начинайте копать в сторону — с голубого ручейка начинается река, и её можно перебить там, где ручей начинается, а не там, где река уже впадает в море.
Просто подумайте не о вводе значений, а о „happy path”, о сценарии, по которому что-то происходит. Бо если вы будете всегда привязываться к вводу данных, какие-то штуки останутся непротестированными.
Например, кнопка «Добавить товар в корзину» на любом сайте-магазине — вы ей никакие символы не передадите, однако она как раз запускает сценарий, при котором множество данных начинают свой путь откуда-то куда-то, и данные должны быть переданы без искажений. Негативное тестирование для этой кнопки — поиск ситуаций, при которых она может быть нажата, вплоть до ситуаций, когда она по каким-то причинам не может быть нажата (экран мелкий или js в браузере отключился) или данные передаются неверно.