Pārlūkot izejas kodu

ПООП тестирование, 1 лекция

kei 5 gadi atpakaļ
vecāks
revīzija
d7f56c6f9f
3 mainītis faili ar 169 papildinājumiem un 0 dzēšanām
  1. 136 0
      articles/5_3_1_1_intro.md
  2. 7 0
      articles/5_3_1_2_lifecycle.md
  3. 26 0
      readme.md

+ 136 - 0
articles/5_3_1_1_intro.md

@@ -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)

+ 7 - 0
articles/5_3_1_2_lifecycle.md

@@ -0,0 +1,7 @@
+ | | |
+:-:|:-:|:-:
+[Тестирование и тестировщики](../articles/5_3_1_1_intro.md) | [содержание](../readme.md) | 
+
+
+# Жизненный цикл тестирования
+

+ 26 - 0
readme.md

@@ -179,4 +179,30 @@ https://sites.google.com/site/anisimovkhv/learning/pris/lecture/tema1#p12
 4. Практическая работа «Разработка руководства пользователя программного средства по индивидуальному заданию»
 5. Лабораторная работа «Изучение средств автоматизированного документирования»
 
+## МДК. 05.03 Тестирование информационных систем
+
+### Тема 5.3.1 Отладка и тестирование информационных систем
+
+1. [Тестирование и тестировщики](articles/5_3_1_1_intro.md)
+2. [Жизненный цикл тестирования](articles/5_3_1_2_lifecycle.md)
+2. Виды и методы тестирования (в том числе автоматизированные)
+3. Тестовые сценарии, тестовые варианты. Оформление результатов тестирования Дополнительно для квалификаций "Специалист по информационным системам" и "Разработчик web и мультимедийных приложений":
+4. Инструментарии анализа качества программных продуктов в среде разработке. Дополнительно для квалификаций "Специалист по информационным системам" и "Разработчик web и мультимедийных приложений":
+5. Обработка исключительных ситуаций. Методы и способы идентификации сбоев и ошибок.
+6. Выявление ошибок системных компонентов. Дополнительно для квалификаций "Специалист по информационным системам" и "Разработчик web и мультимедийных приложений"
+7. Реинжиниринг бизнес-процессов в информационных системах.
+
+### Лабораторнo-практические работы
+1. Лабораторная работа «Разработка тестового сценария проекта»
+2. Лабораторная работа «Разработка тестовых пакетов»
+3. Лабораторная работа «Использование инструментария анализа качества»
+4. Лабораторная работа «Анализ и обеспечение обработки исключительных ситуаций»
+5. Лабораторная работа «Функциональное тестирование»
+6. Лабораторная работа «Тестирование безопасности»
+7. Лабораторная работа «Нагрузочное тестирование, стрессовое тестирование»
+8. Лабораторная работа «Тестирование интеграции»
+9. Лабораторная работа «Конфигурационное тестирование»
+10. Лабораторная работа «Тестирование установки»
+
+
 ## [Учебная практика](/articles/praktika_I.md)