RB Ruby  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Сопровождение старого Ruby-кода

Тест «Сопровождение старого Ruby-кода» проверяет чтение кода, объяснение причин, поиск скрытых рисков, выбор исправления и работу с граничными сценариями. В нём 30 вопросов, 18 заданий с Ruby-кодом и 6 тематических шкал.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Время — 85 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 6 тематических результатов и разбор всех ответов.
Вопрос 1 из 30
Какой вариант верно описывает состояние объектов после выполнения кода «Обновление версии»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Обновление версии
# Проследите выполнение и выберите точный результат.
# Пример проверки окружения
abort 'unsupported ruby' unless Gem::Requirement.new('>= 3.3', '< 4.1')
  .satisfied_by?(Gem::Version.new(RUBY_VERSION))
p [RUBY_VERSION, Bundler::VERSION]
Вопрос 2 из 30
Что произойдёт после последней строки в примере по теме «Устаревшие API»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Устаревшие API
# Проследите выполнение и выберите точный результат.
warnings = []
original = Warning.method(:warn)
Warning.define_singleton_method(:warn) { |msg, **| warnings << msg }
# вызвать совместимый слой
p warnings
Warning.define_singleton_method(:warn, original)
Вопрос 3 из 30
Как следует прочитать результат показанного примера «Характеризующие тесты»? Выберите связку, в которой верны и основной вывод, и его обоснование.
RubyRuby — Характеризующие тесты
# Проследите выполнение и выберите точный результат.
legacy = LegacyPrice.new
result = legacy.render(10.005, currency: 'EUR')
expected = 'EUR 10.01'
raise [expected, result].inspect unless result == expected
Вопрос 4 из 30
Проследите выполнение фрагмента. Какой результат верен для темы «Пошаговый рефакторинг»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Пошаговый рефакторинг
# Проследите выполнение и выберите точный результат.
class PriceCalculator
  def initialize(new_engine: false)
    @engine = new_engine ? NewPrice.new : LegacyPrice.new
  end
  def call(order)
    @engine.call(order)
  end
end
Вопрос 5 из 30
Не запуская пример, выберите точный итог для блока «Разбор отказов». Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Разбор отказов
# Проследите выполнение и выберите точный результат.
Rails.logger.error(
  event: 'legacy_failure',
  ruby: RUBY_VERSION,
  commit: ENV['APP_REVISION'],
  request_id: request.request_id,
  error_class: error.class.name
)
Вопрос 6 из 30
Не запуская пример, выберите точный итог для блока «Восстановление системы». Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Восстановление системы
# Проследите выполнение и выберите точный результат.
if ENV['READ_ONLY_MODE'] == '1'
  raise ServiceUnavailable, 'writes are temporarily disabled'
end
OrderCommand.call(params)
Вопрос 7 из 30
Что в реализации по теме «Обновление версии» требует исправления прежде всего? Правильным считается только полностью согласованное утверждение.
RubyRuby — Обновление версии
# Обычный запуск проходит. Найдите скрытый риск.
# Пример проверки окружения
abort 'unsupported ruby' unless Gem::Requirement.new('>= 3.3', '< 4.1')
  .satisfied_by?(Gem::Version.new(RUBY_VERSION))
p [RUBY_VERSION, Bundler::VERSION]
Вопрос 8 из 30
Какой отказ связан с причиной в коде, а не с внешним шумом, в теме «Устаревшие API»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Устаревшие API
# Обычный запуск проходит. Найдите скрытый риск.
warnings = []
original = Warning.method(:warn)
Warning.define_singleton_method(:warn) { |msg, **| warnings << msg }
# вызвать совместимый слой
p warnings
Warning.define_singleton_method(:warn, original)
Вопрос 9 из 30
Что может сломаться при переносе этого решения «Характеризующие тесты» в рабочую систему? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Характеризующие тесты
# Обычный запуск проходит. Найдите скрытый риск.
legacy = LegacyPrice.new
result = legacy.render(10.005, currency: 'EUR')
expected = 'EUR 10.01'
raise [expected, result].inspect unless result == expected
Вопрос 10 из 30
Почему успешный пример ещё не доказывает надёжность решения «Пошаговый рефакторинг»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Пошаговый рефакторинг
# Обычный запуск проходит. Найдите скрытый риск.
class PriceCalculator
  def initialize(new_engine: false)
    @engine = new_engine ? NewPrice.new : LegacyPrice.new
  end
  def call(order)
    @engine.call(order)
  end
end
Вопрос 11 из 30
Какой рабочий сбой вероятнее всего связан именно с механизмом «Разбор отказов»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Разбор отказов
# Обычный запуск проходит. Найдите скрытый риск.
Rails.logger.error(
  event: 'legacy_failure',
  ruby: RUBY_VERSION,
  commit: ENV['APP_REVISION'],
  request_id: request.request_id,
  error_class: error.class.name
)
Вопрос 12 из 30
Какой риск не исчезает после успешного запуска кода «Восстановление системы»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Восстановление системы
# Обычный запуск проходит. Найдите скрытый риск.
if ENV['READ_ONLY_MODE'] == '1'
  raise ServiceUnavailable, 'writes are temporarily disabled'
end
OrderCommand.call(params)
Вопрос 13 из 30
Какой механизм отделяет верный разбор от похожего, но ошибочного объяснения «Обновление версии»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 14 из 30
Какое общее правило связывает результат и риск в разделе «Устаревшие API»? Правильным считается только полностью согласованное утверждение.
Вопрос 15 из 30
Какой механизм объясняет и обычный, и граничный сценарий «Характеризующие тесты»? Выберите связку, в которой верны и основной вывод, и его обоснование.
Вопрос 16 из 30
Какой механизм отделяет верный разбор от похожего, но ошибочного объяснения «Пошаговый рефакторинг»? Нужен вариант без логического разрыва между первой и второй частью.
Вопрос 17 из 30
Какой механизм отделяет верный разбор от похожего, но ошибочного объяснения «Разбор отказов»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Вопрос 18 из 30
Какой принцип темы «Восстановление системы» переносится на другие примеры того же типа? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 19 из 30
Как исправить реализацию «Обновление версии» без новой скрытой зависимости? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Обновление версии
# Выберите изменение, которое исправляет причину.
# Пример проверки окружения
abort 'unsupported ruby' unless Gem::Requirement.new('>= 3.3', '< 4.1')
  .satisfied_by?(Gem::Version.new(RUBY_VERSION))
p [RUBY_VERSION, Bundler::VERSION]
Вопрос 20 из 30
Какой подход сохраняет намерение кода и устраняет дефект в теме «Устаревшие API»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Устаревшие API
# Выберите изменение, которое исправляет причину.
warnings = []
original = Warning.method(:warn)
Warning.define_singleton_method(:warn) { |msg, **| warnings << msg }
# вызвать совместимый слой
p warnings
Warning.define_singleton_method(:warn, original)
Вопрос 21 из 30
Что следует изменить в решении «Характеризующие тесты», чтобы закрыть исходный риск? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Характеризующие тесты
# Выберите изменение, которое исправляет причину.
legacy = LegacyPrice.new
result = legacy.render(10.005, currency: 'EUR')
expected = 'EUR 10.01'
raise [expected, result].inspect unless result == expected
Вопрос 22 из 30
Какой вариант правки выдержит граничный сценарий темы «Пошаговый рефакторинг»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Пошаговый рефакторинг
# Выберите изменение, которое исправляет причину.
class PriceCalculator
  def initialize(new_engine: false)
    @engine = new_engine ? NewPrice.new : LegacyPrice.new
  end
  def call(order)
    @engine.call(order)
  end
end
Вопрос 23 из 30
Какое действие добавляет недостающую гарантию в блоке «Разбор отказов»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Разбор отказов
# Выберите изменение, которое исправляет причину.
Rails.logger.error(
  event: 'legacy_failure',
  ruby: RUBY_VERSION,
  commit: ENV['APP_REVISION'],
  request_id: request.request_id,
  error_class: error.class.name
)
Вопрос 24 из 30
Какой вариант решения «Восстановление системы» останется понятным при сопровождении? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Восстановление системы
# Выберите изменение, которое исправляет причину.
if ENV['READ_ONLY_MODE'] == '1'
  raise ServiceUnavailable, 'writes are temporarily disabled'
end
OrderCommand.call(params)
Вопрос 25 из 30
Какой граничный сценарий лучше всего проверит решение по теме «Обновление версии»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 26 из 30
Что следует добавить в набор проверок по теме «Устаревшие API», чтобы поймать редкий отказ? Выберите связку, в которой верны и основной вывод, и его обоснование.
Вопрос 27 из 30
Какой регрессионный пример обнаружит ошибочное обобщение в теме «Характеризующие тесты»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 28 из 30
Какой сценарий проверит не только результат, но и побочный эффект решения «Пошаговый рефакторинг»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 29 из 30
Какой регрессионный пример обнаружит ошибочное обобщение в теме «Разбор отказов»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 30 из 30
Какой контрпример проверит реальную границу механизма «Восстановление системы»? Верный вариант не содержит частично правильной подмены причины или следствия.

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу