|
|
@@ -0,0 +1,136 @@
|
|
|
+ | | |
|
|
|
+:-:|:-:|:-:
|
|
|
+| [содержание](../readme.md) | [Жизненный цикл тестирования](../articles/5_3_1_2_lifecycle.md)
|
|
|
+
|
|
|
+# Тестирование и тестировщики
|
|
|
+
|
|
|
+## Что такое тестирование и откуда оно появилось
|
|
|
+
|
|
|
+В первую очередь дадим определение тестирования ПО, чтобы чётче понимать, о чём пойдёт речь.
|
|
|
+
|
|
|
+***Тестирование программного обеспечения*** — процесс анализа про-граммного средства и сопутствующей документации с целью выявления дефектов и повышения качества продукта.
|
|
|
+
|
|
|
+На протяжении десятилетий развития разработки ПО к вопросам тестирования и обеспечения качества подходили очень и очень по-разному. Можно выделить несколько основных «эпох тестирования».
|
|
|
+
|
|
|
+**В 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» часто переводят как «навыки межличностного общения», но исходный термин несколько шире.
|
|
|
+
|
|
|
+**Профессиональные навыки**
|
|
|
+
|
|
|
+TODO вставить сложную таблицу
|
|
|
+
|
|
|
+## Мифы и заблуждения о тестировании
|
|
|
+
|
|
|
+### Не надо разбираться в компьютерах
|
|
|
+
|
|
|
+Без комментариев. Нет, возможно, существуют некие ничтожно малые доли процента деятельности тестировщика, которую можно реализовать «на пальцах». Но этой бесконечно малой величиной можно пренебречь.
|
|
|
+
|
|
|
+### Обязательно надо хорошо знать программирование
|
|
|
+
|
|
|
+Очень больно относить эту мысль к мифам. Хорошо, когда тестировщик знает программирование. Ещё лучше, когда он знает его хорошо. Но даже общих отдалённых представлений о программировании хватает для начала карьеры. А дальше уже — по обстоятельствам.
|
|
|
+
|
|
|
+### В тестировании всё просто
|
|
|
+
|
|
|
+Если развить аналогию, то и в кулинарии всё просто, если мы говорим о заваривании чая в пакетике. Но как подобным чаем не заканчивается кулинария, так и тестирование не заканчивается случаями «ой, тут вот картинка не загрузилась». Даже на исключительно практическом уровне задачи тестирования могут быть сопоставимы по сложности с задачами проектирования и разработки программ (хм, почему ж нет мифа «программирование — это просто», ведь «Hello, world» написать не тяжело). А если мы посмотрим на «надёжность программного обеспечения» с научной точки зрения, то перспективы роста сложности вообще ничем не ограничены. Обязательно ли каждому тестировщику «лезть в эти дебри»? Нет. Но если хочется — можно. К тому же это очень интересно.
|
|
|
+
|
|
|
+### В тестировании куча рутины и скуки
|
|
|
+
|
|
|
+Не больше и не меньше, чем в иных IT-профессиях. Остальное зависит от конкретного тестировщика и того, как он организует свою работу.
|
|
|
+
|
|
|
+### Тестировщика должны всему-всему научить
|
|
|
+
|
|
|
+Не должны. И уж тем более «всему-всему». Да, если мы говорим о явно обозначенном учебном процессе, то его организаторы (будь то предмет в университете, учебный курс в некоем тренинговом центре или отдельный тренинг внутри компании) часто берут на себя определённые «педагогические обязательства». Но подобная учебная деятельность никогда не заменит саморазвития (хотя и может в нужный момент помочь в выборе направления пути). IT-отрасль меняется очень интенсивно и непрерывно. Учиться придётся до пенсии.
|
|
|
+
|
|
|
+### В тестировщики идут те, кто не смог стать программистом
|
|
|
+
|
|
|
+А в скрипачи — те, кто не смог стать пианистом? Я думаю, что некий небольшой процент «не ставших программистами» в тестировании есть. Но он теряется на фоне тех, кто шёл в тестирование изначально и сознательно, а также тех, кто пришёл в тестирование из программирования.
|
|
|
+
|
|
|
+### В тестировании сложно построить карьеру
|
|
|
+
|
|
|
+При должном старании карьера в тестировании оказывается едва ли не самой динамичной (по сравнению с другими IT-направлениями). Тестирование само по себе — очень бурно развивающаяся отрасль IT, и здесь всегда можно выбрать что-то, что будет вам очень нравиться и хорошо получаться — а в таких условиях стать профессионалом и достичь успеха легко.
|
|
|
+
|
|
|
+### Тестировщик «виноват во всём», т.е. с него спрос за все ошибки
|
|
|
+
|
|
|
+Только если признать, что в болезни пациента виновен термометр, показывающий высокую температуру. Скорее с тестировщиков будет спрос за те ошибки, что были найдены пользователем, т.е. проявились уже на стадии реальной эксплуатации продукта. Но и здесь нет однозначного вывода — за конечный успех продукта отвечает вся команда, и было бы глупо перекладывать ответственность лишь на одну её часть.
|
|
|
+
|
|
|
+### Тестировщики скоро будут не нужны, т.к. всё будет автоматизировано
|
|
|
+
|
|
|
+Как только по улицам забегают терминаторы — да, этот миф станет правдой: программы научатся обходиться без людей. Но тогда у нас всех будут другие проблемы. А если кроме шуток, человечество уже сотни лет идёт по пути автоматизации, которая накладывает свой отпечаток на всю нашу жизнь и чаще всего позволяет переложить самую простую и не требующую квалификации работу на машины. Но кто же заставляет вас оставаться на уровне исполнителя такой работы? Начиная с некоторого уровня, тестирование превращается в гармоничное сочетание науки и искусства. А многих ли учёных или творцов заменила автоматизация?
|
|
|
+
|
|
|
+
|
|
|
+ | | |
|
|
|
+:-:|:-:|:-:
|
|
|
+| [содержание](../readme.md) | [Жизненный цикл тестирования](../articles/5_3_1_2_lifecycle.md)
|