Запити зацікавлених осіб Вступ Система управління відкритими даними - це продукт, що має забезпечувати надійне зберігання та можливість легкої обробки інформації, а також надавати швидкий і зручний доступ до неї. Щоб спроєктувати таку систему, спочатку треба визначити необхідну функціональність для різних типів користувачів і висунути ряд вимог, яким повинна відповідати система. Для цього було створено даний документ. Він містить загальний огляд майбутнього продукту, перелік основних ділових процесів для звичайних і привілейованих користувачів та вимоги, що стосуються функціональності, практичності, надійності, продуктивності та експлуатаційної придатності системи. Задля уникнення можливих неточностей у документі є розділ з тлумаченням використаних визначень і скорочень.
Мета Створення на основі сформульованої сукупності вимог теоретичної бази, що допоможе визначити правильний вектор подальшої розробки проєкту.
Контекст Цей документ містить теоретичні відомості, необхідні для створення системи управління відкритими даними. Він допоможе розробникам краще зрозуміти, що і як слід реалізовувати, а користувачам - дізнатися про базові можливості системи.
Основні визначення та скорочення Зацікавлені особи (сторони) [1] - фізичні особи, команди, організації чи їх класи, які мають інтерес у системі. Вони забезпечують можливості для системи та є джерелом вимог до неї.
FURPS [2] - абревіатура, що представляє модель для класифікації атрибутів якості програмного забезпечення:
F unctionality (Функціональність): визначає наскільки програмний продукт виконує функції та завдання, для яких він був розроблений; U sability (Практичність): оцінює наскільки легко і зручно користувачі можуть взаємодіяти з програмним продуктом; R eliability (Надійність): визначає стабільність програмного продукту. Вказує на ймовірність виникнення помилок та збоїв; P erformance (Продуктивність): вказує на продуктивність програми, зокрема, швидкодію та витрати ресурсів (пам'ять, процесорний час); S upportability (Експлуатаційна придатність): відображає наскільки легко підтримувати й розвивати програмний продукт у майбутньому. ORM [3] (object-relational mapping) - технологія програмування, яка зв'язує бази даних з концепціями об'єктно-орієнтованих мов програмування, створюючи «віртуальну об'єктну базу даних».
SQL-ін'єкція [4] - один з поширених способів злому сайтів та програм, що працюють з базами даних, заснований на впровадженні в запит довільного SQL-коду.
Принцип DRY [5] (don’t repeat yourself) - це принцип розробки програмного забезпечення, спрямований на зменшення повторення інформації, яка, імовірно, буде змінюватися, замінюючи її абстракціями, які менш імовірно змінюватимуться, або використовуючи нормалізацію даних, яка в першу чергу уникає надмірності.
Принципи SOLID [6] - це мнемонічний акронім для п’яти принципів проєктування, призначених для того, щоб зробити об’єктно-орієнтовані системи більш зрозумілими, гнучкими та придатними для обслуговування.
* Інші визначення можна знайти у документі "Аналіз предметної області" (opens new window) .
Посилання Зацікавлені особи (opens new window)
FURPS (opens new window)
ORM (opens new window)
SQL-ін'єкція (opens new window)
Принцип DRY (opens new window)
Принципи SOLID (opens new window)
Короткий зміст Характеристика ділових процесів Користувач
ID: USER.REGISTRATION НАЗВА: Зареєструватися у сервісі УЧАСНИКИ: Користувач, Система ПЕРЕДУМОВИ: Відсутність облікового запису у користувача РЕЗУЛЬТАТ: Новий обліковий запис для користувача ВИКЛЮЧНІ СИТУАЦІЇ: Введені дані не задовольняють умови - USER.REGISTRATION_ERROR ОСНОВНИЙ СЦЕНАРІЙ: 1. Користувач розпочинає взаємодію 2. Користувач переходить на сторінку реєстрації 3. Користувач вводить необхідні реєстраційні дані 4. Система перевіряє правильність введених даних (можлива USER.REGISTRATION_ERROR) 5. Система створює новий обліковий запис для користувача 6. Користувач отримує підтвердження про успішну реєстрацію 7. Користувач закінчує взаємодію
ID: USER.LOGIN НАЗВА: Авторизуватися у сервісі УЧАСНИКИ: Користувач, Система ПЕРЕДУМОВИ: Користувач має обліковий запис, але не авторизований РЕЗУЛЬТАТ: Вхід на сайт за допомогою облікового запису ВИКЛЮЧНІ СИТУАЦІЇ: Некоректність введення даних - USER.LOGIN_ERROR ОСНОВНИЙ СЦЕНАРІЙ: 1. Користувач розпочинає взаємодію 2. Користувач переходить на сторінку авторизації 3. Користувач вводить свої облікові дані 4. Система перевіряє наявність такого облікового запису (можлива USER.LOGIN_ERROR) 5. Система надає доступ до особистого кабінету користувача 6. Користувач здійснює вхід на сайт за допомогою облікового запису 7. Користувач закінчує взаємодію
ID: USER.DATA_SEARCH НАЗВА: Пошук статистичних даних УЧАСНИКИ: Користувач, Система ПЕРЕДУМОВИ: Користувач зайшов на сайт і бажає знайти конкретні статистичні дані РЕЗУЛЬТАТ: Статистичні дані, що задовольняють пошуковий запит ВИКЛЮЧНІ СИТУАЦІЇ: Відсутність результатів за введеним запитом - USER.DATA_SEARCH_ERROR ОСНОВНИЙ СЦЕНАРІЙ: 1. Користувач розпочинає взаємодію 2. Користувач використовує пошуковий рядок для введення свого запиту 3. Користувач натискає на кнопку "Пошук" 4. Система виконує пошук за запитом користувача в базі статистичних даних (можлива USER.DATA_SEARCH_ERROR) 5. Система виводить статистичні дані, що задовольняють пошуковий запит у вигляді списку показників або візуалізацій 6. Користувач закінчує взаємодію
ID: USER.DATA_DOWNLOAD НАЗВА: Завантажити статистичні дані УЧАСНИКИ: Користувач, Система ПЕРЕДУМОВИ: Користувач знайшов необхідні статистичні дані та бажає завантажити їх РЕЗУЛЬТАТ: Файли зі статистичними даними в обраному форматі ВИКЛЮЧНІ СИТУАЦІЇ: Відмова у завантаженні у зв'язку з відсутністю авторизації - USER.DATA_DOWNLOAD_ERROR ОСНОВНИЙ СЦЕНАРІЙ: 1. Користувач розпочинає взаємодію 2. Користувач знаходить необхідні статистичні дані на сайті 3. Користувач вибирає параметри для завантаження даних 4. Система генерує файли зі статистичними даними в обраному форматі (можлива USER.DATA_DOWNLOAD_ERROR) 5. Система завантажує файли зі статистичними даними в обраному форматі на комп'ютер користувача 6. Користувач отримує підтвердження про успішне завантаження обраних статистичних даних 7. Користувач закінчує взаємодію
ID: USER.DATA_VISUALIZE НАЗВА: Візуалізувати статистичні дані УЧАСНИКИ: Користувач, Система ПЕРЕДУМОВИ: Користувач знайшов необхідні статистичні дані та бажає візуалізувати їх РЕЗУЛЬТАТ: Інтерактивна візуалізація на основі обраних статистичних даних ВИКЛЮЧНІ СИТУАЦІЇ: Обрані дані неможливо візуалізувати, візуалізація недоступна - USER.DATA_VISUALIZE_ERROR ОСНОВНИЙ СЦЕНАРІЙ: 1. Користувач розпочинає взаємодію 2. Користувач знаходить необхідні статистичні дані на сайті 3. Користувач вказує, що хоче візуалізувати дані 4. Користувач обирає тип візуалізації 5. Система генерує інтерактивну візуалізацію на основі обраних статистичних даних та вибраного типу візуалізації 6. Користувач отримує доступ до створеної візуалізації 7. Користувач закінчує взаємодію
ID: USER.DATA_COMPARE НАЗВА: Порівняти статистичні дані країн УЧАСНИКИ: Користувач, Система ПЕРЕДУМОВИ: Користувач знайшов статистичні дані для кількох країн і бажає їх порівняти РЕЗУЛЬТАТ: Порівняльний аналіз статистичних даних країн ВИКЛЮЧНІ СИТУАЦІЇ: Порівняння для обраних країн недоступне - USER.DATA_COMPARE_ERROR ОСНОВНИЙ СЦЕНАРІЙ: 1. Користувач розпочинає взаємодію 2. Користувач обирає необхідні статистичні дані 3. Користувач обирає опцію порівняння статистичних даних за країнами 4. Користувач обирає країни для порівняння 5. Користувач обирає тип відображення порівняння (діаграма, графік, таблиця тощо) 6. Система аналізує статистичні дані для обраних країн і показників 7. Система виводить порівняльний аналіз статистичних даних країн за допомогою обраного типу відображення 8. Користувач закінчує взаємодію
ID: USER.PROFILE НАЗВА: Редагувати профіль користувача УЧАСНИКИ: Користувач, Система ПЕРЕДУМОВИ: Користувач бажає змінити свої персональні дані РЕЗУЛЬТАТ: Оновлені персональні дані користувача ВИКЛЮЧНІ СИТУАЦІЇ: Відмова у внесенні змін у зв'язку з тим, що нові дані не задовольняють умови - USER.PROFILE_ERROR ОСНОВНИЙ СЦЕНАРІЙ: 1. Користувач розпочинає взаємодію 2. Користувач переходить до свого особистого кабінету 3. Користувач обирає опцію редагування профілю 4. Користувач редагує необхідні персональні дані 5. Користувач натискає на кнопку для збереження внесених змін 6. Система перевіряє коректність введених даних (можлива USER.PROFILE_ERROR) 7. Система зберігає оновлені персональні дані користувача 8. Система виводить повідомлення про успішне оновлення профілю 9. Користувач закінчує взаємодію
ID: USER.LOGOUT НАЗВА: Вийти з облікового запису УЧАСНИКИ: Користувач, Система ПЕРЕДУМОВИ: Користувач бажає вийти з облікового запису РЕЗУЛЬТАТ: Вихід з облікового запису ВИКЛЮЧНІ СИТУАЦІЇ: Відсутні ОСНОВНИЙ СЦЕНАРІЙ: 1. Користувач розпочинає взаємодію 2. Користувач обирає опцію для здійснення виходу з облікового запису 3. Система запитує користувача про те, чи впевнений він, що хоче вийти 4. Користувач підтверджує вихід 5. Система закриває доступ до особистих даних (та деяких інших функцій) для користувача 6. Система перенаправляє користувача на сторінку авторизації 7. Користувач закінчує взаємодію
Редактор
ID: EDITOR.UPLOAD_DATA НАЗВА: Завантажити нові статистичні дані УЧАСНИКИ: Редактор, Система ПЕРЕДУМОВИ: Редактор бажає завантажити нові статистичні дані на сайт РЕЗУЛЬТАТ: Додані до бази даних системи нові статистичні дані ВИКЛЮЧНІ СИТУАЦІЇ: Дані з такою назвою вже завантажені - EDITOR.UPLOAD_DATA_ERROR_1 Формат обраних файлів не підтримується - EDITOR.UPLOAD_DATA_ERROR_2 Розмір файлів занадто великий - EDITOR.UPLOAD_DATA_ERROR_3 ОСНОВНИЙ СЦЕНАРІЙ: 1. Редактор розпочинає взаємодію 2. Редактор входить до свого облікового запису на сайті та переходить до панелі управління даними 3. Редактор обирає опцію завантаження даних на сайт 4. Система відкриває вікно для вибору файлів 5. Редактор обирає необхідні для завантаження файли 6. Система перевіряє обрані файли (можливі EDITOR.UPLOAD_DATA_ERROR_1, EDITOR.UPLOAD_DATA_ERROR_2 та EDITOR.UPLOAD_DATA_ERROR_3) 7. Система обробляє та імпортує до бази даних системи нові статистичні дані 8. Редактор отримує підтвердження про успішний імпорт до бази даних системи нових статистичних даних 9. Редактор закінчує взаємодію
ID: EDITOR.EDIT_DATA НАЗВА: Редагувати наявні статистичні дані УЧАСНИКИ: Редактор, Система ПЕРЕДУМОВИ: Редактор бажає редагувати статистичні дані, що наявні у базі даних системи РЕЗУЛЬТАТ: Зміни, внесені до обраних статистичних даних ВИКЛЮЧНІ СИТУАЦІЇ: Внесені зміни не задовольняють умови - EDITOR.EDIT_DATA_ERROR ОСНОВНИЙ СЦЕНАРІЙ: 1. Редактор розпочинає взаємодію 2. Редактор входить до свого облікового запису на сайті та переходить до панелі управління даними 3. Редактор обирає опцію редагування даних на сайті 4. Редактор обирає дані, які потребують редагування 5. Редактор вносить потрібні зміни до статистичних даних 6. Редактор натискає на кнопку для збереження внесених змін 7. Система перевіряє чи задовольняють внесені зміни умови (можлива EDITOR.EDIT_DATA_ERROR) 8. Система зберігає зміни, внесені до обраних статистичних даних 9. Редактор отримує підтвердження про успішне збереження змін, внесених до обраних статистичних даних 10. Редактор закінчує взаємодію
ID: EDITOR.PUBLISH_DATA НАЗВА: Опублікувати статистичні дані на сайті УЧАСНИКИ: Редактор, Система ПЕРЕДУМОВИ: Редактор має готові до публікації статистичні дані РЕЗУЛЬТАТ: Опубліковані статистичні дані доступні для перегляду іншими користувачами ВИКЛЮЧНІ СИТУАЦІЇ: Публікація даних відхилена адміністратором - EDITOR.PUBLISH_DATA_ERROR ОСНОВНИЙ СЦЕНАРІЙ: 1. Редактор розпочинає взаємодію 2. Редактор входить до свого облікового запису на сайті та переходить до панелі управління даними 3. Редактор обирає опцію публікації даних на сайті 4. Редактор обирає дані, які він бажає опублікувати 5. Система відправляє дані на перевірку до адміністратора (можлива EDITOR.PUBLISH_DATA_ERROR) 6. Система публікує статистичні дані на сайті 7. Система надає доступ користувачам до опублікованих на сайті статистичних даних 8. Редактор отримує підтвердження про успішну публікацію статистичних даних на сайті 9. Редактор закінчує взаємодію
ID: EDITOR.REMOVE_DATA НАЗВА: Видалити статистичні дані УЧАСНИКИ: Редактор, Система ПЕРЕДУМОВИ: Редактор бажає видалити якісь статистичні дані з бази даних системи РЕЗУЛЬТАТ: Відсутність статистичних даних у базі даних системи ВИКЛЮЧНІ СИТУАЦІЇ: Відмовлено у видаленні через те, що дані опубліковані, тому потрібно спочатку закрити їх для користувачів - EDITOR.REMOVE_DATA_ERROR ОСНОВНИЙ СЦЕНАРІЙ: 1. Редактор розпочинає взаємодію 2. Редактор входить до свого облікового запису на сайті та переходить до панелі управління даними 3. Редактор обирає опцію видалення даних на сайті 4. Редактор обирає дані, які він бажає видалити 5. Система перевіряє чи обрані дані опубліковані (можлива EDITOR.REMOVE_DATA_ERROR) 6. Система видаляє обрані редактором дані з бази даних системи 7. Редактор отримує підтвердження про успішне видалення обраних статистичних даних 8. Редактор закінчує взаємодію
Адміністратор
ID: ADMIN.PUBLICATION_VERIFICATION НАЗВА: Переглянути заявки на публікацію УЧАСНИКИ: Адміністратор, Система ПЕРЕДУМОВИ: Система спрямовує від редактора заявку на публікацію статистичних даних РЕЗУЛЬТАТ: Опубліковані на сайті статистичні дані ВИКЛЮЧНІ СИТУАЦІЇ: Адміністратор відхиляє публікацію - ADMIN.PUBLICATION_VERIFICATION_ERROR ОСНОВНИЙ СЦЕНАРІЙ: 1. Система відправляє запит на публікацію адміністратору 2. Адміністратор розпочинає взаємодію 3. Адміністратор переходить до панелі адміністратора та обирає опцію управляння заявками на публікацію 4. Адміністратор натискає на заявку для її перегляду 5. Адміністратор перевіряє чи готові дані до публікації (можлива ADMIN.PUBLICATION_VERIFICATION_ERROR) 6. Адміністратор підтверджує публікацію даних 7. Система надає користувачам доступ до опублікованих на сайті статистичних даних 8. Адміністратор отримує підтвердження про успішну публікацію статистичних даних 9. Адміністратор закінчує взаємодію
ID: ADMIN.USER_BLOCKING НАЗВА: Заблокувати обліковий запис користувача УЧАСНИКИ: Адміністратор, Система ПЕРЕДУМОВИ: Адміністратор приймає рішення заблокувати обліковий запис деякого користувача РЕЗУЛЬТАТ: Заборона використання облікового запису деякого користувача на сайті ВИКЛЮЧНІ СИТУАЦІЇ: Відсутні ОСНОВНИЙ СЦЕНАРІЙ: 1. Адміністратор розпочинає взаємодію 2. Адміністратор переходить до панелі керування користувачами 3. Адміністратор обирає опцію блокування облікового запису користувача 4. Адміністратор обирає обліковий запис, який потрібно заблокувати 5. Система запитує чи справді потрібно заблокувати цей обліковий запис 6. Адміністратор підтверджує блокування 7. Система встановлює заборону використання облікового запису деякого користувача на сайті 8. Адміністратор отримує підтвердження про успішне встановлення заборони використання облікового запису деякого користувача на сайті 9. Адміністратор закінчує взаємодію
ID: ADMIN.USER_DELETION НАЗВА: Видалити обліковий запис користувача УЧАСНИКИ: Адміністратор, Система ПЕРЕДУМОВИ: Адміністратор приймає рішення видалити обліковий запис деякого користувача РЕЗУЛЬТАТ: Повне видалення облікового запису деякого користувача ВИКЛЮЧНІ СИТУАЦІЇ: Відсутні ОСНОВНИЙ СЦЕНАРІЙ: 1. Адміністратор розпочинає взаємодію 2. Адміністратор переходить до панелі керування користувачами 3. Адміністратор обирає опцію видалення облікового запису користувача 4. Адміністратор обирає обліковий запис, який потрібно видалити 5. Система запитує чи справді потрібно видалити цей обліковий запис 6. Адміністратор підтверджує видалення 7. Система повністю видаляє обліковий запис деякого користувача 8. Адміністратор отримує підтвердження про повне видалення облікового запису деякого користувача 9. Адміністратор закінчує взаємодію
Короткий огляд продукту Вебсайт має три можливі категорії користувачів: адміністратори, редактори та звичайні користувачі. Адміністратори мають повний контроль над сайтом, включаючи управління користувачами й контентом. Вони можуть встановлювати або ж змінювати різні правила щодо публікації інформації. Редактори відповідають за створення та редагування даних для публікацій, забезпечуючи актуальність та правдивість інформації. Звичайні користувачі мають можливість переглядати різні статистичні дані, порівнювати їх і проводити аналіз. Самі ж дані будуть представлені у вигляді графіків, діаграм, таблиць тощо. Також, окрім звичного пошуку, всі дані будуть структуровані за категоріями, що значно полегшить пошук необхідної інформації.
Функціональність Користувач Пошук та фільтрація різних статистичних даних за допомогою пошуковика та окремих розподілених категорій. Перегляд статистичних даних у вигляді таблиці та графіків та можливість візуалізувати у діаграми, виділення на карті світу, країни тощо. Порівняння статистичних даних різних країн з візуалізацією на карті світу. Завантаження статистичних даних у доступному форматі.
Редактор Завантаження на сайт нових даних (візуалізацій, графіків, діаграм тощо). Редагування, оформлення статистичних даних на сайті, підготовка до публікації. Публікація статистичних даних (після дозволу адміністратора). Видалення даних з сайту або ж просто закриття їх від користувачів.
Адміністратор Управління обліковими записами користувачів (блокування, видалення). Контроль контенту на сайті (можливість видаляти публікації, можливість не давати дозвіл на публікацію тощо). Зміна правил та умов сайту.
Практичність Немає потреби встановлення (вебсайт) Зручний та приємний у використанні інтерфейс Можливість роботи з декількох платформ Можливість завантаження потрібних даних у зручному форматі Надійність Дані зберігаються на стороні сервера Конфіденційні дані шифруються Використання ORM для захисту від SQL-ін'єкцій Постійне тестування коду, щоб виявляти помилки та удосконалювати систему Продуктивність Оптимальна та надійна Система Управління Базами Даних (СУБД) Оптимізація запитів до бази даних для оптимальної швидкості виконання Використання механізму кешування для збереження часто запитуваних даних на рівні вебсервера або навіть на рівні клієнтів Система моніторингу для постійного відстеження продуктивності вебсайту і бази даних Механізми скасування довгих або надто складних запитів, щоб не блокувати інші операції Експлуатаційна придатність Весь програмний код повинен бути чистим та читабельним. Повинен бути написаний відповідно до принципів DRY та SOLID Всі зміни в програмному коді повинні фіксуватися у системі контролю версій, такій як Git Усі виконувані та статичні файли повинні мати чітку структуру та бути організовані в логічних каталогах Потрібно уникати хардкодних посилань та конфігурацій Наявність системи автоматичного тестування для виявлення помилок під час розробки