Главная/О курсе/Урок

Система оценивания

О чём этот файл

Описание того, как курс проверяет знания: какие инструменты используются, что каждый из них измеряет, как считаются баллы и какой результат считается проходным. Сами материалы проверки лежат в assessments/.


Принципы

Система построена на четырёх правилах.

1. Проверяется понимание, а не запоминание. Вопрос «какой флаг публикует порт» бесполезен — его отвечает docker run --help. Вопрос «почему приложение недоступно, хотя порт опубликован» проверяет то, что действительно нужно.

2. Каждая проверка имеет объективный критерий. «Хороший Dockerfile» — не критерий. «Образ меньше 350 MB по docker images (это DISK USAGE, а не вчетверо меньший CONTENT SIZE из docker image inspect), процесс запущен от UID ≠ 0, изменение кода не пересобирает dependencies, SIGTERM завершает приложение за 3 секунды» — критерий.

3. Диагностика проверяется отдельно. Умение собрать работающую конфигурацию и умение починить сломанную — разные навыки. Второй важнее в реальной работе и проверяется debugging challenges.

4. Самопроверка выполнима. Курс рассчитан на самостоятельное прохождение: каждое задание содержит команды проверки и ожидаемый вывод. Никакой инструмент не требует внешнего проверяющего.


Уровни проверки

text
  Уровень                Частота          Формат                Время
  ─────────────────────────────────────────────────────────────────────
  1. Встроенное      после каждого     задание с подсказками    15–30 мин
     задание урока   урока             и решением

  2. Exercises       после каждого     3–6 лабораторных задач   1–4 ч
                     раздела           с проверкой результата

  3. Quiz            после каждого     10 вопросов              10–15 мин
                     раздела

  4. Checkpoint      после группы      практическая задача      2–3 ч
                     разделов          с критериями приёмки

  5. Проект          4 раза за курс    полноценное приложение   4–12 ч

  6. Debugging       после раздела 13  20 сломанных             30 мин
     challenge                         конфигураций            каждая

  7. Итоговый        в конце           теория + практика        8 ч
     экзамен

1. Встроенное задание урока

Каждый полноценный учебный файл содержит блок:

markdown
## Практическое задание
## Подсказки
## Решение

Правило: задание выполняется до чтения решения. Подсказки открываются по одной, когда работа встала более чем на десять минут.

Что измеряет: способность применить материал урока сразу, пока контекст свежий.

Самопроверка: каждое задание заканчивается разделом «Проверка результата» с командой и ожидаемым выводом.


2. Exercises раздела

Файл exercises.md в каждом разделе. Структура:

Тип заданияОбозначениеРоль
Обязательное[обяз.]Входит в бюджет всех расписаний. Без него раздел не считается пройденным
Дополнительное[доп.]Углубляет тему. Выполняется при наличии времени
Повышенной сложности[★]Требует комбинации материала нескольких разделов
Диагностическое[диаг.]Сломанная конфигурация, которую нужно починить

Каждое задание содержит: постановку, ожидаемый результат, команды проверки и — под спойлером — разбор.

Что измеряет: практическую применимость материала раздела.


3. Quiz раздела

Десять вопросов на раздел в assessments/module-quizzes.md. Состав фиксирован:

Тип вопросаКоличествоПример формулировки
На понимание5«Что произойдёт, если …»
На применение3«Какую команду вы выполните, чтобы …»
На диагностику2«Container останавливается через 10 секунд после docker stop. Назовите две вероятные причины»

Оценка: правильных ответов из 10.

РезультатИнтерпретацияДействие
9–10Материал усвоенПереходите дальше
7–8Есть пробелыПеречитайте уроки по темам ошибок
5–6Материал усвоен фрагментарноПеречитайте раздел, повторите exercises
0–4Раздел не пройденВернитесь к разделу целиком

Quiz не влияет на итоговый балл курса. Это инструмент самодиагностики.


4. Checkpoints

Четыре контрольные точки после логических блоков курса. Материалы — assessments/checkpoints.md.

После разделовТемаФормат
101–04Container как процессДиагностическая задача + практическое задание
205–09Сборка и многокомпонентная системаПрактическое задание с критериями приёмки
310–13Production и диагностикаРазбор сломанной конфигурации + hardening
414–16ДоставкаPipeline от commit до опубликованного образа

Каждый checkpoint содержит:

  • диагностическую задачу — сломанная конфигурация, симптом и требование найти root cause;
  • самостоятельное задание — небольшая, но законченная работа;
  • критерии приёмки — проверяемый список из 5–8 пунктов.

Правило: checkpoint не пройден, пока не выполнены все критерии приёмки. Частичное выполнение не засчитывается — в эксплуатации частично работающий сервис равен неработающему.


5. Проекты

Четыре проекта нарастающей сложности. Каждый содержит TASK.md (техническое задание), SOLUTION.md (эталонная реализация) и CHECKLIST.md (критерии сдачи).

ПроектПосле разделаЧасовЧто проверяет
1. Python CLI064Базовая контейнеризация, exit codes, tests
2. FastAPI service088Multi-stage, non-root, logging, graceful shutdown
3. Multi-service stack1012Проектирование системы, healthchecks, миграции, integration tests
4. Production pipeline1612Полный цикл доставки, сканирование, SBOM, rollback

Порядок работы:

  1. Прочитать TASK.md целиком, включая раздел «Критерии завершения».
  2. Реализовать самостоятельно.
  3. Пройти CHECKLIST.md — по каждому пункту выполнить указанную проверку.
  4. Только после этого открыть SOLUTION.md и сравнить решения.
  5. Разобрать расхождения: где решение курса лучше и почему, где ваше решение обоснованнее.

Пункт 5 важнее пунктов 1–4. Эталонное решение — не единственно верное. Умение объяснить, почему вы выбрали иначе, — признак уровня L4 в карте компетенций.

Дополнительные задания повышенной сложности в конце каждого TASK.md не входят в критерии сдачи, но существенно углубляют понимание.


6. Debugging challenges

Двадцать сломанных конфигураций в assessments/debugging-challenges.md. Каждая описывает симптом; конфигурация приложена; задача — найти root cause и починить.

Покрываемые сценарии:

СценарийСценарий
1Container немедленно завершается11CMD и ENTRYPOINT конфликтуют
2Python output не появляется в logs12SIGTERM не обрабатывается
3Port опубликован, приложение недоступно13Container получает exit code 137
4Приложение слушает только 127.0.0.114Healthcheck постоянно failing
5Container не видит другой service15Compose запускает приложение до готовности БД
6localhost используется неправильно16DNS resolution не работает
7Volume имеет неверные permissions17Disk заполнен Docker data
8Bind mount скрывает файлы image18Старые images занимают место
9Dependency layer постоянно пересобирается19Secret попал в image layer
10Image слишком большой20Container запущен с избыточными privileges

Формат каждого challenge:

  • симптом — то, что видит пользователь;
  • сломанная конфигурация — рабочие файлы, воспроизводящие проблему;
  • методика расследования — какие вопросы задавать и в каком порядке;
  • команды диагностики;
  • правильное исправление;
  • объяснение root cause.

Правило: сначала решите самостоятельно, затем сверьтесь с разбором. Раздел «методика расследования» открывайте, если застряли более чем на 20 минут — он даёт направление, а не ответ.

Целевой результат: не менее 15 из 20 решено самостоятельно.


7. Итоговый экзамен

Теоретический тест

assessments/final-theory-exam.md — 40 вопросов, охватывающих все разделы. Проверяет понимание механизмов: namespaces, layers, NAT, сигналы, build cache, модель безопасности.

Проходной результат — 30 из 40.

Практический экзамен

assessments/final-practical-exam.md — контейнеризация незнакомого Python-приложения с нуля за 6 часов. Даны: исходный код, требования к развёртыванию, ограничения по ресурсам. Требуется: Dockerfile, compose.yaml, документация, tests и обоснование решений.

Оценивается по rubric.


Rubric — шкала 0–100

Полная версия с детализацией по каждому критерию: assessments/grading-rubric.md.

КатегорияБаллыЧто оценивается
Корректность25Приложение работает, воспроизводится с нуля, все заявленные функции доступны
Security15Non-root, минимальные привилегии, отсутствие secrets в layers, обоснованный base image
Image optimization15Размер, число слоёв, работающий build cache, multi-stage там, где уместно
Reliability15Graceful shutdown, healthcheck, restart policy, resource limits, поведение при отказе зависимости
Testing15Unit и integration tests, запуск тестов в контейнеризованном окружении
Documentation10README с командами запуска, объяснение решений, описание переменных окружения
Troubleshooting5Раздел с типичными проблемами и способами диагностики
Итого100

Пороговые значения

БаллыОценкаИнтерпретация
90–100ОтличноУровень L4: решения обоснованы, учтены edge cases, конфигурация готова к эксплуатации
80–89ХорошоУровень L3+: работает корректно, есть отдельные упущения в оптимизации или документации
70–79УдовлетворительноУровень L3: базовые требования выполнены, но есть заметные пробелы
70Проходной минимумНиже этого порога курс не считается пройденным
50–69Не пройденоРаботает, но нарушены существенные требования (например, запуск от root или secrets в image)
0–49Не пройденоНе воспроизводится или не выполняет заявленные функции

Обязательные требования (blocking)

Независимо от суммы баллов работа не принимается, если выполнено хотя бы одно:

  1. Secrets (пароли, токены, ключи) присутствуют в layers образа — проверяется docker history --no-trunc.
  2. Приложение запускается от root без явного письменного обоснования.
  3. Конфигурация не воспроизводится с чистой машины по приложенной инструкции.
  4. Используется development server (flask run, uvicorn --reload) в production-конфигурации.
  5. Container не завершается по docker stop в пределах grace period.

Эти пункты не «снимают баллы» — они блокируют приём. Каждый из них в реальной эксплуатации приводит к инциденту.


Итоговый расчёт

КомпонентВесКак считается
Проекты 1–440 %Средний балл по rubric четырёх проектов
Debugging challenges15 %Доля решённых самостоятельно × 100
Итоговый теоретический тест15 %Правильных ответов из 40, приведённых к 100
Итоговый практический экзамен30 %Балл по rubric
Курс пройденИтог ≥ 70 и все blocking-требования выполнены

Quizzes и checkpoints в итоговый балл не входят — они служат самодиагностикой. Но пройденный checkpoint является допуском к следующему блоку разделов.


Что делать с результатом

ИтогРекомендация
≥ 90Переходите к плану дальнейшего развития: containerd, Podman, Kubernetes, Linux security
80–89Разберите категории, где потеряли баллы. Обычно это Testing и Documentation — самые пропускаемые части
70–79Повторите разделы 11–13 и выполните проект 4 повторно, не заглядывая в решение
< 70Определите домен с наименьшим уровнем по карте компетенций и вернитесь к соответствующим разделам. Повторное прохождение всего курса обычно не нужно

Навигация

← Предыдущий материал
Вернуться к главному оглавлению
Перейти к разделу 01. Подготовка среды →

Markdown на GitHub ↗