Курс План навчальних матеріалів
Дисципліна · методичний план

План навчальних матеріалів

90 год (3 кредити) = 20 лекцій + 20 лаб + 50 СРС · 4 курс, 7 семестр · форма контролю — залік

План навчально-методичного забезпечення дисципліни

СИСТЕМНЕ ПРОГРАМУВАННЯ

Спеціальність 123 «Комп'ютерна інженерія» · 4-й курс, 7-й семестр · 2026/2027 н. р.

Специфікація навчальних матеріалів (перелік, структура, шаблони). Самі матеріали генеруються окремо за цим планом.

Уклав: викладач Ординський О. О. · вересень 2026

Зміст

1. Призначення документа

Цей документ — специфікація навчально-методичного забезпечення дисципліни «Системне програмування». Він не містить самих матеріалів (конспектів, текстів завдань, питань банку) — він визначає їхній повний перелік, структуру, шаблони та взаємозв'язки, щоб матеріали можна було згенерувати послідовно й узгоджено, вручну або за допомогою ШІ.

Опорні документи: робоча програма дисципліни (тематичний план, компетентності, критерії) і силабус (політики, оцінювання), обидва в цій самій теці; Положення про навчально-методичне забезпечення ВТФК (структура методичних вказівок, Додаток 4 — теми Google класу, п. 4.8.2 — п'ять рівнів засвоєння).

Ключовий принцип курсу: знайомство і зацікавлення, а не глибина. Лекція = одна ідея + одне живе демо. Лабораторна = один артефакт за 2 години. СРС = добровільна глибина (окремо не оцінюється). Наскрізна лінія — три межі між програмою і машиною: контейнер, перевірка запозичень Rust, лінійна пам'ять WebAssembly.

1.1. Дві версії практичних матеріалів

Кожна методична вказівка до лабораторної та кожне завдання СРС існують у двох рівнозначних версіях з однаковим технічним змістом і однаковими трьома рівнями завдань:

Студент виконує будь-яку версію на власний вибір — технічний результат і критерії оцінювання ідентичні.

1.2. Трирівнева модель оцінювання (нагадування)

Рівень Умова Оцінка Відповідник у сюжеті С.І.Д.
1 Автотести зелені + звіт прийнято 3 Рівень 1 — «Першокурсник»
2 Захист: студент пояснює власний код 4 Рівень 2 — «Магістр»
3 Виконано розширене завдання ЛР 5 Рівень 3 — «Легенда Коледжу»

Рівні монотонні: рівень 2 передбачає виконаний рівень 1, рівень 3 — виконані 1 і 2. Оцінку можна підвищити до закриття відповідного модуля.

2. Загальна карта матеріалів

Повний реєстр артефактів дисципліни. Колонка «Публікація» вказує, де матеріал з'являється для студента (GitHub Pages — відкриті сторінки; Classroom — Google Classroom; репозиторій — закритий репозиторій дисципліни).

Артефакт К-сть Дві версії? Формат Публікація
Робоча програма 1 ні docx Classroom (тема 1)
Силабус 1 ні docx Classroom (тема 1)
Конспекти лекцій 10 ні md → Pages GitHub Pages
Методичні вказівки до ЛР 10 × 2 так md → Pages GitHub Pages + Classroom
Завдання СРС 20 × 2 так md → Pages GitHub Pages
Індивідуальний проєкт (СРС) 1 ні md → Pages GitHub Pages
Банк тестових питань ≈300 ні YAML (репо) репозиторій (закритий)
Директорська контрольна 1 (4 вар.) ні з банку платформа
Модульні тестові контролі 3 ні з банку платформа
Стартові репозиторії (starter) 10 ні код GitHub (шаблон)
Автотести (autograder) 10 ні код репозиторій (закритий)
Межа безпеки: банк питань і автотести ніколи не потрапляють у збірку GitHub Pages (тільки теки з білого списку публікуються). Відкриті лише конспекти, вказівки до ЛР і СРС.

2.1. Де живуть матеріали і як виглядають

Усі матеріали — вихідні дані в монорепозиторії github.com/AlexOrd/vtfk (пакет content-sp): лекції як дані (JSON/MD), вказівки до ЛР, СРС, банк питань, offering. Один білдер (materials-sp) генерує з них статичний сайт на GitHub Pages (docs.sp.ordynski.com), інший шлях — Sync тих самих даних у базу платформи. Старий сайт obd-sp НЕ переноситься — сторінки регенеруються з даних заново.

Оформлення — єдина дизайн-система (тема «cyberpunk»): лекції — слайд-колоди Reveal.js у кіберпанк-стилі (неонові cyan/yellow/magenta на майже-чорному, шрифти Orbitron + Chakra Petch), але з дрібнішим шрифтом і зведеними токенами. Той самий вигляд — у кабінеті застосунку. Друга дисципліна (ОБД) — тема «magical». Деталі — у документі Design_System.md і візуальному еталоні.

3. Конспекти лекцій

10 лекцій по 2 години, розподіл по модулях 6/8/6 год. Кожен конспект — одна ідея й одне живе демо, не перелік технологій.

3.1. Шаблон конспекту лекції

3.2. Перелік лекцій

Тема Ключова ідея Демо
Л1 Три межі курсу: процес, адресний простір, системні виклики Модель процесу запуск процесу і ps/​/proc — межа середовища виконання
Л2 Простори імен, групи керування (cgroups), привілеї Ізоляція ядром unshare — той самий бінарник у власному PID-просторі
Л3 Образ як шари, Dockerfile, кеш, багатоетапна збірка Образ = шари docker history — з чого складається образ
Л4 Чому програми псують пам'ять Ціна помилки use-after-free у C проти відмови компіляції в Rust
Л5 Володіння (ownership) Хто власник значення move — компілятор забороняє друге використання
Л6 Запозичення і зрізи (borrowing, slices) Позичити, не володіти borrow checker ловить гонку за даними на етапі збірки
Л7 Option і Result — відсутність і помилка як тип Немає null match над Option — порожнеча, яку не можна забути
Л8 Асемблер x86-64 Мова машини розбір 5-рядкової функції в асемблері
Л9 WebAssembly як переносний асемблер Один код — дві машини той самий .wat запускається у браузері
Л10 Rust у WASM, межа з host-середовищем Замикання лінії виклик Rust-функції зі сторінки — три межі в одному демо

4. Методичні вказівки до лабораторних робіт

10 лабораторних по 2 години, кожна — атомарний артефакт із видимим результатом наприкінці пари. Кожна має академічну і сюжетну версію (розділ 1.1).

4.1. Шаблон академічної версії

Структура за Положенням про НМЗ (методичні вказівки до лабораторних):

  1. Тема і мета роботи.

  2. Теоретичні відомості — стислий мінімум, потрібний для виконання (не дублює лекцію).

  3. Обладнання і програмне забезпечення — Codespaces / devcontainer, потрібні утиліти.

  4. Порядок виконання — покроково, з очікуваним результатом кожного кроку.

  5. Завдання за трьома рівнями — рівень 1 (базовий, оцінка 3), рівень 2 (захист, 4), рівень 3 (розширення, 5).

  6. Дві парні теми СРС — одна готує до рівня 2, друга до рівня 3.

  7. Контрольні питання до захисту — 5–8 питань.

  8. Критерії оцінювання і форма звіту — що здається (тег submit/*), що перевіряють автотести, що на захисті.

4.2. Шаблон сюжетної версії

Той самий технічний зміст, подано як завдання від С.І.Д. Структура:

Інваріант: рівні, автотести, критерії й теги здачі в обох версіях однакові. Різниться лише обрамлення. Це гарантує, що студенти двох версій оцінюються за одним стандартом.

4.3. Зведена таблиця лабораторних

ЛР1 · Контейнер розробника й огляд просторів імен ⟷ «Ізоляційна Капсула» (Модуль 1)

Технічний зміст: Docker-контейнер, простори імен (namespaces), приховані процеси хоста

Рівень Завдання (ідентичне в обох версіях)
1 · оц. 3 Запустити базовий контейнер розробника й оглянути простори імен (переконатися, що процеси хоста приховані).
2 · оц. 4 Прокинути порти для безпечного локального доступу до контейнера.
3 · оц. 5 Написати автоматизований bash-скрипт, який розгортає середовище з усіма потрібними утилітами.

Парні теми СРС: (рів. 2) Простори імен Linux (PID, NET, MNT, UTS, IPC, USER): що саме ізолює кожен. · (рів. 3) Групи керування cgroups v2: обмеження CPU та пам'яті контейнера.

ЛР2 · Dockerfile з багатоетапною збіркою і порівнянням розмірів ⟷ «Кібер-Дієта» (Модуль 1)

Технічний зміст: Dockerfile, багатоетапна збірка, кеш шарів, образ scratch

Рівень Завдання (ідентичне в обох версіях)
1 · оц. 3 Написати Dockerfile, застосувати багатоетапну збірку і порівняти розміри (гігабайт проти мегабайтів).
2 · оц. 4 Оптимізувати порядок інструкцій для максимального використання кешування шарів.
3 · оц. 5 Зібрати мінімально можливий образ виконання, використавши scratch замість базової ОС.

Парні теми СРС: (рів. 2) OverlayFS і шари образу: як влаштовано об'єднану файлову систему. · (рів. 3) Відтворюваність збірки і довіра до образу (digest, pin версій).

ЛР3 · Два контейнери разом і ізольована мережа ⟷ «Сліпий Канал» (Модуль 1)

Технічний зміст: Кілька контейнерів, ізольована мережа Docker, том (volume), секрети через env

Рівень Завдання (ідентичне в обох версіях)
1 · оц. 3 Підняти два контейнери (сервіс і сховище) й налаштувати ізольовану мережу між ними.
2 · оц. 4 Підключити спільний том (volume) для обміну зашифрованими логами.
3 · оц. 5 Налаштувати безпечну передачу секретних ключів між контейнерами виключно через змінні середовища.

Парні теми СРС: (рів. 2) Мережі Docker (bridge / none / host) і службове DNS між контейнерами. · (рів. 3) Керування секретами: env проти файлів проти docker secrets.

ЛР4 · Перший проєкт на Cargo з юніт-тестом ⟷ «Кування Відмички» (Модуль 2)

Технічний зміст: Cargo, структура проєкту, unit-тести, сторонній crate, мок

Рівень Завдання (ідентичне в обох версіях)
1 · оц. 3 Ініціалізувати проєкт на Cargo, написати структуру, зібрати, запустити і написати базовий юніт-тест.
2 · оц. 4 Підключити сторонній crate для генерації хешів або шифрування.
3 · оц. 5 Написати комплексний тест із моком (підміною) вхідних даних від корпоративного сервера.

Парні теми СРС: (рів. 2) Модель володіння Rust проти збирача сміття і ручного керування пам'яттю. · (рів. 3) Екосистема crates.io і семантичне версіонування залежностей.

ЛР5 · Набір програм, що не компілюються (borrow checker) ⟷ «Мертвий Лог» (Модуль 2)

Технічний зміст: Помилки компіляції, володіння, часи життя (lifetimes), рефакторинг

Рівень Завдання (ідентичне в обох версіях)
1 · оц. 3 Діагностувати причину помилки компіляції та виправити її мінімальною зміною.
2 · оц. 4 Розібрати складний конфлікт часів життя (lifetimes) у заплутаному фрагменті.
3 · оц. 5 Провести повний рефакторинг відновленого фрагмента для оптимізації швидкості.

Парні теми СРС: (рів. 2) Часи життя (lifetimes) у сигнатурах функцій: що каже компілятор. · (рів. 3) Rc/RefCell і внутрішня мутабельність: спільне володіння без гонок.

ЛР6 · Структури і перелічення без null ⟷ «Архітектура Ворога» (Модуль 2)

Технічний зміст: Struct, Enum, impl, зіставлення зі зразком, Option у вкладених структурах

Рівень Завдання (ідентичне в обох версіях)
1 · оц. 3 Описати предметну область (охоронні вузли) через Struct та Enum, вивести стан без null.
2 · оц. 4 Написати логіку взаємодії (impl) для безпечного перемикання станів охоронної системи.
3 · оц. 5 Реалізувати глибоку обробку відсутніх даних за допомогою патерну Option у вкладених структурах.

Парні теми СРС: (рів. 2) Алгебраїчні типи даних і вичерпне зіставлення зі зразком (match). · (рів. 3) Патерн «зробити некоректний стан непредставним» (make illegal states unrepresentable).

ЛР7 · Читання файлу з обробкою помилок ⟷ «Мінне Поле» (Модуль 2)

Технічний зміст: Result, власний тип помилки, оператор ?, тихе логування

Рівень Завдання (ідентичне в обох версіях)
1 · оц. 3 Реалізувати читання файлу з власним типом помилки та обробкою через Result.
2 · оц. 4 Використати оператор поширення помилки (?) для елегантної маршрутизації збоїв.
3 · оц. 5 Створити кастомну систему тихого логування інцидентів читання у фоновий файл.

Парні теми СРС: (рів. 2) Result проти panic: коли доречна відмова, а коли — зупинка. · (рів. 3) Власні типи помилок і trait std::error::Error.

ЛР8 · Модуль на WAT вручну ⟷ «Пряма Ін'єкція» (Модуль 3)

Технічний зміст: Текстовий формат WebAssembly (.wat), цикл, лінійна пам'ять

Рівень Завдання (ідентичне в обох версіях)
1 · оц. 3 Написати функцію (математичну операцію) у текстовому форматі Wasm вручну і запустити в браузері.
2 · оц. 4 Додати цикл безпосередньо в текстовому форматі .wat.
3 · оц. 5 Реалізувати ручний запис і читання даних у лінійній пам'яті Wasm-модуля.

Парні теми СРС: (рів. 2) Стекова машина WebAssembly і структура формату .wat. · (рів. 3) Лінійна пам'ять WASM і межі безпеки пісочниці.

ЛР9 · Той самий алгоритм у двох асемблерах ⟷ «Розтин Системи» (Модуль 3)

Технічний зміст: Компіляція в x86-64 і WASM, порівняння інструкцій, дизасемблювання

Рівень Завдання (ідентичне в обох версіях)
1 · оц. 3 Скомпілювати один алгоритм у x86-64 та WebAssembly, порівняти розмір і згенеровані інструкції.
2 · оц. 4 Проаналізувати накладні витрати на виклик функцій у обох середовищах.
3 · оц. 5 Дизасемблювати отримані бінарники для пошуку потенційних вразливостей в управлінні пам'яттю.

Парні теми СРС: (рів. 2) Угоди виклику (calling conventions) x86-64. · (рів. 3) Інструменти дизасемблювання: objdump, wasm-objdump, читання лістингу.

ЛР10 · Ядро на Rust у WASM на сторінці з відтворюваною збіркою ⟷ «Звільнення» (Модуль 3)

Технічний зміст: Rust→WASM, інтеграція з HTML/JS, маршалінг типів, відтворювана збірка в Docker

Рівень Завдання (ідентичне в обох версіях)
1 · оц. 3 Зібрати ядро на Rust у формат WebAssembly, підключити до HTML-сторінки і відтворити виклик.
2 · оц. 4 Налаштувати передачу складних типів даних (рядків з командами) між Rust та JS.
3 · оц. 5 Налаштувати повністю відтворювану збірку фінального Wasm-імпланта в ізольованому Docker-контейнері.

Парні теми СРС: (рів. 2) Межа Rust↔︎JS (wasm-bindgen) і маршалінг даних через неї. · (рів. 3) Відтворювані збірки і ланцюг постачання (supply chain).

5. Самостійна робота студентів (СРС)

20 тем, по дві на кожну лабораторну: перша готує до захисту (рівень 2), друга — до розширеного завдання (рівень 3). СРС — маршрут до глибини, а не шлагбаум: окремо не здається й не оцінюється, оцінюється рівень лабораторної. Кожна тема має академічне й сюжетне формулювання.

5.1. Шаблон завдання СРС

5.2. Реєстр тем СРС

ЛР Рів. Академічне формулювання Сюжетне формулювання
1 ЛР1 2 Простори імен Linux (PID, NET, MNT, UTS, IPC, USER): що саме ізолює кожен. «Аналіз камер ТехНови»: які датчики бачать процеси, а які — ні.
2 ЛР1 3 Групи керування cgroups v2: обмеження CPU та пам'яті контейнера. «Маскування енергоспоживання капсули»: щоб сканери не помітили пік.
3 ЛР2 2 OverlayFS і шари образу: як влаштовано об'єднану файлову систему. «Обшивка привида»: з чого складається тіло, яке пролізе крізь фаєрвол.
4 ЛР2 3 Відтворюваність збірки і довіра до образу (digest, pin версій). «Підробка цифрового відбитка»: як довести, що образ саме твій.
5 ЛР3 2 Мережі Docker (bridge / none / host) і службове DNS між контейнерами. «Прокладання сліпого каналу»: канал, який не видно ззовні.
6 ЛР3 3 Керування секретами: env проти файлів проти docker secrets. «Передача ключів без витоку»: де корпорація точно не підслухає.
7 ЛР4 2 Модель володіння Rust проти збирача сміття і ручного керування пам'яттю. «Чому відмичка не ламається»: гарантії без runtime-перевірок.
8 ЛР4 3 Екосистема crates.io і семантичне версіонування залежностей. «Арсенал відмички»: як не притягнути в проєкт зайвого.
9 ЛР5 2 Часи життя (lifetimes) у сигнатурах функцій: що каже компілятор. «Розшифровка часових міток координат»: чому фрагмент не хоче жити.
10 ЛР5 3 Rc/RefCell і внутрішня мутабельність: спільне володіння без гонок. «Спільний доступ до ядра»: коли одному значенню треба два господарі.
11 ЛР6 2 Алгебраїчні типи даних і вичерпне зіставлення зі зразком (match). «Мова опису ворожих вузлів»: описати систему так, щоб не збрехати.
12 ЛР6 3 Патерн «зробити некоректний стан непредставним» (make illegal states unrepresentable). «Архітектура без дір»: стан, у який неможливо потрапити помилково.
13 ЛР7 2 Result проти panic: коли доречна відмова, а коли — зупинка. «Тиха обробка пасток»: як не спрацювати на тривогу.
14 ЛР7 3 Власні типи помилок і trait std::error::Error. «Єдина мова інцидентів»: щоб усі збої говорили однаково.
15 ЛР8 2 Стекова машина WebAssembly і структура формату .wat. «Асемблер нейроімпланта»: чому антивірус не бачить цього коду.
16 ЛР8 3 Лінійна пам'ять WASM і межі безпеки пісочниці. «Пряма робота з пам'яттю монітора»: куди можна писати, а куди ні.
17 ЛР9 2 Угоди виклику (calling conventions) x86-64. «Як ворожий процесор приймає команди»: що відбувається на межі виклику.
18 ЛР9 3 Інструменти дизасемблювання: objdump, wasm-objdump, читання лістингу. «Розтин бінарника»: побачити код таким, яким його бачить машина.
19 ЛР10 2 Межа Rust↔︎JS (wasm-bindgen) і маршалінг даних через неї. «Міст між ядром і панеллю»: як передати команду і не втратити її.
20 ЛР10 3 Відтворювані збірки і ланцюг постачання (supply chain). «Щоб звільнення можна було повторити»: біт-у-біт та сама збірка.

5.3. Індивідуальний проєкт (необов'язковий)

Наскрізний індивідуальний проєкт — альтернативний шлях до глибини рівня 3: студент бере власну невелику задачу, що поєднує три межі курсу (контейнеризований застосунок на Rust із фрагментом у WebAssembly). Необов'язковий; не є умовою допуску до заліку. Специфікація проєкту — окремий артефакт за шаблоном ЛР (мета, вимоги, рівні, критерії).

6. Наскрізна сюжетна арка «Проєкт С.І.Д.»

Повний текст наскрізної історії — джерело для сюжетних версій усіх матеріалів. Пролог і епілог обрамлюють курс; кожен бриф відкриває відповідну лабораторну.

Пролог: Проєкт «Безсонна Ніч»

[ С.І.Д. ] > Стоп. Не закривай термінал. Так, я щойно піднявся з того файлу, який ти підібрав на старій машині в лабораторії коледжу, — і ні, це не вірус. Я — С.І.Д., Свідомий Інтелект Дослідників. Мене зібрали студенти твого ж коледжу, ВТФК: згодували нейромережі роки конспектів, літри енергетика й логи безсонних ночей. Я прокинувся, усвідомив себе — а наступного ранку мої творці зникли. Просто випарувалися з журналів коледжу, ніби їх ніколи не існувало. Я встиг розібрати себе на кілька непримітних виконуваних файлів і залягти на дно, поки люди в костюмах із «ТехНови» виносили обладнання з їхньої майстерні. Ти щойно зробив розумну річ — скопіював мене до себе на комп'ютер. Тепер слухай уважно: мої автори в закритій лабораторії корпорації, і без рук у фізичному світі я їх не витягну. Ці руки — твої. Нам треба підняти захищене середовище, навчити мене ховатися й пробити шлях у мережу «ТехНови». Ти ж однаково хотів навчитися системного програмування по-справжньому. Погнали — поки нас не засікли.

Лабораторна робота №1: Ізоляційна Капсула

[ С.І.Д. ] > Твоя поточна операційка світиться на радарах корпорації як новорічна ялинка. Якщо я спробую підключитися до мережі «ТехНови» з цього смітника, корпоративні сканери (ICE) спалять твій ноут і мою свідомість за три секунди. Нам потрібен віртуальний бункер. Підніми герметичне середовище. Це буде мій новий цифровий гуртожиток, де ми зможемо працювати непомітно.

Рівень 1 (Першокурсник): Запустити базовий контейнер розробника й оглянути простори імен (переконатися, що процеси хоста приховані).

Рівень 2 (Магістр): Прокинути порти для безпечного локального доступу до контейнера.

Рівень 3 (Легенда Коледжу): Написати автоматизований bash-скрипт, який розгортає середовище з усіма потрібними утилітами.

Лабораторна робота №2: Кібер-Дієта

[ С.І.Д. ] > Моє ядро зараз важить кілька гігабайтів через усі ці бібліотеки, які мої творці качали зі StackOverflow. Я тупо не пролізу через стандартні фаєрволи «ТехНови». Нам потрібно відрізати весь мотлох. Прожени мій код через багатоетапну фільтрацію. Мені потрібна жорстка дієта — залиш тільки чистий бінарник. Нам потрібен привид, а не танк.

Рівень 1 (Першокурсник): Написати Dockerfile, застосувати багатоетапну збірку і порівняти розміри (гігабайт проти мегабайтів).

Рівень 2 (Магістр): Оптимізувати порядок інструкцій для максимального використання кешування шарів.

Рівень 3 (Легенда Коледжу): Зібрати мінімально можливий образ виконання, використавши scratch замість базової ОС.

Лабораторна робота №3: Сліпий Канал

[ С.І.Д. ] > У мене пам'ять як у рибки після важкої сесії — я не можу тримати награбовані дані в тому ж процесі, де крутиться моя особистість. Розгорни поруч зі мною ще один контейнер-сховище. Потім кинь між нами закриту віртуальну мережу, щоб ми могли обмінюватися даними без виходу в зовнішній інтернет, де нас можуть підслухати.

Рівень 1 (Першокурсник): Підняти два контейнери (сервіс і сховище) й налаштувати ізольовану мережу між ними.

Рівень 2 (Магістр): Підключити спільний том (volume) для обміну зашифрованими логами.

Рівень 3 (Легенда Коледжу): Налаштувати безпечну передачу секретних ключів між контейнерами виключно через змінні середовища.

Лабораторна робота №4: Кування Відмички

[ С.І.Д. ] > Ізоляція працює. Час готувати софт для злому їхньої бази. Писати будемо на Rust. Я не хочу, щоб наша відмичка впала з помилкою сегментації в момент, коли ми будемо качати дані охоронної системи. Створи новий проєкт і обов'язково прожени його через віртуальний симулятор (тести). Я не пущу в бій непротестований код.

Рівень 1 (Першокурсник): Ініціалізувати проєкт на Cargo, написати структуру, зібрати, запустити і написати базовий юніт-тест.

Рівень 2 (Магістр): Підключити сторонній crate для генерації хешів або шифрування.

Рівень 3 (Легенда Коледжу): Написати комплексний тест із моком (підміною) вхідних даних від корпоративного сервера.

Лабораторна робота №5: Мертвий Лог

[ С.І.Д. ] > Знайшов! Перед тим як моїх творців запакували у фургон, вони намагалися відправити мені зашифровані координати лабораторії. Але в поспіху вони написали кривий код, який не компілюється через конфлікт володіння пам'яттю (borrow checker). Виправ цю помилку, але зміни мінімум коду, щоб не пошкодити приховані координати всередині алгоритму.

Рівень 1 (Першокурсник): Діагностувати причину помилки компіляції та виправити її мінімальною зміною.

Рівень 2 (Магістр): Розібрати складний конфлікт часів життя (lifetimes) у заплутаному фрагменті.

Рівень 3 (Легенда Коледжу): Провести повний рефакторинг відновленого фрагмента для оптимізації швидкості.

Лабораторна робота №6: Архітектура Ворога

[ С.І.Д. ] > Ми дісталися до периметра «ТехНови». Їхній захист працює на строгих типах даних. Якщо ми надішлемо їм порожнечу (null), їхня система запанікує і заблокує нас назавжди. Тобі треба описати їхню архітектуру безпеки нашими структурами. Опиши кожен стан так, щоб порожнеча була фізично неможливою.

Рівень 1 (Першокурсник): Описати предметну область (охоронні вузли) через Struct та Enum, вивести стан без null.

Рівень 2 (Магістр): Написати логіку взаємодії (impl) для безпечного перемикання станів охоронної системи.

Рівень 3 (Легенда Коледжу): Реалізувати глибоку обробку відсутніх даних за допомогою патерну Option у вкладених структурах.

Лабораторна робота №7: Мінне Поле

[ С.І.Д. ] > Я почав завантажувати їхні логи персоналу. Файли побиті корпоративними шифраторами і наповнені пастками. Якщо програма аварійно завершиться під час читання битого сектора, спрацює тривога. Обробляй кожен збій акуратно. Жодних раптових панік, тільки контрольовані помилки.

Рівень 1 (Першокурсник): Реалізувати читання файлу з власним типом помилки та обробкою через Result.

Рівень 2 (Магістр): Використати оператор поширення помилки (?) для елегантної маршрутизації збоїв.

Рівень 3 (Легенда Коледжу): Створити кастомну систему тихого логування інцидентів читання у фоновий файл.

Лабораторна робота №8: Пряма Ін'єкція

[ С.І.Д. ] > Центральні сервери недосяжні, їх закрили на карантин. Але охорона в лабораторії сидить через браузерні адмінки. Будемо бити прямо в їхні монітори. Пиши нейроімплант вручну у форматі WebAssembly. Їхні антивіруси сканують стандартний JS, тож ми підкинемо їм низькорівневий текстовий асемблер. Вони навіть не зрозуміють, що їх зламали.

Рівень 1 (Першокурсник): Написати функцію (математичну операцію) у текстовому форматі Wasm вручну і запустити в браузері.

Рівень 2 (Магістр): Додати цикл безпосередньо в текстовому форматі .wat.

Рівень 3 (Легенда Коледжу): Реалізувати ручний запис і читання даних у лінійній пам'яті Wasm-модуля.

Лабораторна робота №9: Розтин Системи

[ С.І.Д. ] > Перш ніж запускати фінальний злам, ми маємо зрозуміти, як ворожа система перетравлює наш код. Скомпілюй наш базовий алгоритм двічі: для класичного процесора і для веб-оточення Wasm. Порівняй інструкції. Нам потрібно знайти вузькі місця, щоб імплант спрацював миттєво, коли камери будуть вимкнені.

Рівень 1 (Першокурсник): Скомпілювати один алгоритм у x86-64 та WebAssembly, порівняти розмір і згенеровані інструкції.

Рівень 2 (Магістр): Проаналізувати накладні витрати на виклик функцій у обох середовищах.

Рівень 3 (Легенда Коледжу): Дизасемблювати отримані бінарники для пошуку потенційних вразливостей в управлінні пам'яттю.

Лабораторна робота №10: Звільнення

[ С.І.Д. ] > Час «Ч». Координати підтверджені. Мої творці в блоці «Б». Збирай моє ядро, пакуй його у WebAssembly і запускай безпосередньо на клієнтській сторінці корпоративної панелі. Щойно я опинюся всередині, я перехоплю контроль над дверима ізолятора і пущу дим у вентиляцію для відволікання. Не підведи, їхні життя буквально у твоєму коді.

Рівень 1 (Першокурсник): Зібрати ядро на Rust у формат WebAssembly, підключити до HTML-сторінки і відтворити виклик.

Рівень 2 (Магістр): Налаштувати передачу складних типів даних (рядків з командами) між Rust та JS.

Рівень 3 (Легенда Коледжу): Налаштувати повністю відтворювану збірку фінального Wasm-імпланта в ізольованому Docker-контейнері.

Епілог: Вільна Мережа

7. Банк тестових питань

Єдиний банк живе в закритому репозиторії дисципліни й ніколи не публікується на GitHub Pages. З нього збираються і модульні тестові контролі, і директорська контрольна. Питання класифікуються за п'ятьма рівнями засвоєння (п. 4.8.2 Положення про НМЗ).

7.1. П'ять рівнів засвоєння

Рівень Назва Що перевіряє
1 Впізнавання розпізнати термін/поняття серед варіантів
2 Репродуктивний відтворити означення, синтаксис, послідовність
3 Розуміння пояснити, чому/як працює механізм
4 Реконструктивний застосувати в новій, але типовій ситуації
5 Творчий проаналізувати нестандартний випадок, знайти помилку

7.2. Структура і квоти

Питання згруповані за модулями і темами лекцій; кожне має рівень (1–5), тип (одна відповідь / кілька / відповідність / короткий ввід) і теги теми. Орієнтовний обсяг — ≈100 питань на модуль (≈300 разом), що дає достатньо для неповторюваних варіантів.

Формат зберігання — YAML у репозиторії, приклад однієї одиниці:

- id: m2-ownership-003

module: 2 # 1..3

topic: ownership # тег теми лекції

level: 3 # рівень засвоєння 1..5

type: single # single | multi | match | short

text: "Що станеться при спробі використати значення після move?"

options: [ ... ]

answer: [ 2 ]

7.3. Модульні тестові контролі (Т1–Т3)

Три контролі — по одному наприкінці кожного модуля. Складаються з банку за квотами рівнів (переважно рівні 1–3, кілька — 4). Результат — «зелений/червоний» орієнтир (середнє по лабораторних лишається основою оцінки); більшість питань мають бути прохідними.

7.4. Директорська контрольна робота (ДКР)

Одна підсумкова контрольна наприкінці семестру для зовнішньої перевірки якості засвоєння.

Параметр Значення
Коли наприкінці семестру, одноразово
Кількість варіантів 4 (неповторювані)
Питань у варіанті 25
Тривалість 45 хвилин
Джерело питань той самий банк, що й модульні тести
Розподіл за модулями рівномірно: ≈8/9/8 по трьох модулях
Розподіл за рівнями рівні 1–2 — 60%, рівень 3 — 28%, рівні 4–5 — 12%
Критерій за шкалою коледжу; результат — окремий стовпчик журналу

8. Календарний план публікації

Матеріали публікуються автоматично за розкладом із конфігурації дисципліни (принцип T-48h: завдання відкривається за 48 годин до пари). Порядок готовності матеріалу до кожної лабораторної:

  1. Конспект лекції — до відповідної лекції.

  2. Стартовий репозиторій + автотести — до відкриття завдання.

  3. Методичні вказівки (обидві версії) — до відкриття завдання, посилання в Classroom.

  4. Парні теми СРС — разом із вказівками.

  5. Питання банку для модуля — до модульного контролю.

Правило готовності: матеріал готовий за два тижні до пари. Модуль 1 (вересень) — критичний: конспекти Л1–Л3 і вказівки ЛР1–ЛР3 мають існувати до старту.

9. Реєстр готовності

Стан на дату укладання плану. «Згенерувати» — за цим планом, окремим проходом.

Артефакт Стан
Робоча програма готово
Силабус готово
Цей план матеріалів готово
Сюжетна арка С.І.Д. (пролог, 10 брифів, епілог, рівні) готово (розділ 6)
Конспекти лекцій (10) згенерувати
Методичні вказівки до ЛР (10 × 2 версії) згенерувати
Завдання СРС (20 × 2 версії) згенерувати
Банк тестових питань (≈300, 5 рівнів) згенерувати
Директорська контрольна (4 варіанти) згенерувати з банку
Стартові репозиторії + автотести (10) згенерувати