Приложение А1 — «Задачник»

Программа, на которой отрабатывается вся практика курса, и требования к ней

Прогресс курса Приложение 1 из 1

Что на этой странице

01

Что такое «Задачник»

«Задачник» — небольшое веб-приложение для списка дел: регистрация и вход, задачи со сроком и приоритетом, статусы, фильтры и поиск. У него есть веб-интерфейс для человека и JSON API для программ. Приложение написано для курса и содержит заложенные дефекты: их и предстоит найти, описать и проверить исправление.

Вся практика курса идёт на нём, поэтому результаты у всех сопоставимы: если в баг-репорте написано «на учебных данных у пользователя ivan счётчик показывает 3», преподаватель увидит то же самое.

Проверяйте только своё. Приёмы курса — подмена запросов, доступ к чужим данным по идентификатору — применяются к «Задачнику» на своём компьютере и к своим проектам. Те же действия против чужого сервиса без разрешения владельца — неправомерный доступ к компьютерной информации (ст. 272 УК РФ).
02

Установка и запуск

Нужен только Python 3.10 или новее — без дополнительных пакетов, Docker и сервера баз данных. Проверьте версию:

# Windows (PowerShell)
py --version
# Linux
python3 --version

В Windows Python ставится с python.org (флажок «Add python.exe to PATH»), в Debian и Ubuntu он уже есть. Затем:

  1. Создайте отдельную папку, например tasker, и скачайте в неё tasker.py.
  2. Откройте в этой папке терминал и запустите программу.
  3. Откройте в браузере http://127.0.0.1:8000.
# Windows
py tasker.py
# Linux
python3 tasker.py

Терминал не закрывайте: в нём работает сервер и печатается журнал запросов. Остановить — Ctrl+C.

Первый запуск в Linux выглядит так (время и путь у вас будут свои):

$ python3 tasker.py
2026-10-29 10:45:00 Учебные данные созданы: /home/padmin/tasker/tasker.db
2026-10-29 10:45:00 Задачник 1.0: http://127.0.0.1:8000 — остановить: Ctrl+C
03

Учётные записи, версии, сброс

ЛогинПарольЧто у него
ivanIvan2026pass8 задач во всех статусах, с прошедшими и будущими сроками — основной пользователь практики
mariaMaria2026pass3 задачи — нужны, чтобы проверять, видит ли ivan чужие данные

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

КомандаЧто делает
py tasker.py --resetУдаляет все изменения и создаёт учебные данные заново. Перед каждым заданием и перед воспроизведением дефекта
py tasker.py --version 1.1Новая версия приложения — для раздела 11 «Тестовый процесс»: часть дефектов исправлена, но не только
py tasker.py --port 8080Другой порт, если 8000 занят

Рядом с tasker.py появляются два файла: tasker.db — база данных SQLite (раздел 10 открывает её напрямую) и tasker.log — журнал запросов с ошибками сервера. Версия приложения видна в заголовке страницы: «Задачник 1.0».

04

Требования

Требования написаны так, как их пишут в реальных проектах: большая часть точна, но не всё однозначно и не всё учтено. Как проверять сами требования, разобрано в разделе 03. В тест-кейсах и баг-репортах ссылайтесь на номер требования: «нарушено Т3».

Т1. Регистрация

  • Т1.1. Логин — от 3 до 20 символов: латинские буквы, цифры и «_».
  • Т1.2. Логин уникален без учёта регистра: если есть ivan, зарегистрировать Ivan нельзя.
  • Т1.3. Пароль — от 8 до 64 символов, хотя бы одна буква и одна цифра.
  • Т1.4. После регистрации открывается страница входа с сообщением «Учётная запись создана, войдите».

Т2. Вход и выход

  • Т2.1. Вход — по логину и паролю. Логин вводится так же, как при регистрации.
  • Т2.2. При неверном логине или пароле показывается одно сообщение: «Неверный логин или пароль» — не уточняя, что именно неверно.
  • Т2.3. Сессия действует достаточно долго, чтобы пользователю не приходилось часто входить заново.
  • Т2.4. «Выйти» завершает сессию: прежняя сессия больше не действует.

Т3. Задача

  • Т3.1. Название — от 1 до 100 символов. Пробелы по краям обрезаются; название из одних пробелов не принимается.
  • Т3.2. Срок — необязательный; не раньше сегодняшней даты.
  • Т3.3. Приоритет — целое число от 1 до 5, по умолчанию 3; 1 — высший.
  • Т3.4. У задачи можно изменить название, срок и приоритет.
  • Т3.5. Задачу можно удалить.

Т4. Статусы

  • Т4.1. Новая задача получает статус «Новая».
  • Т4.2. Переходы: «Новая» → «В работе» → «Готово». Готовую задачу можно вернуть в работу — статус «В работе».
  • Т4.3. Другие переходы запрещены.

Т5. Список задач

  • Т5.1. Пользователь видит только свои задачи.
  • Т5.2. Сортировка — по сроку, задачи без срока — в конце; при одинаковом сроке — по приоритету.
  • Т5.3. Фильтры: по статусу, флажок «только просроченные», поиск по части названия без учёта регистра.
  • Т5.4. Фильтры действуют одновременно.

Т6. Просроченные задачи и счётчики

  • Т6.1. Задача просрочена, если её срок раньше сегодняшней даты и она не в статусе «Готово».
  • Т6.2. Строки просроченных задач выделены красным.
  • Т6.3. Над списком — счётчики: всего задач, в работе, просрочено.

Т7. Интерфейс

  • Т7.1. Работает в актуальных версиях Chrome, Firefox, Edge и Яндекс Браузера.
  • Т7.2. На экране шириной от 360 px нет горизонтальной прокрутки.
  • Т7.3. У каждого поля ввода есть подпись.
  • Т7.4. Интерфейс работает быстро.

Т8. API

  • Т8.1. API описан в документации OpenAPI: http://127.0.0.1:8000/api/openapi.json.
  • Т8.2. Через API пользователь видит и меняет только свои задачи.
  • Т8.3. Ошибки возвращаются в JSON: {"error": "текст"}.

Т9. Данные

  • Т9.1. Пароли хранятся только в виде хеша.
  • Т9.2. У задачи хранятся дата создания и дата последнего изменения.
  • Т9.3. Данные хранятся надёжно.
05

Если не запускается

СообщениеПричина и что делать
"py" не является … командой / python: command not foundPython не установлен или не добавлен в PATH. В Windows переустановите с флажком «Add python.exe to PATH»
SyntaxError при запускеPython старше 3.10 — нужна более новая версия
Порт 8000 занят (…). Закройте другой Задачник или запустите с --port 8080Порт 8000 занят — например, «Задачник» уже запущен в другом окне. Закройте его или запустите с --port 8080
Браузер: «Не удаётся получить доступ к сайту»Сервер не запущен или терминал закрыт. Адрес — именно 127.0.0.1:8000: приложение доступно только с вашего компьютера
Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Все разделы Раздел 01: Тестирование и качество ПО