Курсовая по программной инженерии в СПбГУ в 2026 году имеет прямой образовательный контекст: в актуальном наборе бакалавриата есть отдельная программа «Программная инженерия».
Официальный список программ:
https://cabinet.spbu.ru/Lists/ForeignersLists/bak/index_comp_groups.html
Поэтому здесь особенно важно не сводить работу к формуле «я написал приложение». Программная инженерия начинается там, где код создаётся по требованиям, проходит проверку и может поддерживаться после первой демонстрации.
Сначала определите продукт
Кто пользователь?
Какую задачу он выполняет?
Что считается успешным результатом?
Например:
«Сервис принимает лабораторные данные, проверяет схему, запускает обработку и сохраняет воспроизводимый отчёт».
Это уже инженерная постановка.
Scope
Сразу зафиксируйте, чего не будет.
Например:
- мобильной версии;
- платежей;
- интеграции с внешней CRM.
Хороший scope спасает курсовую от бесконечного роста.
User stories
Не нужны десятки.
Выберите главные.
Например:
«Как исследователь я хочу загрузить новый dataset, чтобы запустить расчёт».
Добавьте acceptance criteria.
Acceptance criteria
Сделайте критерии проверяемыми.
Например:
- файл корректной схемы принимается;
- неверная колонка возвращает ошибку;
- duplicate не создаётся;
- результат связан с конкретной версией input.
Так появляется тестовая стратегия.
Архитектурные требования
Архитектура должна отвечать на реальные ограничения.
Например:
- долгие вычисления;
- несколько пользователей;
- необходимость аудита;
- высокая нагрузка;
- конфиденциальные данные.
Не выбирайте микросервисы только потому, что это современно.
Простая архитектура может быть лучше
Для индивидуальной курсовой модульный монолит часто достаточно хорош.
У него меньше сетевых отказов, инфраструктуры и сложности запуска.
Если вы выбираете монолит, это тоже инженерное решение.
Когда нужны сервисы
Например:
- вычислительные задачи запускаются отдельно;
- сервис авторизации независим;
- часть системы масштабируется отдельно.
Покажите причину разделения.
ADR
Для 3-5 важных решений создайте короткие записи.
Например:
Контекст: расчёт занимает до 40 секунд.
Решение: очередь и worker.
Альтернатива: синхронный HTTP.
Последствие: сложнее инфраструктура, но request не висит.
Так архитектура перестаёт быть рисунком без аргументации.
Схема компонентов
Покажите:
client -> API -> domain -> DB
-> queue -> worker.
Стрелка должна означать реальное взаимодействие.
Domain model
Сущности должны следовать предметной области.
Например:
- project;
- dataset;
- run;
- result;
- user.
Не делайте таблицу `objects`, где хранятся все сущности.
API
Ключевые методы:
- create;
- read;
- start job;
- get status;
- download result.
Для каждого покажите ошибку.
Например, пользователь запрашивает чужой result.
Ожидаемо:
403.
Авторизация
Проверка прав должна быть на сервере.
Скрытая кнопка в интерфейсе не защищает данные.
Создайте отдельные negative tests.
Миграции
DB schema развивается.
Все изменения должны быть записаны.
Не исправляйте структуру финальной БД вручную без migration.
Unit tests
Проверяйте бизнес-правила отдельно.
Например:
- validation;
- calculation;
- state transition.
Не подключайте настоящую сеть к каждому unit test.
Integration tests
Проверьте:
- API + DB;
- queue + worker;
- external API.
Именно границы компонентов часто ломаются.
E2E
Проведите основной пользовательский сценарий целиком.
Например:
login -> upload -> process -> report.
Пара хороших E2E полезнее десятков нестабильных.
