Skip to content

Latest commit

 

History

History
199 lines (147 loc) · 49 KB

specification.md

File metadata and controls

199 lines (147 loc) · 49 KB

Спецификация для ComfyMemo

Содержание

  1. Введение
  2. Функциональные Требования
  3. Дизайн
  4. Алгоритм Интервального Повторения
  5. Базовые Сущности и Отношения
  6. Технические требования
  7. План Разработки

1. Введение

1.1. Цель Спецификации

Цель данной технической спецификации — подробно описать функциональные и технические требования для разработки мобильного приложения ComfyMemo. Этот документ служит основой для разработки, тестирования и дальнейшего расширения функционала приложения.

1.2. Обзор Приложения

ComfyMemo — мобильное приложение, предназначенное для эффективного запоминания информации с использованием метода интервального повторения, основанного на кривой забывания Эббингауза. Приложение помогает пользователям сохранять знания на длительный срок с минимальными усилиями.

2. Функциональные Требования

2.1. Таблица Функциональных Требований

ID Название Описание
FNR-01 Внесение информации для повторения Возможность добавлять информацию, состоящую из вопроса и ответа, для последующего повторения.
FNR-02 Выбор способа проверки ответа на вопрос Возможность выбирать различные способы проверки ответа на вопрос: устный ответ или письменный ввод.
FNR-03 Редактирование внесенной информации Возможность удалять или обновлять информацию для повторения и связанные с ней параметры.
FNR-04 Интервальное повторение Автоматическое планирование следующего повторения информации на основе алгоритма интервального повторения.
FNR-05 Организация информации для повторения Размещение информации, требующей повторения, отдельно от остальной информации для улучшения наглядности.
FNR-06 Уведомления о необходимости начать повторение Отправка уведомлений пользователю о необходимости начать повторение каждой внесенной информации в соответствии с установленным интервалом.
FNR-07 Оценка повторения Оценка запомненной информации (оценка ответа на вопрос) для корректировки интервалов повторений.
FNR-08 Локальное сохранение внесенной информации и интервалов повторений Сохранение в памяти устройства данных об внесенной информации и об интервале повторений для каждой их этой информации

2.2. Детализированные Функциональные Требования

Note

Описанные ниже use-cases не являются актуальными и показали свою несостоятельность при создании прототипа (wireframe). Они не будут переработаны и оставлены для истории.

UC-01

Название Внесение информации для повторения
Цель Добавить информацию для повторения
Актор Пользователь
Предусловия Пользователь находится на главном экране
Основной поток 1. Пользователь нажимает Floating Action Button "+".
2. Система открывает Full Screen Dialog.
3. Пользователь заполняет поля "Вопрос" и "Ответ".
4. Пользователь выбирает способ проверки ответа на вопрос.
5. Пользователь нажимает Text Button "Save".
6. Система сохраняет информацию.
7. Система закрывает диалоговое окно.
Альтернативный поток A1. Пользователь закрывает диалог
 - Пользователь закрывает диалог с помощью Icon Button или Hardware back.
 - Система показывает Basic Dialog.
 - Пользователь выбирает опцию "Discard".
 - Система не сохраняет информацию.
 - Система закрывает оба диалоговых окна.
A1.1. Пользователь отменяет закрытие диалога.
 - Пользователь выбирает опцию "Cancel" в Basic Dialog.
 - Система закрывает только Basic Dialog.

A2. Пользователь некорректно заполнил поля
A2.1. Пользователь некорректно заполнил поле "Вопрос"
 - Поле "Вопрос" не содержит значащих символов.
 - Система визуально сигнализирует об ошибке и отображает сообщение ошибки под полем ввода.
A2.2. Пользователь некорректно заполнил поле "Ответ"
 - Поле "Ответ" не содержит значащих символов.
 - Система визуально сигнализирует об ошибке и отображает сообщение ошибки под полем ввода.
Постусловия 1. Система обновляет список внесенной информации.
2. Система сохраняет внесенную информацию на устройстве.
3. Система планирует повторение только что внесенной информации.
Связанные требования FNR-01
FNR-02
FNR-04
FNR-08

UC-02

Название Просмотр информации необходимой для повторения
Цель Увидеть информацию необходимую для повторения
Актор Пользователь
Предусловия Пользователь находится на главном экране
Основной поток 1. Пользователь выбирает вкладку "Повторение" в Tab.
2. Система выдает список Card, необходимых для повторения согласно интервалу повторений.
Альтернативный поток A1. Пользователь выбирает вкладку "Все карточки" в Tab
 - Система выдает список всех Card, независимо от необходимости их повторения.

A2. Информации не предоставлено
 - Система вместо списка Card отображает сообщение о том, что информации нет.
Постусловия Система корректно отображает соответствующие Card для каждой вкладки в Tab
Связанные требования FNR-05
FNR-04

UC-03

Название Повторение информации
Цель Повторить информацию которая нуждается в этом
Актор Пользователь
Предусловия 1. Пользователь находится на главном экране во вкладке "Повторение".
2. Пользователь перешел по уведомлению о необходимости повторения.
Основной поток 1. Пользователь нажимает на Card.
2. Система открывает экран повторения.
3. Система отображает увеличенную версию Card c вопросом.
4. Если способ проверки ответа был установлен как письменный ввод — пользователь вводит ответ в карточку.
5. Пользователь нажимает на карточку.
6. Система показывает другую сторону карточки с правильным ответом и, если способ проверки был установлен как письменный ввод — отображает введенный пользователем ответ.
7. Система отображает Slider для оценки повторения.
8. Пользователь устанавливает на Slider необходимое значение.
9. Пользователь нажимает на Common Button "Finish" для завершения повторения.
10. В зависимости от оценки пользователя система корректирует интервал повторения.
Альтернативный поток A1. Пользователь перешел по уведомлению
 - Система сразу открывает экран повторения для необходимой информации

A2. Пользователь некорректно заполнил поле "Вопрос"
 - Поле "Вопрос" не содержит значащих символов.
 - Система визуально сигнализирует об ошибке и отображает сообщение ошибки под полем ввода.

A3. Пользователь выходит с экрана повторения
 - Пользователь закрывает экран с помощью Icon Button или Hardware back.
 - Система не изменяет интервал повторения и не считает информацию повторенной.
Постусловия 1. Система корректно изменила интервал повторений для данной информации.
2. Система убрала данную информацию из раздела для повторений.
Связанные требования FNR-04
FNR-05
FNR-06
FNR-07

UC-04

Название Уведомление о необходимости повторения
Цель Отправить пользователю уведомление о необходимости повторения конкретной информации
Актор Система
Предусловия Некоторая информация стала нуждаться в повторении по истечении установленного интервала повторений для нее
Основной поток Система отправляет уведомление пользователю.
Альтернативный поток
Постусловия Пользователь получил уведомление
Связанные требования FNR-04
FNR-06

UC-05

Название Редактирование внесенной информации
Цель Редактировать (обновить/удалить) внесенную информацию и связанные с ней параметры (способ ответа)
Актор Пользователь
Предусловия Пользователь находится на главном экране во вкладке "Все карточки"
Основной поток 1. Пользователь нажимает на Card.
2. Система открывает Full Screen Dialog.
3. Пользователь вносит изменения в необходимые поля.
4. Пользователь нажимает на Common Button "Save".
5. Система сохраняет изменения.
Альтернативный поток A1. Пользователь отменяет редактирование
 - Пользователь закрывает диалоговое окно с помощью Text Button или Hardware back.
 - Система закрывает диалоговое окно без сохранения изменений.

A2. Пользователь удаляет карточку
 - Пользователь нажимает на Common Buttons "Delete".
 - Система запрашивает подтверждение удаления при помощи Basic Dialog.
 - Пользователь подтверждает удаление.
 - Система удаляет карточку, переходит на главный экран и отображает SnackBar с сообщением об успешном удалении.
А2.1. Пользователь отменяет удаление.
 - Пользователь отменяет удаление в Basic Dialog.
 - Система закрывает Basic Dialog.

A3. Пользователь некорректно заполнил поле "Вопрос"
 - Поле "Вопрос" не содержит значащих символов.
 - Система визуально сигнализирует об ошибке и отображает сообщение ошибки под полем ввода.
A4. Пользователь некорректно заполнил поле "Ответ"
 - Поле "Ответ" не содержит значащих символов.
 - Система визуально сигнализирует об ошибке и отображает сообщение ошибки под полем ввода.
Постусловия 1. Данные информации изменены и система отображает обновленные данные
2. Система сохранила в памяти устройства обновленные данные.
Связанные требования FNR-03
FNR-08

3. Дизайн

Дизайн приложения разработан в соответствии с Material Design 3, используя цвета, типографику и другие элементы из этого стиля. Дизайн стремится максимально следовать описанным гайдлайнам.

Прототип (Wireframe) и основной дизайн приложения доступны в Figma на разных страницах одного файла: Wireframe и Design в Figma

Дизайн

4. Алгоритм Интервального Повторения

Алгоритм интервального повторения, используемый в ComfyMemoFSRS (Free Spaced Repetition Scheduler). Он основан на принципах кривой забывания Эббингауза и адаптируется под индивидуальные результаты пользователя. Цель алгоритма — оптимизировать интервалы между повторениями для максимальной эффективности запоминания информации.

5. Базовые Сущности и Отношения

Архитектура созданных сущностей позволяет интегрировать другие алгоритмы интервального повторения, такие как SM-2, без изменения базовой структуры. Это достигается за счёт расширения сущностей ReviewLog и SchedulerEntry для поддержки специфики каждого алгоритма.

5.1 Сущности

Flashcard (Карточка)

Атрибут Тип данных Описание
id UUID Уникальный идентификатор карточки
title String Название карточки
term String Термин/Вопрос
definition String Определение/Ответ
self_verify Enum Тип проверки ответа (самопроверка) (None, Written).

ReviewLog (Журнал Повторений)

Атрибут Тип данных Описание
id UUID Уникальный идентификатор записи
card_id UUID Идентификатор связанной карточки
review Datetime Дата и время проведения повторения
rating Enum Оценка пользователя (Forgot, Hard, Good, Perfect)

FSRSReviewLog (Журнал Повторений FSRS)

Атрибут Тип данных Описание
id UUID Уникальный идентификатор записи
review_log_id UUID Идентификатор связанной записи в ReviewLog
state Enum Состояние карточки после повторения (New, Learning, Review, Relearning)

SchedulerEntry (Запись Планировщика)

Атрибут Тип данных Описание
id UUID Уникальный идентификатор записи планировщика
card_id UUID Идентификатор связанной карточки
due Datetime Дата и время следующего повторения
scheduled_days Integer Количество дней до следующего повторения
elapsed_days Integer Количество дней с момента последнего повторения
reps Integer Количество повторений
lapses Integer Количество пропусков
last_review Datetime Дата и время последнего повторения

FSRSSchedulerEntry (Запись Планировщика FSRS)

Атрибут Тип данных Описание
id UUID Уникальный идентификатор записи
scheduler_id UUID Идентификатор связанной записи планировщика
stability Float Коэффициент стабильности
difficulty Float Коэффициент сложности
state Enum Текущее состояние карточки (New, Learning, Review, Relearning)

5.2 Отношения/Связи

Flashcard (1) ─── (M) ReviewLog (1) ─── (1) FSRSReviewLog
      |
      ╰─── (M) SchedulerEntry (1) ─── (1) FSRSSchedulerEntry

6. Технические Требования

6.1. Основной Технологический Стэк

Dart и Flutter: Основные технологии для разработки бизнес-логики и пользовательских интерфейсов.

6.2. Дополнительные Технологии

  • Хранение данных: В первых версиях приложения будет использоваться JSON и файловое хранение данных, но по мере развития будут интегрированы базы данных.
  • Внешние Библиотеки: Использование специализированных библиотек ограничено необходимостью работы с аппаратной частью ОС (например, камера, файловое хранилище) и специализированными задачами (например, тестирование).

6.3. Подход к Архитектуре

  • Минимальное Использование Внешних Решений: Проект стремится максимально использовать встроенные средства SDK, избегая внешних решений для лучшего понимания встроенных возможностей выбранного стэка и контроля над функционалом.
  • Модульность: Архитектура будет разработана таким образом, чтобы компоненты системы можно было легко заменять или обновлять без нарушения общей структуры. Например переход от хранения данных в JSON к использованию базы данных должен осуществляться бесшовно, благодаря принципу модульности и полиморфному поведению компонентов.

7. План Разработки

GitHub Projects: Используется для управления задачами и отслеживания прогресса разработки.

Все задачи оформляются как issue в репозитории и для каждой задачи будет создаваться отдельная ветка (branch), которая после завершения будет сливаться в main.