Содержание
- Стажер: — STLC — Методики, уровни и типы тестирования — Жизненный цикл бага — Тест-кейс — Верификация и валидация — Юзабилити — Альфа, бета и гамма — Selenium — Локаторы — XPath — и еще
- Джуниор: — Почему, когда, и зачем ты это делаешь — Если нет документации — Латентность — Регресс и повторное — Черный или белый ящик — Риск-тестирование — Что должно быть в правильном репорте — QTP — TestNG — Каскадные баги — Стандартные QA-операции — и другое важное
Стажер
Что такое тестирование, своими словами?
Проверка, соответствует ли реальное поведение программы ожидаемому.
Чем отличается позитивное тестирование от негативного?
В позитивном используют только корректные вводные (данные), и проверяют, правильно ли программа выполняет свои функции.
В негативном работают с некорректными вводными, проверяют “нештатные ситуации”.
Подробнее о негативном тестировании и отличиях от позитивного.
Перечислите этапы жизненного цикла тестирования.
Планирование тестов | Анализ требований, создание стратегии тестирования проекта |
Создание тест-кейсов | QA-инженеры пишут тест-кейсы |
Настройка тестового окружения | Настройка хард- и софт-компонентов тестового окружения |
Выполнение тестов | Выполнение тестов и сравнение ожидаемого с полученными результатами |
Закрытие цикла | Митинг QA-команды по результатам, оценка критериев завершения цикла, глядя на тестовое покрытие, качество, стоимость, потраченное время, критически важные бизнес-цели, и особенности продукта |
Подробнее — Жизненный цикл тестирования
Какие существуют общие методики тестирования?
( = стратегии тестирования, подходы к тестированию, etc)
- Тестирование черного ящика. Стратегия, которая основывается только на требованиях и спецификациях. Не обязательно знание «внутренностей» приложения, его структуры и особенностей имплементации.
- Тестирование белого ящика. Подход основан на знании кода проекта, внутренних связей, структуры и имплементации. “Белый ящик” обычно требует хороших скиллов программирования.
- Тестирование серого ящика: это стратегия дебага, в которой тестировщик имеет ограниченное знание внутренностей программы.
Подробнее о черном и белом ящике
Какие существуют уровни тестирования?
Их четыре:
- Юнит-тестирование
- Интеграционное
- Системное
- Приемочное
Что такое жизненный цикл бага?
Процесс, в котором баг (дефект) проходит через различные этапы (фазы). Цикл начинается с нахождения бага и заканчивается его закрытием, после проверки что баг больше не воспроизводится.
Детали могут немного отличаться в разных командах и проектах, это зависит от особенностей компании, состава команды, процесса (по аджайлу или нет), таймлайнов и прочего.
Что такое тест-кейс?
Это набор условий, по которым тестировщик определяет, что тестируемая система (приложение) работает нормально (соответствует требованиям).
Подробнее — Тест-кейс
В чем разница между функциональным и нефункциональным тестированием?
Функциональное тестирование | Нефункциональное тестирование |
Выполняется сначала, перед нефункциональным | Выполняется во вторую очередь |
Основано на требованиях клиента | Основано на ожиданиях клиента |
Описывает, что приложение делает | Описывает, как приложение работает |
Подробнее — Функциональное тестирование
Что такое верификация и валидация в тестировании?
Верификация — это техника статического анализа, то есть тестирование идет без выполнения кода. Например, ревью кода, его инспекция, и разбор.
Валидация — это техника динамического анализа, с выполнением кода приложения. При валидации могут быть как функциональные, так и нефункциональные техники тестирования.
Подробно о Верификации и валидации
Почему разработчики не тестируют код? Так же проще?
Основная причина — недостаток объективности. Поэтому, за исключением юнит-тестов, вся тяжесть обеспечения качества ПО возлагается на тестировщиков.
Что такое юзабилити-тестирование?
Тестовая методология, при которой конечного пользователя просят какое-то время пользоваться софтом, чтоб оценить удобство, послушать общее впечатление, и нет ли явных проблем. Хороший метод оценить пользовательский взгляд на юзабельность — дать прототип или макет приложения на начальных этапах жизненного цикла тестирования.
Какие бывают категории ошибок с выполнением требований?
- Некорректность. Требование как бы выполнено, но неправильно, некорректно; видится явное отклонение от заданной спецификации (требования клиента).
- Отсутствие. Тоже явное отклонение от спецификаций, заключается в том, что требование вообще не выполнено (не внедрено); чаще всего потому, что требование клиента не было изложено достаточно ясно и полно.
- Избыточность. В продукте есть вещи, о которых не упоминалось в требованиях. Это тоже отклонение от спецификации, но, теоретически, функция может понравиться конечному пользователю.
Не путать с категориями багов
Что такое критерии приемки?
Критерии, которым должен соответствовать компонент или приложение, чтобы быть принятыми пользователем, заказчиком, или другим уполномоченным лицом. Список требований, как приложение (или функция) должны выглядеть и работать.
Что такое предугадывание ошибок?
Одна из техник тест-дизайна, которую применяют, если нет однозначной идентификации возможной ошибки. Полностью зависит от опытности тестировщика — он должен “угадать” суть ошибки, опираясь на свой опыт, знание продукта, и требования к продукту. Зная, где ошибки имеют свойство обычно возникать и «скапливаться», может быть очень просто найти их.
В чем разница между альфа- и бета-тестированием?
- Альфа-тестирование выполняется силами компании, или представителями конечного пользователя, в офисе компании-разработчика.
- Бета-тестирование выполняют потенциальные пользователи-”добровольцы” у себя в офисе или дома.
- Альфа- делается сначала и “с самым основным”, бета — позже, и ”глубже”.
Отлично! А есть гамма-тестирование?
Да, есть. Так иногда называют последнюю стадию тестирования перед релизом, когда исправляют незначительные баги, обнаруженные при бета-тестировании, и вообще “шлифуют” приложение.
Опишите своими словами пользу от автоматизации.
- Устранение рутины часто повторяемых человеком и потому потенциально нестабильных тестов
- Упрощение операций со сложными тестами
- Параллельное выполнение тестов
- И все это без плотного контроля, требующего внимательности
- Вообще, меньше ошибок из-за человеческого фактора
- В результате — большая экономия времени и денег
Почему Selenium стал стандартом автоматизации?
Во первых, он с открытым кодом, это уже многое дает — настраиваемость под задачи; затем, бесплатный, не нужно платить за лицензию, в отличие от многих других QA-инструментов. Еще плюсы:
- Тесты пишутся на (практически) всех языках программирования — Java, Python, JS, C#. Ruby, даже Perl
- И в (практически) любой операционной системе — Windows, Mac, Linux
- И работает со всеми (практически) браузерами — Firefox, IE, Chrome, Safari, Opera
- Интегрируется с инструментами управления тест-кейсами и создания репортов, типа TestNG и JUnit
- Интегрируется с инструментами непрерывного тестирования типа Maven, Jenkins и Docker
Из чего состоит Selenium?
- IDE — Firefox-плагин записи действий пользователя и их воспроизведения. Генерирует код для Selenium WebDriver. Ленивые тестировщики, которые не хотят учить языки программирования, используют Selenium IDE как самостоятельный продукт, без преобразования записанных сценариев в программный код.
- Server — сервер для управления браузером удаленно по сети
- WebDriver — библиотека для управления браузерами. Отправляет команды браузеру через его API и получает результаты тестирования. Еще называется Selenium 2.0
- Grid — кластер Selenium-серверов для управления браузерами на разных компьютерах в сети
- (Еще есть Selenium RC, устаревшая библиотека для управления браузерами. Годится только для простых тестов. Поставляется в дистрибутиве, но не развивается. Еще называют Selenium 1.0)
Вопросы о Selenium на собеседовании — в отдельном материале.
Что такое локатор в Selenium? Какие локаторы знаете?
Локатор — указатель, однозначно идентифицирующий веб-элемент на странице.
Локаторы в Selenium:
- ID
- ClassName
- Name
- TagName
- linkText
- PartialLinkText
- Xpath
- CSS Selector
- DOM
Что такое XPath?
- XPath — XML Path, язык запросов к элементам документа XML (и HTML). Один из предпочитаемых способов поиска веб-элементов в Selenium.
- Синтаксис напоминает URL-адреса, тем что “ветки” DOM-дерева отделяются косой чертой /, вот так: /store/item/title
- Есть более 200 встроенных методов
- XPath-запросы позволяют искать любые элементы и атрибуты на странице
- XPath дает более удобные локаторы, чем например через теги или названия CSS-классов
В чем разница между абсолютным и относительным путем XPath?
- Абсолютный XPath
Это прямой, полный путь к элементу DOM, но минус в том, что если что-то изменилось в структуре страницы, то XPath падает.
Примеры абсолютного XPath:
/html/body/div[1]/section/div[1]/div
html/body/form/input[2]
- Относительный Xpath
В этом случае указание пути начинается с элемента где-то внутри DOM-структуры. То есть указание начинается с // , что значит поиск элемента где-либо на странице. Относительный как правило предпочтительный: если были изменения в структуре страницы, это не повлияет на поиск и выбор элемента в тесте, тест будет стабильнее.
Примеры относительного XPath:
//input[@id=‘app_email’]
//form/input[2] - ( без html/body/ )
Какие эксепшены в Selenium WebDriver помните?
Самые частые:
TimeoutException
NoSuchElementException
ElementNotVisibleException
StaleElementException
Здесь подробнее об эксепшенах в Selenium
В чем разница между приемочным и системным тестированием?
Приемочное (пользовательское) тестирование (UAT) — проводят конечные пользователи, оценивая, годен ли продукт. Создание почти любого продукта (или доработка по требованию) проходит через такое тестирование.
Системное тестирование — программной системы в целом. Тестирование “полной”, интегрированной (“собранной полностью”) системы. Сюда входит как функциональное, так и нефункциональное тестирование.
Как запустить браузер через WebDriver?
WebDriver driver = new FirefoxDriver();
WebDriver driver = new ChromeDriver();
WebDriver driver = new InternetExplorerDriver();
Джуниор
Когда нужно прекращать тестирование?
Когда QA-команда видит, что соблюдаются следующие условия (“майлстоуны”, вехи):
- Успешно выполнены все запланированные тест-кейсы, приближается конечная дата STLC-цикла, и все баги устранены (“финальный багфикс”).
- Приближается дедлайн тестирования, конечная дата этапа валидации, то есть ее закрытие. Пофиксили все критические и высокоприоритетные дефекты.
- Покрытие кода. Целевой показатель покрытия кода тестами (code coverage) — достигнут, пора закрывать этап валидации.
- Средняя наработка на отказ (MBTF) — до целевого показателя снизилось усредненное время непрерывной работы приложения до его сбоя (сюда не входит время на “ремонт” приложения).
Что такое латентный баг?
Такой баг существует в системе, но не вызывает каких-то видимых проблем в приложении, потому что проявляется только при стечении определенных особых условий.
Дефект, который можно было пофиксить на одном из начальных этапов цикла разработки, пофиксили на позднем этапе. Почему так хуже?
Как только дефект найден на начальном этапе, он должен быть устранен сразу, не откладывая на потом. Хорошо известно, что “отложенный” дефект приносит гораздо больше вреда — на порядок. Если на этапе формулирования требований стоимость дефекта минимальна, то на этапе выполнения тестов его “стоимость” возрастает в 8-10 раз, а на этапе поддержки продукта — в 10, а то и 20 раз.
Зачем делают сквозное тестирование?
Его цель — протестировать каждый возможный flow (порядок действий пользователя) от запуска программы до выхода из нее. Направлено на поиск зависимостей, и проверку, что корректный ввод пользователя успешно пройдет через все приложение от начала до конца.
Известно, что вероятность работы приложения (хостится в облаке и работает непрерывно), без единого отказа на протяжении 6 месяцев равна 99,999%. Какой тип тестирования позволяет это проверить?
Тестирование стабильности (надежности).
Что делать, если нет тестовой документации?
Если нет (или мало) стандартных документов (требований, спецификаций, описаний функций), что бывает если руководство слишком фанатично соблюдает эджайл или в небольших командах, тестировщики пользуются “подручными средствами”.
- Самостоятельное изучение продукта
- Стандарные методики черного ящика
- Попробовать сформулировать из косвенных источников, то есть так называемых неявных требований (регламентов, старых тестовых данных, и так далее)
- Предыдущие версии приложения
- Старое доброе ад-хок-тестирование
А также плотнее работают с разработчиками и бизнес-аналитиками.
В чем разница между регрессионным и повторным тестированием?
- Повторное проводят, чтобы убедиться, что багфикс проведен успешно. Регресс проверяет, не повлиял ли багфикс на другие модули.
- У повторного, как правило, выше приоритет (но иногда делают параллельно)
- Регрессионные тест-кейсы проверяют функциональность некоторых или всех модулей
- “Регресс” проверяет, что пройденные тест-кейсы снова пройдут успешно. Повторное выполняет тест-кейсы, которые раньше падали.
Какие тест-кейсы пишутся сначала: черного или белого ящика?
Обычно пишут первыми тест-кейсы черного ящика. Для этого нужен документ с требованиями и дизайн (план проекта). Эти документы уже доступны на начальном этапе проекта.
Тест-кейсы белого ящика нельзя делать на начальном этапе, потому что кода еще нет, потому что нужно больше ясности по архитектуре проекта.
Что такое риск-тестирование?
Которое основывается на оценках вероятности рисков. Анализируется сложность приложения, критичность функций, частота применения, количество вероятных дефектов. В приоритете — самые важные и уязвимые функции.
Подробнее: Риск-тестирование
Что пишут в стандартном баг-репорте?
- Название проекта
- Имя модуля
- Дата и время, когда найден дефект
- Кем найден
- ID дефекта и присвоенное Имя
- Снепшот дефекта
- Статус: приоритет и серьезность
- Кем устранен дефект
- Дата и время устранения
Может ли статическое тестирование обнаружить утечки в памяти?
Нет — поскольку приложение не запускается.
Автоматизируют ли тесты в Agile?
Да, и очень эффективно. Этим достигается хорошее тестовое покрытие и экономится время.
Какие тест-кейсы выгоднее всего автоматизировать?
- Смок-тесты
- Регрессионные
- Со сложными вычислениями
- DDT (data-driven-тесты)
- Нефункциональные
Как убедиться, что автоматизация принесла пользу?
- Хорошие числовые показатели по дефектам (в первую очередь DDP, процент обнаруженных дефектов)
- Автоматизация прошла быстро и действительно ускорила релиз
- Явно сэкономлен рутинный труд manual-тестировщиков
Опишите нагрузочное тестирование своими словами
Чтобы прочесть страницу на сервере, пользователь отправляет запрос, сервер отвечает; нагрузочное тестирование заключается в увеличении количества таких запросов в единицу времени, чтобы проверить “пределы выносливости” сервера. Данные фиксируются и анализируются, что позволяет найти “узкие места”.
Что такое мутационное тестирование?
Особый тип тестирования, при котором в исходный код приложения намеренно вносят ошибки, и оценивают поведение приложения.
Как “прокликать” ссылку через linkText() в Selenium?
driver.findElement(By.linkText(“Google”)).click();
Эта команда находит элемент и кликает его, осуществляя переход на страницу.
Что такое TestNG?
- Фреймворк тестирования, полезный и разработчикам
- Юнит-, функциональное, сквозное, интеграционное
- “Заточен” под Java
- Удобный встроенный механизм обработки эксепшенов
Как задать приоритет тест-кейсов в TestNG?
package TestNG; import org.testng.annotations.*; public class SettingPriority { @Test(priority=0) public void method1() {} @Test(priority=1) public void method2() {} @Test(priority=2) public void method3() {} }
Выполнение:
Method1 Method2 Method3
Опишите разницу между Selenium и QTP
Selenium | QTP |
Поддерживает все популярные браузеры | Поддерживает только IE, Firefox, Chrome. Работает только в Windows |
Открытый исходный код; продукт бесплатный | Коммерческий продукт с платной лицензией |
Тестирование только веб-приложений | Тестирование веб- и Windows-приложений |
Что такое репозиторий в Selenium?
Object Repository это коллекция веб-элементов тестируемого веб-приложения со значениями их локаторов, в формате “ключ:значение” в файле .properties (может также быть в XML-формате или Экселе).
Как ввести текст в текстовое поле через WebDriver?
Методом sendKeys()
Что такое каскадный дефект?
Дефект, спровоцированный другим дефектом. Если дефект существовал на первом этапе STLC и не был пофикшен, он может переходить на следующий этап и вызвать целый “каскад” других дефектов.
Пример. Модуль логина на странице.
На Этапе 1 создан Модуль регистрации пользователей, с обязательным вводом номера мобильного; но был допущен дефект, который заключался в том, что поле может быть и не заполнено.
На Этапе 2 создается форма Логина с именем пользователя и паролем. Одноразовый пароль отправляется на зарегистрированный номер мобильного — а номер отсутствует.
Теперь в Модуле регистрации имеем каскадный баг, который приводит к ошибке логина, или даже системной ошибке.
Как найти битые ссылки на странице WebDriver’ом ?
Требуется проверить, какие из например 20 ссылок на странице являются некорректными. Для этого нужно отправить HTTP-запросы на все ссылки, и проанализировать ответы. Применяем метод driver.get() (переход по ссылке), если ссылка корректная (документ по адресу существует), будет статус 200 (ОК). Любой другой статус будем считать признаком битой ссылки. Применяем теги <a>; в каждом теге <a> применяем атрибут ‘href’ для получения гиперссылки, и затем анализируем ответы, полученные через метод driver.get().
Как сделать скриншот в WebDriver?
Функцией TakeScreenshot, сохраняя скриншот методом getScreenshotAs().
Например,
File scrFile = ((TakeScreenshot)driver).getScreenshotAs(outputType.FILE);
Как залогиниться на сайт, когда он выдает всплывающее окно с вводом имени-пароля?
Применяется команда с эксплицитным ожиданием, проверяющая, что такое окно появилось:
WebDriverWait wait = new WebDriverWait(driver, 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
alert.authenticateUsing(new UserAndPassword(**username**, **password**));
Как пропустить (“скипнуть”) метод (или часть кода) в TestNG?
Параметр ‘enabled’ в аннотации выставляется в положение ‘false’.
@Test(enabled = false)
Что делает этот код?
WebElement sample = driver.findElement(By.xpath("//*[contains(text(), 'data')]"));
Здесь описывается переменная sample типа WebElement, применяется XPath-поиск для инициализации ее со ссылкой на элемент, содержащий строку “data”.
***
Оценить свои шансы прямо сейчас — пробный тест по основам
***
Удачи на собеседовании!