Compare commits
33 Commits
86a25aefda
...
bodnar
| Author | SHA1 | Date | |
|---|---|---|---|
| f5abbf5274 | |||
| ef0ebef4c3 | |||
| c3bbc47f6b | |||
| 86f27e99fd | |||
| 0f68887e2f | |||
| 5da6368aae | |||
| f2751a8604 | |||
| a53cdb334d | |||
| 05f9376a90 | |||
| efe128fd59 | |||
| 9f296dcccd | |||
| e9d104f53a | |||
| b8f1e590e7 | |||
| 06b52b1efc | |||
| d67567d304 | |||
| 8b5812ac91 | |||
| acada2851d | |||
| 2332744679 | |||
| 605b898358 | |||
| dfa280a6b2 | |||
| e31c1eab09 | |||
| 35c3276a5c | |||
| 0b2e555a36 | |||
| bba0246d8d | |||
| 6dde82e6fb | |||
| 5d1eb939da | |||
| b7d6da08d3 | |||
| 0fda5ae979 | |||
| f97a9cb026 | |||
| 947fb51d4c | |||
| c7447675c5 | |||
| 614f0151a7 | |||
| 6456470407 |
@@ -102,3 +102,6 @@ dist
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Generated tables for use-cases
|
||||
utils/table-generator/tables/
|
||||
|
||||
+61
-131
@@ -1,14 +1,13 @@
|
||||
# Розроблення вимог до системи
|
||||
|
||||
## Вступ
|
||||
У даному розділі проводиться аналіз предметної області, пов'язаної з системою організації та управління експертними опитуваннями.
|
||||
Аналіз методів експертного опитування розкриє їхні переваги та недоліки.
|
||||
У даному розділі проводиться аналіз предметної області, пов'язаної з системою організації та управління експертними опитуваннями. Представлені такі категорії:
|
||||
|
||||
Розпишемо підходи та методи організації систем організації та опитування експертів.
|
||||
Ми визначимо доцільність розробки нового проєкту шляхом аналізу переваг та недоліків наявних інструментів, а також їх зіставлення з нашим майбутнім.
|
||||
В глосарії опишемо основні терміни та поняття, котрі можна зустріти в сфері експертних опитувань.
|
||||
|
||||
У висновку сформуємо ключові аспекти, на які слід звертати увагу, щоб забезпечити успішну та ефективну реалізацію проєкту.
|
||||
- [Основні визначення](#основні-визначення), котрі можна зустріти в сфері експертних опитувань
|
||||
- [Підходи та способи вирішення завдання](#підходи-та-способи-вирішення-завдання) опитування експертів
|
||||
- [Порівняльна характеристика наявних засобів вирішення завдання](#порівняльна-характеристика-існуючих-засобів-вирішення-завдання) опитування експертів
|
||||
- [Висновки](#висновки) щодо доцільності розробки нової системи
|
||||
- [Література](#література), де наведені посилання на джерела інформації
|
||||
|
||||
## Основні визначення
|
||||
### Технічні визначення
|
||||
@@ -96,13 +95,15 @@ SQL (англ. Structured query language — мова структуровани
|
||||
|
||||
Мінуси: часові витрати; можливість втрати мотивації учасників.
|
||||
|
||||
Метод «мозкової атаки» («Мозкового штурму») вважається найбільш відомим методом колективного прийняття творчих рішень. Він являє собою вільний, неструктурований процес генерування власних ідей, спонтанно пропонованих учасниками, навколо заданої теми. Філософія цього методу виходить із припущення, що при звичайних прийомах обговорення виникненню новаторських ідей перешкоджають контрольні механізми свідомості, які сковують потік цих ідей під тиском звичних, стереотипних форм прийняття рішення. Гальмівний вплив надають боязнь невдачі, страх виявитися смішним і т.д.
|
||||
Метод «мозкового штурму (атаки)»
|
||||
|
||||
Плюси: стимулювання творчості; розширення горизонтів.
|
||||
|
||||
Мінуси: відсутність структури; можливість домінування деяких учасників.
|
||||
|
||||
Тепер давайте розглянемо найпопулярніші інструменти для проведення анкетувань.
|
||||
## Порівняльна характеристика існуючих засобів вирішення завдання
|
||||
|
||||
Розглядатимемо такі найпопулярніші інструменти для проведення анкетувань:
|
||||
|
||||
[Google Forms](https://uk.wikipedia.org/wiki/Google_Форми)
|
||||
|
||||
@@ -115,26 +116,6 @@ Google Slides, Google Drawings, Google Sites і Google Keep. Google Форми
|
||||
в режимі реального часу. Зібрану інформацію можна автоматично внести в
|
||||
електронну таблицю.
|
||||
|
||||
Цілком можливо, що Google Forms є одним із найпоширеніших конструкторів
|
||||
форм, доступних сьогодні. Враховуючи численні переваги Google Forms,
|
||||
величезна популярність програми не повинна бути несподіванкою.
|
||||
|
||||
Однак, як будь-яка інша програма, Google Forms також має деякі помітні
|
||||
недоліки.
|
||||
|
||||
Переваги Google Forms:
|
||||
- Зручність
|
||||
- Простота використання
|
||||
- Це безкоштовно
|
||||
- Співпраця з колегами
|
||||
- Необмежена кількість форм
|
||||
- Потужні функції (кілька типів запитань, поле завантаження файлу, умовна
|
||||
логіка)
|
||||
- Кілька варіантів розповсюдження
|
||||
- Частина екосистеми Google
|
||||
|
||||

|
||||
|
||||
[SurveyMonkey](https://en.wikipedia.org/wiki/SurveyMonkey)
|
||||
|
||||
SurveyMonkey - це служба як для створення простих і невеликих опитувань,
|
||||
@@ -145,32 +126,6 @@ SurveyMonkey - це служба як для створення простих
|
||||
та наочні звіти, захищати дані та інтегрувати засоби з MailChimp,
|
||||
GroSocial та іншими сервісами.
|
||||
|
||||
Функції, які може запропонувати сервіс:
|
||||
- 51 шаблон опитувань та 15 типів питань.
|
||||
- Підтримка всіх мов (Unicode).
|
||||
- Логіка сторінок та питань.
|
||||
- Випадковий розкид питань та конвеєрна організація.
|
||||
- Користувальницькі готові теми та звіти.
|
||||
- Сортування варіантів відповідей та випадковий розкид.
|
||||
- Індикатор пройдених питань.
|
||||
- Автонумерація сторінок та питань.
|
||||
- Переадресація після завершення та сторінка подяк.
|
||||
- Версія PDF для друку.
|
||||
- Можливість надіслати опитування за веб-посиланням, поштою, у Twitter
|
||||
або Facebook.
|
||||
- Настроювана URL-адреса.
|
||||
- Можливість вставити опитування на веб-сторінку або на спливаюче вікно.
|
||||
- Розсилання опитувань диспетчером.
|
||||
- Підвищена безпека (SSL).
|
||||
- Підсумки в режимі реального часу.
|
||||
- Аналітика тексту.
|
||||
- Інтеграція SPSS(пакету програм, який використовується для аналізу
|
||||
статистичних даних).
|
||||
- Фільтри та перехресні таблиці відповідей за критеріями.
|
||||
- Загальний доступ до відповідей.
|
||||
|
||||

|
||||
|
||||
[Responsly](https://www.responsly.com)
|
||||
|
||||
Responsly - платформа, яка дозволяє створювати онлайн-опитування та
|
||||
@@ -179,18 +134,6 @@ Responsly - платформа, яка дозволяє створювати о
|
||||
надає широкий вибір типів питань для опитувань, вибраних спеціально для
|
||||
певної аудиторії.
|
||||
|
||||
Функції, які може запропонувати сервіс:
|
||||
- 25+ типів питань
|
||||
- Автоматизація та інтеграція - планування надсилань опитувань і
|
||||
створення власних сповіщення.
|
||||
- Калькулятор - можливість обчислення балів, цін та інших змінних на
|
||||
основі відповідей людей. Створення різних кінцевих сторінок на основі
|
||||
балів.
|
||||
- Багатомовні опитування.
|
||||
- Безпека корпоративного рівня.
|
||||
|
||||

|
||||
|
||||
[Jotform](https://en.wikipedia.org/wiki/Jotform)
|
||||
|
||||
Jotform — це потужна онлайн програма, яка дозволяє будь-кому швидко
|
||||
@@ -202,19 +145,6 @@ Jotform — це потужна онлайн програма, яка дозво
|
||||
відповіді безпосередньо в електронних листах та створювати PDF форми для
|
||||
заповнення.
|
||||
|
||||
Функції, які може запропонувати сервіс:
|
||||
- Тисячі готових до використання безкоштовних шаблонів, які допоможуть
|
||||
користувачу створювати форми.
|
||||
- Вбудований інструмент умовної логіки, який може показувати або
|
||||
приховувати будь-які вибрані користувачем поля форми, залежно від того,
|
||||
як люди відповідають на запитання.
|
||||
- Не потрібний досвід програмування.
|
||||
- Jotform дуже серйозно ставиться до безпеки даних користувачів.
|
||||
- Легка інтеграція платежів.
|
||||
- Інтеграція віджетів.
|
||||
|
||||

|
||||
|
||||
[QuestionPro](https://questionpro.com/)
|
||||
|
||||
QuestionPro — це програмне забезпечення для створення та розповсюдження
|
||||
@@ -223,33 +153,6 @@ QuestionPro — це програмне забезпечення для ство
|
||||
електронною поштою або на веб-сайті та інструментів для аналізу та
|
||||
перегляду результатів.
|
||||
|
||||
Достатньо просто створити опитування та надіслати його електронною поштою
|
||||
потенційним респондентам. QuestionPro подбає про збір і запис відповідей,
|
||||
а результати будуть доступні в реальному часі.
|
||||
|
||||
Функції, які може запропонувати сервіс:
|
||||
- Необмежена кількість опитувань.
|
||||
- Необмежена кількість відповідей.
|
||||
- 20+ професійних тем опитування.
|
||||
- Додавання свого логотипу.
|
||||
- Експорт необроблених даних.
|
||||
- Цілодобова підтримка електронною поштою.
|
||||
- Індекс підтримки споживача (NPS).
|
||||
- Багатомовні опитування.
|
||||
- Розширена логіка розгалуження.
|
||||
- Мобільний додаток QuestionPro.
|
||||
- Експорт SPSS (пакету програм, який використовується для аналізу
|
||||
статистичних даних).
|
||||
- Цілодобовий чат і телефонна підтримка.
|
||||
- Аналіз тональності тексту (клас методів контент-аналізу в комп'ютерній
|
||||
лінгвістиці, призначений для автоматизованого виявлення в текстах
|
||||
емоційно забарвленої лексики).
|
||||
- Функції інтеграції опитувань.
|
||||
- Функції автоматизації опитувань.
|
||||
- Адміністрування опитування та функції безпеки.
|
||||
|
||||

|
||||
|
||||
[Fillout](https://www.fillout.com/)
|
||||
|
||||
Fillout — це платформа для створення форм, опитувань і тестів. Fillout
|
||||
@@ -260,32 +163,59 @@ Fillout. Для компаній із суворими вимогами щодо
|
||||
іншими вимогами Fillout пропонує корпоративне рішення для безпечного
|
||||
отримання даних у будь-якому масштабі.
|
||||
|
||||
Функції може запропонувати сервіс:
|
||||
- Fillout пропонує широкий вибір шаблонів опитувань, придатних для різних
|
||||
цілей, включаючи відгуки клієнтів, дослідження ринку, задоволеність
|
||||
працівників тощо. Кожен шаблон розроблено, щоб допомогти отримати
|
||||
користувачу цінну інформацію, і його легко налаштувати відповідно до
|
||||
потреб.
|
||||
- Fillout забезпечує легку інтеграцію з різними платформами, забезпечуючи
|
||||
безпроблемну передачу та аналіз даних, які збирає користувач під час
|
||||
своїх опитувань.
|
||||
- Функція масового імпорту питань.
|
||||
- Потужна інтуїтивна логіка.
|
||||
Порівняймо наведені вище сервіси із нашим проєктом.
|
||||
|
||||

|
||||
Умовні позначення в таблиці порівняння:
|
||||
- 🔴 засіб не відповідає критерію
|
||||
- 🟡 засіб частково відповідає критерію або вимагає коштів для повноцінного функціоналу
|
||||
- 🟢 засіб цілком відповідає критерію в безкоштовній версії
|
||||
- ⚪ засіб частково або повністю не надав інформацію щодо критерію
|
||||
|
||||
## Порівняльна характеристика існуючих засобів вирішення завдання
|
||||
|
||||
*[Розділ містить опис існуючих програм, інформаційних систем, сервісів, тощо, призначених для вирішення
|
||||
завдання. Дається порівняльна характеристика властивостей FURPS:*
|
||||
- *Functionality (функциональні вимоги)*
|
||||
- *Usability (вимоги до зручності роботи)*
|
||||
- *Reliability (вимоги до надійності)*
|
||||
- *Performance (вимоги до продуктивності)*
|
||||
- *Supportability (вимоги до підтримки)*
|
||||
|
||||
*(у вигляді таблиці).]*
|
||||
| Критерій |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/)
|
||||
|
||||
@@ -0,0 +1,161 @@
|
||||
# Запити зацікавлених осіб
|
||||
|
||||
## Вступ
|
||||
|
||||
У даному розділі розкриваються ключові терміни та процеси, пов'язані з розробкою високоякісного програмного забезпечення. Ці матеріали надаються для зацікавлених користувачів, які прагнуть отримати глибше розуміння суті проекту та його основних завдань. Представлені такі категорії:
|
||||
|
||||
- [Короткий зміст](#короткии-зміст)
|
||||
- [Характеристика ділових процесів](#характеристика-ділових-процесів)
|
||||
- [Короткий огляд продукту](#короткии-огляд-продукту)
|
||||
- [Функціональність](#функціональність)
|
||||
- [Практичність](#практичність)
|
||||
- [Надійність](#надіиність)
|
||||
- [Продуктивність](#продуктивність)
|
||||
- [Експлуатаційна придатність](#експлуатаціина-придатність)
|
||||
|
||||
### Мета
|
||||
|
||||
Метою є формування стратегії подальшого розвитку проекту на основі аналізу запитів цільової аудиторії, функціональних потреб та досягнення оптимальної продуктивності для створення якісного програмного забезпечення.
|
||||
|
||||
### Контекст
|
||||
|
||||
Даний документ містить теоретичні відомості, визначення та загальний огляд функціональності, які допоможуть розробникам розуміти напрямок роботи над програмним продуктом, а клієнтам - зрозуміти очікування від нього.
|
||||
|
||||
|
||||
### Основні визначення та скорочення
|
||||
|
||||
[Зацікавлені сторони(особи)](https://uk.wikipedia.org/wiki/Зацікавлені_сторони) - фізичні та юридичні особи, які мають легітимний інтерес у діяльності організації, тобто певною мірою залежать від неї або можуть впливати на її діяльність.
|
||||
|
||||
[FURPS](https://en.wikipedia.org/wiki/FURPS) - абревіатура, що репрезентує модель класифікації якостей програмного забезпечення (функціональні і нефункціональні вимоги):
|
||||
- *Functionality* (Функціональність) - можливості (розмір та загальний набір функцій), повторне використання (сумісність, інтероперабельність, портативність), безпека (безпека та можливість експлуатації);
|
||||
- *Usability* (Використовуваність) (UX) - людський фактор, естетика, узгодженість, документація, швидкість реагування;
|
||||
- *Reliability* (Надійність) - доступність (частота відмов (надійність/довговічність/стійкість), ступінь і тривалість відмов (відновлюваність/живучість)), передбачуваність (стабільність), точність (частота/серйозність помилок);
|
||||
- *Perfomance* (Продуктивність) - швидкість, ефективність, споживання ресурсів (живлення, оперативна пам'ять, кеш і т.д.), пропускна здатність, ємність, масштабованість;
|
||||
- *Supportability* (Підтримка) (ремонтопридатність, підтримуваність, стійкість, швидкість відновлення) - тестуємість, гнучкість (модифікованість, конфігурованість, адаптованість, розширюваність, модульність), встановлюваність, локалізованість.
|
||||
|
||||
[API](https://uk.wikipedia.org/wiki/Прикладний_програмний_інтерфейс) (з англ. application programming interface “прикладни́й програ́мний інтерфе́йс”) - підхід до архітектури мережевих протоколів, які надають доступ до інформаційних ресурсів.
|
||||
|
||||
[REST](https://uk.wikipedia.org/wiki/REST) (з англ. Representational State Transfer, «передача репрезентативного стану») — підхід до архітектури мережевих протоколів, які надають доступ до інформаційних ресурсів.
|
||||
|
||||
[MVC](https://en.wikipedia.org/wiki/Model–view–controller#Components) (з англ. Model-view-controller) - це патерн проектування програмного забезпечення, який зазвичай використовується для розробки користувацьких інтерфейсів, що розділяє відповідну програмну логіку на три взаємопов'язані елементи. Це робиться для того, щоб відокремити внутрішнє представлення інформації від способів її представлення користувачеві та отримання від нього.
|
||||
|
||||
[SOLID](https://en.wikipedia.org/wiki/SOLID) - це мнемонічна абревіатура для п'яти принципів проектування, призначених для того, щоб зробити об'єктно-орієнтовані проекти більш зрозумілими, гнучкими та зручними в обслуговуванні.
|
||||
- *Принцип єдиної відповідальності*: "Ніколи не повинно бути більше однієї причини для зміни класу”. Іншими словами, кожен клас повинен мати лише одну відповідальність.
|
||||
- *Принцип відкритості-закритості*: "Сутності програмного забезпечення ... повинні бути відкритими для розширення, але закритими для модифікації.
|
||||
- *Принцип заміщення Ліскова*: "Функції, які використовують вказівники або посилання на базові класи, повинні мати можливість використовувати об'єкти похідних класів, не знаючи про це.
|
||||
- *Принцип розділення інтерфейсів*: "Клієнти не повинні бути змушені залежати від інтерфейсів, якими вони не користуються".
|
||||
- *Принцип інверсії залежності*: "Покладайтеся на абстракції, а не на конкретику".
|
||||
|
||||
[DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)(з англ. don’t repeat yourself - “не повторюйся”) - це принцип розробки програмного забезпечення, спрямований на зменшення повторення інформації, яка може змінитися, заміну її абстракціями, які менш схильні до змін, або використання нормалізації даних, яка дозволяє уникнути надмірності в першу чергу.
|
||||
|
||||
[ORM](https://uk.wikipedia.org/wiki/Об%27єктно-реляційне_відображення) - (англ. Object-relational mapping, Об'єктно-реляційна проекція) — технологія програмування, яка зв'язує бази даних з концепціями об'єктно-орієнтованих мов програмування, створюючи «віртуальну об'єктну базу даних».
|
||||
|
||||
|
||||
### Посилання
|
||||
|
||||
1. [https://uk.wikipedia.org/wiki/Зацікавлені_сторони](https://uk.wikipedia.org/wiki/Зацікавлені_сторони)
|
||||
2. [https://en.wikipedia.org/wiki/FURPS](https://en.wikipedia.org/wiki/FURPS)
|
||||
3. [https://uk.wikipedia.org/wiki/Прикладний_програмний_інтерфейс](https://uk.wikipedia.org/wiki/Прикладний_програмний_інтерфейс)
|
||||
4. [https://uk.wikipedia.org/wiki/REST](https://uk.wikipedia.org/wiki/REST)
|
||||
5. [https://en.wikipedia.org/wiki/Model–view–controller#Components](https://en.wikipedia.org/wiki/Model–view–controller#Components)
|
||||
6. [https://en.wikipedia.org/wiki/SOLID](https://en.wikipedia.org/wiki/SOLID)
|
||||
7. [https://en.wikipedia.org/wiki/Don%27t_repeat_yourself](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)
|
||||
8. [https://uk.wikipedia.org/wiki/Об%27єктно-реляційне_відображення](https://uk.wikipedia.org/wiki/Об%27єктно-реляційне_відображення)
|
||||
|
||||
|
||||
## Короткий зміст
|
||||
|
||||
*[Розділ містить опис того, про що йдеться в еій частині цього документу, що залишилася.
|
||||
Також тут описана структура документу.]*
|
||||
|
||||
## Характеристика ділових процесів
|
||||
|
||||
*[В цьому розділі визначаються зовнішні фактори, що впливають на бізнес (бізнес-актори),
|
||||
та внутрішні фактори (робітники), дається загальна характеристика діяльності бізнес-акторів
|
||||
та робітників, яка здійснюється за допомогою бізнесу.*
|
||||
|
||||
*Дається опис бізнес-сценаріїв взаємодії бізнес-акторів, робітників і, можливо, інформаційної системи за допомогою наступної
|
||||
специфікації:*
|
||||
|
||||
|
||||
***ID:***
|
||||
|
||||
***НАЗВА:***
|
||||
|
||||
***УЧАСНИКИ:***
|
||||
|
||||
***ПЕРЕДУМОВИ:***
|
||||
|
||||
***РЕЗУЛЬТАТ:***
|
||||
|
||||
***ВИКЛЮЧНІ СИТУАЦІЇ:***
|
||||
|
||||
***ОСНОВНИЙ СЦЕНАРІЙ:***
|
||||
|
||||
*Кількість сценаріїв визначається у відповідності до специфіки завдання та необхідного
|
||||
рівня деталізації (зазвичай, 5-6 сценаріїв).*
|
||||
|
||||
## Короткий огляд продукту
|
||||
|
||||
*[Визначається границя системи та категорії її користувачів. Дається загальна характеристика категорій користувачів
|
||||
системи]*
|
||||
|
||||
*[Нижче йде опис FURPS:]*
|
||||
|
||||
|
||||
## Функціональність
|
||||
|
||||
Наша система спрямована, в першу чергу, на взаємодію з користувачами.
|
||||
|
||||
***Користувач** - це особа, що взаємодіє із системою.*
|
||||
|
||||
Cистема розділяє користувачів на дві категорії:
|
||||
- гість
|
||||
- авторизований користувач
|
||||
|
||||
***Гість** - це користувач, що не пройшов ідентифікацію в системі. Такого користувача не можна зіставити з жодним обліковим записом.*
|
||||
|
||||
Гість може:
|
||||
- створити обліковий запис
|
||||
- пройти ідентифікацію в системі
|
||||
- пройти анонімне опитування
|
||||
|
||||
***Зареєстрований користувач** - це користувач, котрий успішно пройшов ідентифікацію в системі. Такого користувача можна однозначно зіставити з обліковим записом, що наявний у системі.*
|
||||
|
||||
Зареєстрований користувач може:
|
||||
- редагувати властивості свого облікового запису
|
||||
- видалити свій обліковий запис
|
||||
- скинути дані про ідентицікацію в системі
|
||||
- створити опитування
|
||||
- відредагувати своє опитування
|
||||
- видалити своє опитування
|
||||
- призупинити своє опитування
|
||||
- продовжити своє опитування
|
||||
- переглянути властивості свого опитування
|
||||
- переглянути результати свого опитування
|
||||
- пройти анонімне опитування
|
||||
- пройти поіменне опитування
|
||||
|
||||
*[Респондент](https://slovnyk.ua/index.php?swrd=%D1%80%D0%B5%D1%81%D0%BF%D0%BE%D0%BD%D0%B4%D0%B5%D0%BD%D1%82) - той, хто відповідає на питання анкети; опитуваний.*
|
||||
|
||||
***Опитування** - це перелік запитань, кожне з яких передбачає обов'язкову або необов'язкову відповідь. Кожна відповідь має визначений тип.*
|
||||
|
||||
***Анонімне опитування** - це опитування, відповідь на яке може не містити інформації про обліковий запис респондента (*респондент все одно може вирішити надати таку інформацію).*
|
||||
|
||||
***Поіменне опитування** - це опитування, відповідь на яке обов'язково містить дані про обліковий запис респондента.*
|
||||
|
||||
## Практичність
|
||||
|
||||
*[Usability (вимоги до зручності роботи)]*
|
||||
|
||||
## Надійність
|
||||
|
||||
*[Reliability (вимоги до надійності)]*
|
||||
|
||||
## Продуктивність
|
||||
|
||||
*[Performance (вимоги до продуктивності)]*
|
||||
|
||||
## Експлуатаційна придатність
|
||||
|
||||
*[Supportability (вимоги до підтримки)]*
|
||||
Executable
+178
@@ -0,0 +1,178 @@
|
||||
#!/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 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)
|
||||
|
||||
|
||||
if __name__=="__main__":
|
||||
# parse args
|
||||
files = []
|
||||
write_to_file = AUTO
|
||||
write_to_stdout = AUTO
|
||||
usecase_formatting = AUTO
|
||||
verbose = AUTO
|
||||
process_table_files = 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
|
||||
|
||||
# задає папку, в яку необхідно зберігати конвертовані таблиці
|
||||
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")
|
||||
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}")
|
||||
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")
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
grep -E '\|\ [0-9]{3}\.[0-9]{3}' use-cases/*.uc \
|
||||
| cut -d '|' -f 2 \
|
||||
| sort | uniq -c
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
mkdir -p tables/
|
||||
./convert.py use-cases/* -nv -d tables/
|
||||
@@ -0,0 +1,10 @@
|
||||
Назва | Створити обліковий запис
|
||||
Учасники | Користувач, система
|
||||
Передумови | Відсутні
|
||||
Результат | Обліковий запис користувача
|
||||
Виключні ситуації | 001.001 Користувач ввів заборонені символи в поле псевдоніму
|
||||
| 001.002 Ідентичний псевдонім вже існує
|
||||
Основний сценарій | 1. Користувач вводить бажаний псевдонім у поле вводу псевдоніму
|
||||
| 2. Користувач вводить пароль у поле вводу паролю
|
||||
| 3. Користувач натискає на кнопку створення облікового запису
|
||||
| 4. Система створює обліковий запис користувача (можливі 001.001, 001.002)
|
||||
@@ -0,0 +1,9 @@
|
||||
Назва | Видалити обліковий запис
|
||||
Учасники | Користувач, система
|
||||
Передумови | Користувач ідентифікований в системі
|
||||
Результат | Відсутність облікового запису користувача
|
||||
Виключні ситуації | 001.005 Користувач не ідентифікований
|
||||
Основний сценарій | 1. Користувач натискає на кнопку видалення облікового запису
|
||||
| 2. Система виводить кнопку-запит на підтвердження видалення облікового запису
|
||||
| 3. Користувач натискає на кнопку підтвердження видалення облікового запису
|
||||
| 4. Система видаляє обліковий запис (можлива 001.005)
|
||||
@@ -0,0 +1,10 @@
|
||||
Назва | Змінити властивості облікового запису
|
||||
Учасники | Користувач, система
|
||||
Передумови | Користувач ідентифікований в системі
|
||||
Результат | Зміна властивостей облікового запису
|
||||
Виключні ситуації | 001.005 Користувач не ідентифікований
|
||||
Основний сценарій | 1. Користувач натискає на кнопку редагування облікового запису
|
||||
| 2. Система виводить інтерфейс для редагування облікового запису (можлива 001.005)
|
||||
| 3. Користувач вказує бажані зміни властивостей облікового запису
|
||||
| 4. Користувач натискає на кнопку внесення змін до властивостей облікового запису
|
||||
| 5. Система змінює властивості облікового запису
|
||||
@@ -0,0 +1,12 @@
|
||||
Назва | Створити опитування
|
||||
Учасники | Користувач, система
|
||||
Передумови | Користувач ідентифікований в системі
|
||||
Результат | Створене опитування
|
||||
Виключні ситуації | 001.005 Користувач не ідентифікований
|
||||
| 001.007 Користувач ввів неприпустимі символи в назві опитування
|
||||
Основний сценарій | 1. Користувач переходить на сторінку створення опитування (можлива 001.005)
|
||||
| 2. Система виводить інтерфейс створення опитування
|
||||
| 3. Користувач задає інформацію про запитання та тип опитування
|
||||
| 4. Користувач натискає кнопку збереження опитування
|
||||
| 5. Система створює опитування (можлива 001.007)
|
||||
| 6. Система виводить посилання на проходження опитування
|
||||
@@ -0,0 +1,11 @@
|
||||
Назва | Видалити опитування
|
||||
Учасники | Користувач, система
|
||||
Передумови | Користувач ідентифікований в системі, користувач є власником опитування
|
||||
Результат | Відсутність опитування
|
||||
Виключні ситуації | 001.005 Користувач не ідентифікований
|
||||
| 001.006 Запитане опитування не існує
|
||||
| 001.008 Користувач не є власником опитування
|
||||
Основний сценарій | 1. Користувач натискає на кнопку видалення опитування
|
||||
| 2. Система виводить запит на підтвердження видалення опитування
|
||||
| 3. Користувач натискає на кнопку підтвердження видалення опитування
|
||||
| 4. Система видаляє опитування (можливі 001.005, 001.006, 001.008)
|
||||
@@ -0,0 +1,9 @@
|
||||
Назва | Переглянути відповіді на опитування
|
||||
Учасники | Користувач, система
|
||||
Передумови | Користувач ідентифікований в системі, користувач є власником опитування
|
||||
Результат | Інформація про відповіді на опитування
|
||||
Виключні ситуації | 001.005 Користувач не ідентифікований
|
||||
| 001.006 Запитане опитування не існує
|
||||
| 001.008 Користувач не є власником опитування
|
||||
Основний сценарій | 1. Користувач натискає на кнопку перегляду відповідей на опитування
|
||||
| 2. Система виводить інформацію про відповіді на опитування (можливі 001.005, 001.006, 001.008)
|
||||
@@ -0,0 +1,12 @@
|
||||
Назва | Пройти ідентифікацію в системі
|
||||
Учасники | Користувач, система
|
||||
Передумови | Користувач має обліковий запис
|
||||
Результат | Користувач ідентифікований в системі
|
||||
Виключні ситуації | 001.001 Користувач ввів заборонені символи в поле псевдоніму
|
||||
| 001.003 Користувач ввів псевдонім, якого не існує в системі
|
||||
| 001.004 Користувач ввів неправильний пароль до облікового запису
|
||||
Основний сценарій | 1. Користувач вводить псевдонім у поле вводу псевдоніму
|
||||
| 2. Користувач вводить пароль у поле вводу паролю
|
||||
| 3. Користувач натискає кнопку ідентифікації
|
||||
| 4. Система ідентифікує користувача (можливі 001.001, 001.003, 001.004)
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
Назва | Скинути дані про ідентифікацію в системі
|
||||
Учасники | Користувач, система
|
||||
Передумови | Користувач ідентифікований в системі
|
||||
Результат | Користувач не ідентифікований в системі
|
||||
Виключні ситуації | 001.005 Користувач не ідентифікований
|
||||
Основний сценарій | 1. Користувач натискає на кнопку виходу з облікового запису
|
||||
| 2. Система скидає інформацію про ідентифікацію користувача (можлива 001.005)
|
||||
@@ -0,0 +1,12 @@
|
||||
Назва | Редагувати опитування
|
||||
Учасники | Користувач, система
|
||||
Передумови | Користувач ідентифікований в системі, користувач є власником опитування
|
||||
Результат | Змінене опитування
|
||||
Виключні ситуації | 001.005 Користувач не ідентифікований
|
||||
| 001.006 Запитане опитування не існує
|
||||
| 001.008 Користувач не є власником опитування
|
||||
Основний сценарій | 1. Користувач переходить на сторінку редагування опитування
|
||||
| 2. Система виводить інтерфейс редагування опитування (можливі 001.005, 001.006, 001.008)
|
||||
| 3. Користувач задає інформацію про зміни в опитуванні
|
||||
| 4. Користувач натискає кнопку збереження змін в опитуванні
|
||||
| 5. Система змінює опитування
|
||||
@@ -0,0 +1,9 @@
|
||||
Назва | Переглянути властивості опитування
|
||||
Учасники | Користувач, система
|
||||
Передумови | Користувач ідентифікований в системі, користувач є власником опитування
|
||||
Результат | Інформація про властивості опитування
|
||||
Виключні ситуації | 001.005 Користувач не ідентифікований
|
||||
| 001.006 Запитане опитування не існує
|
||||
| 001.008 Користувач не є власником опитування
|
||||
Основний сценарій | 1. Користувач натискає на кнопку перегляду інформації про опитування
|
||||
| 2. Система виводить інформацію про опитування (можливі 001.005, 001.006, 001.008)
|
||||
@@ -0,0 +1,11 @@
|
||||
Назва | Пройти анонімне опитування
|
||||
Учасники | Користувач, система
|
||||
Передумови | Відсутні
|
||||
Результат | Запис відповідей на опитування
|
||||
Виключні ситуації | 001.006 Запитане опитування не існує
|
||||
Основний сценарій | 1. Користувач переходить на сторінку проходження опитування
|
||||
| 2. Система виводить перелік запитань опитування (можлива 001.006)
|
||||
| 3. Користувач вводить відповіді на запитання
|
||||
| 4. Користувач натискає кнопку надсилання відповідей
|
||||
| 5. Система записує відповіді на опитування (можлива 001.006)
|
||||
| 6. Система виводить прощальне повідомлення
|
||||
@@ -0,0 +1,12 @@
|
||||
Назва | Пройти поіменне опитування
|
||||
Учасники | Користувач, система
|
||||
Передумови | Користувач ідентифікований в системі
|
||||
Результат | Запис відповідей на опитування та відомості про користувача
|
||||
Виключні ситуації | 001.005 Користувач не ідентифікований
|
||||
| 001.006 Запитане опитування не існує
|
||||
Основний сценарій | 1. Користувач переходить на сторінку проходження опитування
|
||||
| 2. Система виводить перелік запитань опитування (можливі 001.005, 001.006)
|
||||
| 3. Користувач вводить відповіді на запитання
|
||||
| 4. Користувач натискає кнопку надсилання відповідей
|
||||
| 5. Система записує відповіді на опитування та відомості про користувача (можлива 001.006)
|
||||
| 6. Система виводить прощальне повідомлення
|
||||
Reference in New Issue
Block a user