Тестирование ПО

Содержание статьи
Изучение логов
Тестирование пользовательского ввода
Где учиться на тестировщика
Изучение спецификаций
Контроль версий
Обязанности тестировщика
Баг-трекеры
Документация
Автоматизация тестирования
Полезно знать
Книги и статьи о тестировании
Словарь
Теория
Реальные примеры работы
Другие статьи о Тестировании

Цель работы тестировщика

Зачем нужно тестировать софт?

Идёт 2021-й год и такой вопрос задают реже, но ответ на него знать нужно.

Если вы тестируете свой личный софт - вам виднее.

Если вы работаете тестировщиком в каком то проекте, то ваша цель - предоставить максимально объективную информацию о софте вашему менеджеру, который будет решать можно такой софт отправлять в продакшн или нет для того чтобы компания заработала больше денег.

Тестировщик вообще нужен бизнесу для того, чтобы снять с разработчиков самую простую работу. Просто потому, что время тестировщика дешевле.

Изучение логов

Если у Вас возникли проблемы с работой клиента первым делом стоит изучить логи.

Если Вы начали заниматься IT совем недавно и не знаете, что такое логи - попробую объяснить в двух словах.

Логи - это обычно текстовые файлы в которые программы записывают результаты своей работы.

Степень детализации может отличаться очень сильно. От никаких или минимальных записей вроде

2020-02-10-16-06-01T Включился
2020-02-10-16-08-23T Выключился

До записи каждого действия.

Часто одной и той же программе можно указать разный уровень подробности логов.

Типичные уровни логов - слева на право детализация растёт

OFF - FATAL - ERROR - WARN - INFO - DEBUG - TRACE - ALL

Лог файл обычно называется по дате, например 2020-02-10-heiheiru-log.txt или 2020-02-10-heiheiru.log

Расположение лог файла обычно зависит от конкретного проекта, например:

У одного клиента логи могут лежать в

C:\Users\andreyolegovich.ru\AppData \Roaming\AO\AO_Client\logs

а у другого в

C:\ProgramData\AO2\AOClientPC

Зачастую полезно посмотреть, что именно клиент пытается отправить на сервер.

Откройте логи с помощью Notepad++ и сделайте поиск по слову POST

Советую не пренебрегать опцией Find All in Current Document.

Find all in current document

Зачастую смотреть полный лог нет смысла. В нём может быть очень много мусора, который легко убрать с помощью текстовых препроцессоров.

О том как это сделать Вы можете прочитать в моей статье «Текстовые препроцессоры: SED, Grep, AWK» и как бонус - «Комады Bash для тестировщика»

Кто должен читать логи: тестировщик или разработчик

Однажды мне задали такой вопрос, и я здесь вполне категоричен - конечно, тестировщик.

Логи для того и созданы, чтобы когда софт работает неправильно тестировщик мог, например по таймкоду, найти проблемное место и приложить нужный кусок лога к баг-репорту.

Конечно, разработчик и сам может всё это сделать. Но его время стоит дороже и для бизнеса выгодно, чтобы всё что может делать тестировщик делал тестировщик.

Тестирование пользовательского ввода

Если есть хотя бы небольшой шанс того, что Вы будете тестировать что-то связаннное с user input, почитайте статью Big List of Naughty Strings

Изучение спецификаций

Перед началом работы над новым проектом Вам нужно будет изучить одну или несколько спецификаций.

Несколько - потому что проект может иметь спецификацию, которая описывает бизнес логику, спецификацию интерфейсов и, например, документацию для поддержки проекта.

То какая информация попадает в одну спецификацию, а какая в другую зачастую завист от менеджера ведущего проект, либо может быть чётко прописана в корпоративных правилах.

Interfaces - спецификация интерфесов

В любом случае, в спецификации интерфейсов мы ожидаем увидеть описание API и задача тестировщика здесь сводится к тому, чтобы

1.) Связать бизнес логику с запросами, описанным в спецификации интерфейсов.

2.) Проверить качество спецификации а именно уточнить не забыли ли разработчики описать какое-либо действие. Насколько понятно названы запросы и т.д.

Так как логика разработчиков отличается от логики тестировщиков бывает полезным уточнить какие из перечисленных запросов создаются непосредственно клиентами а какие являются вторичными, то есть нуждаются в запросе триггере, который приходит от клиента или бэкенда.

Результатом проверки спецификации интерфейсов будет карта составленная в виде документа, либо просто в воображении тестировщика, которая накладывает на бизнес процессы соответсвующием им запросы либо цепочки запросов.

Контроль версий

В прошлом для контроля версий использовались различные решения, например SVN , но уже довольно продолжительное время стандартом считается GIT поэтому советую изучать именно его.

Руководств и тренировочных материалов довольно много, моё можете найти в статье «GIT для начинающих»

gitlab-basics

requestb.in
en.wikipedia.org/wiki/Test_stub
Валидатор JSON

Чем занимается тестировщик

Нужно помнить, что тестирование сильно зависит от того, в какой компании работает тестировщик.

Это очевидно, но тем не менее акцентирую внимание на том, что очень сложно стать универсальным тестировщиком, разве что сменив несколько работодателей из разных IT сфер.

Я прочитал некоторые вакансии в рунете и в LinkedIn и сделал подборку популярных требований и описаний задач.

Постараюсь перевести их на понятный новичку язык.

Тестирование отдельных задач в тестовом и рабочем окружениях

Имеется в виду, что Вам придётся иногда тестировать в продакшене - то есть не dev а prod версию.

Если Вы тестируете сервер, который хостится Вашей конторой, то разница только в ответственности.

Если сервер на стороне клиента - готовьтесь подключаться по VPN, настраивать SSH туннель, а в худшем случае - разбираться в SSL сертификатах.

Покрытие тест-кейсами функционала системы

Означает, что нужно изучить спецификацию и понять, что можно протестировать. Затем описать эти тесты.

Проверка входящих баг-репортов из Tech Support

Клиенты обычно жалуются на баги и не только на баги.

Поддержка не всегда может быстро понять, что к чему, поэтому проще переслать баг-репорт тому тестировщику, который знаком с проектом.

Вы проверяете воспроизводится ли баг в тестовом окружении, если нет, то ковыряетесь в production логах где-нибудь на Kibana.

Функциональное тестирование и отслеживание качества выпускаемого сервиса

Здесь всё понятно - проверять нужно выполняет ли продукт свою функцию. После этого проверить насколько качественно и удобно для пользователя он это делает

Анализ функциональности сервиса

Может означать всё что угодно. Похоже скорее на задание для исследовательского тестирования.

Общение с командой разработки и менеджерами, принятие совместных решений об улучшении сервиса.

Это неотъемлемая часть работы практически любого инженера по тестированию, причём не только софта.

Локализация и документирование дефектов.

Под локализацией обычно понимают выяснение источника проблемы. Это выливается в поиск логов, относящихся непосредственно к ошибке и отслеживанию stack trace.

Документация это: описать что вызывает баг, какое действие клиента или какой конкертно запрос. Максимальное количество полезной информации приветствуется.

Обязательно указывать версию ПО в которой был получен баг и приложить логи.

Оптимизация процесса тестирования внутри команды и постановка задач разработчикам автотестов

Подразумевается, что тестировщик-мануальщик, должен общаться с тестировщиком-автоматизатором и просить у него разработать инструменты для автоматизации. Потом эти инструменты нужно изучить, применить и описать - смотрите следующий пункт.

Запуск и анализ результатов автотестов

Это очевидное продолжение предыдущего пункта.

Проведение ручного функционального тестирования

Функциональное тестирование мы уже обсудили, в этом пункте ключевое слово - ручное. Нужно будет кликать мышкой, делать запросы к API, нажимать на кнопки, всё зависит от продукта. Если Ваша компания производит мухобойки - возможно придётся бить мух.

Участие в регрессионном тестировании

Регрессионное тестирование обычно означает следующее. У Вас уже есть работающий продукт, но к нему пришёл Change Request (CR) и разработчики сделали новую фичу.

Фича работает, но теперь нужно понять не сломала ли новая фича что-то из старого функционала.

Для этого Вам придётся проделать все известные манипуляции с продуктом. Обычно под Regression Test есть отдельный документ, если Вы придумали что-то новое - просто добавляете это туда. Довольно скучный процесс.

Ведение тестовой документации, подготовка тест кейсов

Рутина, без которой никуда особенно в большиъ компаниях.

Регистрация найденных дефектов в баг-трекере, контроль их исправления.

Назначение баг-трекеров это упрощение контроля за ошибками.

Трекеров очень много, один из самых популярных это Jira.

Можете изучить неполный список баг-трекеров .

Если Вы не знакомы с принципами их работы рекомендую изучть Jira причём заранее - чтобы во время не иметь ненужного пробела в резюме. Отпишитесь в комментариях чем пользуются в Вашей компании.

Взаимодействие с командой разработки.

Взаимодействие с разработчиками - это весело. Пример из жизни: в логах найдена неизвестная ошибка

2019-01-10 10:01:15 [ERROR]: Something is not ok

О ней написан репорт. Разработчик выпустил фикс. Тестировщик проверил и не увидев больше этого предупреждения в логах зааксептил.

Прошла неделя, тестировщик тестирует совершенно другую историю и вдруг

2019-01-17 10:01:15 [DEBUG]: Something is not ok

Тестировщик звонит разработчику и говорит, что ошибка снова появилась.

Первый вопрос разработчика - « А на каком уровне логов ты смотришь?»

Оказалось, что разработчик просто глубже закопал эту ошибку - теперь она не видна на ERROR уровне лога а видна только на DEBUG.

Вот такой фикс.

Присылайте свои истории в комментарии. Лучшие я включу в статью.

Куда складывают задачи и/или баги

Список планировщиков проектов и багтрекеров:

Попарное и общее сравнение:

На сайте wikipedia

На сайте softwareinsider.com например Jira vs. Yodiz

На сайте Jira

Где пишут документацию

Confluence

Автоматизация тестирования

Обычно под автоматизацией тестирования подразумевается одно из трёх:

  1. Использование софта для симуляции действия пользователя на сайте.
  2. Автоматическое тестировани API
  3. Внедрение тестовых скриптов в существующий CI/CD процесс. Это совсем другая история и учить нужно инструмент, который используют для CI/CD. Это может быть TeamCity, GitLab, Jenkins или что-то ещё.

В автотестировании сайтов, или как это можно ещё назвать - Web UI Testing, в основном всё завязано на Selenium

Можно изучить эту библиотеку и использовать вместе с одним из следующих языков программирования:

Выбор языка

Так как Selenium поддерживает работу с совершенно разными языками программирования перед начинающим тестировщиков может встать вопрос - на каком из них стоит изучать автоматизацию.

Если вы уже работаете тестировщиком и хотите начать автоматизацию в той же компании - ответить на этот вопрос сможет DevOps инженер или тот, кто выполняет эту функцию, сисадмин или кто-то из разработчиков.

Решающий фактор - это имеющаяся инфраструктура. Ваши автотесты будут интергрированы в существующий CI/CD процесс и делать это желательно самым органичным образом. Если все используют, скажем, Maven то и тесты желательно писать на Java а если везде Ruby то вам возможно нужно присмотреться к Watir а не к чистому Selenium.

Что делать, если вы пока нигде не работаете?

Советую изучить сайты с вакансиями и выучить ту связку, на которую больше спрос.

Я пользовался связками

Python я выбрал, потому что немного знал язык + он присутствует во многих вакансиях.

Java я выбрал, потому что это наиболее родной язык, часть Selenium написано на Java + в интернете довольно много самоучителей именно по этой связке.

Selenium

Учить сам Selenium необязательно. Существует несколько фреймворков более высокого уровня с «более простыми» командами, рассчитанные на непрограммистов.

Самый популярный из них это, пожалуй Robot Framework

Есть ещё Watir

Cucumber и другие.

Полезно для тестировщика

Иметь:


опыт работы по scrum или знание теории данной методологии

Понимание процесса разработки и тестирования;
знание и понимание процессов Agile

Frontend тестировщикам пригодится опыт тестирования frontend-а клиентских приложений.

Знать:

что такое регрессия
smoke/UAT-тестирование
positive/negative тест-кейсы
тест-сьюты
тест-раны
про граничные значения,
про типы вводимых данных,
про необходимость соответствия дизайн-макетам в тестировании.
баг-трекинговые системы (JIRA или другие);

Основные команды Linux - читайте мою статью Комады Bash для тестировщика

Английский язык - читайте мою статью Советы по изучению английского языка

Уметь:

Какими качествами должен обладать тестировщик

Необходимые качества можно разделить на несколько групп.

Первая связана с особенностями работы: нужно постоянно искать какие-то недочёты, для успеха в этой деятельности нужны свойства характера, обычно описываемые одним из нижеперечисленных терминов.

Тестировщик работает в связке с несколькими специалистами разного профиля: разработчиками, менеджерами, другими тестировщиками.

То, что нужно для успешного взаимодействия с ними, обычно описывают как

Если продукт быстро развивается, либо довольно сложный, либо тестировщика берут с прицелом на создание отдела QA с нуля - важными будут

Неторые работодатели указывают и общечеловеческие качества, обладая которыми тестировщику будет легче влиться в коллектив. Эти качества нужны почти во всех профессиях

Если остались вопросы - смело задавайте их в комментариях либо воспользуйтесь поиском по сайту

Поиск по сайту

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: