Система оценивания
О чём этот файл
Описание того, как курс проверяет знания: какие инструменты используются, что каждый из них измеряет, как считаются баллы и какой результат считается проходным. Сами материалы проверки лежат в 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. Самопроверка выполнима. Курс рассчитан на самостоятельное прохождение: каждое задание содержит команды проверки и ожидаемый вывод. Никакой инструмент не требует внешнего проверяющего.
Уровни проверки
Уровень Частота Формат Время
─────────────────────────────────────────────────────────────────────
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. Встроенное задание урока
Каждый полноценный учебный файл содержит блок:
## Практическое задание
## Подсказки
## Решение
Правило: задание выполняется до чтения решения. Подсказки открываются по одной, когда работа встала более чем на десять минут.
Что измеряет: способность применить материал урока сразу, пока контекст свежий.
Самопроверка: каждое задание заканчивается разделом «Проверка результата» с командой и ожидаемым выводом.
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.
| № | После разделов | Тема | Формат |
|---|---|---|---|
| 1 | 01–04 | Container как процесс | Диагностическая задача + практическое задание |
| 2 | 05–09 | Сборка и многокомпонентная система | Практическое задание с критериями приёмки |
| 3 | 10–13 | Production и диагностика | Разбор сломанной конфигурации + hardening |
| 4 | 14–16 | Доставка | Pipeline от commit до опубликованного образа |
Каждый checkpoint содержит:
- диагностическую задачу — сломанная конфигурация, симптом и требование найти root cause;
- самостоятельное задание — небольшая, но законченная работа;
- критерии приёмки — проверяемый список из 5–8 пунктов.
Правило: checkpoint не пройден, пока не выполнены все критерии приёмки. Частичное выполнение не засчитывается — в эксплуатации частично работающий сервис равен неработающему.
5. Проекты
Четыре проекта нарастающей сложности. Каждый содержит TASK.md (техническое задание), SOLUTION.md (эталонная реализация) и CHECKLIST.md (критерии сдачи).
| Проект | После раздела | Часов | Что проверяет |
|---|---|---|---|
| 1. Python CLI | 06 | 4 | Базовая контейнеризация, exit codes, tests |
| 2. FastAPI service | 08 | 8 | Multi-stage, non-root, logging, graceful shutdown |
| 3. Multi-service stack | 10 | 12 | Проектирование системы, healthchecks, миграции, integration tests |
| 4. Production pipeline | 16 | 12 | Полный цикл доставки, сканирование, SBOM, rollback |
Порядок работы:
- Прочитать
TASK.mdцеликом, включая раздел «Критерии завершения». - Реализовать самостоятельно.
- Пройти
CHECKLIST.md— по каждому пункту выполнить указанную проверку. - Только после этого открыть
SOLUTION.mdи сравнить решения. - Разобрать расхождения: где решение курса лучше и почему, где ваше решение обоснованнее.
Пункт 5 важнее пунктов 1–4. Эталонное решение — не единственно верное. Умение объяснить, почему вы выбрали иначе, — признак уровня L4 в карте компетенций.
Дополнительные задания повышенной сложности в конце каждого TASK.md не входят в критерии сдачи, но существенно углубляют понимание.
6. Debugging challenges
Двадцать сломанных конфигураций в assessments/debugging-challenges.md. Каждая описывает симптом; конфигурация приложена; задача — найти root cause и починить.
Покрываемые сценарии:
| № | Сценарий | № | Сценарий |
|---|---|---|---|
| 1 | Container немедленно завершается | 11 | CMD и ENTRYPOINT конфликтуют |
| 2 | Python output не появляется в logs | 12 | SIGTERM не обрабатывается |
| 3 | Port опубликован, приложение недоступно | 13 | Container получает exit code 137 |
| 4 | Приложение слушает только 127.0.0.1 | 14 | Healthcheck постоянно failing |
| 5 | Container не видит другой service | 15 | Compose запускает приложение до готовности БД |
| 6 | localhost используется неправильно | 16 | DNS resolution не работает |
| 7 | Volume имеет неверные permissions | 17 | Disk заполнен Docker data |
| 8 | Bind mount скрывает файлы image | 18 | Старые images занимают место |
| 9 | Dependency layer постоянно пересобирается | 19 | Secret попал в image layer |
| 10 | Image слишком большой | 20 | Container запущен с избыточными 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 | Приложение работает, воспроизводится с нуля, все заявленные функции доступны |
| Security | 15 | Non-root, минимальные привилегии, отсутствие secrets в layers, обоснованный base image |
| Image optimization | 15 | Размер, число слоёв, работающий build cache, multi-stage там, где уместно |
| Reliability | 15 | Graceful shutdown, healthcheck, restart policy, resource limits, поведение при отказе зависимости |
| Testing | 15 | Unit и integration tests, запуск тестов в контейнеризованном окружении |
| Documentation | 10 | README с командами запуска, объяснение решений, описание переменных окружения |
| Troubleshooting | 5 | Раздел с типичными проблемами и способами диагностики |
| Итого | 100 |
Пороговые значения
| Баллы | Оценка | Интерпретация |
|---|---|---|
| 90–100 | Отлично | Уровень L4: решения обоснованы, учтены edge cases, конфигурация готова к эксплуатации |
| 80–89 | Хорошо | Уровень L3+: работает корректно, есть отдельные упущения в оптимизации или документации |
| 70–79 | Удовлетворительно | Уровень L3: базовые требования выполнены, но есть заметные пробелы |
| 70 | Проходной минимум | Ниже этого порога курс не считается пройденным |
| 50–69 | Не пройдено | Работает, но нарушены существенные требования (например, запуск от root или secrets в image) |
| 0–49 | Не пройдено | Не воспроизводится или не выполняет заявленные функции |
Обязательные требования (blocking)
Независимо от суммы баллов работа не принимается, если выполнено хотя бы одно:
- Secrets (пароли, токены, ключи) присутствуют в layers образа — проверяется
docker history --no-trunc. - Приложение запускается от
rootбез явного письменного обоснования. - Конфигурация не воспроизводится с чистой машины по приложенной инструкции.
- Используется development server (
flask run,uvicorn --reload) в production-конфигурации. - Container не завершается по
docker stopв пределах grace period.
Эти пункты не «снимают баллы» — они блокируют приём. Каждый из них в реальной эксплуатации приводит к инциденту.
Итоговый расчёт
| Компонент | Вес | Как считается |
|---|---|---|
| Проекты 1–4 | 40 % | Средний балл по rubric четырёх проектов |
| Debugging challenges | 15 % | Доля решённых самостоятельно × 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. Подготовка среды →