Привет, Хабр! Я являюсь тестировщиком компании TravelLine. Мы разрабатываем единую систему для гостиничного предприятия, которая помогает отелям, санаториям и другим средствам размещения автоматизировать бизнес-процессы.

В тестировании своих продуктов мы придерживаемся подхода «Shift Left» или «Сдвиг влево». Суть этого подхода — смещение фазы тестирования влево в жизненном цикле продукта и проведение тестирования на каждом этапе разработки. Одной из техник, которая помогает смещать тестирование влево является тестирование документации и требований.

Требования являются отправной точкой для определения того, что проектная команда будет проектировать, реализовывать и тестировать. Элементарная логика говорит нам, что если в требованиях что-то «не то», то и реализовано будет «не то», т.е. колоссальная работа множества людей будет выполнена впустую.*

В процессе тестирования требований проверяется их соответствие определенному набору свойств. Куликов выделяет следующие свойства качественных требований:

Наш чек-лист проверки требований содержит большинство этих свойств, а именно: Атомарность, Единичность, Завершенность, Недвусмысленность, Непротиворечивость, Выполнимость, Тестируемость, Обязательность, Актуальность, Прослеживаемость, Явность. Чтобы проверить, соответствуют ли требования этим свойствам, я придумал мнемонику «ПЯТНО НА ВАЗЕ».

Мнемоника - это тип эвристики, набор правил и приемов, которые помогают эффективно запоминать необходимые сведения (информацию), обычно это слово-аббревиатура или фраза. Например, все помнят детскую мнемонику “каждый охотник желает знать где сидит фазан”, в которой по первым буквам каждого слова можно вспомнить порядок цветов радуги.**

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

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

  1. Изобразить один из совершенных Гераклом подвигов и указать номер этого подвига.

  2. Одним из подвигов изображенных на вазе обязательно должен быть тот, где Геракл сражается с Немейским львом.

  3. Чтобы роспись на вазе сохранилась в течение двухсот лет.

    Роспись должна быть красивой.

  4. Чтобы на вазе был меандровый орнамент, но это не обязательно, и еще нужно успеть сделать вазу к предстоящему празднику Гераклеи.

Также он хотел увидеть сходство изображенного на вазе Геракла с собой, но не высказал это вслух, а лишь подумал об этом. Обозначим это пожелание под №5.

Читая пергамент, мы пытаемся представить будущий результат нашей работы, но вместо четкого и ясного изображения на вазе видим лишь большое неразборчивое пятно. Согласно пожеланию №1, нам необходимо изобразить один из совершенных подвигов, но какой именно? Нарушено свойство «Завершенность». Это пожелание можно разделить на два отдельных: 1. Изобразить подвиг и 2. Указать номер подвига. Нарушено свойство «Атомарность». Далее, в пожелании №2 говорится о том, что одним из подвигов, изображенных на вазе, обязательно должен быть тот, где Геракл сражается с Немейским львом. То есть, изобразить мы должны уже не один, а несколько подвигов? Здесь пожелание №2 противоречит пожеланию №1, и нарушено свойство «Непротиворечивость». Мы не можем гарантировать выполнение пожелания №3, потому что ни один человек не живет столько лет, и мы не можем проверить, что спустя двести лет роспись на вазе будет видна как и прежде. Здесь нарушены свойства «Выполнимость» и «Тестируемость». Далее идет пожелание, которое не было пронумеровано, из-за чего оно теряется между третьим и четвертым пожеланиями, и его можно случайно пропустить при изготовлении вазы. Нарушено свойство «Прослеживаемость». А что значит «красивое»? Нарушено свойство «Недвусмысленность». В пожелании №4 говорится, что нужно изобразить орнамент, но это не обязательно, можно этого не делать. Нарушено свойство «Обязательность». Далее в этом же пожелании следует еще одно, которое не имеет отношения к предыдущему. Его стоило бы описать отдельно, а именно то, что нужно успеть изготовить вазу к предстоящему празднику Гераклеи. Нарушено свойство «Единичность». О пожелании №5 мы вообще ничего не знали, так как нам об этом просто не сказали. Нарушено свойство «Явность».***

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

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

И в завершение напишу пару слов о том, как, собственно, все это пришло мне в голову. На самом деле, тут все довольно просто. Выписав первые буквы каждого из свойств (Атомарность, Единичность, Завершенность, Недвусмысленность, Непротиворечивость, Выполнимость, Тестируемость, Обязательность, Актуальность, Прослеживаемость, Явность), я получил такую коллекцию букв: АЕЗННВТОАПЯ. Затем, обычным перебором этих букв, я стал придумывать слова и фразы, вычеркивая уже использованные буквы: составил слово «ПЯТНО» — остались буквы АЕЗНВА, составил слово «ВАЗА» — остались буквы НЕ. Здесь мне удачно пригодилось мое небольшое увлечение мифами Древней Греции, и нужно было лишь немного проявить фантазию. Так в конечном итоге и получилось «ПЯТНО НА ВАЗЕ».

*Тестирование программного обеспечения. Базовый курс / Святослав Куликов.
**https://vladislaveremeev.gitbook.io/qa_bible/obshee/evristiki-i-mnemoniki
***В своем примере я не упомянул лишь свойство «Актуальность». Оно означает, что требование не устарело. Например, требование должно соответствовать техническим реалиям. Вряд ли сейчас найдется много пользователей Windows 2000.

Комментарии (3)


  1. wolodik
    03.10.2024 06:53

    Единственный вопрос - при чём здесь тестирование? Это формирование ТЗ в процессе диалога с заказчиком, вотчина аналитиков.


    1. andreizhu Автор
      03.10.2024 06:53

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


  1. frank3
    03.10.2024 06:53

    отличная статья!