Качество требований
Тебе дадут формулировку и спросят, что с ней не так. Это самый частый практический вопрос на собесе аналитика, потому что он проверяет не память, а рабочий рефлекс - тот самый, который срабатывает при вычитке чужого документа.
Стержень: у требования есть набор проверяемых свойств - проверяемость, однозначность, атомарность, непротиворечивость, полнота, трассируемость. Каждое ловит свой класс дефектов, и знать их полезно именно как чек-лист, а не как определения.
// Формулировки: «оцени это требование», «что здесь плохо?», «как переписать?»
Проверяемость - главное свойство
Требование проверяемо, если существует процедура, однозначно устанавливающая факт выполнения: тест, замер, демонстрация. Ключевое слово - однозначно: результат не должен зависеть от того, кто именно проверяет и в каком настроении.
Именно это отличает требование от пожелания. «Интерфейс должен быть удобным» непроверяемо: удобство у каждого своё, и приёмка превращается в спор о вкусах, где выигрывает тот, кто громче. Переписывается через наблюдаемое поведение: «новый пользователь оформляет заказ не более чем за три шага».
// Быстрый тест на любой строке документа: спроси себя, как ты будешь принимать по ней работу. Придумал процедуру - требование живое. Не придумал - оно сырое, и лучше выяснить это сейчас, а не на демонстрации через два месяца.
Однозначность и атомарность
Однозначность ломается на словах-резинках: «современные браузеры», «в разумный срок», «при необходимости», «корректно обрабатывает». Каждое из них читается по-разному аналитиком, разработчиком и тестировщиком, и все трое будут уверены, что поняли правильно.
Отдельный маркер - конструкция «и/или». Почти всегда она означает не то, что вариантов правда два, а то, что решение просто не принято и его отложили. Правильная реакция - вернуться к владельцу требования и спросить, а не решить за него.
Атомарность - это одно проверяемое утверждение на требование. «Система отправляет письмо и SMS» неатомарно, и вот чем это плохо на практике: письмо работает, SMS нет. Требование выполнено или нет? Статус становится неопределённым, в отчёте о покрытии оно висит наполовину, и спор о приёмке начинается на ровном месте.
// Разделение даёт две вещи сразу: независимую приёмку каждой части и честную трассировку, где видно, какая именно половина не сделана. Стоит это одной лишней строки в документе.
Полнота на двух уровнях
Слово «полнота» означает разное применительно к набору и к отдельной строке, и путать их - значит искать дыры не тем инструментом.
У набора полнота - про охват: не забыты ли альтернативные потоки, все ли роли учтены, описано ли поведение во всех состояниях и при ошибках. Ищется обходом сценариев: берёшь путь пользователя и на каждом шаге спрашиваешь «а если нет».
У отдельного требования полнота - про самодостаточность: есть ли условие, действие и результат, не висит ли в конце «и так далее». Ищется обычной вычиткой текста, без всяких сценариев.
// Самая дорогая дыра полноты - незаданное поведение при ошибке. Оно всё равно будет реализовано: решение примет разработчик, молча и на своё усмотрение, а узнаешь ты об этом на приёмке или, что хуже, от пользователя.
Как отвечать: «Что не так с требованием: система должна быть производительной?»
Оно непроверяемо, и это не придирка: нет показателя, нет условий замера и нет порога, поэтому принять по нему работу невозможно, и спроектировать под него тоже нельзя - непонятно, на что закладываться. Я бы вернулся к автору и выяснил, где именно болит: какая страница медленная, при какой нагрузке, какое время ответа считается приемлемым. После этого требование выглядело бы примерно так: время ответа страницы каталога не превышает 300 миллисекунд на 95-м перцентиле при нагрузке 200 запросов в секунду в промышленной среде. Такую формулировку уже можно заложить в нагрузочный тест и по ней принять работу без единого спора.
Кандидат называет дефект, показывает три недостающие части, говорит, что именно пойдёт выяснять, и переписывает требование в проверяемый вид. Три шага вместо одного диагноза.
На чём валятся
- −− Считают, что согласованное требование и есть качественное: подписать можно и совершенно непроверяемую формулировку.
- −− Сами решают за владельца, что означало «и/или», вместо того чтобы вернуться и спросить.
- −− Путают полноту набора с полнотой формулировки и ищут дыры не тем инструментом.
- −− Пишут критерии только на успешный путь: поведение при ошибках доопределяет разработчик.
- −− Гонятся за подробностью вместо проверяемости: длинный текст без критерия приёмки остаётся пожеланием.
Проверьте себя
Пять вопросов из банка по этой подтеме. Всего их 13, остальные разбираются в тренажёре.
- Два требования говорят разное о сроке блокировки счёта: 30 и 90 дней. Какое свойство нарушено?A)НепротиворечивостьB)ПолнотаC)АтомарностьD)Модифицируемость
показать ответ и разбор
+A)Непротиворечивость// разбор: Непротиворечивость — отсутствие требований, которые нельзя выполнить одновременно. Такой конфликт почти всегда следствие двух источников: разные подразделения дали свои цифры, а сведением никто не занимался. Разработка выберет ту, что попалась первой, и расхождение всплывёт на приёмке или в проде.
- «Система должна поддерживать современные браузеры». Что здесь главная проблема?A)Требование нефункциональное, а записано среди функциональныхB)«Современные» не определено — список разойдётсяC)Требование избыточно, браузеры и так поддерживаютсяD)Не указан язык интерфейса
показать ответ и разбор
+B)«Современные» не определено — список разойдётся// разбор: Ключевая беда — неоднозначность: разработка прочтёт «две последние версии Chrome», а заказчик вспомнит про корпоративный парк с устаревшим браузером. Требование по совместимости должно перечислять конкретные браузеры и версии либо задавать правило («две последние мажорные версии на дату релиза»), иначе приёмка упрётся в спор.
- Чем полнота набора требований отличается от полноты отдельного требования?A)Это одно и то же свойство, названное на двух уровняхB)Полнота требования важна только для НФТC)Полнота набора проверяется тестами, полнота требования — согласованиемD)Набор полон по охвату сценариев, требование — по условиям
показать ответ и разбор
+D)Набор полон по охвату сценариев, требование — по условиям// разбор: На уровне набора полнота — про охват: не забыты ли альтернативные потоки, роли, состояния и ошибки. На уровне формулировки — про самодостаточность: указаны ли условие, действие и результат, нет ли висящего «и так далее». Пропуск на любом уровне даёт дыру, но ищут их разными приёмами: обход сценариев против вычитки текста.
- Требование: «При ошибке оплаты показать сообщение и/или отправить письмо». Что делать аналитику?A)Оставить как есть — разработка выберет удобный вариантB)Заменить на «и», это безопаснееC)Выяснить у владельца и зафиксировать однозначноD)Разбить на два независимых требования и оба сделать обязательными
показать ответ и разбор
+C)Выяснить у владельца и зафиксировать однозначно// разбор: Конструкция «и/или» — маркер того, что решение не принято, а не того, что вариантов правда несколько. Аналитик обязан вернуться к источнику и получить решение: сообщение всегда, письмо — только при повторной ошибке, например. Любая самостоятельная замена союза лишь маскирует пробел и всплывает на приёмке как дефект.
- Требование проверяемо и однозначно, но не трассируемо. Чем это грозит?A)Ничем: если требование проверяется, остальное формальностьB)Непонятно, зачем оно нужно и что сломается при его отменеC)Автотесты на него писать дороже обычногоD)Оно обязательно противоречит другим требованиям
показать ответ и разбор
+B)Непонятно, зачем оно нужно и что сломается при его отмене// разбор: Трассировка связывает требование вверх с бизнес-целью и вниз с реализацией и тестами. Без связи вверх никто не докажет ценность: при сокращении объёма такие требования режут вслепую либо, наоборот, тащат мёртвый груз годами. Без связи вниз изменение требования не находит затронутый код и тесты.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.