сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · Требования

Качество требований

Качество требований

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

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

// Формулировки: «оцени это требование», «что здесь плохо?», «как переписать?»

Проверяемость - главное свойство

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

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

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

Однозначность и атомарность

Однозначность ломается на словах-резинках: «современные браузеры», «в разумный срок», «при необходимости», «корректно обрабатывает». Каждое из них читается по-разному аналитиком, разработчиком и тестировщиком, и все трое будут уверены, что поняли правильно.

Отдельный маркер - конструкция «и/или». Почти всегда она означает не то, что вариантов правда два, а то, что решение просто не принято и его отложили. Правильная реакция - вернуться к владельцу требования и спросить, а не решить за него.

Атомарность - это одно проверяемое утверждение на требование. «Система отправляет письмо и SMS» неатомарно, и вот чем это плохо на практике: письмо работает, SMS нет. Требование выполнено или нет? Статус становится неопределённым, в отчёте о покрытии оно висит наполовину, и спор о приёмке начинается на ровном месте.

// Разделение даёт две вещи сразу: независимую приёмку каждой части и честную трассировку, где видно, какая именно половина не сделана. Стоит это одной лишней строки в документе.

Полнота на двух уровнях

Слово «полнота» означает разное применительно к набору и к отдельной строке, и путать их - значит искать дыры не тем инструментом.

У набора полнота - про охват: не забыты ли альтернативные потоки, все ли роли учтены, описано ли поведение во всех состояниях и при ошибках. Ищется обходом сценариев: берёшь путь пользователя и на каждом шаге спрашиваешь «а если нет».

У отдельного требования полнота - про самодостаточность: есть ли условие, действие и результат, не висит ли в конце «и так далее». Ищется обычной вычиткой текста, без всяких сценариев.

// Самая дорогая дыра полноты - незаданное поведение при ошибке. Оно всё равно будет реализовано: решение примет разработчик, молча и на своё усмотрение, а узнаешь ты об этом на приёмке или, что хуже, от пользователя.

Как отвечать: «Что не так с требованием: система должна быть производительной?»

Оно непроверяемо, и это не придирка: нет показателя, нет условий замера и нет порога, поэтому принять по нему работу невозможно, и спроектировать под него тоже нельзя - непонятно, на что закладываться. Я бы вернулся к автору и выяснил, где именно болит: какая страница медленная, при какой нагрузке, какое время ответа считается приемлемым. После этого требование выглядело бы примерно так: время ответа страницы каталога не превышает 300 миллисекунд на 95-м перцентиле при нагрузке 200 запросов в секунду в промышленной среде. Такую формулировку уже можно заложить в нагрузочный тест и по ней принять работу без единого спора.

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

На чём валятся

  • − Считают, что согласованное требование и есть качественное: подписать можно и совершенно непроверяемую формулировку.
  • − Сами решают за владельца, что означало «и/или», вместо того чтобы вернуться и спросить.
  • − Путают полноту набора с полнотой формулировки и ищут дыры не тем инструментом.
  • − Пишут критерии только на успешный путь: поведение при ошибках доопределяет разработчик.
  • − Гонятся за подробностью вместо проверяемости: длинный текст без критерия приёмки остаётся пожеланием.

Проверьте себя

Пять вопросов из банка по этой подтеме. Всего их 13, остальные разбираются в тренажёре.

  1. #ana_req_quality1 / 5
    Два требования говорят разное о сроке блокировки счёта: 30 и 90 дней. Какое свойство нарушено?
    A)Непротиворечивость
    B)Полнота
    C)Атомарность
    D)Модифицируемость
    показать ответ и разбор
    +A)Непротиворечивость

    // разбор: Непротиворечивость — отсутствие требований, которые нельзя выполнить одновременно. Такой конфликт почти всегда следствие двух источников: разные подразделения дали свои цифры, а сведением никто не занимался. Разработка выберет ту, что попалась первой, и расхождение всплывёт на приёмке или в проде.

  2. #ana_req_quality2 / 5
    «Система должна поддерживать современные браузеры». Что здесь главная проблема?
    A)Требование нефункциональное, а записано среди функциональных
    B)«Современные» не определено — список разойдётся
    C)Требование избыточно, браузеры и так поддерживаются
    D)Не указан язык интерфейса
    показать ответ и разбор
    +B)«Современные» не определено — список разойдётся

    // разбор: Ключевая беда — неоднозначность: разработка прочтёт «две последние версии Chrome», а заказчик вспомнит про корпоративный парк с устаревшим браузером. Требование по совместимости должно перечислять конкретные браузеры и версии либо задавать правило («две последние мажорные версии на дату релиза»), иначе приёмка упрётся в спор.

  3. #ana_req_quality3 / 5
    Чем полнота набора требований отличается от полноты отдельного требования?
    A)Это одно и то же свойство, названное на двух уровнях
    B)Полнота требования важна только для НФТ
    C)Полнота набора проверяется тестами, полнота требования — согласованием
    D)Набор полон по охвату сценариев, требование — по условиям
    показать ответ и разбор
    +D)Набор полон по охвату сценариев, требование — по условиям

    // разбор: На уровне набора полнота — про охват: не забыты ли альтернативные потоки, роли, состояния и ошибки. На уровне формулировки — про самодостаточность: указаны ли условие, действие и результат, нет ли висящего «и так далее». Пропуск на любом уровне даёт дыру, но ищут их разными приёмами: обход сценариев против вычитки текста.

  4. #ana_req_quality4 / 5
    Требование: «При ошибке оплаты показать сообщение и/или отправить письмо». Что делать аналитику?
    A)Оставить как есть — разработка выберет удобный вариант
    B)Заменить на «и», это безопаснее
    C)Выяснить у владельца и зафиксировать однозначно
    D)Разбить на два независимых требования и оба сделать обязательными
    показать ответ и разбор
    +C)Выяснить у владельца и зафиксировать однозначно

    // разбор: Конструкция «и/или» — маркер того, что решение не принято, а не того, что вариантов правда несколько. Аналитик обязан вернуться к источнику и получить решение: сообщение всегда, письмо — только при повторной ошибке, например. Любая самостоятельная замена союза лишь маскирует пробел и всплывает на приёмке как дефект.

  5. #ana_req_quality5 / 5
    Требование проверяемо и однозначно, но не трассируемо. Чем это грозит?
    A)Ничем: если требование проверяется, остальное формальность
    B)Непонятно, зачем оно нужно и что сломается при его отмене
    C)Автотесты на него писать дороже обычного
    D)Оно обязательно противоречит другим требованиям
    показать ответ и разбор
    +B)Непонятно, зачем оно нужно и что сломается при его отмене

    // разбор: Трассировка связывает требование вверх с бизнес-целью и вниз с реализацией и тестами. Без связи вверх никто не докажет ценность: при сокращении объёма такие требования режут вслепую либо, наоборот, тащат мёртвый груз годами. Без связи вниз изменение требования не находит затронутый код и тесты.

дальше

Теорию прочитали. Навык ставится повторением

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