💡 Инструкция: Выберите один ответ из пяти. На работу отведено 85 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 3 из 30
Код проходит обычный сценарий. Какие проверки по теме «Трассировки» нужны, чтобы разные граничные исходы не слились в один?
Dart Dart · Трассировки · границы Копировать
Future<void> refresh() async {
try {
await repository.refresh();
} catch (error, stack) {
Error.throwWithStackTrace(RefreshFailed(error), stack);
}
}
// Контекст задания: анализ граничных входов.
Автоматизировать обычный путь «Трассировки», а случай «не являющийся причиной» оставить в ручном чек-листе выпуска.
Проверить для «Трассировки» только самый сложный случай «не являющийся причиной», считая остальные границы косвенно покрытыми.
Во всех спорных входах «Трассировки» проверять только отсутствие необработанного исключения, не сравнивая состояние.
Проверить независимо друг от друга: асинхронная граница, обёрнутое исключение, отсутствующие символы и первый пользовательский кадр, не являющийся причиной.
Проверить входы «Трассировки» только на текущей реализации, не закрепляя результат как внешний договор. Отдельное состояние после отказа «Трассировки» в таком плане не анализируется.
Вопрос 6 из 30
Для показанного решения написали один тест на успех. Какой набор граничных сценариев по теме «Отчёты об авариях» должен появиться рядом?
Dart Dart · Отчёты об авариях · границы Копировать
void reportCrash(Object error, StackTrace stack) {
crashes.record(
error,
stack,
tags: {'appVersion': build.version, 'platform': platform.name, 'screen': route.name},
);
}
// Контекст задания: анализ граничных входов.
Проверить для «Отчёты об авариях» только самый сложный случай «чувствительные пользовательские данные», считая остальные границы косвенно покрытыми.
Задать самостоятельные ожидания для случаев: отчёт без версии и платформы, дубли одинакового сбоя и чувствительные пользовательские данные.
Объединить «отчёт без версии и платформы» и «дубли одинакового сбоя» в один тест «Отчёты об авариях» с общим ожидаемым исходом.
Автоматизировать обычный путь «Отчёты об авариях», а случай «чувствительные пользовательские данные» оставить в ручном чек-листе выпуска.
Для «Отчёты об авариях» ограничиться случаем «отчёт без версии и платформы», а остальные входы считать тем же классом отказа.
Вопрос 8 из 30
Какое утверждение корректно связывает показанный код с семантикой темы «Отчёты об авариях»?
Dart Dart · Отчёты об авариях · семантика Копировать
void reportCrash(Object error, StackTrace stack) {
crashes.record(
error,
stack,
tags: {'appVersion': build.version, 'platform': platform.name, 'screen': route.name},
);
}
// Контекст задания: проверка семантики фрагмента.
Для «Отчёты об авариях» считать случаи «отчёт без версии и платформы, дубли одинакового сбоя и чувствительные пользовательские данные» эквивалентными, если программа не завершается аварийно.
Порядок внутренних вызовов «Отчёты об авариях» считать публичной гарантией, которую нельзя менять при рефакторинге. Вывод делают по поведению текущей реализации «Отчёты об авариях» на обычном входе.
Crash report полезен вместе с версией, платформой, символами и последовательностью обезличенных событий; полный пользовательский ввод в отчёте создаёт новую утечку.
Случай «чувствительные пользовательские данные» объявить внутренней деталью «Отчёты об авариях», даже если клиент видит иной результат.
Спорный результат «Отчёты об авариях» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь.
Вопрос 21 из 30
Какой вывод о фрагменте «Контроль ресурсов» останется верным после безопасного рефакторинга?
Dart Dart · Контроль ресурсов · семантика Копировать
final class NativeBuffer implements Finalizable {
NativeBuffer(this.pointer, this.length) {
_finalizer.attach(this, pointer.cast(), detach: this);
}
final Pointer<Uint8> pointer;
final int length;
void dispose() => _finalizer.detach(this);
}
// Контекст задания: проверка семантики фрагмента.
Для «Контроль ресурсов» считать случаи «контроллер, подписка, таймер, порт или нативная память без симметричного завершения» эквивалентными, если программа не завершается аварийно.
Контроллеры, подписки, таймеры, порты и нативная память имеют владельца и симметричное освобождение; `dispose` должен быть безопасен при ожидаемом порядке жизненного цикла.
Спорный результат «Контроль ресурсов» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь. Вывод делают по поведению текущей реализации «Контроль ресурсов» на обычном входе.
Случай «порт или нативная память без симметричного завершения» объявить внутренней деталью «Контроль ресурсов», даже если клиент видит иной результат.
Порядок внутренних вызовов «Контроль ресурсов» считать публичной гарантией, которую нельзя менять при рефакторинге. Дополнительные границы «Контроль ресурсов» при таком рассуждении считают избыточными.