Compare commits

..

No commits in common. "master" and "vodyana" have entirely different histories.

35 changed files with 241 additions and 1873 deletions

6
.gitignore vendored
View File

@ -102,9 +102,3 @@ dist
# TernJS port file # TernJS port file
.tern-port .tern-port
# utils/table-generator generated files
utils/table-generator/tables/
utils/table-generator/tables.md
utils/table-generator/activities/
utils/table-generator/activities.md

View File

@ -36,15 +36,6 @@ module.exports = {
{ {
title: 'Розроблення вимог до системи', title: 'Розроблення вимог до системи',
path:"/requirements/", path:"/requirements/",
children: [
"/requirements/state-of-the-art",
"/requirements/stakeholders-needs"
]
},
{
title: 'Розроблення вимог до функціональности системи',
path:"/use-cases/"
}, },
{ {
@ -102,8 +93,8 @@ module.exports = {
// editLinkText: 'Ви можете покращити цю сторінку' // editLinkText: 'Ви можете покращити цю сторінку'
}, },
title: 'Xpertise', title: 'Назва проєкту',
description: 'Лабораторні роботи з дисципліни "Організація баз даних"', description: 'Лабораторні роботи з дисципліни "Розподілені інформаційні системи"',
configureWebpack: { configureWebpack: {
resolve: { resolve: {
alias: { alias: {

View File

@ -1,6 +1,11 @@
# Проєктування бази даних # Проєктування системи
## BE модель
Вбудовування зображень діаграм здійснюється з використанням сервісу [plantuml.com](https://plantuml.com/).
В markdown-файлі використовується опис діаграми
```md
<center style=" <center style="
border-radius:4px; border-radius:4px;
@ -11,58 +16,34 @@
@startuml @startuml
entity Account <<ENTITY>> participant Client
entity Account.username <<TEXT>>
entity Account.password <<TEXT>>
entity Survey <<ENTITY>> participant SR as "Service Registry"
entity Survey.name <<TEXT>>
entity Survey.duration <<TEXT>>
entity Survey.isPaused <<BOOLEAN>>
entity Survey.isNamed <<BOOLEAN>>
entity Question <<ENTITY>> participant Service
entity Question.text <<TEXT>>
entity Responce <<ENTITY>> Service -> SR : register
entity Responce.value <<TEXT>> SR -> SR
SR --> Service
...
entity Link <<ENTITY>> SR -> Service: heartbeat
entity Link.usageLimit <<INT>> SR <-- Service: health
entity Link.responceLimit <<INT>> ...
entity Link.uses <<INT>>
entity Link.responces <<INT>>
entity Link.path <<TEXT>>
Account.username --* Account Client -> SR: find
Account.password --* Account Client <-- SR: service endpoint
Client -> Service: request
Client <-- Service: response
Survey.name --* Survey
Survey.duration --* Survey
Survey.isPaused --* Survey
Survey.isNamed --* Survey
Link.usageLimit -u-* Link
Link.responceLimit -u-* Link
Link.uses --* Link
Link.responces --* Link
Link.path -u-* Link
Responce.value -u-* Responce
Question.text -u-* Question
Account "1,1" -- "0,*" Survey
Survey "1,1" -- "0,*" Question
Question "1,1" -r- "0,*" Responce
Account "0,1" -r- "0,*" Responce
Link "0,*" -- "1,1" Survey
@enduml @enduml
</center> </center>
```
## ER-модель яка буде відображена наступним чином
<center style=" <center style="
border-radius:4px; border-radius:4px;
@ -73,58 +54,33 @@ Link "0,*" -- "1,1" Survey
@startuml @startuml
entity Account <<ENTITY>> { @startuml
id:INT
username:CHAR(64)
password:CHAR(256)
}
entity Responce <<ENTITY>> { participant Client
id:INT
value:CHAR(16384)
}
entity Question <<ENTITY>> { participant SR as "Service Registry"
id:INT
text:CHAR(256)
}
entity Survey <<ENTITY>> { participant Service
id:INT
name:CHAR(256) Service -> SR : register
duration:CHAR(256) SR -> SR
isPaused:BOOLEAN SR --> Service
isNamed:BOOLEAN ...
}
SR -> Service: heartbeat
SR <-- Service: health
...
Client -> SR: find
Client <-- SR: service endpoint
Client -> Service: request
Client <-- Service: response
entity Link <<ENTITY>> {
id:INT
uses:INT
responces:INT
usageLimit:INT
responceLimit:INT
path:CHAR(32)
}
Responce "0,*" --> "1,1" Question
Question "0,*" --> "1,1" Survey
Survey "0,*" --> "1,1" Account
Link "0,*" --> "1,1" Survey
Responce "0,*" --> "0,1" Account
@enduml @enduml
</center> </center>
## Реляційна схема
<center style="
border-radius:4px;
border: 1px solid #cfd7e6;
box-shadow: 0 1px 3px 0 rgba(89,105,129,.05), 0 1px 1px 0 rgba(0,0,0,.025);
padding: 1em;"
>
![relational_schema](./relational_scheme.png)
</center>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

View File

@ -1,4 +1,197 @@
# Розроблення загальних вимог до системи # Розроблення вимог до системи
- [Аналіз предметної області](state-of-the-art.md) ## Основні визначення
- [Запити зацікавлених осіб](stakeholders-needs.md)
*[Розділ містить визначення термінів та скорочень, які використовуються при аналізі предметної області.]*
## Підходи та способи вирішення завдання
Тепер давайте розглянемо найпопулярніші інструменти для проведення анкетувань.
[Google Forms](https://uk.wikipedia.org/wiki/Google_Форми)
Google Forms — програмне забезпечення для адміністрування опитування,
що входить до складу безкоштовного веб-пакету Google Docs Editors,
пропонованого Google. Послуга також включає Google Docs, Google Sheets,
Google Slides, Google Drawings, Google Sites і Google Keep. Google Форми
доступні лише як веб-додаток. Додаток дозволяє користувачам створювати та
редагувати опитування в Інтернеті, співпрацюючи з іншими користувачами
в режимі реального часу. Зібрану інформацію можна автоматично внести в
електронну таблицю.
Цілком можливо, що Google Forms є одним із найпоширеніших конструкторів
форм, доступних сьогодні. Враховуючи численні переваги Google Forms,
величезна популярність програми не повинна бути несподіванкою.
Однак, як будь-яка інша програма, Google Forms також має деякі помітні
недоліки.
Переваги Google Forms:
- Зручність
- Простота використання
- Це безкоштовно
- Співпраця з колегами
- Необмежена кількість форм
- Потужні функції (кілька типів запитань, поле завантаження файлу, умовна
логіка)
- Кілька варіантів розповсюдження
- Частина екосистеми Google
![GoogleForms](http://139.162.162.130:16660/img/img-1.1.jpg)
[SurveyMonkey](https://en.wikipedia.org/wiki/SurveyMonkey)
SurveyMonkey - це служба як для створення простих і невеликих опитувань,
так і для масової розсилки анкет, виявлення тенденцій і складання більших
досліджень. Сервіс дозволяє швидко створювати опитування, налаштовувати
їх зовнішній вигляд, змінювати місцями питання, проводити А/Б-тестування,
вставляти опитування на сайти та соціальні мережі, складати дуже детальні
та наочні звіти, захищати дані та інтегрувати засоби з MailChimp,
GroSocial та іншими сервісами.
Функції, які може запропонувати сервіс:
- 51 шаблон опитувань та 15 типів питань.
- Підтримка всіх мов (Unicode).
- Логіка сторінок та питань.
- Випадковий розкид питань та конвеєрна організація.
- Користувальницькі готові теми та звіти.
- Сортування варіантів відповідей та випадковий розкид.
- Індикатор пройдених питань.
- Автонумерація сторінок та питань.
- Переадресація після завершення та сторінка подяк.
- Версія PDF для друку.
- Можливість надіслати опитування за веб-посиланням, поштою, у Twitter
або Facebook.
- Настроювана URL-адреса.
- Можливість вставити опитування на веб-сторінку або на спливаюче вікно.
- Розсилання опитувань диспетчером.
- Підвищена безпека (SSL).
- Підсумки в режимі реального часу.
- Аналітика тексту.
- Інтеграція SPSS(пакету програм, який використовується для аналізу
статистичних даних).
- Фільтри та перехресні таблиці відповідей за критеріями.
- Загальний доступ до відповідей.
![SurveyMonkey](http://139.162.162.130:16660/img/img-1.2.jpg)
[Responsly](https://www.responsly.com)
Responsly - платформа, яка дозволяє створювати онлайн-опитування та
анкети всього за кілька секунд і надсилати їх тисячам одержувачів одним
натисканням кнопки. Також є вбудована технологія штучного інтелекту, яка
надає широкий вибір типів питань для опитувань, вибраних спеціально для
певної аудиторії.
Функції, які може запропонувати сервіс:
- 25+ типів питань
- Автоматизація та інтеграція - планування надсилань опитувань і
створення власних сповіщення.
- Калькулятор - можливість обчислення балів, цін та інших змінних на
основі відповідей людей. Створення різних кінцевих сторінок на основі
балів.
- Багатомовні опитування.
- Безпека корпоративного рівня.
![Responsly](http://139.162.162.130:16660/img/img-1.3.jpg)
[Jotform](https://en.wikipedia.org/wiki/Jotform)
Jotform — це потужна онлайн програма, яка дозволяє будь-кому швидко
створювати власні онлайн форми. Інтуїтивно зрозумілий інтерфейс
конструктора форм робить створення форм неймовірно простим, без написання
жодного рядка коду. За допомогою Jotform користувачі можуть створювати та
публікувати форми, інтегрувати їх у свій веб-сайт та отримувати відповіді
електронною поштою. Jotform дозволяє створювати онлайн форми, отримувати
відповіді безпосередньо в електронних листах та створювати PDF форми для
заповнення.
Функції, які може запропонувати сервіс:
- Тисячі готових до використання безкоштовних шаблонів, які допоможуть
користувачу створювати форми.
- Вбудований інструмент умовної логіки, який може показувати або
приховувати будь-які вибрані користувачем поля форми, залежно від того,
як люди відповідають на запитання.
- Не потрібний досвід програмування.
- Jotform дуже серйозно ставиться до безпеки даних користувачів.
- Легка інтеграція платежів.
- Інтеграція віджетів.
![Jotform](http://139.162.162.130:16660/img/img-1.4.jpg)
[QuestionPro](https://questionpro.com/)
QuestionPro — це програмне забезпечення для створення та розповсюдження
опитувань. Воно складається з інтуїтивно зрозумілого інтерфейсу для
створення запитань для опитувань, інструментів для їх розповсюдження
електронною поштою або на веб-сайті та інструментів для аналізу та
перегляду результатів.
Достатньо просто створити опитування та надіслати його електронною поштою
потенційним респондентам. QuestionPro подбає про збір і запис відповідей,
а результати будуть доступні в реальному часі.
Функції, які може запропонувати сервіс:
- Необмежена кількість опитувань.
- Необмежена кількість відповідей.
- 20+ професійних тем опитування.
- Додавання свого логотипу.
- Експорт необроблених даних.
- Цілодобова підтримка електронною поштою.
- Індекс підтримки споживача (NPS).
- Багатомовні опитування.
- Розширена логіка розгалуження.
- Мобільний додаток QuestionPro.
- Експорт SPSS (пакету програм, який використовується для аналізу
статистичних даних).
- Цілодобовий чат і телефонна підтримка.
- Аналіз тональності тексту (клас методів контент-аналізу в комп'ютерній
лінгвістиці, призначений для автоматизованого виявлення в текстах
емоційно забарвленої лексики).
- Функції інтеграції опитувань.
- Функції автоматизації опитувань.
- Адміністрування опитування та функції безпеки.
![QuestionPro](http://139.162.162.130:16660/img/img-1.5.jpg)
[Fillout](https://www.fillout.com/)
Fillout — це платформа для створення форм, опитувань і тестів. Fillout
інтегрується з інструментами, які вже використовує користувач, щоб
допомогти автоматизувати робочі процеси та масштабувати операції. Час
безперебійної роботи платформи та безпека додатків є двома пріоритетами
Fillout. Для компаній із суворими вимогами щодо резидентності даних та
іншими вимогами Fillout пропонує корпоративне рішення для безпечного
отримання даних у будь-якому масштабі.
Функції може запропонувати сервіс:
- Fillout пропонує широкий вибір шаблонів опитувань, придатних для різних
цілей, включаючи відгуки клієнтів, дослідження ринку, задоволеність
працівників тощо. Кожен шаблон розроблено, щоб допомогти отримати
користувачу цінну інформацію, і його легко налаштувати відповідно до
потреб.
- Fillout забезпечує легку інтеграцію з різними платформами, забезпечуючи
безпроблемну передачу та аналіз даних, які збирає користувач під час
своїх опитувань.
- Функція масового імпорту питань.
- Потужна інтуїтивна логіка.
![Fillout](http://139.162.162.130:16660/img/img-1.6.jpg)
## Порівняльна характеристика існуючих засобів вирішення завдання
*[Розділ містить опис існуючих програм, інформаційних систем, сервісів, тощо, призначених для вирішення
завдання. Дається порівняльна характеристика властивостей FURPS:*
- *Functionality (функциональні вимоги)*
- *Usability (вимоги до зручності роботи)*
- *Reliability (вимоги до надійності)*
- *Performance (вимоги до продуктивності)*
- *Supportability (вимоги до підтримки)*
*(у вигляді таблиці).]*
## Висновки
*[Робляться висновки щодо доцільності розробки нової або модифікації існуючої інформаційної системи, необхідності та способів інтеграції з системами(сервісами) третіх сторін, тощо.]*

View File

@ -1,281 +0,0 @@
# Запити зацікавлених осіб
## Вступ
У даному розділі розкриваються ключові терміни та процеси, пов'язані з розробкою високоякісного програмного забезпечення. Ці матеріали надаються для зацікавлених користувачів, які прагнуть отримати глибше розуміння суті проекту та його основних завдань.
### Мета
Метою є формування стратегії подальшого розвитку проекту на основі аналізу запитів цільової аудиторії, функціональних потреб та досягнення оптимальної продуктивності для створення якісного програмного забезпечення.
### Контекст
Даний документ містить теоретичні відомості, визначення та загальний огляд функціональності, які допоможуть розробникам розуміти напрямок роботи над програмним продуктом, а клієнтам - зрозуміти очікування від нього.
### Основні визначення та скорочення
[Зацікавлені сторони (особи)](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/Modelviewcontroller#Components) (з англ. Model-view-controller) - це патерн проектування програмного забезпечення, який зазвичай використовується для розробки користувацьких інтерфейсів, що розділяє відповідну програмну логіку на три взаємопов'язані елементи. Це робиться для того, щоб відокремити внутрішнє представлення інформації від способів її представлення користувачеві та отримання від нього.
[SOLID](https://en.wikipedia.org/wiki/SOLID) - це мнемонічна абревіатура для п'яти принципів проектування, призначених для того, щоб зробити об'єктно-орієнтовані проекти більш зрозумілими, гнучкими та зручними в обслуговуванні.
- *Принцип єдиної відповідальності*: "Ніколи не повинно бути більше однієї причини для зміни класу”. Іншими словами, кожен клас повинен мати лише одну відповідальність.
- *Принцип відкритості-закритості*: "Сутності програмного забезпечення ... повинні бути відкритими для розширення, але закритими для модифікації.
- *Принцип заміщення Ліскова*: "Функції, які використовують вказівники або посилання на базові класи, повинні мати можливість використовувати об'єкти похідних класів, не знаючи про це.
- *Принцип розділення інтерфейсів*: "Клієнти не повинні бути змушені залежати від інтерфейсів, якими вони не користуються".
- *Принцип інверсії залежності*: "Покладайтеся на абстракції, а не на конкретику".
[DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)(з англ. dont 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/Modelviewcontroller#Components](https://en.wikipedia.org/wiki/Modelviewcontroller#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 | SURVEY.LINK.CREATE |
|:-----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
| Назва | Додати посилання на опитування |
| Учасники | Користувач, система |
| Передумови | Користувач авторизований у системі |
| Результат | Нове посилання на опитування |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування |
| Основний сценарій | 1. Користувач натискає кнопку створення посилання на опитування<br>2. Система виводить налаштування для нового посилання (можливі 001.005, 001.006, 001.008)<br>3. Користувач вводить налаштування для нового посилання<br>4. Користувач натискає на кнопку створення посилання<br>5. Система створює нове посилання |
| ID | SURVEY.LINK.DELETE |
|:-----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
| Назва | Видалити посилання на опитування |
| Учасники | Користувач, система |
| Передумови | Користувач авторизований у системі |
| Результат | Видалення посилання на опитування |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування<br>001.009 Запитане посилання на існує |
| Основний сценарій | 1. Користувач натискає кнопку видалення посилання<br>2. Система виводить кнопку підтвердження видалення посилання<br>3. Користувач натискає на кнопку підтвердження видалення посилання<br>4. Система видаляє посилання (можливі 001.005, 001.006, 001.008, 001.009) |
| ID | SURVEY.LINK.MODIFY |
|:-----------------:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
| Назва | Змінити властивості посилання на опитування |
| Учасники | Користувач, система |
| Передумови | Користувач авторизований у системі |
| Результат | Зміна властивостей посилання на опитування |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування<br>001.009 Запитане посилання на існує |
| Основний сценарій | 1. Користувач натискає кнопку редагування властивостей посилання<br>2. Система виводить налаштування для обраного посилання (можливі 001.005, 001.006, 001.008, 001.009)<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 - це система для проведення будь-яких опитувань.
Вона дозволяє користувачам створювати опитування, збирати відповіді на них та переглядати докладну й узагальнену статистику.
У користувачів є можливість створювати не лише анонімні, але й поіменні опитування, тому платформа також задовольнить потреби в проведенні голосувань для прийняття спільних рішень у командах.
## Функціональність
Наша система спрямована, в першу чергу, на взаємодію з користувачами.
***Користувач** - це особа, що взаємодіє із системою.*
стема розділяє користувачів на дві категорії:
- гість
- авторизований користувач
***Гість** - це користувач, що не пройшов ідентифікацію в системі. Такого користувача не можна зіставити з жодним обліковим записом.*
Гість може:
- створити обліковий запис
- пройти ідентифікацію в системі
- пройти анонімне опитування
***Зареєстрований користувач** - це користувач, котрий успішно пройшов ідентифікацію в системі. Такого користувача можна однозначно зіставити з обліковим записом, що наявний у системі.*
Зареєстрований користувач може:
- редагувати властивості свого облікового запису
- видалити свій обліковий запис
- скинути дані про ідентицікацію в системі
- створити опитування
- відредагувати своє опитування
- видалити своє опитування
- створити посилання на своє опитування
- редагувати властивості посилання на своє опитування
- видалити посилання на своє опитування
- призупинити своє опитування
- продовжити своє опитування
- переглянути властивості свого опитування
- переглянути результати свого опитування
- пройти анонімне опитування
- пройти поіменне опитування
*[Респондент](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)
- Автоматичне резервне копіювання
- Автоматичне відновлення з резервних копій
## Продуктивність
- Низьке використання мережі базовим протоколом
- Незалежність від сторонніх веб-хостингів
## Експлуатаційна придатність
- Наявність докладної документації для користувачів, адміністраторів та розробників
- Доступність онлайн-підтримки

View File

@ -1,221 +0,0 @@
# Розроблення вимог до системи
## Вступ
У даному розділі проводиться аналіз предметної області, пов'язаної з системою організації та управління експертними опитуваннями. Представлені такі категорії:
- [Основні визначення](#основні-визначення), котрі можна зустріти в сфері експертних опитувань
- [Підходи та способи вирішення завдання](#підходи-та-способи-вирішення-завдання) опитування експертів
- [Порівняльна характеристика наявних засобів вирішення завдання](#порівняльна-характеристика-існуючих-засобів-вирішення-завдання) опитування експертів
- [Висновки](#висновки) щодо доцільності розробки нової системи
- [Література](#література), де наведені посилання на джерела інформації
## Основні визначення
### Технічні визначення
**База даних** [](https://uk.wikipedia.org/wiki/Базааних)
База даних (англ. database) сукупність даних, організованих відповідно до концепції, яка описує характеристику цих даних і взаємозв'язки між їх елементами; ця сукупність підтримує щонайменше одну з областей застосування (за стандартом ISO/IEC 2382:2015). В загальному випадку база даних містить схеми, таблиці, подання, збережені процедури та інші об'єкти. Дані у базі організовують відповідно до моделі організації даних. Таким чином, сучасна база даних, крім самих даних, містить їх опис та може містити засоби для їх обробки.
**SQL** [](https://uk.wikipedia.org/wiki/SQL)
SQL (англ. Structured query language — мова структурованих запитів) — декларативна мова програмування для взаємодії користувача з базами даних, що застосовується для формування запитів, оновлення і керування реляційними БД, створення схеми бази даних та її модифікації, системи контролю за доступом до бази даних. Сама по собі SQL не є ані системою керування базами даних, ані окремим програмним продуктом. На відміну від дійсних мов програмування (C або Pascal), SQL може формувати інтерактивні запити або, бувши вбудованою в прикладні програми, виступати як інструкції для керування даними. Окрім цього, стандарт SQL містить функції для визначення зміни, перевірки та захисту даних.
### Загальні визначення
**Опитування** [](https://uk.wikipedia.org/wiki/Опитування)
Опи́тування — це метод збору соціологічної інформації про досліджуваний об'єкт під час безпосереднього (усне опитування, інтерв'ю) або опосередкованого (письмове опитування, анкетування) спілкування того хто опитує з респондентом. Опитування бувають соціологічні, політологічні, маркетингові, психологічні — залежно від предмету дослідження. Залежно від кількості опитуваних (вибірки, вибіркової сукупності) вони також можуть бути масовими, вибірковими, індивідуальними, експертними. Також використовується для вимірювання «громадської думки» з різних питань.
**Експерт** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
Експертом називають людину, що є фахівцем (спеціалістом) у певній предметній області (ПО) і може пояснити свої дії та міркування. Предметною областю називають будь-яку галузь діяльності людини, наприклад, “Технічні засоби автоматизації”, “Охорона довкілля”, “Системи штучного інтелекту” тощо.
**Експертне опитування**
Експертне опитування або опитування фахівців — це особливий метод маркетингового (і/або соціологічного) дослідження. В рамках такого опитування досліджувана тема обговорюється з експертами, компетентними в даній сфері.
### Методи експертного опитування
#### Активні методи
Активні методи передбачають спілкування між організаторами та експертами. Можливі два напрямки активної роботи з експертами: індивідуальна робота з експертом (анонімна чи відкрита) та робота з групою в цілому.
***
#### До індивідуальних активних методів належать анкетування, інтерв’ю, діалог з експертом, ігри з експертом.
**Інтерв’ю** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
Інтерв’ю це форма спілкування між дослідником та експертом, при якій дослідник ставить заздалегідь підготовлену чергу запитань. Можна замінити ці запитання на інші у відповідності до ситуації.
**Діалог** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
Діалог це метод отримання знань у формі бесіди між дослідником та експертом, коли немає жорстко регламентованого плану проведеня і визначеного заздалегідь переліку запитань.
**Ігри з експертом** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
Ігри з експертом (експертні ігри) це експерименти, у яких фахівцю пропонують важливі ситуації з предметної області. Фахівець повинен запропонувати рішення по виходу з цих ситуацій на основі свого життєвого досвіду, спеціальних знань та уявлень.
***
#### До методів активної роботи з групою в цілому належать методи круглого столу, мозкового штурму та рольові ігри.
**Круглий стіл** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
“Круглий стіл” передбачає обговорення певної проблеми, у якому приймають участь експерти з однаковими правами. Задача дискусії вивчити проблему всебічно, тому слід запрошувати експертів, які належать до різних наукових напрямків, мають різний вік, стать і т.ін. Цей метод не передбачає терміновості прийняття рішення.
**Мозковий штурм** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
“Мозковий штурм (атака)” один із найбільш поширених методів активізації думок. Його застосовують у тих випадках, коли потрібно знайти вирішення певної проблеми за дуже короткий час. Під час такого обговоренння кожний експерт повинен запропонувати свій шлях розвязання задачі або розвинути думку іншого учасника.
**Рольові ігри** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
Рольові ігри (експертні ігри) це експерименти, у яких колективу спеціалістів пропонують складні ситуації з предметної області. Спеціалісти у процесі відкритого обговорення приймають рішення про шляхи виходу з цих ситуацій.
***
#### Пасивні методи
До пасивних методів належать спостереження за діяльністю експертів, запис їхніх міркувань у процесі роботи (так звані *“думки вголос”*), лекції, які вони можуть прочитати. [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
## Підходи та способи вирішення завдання
[Методисти виділяють методи **заочного** та **очного** експертного опитування.](http://elbib.in.ua/vidi-ekspertnogo-opituvannya-metodologiya-ta-metodi-sotsiologichnih-doslidjen.html)
До методів **заочного** опитування відносять:
- письмове опитування («збір думок»);
- анкетування;
- дельфійська техніка;
До **очних** методів належать:
- «мозкова атака».
Письмове опитування (або «збір думок») вважається найпростішим методом заочного опитування експертів. Він полягає в тому, що експертам надають спеціально підготовлені опитувальні листи, в яких вони повинні викласти свою думку по суті поставлених питань. При складанні експертного опитувальника від 50 до 90% використовуються відкриті питання. Збір думок подібний вільному інтерв'ю і відрізняється від нього лише письмовою формою опитування.
Плюси: дає можливість залучити велику кількість експертів.
Мінуси: заочний опитування пов'язане з організаційними труднощами, зумовленими низьким рівнем повернення анкет.
Анкетування даний тип опитування може бути сформований як у відкритій, так і в закритій формі. Сильно відрізняється від письмового збору думок, оскільки спрямоване на з’ясування оцінок фахівцями тих чи інших аспектів готового рішення.
Плюси: можливість анонімного збору даних; значно спрощує можливість збору даних; стандартизація.
Мінуси: учасники можуть відмовитися від відповідей або дати неправильні відповіді через обмежену варіативність; негнучкість методу (негативна сторона стандартизованості).
Метод Дельфі опитування експертної групи в кілька турів з узгодженням думок експертів. Суть цього методу в тому, щоб за допомогою серії послідовних дій - опитувань, інтерв'ю, мозкових штурмів - домогтися максимального консенсусу при визначенні правильного рішення. Метод передбачає опитування експертів в кілька турів (зазвичай 2-3), обробку результатів кожного туру, інформування їх про ці результати і знову повторення такої ж процедури. У першому турі відповіді даються без аргументації. Після обробки виділяються крайні і середні судження і повідомляються експертам. У другому турі опитувані знову звертаються до своїх оцінок. Так як вони мали досить часу на роздуми і дізналися про існування інших позицій з цього приводу, вони можуть переглянути свої погляди або, навпаки, посилити їх аргументацію. Після другого туру обробляються нові оцінки - крайні і середні думки узагальнюються, підсумки знову доповідають експертам. Так повторюється 3-4 рази. Практика показує, що після третього або четвертого туру думки експертів не змінюються. В ході подібної процедури виробляється узгоджена оцінка, причому дослідник не повинен нехтувати громадською думкою тих, хто після неодноразових опитувань залишився на своїй позиції.
Плюси: подібна техніка дозволяє зменшити вплив недостатньо компетентних експертів на групову оцінку, як це спостерігається при простому анкетуванні. Воно досягається за рахунок отриманої цінної інформації від більш компетентних експертів.
Мінуси: часові витрати; можливість втрати мотивації учасників.
Метод «мозкового штурму (атаки)»
Плюси: стимулювання творчості; розширення горизонтів.
Мінуси: відсутність структури; можливість домінування деяких учасників.
## Порівняльна характеристика існуючих засобів вирішення завдання
Розглядатимемо такі найпопулярніші інструменти для проведення анкетувань:
[Google Forms](https://uk.wikipedia.org/wiki/Google_Форми)
Google Forms — програмне забезпечення для адміністрування опитування,
що входить до складу безкоштовного веб-пакету Google Docs Editors,
пропонованого Google. Послуга також включає Google Docs, Google Sheets,
Google Slides, Google Drawings, Google Sites і Google Keep. Google Форми
доступні лише як веб-додаток. Додаток дозволяє користувачам створювати та
редагувати опитування в Інтернеті, співпрацюючи з іншими користувачами
в режимі реального часу. Зібрану інформацію можна автоматично внести в
електронну таблицю.
[SurveyMonkey](https://en.wikipedia.org/wiki/SurveyMonkey)
SurveyMonkey - це служба як для створення простих і невеликих опитувань,
так і для масової розсилки анкет, виявлення тенденцій і складання більших
досліджень. Сервіс дозволяє швидко створювати опитування, налаштовувати
їх зовнішній вигляд, змінювати місцями питання, проводити А/Б-тестування,
вставляти опитування на сайти та соціальні мережі, складати дуже детальні
та наочні звіти, захищати дані та інтегрувати засоби з MailChimp,
GroSocial та іншими сервісами.
[Responsly](https://www.responsly.com)
Responsly - платформа, яка дозволяє створювати онлайн-опитування та
анкети всього за кілька секунд і надсилати їх тисячам одержувачів одним
натисканням кнопки. Також є вбудована технологія штучного інтелекту, яка
надає широкий вибір типів питань для опитувань, вибраних спеціально для
певної аудиторії.
[Jotform](https://en.wikipedia.org/wiki/Jotform)
Jotform — це потужна онлайн програма, яка дозволяє будь-кому швидко
створювати власні онлайн форми. Інтуїтивно зрозумілий інтерфейс
конструктора форм робить створення форм неймовірно простим, без написання
жодного рядка коду. За допомогою Jotform користувачі можуть створювати та
публікувати форми, інтегрувати їх у свій веб-сайт та отримувати відповіді
електронною поштою. Jotform дозволяє створювати онлайн форми, отримувати
відповіді безпосередньо в електронних листах та створювати PDF форми для
заповнення.
[QuestionPro](https://questionpro.com/)
QuestionPro — це програмне забезпечення для створення та розповсюдження
опитувань. Воно складається з інтуїтивно зрозумілого інтерфейсу для
створення запитань для опитувань, інструментів для їх розповсюдження
електронною поштою або на веб-сайті та інструментів для аналізу та
перегляду результатів.
[Fillout](https://www.fillout.com/)
Fillout — це платформа для створення форм, опитувань і тестів. Fillout
інтегрується з інструментами, які вже використовує користувач, щоб
допомогти автоматизувати робочі процеси та масштабувати операції. Час
безперебійної роботи платформи та безпека додатків є двома пріоритетами
Fillout. Для компаній із суворими вимогами щодо резидентності даних та
іншими вимогами Fillout пропонує корпоративне рішення для безпечного
отримання даних у будь-якому масштабі.
Порівняймо наведені вище сервіси із нашим проєктом.
Умовні позначення в таблиці порівняння:
- 🔴 засіб не відповідає критерію
- 🟡 засіб частково відповідає критерію або вимагає коштів для повноцінного функціоналу
- 🟢 засіб цілком відповідає критерію в безкоштовній версії
- ⚪ засіб частково або повністю не надав інформацію щодо критерію
| Критерій |Xpertise (наш проєкт)|Google Forms|SurveyMonkey|Responsly|Jotform|QuestionPro|Fillout|
|:-----------:|:-------------------:|:----------:|:----------:|:-------:|:-----:|:---------:|:-----:|
|**Functionality**| | | | | | | |
|Мобільна версія| 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
|Типи відповідей| 4 шт. |⚪ |4 шт. (до 13 шт.)|⚪ |⚪|30 шт. (до 52 шт.)|40+ шт.|
|К-ть запитань в одній формі|50|безліч|10 (до безмежності)| безліч |100 (до 1 тис.)|безліч|безліч|
|К-ть форм | 50 (до 10 тис.) |безліч | безліч |3| 5 (до 100)|10 (до безмежності)| безліч |
|Макс. к-ть опитаних|10 тис. (до 10 млн.)|безліч | 25/міс. (до 40 тис./рік) |10/міс. (до 10 тис./міс.)|100/міс. (до 10 тис./міс.)|200/форму (до 100 тис./рік)|1 тис./міс. (до 10 тис./міс.)|
|Випадкова послідовність запитань|🟢| 🔴 | €99/міс. | $79/міс. | ⚪ | 🟡 | ⚪ |
|Умовні переходи| 🟢 | 🔴 | €39/міс. | 🟡 | ⚪ | 🟡 | 🟢 |
|Квота відповідей| 🟢 | ⚪ | €432/рік | $79/міс. | ⚪ | ⚪ | ⚪ |
|Таймер закінчення опитування| 🟢 | 🟢 | ⚪ | ⚪ | ⚪ | $1188/рік | $15/місяць |
|Перегляд недозаповнених форм| 🟢 | 🔴 | ⚪ | ⚪ | ⚪ | ⚪ | $75/міс. |
|Завантаження файлів| 🟢 | 🟢 | €432/рік | ⚪ | 🟢 | ⚪ | 🟢 |
|Доступне файлове сховище| 2 Гб (до 1 Тб) | 15 Гб (до 5 Тб) | без меж | - | 100 Мб (до 100 Гб) | - | 20 Мб/файл (до 1 Гб/файл |
|**Usability**|||||||||
|Простий будівельник форм|🟢|🟢|🟢|🟢|🟢|🟢|🟢|
|AI-помічник| 🔴 | 🔴 | 🔴 | $49/міс. | 🔴 | 🔴 | 🟢 |
|Заміна брендингу на власний|🟢 | $12/міс. | €1188/рік. | $159/міс. | 🟡 | $1188/рік | $40/міс. |
|Налаштування кольорової палітри|🟢 | 🟢 | €432/рік | $159/міс. | ⚪ | $15/міс. | $40/міс. |
|Перегляд аналітики в реальному часі| 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟡 |
|**Reliability**||||||||
|Автоматичні резервні копії| 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
|Шифрування з'єднань| 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
|**Performance**||||||||
|Оптимальне використання мережі| 🟢 | 🔴 | 🟡 | 🟢 | 🔴 | 🟡 | 🟡 |
|**Supportability**||||||||
|Інструкція з використання| 🟢 | ⚪ | ⚪ | 🟢 | 🟢 | 🟢 | 🟢 |
|Онлайн-підтримка| 🟢 | $72/рік | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
## Висновки
Завдяки проведеному дослідженню ринку бачимо, що більшість сучасних платформ не надають безкоштовної можливості налаштовувати умовні переходи між сторінками опитування, а також значно обмежують максимальну кількість зібраних відповідей. Комбінація цих функцій у безкоштовній версії нашого сервісу може стати вагомою перевагою для певних груп користувачів.
Також додаткові функції (такі як квоти відповідей або перегляд недозаповнених форм), що наявні в безкоштовній версії продукту, можуть привабити додаткових користувачів, що бажають отримати такі інструменти, проте не хочуть віддавати чималі гроші за коштовні сервіси. З огляду на це вважаємо, що розробка такого проєкту має сенс.
## Література
1. [https://uk.wikipedia.org/wiki/Базааних](https://uk.wikipedia.org/wiki/Базааних)
2. [https://uk.wikipedia.org/wiki/SQL](https://uk.wikipedia.org/wiki/SQL)
3. [https://uk.wikipedia.org/wiki/Опитування](https://uk.wikipedia.org/wiki/Опитування)
4. [https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
5. [http://elbib.in.ua/vidi-ekspertnogo-opituvannya-metodologiya-ta-metodi-sotsiologichnih-doslidjen.html](http://elbib.in.ua/vidi-ekspertnogo-opituvannya-metodologiya-ta-metodi-sotsiologichnih-doslidjen.html)
6. [https://uk.wikipedia.org/wiki/Google_Форми](https://uk.wikipedia.org/wiki/Google_Форми)
7. [https://en.wikipedia.org/wiki/SurveyMonkey](https://en.wikipedia.org/wiki/SurveyMonkey)
8. [https://www.responsly.com](https://www.responsly.com)
9. [https://en.wikipedia.org/wiki/Jotform](https://en.wikipedia.org/wiki/Jotform)
10. [https://questionpro.com/](https://questionpro.com/)
11. [https://www.fillout.com/](https://www.fillout.com/)

View File

@ -1,113 +1,3 @@
# Реалізація інформаційного та програмного забезпечення # Реалізація інформаційного та програмного забезпечення
## SQL-скрипт для створення та початкового наповнення бази даних
```sql
-- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`Account`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Account` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` CHAR(255) NOT NULL,
`password` CHAR(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
UNIQUE INDEX `username_UNIQUE` (`username` ASC) VISIBLE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Survey`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Survey` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`isPaused` TINYINT UNSIGNED NOT NULL,
`isNamed` TINYINT UNSIGNED NOT NULL,
`name` CHAR(255) NULL,
`duration` CHAR(255) NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
CONSTRAINT `fk_Survey_Account1`
FOREIGN KEY (`id`)
REFERENCES `mydb`.`Account` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Question`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Question` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`Text` CHAR(255) NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
CONSTRAINT `fk_Question_Survey1`
FOREIGN KEY (`id`)
REFERENCES `mydb`.`Survey` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Response`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Response` (
`id` INT UNSIGNED NULL AUTO_INCREMENT,
`Value` VARCHAR(16384) NULL,
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
PRIMARY KEY (`id`),
CONSTRAINT `fk_Response_Question`
FOREIGN KEY (`id`)
REFERENCES `mydb`.`Question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Response_Account1`
FOREIGN KEY (`id`)
REFERENCES `mydb`.`Account` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Link`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Link` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`uses` INT NOT NULL,
`responces` INT NOT NULL,
`usageLimit` INT NULL,
`responceLimit` INT NULL,
`path` CHAR(32) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_Link_Survey1`
FOREIGN KEY (`id`)
REFERENCES `mydb`.`Survey` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
```

View File

@ -1,504 +0,0 @@
# Модель прецедентів
## Загальна схема
<center style="
border-radius: 4px;
border: 1px solid #cfd7e6;
box-shadow: 0 1px 3px 0 rgba(89,105,129,.05), 0 1px 1px 0 rgba(0,0,0,.025);
padding: 1em;
">
@startuml
:Гість: as Guest
:Зареєстрований користувач: as AuthorisedUser
(<b>ACCOUNT.CREATE</b>\nСтворити обліковий запис) as CreateAccount
(<b>ACCOUNT.DELETE</b>\nВидалити обліковий запис) as DeleteAccount
(<b>ACCOUNT.MODIFY</b>\nЗмінити властивості облікового запису) as ModifyAccount
(<b>SURVEY.LINK.CREATE</b>\nСтворити посилання на опитування) as CreateLink
(<b>SURVEY.LINK.DELETE</b>\nВидалити посилання на опитування) as DeleteLink
(<b>SURVEY.LINK.MODIFY</b>\nЗмінити властивості посилання на опитування) as ModifyLink
(<b>USER.CREATE_SURVEY</b>\nСтворити опитування) as CreateSurvey
(<b>USER.DELETE_SURVEY</b>\nВидалити опитування) as DeleteSurvey
(<b>USER.GET_SURVEY_RESULT</b>\nПереглянути відповіді на опитування) as GetSurveyResult
(<b>USER.LOGIN</b>\nПройти ідентифікацію в системі) as LogIn
(<b>USER.LOGOUT</b>\nСкинути дані про ідентифікацію в системі) as LogOut
(<b>USER.MODIFY_SURVEY</b>\nРедагувати опитування) as ModifySurvey
(<b>USER.STAT_SURVEY</b>\nПереглянути властивості опитування) as StatSurvey
(<b>USER.TAKE_ANON_SURVEY</b>\nПройти анонімне опитування) as TakeAnonSurvey
(<b>USER.TAKE_NAMED_SURVEY</b>\nПройти поіменне опитування) as TakeNamedSurvey
Guest -u-> CreateAccount
Guest --> LogIn
Guest -r-> TakeAnonSurvey
AuthorisedUser -r-> ModifyAccount
AuthorisedUser -u-> DeleteAccount
AuthorisedUser -r-> CreateLink
AuthorisedUser -l-> DeleteLink
AuthorisedUser -u-> ModifyLink
AuthorisedUser -u-> LogOut
AuthorisedUser --> CreateSurvey
AuthorisedUser -u-> DeleteSurvey
AuthorisedUser --> StatSurvey
AuthorisedUser --> ModifySurvey
AuthorisedUser --> GetSurveyResult
AuthorisedUser -l-> TakeAnonSurvey
AuthorisedUser -d-> TakeNamedSurvey
@enduml
</center>
## Схеми використання для окремих діячів
Схема використання для гостя:
@startuml
:Гість: as Guest
(<b>ACCOUNT.CREATE</b>\nСтворити обліковий запис) as CreateAccount
(<b>USER.LOGIN</b>\nПройти ідентифікацію в системі) as LogIn
(<b>USER.TAKE_ANON_SURVEY</b>\nПройти анонімне опитування) as TakeAnonSurvey
Guest -u-> CreateAccount
Guest --> LogIn
Guest -r-> TakeAnonSurvey
@enduml
Схема використання для зареєстрованого користувача:
@startuml
:Зареєстрований користувач: as AuthorisedUser
(<b>ACCOUNT.DELETE</b>\nВидалити обліковий запис) as DeleteAccount
(<b>ACCOUNT.MODIFY</b>\nЗмінити властивості облікового запису) as ModifyAccount
(<b>USER.CREATE_SURVEY</b>\nСтворити опитування) as CreateSurvey
(<b>USER.DELETE_SURVEY</b>\nВидалити опитування) as DeleteSurvey
(<b>USER.GET_SURVEY_RESULT</b>\nПереглянути відповіді на опитування) as GetSurveyResult
(<b>USER.LOGOUT</b>\nСкинути дані про ідентифікацію в системі) as LogOut
(<b>USER.MODIFY_SURVEY</b>\nРедагувати опитування) as ModifySurvey
(<b>USER.STAT_SURVEY</b>\nПереглянути властивості опитування) as StatSurvey
(<b>USER.TAKE_ANON_SURVEY</b>\nПройти анонімне опитування) as TakeAnonSurvey
(<b>USER.TAKE_NAMED_SURVEY</b>\nПройти поіменне опитування) as TakeNamedSurvey
(<b>SURVEY.LINK.CREATE</b>\nСтворити посилання на опитування) as CreateLink
(<b>SURVEY.LINK.DELETE</b>\nВидалити посилання на опитування) as DeleteLink
(<b>SURVEY.LINK.MODIFY</b>\nЗмінити властивості посилання на опитування) as ModifyLink
AuthorisedUser -r-> ModifyAccount
AuthorisedUser -u-> DeleteAccount
AuthorisedUser -r-> CreateLink
AuthorisedUser -l-> DeleteLink
AuthorisedUser -u-> ModifyLink
AuthorisedUser -u-> LogOut
AuthorisedUser -d-> CreateSurvey
AuthorisedUser -u-> DeleteSurvey
AuthorisedUser --> StatSurvey
AuthorisedUser -d-> ModifySurvey
AuthorisedUser --> GetSurveyResult
AuthorisedUser -l-> TakeAnonSurvey
AuthorisedUser -d-> TakeNamedSurvey
@enduml
## Сценарії використання
### Для гостя
| ID | ACCOUNT.CREATE |
|:-----------------:|:------------------------------------------------------------------------------------------------------:|
| Назва | Створити обліковий запис |
| Учасники | Користувач, система |
| Передумови | Відсутні |
| Результат | Обліковий запис користувача |
| Виключні ситуації | 001.001 Користувач ввів заборонені символи в поле псевдоніму<br>001.002 Ідентичний псевдонім вже існує |
@startuml
|Користувач|
start
: Вводить бажаний псевдонім у поле вводу псевдоніму;
: Вводить пароль у поле вводу паролю;
: Натискає на кнопку створення облікового запису;
|Система|
: Створює обліковий запис користувача;
note right #lightpink
<b>Можливі 001.001, 001.002</b>
end note
|Користувач|
stop
@enduml
| ID | USER.LOGIN |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
| Назва | Пройти ідентифікацію в системі |
| Учасники | Користувач, система |
| Передумови | Користувач має обліковий запис |
| Результат | Користувач ідентифікований в системі |
| Виключні ситуації | 001.001 Користувач ввів заборонені символи в поле псевдоніму<br>001.003 Користувач ввів псевдонім, якого не існує в системі<br>001.004 Користувач ввів неправильний пароль до облікового запису |
@startuml
|Користувач|
start
: Вводить псевдонім у поле вводу псевдоніму;
: Вводить пароль у поле вводу паролю;
: Натискає кнопку ідентифікації;
|Система|
: Ідентифікує користувача;
note right #lightpink
<b>Можливі 001.001, 001.003, 001.004</b>
end note
|Користувач|
stop
@enduml
| ID | USER.TAKE_ANON_SURVEY |
|:-----------------:|:------------------------------------:|
| Назва | Пройти анонімне опитування |
| Учасники | Користувач, система |
| Передумови | Відсутні |
| Результат | Запис відповідей на опитування |
| Виключні ситуації | 001.006 Запитане опитування не існує |
@startuml
|Користувач|
start
: Переходить на сторінку проходження опитування;
|Система|
: Виводить перелік запитань опитування;
note right #lightpink
<b>Можлива 001.006</b>
end note
|Користувач|
: Вводить відповіді на запитання;
: Натискає кнопку надсилання відповідей;
|Система|
: Записує відповіді на опитування;
note right #lightpink
<b>Можлива 001.006</b>
end note
: Виводить прощальне повідомлення;
|Користувач|
stop
@enduml
### Для зареєстрованого користувача
| ID | ACCOUNT.DELETE |
|:-----------------:|:-----------------------------------------:|
| Назва | Видалити обліковий запис |
| Учасники | Користувач, система |
| Передумови | Користувач ідентифікований в системі |
| Результат | Відсутність облікового запису користувача |
| Виключні ситуації | 001.005 Користувач не ідентифікований |
@startuml
|Користувач|
start
: Натискає на кнопку видалення облікового запису;
|Система|
: Виводить кнопку-запит на підтвердження видалення облікового запису;
|Користувач|
: Натискає на кнопку підтвердження видалення облікового запису;
|Система|
: Видаляє обліковий запис;
note right #lightpink
<b>Можлива 001.005</b>
end note
|Користувач|
stop
@enduml
| ID | ACCOUNT.MODIFY |
|:-----------------:|:-------------------------------------:|
| Назва | Змінити властивості облікового запису |
| Учасники | Користувач, система |
| Передумови | Користувач ідентифікований в системі |
| Результат | Зміна властивостей облікового запису |
| Виключні ситуації | 001.005 Користувач не ідентифікований |
@startuml
|Користувач|
start
: Натискає на кнопку редагування облікового запису;
|Система|
: Виводить інтерфейс для редагування облікового запису;
note right #lightpink
<b>Можлива 001.005</b>
end note
|Користувач|
: Вказує бажані зміни властивостей облікового запису;
: Натискає на кнопку внесення змін до властивостей облікового запису;
|Система|
: Змінює властивості облікового запису;
|Користувач|
stop
@enduml
| ID | SURVEY.LINK.CREATE |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------:|
| Назва | Додати посилання на опитування |
| Учасники | Користувач, система |
| Передумови | Користувач авторизований у системі |
| Результат | Нове посилання на опитування |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування |
@startuml
|Користувач|
start
: Натискає кнопку створення посилання на опитування;
|Система|
: Виводить налаштування для нового посилання;
note right #lightpink
<b>Можливі 001.005, 001.006, 001.008</b>
end note
|Користувач|
: Вводить налаштування для нового посилання;
: Натискає на кнопку створення посилання;
|Система|
: Створює нове посилання;
|Користувач|
stop
@enduml
| ID | SURVEY.LINK.DELETE |
|:-----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
| Назва | Видалити посилання на опитування |
| Учасники | Користувач, система |
| Передумови | Користувач авторизований у системі |
| Результат | Видалення посилання на опитування |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування<br>001.009 Запитане посилання на існує |
@startuml
|Користувач|
start
: Натискає кнопку видалення посилання;
|Система|
: Виводить кнопку підтвердження видалення посилання;
|Користувач|
: Натискає на кнопку підтвердження видалення посилання;
|Система|
: Видаляє посилання;
note right #lightpink
<b>Можливі 001.005, 001.006, 001.008, 001.009</b>
end note
|Користувач|
stop
@enduml
| ID | SURVEY.LINK.MODIFY |
|:-----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
| Назва | Змінити властивості посилання на опитування |
| Учасники | Користувач, система |
| Передумови | Користувач авторизований у системі |
| Результат | Зміна властивостей посилання на опитування |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування<br>001.009 Запитане посилання на існує |
@startuml
|Користувач|
start
: Натискає кнопку редагування властивостей посилання;
|Система|
: Виводить налаштування для обраного посилання;
note right #lightpink
<b>Можливі 001.005, 001.006, 001.008, 001.009</b>
end note
|Користувач|
: Вводить юажані зміни властивостей посилання;
: Натискає на кнопку збереження властиностей посилання;
|Система|
: Змінює властивості посилання;
|Користувач|
stop
@enduml
| ID | USER.CREATE_SURVEY |
|:-----------------:|:--------------------------------------------------------------------------------------------------------:|
| Назва | Створити опитування |
| Учасники | Користувач, система |
| Передумови | Користувач ідентифікований в системі |
| Результат | Створене опитування |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.007 Користувач ввів неприпустимі символи в назві опитування |
@startuml
|Користувач|
start
: Переходить на сторінку створення опитування;
note right #lightpink
<b>Можлива 001.005</b>
end note
|Система|
: Виводить інтерфейс створення опитування;
|Користувач|
: Задає інформацію про запитання та тип опитування;
: Натискає кнопку збереження опитування;
|Система|
: Створює опитування;
note right #lightpink
<b>Можлива 001.007</b>
end note
: Виводить посилання на проходження опитування;
|Користувач|
stop
@enduml
| ID | USER.DELETE_SURVEY |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------:|
| Назва | Видалити опитування |
| Учасники | Користувач, система |
| Передумови | Користувач ідентифікований в системі, користувач є власником опитування |
| Результат | Відсутність опитування |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування |
@startuml
|Користувач|
start
: Натискає на кнопку видалення опитування;
|Система|
: Виводить запит на підтвердження видалення опитування;
|Користувач|
: Натискає на кнопку підтвердження видалення опитування;
|Система|
: Видаляє опитування;
note right #lightpink
<b>Можливі 001.005, 001.006, 001.008</b>
end note
|Користувач|
stop
@enduml
| ID | USER.GET_SURVEY_RESULT |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------:|
| Назва | Переглянути відповіді на опитування |
| Учасники | Користувач, система |
| Передумови | Користувач ідентифікований в системі, користувач є власником опитування |
| Результат | Інформація про відповіді на опитування |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування |
@startuml
|Користувач|
start
: Натискає на кнопку перегляду відповідей на опитування;
|Система|
: Виводить інформацію про відповіді на опитування;
note right #lightpink
<b>Можливі 001.005, 001.006, 001.008</b>
end note
|Користувач|
stop
@enduml
| ID | USER.LOGOUT |
|:-----------------:|:----------------------------------------:|
| Назва | Скинути дані про ідентифікацію в системі |
| Учасники | Користувач, система |
| Передумови | Користувач ідентифікований в системі |
| Результат | Користувач не ідентифікований в системі |
| Виключні ситуації | 001.005 Користувач не ідентифікований |
@startuml
|Користувач|
start
: Натискає на кнопку виходу з облікового запису;
|Система|
: Скидає інформацію про ідентифікацію користувача;
note right #lightpink
<b>Можлива 001.005</b>
end note
|Користувач|
stop
@enduml
| ID | USER.MODIFY_SURVEY |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------:|
| Назва | Редагувати опитування |
| Учасники | Користувач, система |
| Передумови | Користувач ідентифікований в системі, користувач є власником опитування |
| Результат | Змінене опитування |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування |
@startuml
|Користувач|
start
: Переходить на сторінку редагування опитування;
|Система|
: Виводить інтерфейс редагування опитування;
note right #lightpink
<b>Можливі 001.005, 001.006, 001.008</b>
end note
|Користувач|
: Задає інформацію про зміни в опитуванні;
: Натискає кнопку збереження змін в опитуванні;
|Система|
: Змінює опитування;
|Користувач|
stop
@enduml
| ID | USER.STAT_SURVEY |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------:|
| Назва | Переглянути властивості опитування |
| Учасники | Користувач, система |
| Передумови | Користувач ідентифікований в системі, користувач є власником опитування |
| Результат | Інформація про властивості опитування |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування |
@startuml
|Користувач|
start
: Натискає на кнопку перегляду інформації про опитування;
|Система|
: Виводить інформацію про опитування;
note right #lightpink
<b>Можливі 001.005, 001.006, 001.008</b>
end note
|Користувач|
stop
@enduml
| ID | USER.TAKE_ANON_SURVEY |
|:-----------------:|:------------------------------------:|
| Назва | Пройти анонімне опитування |
| Учасники | Користувач, система |
| Передумови | Відсутні |
| Результат | Запис відповідей на опитування |
| Виключні ситуації | 001.006 Запитане опитування не існує |
@startuml
|Користувач|
start
: Переходить на сторінку проходження опитування;
|Система|
: Виводить перелік запитань опитування;
note right #lightpink
<b>Можлива 001.006</b>
end note
|Користувач|
: Вводить відповіді на запитання;
: Натискає кнопку надсилання відповідей;
|Система|
: Записує відповіді на опитування;
note right #lightpink
<b>Можлива 001.006</b>
end note
: Виводить прощальне повідомлення;
|Користувач|
stop
@enduml
| ID | USER.TAKE_NAMED_SURVEY |
|:-----------------:|:-----------------------------------------------------------------------------:|
| Назва | Пройти поіменне опитування |
| Учасники | Користувач, система |
| Передумови | Користувач ідентифікований в системі |
| Результат | Запис відповідей на опитування та відомості про користувача |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує |
@startuml
|Користувач|
start
: Переходить на сторінку проходження опитування;
|Система|
: Виводить перелік запитань опитування;
note right #lightpink
<b>Можливі 001.005, 001.006</b>
end note
|Користувач|
: Вводить відповіді на запитання;
: Натискає кнопку надсилання відповідей;
|Система|
: Записує відповіді на опитування та відомості про користувача;
note right #lightpink
<b>Можлива 001.006</b>
end note
: Виводить прощальне повідомлення;
|Користувач|
stop
@enduml

View File

@ -1,3 +1,2 @@
# JS-скрипти # програмні коди
В цьому розділі розміщені програмні коди.
В цьому розділі розміщені програмні коди javascript.

View File

@ -1,3 +0,0 @@
# SQL-скрипти
В цьому розділі розміщені сирцеві коди для створення бази даних.

View File

@ -1,107 +0,0 @@
-- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`Account`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Account` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` CHAR(255) NOT NULL,
`password` CHAR(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
UNIQUE INDEX `username_UNIQUE` (`username` ASC) VISIBLE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Survey`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Survey` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`isPaused` TINYINT UNSIGNED NOT NULL,
`isNamed` TINYINT UNSIGNED NOT NULL,
`name` CHAR(255) NULL,
`duration` CHAR(255) NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
CONSTRAINT `fk_Survey_Account1`
FOREIGN KEY (`id`)
REFERENCES `mydb`.`Account` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Question`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Question` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`Text` CHAR(255) NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
CONSTRAINT `fk_Question_Survey1`
FOREIGN KEY (`id`)
REFERENCES `mydb`.`Survey` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Response`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Response` (
`id` INT UNSIGNED NULL AUTO_INCREMENT,
`Value` VARCHAR(16384) NULL,
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
PRIMARY KEY (`id`),
CONSTRAINT `fk_Response_Question`
FOREIGN KEY (`id`)
REFERENCES `mydb`.`Question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Response_Account1`
FOREIGN KEY (`id`)
REFERENCES `mydb`.`Account` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Link`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Link` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`uses` INT NOT NULL,
`responces` INT NOT NULL,
`usageLimit` INT NULL,
`responceLimit` INT NULL,
`path` CHAR(32) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_Link_Survey1`
FOREIGN KEY (`id`)
REFERENCES `mydb`.`Survey` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

View File

@ -1,305 +0,0 @@
#!/bin/python3
import sys
import os
# magic values
NO = 0
AUTO = 1
YES = 2
def convert_generic_v1(data):
split_raw_lines = [i.strip().split("|") for i in data.split("\n") if i]
return generate_table(split_raw_lines)
def convert_usecase_v1(filename, data):
split_raw_lines_from_file = [i.split(" | ") for i in data.split("\n") if i]
if '/' in filename:
use_case_name = filename.rsplit("/", 1)[1].upper()
elif '\\' in filename:
use_case_name = filename.rsplit("\\", 1)[1].upper()
else:
use_case_name = filename.upper()
split_raw_lines = [["ID", use_case_name]] + split_raw_lines_from_file
merged_lines = []
for i in split_raw_lines:
if i[0].replace(" ", "") == "":
merged_lines[-1][1] += "<br>" + i[1]
else:
merged_lines.append(i)
return generate_table(merged_lines)
def convert_activity_v1(filename, data):
split_raw_lines_from_file = [i.split(" | ") for i in data.split("\n") if i]
if '/' in filename:
use_case_name = filename.rsplit("/", 1)[1].upper()
elif '\\' in filename:
use_case_name = filename.rsplit("\\", 1)[1].upper()
else:
use_case_name = filename.upper()
split_raw_lines = [["ID", use_case_name]] + split_raw_lines_from_file
merged_lines = []
for i in split_raw_lines:
if i[0].replace(" ", "") == "":
merged_lines[-1][1] += "<br>" + i[1]
else:
merged_lines.append(i)
return generate_table_with_activity_diagram(merged_lines)
def generate_table(raw_table_data):
table_lines = raw_table_data
transposed_table = list(zip(*table_lines))
field_sizes = [max([max([len(k)+2 for k in j.split("\n")]) for j in i]) for i in transposed_table]
formatted_table_lines = []
l = "|"
for i, field in enumerate(table_lines[0]):
l += field.center(field_sizes[i])
l += "|"
formatted_table_lines.append(l)
formatted_table_lines.append(f"|{'|'.join([':'+'-'*(i-2)+':' for i in field_sizes])}|")
for line in table_lines[1:]:
l = "|"
for i, field in enumerate(line):
l += field.center(field_sizes[i])
l += "|"
formatted_table_lines.append(l)
return "\n".join(formatted_table_lines)
def convert_line_to_activity_diagram(line):
split_line = line[1].split("<br>")
result = "@startuml\n %PLACEHOLDER%\nstop\n@enduml"
last_swimline_name = ""
initiator_name = ""
for i in split_line:
clear_line = i.lstrip("1234567890. ")
swimline_label, combined_action = clear_line.split(" ", 1)
action_and_exceptions = combined_action.split(" (")
if len(action_and_exceptions) > 1:
action = action_and_exceptions[0].strip().capitalize()
exceptions = action_and_exceptions[1].strip(") ").capitalize()
else:
action = action_and_exceptions[0].strip().capitalize()
exceptions = ""
# запам'ятовуємо назву користувача системи
# (він завжди починає взаємодію, а, отже,
# перша дія завжди належить йому)
if not initiator_name:
initiator_name = swimline_label
# змінюємо swinline, якщо керування перейшло до іншого актора
if last_swimline_name != swimline_label:
result = result.replace("%PLACEHOLDER%", f"|{swimline_label}|\n %PLACEHOLDER%")
# якщо це перша дія, то вказуємо start
if not last_swimline_name:
result = result.replace("%PLACEHOLDER%", f"start\n %PLACEHOLDER%")
# зберігаємо нове ім'я актора
last_swimline_name = swimline_label
# прописуємо поточну дію актора
result = result.replace("%PLACEHOLDER%", f": {action};\n %PLACEHOLDER%")
# якщо є виключні ситуації, додаємо інформацію про них
if exceptions:
result = result.replace("%PLACEHOLDER%", f"note right #lightpink\n <b>{exceptions}</b>\n end note\n %PLACEHOLDER%")
# впенюємося, що взаємодія закінчується на swinline користувача
if last_swimline_name != initiator_name:
result = result.replace("%PLACEHOLDER%", f"|{initiator_name}|\n %PLACEHOLDER%")
# видаляємо мітку %PLACEHOLDER%
result = result.replace("%PLACEHOLDER%\n", "")
return result
def generate_table_with_activity_diagram(raw_table_data):
table_lines = raw_table_data[:-1]
activity_line = raw_table_data[-1]
transposed_table = list(zip(*table_lines))
field_sizes = [max([max([len(k)+2 for k in j.split("\n")]) for j in i]) for i in transposed_table]
formatted_table_lines = []
l = "|"
for i, field in enumerate(table_lines[0]):
l += field.center(field_sizes[i])
l += "|"
formatted_table_lines.append(l)
formatted_table_lines.append(f"|{'|'.join([':'+'-'*(i-2)+':' for i in field_sizes])}|")
for line in table_lines[1:]:
l = "|"
for i, field in enumerate(line):
l += field.center(field_sizes[i])
l += "|"
formatted_table_lines.append(l)
activity_diagram = convert_line_to_activity_diagram(activity_line)
return "\n".join(formatted_table_lines) + "\n" + activity_diagram
if __name__=="__main__":
# parse args
files = []
write_to_file = AUTO
write_to_stdout = AUTO
usecase_formatting = AUTO
verbose = AUTO
process_table_files = AUTO
convert_to_activity_diagram = AUTO
file_output_path = None
# 1 pass (argument harvest)
for n, i in enumerate(sys.argv[1:]):
if i.startswith("-"):
# записувати таблицю в файл
if i in ["-f", "--file"]:
write_to_file = YES
elif i in ["-nf", "--no-file"]:
write_to_file = NO
# виводити таблицю у стандартний вивід
elif i in ["-o", "--stdout"]:
write_to_stdout = YES
elif i in ["-no", "--no-stdout"]:
write_to_stdout = NO
# форматувати таблицю як use-case
elif i in ["-u", "--usecase", "--use-case"]:
usecase_formatting = YES
elif i in ["-nu", "--no-usecase", "--no-use-case"]:
usecase_formatting = NO
# виводити на екран додаткову інформацію
elif i in ["-v", "--verbose"]:
verbose = YES
elif i in ["-nv", "--no-verbose"]:
verbose = NO
# дозволити обробку файлів .table
elif i in ["-t", "--process-table"]:
process_table_files = YES
elif i in ["-nt", "--no-process-table"]:
process_table_files = NO
# перетворює останню клітинку таблиці в діаграму активностей
if i in ["-a", "--convert-to-activity-diagram"]:
convert_to_activity_diagram = YES
elif i in ["-na", "--no-convert-to-activity-diagram"]:
convert_to_activity_diagram = NO
# задає папку, в яку необхідно зберігати конвертовані таблиці
elif i in ["-d", "--destination"]:
file_output_path = sys.argv[n+2]
sys.argv.remove(sys.argv[n+2])
# 2 pass (filename harvest)
for i in sys.argv[1:]:
if not i.startswith("-"):
if i.endswith(".table") and process_table_files <= AUTO:
print(f"[Warning]: Excluding {i} to prevent processing of an already processed file (pass --process-table to override this behaviour)")
else:
files.append(i)
if len(files) < 1:
print("You need to pass at least one file as CLI argument", file=sys.stderr)
print("Exiting...", file=sys.stderr)
exit(1)
if len(files) == 1:
name = files[0]
data = open(name, encoding = "utf-8").read()
if usecase_formatting == YES:
if verbose == YES:
print(f"Force-formatting {name} as a use-case\n")
formatted_table_data = convert_usecase_v1(name.rsplit(".", 1)[0], data)
elif (name.endswith(".usecase") or name.endswith(".uc")) and usecase_formatting >= AUTO:
if verbose == YES:
print(f"Auto-detected use-case in file {name}\n")
if convert_to_activity_diagram == YES:
if verbose == YES:
print(f"Converting file {name} to activity diagram\n")
formatted_table_data = convert_activity_v1(name.rsplit(".", 1)[0], data)
else:
formatted_table_data = convert_usecase_v1(name.rsplit(".", 1)[0], data)
else:
formatted_table_data = convert_generic_v1(data)
if write_to_stdout >= AUTO:
print(formatted_table_data)
if write_to_file > AUTO:
if file_output_path:
open(os.path.join(file_output_path, os.path.basename(name)) \
+ ".table", 'w', encoding = "utf-8") \
.write(formatted_table_data+"\n")
else:
open(name + ".table", 'w', encoding = "utf-8").write(formatted_table_data+"\n")
exit(0)
for no, name in enumerate(files):
print(f"Converting {no+1:02d}/{len(files)}: {name}")
data = open(name, encoding = "utf-8").read()
if usecase_formatting == YES:
if verbose >= AUTO:
print(f"Force-formatting {name} as a use-case")
formatted_table_data = convert_usecase_v1(name.rsplit(".", 1)[0], data)
elif (name.endswith(".usecase") or name.endswith(".uc")) and usecase_formatting >= AUTO:
if verbose >= AUTO:
print(f"Auto-detected use-case in file {name}")
if convert_to_activity_diagram == YES:
if verbose == YES:
print(f"Converting file {name} to activity diagram\n")
formatted_table_data = convert_activity_v1(name.rsplit(".", 1)[0], data)
else:
formatted_table_data = convert_usecase_v1(name.rsplit(".", 1)[0], data)
else:
formatted_table_data = convert_generic_v1(data)
if write_to_stdout > AUTO:
print(formatted_table_data)
if write_to_file >= AUTO:
if file_output_path:
open(os.path.join(file_output_path, os.path.basename(name)) \
+ ".table", 'w', encoding = "utf-8") \
.write(formatted_table_data+"\n")
else:
open(name + ".table", 'w', encoding = "utf-8").write(formatted_table_data+"\n")

View File

@ -1,5 +0,0 @@
#!/bin/sh
grep -E '\|\ [0-9]{3}\.[0-9]{3}' use-cases/*.uc \
| cut -d '|' -f 2 \
| sort | uniq -c

View File

@ -1,8 +0,0 @@
#!/usr/bin/python3
import updater
target_folder = "activities"
converter_args = "-a -nv"
updater.process(target_folder, converter_args)

View File

@ -1,13 +0,0 @@
#!/bin/sh
mkdir -p activities/
./convert.py use-cases/* -a -nv -d activities/
if [ -f activities.md ]; then
rm activities.md
fi
for i in activities/*; do
cat $i >> activities.md
echo "" >> activities.md
done

View File

@ -1,8 +0,0 @@
#!/usr/bin/python3
import updater
target_folder = "tables"
converter_args = "-nv"
updater.process(target_folder, converter_args)

View File

@ -1,13 +0,0 @@
#!/bin/sh
mkdir -p tables/
./convert.py use-cases/* -nv -d tables/
if [ -f tables.md ]; then
rm tables.md
fi
for i in tables/*; do
cat $i >> tables.md
echo "" >> tables.md
done

View File

@ -1,26 +0,0 @@
#!/usr/bin/python3
import shutil
import sys
import os
PYTHON_INTERPRETER = sys.executable
def process(target_folder, converter_args):
if os.path.exists(target_folder):
shutil.rmtree(target_folder)
os.mkdir(target_folder)
os.system(f"{PYTHON_INTERPRETER} convert.py use-cases/* {converter_args} -d {target_folder}/")
result_file = open(f"{target_folder}.md", "w")
try:
for i in os.listdir(target_folder):
with open(os.path.abspath(f"{target_folder}/{i}")) as f:
result_file.write(f.read())
result_file.write("\n")
except Exception as e:
print(f"File {target_folder}/{i} has raised exception {e}")
result_file.close()

View File

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

View File

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

View File

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

View File

@ -1,12 +0,0 @@
Назва | Додати посилання на опитування
Учасники | Користувач, система
Передумови | Користувач авторизований у системі
Результат | Нове посилання на опитування
Виключні ситуації | 001.005 Користувач не ідентифікований
| 001.006 Запитане опитування не існує
| 001.008 Користувач не є власником опитування
Основний сценарій | 1. Користувач натискає кнопку створення посилання на опитування
| 2. Система виводить налаштування для нового посилання (можливі 001.005, 001.006, 001.008)
| 3. Користувач вводить налаштування для нового посилання
| 4. Користувач натискає на кнопку створення посилання
| 5. Система створює нове посилання

View File

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

View File

@ -1,13 +0,0 @@
Назва | Змінити властивості посилання на опитування
Учасники | Користувач, система
Передумови | Користувач авторизований у системі
Результат | Зміна властивостей посилання на опитування
Виключні ситуації | 001.005 Користувач не ідентифікований
| 001.006 Запитане опитування не існує
| 001.008 Користувач не є власником опитування
| 001.009 Запитане посилання на існує
Основний сценарій | 1. Користувач натискає кнопку редагування властивостей посилання
| 2. Система виводить налаштування для обраного посилання (можливі 001.005, 001.006, 001.008, 001.009)
| 3. Користувач вводить юажані зміни властивостей посилання
| 4. Користувач натискає на кнопку збереження властиностей посилання
| 5. Система змінює властивості посилання

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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