Курсовая по программной инженерии в МФТИ имеет прямой образовательный контекст. В правилах приёма 2026 года указано направление 09.03.04 «Программная инженерия» в Высшей школе программной инженерии, программа «Разработка программно-информационных систем». Кроме того, программная инженерия встречается как программа внутри направления ИВТ в ПИШ ФАЛТ.
Официальные страницы:
https://pk.mipt.ru/bachelor/2026_rules/
https://hsse.mipt.ru/bachelor/software-systems
Не начинайте с фреймворка
Плохо:
«Разработка сайта на Django».
Сильнее:
«Разработка сервиса обработки экспериментальных данных с гарантией воспроизводимости вычислений».
Теперь технология выбирается под требования.
Опишите пользователя
Кто пользуется системой?
- исследователь;
- инженер;
- оператор;
- администратор;
- клиент.
Для каждого определите цель, действие, права и типичную ошибку.
Требования
Разделите функциональные и нефункциональные.
«Сервис принимает файл» - функциональное.
«p95 обработки файла до 50 МБ меньше 4 секунд» - нефункциональное.
Приоритеты
Используйте:
- must;
- should;
- could.
Не пытайтесь реализовать весь возможный функционал.
Курсовая выигрывает от законченного ядра.
Acceptance criteria
Для ключевого требования задайте проверку.
Given: файл имеет неверную схему.
When: пользователь загружает его.
Then: система возвращает понятную ошибку.
Так требования становятся тестами.
Архитектурный драйвер
Каждое важное решение должно отвечать на риск:
- высокая нагрузка;
- долгий расчёт;
- безопасность;
- offline;
- отказоустойчивость.
Не используйте микросервисы ради слова «микросервисы».
Модульный монолит
Для индивидуальной курсовой это часто хороший выбор.
Преимущества:
- проще запуск;
- меньше distributed complexity;
- легче тестирование.
Если нет реальной причины делить сервисы, один процесс может быть сильнее.
Микросервисы
Если нужны, покажите границы по бизнес-функции и протокол взаимодействия.
Не делите систему на сервисы только по техническим слоям.
ADR
Architecture Decision Record позволяет объяснить:
- контекст;
- варианты;
- принятое решение;
- последствия.
Например:
«Очередь выбрана для расчётов, которые превышают допустимое время HTTP-запроса».
Схема компонентов
Покажите:
client -> API -> domain -> DB
-> queue -> worker.
Стрелка должна означать реальное взаимодействие.
База данных
Проектируйте от домена.
Сущности должны соответствовать реальной задаче.
Не начинайте с таблиц users, items, data без смысла.
Миграции
Изменение schema должно быть воспроизводимым.
Сохраняйте migrations в репозитории.
Не исправляйте базу вручную в финальной версии.
API contract
Для 3-5 ключевых endpoint покажите method, path, request, response и error.
Этого достаточно, чтобы понять интерфейс.
Асинхронная задача
Для долгого расчёта:
request -> job id -> worker -> status -> result.
Это лучше долгого зависшего запроса.
Но очередь нужна только при реальной длительной работе.
Idempotency
Повторная отправка запроса не должна создавать две одинаковые операции, если бизнес-логика этого не допускает.
Это хороший критерий зрелого API.
Авторизация
Проверяйте права на сервере.
Скрытая кнопка во frontend не защищает endpoint.
Создайте негативный тест: user A пытается открыть объект user B.
Unit tests
Проверяют локальную логику:
- parser;
- validator;
- calculation.
Минимизируйте сеть и БД в unit test.
