💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом вопросе верен только один вариант. После завершения откроются общий результат, оценки по 6 тематическим шкалам и подробный разбор.
Вопрос 8 из 30
Какой риск связан именно с операциями `rewrite_all` и `then_add_tests`?
Perl Характеризующие тесты Копировать
rewrite_all(); then_add_tests();
Показанный код уже соблюдает правило «Характеризующие тесты покрывают реальные примеры, ошибки и побочные эффекты, особенно странности, от которых зависят пользователи», поэтому отдельного дефекта нет.
Причина сбоя совпадает с обычным результатом примера: Характеризующий тест фиксирует наблюдаемое поведение до рефакторинга, не утверждая, что оно идеально.
Проблема возникает в исправленном варианте: Поведение фиксируется на границах, затем изменения делаются небольшими шагами.
После полного переписывания уже невозможно отличить намеренное изменение от случайной потери поведения.
Показанный сбой объясняется не кодом, а таким пределом механизма: Золотые файлы удобны для большого вывода, но нуждаются в осмысленном сравнении, иначе любое изменение превращается в слепое обновление эталона.
Вопрос 12 из 30
Что нужно заметить при ревью фрагмента «Воспроизводимость результата»?
Perl Воспроизводимость результата Копировать
my %seen = map { $_ => 1 } qw(alpha beta gamma);
print join ',', keys %seen;
Причину отказа точнее описывает соседняя граница темы: Точный байтовый повтор не всегда нужен, но семантические различия должны быть отделены от шума представления.
Риск возникает уже в обычном результате: Канонический порядок ключей делает сериализованный результат стабильнее для сравнения.
Показанный код уже соблюдает правило «Воспроизводимость требует одинакового входа, кода, зависимостей, конфигурации, времени/часового пояса и детерминированного порядка», поэтому отдельного дефекта нет.
Проблема возникает в исправленном варианте: Порядок, локаль, часовой пояс, версии и случайность фиксируются как часть воспроизводимого запуска.
Порядок хеша не гарантирован, поэтому одинаковый расчёт даёт разный текстовый результат.
Вопрос 14 из 30
Какую гарантию добавляет правка «Характеризующие тесты» с `capture_inputs_outputs_side_effects`, `change_one_seam` и `compare_results`?
Perl Характеризующие тесты Копировать
capture_inputs_outputs_side_effects();
change_one_seam();
compare_results();
Поведение фиксируется на границах, затем изменения делаются небольшими шагами.
Правка решает задачу тем, что устраняет следующую границу: Золотые файлы удобны для большого вывода, но нуждаются в осмысленном сравнении, иначе любое изменение превращается в слепое обновление эталона.
Изменение формы записи само по себе обеспечивает правило «Характеризующие тесты покрывают реальные примеры, ошибки и побочные эффекты, особенно странности, от которых зависят пользователи».
Правка лишь воспроизводит исходное поведение: Характеризующий тест фиксирует наблюдаемое поведение до рефакторинга, не утверждая, что оно идеально.
После изменения сохраняется прежний дефект: После полного переписывания уже невозможно отличить намеренное изменение от случайной потери поведения.
Вопрос 16 из 30
Что именно стало надёжнее после изменения в блоке «Замена глобального состояния»?
Perl Замена глобального состояния Копировать
sub new { bless {config=>$cfg,db=>$dbh},shift }
Правка лишь воспроизводит исходное поведение: Пакетные глобальные значения связывают запросы и тесты, а в долгоживущем процессе могут протекать между операциями.
Зависимости становятся состоянием конкретного объекта и передаются при создании.
Правка решает задачу тем, что устраняет следующую границу: Неизменяемую конфигурацию можно разделять, но текущий пользователь, транзакция и временные результаты должны быть локальны операции.
После изменения сохраняется прежний дефект: local временно меняет пакетную переменную, но не устраняет скрытую зависимость и усложняет параллельные тесты.
Изменение формы записи само по себе обеспечивает правило «Глобальное состояние заменяют объектом контекста, параметрами или явным сервисом, начиная с границы, которую можно покрыть тестом».
Вопрос 20 из 30
Какой принцип объясняет три кодовых примера блока «Характеризующие тесты»?
Для ревью достаточно исключить частный дефект: После полного переписывания уже невозможно отличить намеренное изменение от случайной потери поведения.
Правило «Характеризующие тесты покрывают реальные примеры, ошибки и побочные эффекты, особенно странности, от которых зависят пользователи» гарантирует, что ограничение «Золотые файлы удобны для большого вывода, но нуждаются в осмысленном сравнении, иначе любое изменение превращается в слепое обновление эталона» больше не проявится.
Общее правило темы «Характеризующие тесты» сводится к частному результату: Характеризующий тест фиксирует наблюдаемое поведение до рефакторинга, не утверждая, что оно идеально.
Характеризующие тесты покрывают реальные примеры, ошибки и побочные эффекты, особенно странности, от которых зависят пользователи.
Для всех случаев темы подходит одно изменение: Поведение фиксируется на границах, затем изменения делаются небольшими шагами.
Вопрос 22 из 30
Какой принцип объясняет три кодовых примера блока «Замена глобального состояния»?
Глобальное состояние заменяют объектом контекста, параметрами или явным сервисом, начиная с границы, которую можно покрыть тестом.
Правило «Глобальное состояние заменяют объектом контекста, параметрами или явным сервисом, начиная с границы, которую можно покрыть тестом» гарантирует, что ограничение «Неизменяемую конфигурацию можно разделять, но текущий пользователь, транзакция и временные результаты должны быть локальны операции» больше не проявится.
Общее правило темы можно свести к предотвращению одного сбоя: local временно меняет пакетную переменную, но не устраняет скрытую зависимость и усложняет параллельные тесты.
Общее правило темы «Замена глобального состояния» сводится к частному результату: Пакетные глобальные значения связывают запросы и тесты, а в долгоживущем процессе могут протекать между операциями.
Достаточно применить следующее исправление: Зависимости становятся состоянием конкретного объекта и передаются при создании.
Вопрос 24 из 30
Какую закономерность проверяют задания темы «Воспроизводимость результата»?
Весь контракт блока обеспечивает такая правка: Порядок, локаль, часовой пояс, версии и случайность фиксируются как часть воспроизводимого запуска.
Воспроизводимость требует одинакового входа, кода, зависимостей, конфигурации, времени/часового пояса и детерминированного порядка.
Общее правило темы «Воспроизводимость результата» сводится к частному результату: Канонический порядок ключей делает сериализованный результат стабильнее для сравнения.
Всю тему можно представить как защиту от одного отказа: Порядок хеша не гарантирован, поэтому одинаковый расчёт даёт разный текстовый результат.
Правило «Воспроизводимость требует одинакового входа, кода, зависимостей, конфигурации, времени/часового пояса и детерминированного порядка» гарантирует, что ограничение «Точный байтовый повтор не всегда нужен, но семантические различия должны быть отделены от шума представления» больше не проявится.
Вопрос 27 из 30
Что остаётся верным о теме «Декомпозиция», если учитывать контекст, отказ и побочный эффект?
Слишком мелкие функции, меняющие общий глобальный хеш, могут ухудшить понимание сильнее исходного монолита.
Слишком мелкие функции, меняющие общий локальный хеш, могут ухудшить понимание сильнее исходного монолита.
Слишком мелкие функции, меняющие общий глобальный массив, могут ухудшить понимание сильнее исходного монолита.
Ограничение «Слишком мелкие функции, меняющие общий глобальный хеш, могут ухудшить понимание сильнее исходного монолита» исчезает, если обычный пример один раз завершился успешно.
Слишком мелкие функции, меняющие отдельный глобальный хеш, могут ухудшить понимание сильнее исходного монолита.