Case study: тестирование проекта "Новости" на сервере Software-Testing.Ru |
29.09.2008 14:00 |
Автор: Баранцев Алексей Это эссе описывает учебный пример создания тестов для веб-приложения. Сначала показано, как создаётся и как выглядит план тестирования. Затем рассматривается модель, которая будет определять критерий отбора тестов. После чего строится собственно набор тестов.
1. ВведениеЭто эссе начинает серию публикаций, в которых я буду рассказывать о тех подходах к разработке тестов, которыми мы пользуемся на практике, как при тестировании собственных продуктов, так и в аутсорсинговых проектах по тестированию. Я не буду пространно излагать теорию, все эссе будут оформлены в виде учебных примеров, показывающих, как та или иная техника или комбинация техник применяется в конкретной ситуации. Первое эссе посвящено тому, как я тестировал простейшее веб-приложение — скрипт, предназначенный для формирования страничек новостей на нашем сервере (http://software-testing.ru/news/). Сначала я покажу, как мог бы выглядеть план тестирования для этого приложения, если бы я его написал. Честно признаться, для таких маленьких задач я никогда не пишу план тестирования. Во-первых, потому что его легко держать в голове и потому нет необходимости фиксировать на бумаге. Во-вторых, потому что для маленьких задач времени и сил на написание плана уйдёт едва ли не больше, чем на все остальные работы по тестированию. Наконец, потому что по таким задачам нет строгой отчётности, и никто не спросит меня, выполнил ли я план. Затем я покажу, что я делал перед тем, как приступить к разработке тестов, чтобы моя деятельность по их созданию была не хаотической, а упорядоченной, и гарантировала достижение успеха. И под конец можно будет увидеть, как легко после первых двух действий выполнить третье — создать сами тесты. Этому будет посвящена едва ли не самая короткая часть эссе. Сделать полный комплект тестов совсем просто, вот увидите! [ Содержание ] 2. Описание тестируемой системы, SRSИтак, что же мы тестируем?Тестируемая система представляет собой реализованный на языке PHP скрипт, который формирует страничку новостей на этом сайте: http://software-testing.ru/news/. Этот скрипт имеет один параметр topic, идентификатор новости. Если параметр не указан или имеет пустое значение, скрипт выдает список последних десяти новостей. Если параметр имеет непустое значение, скрипт пытается показать новость, имеющую идентификатор, определяемый значением этого параметра. Новости на самом деле берутся из специальной ветки форума, и идентификатор новости — это идентификатор темы в форуме. Идентификатор — положительное целое число, если значение параметра не является положительным целым числом, скрипт выдает сообщение об ошибке. Если в форуме не существует темы с указанным идентификатором, или она существует, но находится не в упомянутой специальной ветке, а в какой-то другой, тоже выдается соответствующее сообщение об ошибке. Если же все хорошо — скрипт показывает первое сообщение темы с данным идентификатором. Всё описанное в предыдущем параграфе — это требования. Вот их-то мы и будем проверять путём тестирования. Впрочем, проверять мы будем не все перечисленные требования. И об этом пойдет речь в следующей главе, посвященной составлению плана тестирования. [ Содержание ] 3. План тестирования, TPЕщё раз повторю: когда я на самом деле тестировал этот скрипт, я план не писал. Зачем же он мне нужен сейчас? Дело в том, что тогда я был один. А сейчас я пытаюсь рассказать то, что я сделал, большому количеству людей. И кто-нибудь обязательно спросит: почему не протестирован вот этот аспект? почему я считаю, что мой набор тестов полон? почему... И вот тут я с довольным видом скажу — смотрите в план! Ну, пока смотреть-то некуда. Давайте сначала напишем его, а потом уж будем в него смотреть. Я не люблю изобретать велосипеды. Поэтому я не стану оригинальничать и напишу стандартный план. То есть — соответствующий стандарту. Мне нравится стандарт IEEE 829, написанные в соответствии с ним документы получаются короткими, простыми, понятными и практичными. А тот, кто будет говорить, что шаблон RUP или ещё какой-нибудь другой лучше — пусть сам и пишет в соответствии с этим шаблоном, так ему и надо. Текст стандарта IEEE 829 не находится в открытом доступе, но интересующий нас раздел 4 этого стандарта, вычлененный и оформленный в виде шаблона плана тестирования, можно найти, например, здесь: http://www.utsc.utoronto.ca/~rosselet/cscd08/ref05/ieee829.html. Мы не будем сейчас внимательно изучать структуру плана тестирования и его связь с другими документами, создаваемыми в процессе тестирования, к этому вопросу мы вернемся в одной из следующих статей. Здесь я приведу только готовый текст плана тестирования для рассматриваемого учебного примера. Из него выброшены все ненужные в контексте данного примера разделы, оставлены только те, которые я счёл необходимыми. План тестирования http://software-testing.ru/news/
Вот это — мой план. Самое важное в нем написано в середине: пункты с третьего по восьмой. Пункты 3, 4, 6 и 7 — позитивные, они говорят о том, что будет сделано и как именно. Пункты 5 и 8 — негативные, они могут использоваться в качестве отмазки, если до этого дойдёт дело. [ Содержание ] 4. Модель тестирования, TDSВсё предыдущее было разминкой, организационно-подготовительной работой, тестирование начнется только сейчас. Какой-нибудь комплект тестов может написать всякий, это не представляет особой сложности. Но возникает вопрос — насколько хорош или плох он будет? Достаточно ли полон наш комплект тестов, не забыли ли мы протестировать что-нибудь? Не слишком ли он велик, нет ли лишних тестов? Последнее особенно актуально для ручного тестирования, так как обычно тесты приходится выполнять не раз и не два, поэтому чем меньше их будет, тем лучше. Но без ущерба для полноты тестирования, разумеется. Молот и наковальня — тестов нужно достаточно много и, вместе с тем, как можно меньше. Для того, чтобы справиться с этой задачей, мы разработаем модель поведения нашей системы в режиме (R1), и создадим комплект тестов так, чтобы эти тесты покрывали все пути в модели. Кроме того, мы будем делать тесты таким образом, чтобы не получилось нескольких тестов, соответствующих одному пути, это обеспечит нам минимальность набора. Более того, поскольку количество путей в модели можно посчитать, мы получим хорошую числовую метрику, которая позволит нам заранее предсказать количество тестов, которые необходимо создать, и может служить мерой приближения к успешному завершению тестирования. В данном случае в качестве модели оказалось удобно использовать блок-схему. Вот она: Рис 1. Модель поведения тестируемой системы Каждый путь от верха до низа этой блок-схемы соответствует некоторому специфическому варианту поведения тестируемой системы. Можно заметить, что некоторые пути приводят к одному и тому же сообщению, появляющемуся на экране (на блок-схеме вывод на экран обозначен несимметричным значком, по форме отдаленно напоминающим кинескоп монитора). Однако тестов при этом требуется несколько, так как причины появления одинаковых сообщений могут быть различны. Ещё хочу обратить внимание на то, что не все условия ветвления зависят только от значения параметра скрипта, некоторые зависят также и от состояния базы данных форума, точнее — от структуры сообщений. Итак, считаем, сколько же получилось путей в этой модели. Я насчитал восемь. Именно столько тестов и нужно сделать. По одному на каждый путь. [ Содержание ] 5. Комплект тестов, TCSВсё, интеллектуальная работа закончена. После того, как модель готова, создание полного набора тестов становится чисто технической задачей — подбор параметров и формирование подходящего состояния базы данных. Просто-напросто перебираем все пути в модели слева направо, и для каждого подбираем подходящее значение параметра. Существующая структура форума достаточно богата, так что в нём можно найти все требуемые для тестирования состояния.
[ Содержание ] 6. ЗаключениеНу вот, комплект тестов готов. Теперь вернемся ещё раз к плану тестирования и посмотрим, насколько успешно мы его выполнили. На этот раз важными будут пункты 7, 8 и 9. В процессе тестирования находились ошибки, и система несколько раз возвращалась на доработку в соответствии с пунктом 8. В конце концов, все тесты прошли успешно и в соответствии с пунктом 7 система была сдана в эксплуатацию. Кроме того, согласно пункту 9 были сделаны модель тестирования (TDS) и набор тестов (TCS), которые и легли в основу частей 4 и 5 этого эссе (за исключением комплекта тестов для тестового окружения, которые, впрочем, ничего нового к изложенному материалу не добавляют и поэтому в статью не попали). Таким образом, можно считать, что план выполнен. В следующем эссе я расскажу о том, почему термин «критерий тестирования» — это нонсенс. А пока всё. Впрочем, нет, не всё. Последнее замечание. Поскольку пример учебный, я намеренно сделал в нем небольшую ошибку. Надеюсь, что вы внимательно и критично читали это эссе и заметили её. Может быть также, что я ненамеренно сделал ещё какие-то ошибки, буду благодарен за критику. Tags: |