5_3_1_1_intro.md 44 KB

     
  содержание Жизненный цикл тестирования

Тестирование и тестировщики

Что такое тестирование и откуда оно появилось

В первую очередь дадим определение тестирования ПО, чтобы чётче понимать, о чём пойдёт речь.

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

На протяжении десятилетий развития разработки ПО к вопросам тестирования и обеспечения качества подходили очень и очень по-разному. Можно выделить несколько основных «эпох тестирования».

В 50–60-х годах прошлого века процесс тестирования был предельно формализован, отделён от процесса непосредственной разработки ПО и «математизирован». Фактически тестирование представляло собой скорее отладку программ (debugging). Существовала концепция т.н. «исчерпывающего тестирования (exhaustive testing)» — проверки всех возможных путей выполнения кода со всеми возможными входными данными. Но очень скоро было выяснено, что исчерпывающее тестирование невозможно, т.к. количество возможных путей и входных данных очень велико, а также при таком подходе сложно найти проблемы в документации.

В 70-х годах фактически родились две фундаментальные идеи тестирования: тестирование сначала рассматривалось как процесс доказательства работоспособности программы в некоторых заданных условиях (positive testing), а затем — строго наоборот: как процесс доказательства неработоспособности программы в некоторых заданных условиях (negative testing). Это внутреннее противоречие не только не исчезло со временем, но и в наши дни многими авторами совершенно справедливо отмечается как две взаимодополняющие цели тестирования.

Отметим, что «процесс доказательства неработоспособности программы» ценится чуть больше, т.к. не позволяет закрывать глаза на обнаруженные проблемы.

Внимание! Скорее всего, именно из этих рассуждений проистекает неверное понимание того, что негативные тест-кейсы должны заканчиваться возникновением сбоев и отказов в приложении. Нет, это не так. Негативные тест-кейсы пытаются вызвать сбои и отказы, но корректно работающее приложение выдерживает это испытание и продолжает работать верно. Также отметим, что ожидаемым результатом негативных тест-кейсов является именно корректное поведение приложения, а сами негативные тест-кейсы считаются пройденными успешно, если им не удалось «поломать» приложение.

Итак, ещё раз самое важное, что тестирование «приобрело» в 70-е годы:

  • тестирование позволяет удостовериться, что программа соответствует требованиям;
  • тестирование позволяет определить условия, при которых программа ведёт себя некорректно.

В 80-х годах произошло ключевое изменение места тестирования в разработке ПО: вместо одной из финальных стадий создания проекта тестирование стало применяться на протяжении всего цикла разработки (software lifecycle) (также см. описание итерационной инкрементальной модели разработки ПО в лекции «Модели разработки ПО»), что позволило в очень многих случаях не только быстро обнаруживать и устранять проблемы, но даже предсказывать и предотвращать их появление. В этот же период времени отмечено бурное развитие и формализация методологий тестирования и появление первых элементарных попыток автоматизировать тестирование.

В 90-х годах произошёл переход от тестирования как такового к более всеобъемлющему процессу, который называется «обеспечение качества (quality assurance)», охватывает весь цикл разработки ПО и затрагивает процессы планирования, проектирования, создания и выполнения тест-кейсов, поддержку имеющихся тест-кейсов и тестовых окружений. Тестирование вышло на качественно новый уровень, который естественным образом привёл к дальнейшему развитию методологий, появлению достаточно мощных инструментов управления процессом тестирования и инструментальных средств автоматизации тестирования, уже вполне похожих на своих нынешних потомков.

В нулевые годы нынешнего века развитие тестирования продолжалось в контексте поиска всё новых и новых путей, методологий, техник и подходов к обеспечению качества. Серьёзное влияние на понимание тестирования оказало появление гибких методологий разработки и таких подходов, как «разработка под управлением тестированием (test-driven development, TDD)». Автоматизация тестирования уже воспринималась как обычная неотъемлемая часть большинства проектов, а также стали популярны идеи о том, что во главу процесса тестирования следует ставить не соответствие программы требованиям, а её способность предоставить конечному пользователю возможность эффективно решать свои задачи.

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

Кто такой тестировщик и что он делает

Если поискать информацию по ключевым фразам из названия этой главы, можно найти уйму совершенно противоречивых ответов. И дело здесь в первую очередь в том, что авторы большинства «должностных обязанностей» приписывают всей профессии некий утрированный набор характеристик отдельных её представителей.

В то же время даже в ЕКСД разделены должности «специалиста по тестированию программного обеспечения» и «тестировщика программного обеспечения».

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

Упрощённо отразим это в таблице.

Квалификация Небольшие фирмы Большие фирмы
Низкая Подмастерье, часто предоставленный сам себе в решении задач. Рядовой участник проектов, одновременно проходящий интенсивное повышение квалификации.
Высокая Мастер на все руки с богатым, но не всегда структурированным опытом. Эксперт в одной или нескольких областях, консультант, руководитель направления.

Поскольку чем выше квалификация специалиста, тем шире его выбор мест работы (даже в рамках одной крупной фирмы), основное внимание уделим именно квалификационным особенностям работы тестировщика.

В начале карьеры любой специалист (и тестировщик не является исключением) является исполнителем и учеником. Достаточно хорошо понимать, что такое тест-кейсы, отчёты о дефектах, уметь читать требования, пользоваться парой инструментальных средств и хорошо уживаться в команде.

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

Если выразить образно главную цель тестировщика, то она будет звучать так: «понимать, что в настоящий момент необходимо проекту, получает ли проект это необходимое в должной мере, и, если нет, как изменить ситуацию к лучшему». Звучит похоже на цель руководителя проекта, верно? Верно. Начиная с некоторого уровня развития, IT-специалисты, по большому счёту, различаются лишь наборами технических навыков и основной областью приложения этих навыков.

Так какие же технические навыки нужны, чтобы успешно начать работать тестировщиком?

  • Знание иностранных языков. Да, это не технический навык. Можете считать это аксиомой: «нет знания английского — нет карьеры в IT». Другие иностранные языки тоже приветствуются, но английский первичен.
  • Уверенное владение компьютером на уровне по-настоящему продвинутого пользователя и желание постоянно развиваться в этой области. Можете ли вы представить себе профессионального повара, который не может пожарить картошку (не «не обязан», а «не умеет в принципе»)? Выглядит странно? Не менее странно выглядит «IT’шник» (именно так, в кавычках), неспособный набрать вменяемо отформатированный текст, скопировать файл по сети, развернуть виртуальную машину или выполнить любое иное повседневное рутинное действие.
  • Программирование. Оно на порядки упрощает жизнь любому IT’шнику — и тестировщику в первую очередь. Можно ли тестировать без знания программирования? Да, можно. Можно ли это делать по-настоящему хорошо? Нет.
  • Базы данных и язык SQL. Здесь от тестировщика тоже не требуется квалификация на уровне узких специалистов, но минимальные навыки работы с наиболее распространёнными СУБД и умение писать простые запросы можно считать обязательными.
  • Понимание принципов работы сетей и операционных систем. Хотя бы на минимальном уровне, позволяющем провести диагностику проблемы и решить её своими силами, если это возможно.
  • Понимание принципов работы веб-приложений и мобильных приложений. В наши дни почти всё пишется именно в виде таких приложений, и понимание соответствующих технологий становится обязательным для эффективного тестирования.

Надеюсь, вы обратили внимание на то, что самого тестирования в списке нет. Всё верно, ведь ему посвящён весь этот курс.

В завершение главы также отметим личностные качества, позволяющие тестировщику быстрее стать отличным специалистом:

  • повышенная ответственность и исполнительность;
  • хорошие коммуникативные навыки, способность ясно, быстро, чётко выражать свои мысли;
  • терпение, усидчивость, внимательность к деталям, наблюдательность;
  • хорошее абстрактное и аналитическое мышление;
  • способность ставить нестандартные эксперименты, склонность к исследовательской деятельности.

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

Что нужно знать и уметь и чему можно научиться

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

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

  • Профессиональные — это именно «тестировщицкие», ключевые навыки, отличающие тестировщика от других IT-специалистов.
  • Технические — это общие навыки в области IT, которыми тем не менее должен обладать и тестировщик.
  • Личностные — в русском языке термин «soft skills» часто переводят как «навыки межличностного общения», но исходный термин несколько шире.

Профессиональные навыки

Предметная область Начальный уровень Уровень младшего или среднего специфлиста
Процессы тестирования и разработки программного обеспечения
Процесс тестирования ПО Этому вопросу посвящена глава «Процессы тестирования и разработки ПО Глубокое понимание стадий процесса тестирования, их взаимосвязи и взаимовлияния, умение планировать собственную работу в рамках полученного задания в зависимости от стадии тестирования
Процесс разработки ПО Общее понимание моделей разработки ПО, их связи с тестированием, умение расставлять приоритеты в собственной работе в зависимости от стадии развития проекта
Работа с документацией
Анализ требований Этому вопросу посвящена глава «Тестирование документации и требований» Умение определять взаимосвязи и взаимозависимость между различными уровнями и формами представления требований, умение формулировать вопросы с целью уточнения неясных моментов
Тестирование требований Знание свойств хороших требований и наборов требований, умение анализировать требования с целью выявления их недостатков, умение устранять недостатки в требованиях, умение применять техники повышения качества требований
Управление требованиями Не требуется Общее понимание процессов выявления, документирования, анализа и модификации требований
Бизнес-анализ Общее понимание процессов выявления и документирования различных уровней и форм представления требований
Оценка и планирование
Создание плана тестирования Эти вопросы частично затронуты в лаве «Оценка трудозатрат, планирование и отчётность», но их лубокое понимание требует отдельного длительного изучения Общее понимание принципов планирования в контексте тестирования, умение использовать готовый тест-план для планирования собственной работы
Создание стратегии тестирования Общее понимание принципов построения стратегии тестирования, умение использовать готовую стратегию для планирования собственной работы
Оценка трудозатрат Общее понимание принципов оценки трудозатрат, умение оценивать собственные трудозатраты при планировании собственной работы
Работа с тест-кейсами
Создание чек-листов Этому вопросу посвящена глава «Чек-листы, тест-кейсы, наборы тест-кейсов» Твёрдое умение использовать техники и подходы к проектированию тестовых испытаний, умение декомпозировать тестируемые объекты и поставленные задачи, умение создавать чек-листы
Создание тест-кейсов Твёрдое умение оформлять тест-кейсы согласно принятым шаблонам, умение анализировать готовые тест-кейсы, обнаруживать и устранять имеющиеся в них недостатки
Управление тест-кейсами Не требуется Общее понимание процессов создания, модификации и повышения качества тест-кейсов
Методологии тестирования
Функциональное и доменное тести-рование Этому вопросу посвящена глава «Подробная классификация тестирования» Знание видов тестирования, твёрдое умение использовать техники и подходы к проектированию тестовых испытаний, умение создавать чек-листы и тест-кейсы, умение создавать отчёты о дефектах
Тестирование интерфейса пользователя Не требуется Умение проводить тестирование интерфейса пользователя на основе готовых тестовых сценариев или в рамках исследовательского тестирования
Исследовательское тестирование Общее умение использовать матрицы для быстрого определения сценариев тестирования, общее умение проводить новые тесты на основе результатов только что выполненных
Интеграционное тестирование Умение проводить интеграционное тестирование на основе готовых тестовых сценариев
Локализационное тестирование Умение проводить локализационное тестирование на основе готовых тестовых сценариев
Инсталляционное тестирование Умение проводить инсталляционное тестирование на основе готовых тестовых сценариев
Регрессионное тестирование Общее понимание принципов организации регрессионного тестирования, умение проводить регрессионное тестирование по готовым планам
Работа с отчётами о дефектах
Создание отчётов о дефектах Этому вопросу посвящена глава «Отчёты о дефектах» Твёрдое знание жизненного цикла отчёта об ошибке, твёрдое умение создавать отчёты о дефектах согласно принятым шаблонам, умение анализировать готовые отчёты, обнаруживать и устранять имеющиеся в них недостатки
Анализ причин возникновения ошибки Не требуется Базовое умение исследовать приложение с целью выявления источника (причины) ошибки, элементарное умение формировать рекомендации по устранению ошибки
Использование баг-трекинговых систем Умение использовать баг-трекинговые системы на всех стадиях жизненного цикла отчётов о дефектах
Работа с отчётами о результатах тестирования
Создание отчётов о результатах тестирования Не требуется, но частично рассмотрено в главе «Оценка трудозатрат, планирование и отчётность» Умение предоставлять необходимую информацию для формирования отчёта о результатах тестирования, умение анализировать готовые отчёты о результатах тестирования с целью уточнения планирования собственной работы

Технические навыки

Предметная область Начальный уровень Уровень младшего или среднего специфлиста
Операционные системы
Windows Использование на ровне уверенного пользователя Установка, использование и администрирование, решение проблем, конфигурирование с целью настройки тестового окружения и выполнения тест-кейсов
Linux Общее знакомство
Виртуальные машины Использование на уровне начинающего пользователя
Mac OS Не требуется Общее знакомство
Базы данных
Реляционная теория Не требуется Общее понимание, умение читать и понимать схемы баз данных в общепринятых графических нотациях
Реляционные СУБД Умение устанавливать, настраивать и использовать для настройки тестового окружения и выполнения тест-кейсов
Язык SQL Умение писать и выполнять простые запросы с использованием инструментальных средств работы с БД/СУБД
Компьютерные сети
Сетевые протоколы Не требуется Общее понимание принципов работы стека TCP/IP, умение конфигурировать локальные сетевые настройки операционной системы
Сетевые утилиты Общее понимание и умение использовать утилиты диагностики состояния и неполадок в сети
Веб-технологии
Веб-серверы Не требуется Общее понимание принципов работы веб-серверов, умение устанавливать и настраивать
Серверы приложений Общее понимание принципов работы серверов приложений, умение устанавливать и настраивать
Веб-сервисы Общее понимание принципов работы веб-сервисов и способов диагностики неполадок в их работе
Языки разметки Общее представление об HTML и CSS Умение использовать HTML и CSS для создания простых страниц
Протоколы передачи данных Не требуется Общее понимание принципов работы протоколов прикладного уровня OSI-модели, общее понимание принципов диагностики возникших неполадок
Языки веб-программирования Начальные знания хотя бы в одном языке программирования, используемом для создания веб-приложений
Мобильные платформы и технологии
Android Не требуется Использование на уровне начинающего пользователя
iOS
Windows Phone

Личностные навыки

Предметная область Начальный уровень Уровень младшего или среднего специфлиста
Коммуникативные навыки
Деловое использование e-mail Минимальные навыки Понимание и строгое следование правилам делового общения с использованием e-mail и сервисов мгновенных сообщений
Устное деловое общение Понимание и строгое следование правилам устного делового общения
Прохождение собеседований Не требуется Начальный опыт прохождения собеседований
Навыки самоорганизации
Планирование собственного времени Минимальные навыки, общие представления Развитые навыки планирования собственного времени, умение пользоваться соответствующими инструментами, умение оценивать трудозатраты в рамках полученных заданий
Отчётность о своей работе Начальные навыки Развитые навыки отчётности о своей работе, умение пользоваться соответствующими инструментами

Мифы и заблуждения о тестировании

Не надо разбираться в компьютерах

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

Обязательно надо хорошо знать программирование

Очень больно относить эту мысль к мифам. Хорошо, когда тестировщик знает программирование. Ещё лучше, когда он знает его хорошо. Но даже общих отдалённых представлений о программировании хватает для начала карьеры. А дальше уже — по обстоятельствам.

В тестировании всё просто

Если развить аналогию, то и в кулинарии всё просто, если мы говорим о заваривании чая в пакетике. Но как подобным чаем не заканчивается кулинария, так и тестирование не заканчивается случаями «ой, тут вот картинка не загрузилась». Даже на исключительно практическом уровне задачи тестирования могут быть сопоставимы по сложности с задачами проектирования и разработки программ (хм, почему ж нет мифа «программирование — это просто», ведь «Hello, world» написать не тяжело). А если мы посмотрим на «надёжность программного обеспечения» с научной точки зрения, то перспективы роста сложности вообще ничем не ограничены. Обязательно ли каждому тестировщику «лезть в эти дебри»? Нет. Но если хочется — можно. К тому же это очень интересно.

В тестировании куча рутины и скуки

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

Тестировщика должны всему-всему научить

Не должны. И уж тем более «всему-всему». Да, если мы говорим о явно обозначенном учебном процессе, то его организаторы (будь то предмет в университете, учебный курс в некоем тренинговом центре или отдельный тренинг внутри компании) часто берут на себя определённые «педагогические обязательства». Но подобная учебная деятельность никогда не заменит саморазвития (хотя и может в нужный момент помочь в выборе направления пути). IT-отрасль меняется очень интенсивно и непрерывно. Учиться придётся до пенсии.

В тестировщики идут те, кто не смог стать программистом

А в скрипачи — те, кто не смог стать пианистом? Я думаю, что некий небольшой процент «не ставших программистами» в тестировании есть. Но он теряется на фоне тех, кто шёл в тестирование изначально и сознательно, а также тех, кто пришёл в тестирование из программирования.

В тестировании сложно построить карьеру

При должном старании карьера в тестировании оказывается едва ли не самой динамичной (по сравнению с другими IT-направлениями). Тестирование само по себе — очень бурно развивающаяся отрасль IT, и здесь всегда можно выбрать что-то, что будет вам очень нравиться и хорошо получаться — а в таких условиях стать профессионалом и достичь успеха легко.

Тестировщик «виноват во всём», т.е. с него спрос за все ошибки

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

Тестировщики скоро будут не нужны, т.к. всё будет автоматизировано

Как только по улицам забегают терминаторы — да, этот миф станет правдой: программы научатся обходиться без людей. Но тогда у нас всех будут другие проблемы. А если кроме шуток, человечество уже сотни лет идёт по пути автоматизации, которая накладывает свой отпечаток на всю нашу жизнь и чаще всего позволяет переложить самую простую и не требующую квалификации работу на машины. Но кто же заставляет вас оставаться на уровне исполнителя такой работы? Начиная с некоторого уровня, тестирование превращается в гармоничное сочетание науки и искусства. А многих ли учёных или творцов заменила автоматизация?

     
  содержание Жизненный цикл тестирования