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

Создание предметного DSL

Тест по теме «Создание предметного DSL» проверяет чтение кода, поиск скрытых допущений и выбор решения для обычных и граничных сценариев. В нём 30 вопросов, из них 18 содержат фрагменты Lua. Условия отдельно отмечают случаи, зависящие от версии языка или внешней библиотеки.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 85 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 30
Что нельзя заменить привычкой из другого языка при чтении этого кода? Ответ должен описывать основной механизм раздела «Синтаксис таблиц».
LuaLua · Синтаксис таблиц · разбор 1
local spec = route{
  method="GET",
  path="/users/:id",
  response={status=200,body=User}
}
compile_routes({spec})
Вопрос 2 из 30
Обычный запуск проходит. Какое граничное поведение обязан проверить второй тест? Нужен отрицательный сценарий для раздела «Синтаксис таблиц».
LuaLua · Синтаксис таблиц · разбор 2
local function reproduce_case()
  local spec = route{
    method="GET",
    path="/users/:id",
    response={status=200,body=User}
  }
  compile_routes({spec})
end
reproduce_case()
Вопрос 3 из 30
Какая гарантия важнее сохранения точной формы кода? Речь идёт о центральном правиле раздела «Синтаксис таблиц».
LuaLua · Синтаксис таблиц · разбор 3
do
  local spec = route{
    method="GET",
    path="/users/:id",
    response={status=200,body=User}
  }
  compile_routes({spec})
end
Вопрос 4 из 30
Новый интерфейс скрывает детали раздела «Синтаксис таблиц». Что всё равно должно быть явно проверяемо? Ответ должен выражать проверяемое следствие раздела «Синтаксис таблиц».
Вопрос 5 из 30
Какой вариант точнее всего передаёт смысл раздела «Синтаксис таблиц»? Нужна полная формулировка раздела «Синтаксис таблиц».
Вопрос 6 из 30
Результат здесь задаёт не соглашение проекта, а правило языка. Какое? Нужна именно центральная гарантия раздела «Метатаблицы».
LuaLua · Метатаблицы · разбор 1
local Node={}
Node.__index=function(self,key)
  return function(value)
    self.fields[#self.fields+1]={name=key,value=value}
    return self
  end
end
local model=setmetatable({fields={}},Node):name("user"):age(18)
Вопрос 7 из 30
Какой отказ должен быть воспроизводимым в тесте? Нужен отрицательный сценарий для раздела «Метатаблицы».
LuaLua · Метатаблицы · разбор 2
local function reproduce_case()
  local Node={}
  Node.__index=function(self,key)
    return function(value)
      self.fields[#self.fields+1]={name=key,value=value}
      return self
    end
  end
  local model=setmetatable({fields={}},Node):name("user"):age(18)
end
reproduce_case()
Вопрос 8 из 30
Какой результат обязан подтверждать регрессионный тест после правки? Нужен основной контракт раздела «Метатаблицы».
LuaLua · Метатаблицы · разбор 3
do
  local Node={}
  Node.__index=function(self,key)
    return function(value)
      self.fields[#self.fields+1]={name=key,value=value}
      return self
    end
  end
  local model=setmetatable({fields={}},Node):name("user"):age(18)
end
Вопрос 9 из 30
Решение по разделу «Метатаблицы» должно пережить обновление зависимости. Что фиксировать в контракте? Ответ должен выражать проверяемое следствие раздела «Метатаблицы».
Вопрос 10 из 30
Какое утверждение о разделе «Метатаблицы» наиболее полное и точное? Выберите описание, объединяющее механизм и границу раздела «Метатаблицы».
Вопрос 11 из 30
Какое правило останется верным на другом входе этого же фрагмента? Нужна именно центральная гарантия раздела «Контекст выполнения».
LuaLua · Контекст выполнения · разбор 1
local env={route=route,field=field,enum=enum}
local chunk=assert(load(source,"schema","t",env))
local model=chunk()
validate_model(model)
Вопрос 12 из 30
Обычный запуск проходит. Какое граничное поведение обязан проверить второй тест? Ищется граничное следствие правила из раздела «Контекст выполнения».
LuaLua · Контекст выполнения · разбор 2
local function reproduce_case()
  local env={route=route,field=field,enum=enum}
  local chunk=assert(load(source,"schema","t",env))
  local model=chunk()
  validate_model(model)
end
reproduce_case()
Вопрос 13 из 30
Какое требование стоит закрепить тестом до начала рефакторинга? Нужен основной контракт раздела «Контекст выполнения».
LuaLua · Контекст выполнения · разбор 3
do
  local env={route=route,field=field,enum=enum}
  local chunk=assert(load(source,"schema","t",env))
  local model=chunk()
  validate_model(model)
end
Вопрос 14 из 30
Нужно сделать поведение «Контекст выполнения» предсказуемым для следующего разработчика. Что выбрать? Нужна эксплуатационная граница раздела «Контекст выполнения».
Вопрос 15 из 30
Какой вариант точнее всего передаёт смысл раздела «Контекст выполнения»? Нужна полная формулировка раздела «Контекст выполнения».
Вопрос 16 из 30
В чём ключ к разбору строки «return nil,diagnostic{file=file,path=current_path(),cause=model}»? Нужна именно центральная гарантия раздела «Диагностика конфигурации».
LuaLua · Диагностика конфигурации · разбор 1
local ok,model=pcall(parse_dsl,source)
if not ok then
  return nil,diagnostic{file=file,path=current_path(),cause=model}
end
return validate_all(model)
Вопрос 17 из 30
Какой отказ должен быть воспроизводимым в тесте? Ищется граничное следствие правила из раздела «Диагностика конфигурации».
LuaLua · Диагностика конфигурации · разбор 2
local function reproduce_case()
  local ok,model=pcall(parse_dsl,source)
  if not ok then
    return nil,diagnostic{file=file,path=current_path(),cause=model}
  end
  return validate_all(model)
end
reproduce_case()
Вопрос 18 из 30
Что здесь является частью контракта, а не случайностью текущей записи? Нужен основной контракт раздела «Диагностика конфигурации».
LuaLua · Диагностика конфигурации · разбор 3
do
  local ok,model=pcall(parse_dsl,source)
  if not ok then
    return nil,diagnostic{file=file,path=current_path(),cause=model}
  end
  return validate_all(model)
end
Вопрос 19 из 30
В проекте пересматривают «Диагностика конфигурации». Какое правило лучше выразить в интерфейсе, а не оставлять устной договорённостью? Нужна эксплуатационная граница раздела «Диагностика конфигурации».
Вопрос 20 из 30
Что отличает корректное понимание раздела «Диагностика конфигурации» от правдоподобного заблуждения? Нужна полная формулировка раздела «Диагностика конфигурации».
Вопрос 21 из 30
Что нельзя заменить привычкой из другого языка при чтении этого кода? Ответ должен описывать основной механизм раздела «Совместимость и переносимость».
LuaLua · Совместимость и переносимость · разбор 1
assert(spec.dsl_version==2)
local ordered=sorted_keys(spec.entities)
for _,name in ipairs(ordered) do emit_entity(spec.entities[name]) end
Вопрос 22 из 30
Что не видно по одному успешному запуску этого кода? Нужен отрицательный сценарий для раздела «Совместимость и переносимость».
LuaLua · Совместимость и переносимость · разбор 2
local function reproduce_case()
  assert(spec.dsl_version==2)
  local ordered=sorted_keys(spec.entities)
  for _,name in ipairs(ordered) do emit_entity(spec.entities[name]) end
end
reproduce_case()
Вопрос 23 из 30
Какой смысл фрагмента нельзя спрятать в комментарии вместо проверки? Нужен основной контракт раздела «Совместимость и переносимость».
LuaLua · Совместимость и переносимость · разбор 3
do
  assert(spec.dsl_version==2)
  local ordered=sorted_keys(spec.entities)
  for _,name in ipairs(ordered) do emit_entity(spec.entities[name]) end
end
Вопрос 24 из 30
Код по разделу «Совместимость и переносимость» уходит в эксплуатацию. Какое ограничение нельзя прятать внутри реализации? Нужна эксплуатационная граница раздела «Совместимость и переносимость».
Вопрос 25 из 30
Какое утверждение о разделе «Совместимость и переносимость» полезно и при чтении кода, и при ревью? Выберите описание, объединяющее механизм и границу раздела «Совместимость и переносимость».
Вопрос 26 из 30
Какой контракт языка проявляется в этом примере? Ответ должен описывать основной механизм раздела «Стратегия тестирования».
LuaLua · Стратегия тестирования · разбор 1
it("reports nested typo",function()
  local ok,err=compile([[service { retry = { cout = 3 } }]])
  assert.is_false(ok)
  assert.matches("retry.count",err)
end)
Вопрос 27 из 30
Какой отказ должен быть воспроизводимым в тесте? Выберите именно проверяемую границу раздела «Стратегия тестирования».
LuaLua · Стратегия тестирования · разбор 2
local function reproduce_case()
  it("reports nested typo",function()
    local ok,err=compile([[service { retry = { cout = 3 } }]])
    assert.is_false(ok)
    assert.matches("retry.count",err)
  end)
end
reproduce_case()
Вопрос 28 из 30
Что нельзя считать деталью реализации в этом коде? Нужен основной контракт раздела «Стратегия тестирования».
LuaLua · Стратегия тестирования · разбор 3
do
  it("reports nested typo",function()
    local ok,err=compile([[service { retry = { cout = 3 } }]])
    assert.is_false(ok)
    assert.matches("retry.count",err)
  end)
end
Вопрос 29 из 30
Какое решение по разделу «Стратегия тестирования» упростит и проверку, и расследование сбоя? Ответ должен выражать проверяемое следствие раздела «Стратегия тестирования».
Вопрос 30 из 30
Какое утверждение о разделе «Стратегия тестирования» точно и не обещает лишнего? Ответ должен охватывать весь раздел «Стратегия тестирования».

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

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

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

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