💡 Инструкция: Выберите один ответ из пяти. На 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
Что остаётся верным о теме «Декомпозиция», если учитывать контекст, отказ и побочный эффект?
Слишком мелкие функции, меняющие общий глобальный массив, могут ухудшить понимание сильнее исходного монолита.
Ограничение «Слишком мелкие функции, меняющие общий глобальный хеш, могут ухудшить понимание сильнее исходного монолита» исчезает, если обычный пример один раз завершился успешно.
Слишком мелкие функции, меняющие отдельный глобальный хеш, могут ухудшить понимание сильнее исходного монолита.
Слишком мелкие функции, меняющие общий глобальный хеш, могут ухудшить понимание сильнее исходного монолита.
Слишком мелкие функции, меняющие общий локальный хеш, могут ухудшить понимание сильнее исходного монолита.