Визуальные спецификации

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

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

    Agile движение имеет свой взгляд на спецификации. Наиболее экстремальное крыло выражает свои взгляды так:

    В жопу спецификации!

    И типичное описание требования в таких проектах выглядит так:

    Как пользователь
    Я хочу добавить новую задачу быстро
    Чтобы сэкономить время и не потерять контекст


    Что удивительно, такой подход работает. В определенных случаях. Необходимо выполнение всех условий ниже:

    • команда сидит в одной комнате
    • есть 24x5 доступ к управляющему продуктом
    • в команде нет ни одного тестировщика
    • дизайнеры умеют придумывать решения любой проблемы за 1 рабочий день

    Если хотя бы одно из условий не выполняется, то команда имеет серьезные проблемы.

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

    Спецификации и программисты


    Многие программисты не любят спецификации. Введем определение, пусть это будут “Программисты класса 1”. Они твердо знают, как система должна работать, на какие сценарии можно выдавать сообщения “Unknown error” или “You can’t do that” и где нужно срезать углы, чтобы меньше возиться с неинтересными вещами.

    Наличие спецификации воспринимается как ограничение свободы творчества и выражение недоверия: “ха, можно подумать, мы не знаем, как лучше сделать эту фичу”. Поэтому программисты класса 1 не любят читать спецификации. Они могут их сканировать, смотреть на них и разглядывать картинки, но они не будут их читать.

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


    Распределение программистов по типам. Большинство нормально относится к спецификациям.

    Программисты класса 2 читают спецификацию от корки до корки, методично ее переваривают и задают убийственно точные вопросы.

    Для программистов класса 2 можно создавать любые спецификации — они проглотят все. Программистам класса 1 можно показывать только картинки, снабженные короткими, ясными надписями без сложных слов. Еще лучше им показать мультфильм. Я хотел сказать — анимацию.

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

    Спецификации и тестировщики


    У тестировщиков жизнь тяжелая. Отсутствие спецификации превращает процесс тестирования в медленную пытку на выносливость и стрессоустойчивость. В принципе баг — это несоответствие поведения системы спецификации. Когда спецификации нет, то и багов нет. Чем с удовольствием пользуются корыстные программисты.

    К примеру, если в компании есть бонусы за отсутствие багов, то лучший способ получить бонус — перестать писать спецификации. Нет спецификаций — нет проблем. Управляющие продуктом не пишут спек (и в освободившееся время постят котиков в фейсбук), программисты пишут код без багов, а тестировщики багов не находят (ну разве что иногда, чтобы компания вдруг не решила, что они вообще не нужны). Всем хорошо. Страдают только клиенты, которые имеют в итоге черт знает что с непредсказуемым поведением.

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

    Свойства спецификаций


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

    (Не)полнота

    Согласно Гёделю, нет никакого смысла стремиться к полной спецификации. Любая полная спецификация противоречива. Так что надо смириться с тем, что любая спецификация будет неполна. Максимум, на что можно надеяться, это на непротиворечивость.

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

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

    Так насколько полными должны быть спецификации? Ответ довольно прост. Сначала спецификация требования должна ограничиваться несколькими предложениями. Перед началом разработки она должна быть настолько подробной, насколько это разумно с точки зрения временных затрат.


    Детализация спецификации в зависимости фазы разработки юзер стори. На первых порах достаточно пары предложений. В начале реальной имплементации нужна полная спецификация.

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

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


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

    Мозгодрочка

    Есть люди, которые любят казаться чрезвычайно умными, хотя это слабо коррелирует с их реальными способностями. Они с радостью употребляют слова типа “корреляция”, “дивергенция” и “Гёдель”.

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

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

    Спецификации должны быть как можно более простыми. Язык должен быть понятен даже программисту класса 1, если он вдруг решит отвлечься от картинок и что-то прочитать. Программистам и так придется попотеть, чтобы выполнить все ваши безумные требования, избавьте их хотя бы от джунглей вашего интеллекта.

    Размер

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

    Может показаться, что размер коррелирует (черт!) с полнотой. Однако, наполнять спецификацию водой — явно не самая хорошая идея. Наполняйте ее смыслом и жизнью.

    Методы донесения идей


    Какие вообще бывают методы объяснения своих мыслей? Давайте пройдемся по ним.

    Псевдо-Нарративные

    Очень многие разработчики спецификаций обожают структурность. Самые доступные структурные элементы: таблицы и списки. Зачастую, в спецификации больше ничего и нет: списки, списки, вложенные списки, вложенные списки вложенные в списки… и таблицы.

    С одной стороны, таблицы действительно помогают хорошо воспринимать… табличные данные. Но маловерятно, что любую спецификацию можно представить в виде табличных данных. Хотя некоторым это удается:


    Пример великолепного использования таблиц.

    Списки тоже хороши в меру. Когда из них состоит вся спецификация, к пятой странице хочется застрелить автора, а к седьмой — самого себя.


    Пример убедительного использования списков.

    Такое использование текста портит карму. Не делайте так.

    Нарративные

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

    История про Васю и Батч DnD
    Вася планирует следующую итерацию. Он смотрит на доску, заполненную карточками. Слева он замечает список карточек в бэклоге. Вася читает названия юзер сторей, и понимает, что три первые стори надо обязательно сделать в следующем релизе. Вася привычно прижимает Ctrl и кликает по каждой карточке, карточки призывно желтеют в ответ. Вася хватает первую карточку и начинает тащить ее в правую колонку. Карточки красиво складываются в одну, увенчанную эффектной цифрой 3 в правом углу. Вася перемещает карточки в нужную колонку, но пока еще не отпускает их, наслаждаясь тем, как колонка желтеет карточкам в ответ.

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

    Несчастливый конец
    Вася отпускает карточку и вдруг видит тревожное красное сообщение “У тебя, дружище, нет прав на изменение итерации для юзер стори. Попроси админа, может даст”. Карточки прыгают обратно в левую колонку и остаются желтыми, чтобы Вася мог сполна почувствовать собственное ничтожество по сравнению разработчиками системы.


    Кажется, читать такую спецификацию гораздо интереснее, чем сухой язык таблиц и списков. Она раскрывает мотивацию, дает почувствовать и представить решение. Васю становится просто жалко и хочется ему как-то помочь. Может быть, дать возможность Васе пингануть админа прямо сейчас одним нажатием на ссылку? Или сделать превентивный показ ошибки еще до того, как Вася отпустил карточки?

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

    Может быть, нарративная спецификация недостаточно формальна. Но если ее дополнить правильными картинками, то все будет хорошо.

    BDD

    Behavior-Driven Development имеет довольно любопытный формат для описания требований. Фактически, мы описываем критерии приемки фичи. Если все критерии проходят, фича считается готовой. Вот один из примеров спецификации в формате BDD:

    As a Scrum Master I want to see Release BD Chart drawn by weeks

    As a Scrum Master
    I want to see Release BD Chart drawn by weeks
    When Iterations practice is disabled
    So that I can benefit from BD chart

    Given any development process
    When I turn off Iterations practice in Admin -> Process -> Edit
    And navigate to Release BD chart
    Then iteration velocity replaced by weekly velocity
    And Chart end date is the same as Release end date
    And BD chart drawn by weeks instead of iterations
    And Chart Start Date is the same as Release Start Date


    Что же хорошего и плохого в таком подходе? Из хорошего можно выделить единый формат. К нему привыкаешь, и после нескольких недель уже как-то сразу начинаешь писать спецификацию в таком формате, не особенно включая мозг. Есть / Сделали / Получили — четкий формат реакции на любое действие пользователя.

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

    Минусов тоже вполне достаточно. Во-первых, все, что хорошо транслируется в автоматические тесты, обычно плохо транслируется в человеческий мозг. Спецификации в первую очередь пишутся для людей, а не для тестов. Воспринимать формат BDD достаточно тяжело. Особенно уныло смотрится спек из десятка сценариев. Ну ничем не лучше списка или таблицы, а зачастую и хуже, потому что в нем присутствует очень много повторений Given, When, Then. Эти повторения вносят ненужный шум, затрудняя восприятие полезных сигналов.

    BDD сценарии хорошо подходят для описания взаимодействия системы с пользователем, но совершенно не подходят для нефункциональных требований и элементов интерфейса.

    При использовании BDD практически невозможно охватить сразу всю фичу целиком.

    Наброски интерфейса

    Многие управляющие продуктами побаиваются ручек, а от набора цветных карандашей у них портится настроение. Они стесняются рисовать и уверены, что наброски от руки выглядят непрофессионально и недостаточно круто. Вместо карандаша они предпочитают Visio, OmniGraffle или любой другой дорогой профессиональный инструмент.

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


    Набросок системы отчетов в Targetprocess 3.

    Обычно рисуют интерфейс и, гораздо реже, что-то более глубокое. Можно ли сделать спек целиком из скетчей? Вполне, но не факт, что это лучшее применение ваших способностей художника.


    Набросок разрешенных назначений задач на людей в зависимости от роли, проекта и команды в Targetprocess 3

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


    Набросок таймлайнов в Targetprocess 3.

    Я лично скетчи очень люблю.

    Детальный дизайн

    С дизайном все просто — он должен быть готов до стадии разработки. Не стоит надеяться, что дизайнер сможет за пару дней склепать что-то такое, за что ему самому будет не стыдно. Дизайнерам нужно время. Обычно много. Дизайн нужно начинать делать задолго до того, как фича попадет в разработку.

    Тут есть проблема. Может случиться, что фича с готовым дизайном внезапно становится не нужной. Тут уж ничего не поделаешь, надо стараться угадывать и делать дизайн для фич, вероятность разработки которых высока.


    Готовый дизайн таймланов в Targetprocess 3

    Итак, законченный дизайн должен быть непременным атрибутом любой спецификации. Может ли дизайн заменить всю спецификацию? К сожалению, нет. Обычно в дизайне не показаны все состояния системы, не описаны потоки взаимодействий, не проработаны все сценарии. Дизайн статичен. А нам нужна динамика. Можно и в дизайне показывать динамику:


    Три варианта изменения карточки требования с течением времени

    Но это долго и сложно. Лишь избранные способны так скрупулезно прорабатывать варианты.

    Раскадровки / Storyboards

    Раскадровки любят режиссеры. В общем-то это просто набор отдельных ключевых кадров какой-то сцены.


    Типичная раскадровка к непонятному фильму.

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


    Типичная быстрая раскадровка.

    В нашей индустрии раскадровка — это набор отдельных состояний системы.

    Раскадровки довольно компактны и позволяют понять, какие вообще состояния есть. Отличные раскадровки еще и показывают, как в эти состояния переходить.


    Раскадровка быстрого добавления задач в Targetprocess 3 с альтернативным сценарием.

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

    Потоки / Flows

    Для хорошего понимания требования надо знать, какие действия может делать пользователь и в какие состояния может переходить система. BDD сценарии в целом дают такое понимание, но их нужно внимательно читать и транслировать в образы, понятные программистам класса 1. А это сложно. Гораздо проще нарисовать все действия и все состояния.

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

    Рисовать диаграммы потоков мне нравится ничуть не меньше, чем скетчи интерфейса.


    Поток контекстного редактирования в Targetprocess 3.

    Animation / gifs

    Все дети любят мультфильмы. Но когда они узнают, что для создания одной минуты рисованного мультика надо сделать 1000 рисунков, у большинства навечно отбивает охоту заниматься анимационными фильмами.

    Но все же раскадровки можно анимировать! Тогда получается крайне наглядная штука, которая позволяет представить, как все это будет работать.

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

    Для того, чтобы делать анимационные гифы, нужна усидчивость, терпение и профессиональная деформация. У нас анимацией начал увлекаться Игорь Трафимович, и забомбил несколько хороших примеров:


    Изменения в прогрессе карточки-требования с течением времени в Targetprocess 3.

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


    Быстрое редактирование данных в списках Targetprocess 3

    Бумажные прототипы

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

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

    Бумажный набор можно положить в рюкзак и отправиться на поиски непуганных пользователей, которые за простой латэ в старбаксе оценят ваш прототип и откроют вам глубины своей… оригинальности.

    С бумагой работать весело и интересно. Взаимодействия видны прекрасно. Времени требуется, конечно, гораздо больше, чем для скетча, но гораздо меньше, чем для реального прототипа. Мне кажется, у нас этот вид прототипирования недооценен.


    Бумажное прототипирование iPad приложения (которое мы начали делать, но не доделали).


    Хороший пример бумажного прототипирования формы регистрации

    Интерактивные спеки

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

    Единственную интерактивную спецификацию, которую я видел в жизни, сделал Олег Серяга.


    Интерактивная спецификация кастомизации карточек в Targetprocess 3. Кликабельно.

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

    Стоит ли делать интерактивные спецификации? Скорее всего, нет. Для прототипа их недостаточно, и есть более простые способы донести всю информацию не менее эффективно.

    Живые прототипы

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

    Хороший прототип дает ответы на огромное количество вопросов. Он позволяет пройти многие сценарии самостоятельно и увидеть наконец реальное взаимодействие. На прототипах можно запускать юзабилити тесты. Прототипы можно просто показывать клиентам и собирать их пожелания. Специалист по продажам может показать прототип потенциальному клиенту и соврать, что это уже в разработке и скоро (через 2 месяца) будет непременно выпущено.

    Кажется, ничего и лучше желать нельзя. Но не все так радужно, прототип не может полностью заменить спецификацию.

    К сожалению, практически всегда в прототипах реализуют только позитивные сценарии. Главная цель прототипа — работа на прорыв, доказательство работоспособности конкретного решения. Негативные сценарии никак не влияют на качество доказательства, поэтому их оставляют в сторонке. Однако для разработчика негативные сценарии крайне важны. Если разработчики не хотят о них думать, то тестировщики обожают. В результате придется терпеливо выяснять нюансы поведения системы, мучительно фиксить баги и править сообщения “You can’t do that!”.

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


    Первый прототип Targetprocess 3, сделанный для проверки концепции. Показывался клиентам и вызывал общее одобрение. Кликабельно, но работает не все, что видно.

    Через прототип очень нудно и долго придется выяснять требования типа “а какая же максимальная длина у этого поля?”. Мало того, что разработчику вообще надо вспомнить, что у поля есть длина, так еще и тыкать в прототип мышкой и смотреть код в тщетной попытке найти там что-то хорошее.

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

    Еще один минус — время. Прототипы делать долго. Вообще есть два типа разработчиков: быстрые и медленные. Быстрым можно доверять разработку прототипов, медленным — ни в коем случае. Качество кода в прототипе, как вы понимаете, может быть произвольно плохим. Главное, чтобы работали нужные сценарии. И вроде бы КО похлопывает сейчас меня сзади по плечу, но я сам совершал такие ошибки в прошлом.

    Спецификация = визуальное объяснение


    Цель спецификации — донести идеи в максимально понятной и полной форме. Лучше всего это работает, когда используются и текст, и графика. Поэтому нужен здоровый микс самых разных методов, о которых мы уже поговорили. Это всегда тяжело, требует творческого подхода и желания делать добро.

    Ниже все методы сведены в единый график. По оси X у нас сложность создания контента. Ясно, что живой прототип сделать сложно, тогда как набросать скетчи довольно просто. По оси Y у нас полезность, то есть насколько эффективно данный метод доносит идею. Опять же, полезность псевдо-нарративных спецификаций не высока, тогда как полезность готового дизайна или прототипов высокая.


    Все методы донесения идей в одном флаконе.

    Желательно не использовать методы с низкой полезностью, такие как BDD и псевдо-нарративные. Хорошо работают скетчи, нарративы, диаграммы потоков, раскадровка, бумажные прототипы и готовый дизайн. На анимацию и живые прототипы стоит тратить время только в том случае, если его реально много.

    Вступайте на путь добра, друзья! Создавайте понятные визуальные спецификации, которые рассказывают истории на простом языке.

    P.S. У меня в запасе осталось еще штук 20 красивых картинок, но статья и так огромная, так что извините.
    Метки:
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 38
    • 0
      Спасибо за статью, но она все же спорная, потому что очень категоричная, даже для меня =)
      1) мы делаем веб-сервис для интеграции с партнерами
      2) в приложении много алгоритмов и внутренней логики, например, валидация ряда параметров или какая-то миграция данных
      В этих ситуациях все таки приходится писать текст и вот тут BDD, кстати, работает максимально хорошо.

      Опять таки, непонятно, что в итоге с тестировщиками? От тест-кейсов в большом продукте не получается уйти, потому что регрессионное тестирование и прочие вещи. Как вы у себя решаете этот вопрос?
      • +3
        Конечно, все зависит от контекста. Тут контекст — веб приложение. Для описания алгоритмов может и BDD подойдет нормально.

        У нас большое количество автоматических тестов. Для них пишутся кейсы и они автоматизируются. Остальное exploratory тестирование в основном. Баланс примерно 4 разработчика на 1 тестировщика.

        Если статья спорная — это же прекрасно, есть о чем поговорить.
        • +2
          Мы тоже столкнулись с тем, что BDD отлично подходит для описания на высоком уровне. А вот для описания UI подходит плохо — получается огромный оверхед. Придумали так, что можно писать стори + основные сценарии. Алгоритмы расписывать подробно в Gherkin, а для UI — прототипы.
          • +1
            о, а по какому принципу у вас строится exploratory тестирование? SBTM или что-то свое? Как я понимаю, на вход помимо всего тестировщики получают и скетчи?
            • +2
              SBTM — это исследовательсткое тестирование, только более регламентированное. Поскольку нас не беспокоит отчетность о проведенных тестах, мы имеем каждый свой вид исследования. Никто не ограничивает временем, сценарием мыльной оперы и описанием хронологии теста.
              На выходе должен быть функционал, смоук тест которого автоматизирован, и фича протестана так, чтобы мы могли искренне и уверенно сказать, что сделали всё, на что способны, чтобы из продакшена не пришли баги.

              У тестера есть все материалы по этому функционалу на входе. Но вход у всей команды (Dev+QA) один. Когда они готовы начать разработку новой юзер стори, они зовут на кик-старт митинг продукт оунера (дизайнеров, верстальщиков, и ещё кого-нибудь, если он нужен), чтобы еще раз обсудить всю входную инфу, спеку, скетчи, побрейнстормить о пути разработки, тестирования, о потенциально опасных местах. С этого митинга все выходят с полным одинаковым пониманием что, зачем и как будет сделано через пару дней.
        • +10
          Отличная статья. У меня в свое время хорошо прижился такой формат спеков:

          1. Рассказ о том, что за проблема. Текст на абзац в свободном стиле.
          2. Как сделать. Прояснение тех. деталей для разработчиков, желательно пошагово.
          3. Как проверить. Прояснение тех моментов, которые будут тестироваться. Краткий сценарий тестирования.

          Итоговая история смотрится примерно так (условно набросал сейчас):

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

          Для этого необходимо:
          — Создать на экране кнопку [рисунок], которая будет вести на карточку создания задачи.
          — Некоторые поля там будут предзаполнены, например пользователь создал карточку из экрана клиента или сделки. [список экранов и типов предзаполнения]
          — В некоторых ситуациях создать задачу нельзя. Например, нет прав. В этом случае показывать кнопку в неактивном состоянии.

          Как проверить:
          — На всех страницах есть кнопка создания задачи.
          — По клике на кнопке на новом экране открывается карточка задачи, некоторые поля предзаполняются. Карточка задачи работает в полном объеме, предзаполненые поля можно отредактировать.
          — Если у пользователя такие-то права, то задачу создать нельзя, кнопка неактивна.


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

        • +6
          Спецификации не пишу, думал пройти мимо, но «В жопу спецификации!» меня заманило, спасибо :)
          • 0
            Отличная статья, спасибо! Пора закупать цветные карандаши.
            • 0
              Еще хорошо маркерами рисуется, Copic или Promarker :)
            • 0
              Моя презентация на подобную тему www.slideshare.net/i_kender/ii-2527016
              • –1
                Уфф, в статье много методологических ляпов, буду описывать их в процессе чтения.

                Ляп №1 про нарративные спецификации.

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

                Спецификации должны описывать сценарии пользователей без деталей реализации! Дело в том, что такая спецификация вербальная. Сам UI невербален и переход из одного в другое делает человек в другой роли. Иначе будет смешение зон ответственности между тем, кто делал спецификацию, кто ее реализовал в каркасе и кто ее имплементировал.
                • +2
                  Мое мнение такое — спецификация должна описывать все детали реализации, иначе их придумает разработчик и часто придумает херню. Типа сообщение об ошибке «You can't do that». Как только начинается разработка — должна быть такая спецификация.

                  Разработчики могут принимать участие в обсуждениях UX и конечных решениях, что у нас и происходит. Но фазы UX и разработки должны быть разделены.
                  • 0
                    Дело в том, что если весь UX выдавать в виде нарратива, то ничего хорошего не выйдет. Любой нарратив можно реализовать миллионом способов. Его можно применять только если есть каркасы (wireframes).
                    • 0
                      Кто ж спорит. Графика + текст лучше и того, и другого по отдельности.
                • 0
                  Насчет набросков интерфейса:

                  проблема не в том, чтобы уметь рисовать. Проблема в том, чтобы вспомнить все кнопочки во время рисования и расположить равномерно по всему интерфесу.

                  Картинка из примера — это вероятно результат десятков интераций, каждая из которых требует выбрасывать целый лист бумаги и перерисовывать рисунок с нуля. Это требует чертовски много времени и бумаги!!!
                  • +1
                    Какая именно картинка?
                    • 0
                      Набросок системы отчетов в Targetprocess 3.
                      • 0
                        Это примерно пятый вариант.
                    • 0
                      С другой стороны, скетчи помогают собрать все в одном месте. А за одно еще раз подумать над задачей. Хотя это, конечно, индивидуально. Я вот без листа бумаги уже не могу.
                      • 0
                        Это понятно. Я тоже люблю писать списки на бумаге. Я вижу как обожают чиркаться коллеги по распечатанным скетчам.

                        Но дополнять и упорядочивать — проще в гуглодоке. А эскизы редактировать в бальзамике.

                        Мне, как программисту, проще написать список всех функций, а вторым этапом нарисовать интерфейсы.

                        Три кнопки — OK. Но когда этих кнопок 43 — замучаешься все прорисовывать. Не будешь прорисовывать — будут отбирать кофе и булочки.
                    • 0
                      Меня интересует следующий вопрос. Управляющие продуктом — кто они? Это бывшие программисты с некоторыми управляющими способностями или это больше менеджеры с определенными дополнительными знаниями или кто-то еще? С чего начать, чтобы работать на этой должности?
                      • +1
                        В продакты попадают из проджект-менеджеров, из аналитиков, из дизайнеров. Из разработчиков по-моему реже. Важные качества — не просто уметь управлять, планировать и т.д. функции проджекта, а способность видеть и рынок и пользователей и технологии. Т.е. это скорее предпринимательский склад мышления.
                        • 0
                          Спасибо за ответ, значит я не ошибался, видя данную должность в сфере своих интересов, начиная с проджект-менеджера. Тем более предпринимательский опыт имеется.

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

                          Тем не менее, всё ещё остается открытым вопрос входа в сферу. Потому как, несмотря на техническое образование, до этого вёл проекты не связанные с разработкой. Не считая в студенческие годы создания нескольких сайтов с приятелем, которому под конец стал писать очень подробные спецификации из-за проблем с первыми заказами. Но такой любительский опыт мало кого интересует. Так вот, если карьеру программиста я более-менее представляю и много где берут новичков, то прийти в фирму управляющим без опыта невозможно просто по самой сути этой профессии. Также довольно наивно сразу пытаться создать что-то своё — процесс получения сравнимого опыта затянется на гораздо большее время, если вообще окажется успешным. Поэтому, вопрос с чего начать всё ещё открыт.
                          • 0
                            Лучшие управляющие — вырастают из программистов.
                      • +3
                        Истина, как плесень – зарождается в спорах.


                        Спасибо за прекрасную спорную статью! И да будет этот комментарий мицелием могучего гриба!

                        А источник спор заключается в сущности самого понятия спецификации – «набора параметров, которым удовлетворяет (должен удовлетворять) некоторый технический объект». И эти параметры должны быть достаточно точными для того, чтобы данный объект можно было воплотить в жизнь и проверить его на жизне-способность. На сегодняшний день в разработке пользовательских приложений есть лишь 2 артефакта, которые могут претендовать на такую роль: BDD сценарии и дизайн экранов системы. На основе сценариев пишутся тесты и реализация, на основе дизайнов делается вёрстка (в широком смысле этого слова). И то, и другое становится непосредственной частью системы. Всё остальное я склонен называть когнитивным сахаром, целью которого действительно является «донесение идей в максимально понятной и полной форме». Проще говоря: спецификация доносит не идеи, а конкретные характеристики продукта. Идеи же доносятся фасилитируемым общением. И эти понятия нельзя смешивать.

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

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

                        Мы делали стори мэпы и карты переходов в Prezi и остались очень довольны. Масштабирование – это сила! Обнаруживается очень много неявных историй и начинают проклёвываться первые интерфейсные решения. Дальше дело за проектированием интерфейсов: сначала на бумаге/магнитной доске, потом в Balsamiq для общего обсуждения и согласования, затем в Axure для более тонких вещей, над которыми ломают голову и управляющий продукта, и дизайнеры, и разработчики.

                        И вот только после всего этого можно дойти до непосредственной спецификации продукта в BDD сценариях и дизайнах экранов. Естественно, в зависимости от сложности продукта и уровня взаимоотношений с заказчиком/управляющим продуктом, выполняются самые разные вариации этих шагов. Но общий процесс, необходимый для создания хорошего продукта, на мой взгляд, выглядит именно так. И здесь важно отметить 3 ключевых фактора:

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


                        Второй спорный момент касается необходимости начинать реализацию истории лишь после того, как на неё готов и полностью согласован дизайн. У меня на памяти несколько крупных проектов, которые мы начинали без дизайна и благополучно доводили до конца. Благо, Drupal позволяет реализовывать и тестировать истории в рамках дефолтных топорных элементов управления. А ещё можно изначально выработать с дизайнером подходящий UI kit, сразу его затемизировать и тестировать в довольно сносном окружении.

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

                        Подытожим:

                        • Спецификация = BDD сценарии + дизайн
                        • Спецификация != донесение идей
                        • Донесение идей = общение + (шаблон бизнес-модели + карты эффектов + карты историй + карты переходов + прототипы интерфейса)
                        • Дизайн желателен, но не обязателен для начала разработки


                        P. S. Да, я писал о гибкой разработке, для которой в той или иной степени соблюдаются условия из начала статьи, поскольку описанные в статье инструменты применяются именно в ней. Их применение в иных условиях хоть и может несколько улучшить ситуацию, никогда не позволит добиться достойной ценности продукта.

                        P. P. S. Не так давно меня попросили высказаться по более общему вопросу документирования проектов. Я накидал заметку в Фейсбуке. Думаю, её прочтение раскроет мою позицию гораздо полнее. Надеюсь, обещанный там (и много ещё где) слайдкаст всё-таки появится в этом-следующем месяце. Он призван стать той самой «визуальной (даже аудио-визуальной) спецификацией» ко всему, что здесь написано +)
                        • +2
                          Я по обоим «спорным» вопросам согласен. Но определение Спецификация = BDD сценарии + дизайн — слишком узкое. Есть много способов, и эти два на мой взгляд не являются единственными.

                          По поводу реализации и дизайна все зависит от обстоятельств. В идеальном мире у разработчиков есть все, что нужно перед началом работы. В реальном конечно же нет. Если есть возможность, надо приближаться к идеалу. Если нет, работать с имеющейся информацией. Мы тоже когда начинали v.3 не имели готового дизайна, а всего лишь общую идею с приличной глубиной проработки. Дизайн устаканивался несколько месяцев, и конечно вся команда работала над функционалом в это время. Просто потом было много переделок, но тут уж нужно решить, что важнее — деньги сэкономить или время.
                          • 0
                            Хорошо, давайте возьмём пример прямо из Википедии. Предположим, нам необходимо построить мост через реку. Причём не обычный мост, а что-нибудь типа Аламильо. Скажем, к Олимпиаде нужно создать настоящий шедевр инженерного искусства.

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

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

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

                            Когда же мы переходим к согласованию, мы начинаем оперировать вполне конкретными величинами. Мы начинаем специфицировать характеристики продукта. Это значения, использующиеся в тестовых сценариях, и это элементы интерфейса (с точными размерами, цветами, состояниями) на дизайнах. Любое изменение какого-то из этих элементов изменит характеристики реальной системы. И некоторые изменения не уступают в цене тем, что вносятся в конструкцию моста.

                            В этой связи мне наиболее интересна возможность применения принципов итеративности и инкрементности к разработке дизайна. Я на практике убедился, что дизайнеры не любят оценивать отдельные истории и в большинстве своём страдают тяжёлыми формами перфекционизма, поэтому им действительно крайне сложно вписываться в рамки спринта. Майк Кон же говорил ещё и о второй проблеме – восприятии пользователями. Если мы работаем над продуктом, находящимся в промышленной эксплуатации, кардинальные изменения в интерфейсе чреваты серьёзным ухудшением взаимоотношений с клиентами.

                            С другой стороны, опытные дизайнеры неплохо контролируют свой перфекционизм и могут соизмерять прикладываемые усилия с доступным временем. При этом большинство из нас, думаю, уже привыкло к частым сменам диза популярных сервисов, А-Б тестам и «гонке вооружений» интернет-гигантов. Это бывает неприятно, но абсолютно не смертельно.

                            У меня есть подозрения, что если дизайнер в полной мере будет понимать сущность итеративного процесса и примет его для себя, он сможет в него вписаться и создавать дизайн приложения эволюционно. Тогда можно добиться уже самой настоящей гибкости в управлении продуктом, разрезая до конца все слои пирога. Только следите себе за ситуацией и развивайте систему в нужную сторону.
                            • 0
                              1 — разработка ПО и строительство моста вещи довольно разные. Если для моста нужны все детали и просчет, для ПО обычного этого не нужно. И время затраченное на такую проработку деталей будет потрачено впустую. Поэтому скетчи вполне могут стать частью спека.

                              2 — хорошее решение невозможно придумать за 2 недели. Если перед спринтом нет ничего, а только юзер стори, то для любой мало-мальски сложной проблемы не будет сделано хорошее решение. Посредственные — сколько угодно. Хорошие решения требуют времени. После 10 лет в продукте мы пришли к тому, что фазы UX и разработки разделены. UX фаза длинная и обычно нужно десяток итераций, чтобы найти хорошее решение.

                              3 — разбиение большой задачи на маленькие и решение каждой задачи в контексте спринта — плохая практика. Очень легко потом получить странный функционал, который нужно будет переделать. Гораздо эффективнее продумать важные кейсы заранее и придумать решение, которое будет элегантно решать большинство из них. Конечно, можно ошибиться с самими кейсами. Поэтому если знания в домене невелики, то лучше выпустить хоть что-то на рынок и собрать фидбек. Если знаний много — это не обязательно делать.
                              • 0
                                Если не возражаете, продолжим выращивать гриб Истины +)

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

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

                                3 — реализацией элегантного решения для выбранных важных кейсов и является процесс достижения цели спринта. При этом ключевым фактором является полное вовлечение всей команды, тогда как при долгом проектировании взаимодействия ограниченным составом теряется из вида то ценность, то реализуемость компонентов. В результате разработчиков принуждают создавать программных монстров на грани используемых технологий, которые в итоге не дотягивают до необходимых нефункциональных параметров, и весь эффект продуманности деталей смазывается проблемами с быстродействием и надёжностью. Или, того хуже, дорогущий компонент оказывается маловостребованным.
                                • 0
                                  Я не согласен по всем пунктам.
                                  1 — детальный дизайн не лучше скетча во многих случаях, если уже есть дизайн всех готовых компонент. В этом случае, например, скетча более чем достаточно. И так ясно, где какая компонента будет. Думаю, таких случаев можно придумать еще

                                  2 — Хорошее решение любой более-менее сложной проблемы невозможно придумать за 2 недели. Точка. Понятно, что форму логина можно придумать за час. Таймлайны в Targetprocess можно придумать за месяца 2 при достаточно интенсивной работе. 9 женщин не могут родить ребенка за месяц. С проектирование часто тоже так.

                                  3 — Ничего не теряется. Надо просто правильно организовать процесс. И на выходе говно тоже зависит полностью от процесса и людей, которые в этом участвуют. Никаких принуждений не нужно. Нужно вовлекать в процесс всех на ранних стадиях и все будет хорошо.
                                  • 0
                                    Отлично, значит есть достаточно поводов для продолжения!

                                    1 — «если уже есть дизайн всех готовых компонент», скетча действительно будет достаточно. Спецификация не нужна +)) Именно это я и пытаюсь объяснить. Простенькое наглядное подспорье для объяснения и спецификация – это разные вещи. Нужно искать для первого более подходящее название, потому что психологическая инерция слова «спецификация» неиллюзорно вводит в заблужение. Точно так же, как подробное описание задачи кажется исчерпывающим, хотя это не так. Такие «мелочи» зачастую имеют решающее значение. И в гибкой разработке об этом знают.

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

                                    3 — действительно, от людей и процесса. И, если вся команда 2 месяца работает над UX решением, это действительно круто. Но что-то мне подсказывает, что в реальности происходит иначе. Разработчики отвлекаются на код – дизайнерами лабаются громоздкие (с точки зрения реализации) решения, управляющий отвлекается на клиентов – начинаются украшательства от разработчиков. Дело не в принуждении, а именно что в процессе. Я вижу основную ценность гибкого процесса в правильном управлением вниманием. Никто не хочет лажать, просто мы крайне неудачно отвлекаемся. Это можно решить вне спринтов. И это хорошая задача. Но спринты делают своё дело, хотим мы того или нет.
                        • –5
                          1.Открыл пост 2.Дошел до фразы «в ж… спецификации!» 3.Закрыл пост
                          • –1
                            Поделюсь реальным примером крутой спецификации от stepahin:
                            image
                            • 0
                              Где-то я это уже слышал…
                              • +2
                                Очень порадовало второе упоминание Гёделя, дивергенции и корреляции.
                              • 0
                                “пользователь осуществляет операцию перехода на следующий раздел клиентского приложения путем двойного нажатия на левую кнопку манипулятора типа мышь”


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

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