# Запити зацікавлених осіб

## Вступ

У даному розділі розкриваються ключові терміни та процеси, пов'язані з розробкою високоякісного програмного забезпечення. Ці матеріали надаються для зацікавлених користувачів, які прагнуть отримати глибше розуміння суті проекту та його основних завдань.

### Мета

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

### Контекст

Даний документ містить теоретичні відомості, визначення та загальний огляд функціональності, які допоможуть розробникам розуміти напрямок роботи над програмним продуктом, а клієнтам - зрозуміти очікування від нього.


### Основні визначення та скорочення

[Зацікавлені сторони (особи)](https://uk.wikipedia.org/wiki/Зацікавлені_сторони) -  фізичні та юридичні особи, які мають легітимний інтерес у діяльності організації, тобто певною мірою залежать від неї або можуть впливати на її діяльність.

[FURPS](https://en.wikipedia.org/wiki/FURPS) - абревіатура, що репрезентує модель класифікації якостей програмного забезпечення (функціональні і нефункціональні вимоги):
- *Functionality* (Функціональність) - можливості (розмір та загальний набір функцій), повторне використання (сумісність, інтероперабельність, портативність), безпека (безпека та можливість експлуатації);
- *Usability* (Використовуваність) (UX) - людський фактор, естетика, узгодженість, документація, швидкість реагування;
- *Reliability* (Надійність) - доступність (частота відмов (надійність/довговічність/стійкість), ступінь і тривалість відмов (відновлюваність/живучість)), передбачуваність (стабільність), точність (частота/серйозність помилок);
- *Perfomance* (Продуктивність) - швидкість, ефективність, споживання ресурсів (живлення, оперативна пам'ять, кеш і т.д.), пропускна здатність, ємність, масштабованість;
- *Supportability* (Підтримка) (ремонтопридатність, підтримуваність, стійкість, швидкість відновлення) - тестуємість, гнучкість (модифікованість, конфігурованість, адаптованість, розширюваність, модульність), встановлюваність, локалізованість.

[API](https://uk.wikipedia.org/wiki/Прикладний_програмний_інтерфейс) (з англ. application programming interface “прикладни́й програ́мний інтерфе́йс”) - підхід до архітектури мережевих протоколів, які надають доступ до інформаційних ресурсів.

[REST](https://uk.wikipedia.org/wiki/REST) (з англ. Representational State Transfer, «передача репрезентативного стану») — підхід до архітектури мережевих протоколів, які надають доступ до інформаційних ресурсів.

[MVC](https://en.wikipedia.org/wiki/Model–view–controller#Components) (з англ. Model-view-controller) - це патерн проектування програмного забезпечення, який зазвичай використовується для розробки користувацьких інтерфейсів, що розділяє відповідну програмну логіку на три взаємопов'язані елементи. Це робиться для того, щоб відокремити внутрішнє представлення інформації від способів її представлення користувачеві та отримання від нього.

[SOLID](https://en.wikipedia.org/wiki/SOLID) - це мнемонічна абревіатура для п'яти принципів проектування, призначених для того, щоб зробити об'єктно-орієнтовані проекти більш зрозумілими, гнучкими та зручними в обслуговуванні.
- *Принцип єдиної відповідальності*: "Ніколи не повинно бути більше однієї причини для зміни класу”. Іншими словами, кожен клас повинен мати лише одну відповідальність.
- *Принцип відкритості-закритості*: "Сутності програмного забезпечення ... повинні бути відкритими для розширення, але закритими для модифікації.
- *Принцип заміщення Ліскова*: "Функції, які використовують вказівники або посилання на базові класи, повинні мати можливість використовувати об'єкти похідних класів, не знаючи про це.
- *Принцип розділення інтерфейсів*: "Клієнти не повинні бути змушені залежати від інтерфейсів, якими вони не користуються".
- *Принцип інверсії залежності*: "Покладайтеся на абстракції, а не на конкретику".

[DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)(з англ. don’t repeat yourself - “не повторюйся”) - це принцип розробки програмного забезпечення, спрямований на зменшення повторення інформації, яка може змінитися, заміну її абстракціями, які менш схильні до змін, або використання нормалізації даних, яка дозволяє уникнути надмірності в першу чергу.

[ORM](https://uk.wikipedia.org/wiki/Об%27єктно-реляційне_відображення) - (англ. Object-relational mapping, Об'єктно-реляційна проекція) — технологія програмування, яка зв'язує бази даних з концепціями об'єктно-орієнтованих мов програмування, створюючи «віртуальну об'єктну базу даних».


### Посилання

1. [https://uk.wikipedia.org/wiki/Зацікавлені_сторони](https://uk.wikipedia.org/wiki/Зацікавлені_сторони)
2. [https://en.wikipedia.org/wiki/FURPS](https://en.wikipedia.org/wiki/FURPS)
3. [https://uk.wikipedia.org/wiki/Прикладний_програмний_інтерфейс](https://uk.wikipedia.org/wiki/Прикладний_програмний_інтерфейс)
4. [https://uk.wikipedia.org/wiki/REST](https://uk.wikipedia.org/wiki/REST)
5. [https://en.wikipedia.org/wiki/Model–view–controller#Components](https://en.wikipedia.org/wiki/Model–view–controller#Components)
6. [https://en.wikipedia.org/wiki/SOLID](https://en.wikipedia.org/wiki/SOLID)
7. [https://en.wikipedia.org/wiki/Don%27t_repeat_yourself](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)
8. [https://uk.wikipedia.org/wiki/Об%27єктно-реляційне_відображення](https://uk.wikipedia.org/wiki/Об%27єктно-реляційне_відображення)


## Короткий зміст

- [Характеристика ділових процесів](#характеристика-ділових-процесів)
- [Короткий огляд продукту](#короткии-огляд-продукту)
- [Функціональність](#функціональність)
- [Практичність](#практичність)
- [Надійність](#надіиність)
- [Продуктивність](#продуктивність)
- [Експлуатаційна придатність](#експлуатаціина-придатність)

## Характеристика ділових процесів

|         ID        |                                                                                                                          ACCOUNT.CREATE                                                                                                                          |
|:-----------------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                                                                                     Створити обліковий запис                                                                                                                     |
|      Учасники     |                                                                                                                       Користувач, система                                                                                                                        |
|     Передумови    |                                                                                                                             Відсутні                                                                                                                             |
|     Результат     |                                                                                                                   Обліковий запис користувача                                                                                                                    |
| Виключні ситуації |                                                                              001.001 Користувач ввів заборонені символи в поле псевдоніму<br>001.002 Ідентичний псевдонім вже існує                                                                              |
| Основний сценарій | 1. Користувач вводить бажаний псевдонім у поле вводу псевдоніму<br>2. Користувач вводить пароль у поле вводу паролю<br>3. Користувач натискає на кнопку створення облікового запису<br>4. Система створює обліковий запис користувача (можливі 001.001, 001.002) |

|         ID        |                                                                                                                                    ACCOUNT.DELETE                                                                                                                                   |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                                                                                               Видалити обліковий запис                                                                                                                              |
|      Учасники     |                                                                                                                                 Користувач, система                                                                                                                                 |
|     Передумови    |                                                                                                                         Користувач ідентифікований в системі                                                                                                                        |
|     Результат     |                                                                                                                      Відсутність облікового запису користувача                                                                                                                      |
| Виключні ситуації |                                                                                                                        001.005 Користувач не ідентифікований                                                                                                                        |
| Основний сценарій | 1. Користувач натискає на кнопку видалення облікового запису<br>2. Система виводить кнопку-запит на підтвердження видалення облікового запису<br>3. Користувач натискає на кнопку підтвердження видалення облікового запису<br>4. Система видаляє обліковий запис (можлива 001.005) |

|         ID        |                                                                                                                                                                         ACCOUNT.MODIFY                                                                                                                                                                         |
|:-----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                                                                                                                             Змінити властивості облікового запису                                                                                                                                                              |
|      Учасники     |                                                                                                                                                                      Користувач, система                                                                                                                                                                       |
|     Передумови    |                                                                                                                                                              Користувач ідентифікований в системі                                                                                                                                                              |
|     Результат     |                                                                                                                                                              Зміна властивостей облікового запису                                                                                                                                                              |
| Виключні ситуації |                                                                                                                                                             001.005 Користувач не ідентифікований                                                                                                                                                              |
| Основний сценарій | 1. Користувач натискає на кнопку редагування облікового запису<br>2. Система виводить інтерфейс для редагування облікового запису (можлива 001.005)<br>3. Користувач вказує бажані зміни властивостей облікового запису<br>4. Користувач натискає на кнопку внесення змін до властивостей облікового запису<br>5. Система змінює властивості облікового запису |

|         ID        |                                                                                                                                                                            USER.CREATE_SURVEY                                                                                                                                                                            |
|:-----------------:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                                                                                                                                           Створити опитування                                                                                                                                                                            |
|      Учасники     |                                                                                                                                                                           Користувач, система                                                                                                                                                                            |
|     Передумови    |                                                                                                                                                                   Користувач ідентифікований в системі                                                                                                                                                                   |
|     Результат     |                                                                                                                                                                           Створене опитування                                                                                                                                                                            |
| Виключні ситуації |                                                                                                                                 001.005 Користувач не ідентифікований<br>001.007 Користувач ввів неприпустимі символи в назві опитування                                                                                                                                 |
| Основний сценарій | 1. Користувач переходить на сторінку створення опитування (можлива 001.005)<br>2. Система виводить інтерфейс створення опитування<br>3. Користувач задає інформацію про запитання та тип опитування<br>4. Користувач натискає кнопку збереження опитування<br>5. Система створює опитування (можлива 001.007)<br>6. Система виводить посилання на проходження опитування |

|         ID        |                                                                                                                          USER.DELETE_SURVEY                                                                                                                          |
|:-----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                                                                                         Видалити опитування                                                                                                                          |
|      Учасники     |                                                                                                                         Користувач, система                                                                                                                          |
|     Передумови    |                                                                                               Користувач ідентифікований в системі, користувач є власником опитування                                                                                                |
|     Результат     |                                                                                                                        Відсутність опитування                                                                                                                        |
| Виключні ситуації |                                                                    001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування                                                                     |
| Основний сценарій | 1. Користувач натискає на кнопку видалення опитування<br>2. Система виводить запит на підтвердження видалення опитування<br>3. Користувач натискає на кнопку підтвердження видалення опитування<br>4. Система видаляє опитування (можливі 001.005, 001.006, 001.008) |

|         ID        |                                                                         USER.GET_SURVEY_RESULT                                                                        |
|:-----------------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                                  Переглянути відповіді на опитування                                                                  |
|      Учасники     |                                                                          Користувач, система                                                                          |
|     Передумови    |                                                Користувач ідентифікований в системі, користувач є власником опитування                                                |
|     Результат     |                                                                 Інформація про відповіді на опитування                                                                |
| Виключні ситуації |                     001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування                     |
| Основний сценарій | 1. Користувач натискає на кнопку перегляду відповідей на опитування<br>2. Система виводить інформацію про відповіді на опитування (можливі 001.005, 001.006, 001.008) |

|         ID        |                                                                                                              USER.LOGIN                                                                                                              |
|:-----------------:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                                                                    Пройти ідентифікацію в системі                                                                                                    |
|      Учасники     |                                                                                                         Користувач, система                                                                                                          |
|     Передумови    |                                                                                                    Користувач має обліковий запис                                                                                                    |
|     Результат     |                                                                                                 Користувач ідентифікований в системі                                                                                                 |
| Виключні ситуації |                   001.001 Користувач ввів заборонені символи в поле псевдоніму<br>001.003 Користувач ввів псевдонім, якого не існує в системі<br>001.004 Користувач ввів неправильний пароль до облікового запису                    |
| Основний сценарій | 1. Користувач вводить псевдонім у поле вводу псевдоніму<br>2. Користувач вводить пароль у поле вводу паролю<br>3. Користувач натискає кнопку ідентифікації<br>4. Система ідентифікує користувача (можливі 001.001, 001.003, 001.004) |

|         ID        |                                                                 USER.LOGOUT                                                                 |
|:-----------------:|:-------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                   Скинути дані про ідентифікацію в системі                                                  |
|      Учасники     |                                                             Користувач, система                                                             |
|     Передумови    |                                                     Користувач ідентифікований в системі                                                    |
|     Результат     |                                                   Користувач не ідентифікований в системі                                                   |
| Виключні ситуації |                                                    001.005 Користувач не ідентифікований                                                    |
| Основний сценарій | 1. Користувач натискає на кнопку виходу з облікового запису<br>2. Система скидає інформацію про ідентифікацію користувача (можлива 001.005) |

|         ID        |                                                                                                                                               USER.MODIFY_SURVEY                                                                                                                                               |
|:-----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                                                                                                             Редагувати опитування                                                                                                                                              |
|      Учасники     |                                                                                                                                              Користувач, система                                                                                                                                               |
|     Передумови    |                                                                                                                    Користувач ідентифікований в системі, користувач є власником опитування                                                                                                                     |
|     Результат     |                                                                                                                                               Змінене опитування                                                                                                                                               |
| Виключні ситуації |                                                                                         001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування                                                                                          |
| Основний сценарій | 1. Користувач переходить на сторінку редагування опитування<br>2. Система виводить інтерфейс редагування опитування (можливі 001.005, 001.006, 001.008)<br>3. Користувач задає інформацію про зміни в опитуванні<br>4. Користувач натискає кнопку збереження змін в опитуванні<br>5. Система змінює опитування |

|         ID        |                                                                      USER.STAT_SURVEY                                                                     |
|:-----------------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                             Переглянути властивості опитування                                                            |
|      Учасники     |                                                                    Користувач, система                                                                    |
|     Передумови    |                                          Користувач ідентифікований в системі, користувач є власником опитування                                          |
|     Результат     |                                                           Інформація про властивості опитування                                                           |
| Виключні ситуації |               001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування               |
| Основний сценарій | 1. Користувач натискає на кнопку перегляду інформації про опитування<br>2. Система виводить інформацію про опитування (можливі 001.005, 001.006, 001.008) |

|         ID        |                                                                                                                                                                 USER.TAKE_ANON_SURVEY                                                                                                                                                                 |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                                                                                                                               Пройти анонімне опитування                                                                                                                                                              |
|      Учасники     |                                                                                                                                                                  Користувач, система                                                                                                                                                                  |
|     Передумови    |                                                                                                                                                                        Відсутні                                                                                                                                                                       |
|     Результат     |                                                                                                                                                             Запис відповідей на опитування                                                                                                                                                            |
| Виключні ситуації |                                                                                                                                                          001.006 Запитане опитування не існує                                                                                                                                                         |
| Основний сценарій | 1. Користувач переходить на сторінку проходження опитування<br>2. Система виводить перелік запитань опитування (можлива 001.006)<br>3. Користувач вводить відповіді на запитання<br>4. Користувач натискає кнопку надсилання відповідей<br>5. Система записує відповіді на опитування (можлива 001.006)<br>6. Система виводить прощальне повідомлення |

|         ID        |                                                                                                                                                                                    USER.TAKE_NAMED_SURVEY                                                                                                                                                                                   |
|:-----------------:|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                                                                                                                                                  Пройти поіменне опитування                                                                                                                                                                                 |
|      Учасники     |                                                                                                                                                                                     Користувач, система                                                                                                                                                                                     |
|     Передумови    |                                                                                                                                                                             Користувач ідентифікований в системі                                                                                                                                                                            |
|     Результат     |                                                                                                                                                                 Запис відповідей на опитування та відомості про користувача                                                                                                                                                                 |
| Виключні ситуації |                                                                                                                                                        001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує                                                                                                                                                        |
| Основний сценарій | 1. Користувач переходить на сторінку проходження опитування<br>2. Система виводить перелік запитань опитування (можливі 001.005, 001.006)<br>3. Користувач вводить відповіді на запитання<br>4. Користувач натискає кнопку надсилання відповідей<br>5. Система записує відповіді на опитування та відомості про користувача (можлива 001.006)<br>6. Система виводить прощальне повідомлення |

## Короткий огляд продукту

<center>
<img width=60% src="http://139.162.162.130:16660/img/logo2-web.svg">
</center>

Xpertise - це система для проведення будь-яких опитувань.
Вона дозволяє користувачам створювати опитування, збирати відповіді на них та переглядати докладну й узагальнену статистику.
У користувачів є можливість створювати не лише анонімні, але й поіменні опитування, тому платформа також задовольнить потреби в проведенні голосувань для прийняття спільних рішень у командах.

## Функціональність

Наша система спрямована, в першу чергу, на взаємодію з користувачами.

***Користувач** - це особа, що взаємодіє із системою.*

Cистема розділяє користувачів на дві категорії:
- гість
- авторизований користувач

***Гість** - це користувач, що не пройшов ідентифікацію в системі. Такого користувача не можна зіставити з жодним обліковим записом.*

Гість може:
- створити обліковий запис
- пройти ідентифікацію в системі
- пройти анонімне опитування

***Зареєстрований користувач** - це користувач, котрий успішно пройшов ідентифікацію в системі. Такого користувача можна однозначно зіставити з обліковим записом, що наявний у системі.*

Зареєстрований користувач може:
- редагувати властивості свого облікового запису
- видалити свій обліковий запис
- скинути дані про ідентицікацію в системі
- створити опитування
- відредагувати своє опитування
- видалити своє опитування
- призупинити своє опитування
- продовжити своє опитування
- переглянути властивості свого опитування
- переглянути результати свого опитування
- пройти анонімне опитування
- пройти поіменне опитування

*[Респондент](https://slovnyk.ua/index.php?swrd=%D1%80%D0%B5%D1%81%D0%BF%D0%BE%D0%BD%D0%B4%D0%B5%D0%BD%D1%82) - той, хто відповідає на питання анкети; опитуваний.*

***Опитування** - це перелік запитань, кожне з яких передбачає обов'язкову або необов'язкову відповідь. Кожна відповідь має визначений тип.*

***Анонімне опитування** - це опитування, відповідь на яке може не містити інформації про обліковий запис респондента (&#42;респондент все одно може вирішити надати таку інформацію).*

***Поіменне опитування** - це опитування, відповідь на яке обов'язково містить дані про обліковий запис респондента.*

## Практичність

- Наявність зручного інструменту для побудови опитувань
- Можливість легко замінити брендинг та кольорову палітру
- Перегляд аналітики в реальному часі
- Формування статистики відповідей у зручному інтерфейсі
- Можливість експорту результатів опитування через API
- Підтримка програмування реакцій на події (hooks)

## Надійність

- Шифрування з'єднань (TLS)
- Автоматичне резервне копіювання
- Автоматичне відновлення з резервних копій

## Продуктивність

- Низьке використання мережі базовим протоколом
- Незалежність від сторонніх веб-хостингів

## Експлуатаційна придатність

- Наявність докладної документації для користувачів, адміністраторів та розробників
- Доступність онлайн-підтримки
