From 8574bf865f962d5faafb42d3f0dfa000ff037e88 Mon Sep 17 00:00:00 2001 From: 7gl6 <7xglx6@gmail.com> Date: Sun, 19 May 2024 16:13:22 +0300 Subject: [PATCH 01/14] added an analysis of the subject area --- docs/requirements/state-of-the-art.md | 38 +++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 docs/requirements/state-of-the-art.md diff --git a/docs/requirements/state-of-the-art.md b/docs/requirements/state-of-the-art.md new file mode 100644 index 00000000..40d3a93b --- /dev/null +++ b/docs/requirements/state-of-the-art.md @@ -0,0 +1,38 @@ +# Аналіз предметної області + +## Вступ + +*У цьому розділі ми поглибимо наше розуміння предметної області, пов'язаної з організацією та управлінням опитуваннями +експертів. Ми розглянемо ключові визначення, різноманітні підходи та методи вирішення завдань, а також проведемо +порівняльний аналіз існуючих інструментів управління експертними опитуваннями.* + +*Цей аналіз допоможе нам краще зрозуміти потреби та вимоги користувачів у сфері опитування експертів, а також визначити +оптимальні підходи та інструменти для досягнення поставлених цілей. В результаті ми зможемо розробити більш ефективну та +зручну систему для організації та проведення експертних опитувань.* + +## Основні визначення + +### Експертне опитування + +Експертне опитування – це метод збору й обробки думок фахівців (експертів) з певної галузі з метою отримання +узагальнених оцінок, прогнозів чи рекомендацій щодо складних проблем, які неможливо вирішити лише за допомогою +традиційних методів дослідження.[[1]](#link1) + +### Експерт + +Експерт - висококваліфікований спеціаліст, який має вищу освіту, відповідну кваліфікацію і професійні знання з +питань, що досліджуються, виконує службові обов'язки, пов'язані з провадженням діяльності у відповідній галузі, +безпосередньо проводить експертизу та несе персональну відповідальність за достовірність і повноту аналізу, +обґрунтованість висновків відповідно до завдання на проведення експертизи.[[2]](#link2) + +### Основні характеристики експерту + +Показники екпертного потенціалу [[2]](#link2): + +- Значний досвід роботи +- Високий рівень інтелекту +- Престижна освіта +- Активна наукова діяльність +- Існування публікацій у престижних виданнях +- Визнання колег +- Високий особистий статус \ No newline at end of file From 17c18e612b95146d072b6e17176c1aac75988d1d Mon Sep 17 00:00:00 2001 From: 7gl6 <7xglx6@gmail.com> Date: Sun, 19 May 2024 16:13:22 +0300 Subject: [PATCH 02/14] added an analysis of the subject area --- docs/requirements/state-of-the-art.md | 38 +++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 docs/requirements/state-of-the-art.md diff --git a/docs/requirements/state-of-the-art.md b/docs/requirements/state-of-the-art.md new file mode 100644 index 00000000..40d3a93b --- /dev/null +++ b/docs/requirements/state-of-the-art.md @@ -0,0 +1,38 @@ +# Аналіз предметної області + +## Вступ + +*У цьому розділі ми поглибимо наше розуміння предметної області, пов'язаної з організацією та управлінням опитуваннями +експертів. Ми розглянемо ключові визначення, різноманітні підходи та методи вирішення завдань, а також проведемо +порівняльний аналіз існуючих інструментів управління експертними опитуваннями.* + +*Цей аналіз допоможе нам краще зрозуміти потреби та вимоги користувачів у сфері опитування експертів, а також визначити +оптимальні підходи та інструменти для досягнення поставлених цілей. В результаті ми зможемо розробити більш ефективну та +зручну систему для організації та проведення експертних опитувань.* + +## Основні визначення + +### Експертне опитування + +Експертне опитування – це метод збору й обробки думок фахівців (експертів) з певної галузі з метою отримання +узагальнених оцінок, прогнозів чи рекомендацій щодо складних проблем, які неможливо вирішити лише за допомогою +традиційних методів дослідження.[[1]](#link1) + +### Експерт + +Експерт - висококваліфікований спеціаліст, який має вищу освіту, відповідну кваліфікацію і професійні знання з +питань, що досліджуються, виконує службові обов'язки, пов'язані з провадженням діяльності у відповідній галузі, +безпосередньо проводить експертизу та несе персональну відповідальність за достовірність і повноту аналізу, +обґрунтованість висновків відповідно до завдання на проведення експертизи.[[2]](#link2) + +### Основні характеристики експерту + +Показники екпертного потенціалу [[2]](#link2): + +- Значний досвід роботи +- Високий рівень інтелекту +- Престижна освіта +- Активна наукова діяльність +- Існування публікацій у престижних виданнях +- Визнання колег +- Високий особистий статус \ No newline at end of file From 06e2b8810a2897b69150bcd0bde56b1e6f9f0a4a Mon Sep 17 00:00:00 2001 From: yomadano Date: Sun, 19 May 2024 15:35:21 +0200 Subject: [PATCH 03/14] add requirements --- docs/requirements/state-of-the-art.md | 43 ++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/docs/requirements/state-of-the-art.md b/docs/requirements/state-of-the-art.md index 40d3a93b..722a114d 100644 --- a/docs/requirements/state-of-the-art.md +++ b/docs/requirements/state-of-the-art.md @@ -35,4 +35,45 @@ - Активна наукова діяльність - Існування публікацій у престижних виданнях - Визнання колег -- Високий особистий статус \ No newline at end of file +- Високий особистий статус + +### Переваги та недоліки експертного опитування + +Переваги [[3]](#link3): + +- Дозволяє отримати інформацію з проблем, які неможливо дослідити традиційними методами. +- Забезпечує різнобічне й неупереджене освітлення проблеми. +- Може використовуватися для прогнозування й оцінки ризиків. +- Сприяє кращому розумінню складних проблем. + +Недоліки: + +- Результати опитування залежать від компетентності й об'єктивності експертів. +- Можливі упередження з боку експертів. +- Висока вартість проведення опитування. + +### Застосування експертних опитувань + +Експертне опитування використовується в різних галузях, таких як [[4]](#link4): + +- Наука й техніка: Прогнозування науково-технічного прогресу, оцінка перспектив розвитку галузей науки й техніки, + розробка нових продуктів і технологій. +- Економіка: Оцінка перспектив розвитку галузей економіки, визначення ризиків інвестиційних проектів, розробка + економічних прогнозів. +- Соціологія: Вивчення суспільної думки, оцінка соціальних проблем, прогнозування соціальних змін. +- Управління: Прийняття управлінських рішень, оцінка ефективності діяльності підприємств та організацій, розробка + стратегій розвитку. + +## Підходи до проведення експертного опитування + +Існує декілька підходів до проведення експертного опитування, які можна використовувати залежно від мети дослідження, +наявних ресурсів та інших факторів. [[5]](#link5) + +- Кількісний підхід: Цей підхід використовується, коли важливо отримати кількісні дані, наприклад, оцінки експертів + щодо ймовірності певної події або важливості певного фактора. Для збору даних використовуються анкети, що містять + закриті питання з фіксованими варіантами відповідей. +- Якісний підхід: Цей підхід використовується, коли важливо отримати більш глибоке розуміння думок експертів, їхні + міркування та аргументи. Для збору даних використовуються інтерв'ю, фокус-групи або інші методи, що дозволяють + експертам вільно висловлювати свої думки. +- Комбінований підхід: Цей підхід поєднує в собі елементи кількісного й якісного підходів. Він може бути корисним, + коли необхідно отримати як кількісні дані, так і більш детальне розуміння думок експертів. \ No newline at end of file From 4c6f8b909ff2c3d1519ad70e98fed76ccbba0f2b Mon Sep 17 00:00:00 2001 From: ismailosmnv Date: Sun, 19 May 2024 15:41:37 +0200 Subject: [PATCH 04/14] add requirements --- docs/requirements/state-of-the-art.md | 46 ++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/docs/requirements/state-of-the-art.md b/docs/requirements/state-of-the-art.md index 722a114d..fb96797d 100644 --- a/docs/requirements/state-of-the-art.md +++ b/docs/requirements/state-of-the-art.md @@ -76,4 +76,48 @@ міркування та аргументи. Для збору даних використовуються інтерв'ю, фокус-групи або інші методи, що дозволяють експертам вільно висловлювати свої думки. - Комбінований підхід: Цей підхід поєднує в собі елементи кількісного й якісного підходів. Він може бути корисним, - коли необхідно отримати як кількісні дані, так і більш детальне розуміння думок експертів. \ No newline at end of file + коли необхідно отримати як кількісні дані, так і більш детальне розуміння думок експертів. +### Способи проведення експертного опитування + +Класифікація: + +Існує декілька класифікацій видів експертного опитування, але найпоширенішою є класифікація за способом проведення [[6]](#link6): + +- Анкетування: Експертам надається анкета з чітко сформульованими питаннями, на які вони дають письмові відповіді. + Цей метод є найпростішим й найдешевшим, але він не дозволяє отримати глибоке розуміння думок експертів. +- Інтерв'ю: Експертів опитують у формі усного інтерв'ю, яке може бути вільним або структурованим. Цей метод дозволяє + отримати більш детальну інформацію, адже експерти мають можливість пояснити свої думки й аргументувати свої позиції. +- Метод Дельфі: Експерти послідовно й анонімно отримують результати опитування інших експертів, що дає їм можливість + скоригувати свої початкові оцінки. Цей метод використовується для зменшення впливу упередженостей й отримання більш + консенсусної думки експертів. +- Метод колективної генерації ідей: Експерти збираються разом, щоб обговорити проблему й виробити спільні ідеї та + рішення. Цей метод може бути корисним для генерування нових й нестандартних ідей. + +### Вибір методу опитування + +Вибір методу опитування залежить від мети дослідження, наявних ресурсів та інших факторів. Важливо враховувати такі +аспекти[[7]](#link7): + +- Кількість експертів: Якщо вам потрібно опитувати велику кількість експертів, то анкетування може бути найкращим + вибором. Якщо ж вам потрібно опитувати лише декілька експертів, то інтерв'ю може бути більш продуктивним. +- Необхідний рівень деталізації: Якщо вам потрібна детальна інформація, то інтерв'ю або метод Дельфі можуть бути + кращими виборами. Якщо ж вам достатньо загальної інформації, то анкетування може бути достатнім. +- Наявність бюджету: Інтерв'ю й метод Дельфі можуть бути більш дорогими, ніж анкетування, адже вони потребують + більше часу й ресурсів. + +### Анкетування: опис, методи, переваги та недоліки + +Анкетування - це метод збору інформації шляхом опитування респондентів за допомогою анкет. Анкети - це письмові +набори запитань, на які респонденти дають відповіді. Цей метод використовується для вивчення думок, поглядів, поведінки +та інших характеристик людей[[8]](#link8). + +Методи анкетування + +Існує два основних методи анкетування: + +- Очне анкетування: Респонденти заповнюють анкети в присутності інтерв'юера. Цей метод дозволяє інтерв'юеру + контролювати + процес заповнення анкети й ставити уточнюючі запитання. +- Заочне анкетування: Респонденти заповнюють анкети самостійно, без присутності інтерв'юера. Цей метод може бути + більш + зручним для респондентів, але він не дозволяє інтерв'юеру контролювати процес заповнення анкети. \ No newline at end of file From 9c3478b36caababf60ce04d0c05ea3a02a6c0e55 Mon Sep 17 00:00:00 2001 From: Tanya Date: Sun, 19 May 2024 16:45:53 +0300 Subject: [PATCH 05/14] add requirements for lab 1 --- .idea/.gitignore | 8 +++ .idea/db-course-theme1.iml | 9 +++ .idea/misc.xml | 6 ++ .idea/modules.xml | 8 +++ .idea/vcs.xml | 6 ++ docs/.vuepress/config.js | 6 +- docs/README.md | 17 ++++-- docs/requirements/README.md | 83 ++++++++++++++++++++++----- docs/requirements/state-of-the-art.md | 80 +++++++++++++++++++++++++- package.json | 4 +- publish.sh | 2 +- 11 files changed, 203 insertions(+), 26 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/db-course-theme1.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..13566b81 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/db-course-theme1.iml b/.idea/db-course-theme1.iml new file mode 100644 index 00000000..d6ebd480 --- /dev/null +++ b/.idea/db-course-theme1.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..47478b91 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..5d412a89 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 12b64ef4..af300e97 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -15,7 +15,7 @@ module.exports = { }] ], port: 3030, - base: '/docs/', + base: 'edu_db_labs_group1', theme: 'cool', // dest: 'dist', head: [ @@ -74,7 +74,7 @@ module.exports = { lastUpdated: 'Останнє оновлення', // string | boolean // Assumes GitHub. Can also be a full GitLab url. - repo: 'https://github.com/boldak/edu-dis-labs', + repo: 'https://github.com/Oksuzova/db-course-theme1', // Customising the header label // Defaults to "GitHub"/"GitLab"/"Bitbucket" depending on `themeConfig.repo` repoLabel: 'Github', @@ -93,7 +93,7 @@ module.exports = { // editLinkText: 'Ви можете покращити цю сторінку' }, - title: 'Назва проєкту', + title: '1.Система організації та управління опитуваннями експертів', description: 'Лабораторні роботи з дисципліни "Розподілені інформаційні системи"', configureWebpack: { resolve: { diff --git a/docs/README.md b/docs/README.md index 499febf7..2f63a0ad 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,17 +3,26 @@ home: true actionText: Розпочати → actionLink: /intro/ -footer: "ECL 2.0 Licensed | Copyright © [YYYY] [Your Name]" +footer: "ECL 2.0 Licensed | Copyright © [2024] [Tanya Oks]" --- **Виконали:** -*студенти [X]-го курсу, групи (шифр групи)* +*студентка 2-го курсу, групи ІО-з21)* + **Оксюзова Тетяна** Telegram -**[ім’я ПРІЗВИЩЕ] [Посилання email, tg, fb]** +*студентка 2-го курсу, групи ІО-з21)* + **Морозова Єлізавета** Telegram -**[ім’я ПРІЗВИЩЕ] [Посилання email, tg, fb]** +*студент 2-го курсу, групи ІО-з21)* + **Булах Лєонід** Telegram + +*студент 2-го курсу, групи ІО-з21)* + **Батюк Богдан** Telegram + +*студент 2-го курсу, групи ІО-з21)* + **Османов Ізмаїл** Telegram **Керівник** diff --git a/docs/requirements/README.md b/docs/requirements/README.md index b56ec92f..1d05e4e7 100644 --- a/docs/requirements/README.md +++ b/docs/requirements/README.md @@ -1,25 +1,78 @@ -# Розроблення вимог до системи -## Основні визначення +## Порівняльна характеристика існуючих засобів вирішення завдання -*[Розділ містить визначення термінів та скорочень, які використовуються при аналізі предметної області.]* +**[SurveyMonkey](https://www.surveymonkey.com/)** — Це популярна платформа для опитування, яка пропонує безкоштовний та +платний плани. SurveyMonkey має широкий спектр функцій, які дозволяють створювати складні опитування, збирати дані та +аналізувати результати. -## Підходи та способи вирішення завдання +**[Google Forms](https://www.google.com/forms/)** — Це безкоштовна платформа для опитування від Google. Google Forms має +простіший інтерфейс користувача, ніж SurveyMonkey, але він все одно пропонує широкий спектр функцій. -*[Розділ містить опис підходів, моделей та способів вирішення завдання.]* +**[Qualtrics](https://www.qualtrics.com/)** — Це потужна платформа для опитування, яка пропонує широкий спектр функцій, +включаючи можливість створювати розгалужені опитування, використовувати логіку опитування та збирати мультимедійні дані. +Qualtrics має платні плани. -## Порівняльна характеристика існуючих засобів вирішення завдання +**[Alchemer](https://www.alchemer.com/)** — це платна платформа опитувань, яка пропонує широкий спектр функцій, +включаючи можливість створювати анкети, збирати відповіді, аналізувати дані та багато іншого. -*[Розділ містить опис існуючих програм, інформаційних систем, сервісів, тощо, призначених для вирішення -завдання. Дається порівняльна характеристика властивостей FURPS:* -- *Functionality (функциональні вимоги)* -- *Usability (вимоги до зручності роботи)* -- *Reliability (вимоги до надійності)* -- *Performance (вимоги до продуктивності)* -- *Supportability (вимоги до підтримки)* +🟢 - критерій виконано +🟠 - критерій виконано не повністю +🔴 - критерій не виконано - *(у вигляді таблиці).]* +| Властивості | Наша система | SurveyMonkey | Google Forms | Qualtrics | Alchemer | +|--------------------------------|:------------:|:------------:|:------------:|:---------:|:--------:| +| **Функціональні вимоги** | | | | | | +| Створення опитування | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Збір даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Аналіз даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| **Вимоги до зручності роботи** | | | | | | +| Інтерфейс користувача | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | +| Створення опитування | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | +| Налаштування дизайну | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | +| Зручність аналізу | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | +| Підтримка мов | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| **Вимоги до надійності** | | | | | | +| Захист даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Резервне копіювання даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Доступність | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Відновлення після збоїв | 🟢 | 🟢 | 🟠 | 🟢 | 🟢 | +| Безпека | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| **Вимоги до продуктивності** | | | | | | +| Швидкість створення опитування | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Швидкість збору даних | 🟢 | 🟢 | 🟢 | 🔴 | 🟢 | +| Час обробки даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | +| Масштабованість | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Пропускна здатність | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | +| **Вимоги до підтримки** | | | | | | +| Ресурси самообслуговування | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Підтримка електронною поштою | 🟢 | 🟢 | 🔴 | 🟢 | 🟢 | +| Підтримка чату | 🟢 | 🟢 | 🔴 | 🟢 | 🟢 | +| Години роботи підтримки | 🟢 | 🟢 | 🟢 | 🟠 | 🟢 | +| Мови підтримки | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | ## Висновки -*[Робляться висновки щодо доцільності розробки нової або модифікації існуючої інформаційної системи, необхідності та способів інтеграції з системами(сервісами) третіх сторін, тощо.]* \ No newline at end of file +Система організації та управління опитуваннями експертів має важливе значення для аналізу бізнес-процесів та вивчення +вимог ринку. Серед наведених систем найбільш привабливим варіантом для вирішення цієї задачі є "SurveyMonkey", +незважаючи на деякі його недоліки. Серед цих недоліків можна відзначити складний інтерфейс та обмеження на проведення +опитувань серед великої кількості людей лише у платній версії. З цими обмеженнями на увазі, розробка власної системи, де +клієнти можуть отримувати доступ до опитувань безкоштовно, має сенс. + +## Посилання + +1. + Експертне опитування +2. + Експерт +3. + Переваги та недоліки експертного опитування +4. + Застосування експертних опитувань +5. + Підходи до проведення експертного опитування +6. + Способи проведення експертного опитування +7. + Вибір методу опитування +8. + Анкетування: опис, методи, переваги та недоліки diff --git a/docs/requirements/state-of-the-art.md b/docs/requirements/state-of-the-art.md index fb96797d..839dec8f 100644 --- a/docs/requirements/state-of-the-art.md +++ b/docs/requirements/state-of-the-art.md @@ -120,4 +120,82 @@ процес заповнення анкети й ставити уточнюючі запитання. - Заочне анкетування: Респонденти заповнюють анкети самостійно, без присутності інтерв'юера. Цей метод може бути більш - зручним для респондентів, але він не дозволяє інтерв'юеру контролювати процес заповнення анкети. \ No newline at end of file + зручним для респондентів, але він не дозволяє інтерв'юеру контролювати процес заповнення анкети. + +## Порівняльна характеристика існуючих засобів вирішення завдання + +**[SurveyMonkey](https://www.surveymonkey.com/)** — Це популярна платформа для опитування, яка пропонує безкоштовний та +платний плани. SurveyMonkey має широкий спектр функцій, які дозволяють створювати складні опитування, збирати дані та +аналізувати результати. + +**[Google Forms](https://www.google.com/forms/)** — Це безкоштовна платформа для опитування від Google. Google Forms має +простіший інтерфейс користувача, ніж SurveyMonkey, але він все одно пропонує широкий спектр функцій. + +**[Qualtrics](https://www.qualtrics.com/)** — Це потужна платформа для опитування, яка пропонує широкий спектр функцій, +включаючи можливість створювати розгалужені опитування, використовувати логіку опитування та збирати мультимедійні дані. +Qualtrics має платні плани. + +**[Alchemer](https://www.alchemer.com/)** — це платна платформа опитувань, яка пропонує широкий спектр функцій, +включаючи можливість створювати анкети, збирати відповіді, аналізувати дані та багато іншого. + +🟢 - критерій виконано +🟠 - критерій виконано не повністю +🔴 - критерій не виконано + +| Властивості | Наша система | SurveyMonkey | Google Forms | Qualtrics | Alchemer | +|--------------------------------|:------------:|:------------:|:------------:|:---------:|:--------:| +| **Функціональні вимоги** | | | | | | +| Створення опитування | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Збір даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Аналіз даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| **Вимоги до зручності роботи** | | | | | | +| Інтерфейс користувача | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | +| Створення опитування | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | +| Налаштування дизайну | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | +| Зручність аналізу | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | +| Підтримка мов | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| **Вимоги до надійності** | | | | | | +| Захист даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Резервне копіювання даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Доступність | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Відновлення після збоїв | 🟢 | 🟢 | 🟠 | 🟢 | 🟢 | +| Безпека | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| **Вимоги до продуктивності** | | | | | | +| Швидкість створення опитування | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Швидкість збору даних | 🟢 | 🟢 | 🟢 | 🔴 | 🟢 | +| Час обробки даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | +| Масштабованість | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Пропускна здатність | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | +| **Вимоги до підтримки** | | | | | | +| Ресурси самообслуговування | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Підтримка електронною поштою | 🟢 | 🟢 | 🔴 | 🟢 | 🟢 | +| Підтримка чату | 🟢 | 🟢 | 🔴 | 🟢 | 🟢 | +| Години роботи підтримки | 🟢 | 🟢 | 🟢 | 🟠 | 🟢 | +| Мови підтримки | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | + +## Висновки + +Система організації та управління опитуваннями експертів має важливе значення для аналізу бізнес-процесів та вивчення +вимог ринку. Серед наведених систем найбільш привабливим варіантом для вирішення цієї задачі є "SurveyMonkey", +незважаючи на деякі його недоліки. Серед цих недоліків можна відзначити складний інтерфейс та обмеження на проведення +опитувань серед великої кількості людей лише у платній версії. З цими обмеженнями на увазі, розробка власної системи, де +клієнти можуть отримувати доступ до опитувань безкоштовно, має сенс. + +## Посилання + +1. + Експертне опитування +2. + Експерт +3. + Переваги та недоліки експертного опитування +4. + Застосування експертних опитувань +5. + Підходи до проведення експертного опитування +6. + Способи проведення експертного опитування +7. + Вибір методу опитування +8. + Анкетування: опис, методи, переваги та недоліки diff --git a/package.json b/package.json index a4dc595a..9312c4ac 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { - "name": "dis-edu", + "name": "edu_db_labs_group1", "version": "2.1.0", "main": "index.js", "description": "Databases course work template", - "repository": "https://github.com/boldak/dis-edu", + "repository": "https://github.com/Oksuzova/db-course-theme1", "author": "Andrey Boldak ", "license": "ECL 2.0", "scripts": { diff --git a/publish.sh b/publish.sh index 8dcaea4c..787f3bda 100644 --- a/publish.sh +++ b/publish.sh @@ -20,6 +20,6 @@ git commit -m 'deploy' # git push -f git@github.com:boldak/.github.io.git master # if you are deploying to https://.github.io/ -git push -f https://github.com/boldak/dis-edu.git master:gh-pages +git push -f https://github.com/Oksuzova/db-course-theme1.git master:gh-pages cd - From 5c35889d83152995663a5a2903cf7f0acb55d21d Mon Sep 17 00:00:00 2001 From: Tanya Date: Sun, 19 May 2024 16:46:41 +0300 Subject: [PATCH 06/14] add requirements for lab 1 --- docs/requirements/README.md | 78 ------------------------------------- 1 file changed, 78 deletions(-) diff --git a/docs/requirements/README.md b/docs/requirements/README.md index 1d05e4e7..e69de29b 100644 --- a/docs/requirements/README.md +++ b/docs/requirements/README.md @@ -1,78 +0,0 @@ - -## Порівняльна характеристика існуючих засобів вирішення завдання - -**[SurveyMonkey](https://www.surveymonkey.com/)** — Це популярна платформа для опитування, яка пропонує безкоштовний та -платний плани. SurveyMonkey має широкий спектр функцій, які дозволяють створювати складні опитування, збирати дані та -аналізувати результати. - -**[Google Forms](https://www.google.com/forms/)** — Це безкоштовна платформа для опитування від Google. Google Forms має -простіший інтерфейс користувача, ніж SurveyMonkey, але він все одно пропонує широкий спектр функцій. - -**[Qualtrics](https://www.qualtrics.com/)** — Це потужна платформа для опитування, яка пропонує широкий спектр функцій, -включаючи можливість створювати розгалужені опитування, використовувати логіку опитування та збирати мультимедійні дані. -Qualtrics має платні плани. - -**[Alchemer](https://www.alchemer.com/)** — це платна платформа опитувань, яка пропонує широкий спектр функцій, -включаючи можливість створювати анкети, збирати відповіді, аналізувати дані та багато іншого. - -🟢 - критерій виконано -🟠 - критерій виконано не повністю -🔴 - критерій не виконано - -| Властивості | Наша система | SurveyMonkey | Google Forms | Qualtrics | Alchemer | -|--------------------------------|:------------:|:------------:|:------------:|:---------:|:--------:| -| **Функціональні вимоги** | | | | | | -| Створення опитування | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | -| Збір даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | -| Аналіз даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | -| **Вимоги до зручності роботи** | | | | | | -| Інтерфейс користувача | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | -| Створення опитування | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | -| Налаштування дизайну | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | -| Зручність аналізу | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | -| Підтримка мов | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | -| **Вимоги до надійності** | | | | | | -| Захист даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | -| Резервне копіювання даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | -| Доступність | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | -| Відновлення після збоїв | 🟢 | 🟢 | 🟠 | 🟢 | 🟢 | -| Безпека | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | -| **Вимоги до продуктивності** | | | | | | -| Швидкість створення опитування | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | -| Швидкість збору даних | 🟢 | 🟢 | 🟢 | 🔴 | 🟢 | -| Час обробки даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | -| Масштабованість | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | -| Пропускна здатність | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | -| **Вимоги до підтримки** | | | | | | -| Ресурси самообслуговування | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | -| Підтримка електронною поштою | 🟢 | 🟢 | 🔴 | 🟢 | 🟢 | -| Підтримка чату | 🟢 | 🟢 | 🔴 | 🟢 | 🟢 | -| Години роботи підтримки | 🟢 | 🟢 | 🟢 | 🟠 | 🟢 | -| Мови підтримки | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | - -## Висновки - -Система організації та управління опитуваннями експертів має важливе значення для аналізу бізнес-процесів та вивчення -вимог ринку. Серед наведених систем найбільш привабливим варіантом для вирішення цієї задачі є "SurveyMonkey", -незважаючи на деякі його недоліки. Серед цих недоліків можна відзначити складний інтерфейс та обмеження на проведення -опитувань серед великої кількості людей лише у платній версії. З цими обмеженнями на увазі, розробка власної системи, де -клієнти можуть отримувати доступ до опитувань безкоштовно, має сенс. - -## Посилання - -1. - Експертне опитування -2. - Експерт -3. - Переваги та недоліки експертного опитування -4. - Застосування експертних опитувань -5. - Підходи до проведення експертного опитування -6. - Способи проведення експертного опитування -7. - Вибір методу опитування -8. - Анкетування: опис, методи, переваги та недоліки From e5807383b2abda5e9cede3ae98e75ddbc4eee3ec Mon Sep 17 00:00:00 2001 From: Tanya Date: Sun, 19 May 2024 17:05:42 +0300 Subject: [PATCH 07/14] add requirements for lab 1 --- docs/requirements/README.md | 4 ++++ docs/requirements/stakeholders-needs.md | 0 2 files changed, 4 insertions(+) create mode 100644 docs/requirements/stakeholders-needs.md diff --git a/docs/requirements/README.md b/docs/requirements/README.md index e69de29b..e8e3e4e4 100644 --- a/docs/requirements/README.md +++ b/docs/requirements/README.md @@ -0,0 +1,4 @@ +# Розроблення загальних вимог до системи + +- [Аналіз предметної області](/requirements/state-of-the-art.html) +- [Запити зацікавлених осіб](/requirements/stakeholders-needs.html) \ No newline at end of file diff --git a/docs/requirements/stakeholders-needs.md b/docs/requirements/stakeholders-needs.md new file mode 100644 index 00000000..e69de29b From aa9ef27145189ae8d30a66c8648dee3bdc87d515 Mon Sep 17 00:00:00 2001 From: Tanya Date: Tue, 21 May 2024 19:41:51 +0300 Subject: [PATCH 08/14] add lab 2 --- docs/.vuepress/config.js | 211 +++--- docs/requirements/README.md | 4 +- docs/use cases/README.md | 580 ++++++++++++++++ package-lock.json | 1295 ++--------------------------------- package.json | 3 +- 5 files changed, 738 insertions(+), 1355 deletions(-) create mode 100644 docs/use cases/README.md diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index af300e97..e3ce2157 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -1,113 +1,122 @@ // .vuepress/config.js module.exports = { - plugins: [ - '@vuepress/back-to-top', - '@vuepress/pwa', - { - serviceWorker: true, - updatePopup: true - }, - , - ['container', { - type: 'vue', - before: '
',
-      after: '
' - }] - ], - port: 3030, - base: 'edu_db_labs_group1', - theme: 'cool', - // dest: 'dist', - head: [ - ['link', { rel: 'icon', href: '/favicon.ico' }], - ['link', { rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css' }], - ['link', {href: 'https://fonts.googleapis.com/icon?family=Material+Icons', rel :'stylesheet'}], - - ], - themeConfig: { - // logo: './myAvatar.png', - sidebar: [ - - { - title: 'Вступ', - path:"/intro/" - }, + plugins: [ + '@vuepress/back-to-top', + '@vuepress/pwa', + { + serviceWorker: true, + updatePopup: true + }, + , + ['container', { + type: 'vue', + before: '
',
+            after: '
' + }] + ], + port: 3030, + // base: 'edu_db_labs_group1', + theme: 'cool', + // dest: 'dist', + head: [ + ['link', {rel: 'icon', href: '/favicon.ico'}], + ['link', {rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css'}], + ['link', {href: 'https://fonts.googleapis.com/icon?family=Material+Icons', rel: 'stylesheet'}], - { - title: 'Розроблення вимог до системи', - path:"/requirements/", - }, + ], + themeConfig: { + // logo: './myAvatar.png', + sidebar: [ - { - title: 'Проєктування архітектури системи', - path:"/design/" - }, + { + title: 'Вступ', + path: "/intro/" + }, - { - title: 'Реалізація інформаційного та програмного забезпечення', - path:"/software/" - }, + { + title: 'Розроблення вимог до системи', + path: "/requirements/", + children: [ + '/requirements/state-of-the-art', + '/requirements/stakeholders-needs', + ] + }, - { - title: 'Тестування працездатності системи', - path:"/test/" - }, - - { - title: 'Висновки', - path:"/conclusion/" - }, - - { - title: 'API', - path:"/api/" - } + { + title: 'Розроблення вимог до функціональности системи', + path:"/use cases/" + }, - ], - sidebarDepth: 2, - displayAllHeaders: true, // Default: false + { + title: 'Проєктування архітектури системи', + path: "/design/" + }, + { + title: 'Реалізація інформаційного та програмного забезпечення', + path: "/software/" + }, - nav: [ - { text: 'Початок', link: '/' }, - ], + { + title: 'Тестування працездатності системи', + path: "/test/" + }, - lastUpdated: 'Останнє оновлення', // string | boolean - // Assumes GitHub. Can also be a full GitLab url. - repo: 'https://github.com/Oksuzova/db-course-theme1', - // Customising the header label - // Defaults to "GitHub"/"GitLab"/"Bitbucket" depending on `themeConfig.repo` - repoLabel: 'Github', - - // Optional options for generating "Edit this page" link - - // if your docs are in a different repo from your main project: - // docsRepo: 'boldak/dis-edu', - // if your docs are not at the root of the repo: - docsDir: 'docs', - // if your docs are in a specific branch (defaults to 'master'): - docsBranch: 'master', - // defaults to false, set to true to enable - // editLinks: true, - // custom text for edit link. Defaults to "Edit this page" - // editLinkText: 'Ви можете покращити цю сторінку' - - }, - title: '1.Система організації та управління опитуваннями експертів', - description: 'Лабораторні роботи з дисципліни "Розподілені інформаційні системи"', - configureWebpack: { - resolve: { - alias: { - '@alias': '../img' - } - } - }, - markdown: { - extendMarkdown: md => { - md.set({ html: true }) - md.use(require('markdown-it-katex')) - md.use(require('markdown-it-plantuml')) - md.use(require('markdown-it-admonition')) + { + title: 'Висновки', + path: "/conclusion/" + }, + + { + title: 'API', + path: "/api/" + } + + ], + sidebarDepth: 2, + displayAllHeaders: true, // Default: false + + + nav: [ + {text: 'Початок', link: '/'}, + ], + + lastUpdated: 'Останнє оновлення', // string | boolean + // Assumes GitHub. Can also be a full GitLab url. + repo: 'https://github.com/Oksuzova/db-course-theme1', + // Customising the header label + // Defaults to "GitHub"/"GitLab"/"Bitbucket" depending on `themeConfig.repo` + repoLabel: 'Github', + + // Optional options for generating "Edit this page" link + + // if your docs are in a different repo from your main project: + // docsRepo: 'boldak/dis-edu', + // if your docs are not at the root of the repo: + docsDir: 'docs', + // if your docs are in a specific branch (defaults to 'master'): + docsBranch: 'master', + // defaults to false, set to true to enable + // editLinks: true, + // custom text for edit link. Defaults to "Edit this page" + // editLinkText: 'Ви можете покращити цю сторінку' + + }, + title: '1.Система організації та управління опитуваннями експертів', + description: 'Лабораторні роботи з дисципліни "Розподілені інформаційні системи"', + configureWebpack: { + resolve: { + alias: { + '@alias': '../img' + } + } + }, + markdown: { + extendMarkdown: md => { + md.set({html: true}) + md.use(require('markdown-it-katex')) + md.use(require('markdown-it-plantuml')) + md.use(require('markdown-it-admonition')) + } } - } } \ No newline at end of file diff --git a/docs/requirements/README.md b/docs/requirements/README.md index e8e3e4e4..434a19f0 100644 --- a/docs/requirements/README.md +++ b/docs/requirements/README.md @@ -1,4 +1,4 @@ # Розроблення загальних вимог до системи -- [Аналіз предметної області](/requirements/state-of-the-art.html) -- [Запити зацікавлених осіб](/requirements/stakeholders-needs.html) \ No newline at end of file +- [Аналіз предметної області](/requirements/state-of-the-art.md) +- [Запити зацікавлених осіб](/requirements/stakeholders-needs.md) \ No newline at end of file diff --git a/docs/use cases/README.md b/docs/use cases/README.md new file mode 100644 index 00000000..0c24c5a0 --- /dev/null +++ b/docs/use cases/README.md @@ -0,0 +1,580 @@ +# Модель прецедентів + +## Загальна схема + +
+ +@startuml + +actor "Користувач" as User +actor "Експерт" as Expert +actor "Адміністратор" as Admin + +Expert --u-|> User +Admin --u-|> Expert + +usecase "Login\nВхід у систему" as Login +usecase "Registration\nРеєстрація у системі" as Registration + +usecase "TakeSurvey\nПроходити опитування" as TakeSurvey +usecase "EditAnswers\nРедагувати відповіді" as EditAnswers + +usecase "CreateSurvey\nСтворювати опитування" as CreateSurvey +usecase "EditSurvey\nРедагувати опитування" as EditSurvey +usecase "AssignSurvey\Призначати опитування" as AssignSurvey +usecase "ViewStatistics\nПереглядати статистику" as ViewStatistics + +User -d-> Login +User -l-> Registration + +Expert -u-> TakeSurvey +Expert -l-> EditAnswers + +Admin -d-> CreateSurvey +Admin -r-> EditSurvey +Admin -l-> AssignSurvey +Admin -u-> ViewStatistics + +@enduml + +
+ +## Схема використання для Користувача + +
+ +@startuml + +actor "Користувач" as User + +usecase "Login\nВхід у систему" as Login +usecase "Registration\nРеєстрація у системі" as Registration + +User --> Login +User --> Registration +Login .u.> RecoveryPassword +Registration .u.> RegistrationWithEmail +@enduml +
+ +## Схема використання для Експерта + +
+ +@startuml + +actor "Експерт" as Expert + +usecase "TakeSurvey\nПроходити опитування" as TakeSurvey +usecase "EditAnswers\nРедагувати відповіді" as EditAnswers +usecase "SaveAnswers\nЗберегти опитування" as SaveAnswers + +Expert -r-> TakeSurvey +Expert -l-> EditAnswers +TakeSurvey .u.> SaveAnswers + +@enduml + +
+ +## Схема використання для Адміністратора + +
+ +@startuml + +actor "Адміністратор" as Admin + +usecase "CreateSurvey\n Створювати опитування" as CreateSurvey +usecase "EditSurvey\n Редагувати опитування" as EditSurvey +usecase "AssignSurvey\ Призначати опитування" as AssignSurvey +usecase "ViewStatistics\n Переглядати статистику" as ViewStatistics + +usecase "AddQuestion\n Додати питання" as AddQuestion +usecase "RemoveQuestion\ Видалити питання" as RemoveQuestion +usecase "RemoveSurvey\ Видалити опитування" as RemoveSurvey +usecase "UnassignSurveyFromExpert\n Знімати опитування з експерту" as UnassignSurveyFromExpert +usecase "FilterByName\n Пошук опитування за назвою" as FilterByName + +Admin -u-> CreateSurvey +Admin -d-> EditSurvey +Admin -l-> AssignSurvey +Admin -r-> ViewStatistics + +CreateSurvey <. AddQuestion : Extends +EditSurvey <.d. RemoveQuestion : Extends +EditSurvey <.r. RemoveSurvey : Extends +AssignSurvey <.l. UnassignSurveyFromExpert : Extends +ViewStatistics <.r. FilterByName : Extends + +@enduml + +
+ +## Сценарії використання + +### Зареєструвати користувача + +| ID: | **Registration** | +|:----------------------|:--------------------------------------------------------------------------| +| **Назва** | Зареєструвати користувача | +| **Учасники** | Система, користувач | +| **Передумови** | Користувач незареєстрований | +| **Результат** | Створено новий обліковий запис | +| **Виключні ситуації** | EX01.01 Обліковий запис вже існує
EX.01.02 Користував ввів хибні дані | + +@startuml + +|Користувач| +start; +: Натискає на кнопку реєстрації; + +|Система| +: Відкриває форму для реєстрації; + +|Користувач| +: Вводить дані для реєстрації; +: Підтверджує дані "Зареєструватися" +(можлива EX01.01, EX.01.02); + +|Система| +: Заносить дані користувача в базу даних; +: Створює новий обліковий запис; + +|Користувач| +: stop; +@enduml + +### Авторизувати користувача + +| ID: | **Login** | +|:----------------------|:---------------------------------------------------------------------------------------| +| **Назва** | Авторизувати користувача | +| **Учасники** | Система, користувач | +| **Передумови** | Користувач зареєстрований, користувач не увійшов в обліковий запис | +| **Результат** | Користувач увійшов в обліковий запис | +| **Виключні ситуації** | EX02.01 Облікового доступу користувача не існує
EX02.02 Користувач ввів хибні дані | + +@startuml + +|Користувач| +start; +:Користувач натискає на кнопку авторизації; +:Користувач вводить данні; +:Користувач підтверджує дані +(можлива EX.02.01 EX02.02); + +|Система| +:Система дає запит до бази даних; +:Перевіряє наявність облікового запису користувача в системі; +:Надає доступ до особистого кабінету користувача; +:Завантажує користувачу головну сторінку; + +|Користувач| +:Користувач увійшов в обліковий запис; + +stop; + +@enduml + +### Вийти з облікового запису + +| ID: | **Logout_User** | +|:----------------------|:----------------------------------------------------------------| +| **Назва** | Вийти з облікового запису | +| **Учасники** | Система, користувач | +| **Передумови** | Користувач зареєстрований, користувач увійшов в обліковий запис | +| **Результат** | Користувач вийшов з облікового запису | +| **Виключні ситуації** | Відсутні | + +@startuml + +|Користувач| +start; +: Переходить на особисту сторінку; +: \tНатискає кнопку\n"Вихід з облікового запису"; + +|Система| +: \tБлокує користувачу доступ\nдо особистого кабінету; + +|Користувач| +: Користувач бачить сторінку авторізації; +stop; + +@enduml + +### Проходити опитування + +| ID: | **TakeSurvey** | +|:----------------------|:----------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Проходження опитування експертом | +| **Учасники** | Система, експерт | +| **Передумови** | Користувач зареєстрований як експерт, опитування доступне для проходження | +| **Результат** | Експерт надав відповіді на всі питання опитування; Відповіді експерта збережені в системі; Результати опитування зараховані | +| **Виключні ситуації** | EX02.01: Опитування вже пройдено, EX02.02: Експерт не має права проходити опитування. | +| + +@startuml + +|Експерт| +start; +: Авторизується в системі; +: Вибирає доступне опитування; + +|Система| +: Відкриває опитування; +: Відображає питання; + +|Експерт| +: Відповідає на питання; +: Відправляє відповіді "Надіслати" +(можлива EX02.01, EX02.02); + +|Система| +: Зберігає відповіді експерта; +: Зараховує результати опитування; + +|Експерт| +: stop; + +@enduml + +### Редагувати опитування + +| ID: | **EditAnswers** | +|:----------------------|:--------------------------------------------------------------------------------------------------------| +| **Назва** | Редагування експертом своїх відповідей на опитування | +| **Учасники** | Система, експерт | +| **Передумови** | Експерт авторизований в системі, Опитування, на яке експерт надав відповіді, доступне для редагування | +| **Результат** | Експерт відредагував свої відповіді на опитування; Відредаговані відповіді експерта збережені в системі | +| **Виключні ситуації** | EX03.01: Опитування більше не доступне для редагування. | +| + +@startuml + +|Експерт| +start; +: Вибирає опитування; +: Переглядає свої відповіді; +: Вибирає відповідь для редагування; +: Вносить зміни до відповіді; +: Зберігає зміни "Зберегти" (можлива EX03.01); + +|Система| +: Зберігає відредаговані відповіді експерта; + +|Експерт| +: stop; + +@enduml + +### Створювати опитування + +| ID: | **CreateSurvey** | +|:----------------------|:----------------------------------------------------------------------------------------| +| **Назва** | Створення опитування адміністратором | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі | +| **Результат** | Адміністратор створив нове опитування, Опитування доступне користувачам для проходження | +| **Виключні ситуації** | EX04.01: Опитування з такою назвою вже існує | + +@startuml +|Адміністратор| +: start; +: Відкриває форму створення опитування; +: Вводить назву та опис опитування; +: Додає питання; +: Вводить варіанти відповідей; +: Встановлює дату початку та закінчення опитування; +: Натискає кнопку "Створити" (можлива EX04.01); + +|Система| +: Створює опитування в базі даних; +: Відображає створене опитування; + +|Адміністратор| +: Переглядає опитування; +: Редагує опитування (за бажанням); +: Закриває форму створення опитування; + +|Адміністратор| +: stop; +@enduml + +### Редагувати опитування + +| ID: | **EditSurvey** | +|:----------------------|:------------------------------------------------------------------------------------------------------------------| +| **Назва** | Редагування опитування адміністратором | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування, яке адміністратор хоче відредагувати, доступне для редагування | +| **Результат** | Адміністратор успішно відредагував опитування, Зміни внесені до опитування в базі даних | +| **Виключні ситуації** | EX05.01: Опитування більше не доступне для редагування | + +@startuml + +|Адміністратор| +start; +: Відкриває список опитувань; +: Вибирає опитування для редагування; +: Відкриває опитування; +: Вносить зміни до назви, опису, питань, варіантів відповідей, дати початку/закінчення; +: Натискає кнопку "Зберегти" (можлива EX05.01); + +|Система| +: Зберігає відредаговані дані опитування; +: Відображає відредаговане опитування; + +|Адміністратор| +: Переглядає відредаговане опитування; +: Редагує опитування далі (за бажанням); +: Закриває форму редагування; + +|Адміністратор| +: stop; +@enduml + +### Призначення опитування експерту + +| ID: | **AssignSurvey** | +|:----------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Призначення опитування експерту | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі,
Опитування, яке адміністратор хоче призначити, доступне для призначення,
Експерт, якому адміністратор хоче призначити опитування, зареєстрований в системі | +| **Результат** | Опитування успішно призначено експерту, Експерт бачить призначене опитування в списку опитувань | +| **Виключні ситуації** | EX06.01: Експерт вже призначений до цього опитування | + +@startuml + +|Адміністратор| +start; +: Відкриває список опитувань; +: Вибирає опитування для призначення; +: Відкриває список експертів; +: Вибирає експерта; +: Натискає кнопку "Призначити" (можлива EX06.01); + +|Система| +: Перевіряє доступність експерта; +: Призначає опитування експерту; +: Відправляє експерту повідомлення про призначення; + +|Адміністратор| +: Переглядає список призначених експертів; +: Закриває форму призначення; + +|Адміністратор| +: stop; +@enduml + +### Зняти опитування з експерта + +| ID: | **UnassignSurveyFromExpert** | +|:----------------------|:-------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Зняти опитування з експерта | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі,
Опитування доступне для редагування,
Експерт призначений до опитування | +| **Результат** | Опитування успішно знято з обраного експерта, Експерт не бачить опитування в списку опитувань | +| **Виключні ситуації** | EX07.01: Експерт не призначений до цього опитування. | + +@startuml + +|Адміністратор| + +start; +: Авторизується в системі; +: Відкриває список опитувань; +: Вибирає опитування; +: Переглядає список призначених експертів; +: Вибирає експерта; +: Натискає кнопку "Зняти" (можлива EX08.01); + +|Система| +: Знімає опитування з експерта; +: Видаляє зняте опитцвання зі списку опитувань експерта; + +|Адміністратор| +: Переглядає оновлений список призначених експертів; +: Закриває форму редагування; + +|Адміністратор| +: stop; +@enduml + +### Перегляд адміністратором статистики відповідей на опитування + +| ID: | **ViewStatistics** | +|:----------------------|:------------------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Перегляд адміністратором статистики відповідей на опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі,
Опитування, для якого адміністратор хоче переглянути статистику, доступне для перегляду | +| **Результат** | Адміністратор успішно переглянув статистику відповідей на вибране опитування | +| **Виключні ситуації** | EX08.01: Опитування більше не доступне для перегляду статистики | + +@startuml + +|Адміністратор| +start; +: Авторизується в системі; +: Відкриває список опитувань; +: Вибирає опитування для перегляду статистики; + +|Система| +: Відображає статистику відповідей на опитування: +: Кількість відповідей; +: Відсотки відповідей на кожне питання; + +|Адміністратор| +: Закриває вікно зі статистикою; + +|Адміністратор| +: stop; +@enduml + +### Пошук опитування за назвою + +| ID: | **FilterByName** | +|:----------------------|:------------------------------------------------------------| +| **Назва** | Пошук опитування за назвою | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі | +| **Результат** | Адміністратор успішно знайшов опитування за вказаною назвою | +| **Виключні ситуації** | EX09.01: Опитувань з такою назвою не знайдено. | + +@startuml + +|Адміністратор| +start; +: Відкриває форму пошуку; +: Вводить назву опитування; +: Натискає кнопку "Пошук"; + +|Система| +: Шукає опитування за вказаною назвою; +: Відображає список знайдених опитувань; + +|Адміністратор| +: Вибирає опитування зі списку (якщо знайдено); +: Переглядає результати пошуку; +: Закриває форму пошуку; + +|Адміністратор| +: stop; +@enduml + +### Додавання нового питання до опитування + +| ID: | **AddQuestion** | +|:----------------------|:---------------------------------------------------------------------------| +| **Назва** | Додавання нового питання до опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | +| **Результат** | Адміністратор успішно додав нове питання до опитування | +| **Виключні ситуації** | EX10.01: Опитування більше не доступне для редагування. | + +@startuml + +|Адміністратор| +start; +: Відкриває список опитувань; +: Вибирає опитування для редагування; +: Відкриває форму додавання питання; +: Вводить текст питання; +: Вводить варіанти відповідей; +: Натискає кнопку "Додати" (можлива EX10.01); + +|Система| +: Додає нове питання до опитування; +: Відображає оновлене опитування; + +|Адміністратор| +: Переглядає оновлене опитування; +: Редагує опитування далі (за бажанням); +: Закриває форму додавання питання; + +|Адміністратор| +: stop; +@enduml + +### Видалення питання до опитування + +| ID: | **RemoveQuestion** | +|:----------------------|:---------------------------------------------------------------------------| +| **Назва** | Додавання нового питання до опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | +| **Результат** | Адміністратор успішно видалив питання з опитування | +| **Виключні ситуації** | EX11.01: Опитування більше не доступне для редагування. | + +@startuml + +|Адміністратор| +start; +: Відкриває список опитувань; +: Вибирає опитування для редагування; +: Відкриває опитування; +: Вибирає питання для видалення; +: Натискає кнопку "Видалити" (можлива EX11.01); + +|Система| +: Видаляє питання з опитування; +: Відображає оновлене опитування; + +|Адміністратор| +: Переглядає оновлене опитування; +: Редагує опитування далі (за бажанням); +: Закриває форму додавання питання; + +|Адміністратор| +: stop; +@enduml + +### Видалення опитування + +| ID: | **RemoveSurvey** | +|:----------------------|:---------------------------------------------------------------------------| +| **Назва** | Видалення опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | +| **Результат** | Адміністратор успішно видалив опитування | +| **Виключні ситуації** | EX12.01: Опитування більше не доступне для редагування. | + +@startuml + +|Адміністратор| +start; +: Відкриває список опитувань; +: Вибирає опитування для видалення; +: Натискає кнопку "Видалити" (можлива EX12.01); + +|Система| +: Перевіряє, чи можна видалити опитування; +: Видаляє опитування; + +|Адміністратор| +: Переглядає оновлений список опитувань; + +|Адміністратор| +: stop; + +@enduml \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 99fc92d4..37ddf23b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "dis-edu", + "name": "edu_db_labs_group1", "version": "2.1.0", "lockfileVersion": 1, "requires": true, @@ -1767,39 +1767,11 @@ "glob-to-regexp": "^0.3.0" } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - } - } - }, "@nodelib/fs.stat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -1878,27 +1850,6 @@ "@babel/types": "^7.3.0" } }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dev": true, - "requires": { - "@types/ms": "*" - } - }, - "@types/extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/extend/-/extend-3.0.1.tgz", - "integrity": "sha512-R1g/VyKFFI2HLC1QGAeTtCBWCo6n75l41OnsVYNbmKG+kempOESaodf6BeJyUM3Q0rKa/NQcTHbB2+66lNnxLw==", - "dev": true - }, - "@types/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==", - "dev": true - }, "@types/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", @@ -1946,26 +1897,11 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, "@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true - }, "@types/node": { "version": "16.7.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.6.tgz", @@ -1988,12 +1924,6 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true - }, "@types/yargs": { "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", @@ -2766,12 +2696,6 @@ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, - "arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", - "dev": true - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3161,12 +3085,6 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "dev": true - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3868,12 +3786,6 @@ "lodash": "^4.17.15" } }, - "ccount": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.0.tgz", - "integrity": "sha512-VOR0NWFYX65n9gELQdcpqsie5L5ihBXuZGAgaPEp/U7IOSjnPMEH6geE+2f6lcekaNEfWzAHS45mPvSo5bqsUA==", - "dev": true - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3890,24 +3802,6 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, - "character-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz", - "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA==", - "dev": true - }, - "character-entities-legacy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz", - "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA==", - "dev": true - }, - "character-reference-invalid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz", - "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g==", - "dev": true - }, "chart.js": { "version": "2.9.4", "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", @@ -4225,12 +4119,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" }, - "comment-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", - "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", - "dev": true - }, "common-sequence": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-2.0.2.tgz", @@ -5782,15 +5670,6 @@ "zepto": "^1.2.0" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -6430,15 +6309,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fastq": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", - "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, "faye-websocket": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", @@ -6742,12 +6612,6 @@ "assert-plus": "^1.0.0" } }, - "github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==", - "dev": true - }, "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -7504,22 +7368,6 @@ } } }, - "is-alphabetical": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz", - "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w==", - "dev": true - }, - "is-alphanumerical": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz", - "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==", - "dev": true, - "requires": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - } - }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -7631,12 +7479,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-decimal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz", - "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw==", - "dev": true - }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -7688,12 +7530,6 @@ "is-extglob": "^2.1.1" } }, - "is-hexadecimal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz", - "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug==", - "dev": true - }, "is-installed-globally": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", @@ -9928,157 +9764,6 @@ "walk-back": "^5.0.0" } }, - "jsdoc-md": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/jsdoc-md/-/jsdoc-md-11.0.2.tgz", - "integrity": "sha512-HIQL3tJ4vpCCDmSZR9XuwfuKPVRMroXAs3smbf6vygnYevibjSqqzTEJ6bWBVke8plHkLs1nHwKt4F+ClgVZ/A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/core": "^7.15.0", - "arg": "^5.0.0", - "comment-parser": "^1.2.3", - "doctrine": "^3.0.0", - "github-slugger": "^1.3.0", - "globby": "^12.0.0", - "kleur": "^4.1.4", - "mdast-util-inject": "^1.1.0", - "remark-behead": "^2.3.3", - "remark-gfm": "^2.0.0", - "remark-parse": "^10.0.0", - "remark-stringify": "^10.0.0", - "remark-toc": "^8.0.0", - "trim-newlines": "^4.0.2", - "unified": "^10.1.0", - "unist-util-remove-position": "^4.0.1" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-12.0.2.tgz", - "integrity": "sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==", - "dev": true, - "requires": { - "array-union": "^3.0.1", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.7", - "ignore": "^5.1.8", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, "jsdoc-parse": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-6.0.1.tgz", @@ -10405,12 +10090,6 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, - "lodash.iteratee": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.iteratee/-/lodash.iteratee-4.7.0.tgz", - "integrity": "sha1-vkF32yiajMw8CZDx2ya1si/BVUw=", - "dev": true - }, "lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -10466,12 +10145,6 @@ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" }, - "longest-streak": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.0.tgz", - "integrity": "sha512-XhUjWR5CFaQ03JOP+iSDS9koy8T5jfoImCZ4XprElw3BXsSk4MpVYOLw/6LTDKZhO13PlAXnB5gS4MHQTpkSOw==", - "dev": true - }, "lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", @@ -10594,12 +10267,6 @@ "resolved": "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz", "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==" }, - "markdown-table": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.1.tgz", - "integrity": "sha512-CBbaYXKSGnE1uLRpKA1SWgIRb2PQrpkllNWpZtZe6VojOJ4ysqiq7/2glYcmKsOYN09QgH/HEBX5hIshAeiK6A==", - "dev": true - }, "marked": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", @@ -10621,291 +10288,60 @@ "safe-buffer": "^5.1.2" } }, - "mdast-util-find-and-replace": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz", - "integrity": "sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==", - "dev": true, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true - }, - "unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, - "mdast-util-from-markdown": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.0.0.tgz", - "integrity": "sha512-uj2G60sb7z1PNOeElFwCC9b/Se/lFXuLhVKFOAY2EHz/VvgbupTQRNXPoZl7rGpXYL6BNZgcgaybrlSWbo7n/g==", - "dev": true, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "parse-entities": "^3.0.0", - "unist-util-stringify-position": "^3.0.0" + "source-map": "^0.6.1" }, "dependencies": { - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "mdast-util-gfm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-1.0.0.tgz", - "integrity": "sha512-JY4qImsTqivQ0Gl3qvdaizCpomFaNrHnjEhNjNNKeNEA5jZHAJDYu1+yO4V9jn4/ti8GrKdAScaT4F71knoxsA==", - "dev": true, - "requires": { - "mdast-util-gfm-autolink-literal": "^1.0.0", - "mdast-util-gfm-strikethrough": "^1.0.0", - "mdast-util-gfm-table": "^1.0.0", - "mdast-util-gfm-task-list-item": "^1.0.0" - } + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, - "mdast-util-gfm-autolink-literal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.1.tgz", - "integrity": "sha512-dCUDNYXCytIonTHIUOZXp5S3FWd1XAt6IVH1fBfH6BbUF9U+9m1T9XllfHPvKJCccKNI+0RlYmQJ0rfMTDxEtA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "ccount": "^2.0.0", - "mdast-util-find-and-replace": "^2.0.0", - "micromark-util-character": "^1.0.0" - } - }, - "mdast-util-gfm-strikethrough": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.0.tgz", - "integrity": "sha512-gM9ipBUdRxYa6Yq1Hd8Otg6jEn/dRxFZ1F9ZX4QHosHOexLGqNZO2dh0A+YFbUEd10RcKjnjb4jOfJJzoXXUew==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.3", - "mdast-util-to-markdown": "^1.0.0" - } - }, - "mdast-util-gfm-table": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.1.tgz", - "integrity": "sha512-NByKuaSg5+M6r9DZBPXFUmhMHGFf9u+WE76EeStN01ghi8hpnydiWBXr+qj0XCRWI7SAMNtEjGvip6zci9axQA==", - "dev": true, - "requires": { - "markdown-table": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0" - } - }, - "mdast-util-gfm-task-list-item": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.0.tgz", - "integrity": "sha512-dwkzOTjQe8JCCHVE3Cb0pLHTYLudf7t9WCAnb20jI8/dW+VHjgWhjtIUVA3oigNkssgjEwX+i+3XesUdCnXGyA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.3", - "mdast-util-to-markdown": "^1.0.0" - } - }, - "mdast-util-inject": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-inject/-/mdast-util-inject-1.1.0.tgz", - "integrity": "sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU=", - "dev": true, - "requires": { - "mdast-util-to-string": "^1.0.0" - } - }, - "mdast-util-to-markdown": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.2.1.tgz", - "integrity": "sha512-yj0UexEfdH0Zqw9CztzC5+J6OZKgCY6K0ommn56SBlPKIV3NGqk1Wo/zw1Q0e/kHb50wmQ8O9cwbOl7vmaJjxg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "parse-entities": "^3.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "dependencies": { - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "dev": true - }, - "mdast-util-toc": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-6.1.0.tgz", - "integrity": "sha512-0PuqZELXZl4ms1sF7Lqigrqik4Ll3UhbI+jdTrfw7pZ9QPawgl7LD4GQ8MkU7bT/EwiVqChNTbifa2jLLKo76A==", - "dev": true, - "requires": { - "@types/extend": "^3.0.0", - "@types/github-slugger": "^1.0.0", - "@types/mdast": "^3.0.0", - "extend": "^3.0.0", - "github-slugger": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "unist-util-is": "^5.0.0", - "unist-util-visit": "^3.0.0" - }, - "dependencies": { - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true - }, - "unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - } - }, - "unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "mermaid": { "version": "8.12.0", @@ -10928,312 +10364,6 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "micromark": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.5.tgz", - "integrity": "sha512-QfjERBnPw0G9mxhOCkkbRP0n8SX8lIBLrEKeEVceviUukqVMv3hWE4AgNTOK/W6GWqtPvvIHg2Apl3j1Dxm6aQ==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "parse-entities": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "micromark-core-commonmark": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.1.tgz", - "integrity": "sha512-vEOw8hcQ3nwHkKKNIyP9wBi8M50zjNajtmI+cCUWcVfJS+v5/3WCh4PLKf7PPRZFUutjzl4ZjlHwBWUKfb/SkA==", - "dev": true, - "requires": { - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "parse-entities": "^3.0.0" - } - }, - "micromark-extension-gfm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-1.0.0.tgz", - "integrity": "sha512-OjqbQPL1Vec/4l5hnC8WnMNmWwgrT9JvzR2udqIGrGKecZsdwY9GAWZ5482CuD12SXuHNj8aS8epni6ip0Pwog==", - "dev": true, - "requires": { - "micromark-extension-gfm-autolink-literal": "^1.0.0", - "micromark-extension-gfm-strikethrough": "^1.0.0", - "micromark-extension-gfm-table": "^1.0.0", - "micromark-extension-gfm-tagfilter": "^1.0.0", - "micromark-extension-gfm-task-list-item": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-autolink-literal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.0.tgz", - "integrity": "sha512-t+K0aPK32mXypVTEKV+WRfoT/Rb7MERDgHZVRr56NXpyQQhgMk72QnK4NljYUlrgbuesH+MxiPQwThzqRDIwvA==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-strikethrough": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.1.tgz", - "integrity": "sha512-fzGYXWz9HPWH1uHqYwdyR8XpEtuoYVHUjTdPQTnl3ETVZOQe1NXMwE3RA7AMqeON52hG+kO9g1/P1+pLONBSMQ==", - "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-table": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.0.tgz", - "integrity": "sha512-OATRuHDgEAT/aaJJRSdU12V+s01kNSnJ0jumdfLq5mPy0F5DkR3zbTSFLH4tjVYM0/kEG6umxIhHY62mFe4z5Q==", - "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-tagfilter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.0.tgz", - "integrity": "sha512-GGUZhzQrOdHR8RHU2ru6K+4LMlj+pBdNuXRtw5prOflDOk2hHqDB0xEgej1AHJ2VETeycX7tzQh2EmaTUOmSKg==", - "dev": true, - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-task-list-item": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.0.tgz", - "integrity": "sha512-3tkHCq1NNwijtwpjYba9+rl1yvQ4xYg8iQpUAfTJRyq8MtIEsBUF/vW6B9Gh8Qwy1hE2FmpyHhP4jnFAt61zLg==", - "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-label": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.0.tgz", - "integrity": "sha512-XWEucVZb+qBCe2jmlOnWr6sWSY6NHx+wtpgYFsm4G+dufOf6tTQRRo0bdO7XSlGPu5fyjpJenth6Ksnc5Mwfww==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-title": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.0.tgz", - "integrity": "sha512-flvC7Gx0dWVWorXuBl09Cr3wB5FTuYec8pMGVySIp2ZlqTcIjN/lFohZcP0EG//krTptm34kozHk7aK/CleCfA==", - "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", - "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", - "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", - "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", - "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", - "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-encode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz", - "integrity": "sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg==", - "dev": true - }, - "micromark-util-html-tag-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz", - "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==", - "dev": true - }, - "micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", - "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", - "dev": true, - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-sanitize-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", - "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-subtokenize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.0.tgz", - "integrity": "sha512-EsnG2qscmcN5XhkqQBZni/4oQbLFjz9yk3ZM/P8a3YUjwV6+6On2wehr1ALx0MxK3+XXXLTzuBKHDFeDFYRdgQ==", - "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-symbol": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz", - "integrity": "sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ==", - "dev": true - }, - "micromark-util-types": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.1.tgz", - "integrity": "sha512-UT0ylWEEy80RFYzK9pEaugTqaxoD/j0Y9WhHpSyitxd99zjoQz7JJ+iKuhPAgOW2MiPSUAx+c09dcqokeyaROA==", - "dev": true - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -11913,20 +11043,6 @@ "safe-buffer": "^5.1.1" } }, - "parse-entities": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz", - "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==", - "dev": true, - "requires": { - "character-entities": "^2.0.0", - "character-entities-legacy": "^2.0.0", - "character-reference-invalid": "^2.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -12851,12 +11967,6 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -13121,64 +12231,6 @@ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" }, - "remark-behead": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/remark-behead/-/remark-behead-2.3.3.tgz", - "integrity": "sha512-quY6Of8Bwj4pgrG/Qce6a/sMMzFc0XxbfeYko+mPjOScIB+TKw3T0Y2GUcIEL8+xbQgAnCylkPQNt9haCEWK9w==", - "dev": true, - "requires": { - "unist-util-find": "^1.0.1", - "unist-util-find-all-after": "^3.0.1", - "unist-util-find-all-before": "^2.0.5", - "unist-util-find-all-between": "^2.0.0", - "unist-util-visit": "^2.0.3" - } - }, - "remark-gfm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz", - "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^1.0.0", - "micromark-extension-gfm": "^1.0.0", - "unified": "^10.0.0" - } - }, - "remark-parse": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.0.tgz", - "integrity": "sha512-07ei47p2Xl7Bqbn9H2VYQYirnAFJPwdMuypdozWsSbnmrkgA2e2sZLZdnDNrrsxR4onmIzH/J6KXqKxCuqHtPQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - } - }, - "remark-stringify": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.0.tgz", - "integrity": "sha512-3LAQqJ/qiUxkWc7fUcVuB7RtIT38rvmxfmJG8z1TiE/D8zi3JGQ2tTcTJu9Tptdpb7gFwU0whRi5q1FbFOb9yA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" - } - }, - "remark-toc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-toc/-/remark-toc-8.0.0.tgz", - "integrity": "sha512-chuNL5FNQL3tj9i/JxQn9yczmaQi7BMj8ml7z79+pMqy4HDNRMv/ST52zYugbLX08bISsUCTdKZ9Nrqii3qYqw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-toc": "^6.0.0", - "unified": "^10.0.0" - } - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -13366,12 +12418,6 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -13404,15 +12450,6 @@ "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -14744,18 +13781,6 @@ "punycode": "^2.1.1" } }, - "trim-newlines": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.0.2.tgz", - "integrity": "sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==", - "dev": true - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "dev": true - }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -14889,35 +13914,6 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "dev": true - } - } - }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -14963,171 +13959,6 @@ "crypto-random-string": "^2.0.0" } }, - "unist-util-find": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unist-util-find/-/unist-util-find-1.0.2.tgz", - "integrity": "sha512-ft06UDYzqi9o9RmGP0sZWI/zvLLQiBW2/MD+rW6mDqbOWDcmknGX9orQPspfuGRYWr8eSJAmfsBcvOpfGRJseA==", - "dev": true, - "requires": { - "lodash.iteratee": "^4.5.0", - "unist-util-visit": "^1.1.0" - }, - "dependencies": { - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", - "dev": true, - "requires": { - "unist-util-visit-parents": "^2.0.0" - } - } - } - }, - "unist-util-find-all-after": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", - "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", - "dev": true, - "requires": { - "unist-util-is": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - } - } - }, - "unist-util-find-all-before": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/unist-util-find-all-before/-/unist-util-find-all-before-2.0.5.tgz", - "integrity": "sha512-lYakZyw3trON5qbsOsmtRARZTyKcQN8pkoMKLy558Nt8WhlqGAnRSD9qLrISkMKbS+0nhj8LiebgoheUtQXOZw==", - "dev": true, - "requires": { - "unist-util-is": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - } - } - }, - "unist-util-find-all-between": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-find-all-between/-/unist-util-find-all-between-2.1.0.tgz", - "integrity": "sha512-OCCUtDD8UHKeODw3TPXyFDxPCbpgBzbGTTaDpR68nvxkwiVcawBqMVrokfBMvUi7ij2F5q7S4s4Jq5dvkcBt+w==", - "dev": true, - "requires": { - "unist-util-find": "^1.0.1", - "unist-util-is": "^4.0.2" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - } - } - }, - "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true - }, - "unist-util-remove-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz", - "integrity": "sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } - } - }, - "unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", - "dev": true, - "requires": { - "unist-util-is": "^3.0.0" - } - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -15412,36 +14243,6 @@ "extsprintf": "^1.2.0" } }, - "vfile": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.1.0.tgz", - "integrity": "sha512-4o7/DJjEaFPYSh0ckv5kcYkJTHQgCKdL8ozMM1jLAxO9ox95IzveDPXCZp08HamdWq8JXTkClDvfAKaeLQeKtg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - } - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -16497,12 +15298,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/zepto/-/zepto-1.2.0.tgz", "integrity": "sha1-4Se9nmb9hGvl6rSME5SIL3wOT5g=" - }, - "zwitch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", - "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", - "dev": true } } } diff --git a/package.json b/package.json index 9312c4ac..6a583791 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "author": "Andrey Boldak ", "license": "ECL 2.0", "scripts": { - "test":"jest", + "test": "jest", "docs:api": "jsdoc2md src/**/*.js > docs/api/README.md", "docs:dev": "npm run docs:api && npx vuepress dev docs", "docs:build": "npm run docs:api && npx vuepress build docs", @@ -23,5 +23,4 @@ "jest": "^27.1.0", "jsdoc-to-markdown": "^7.0.1" } - } From d2c1261cf9ac2c4f80f5d4077500ec366a3f7be0 Mon Sep 17 00:00:00 2001 From: 7gl6 <7xglx6@gmail.com> Date: Tue, 21 May 2024 22:12:18 +0300 Subject: [PATCH 09/14] Made additions to stakeholders-needs.md --- docs/requirements/stakeholders-needs.md | 261 ++++++++++++++++++++++++ 1 file changed, 261 insertions(+) diff --git a/docs/requirements/stakeholders-needs.md b/docs/requirements/stakeholders-needs.md index e69de29b..1bb67614 100644 --- a/docs/requirements/stakeholders-needs.md +++ b/docs/requirements/stakeholders-needs.md @@ -0,0 +1,261 @@ +# Запити зацікавлених осіб + +## Вступ + +Цей розділ містить інформацію для тих, хто зацікавлений у знайомстві з проєктом. +Тут задокументовано інформацію про цільову аудиторію продукту, визначення, пов'язані з розробкою якісного ПЗ, [характеристику процесів опитування експертів](#характеристика-процесів-опитування), а також сформульовано вимоги щодо: + +- [Функціональності](#функціональність) +- [Практичності](#практичність) +- [Надійності](#надійність) +- [Продуктивності](#продуктивність) +- [Експлуатаційної придатності](#експлуатаційна-придатність) + +## Мета + +Дослідження цільової аудиторії продукту, аналіз вимог та запитів від різних груп зацікавлених осіб, а також визначення вимог до функціональності, практичності, надійності, продуктивності та зручності використання для створення сучасного і зручного програмного забезпечення для керування проєктами. + +## Контекст + +У цьому документі описується загальний порядок роботи з комерційними та некомерційними проєктами на основі [наведених нижче прикладів](#характеристика-ділових-процесів) і висвітлюються всі переваги нашого інструменту. + +## Основні визначення та скорочення +[Метод опитування експертів](#Метод опитування експертів) - також відомий як метод експертних оцінок або метод Delphi, є технікою збору інформації, яка передбачає залучення фахівців у певній галузі для отримання надійних прогнозів, оцінок або рекомендацій. + +[ISO 9126](https://what.com.ua/iakist-programnogo-zabezpechen/4/) - є міжнародним стандартом для оцінки якості продукту (ПЗ). Він розділений на чотири частини, в яких розглядаються наступні теми: + +- Зовнішні показники +- Внутрішні показники +- Модель якості +- Показники якості програмного забезпечення + + +[FURPS](https://www.dstu.dp.ua/Portal/Data/3/19/3-19-kl26.pdf) - це абревіатура, яка характеризує: + +- функціональність (**F**unctionality) +- практичність (**U**sability) +- надійність (**R**eliability) +- продуктивність (**P**erformance) +- експлуатаційну придатність (**S**upportability) + + програмного забезпечення комп’ютерних систем і також використовується для визначення багатьох пов’язаних систем і послуг. + +[UML (Unified Modeling Language)](https://uk.wikipedia.org/wiki/Unified_Modeling_Language) - невід'ємною частиною уніфікованого процесу розробки програмного забезпечення. UML є мовою широкого профілю, це відкритий стандарт, що використовує графічні позначення для створення абстрактної моделі системи, яка називається UML-моделлю. + +Інші визначення знаходяться [тут](/requirements/state-of-the-art.md). + +### Посилання + +1. [Зацікавлені сторони (особи)](https://uk.wikipedia.org/wiki/%D0%97%D0%B0%D1%86%D1%96%D0%BA%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D1%96_%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%B8) +2. [Бізнес-процеси](https://pidru4niki.com/1471121353661/ekonomika/analiz_biznes-protsesiv_pidpriyemstva) +3. [ISO 9126](https://what.com.ua/iakist-programnogo-zabezpechen/4/) +4. [FURPS](https://www.dstu.dp.ua/Portal/Data/3/19/3-19-kl26.pdf) +5. [UML (Unified Modeling Language)](https://uk.wikipedia.org/wiki/Unified_Modeling_Language) + +## Короткий зміст + +- [Характеристика процесів опитування](#характеристика-процесів-опитування) + - [Login the User](#Login) + - [Logout the User](#Logout_User) + - [Passing a Survey](#TakeSurvey) + - [Editing Answers](#EditAnswers) + - [Creating a Survey](#CreateSurvey) + - [Edit Survey](#EditSurvey) + - [Assign Survey](#AssignSurvey) + - [Unassign Survey From Expert](#UnassignSurveyFromExpert) + - [View Statistics](#ViewStatistics) + - [Filter By Name](#FilterByName) + - [Add Question](#AddQuestion) + - [Remove Question](#RemoveQuestion) + - [Remove Survey](#RemoveSurvey) +## Характеристика процесів опитування + +Для ефективного управління процесом опитування, потрібно розуміти, як працює сама система +**_Зовнішнім фактором_**, тобто користувачем є: + +- **Експерт** - це особа, яка в нашому випадку проходить опитування. Таким чином відповідає на певні запитання + +**_Внутрішніми факторами_**, тобто управляючим є: + +- **Адміністратор** - це особа, яка може керувати опитуваннями та експертами. + +--- + +Для оптимального співробітництва між бізнес-акторами, бізнес-робітниками та системою складено наступні бізнес-сценарії: + +| ID: | **Login** | +|:----------------------|:---------------------------------------------------------------------------------------| +| **Назва** | Авторизувати користувача | +| **Учасники** | Система, користувач | +| **Передумови** | Користувач зареєстрований, користувач не увійшов в обліковий запис | +| **Результат** | Користувач увійшов в обліковий запис | +| **Виключні ситуації** | EX02.01 Облікового доступу користувача не існує
EX02.02 Користувач ввів хибні дані | + +| ID: | **Logout_User** | +|:----------------------|:----------------------------------------------------------------| +| **Назва** | Вийти з облікового запису | +| **Учасники** | Система, користувач | +| **Передумови** | Користувач зареєстрований, користувач увійшов в обліковий запис | +| **Результат** | Користувач вийшов з облікового запису | +| **Виключні ситуації** | Відсутні | + +| ID: | **TakeSurvey** | +|:----------------------|:----------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Проходження опитування експертом | +| **Учасники** | Система, експерт | +| **Передумови** | Користувач зареєстрований як експерт, опитування доступне для проходження | +| **Результат** | Експерт надав відповіді на всі питання опитування; Відповіді експерта збережені в системі; Результати опитування зараховані | +| **Виключні ситуації** | EX02.01: Опитування вже пройдено, EX02.02: Експерт не має права проходити опитування. | + +| ID: | **EditAnswers** | +|:----------------------|:--------------------------------------------------------------------------------------------------------| +| **Назва** | Редагування експертом своїх відповідей на опитування | +| **Учасники** | Система, експерт | +| **Передумови** | Експерт авторизований в системі, Опитування, на яке експерт надав відповіді, доступне для редагування | +| **Результат** | Експерт відредагував свої відповіді на опитування; Відредаговані відповіді експерта збережені в системі | +| **Виключні ситуації** | EX03.01: Опитування більше не доступне для редагування. + +| ID: | **CreateSurvey** | +|:----------------------|:----------------------------------------------------------------------------------------| +| **Назва** | Створення опитування адміністратором | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі | +| **Результат** | Адміністратор створив нове опитування, Опитування доступне користувачам для проходження | +| **Виключні ситуації** | EX04.01: Опитування з такою назвою вже існує | + +| ID: | **EditSurvey** | +|:----------------------|:------------------------------------------------------------------------------------------------------------------| +| **Назва** | Редагування опитування адміністратором | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування, яке адміністратор хоче відредагувати, доступне для редагування | +| **Результат** | Адміністратор успішно відредагував опитування, Зміни внесені до опитування в базі даних | +| **Виключні ситуації** | EX05.01: Опитування більше не доступне для редагування | + +| ID: | **AssignSurvey** | +|:----------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Призначення опитування експерту | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі,
Опитування, яке адміністратор хоче призначити, доступне для призначення,
Експерт, якому адміністратор хоче призначити опитування, зареєстрований в системі | +| **Результат** | Опитування успішно призначено експерту, Експерт бачить призначене опитування в списку опитувань | +| **Виключні ситуації** | EX06.01: Експерт вже призначений до цього опитування | + +| ID: | **UnassignSurveyFromExpert** | +|:----------------------|:-------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Зняти опитування з експерта | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі,
Опитування доступне для редагування,
Експерт призначений до опитування | +| **Результат** | Опитування успішно знято з обраного експерта, Експерт не бачить опитування в списку опитувань | +| **Виключні ситуації** | EX07.01: Експерт не призначений до цього опитування. | + +| ID: | **ViewStatistics** | +|:----------------------|:------------------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Перегляд адміністратором статистики відповідей на опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі,
Опитування, для якого адміністратор хоче переглянути статистику, доступне для перегляду | +| **Результат** | Адміністратор успішно переглянув статистику відповідей на вибране опитування | +| **Виключні ситуації** | EX08.01: Опитування більше не доступне для перегляду статистики | + +| ID: | **FilterByName** | +|:----------------------|:------------------------------------------------------------| +| **Назва** | Пошук опитування за назвою | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі | +| **Результат** | Адміністратор успішно знайшов опитування за вказаною назвою | +| **Виключні ситуації** | EX09.01: Опитувань з такою назвою не знайдено. | + +| ID: | **AddQuestion** | +|:----------------------|:---------------------------------------------------------------------------| +| **Назва** | Додавання нового питання до опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | +| **Результат** | Адміністратор успішно додав нове питання до опитування | +| **Виключні ситуації** | EX10.01: Опитування більше не доступне для редагування. | + +| ID: | **RemoveQuestion** | +|:----------------------|:---------------------------------------------------------------------------| +| **Назва** | Додавання нового питання до опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | +| **Результат** | Адміністратор успішно видалив питання з опитування | +| **Виключні ситуації** | EX11.01: Опитування більше не доступне для редагування. | + +| ID: | **RemoveSurvey** | +|:----------------------|:---------------------------------------------------------------------------| +| **Назва** | Видалення опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | +| **Результат** | Адміністратор успішно видалив опитування | +| **Виключні ситуації** | EX12.01: Опитування більше не доступне для редагування. | + +## Короткий огляд продукту +Система організації та управління опитуваннями експертів - це комплекс інструментів і методів, які допомагають збирати, аналізувати та інтерпретувати думки та думки експертів з певної галузі знань. + +Основні категорії користувачів системи: + +* Експерт - користувач, який може відповідати на певні запитання під час опитування. +* Адміністратор - це особа, яка контролює проходження опитування. + + +## Функціональність + +Функціональні вимоги системи представлені через інтерфейси для різних типів користувачів. Це дозволяє визначити, які можливості доступні для кожної категорії користувачів, аналізувати їх взаємодію та чітко встановлювати межі системи, щоб забезпечити необхідний функціонал для виконання окремих завдань. + +### Інтерфейс експерта + +Інтерфейс експерта представляє собою базовий набір функцій системи для користувача. + +* увійти в обліковий запис +* вийти з облікового запису +* проходження опитування експертом +* редагування своїх відповідей на опитування + + +### Інтерфейс адміністратора системи +Інтерфейс адміністратора передбачає ширші можливості керування системою. +* створення опитування +* редагування опитування +* призначення опитування експерту +* зняти опитування з експерта +* перегляд статистики відповідей на опитування +* пошук опитування за назвою +* додавання нового питання до опитування +* видалення нового питання до опитування +* видалення опитування + + +## Практичність + +- Простий мінімалістичний дизайн інтерфейсу, інтуїтивність +- Зрозуміла та приємна до вивчення документація, яка при цьому покриває всі можливості сервісу +- Підтримка використання гарячих клавіш +- Можливість бекапів (повернення видалених даних і відновлення доступу до аккаунту) +- Використання графічних методів відображення прогресу опитування есперта (схеми, графіки, діаграми) +- Можливість відновлення паролю +- Адаптивніть під різні роздільні здатності дисплеїв + +## Надійність + +- Авторизація користувачів +- Чітке розділення можливостей користувачів відповідно до їх ролі +- Система повідомлення адміністраторів про проблеми в роботі опитування +- Регулярне створення резервних копій даних +- Автоматичний блок надмірної та/або незвичної активності +- Стійкість до високого трафіку + +## Продуктивність + +- Швидкий обмін даними +- Ефективне використання оперативної пам'яті, інтернет трафіку тощо +- Використання облачних сервісів +- Використання багатопоточності +- Гнучке налаштування лімітів використовуваних ресурсів кожного проєкту окремо +- Висока пропускна здатність + + +## Експлуатаційна придатність + +- Постійна технічна підтримка сервісу, швидкий зворотній зв'язок +- Низький поріг входження для апаратного та програмного забезпечення +- Постійне впровадження оновлень +- Активне тестування +- Готовність до роботи в екстримальних умовах From 184343f1217382f724acb085274225e41607dd59 Mon Sep 17 00:00:00 2001 From: Tanya Date: Wed, 22 May 2024 11:01:17 +0300 Subject: [PATCH 10/14] add Business model for lab 3 --- docs/design/README.md | 147 ++++++++++++------------ docs/requirements/stakeholders-needs.md | 50 +++++--- 2 files changed, 106 insertions(+), 91 deletions(-) diff --git a/docs/design/README.md b/docs/design/README.md index 4d91190f..0442e341 100644 --- a/docs/design/README.md +++ b/docs/design/README.md @@ -1,86 +1,87 @@ -# Проєктування системи +# Проєктування бази даних +## Модель бізнес-об'єктів -Вбудовування зображень діаграм здійснюється з використанням сервісу [plantuml.com](https://plantuml.com/). - -В markdown-файлі використовується опис діаграми - -```md - -
- -@startuml - -participant Client - -participant SR as "Service Registry" - -participant Service - -Service -> SR : register -SR -> SR -SR --> Service -... - -SR -> Service: heartbeat -SR <-- Service: health -... - -Client -> SR: find -Client <-- SR: service endpoint -Client -> Service: request -Client <-- Service: response - - - -@enduml - -
-``` - -яка буде відображена наступним чином - -
@startuml - @startuml - -participant Client - -participant SR as "Service Registry" - -participant Service - -Service -> SR : register -SR -> SR -SR --> Service -... - -SR -> Service: heartbeat -SR <-- Service: health -... - -Client -> SR: find -Client <-- SR: service endpoint -Client -> Service: request -Client <-- Service: response - - +entity Role +entity Role.id +entity Role.name + +entity User +entity User.id +entity User.nickname +entity User.email +entity User.password +entity User.roleId + +entity Survey +entity Survey.id +entity Survey.name +entity Survey.startDate +entity Survey.endDate + +entity AssignedSurvey +entity AssignedSurvey.surveyId +entity AssignedSurvey.userId + +entity Question +entity Question.id +entity Question.description +entity Question.number +entity Question.survey + +entity Answer +entity Answer.id +entity Answer.option + +entity Statistic +entity Statistic.id +entity Statistic.surveyId + +Role.id --r-* Role +Role.name --r-* Role + +User.id --u-* User +User.nickname --u-* User +User.password --u-* User +User.email --u-* User +User.roleId --u-* User + +Survey.id --d-* Survey +Survey.name --d-* Survey +Survey.startDate --d-* Survey +Survey.endDate --d-* Survey + +AssignedSurvey.surveyId --d-* AssignedSurvey +AssignedSurvey.userId --d-* AssignedSurvey + +Question.id --d-* Question +Question.description --d-* Question +Question.number --d-* Question +Question.survey --d-* Question + +Answer.id --u-* Answer +Answer.option --u-* Answer + +Statistic.id --u-* Statistic +Statistic.surveyId --u-* Statistic + +User "0,*" -l- "1" Role +Survey "0,*" -- "1" User +Survey "1" -l- "1,3" Question +Survey "1" -r- "0,*" AssignedSurvey +Question "1,3" -- "1" Answer +Survey "1" -- "1" Statistic @enduml -
- - + diff --git a/docs/requirements/stakeholders-needs.md b/docs/requirements/stakeholders-needs.md index 1bb67614..99d7395c 100644 --- a/docs/requirements/stakeholders-needs.md +++ b/docs/requirements/stakeholders-needs.md @@ -2,8 +2,10 @@ ## Вступ -Цей розділ містить інформацію для тих, хто зацікавлений у знайомстві з проєктом. -Тут задокументовано інформацію про цільову аудиторію продукту, визначення, пов'язані з розробкою якісного ПЗ, [характеристику процесів опитування експертів](#характеристика-процесів-опитування), а також сформульовано вимоги щодо: +Цей розділ містить інформацію для тих, хто зацікавлений у знайомстві з проєктом. +Тут задокументовано інформацію про цільову аудиторію продукту, визначення, пов'язані з розробкою якісного +ПЗ, [характеристику процесів опитування експертів](#характеристика-процесів-опитування), а також сформульовано вимоги +щодо: - [Функціональності](#функціональність) - [Практичності](#практичність) @@ -13,23 +15,29 @@ ## Мета -Дослідження цільової аудиторії продукту, аналіз вимог та запитів від різних груп зацікавлених осіб, а також визначення вимог до функціональності, практичності, надійності, продуктивності та зручності використання для створення сучасного і зручного програмного забезпечення для керування проєктами. +Дослідження цільової аудиторії продукту, аналіз вимог та запитів від різних груп зацікавлених осіб, а також визначення +вимог до функціональності, практичності, надійності, продуктивності та зручності використання для створення сучасного і +зручного програмного забезпечення для керування проєктами. ## Контекст -У цьому документі описується загальний порядок роботи з комерційними та некомерційними проєктами на основі [наведених нижче прикладів](#характеристика-ділових-процесів) і висвітлюються всі переваги нашого інструменту. +У цьому документі описується загальний порядок роботи з комерційними та некомерційними проєктами на +основі [наведених нижче прикладів](#характеристика-ділових-процесів) і висвітлюються всі переваги нашого інструменту. ## Основні визначення та скорочення -[Метод опитування експертів](#Метод опитування експертів) - також відомий як метод експертних оцінок або метод Delphi, є технікою збору інформації, яка передбачає залучення фахівців у певній галузі для отримання надійних прогнозів, оцінок або рекомендацій. -[ISO 9126](https://what.com.ua/iakist-programnogo-zabezpechen/4/) - є міжнародним стандартом для оцінки якості продукту (ПЗ). Він розділений на чотири частини, в яких розглядаються наступні теми: +[Метод опитування експертів](#Метод опитування експертів) - також відомий як метод експертних оцінок або метод Delphi, є +технікою збору інформації, яка передбачає залучення фахівців у певній галузі для отримання надійних прогнозів, оцінок +або рекомендацій. + +[ISO 9126](https://what.com.ua/iakist-programnogo-zabezpechen/4/) - є міжнародним стандартом для оцінки якості +продукту (ПЗ). Він розділений на чотири частини, в яких розглядаються наступні теми: - Зовнішні показники - Внутрішні показники - Модель якості - Показники якості програмного забезпечення - [FURPS](https://www.dstu.dp.ua/Portal/Data/3/19/3-19-kl26.pdf) - це абревіатура, яка характеризує: - функціональність (**F**unctionality) @@ -38,9 +46,12 @@ - продуктивність (**P**erformance) - експлуатаційну придатність (**S**upportability) - програмного забезпечення комп’ютерних систем і також використовується для визначення багатьох пов’язаних систем і послуг. + програмного забезпечення комп’ютерних систем і також використовується для визначення багатьох пов’язаних систем і + послуг. -[UML (Unified Modeling Language)](https://uk.wikipedia.org/wiki/Unified_Modeling_Language) - невід'ємною частиною уніфікованого процесу розробки програмного забезпечення. UML є мовою широкого профілю, це відкритий стандарт, що використовує графічні позначення для створення абстрактної моделі системи, яка називається UML-моделлю. +[UML (Unified Modeling Language)](https://uk.wikipedia.org/wiki/Unified_Modeling_Language) - невід'ємною частиною +уніфікованого процесу розробки програмного забезпечення. UML є мовою широкого профілю, це відкритий стандарт, що +використовує графічні позначення для створення абстрактної моделі системи, яка називається UML-моделлю. Інші визначення знаходяться [тут](/requirements/state-of-the-art.md). @@ -68,6 +79,7 @@ - [Add Question](#AddQuestion) - [Remove Question](#RemoveQuestion) - [Remove Survey](#RemoveSurvey) + ## Характеристика процесів опитування Для ефективного управління процесом опитування, потрібно розуміти, як працює сама система @@ -113,7 +125,7 @@ | **Учасники** | Система, експерт | | **Передумови** | Експерт авторизований в системі, Опитування, на яке експерт надав відповіді, доступне для редагування | | **Результат** | Експерт відредагував свої відповіді на опитування; Відредаговані відповіді експерта збережені в системі | -| **Виключні ситуації** | EX03.01: Опитування більше не доступне для редагування. +| **Виключні ситуації** | EX03.01: Опитування більше не доступне для редагування. | ID: | **CreateSurvey** | |:----------------------|:----------------------------------------------------------------------------------------| @@ -168,8 +180,8 @@ | **Назва** | Додавання нового питання до опитування | | **Учасники** | Система, Адміністратор | | **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | -| **Результат** | Адміністратор успішно додав нове питання до опитування | -| **Виключні ситуації** | EX10.01: Опитування більше не доступне для редагування. | +| **Результат** | Адміністратор успішно додав нове питання до опитування | +| **Виключні ситуації** | EX10.01: Опитування більше не доступне для редагування. | | ID: | **RemoveQuestion** | |:----------------------|:---------------------------------------------------------------------------| @@ -188,17 +200,20 @@ | **Виключні ситуації** | EX12.01: Опитування більше не доступне для редагування. | ## Короткий огляд продукту -Система організації та управління опитуваннями експертів - це комплекс інструментів і методів, які допомагають збирати, аналізувати та інтерпретувати думки та думки експертів з певної галузі знань. + +Система організації та управління опитуваннями експертів - це комплекс інструментів і методів, які допомагають збирати, +аналізувати та інтерпретувати думки та думки експертів з певної галузі знань. Основні категорії користувачів системи: * Експерт - користувач, який може відповідати на певні запитання під час опитування. * Адміністратор - це особа, яка контролює проходження опитування. - ## Функціональність -Функціональні вимоги системи представлені через інтерфейси для різних типів користувачів. Це дозволяє визначити, які можливості доступні для кожної категорії користувачів, аналізувати їх взаємодію та чітко встановлювати межі системи, щоб забезпечити необхідний функціонал для виконання окремих завдань. +Функціональні вимоги системи представлені через інтерфейси для різних типів користувачів. Це дозволяє визначити, які +можливості доступні для кожної категорії користувачів, аналізувати їх взаємодію та чітко встановлювати межі системи, щоб +забезпечити необхідний функціонал для виконання окремих завдань. ### Інтерфейс експерта @@ -209,9 +224,10 @@ * проходження опитування експертом * редагування своїх відповідей на опитування - ### Інтерфейс адміністратора системи + Інтерфейс адміністратора передбачає ширші можливості керування системою. + * створення опитування * редагування опитування * призначення опитування експерту @@ -222,7 +238,6 @@ * видалення нового питання до опитування * видалення опитування - ## Практичність - Простий мінімалістичний дизайн інтерфейсу, інтуїтивність @@ -251,7 +266,6 @@ - Гнучке налаштування лімітів використовуваних ресурсів кожного проєкту окремо - Висока пропускна здатність - ## Експлуатаційна придатність - Постійна технічна підтримка сервісу, швидкий зворотній зв'язок From c125a7eeece695dbfd06b3c17d9157c8d3ba2846 Mon Sep 17 00:00:00 2001 From: Tanya Date: Wed, 22 May 2024 11:15:56 +0300 Subject: [PATCH 11/14] add ER model for lab 3 --- docs/design/README.md | 59 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/docs/design/README.md b/docs/design/README.md index 0442e341..6473ba89 100644 --- a/docs/design/README.md +++ b/docs/design/README.md @@ -41,6 +41,7 @@ entity Question.survey entity Answer entity Answer.id entity Answer.option +entity Answer.questionId entity Statistic entity Statistic.id @@ -70,6 +71,7 @@ Question.survey --d-* Question Answer.id --u-* Answer Answer.option --u-* Answer +Answer.questionId --u-* Answer Statistic.id --u-* Statistic Statistic.surveyId --u-* Statistic @@ -85,3 +87,60 @@ Survey "1" -- "1" Statistic +
+ +@startuml + +entity Role { +id: INT +name: TEXT +} + +entity User { +id: INT +nickname: TEXT +email: TEXT +password: TEXT +roleId: INT +} + +entity Survey { +id: INT +name: TEXT +startDate: DATE +endDate: DATE +} + +entity AssignedSurvey { +surveyId: INT +userId: INT +} + +entity Question { +id: INT +description: TEXT +number: NUMBER +surveyId: INT +} + +entity Answer { +id: INT +option: TEXT +questionId: INT +} + +entity Statistic { +id: INT +surveyId: INT +} + +User "0," -d- "1" Role : roleId +Survey "0," -r- "1" User +Survey "1" -l- "1,3" Question : surveyId +Survey "1" -u- "0,*" AssignedSurvey : surveyId +Question "1,3" -- "1" Answer : questionId +Survey "1" -- "1" Statistic : surveyId + +@enduml + +
\ No newline at end of file From 6b14c0c0e3a62648e30d4e8f087c136e54f04f17 Mon Sep 17 00:00:00 2001 From: Tanya Date: Wed, 22 May 2024 11:18:39 +0300 Subject: [PATCH 12/14] add ER model for lab 3 --- docs/design/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/design/README.md b/docs/design/README.md index 6473ba89..e57b3630 100644 --- a/docs/design/README.md +++ b/docs/design/README.md @@ -143,4 +143,5 @@ Survey "1" -- "1" Statistic : surveyId @enduml - \ No newline at end of file + + From f359620949ba70f9a1e78a56c6e608d575795057 Mon Sep 17 00:00:00 2001 From: Tanya Date: Wed, 22 May 2024 12:22:54 +0300 Subject: [PATCH 13/14] add relational schema for lab 4 and MySQL Workbench Forward Engineering for lab 5 --- docs/design/README.md | 14 ++- docs/design/relational_schema.png | Bin 0 -> 30855 bytes docs/software/README.md | 154 ++++++++++++++++++++++++++++++ 3 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 docs/design/relational_schema.png diff --git a/docs/design/README.md b/docs/design/README.md index e57b3630..9affbde2 100644 --- a/docs/design/README.md +++ b/docs/design/README.md @@ -135,7 +135,7 @@ surveyId: INT } User "0," -d- "1" Role : roleId -Survey "0," -r- "1" User +User "0," -l- "1" AssignedSurvey : userId Survey "1" -l- "1,3" Question : surveyId Survey "1" -u- "0,*" AssignedSurvey : surveyId Question "1,3" -- "1" Answer : questionId @@ -145,3 +145,15 @@ Survey "1" -- "1" Statistic : surveyId +## Реляційна схема + +
+ + + +
\ No newline at end of file diff --git a/docs/design/relational_schema.png b/docs/design/relational_schema.png new file mode 100644 index 0000000000000000000000000000000000000000..650383d080a8b6f09459d797ab8dcc4348d56b95 GIT binary patch literal 30855 zcmaHT1z1$!w)O^8x>F=Xq`NyDx{(G+X`~xzDFFfL7&@i9QyNBEK%^U_yW!t>&b{Z{ zd;fd)JTlJAj&Fal-u15at{tkZD20wfi~;}vx{S2A3IM>Xg8y)k;K6UqY35zQw`cF= zq{M-T$5&=+K`a2g1Z2eDsJW-^&ig8>X|~Z`AMD%eh!U$k!54q+8jG~&)crQr_Pukq z8L_kp{pMFSDyM$Wc=(aHf)xG}_W_|5T21eGUHa$Wsy0w~oQ_im=5Rgfxy<0_ak*l; zM`@ICE@;hDnRV?PYi#oZV{;nN74?X1>@uC{QV!FP_%-K*BFxNECr9;fz!GqDWa+-DcG;uC5p&MDeU&@NO`ifIbAJ%REcVclEY1ii#MU zc+cEe#E`OB^;+DIhL`l}b&sSIHWH{EzC7^@b;(;HiN+E3uVyimGAXN6XV9>ot>aqb zd%O@Wqxo=pHQ#*K0H5tZw$}91tLP4agqb!u8Qq!>)79Ud-W!lo1VV1Ecgk%rrbkx< z(L9|J-o^0N@E&A!c^s|uEb*~{%~nR@hT0tNj~=dY2~tM5=qa-bQZ{F#I+-7q4Vj_F zpi2p0Ludn8+AiPsEACU7h2#3(p}O_sCYHt#9<-)6F&e*B(PCg3{UTkz_(M8D@Z<-F zKl{>e#Xu|+qs#AGIX%U#I48ap;;-O>jR3#`^Ap_5^oNr`EOQ^#wx)Ydf=b6S(@ zZ`3@Y5I0kp3XPBnA|&hEYK?y9?XxHg(@#uFVOCszUZ{q{cxnWWYnHwH1Jye6G7|4x z%S6wB$+&pqkNveYMj3~bsMHqNHd*!TJhP_!pQb}bomAKQi*no9B+ZWyl|jcz>Wp0q z+p6x`G;netr?2vo%`qOBgu;fJcvqZp3&LHhy0=&KY!kZ%9Idz1S!qeWs3p|C*@33l z9$6ML8WrXJy}YzNi4x5@FPYW?M}42;(uNo7dbgxe*3={W?f$ObaK6x6PX;68|{&AtUUl z1AEDR$$f=7@T^;K8E|*CI`P^R;rGZoQ|q}$p!w|?%s^BjyBizV!9aP|7(x%Eb;B20+(}2ToMdb)P{*#BrnR0x&c_vIY8e(`eSR6l*Th zEe_JYV{-M;u{$M{XpFB?@zM8$aYe@mFzAA_AEyNBbYkdM$y^W{&*~b|weH-cT|dw4 z(wLSCb#V$rW&QoUKRwZ)ee`2d`3*a1SIIA5zx?nU*ZLbKPAs$aLbLseA1`L0u3zT% z5npP*sF%`3dR*sWPhgIWFs2ws@j(QHl3A))`APeYdUo?$Y%)(cpTKNDRki1 z$?*>GHNGGlF@Nzs%#5hXC4kv6)SO{bsg%*nk)O&i1GGr5j_xYvE$$<8!+^UMi`b8=P^5lJboX?z0Y?*~i8&D-CbIe4YT2UiRnU7eQR9N{OwU z#Tg&=V+UF#ot7Aci{T!P(0>|M)PJ+b5?fODXKYRL}>N`u0;pT17!v4WqM<+#`{pe1ycoHQ`E>C4lJVFvTx2376DL6QIV`D?R zlnb6@PrQ2V$BYw#Sl5NhF=*=rOz21`dnyQ3(fXuGtKvLEXS(Pt`w!AONugoD7o^uZXTjfBXxH>P_C3 z?0jlzqzV-aKOy5!C1lb6;-a^~L%jLAyUkf943dRZQvr6w=vRWs-@kw7NJR~6;lBmI zlb}`4SO>U;1QV7oKeq(Wal86_=58%jAi&Lr`(4Qn`vJBj#LV`$bfKDtnp#b5?U0&( zKTGPS7)MEU^#qfq``NkAe}^xevi2kwW|?dOioELTlVtPsP_QY*-T37~yH~#CtP(OZ zGAfoG2OehCGgh_q@q?_Z$@=ByMAVmGUZzlg@v;a;7a{Vlaj(^Ue~+0U{W^V&BC}qQ z4d_1cO~-<~G!3n3J}K^G>H(L{SedhK)j%SeNW=3Toga3(t~5}0J5!YyU1rR7y)o&4#W?s-UFvxTP%C2i{;g^Xp{_%=K)q+z>ePr?GN< zQ=>mh2!0+CjXA_x7`W_Zc1Z;3wchoeuWjUe6)!tZK!Y~t)}S4ep1{d!?bZ~^E)efj z%~oiiYn!^*K0B)CoPF1&HEr_A_;jJaRJh$P&$L`lUV*US@QWJ#_tB6QY)N6x7cCFz z$AR`wNNg9jS4`L~vvtkfjujJf8?K}j7uKDlX7+3oKlJXfosPi}qYQ$pE);LQZoUu- zBQpJe(3I$0IkmGtB-?+JH!`tNdtm@4y@FYB9|TkAUof2q!L;$Su~_-18yKY5TYVU`Dvr`{?%PGIz&+iX=q#NqyF;O_42yqHxyJJmS)$#KLPE}16QyYM!;J) z*N#Mt1ii;TTpo%Nnhj*cj%xqStHA|&SM8djd4?)8iuzt@?-E(DMac zauO{>9~J6Gm#XC>J4XtNvYp}wO?10-ct3Q3aA4_t=mo%fT3d)|I6q8!&%8I_v0TgoXSkLB)M8ka zh}v@^*R7go5AgL2e~DKQPFsur!voOG>`&Cw-r07vS=4$4BqG{&E}g-E(dqlEQTJzy zcn;6gN2?xOY8U13{&1Thi0&6bfC^`C_Y%yd?Ug;?Yo*Rpzn0)epRQL#{4TP?V~GkzWcG|wN#!~CAC^S z=(O|x4$by=ak3@bWu97huEOcvw{J*Q_DCu2Edo;hu+%*>&#CUtPs~{k0dx7w^B*LMx1~H2c zwEEfprhEzO1TuWD*8Sn8_F`mszv4W;xl_OCJQC%7h>i*tA|9ZI7`mF;c;+428r*Ci zW@q4KeZ~I}4lpmac_7pUy|@)Tv3hlndQ>WN*v~`Z);0V}?4po?oX!sPZyG5P1fxeT z#{aA&W}f{FTJ1Azks_M=H~%GA`$gaiVx()fh2i{u;FE#DbvlN`0%n6EX<6AHx@GvHsR+QW)D1O&W2%|c5tK2guvSRRsLtCi!UVOY%&dO zqogHuHG!z@LVV%|i~KW(!->FG3gQerlq0A4-4;e*s}3W$iGb;_^T^nH6(Px=8GTlt zJOk=wxmpMGDAcLk{T%GH4`78jJiYOvC2k|Hdoi@=;2cUr5r_yuQrcn@^8@_mH%>j7 zNflcT&F-Jl>hM&uuU9QkdLalg3fix2&LS>)%rls((9K4Y%-Hd{r$)*UlrlU)!nv(t z_#omJtSN+$1OTQ7W2e*SP%o6DGGt(P#=v>`vT#*EDX1aAyhAm~0?o^^f9MCo)-&4K zJ>R175c&PqSPaPL;{_IsEK95Z>Nug#H(}q-ec7F}*qxXa^+l$-Rgi zV_3XqFx#0J7@(Ca1ZCIP*J2?UJxv4_D4!k%L8m2~!bMwhIbr3irz15rRRJ?BDUE)# zpRMe$Bl-&O9AHjw1+vR1QeFg0Nr~)l(Rv;aP|?vLBR6PvwD?D3N_1uCu4#$*8{IJM zwU&3+Je#Q6>kmDrtSozyvbNCQpHZeiwAgyXV?Mmg#Hd?srT&$M`$^U$ciQeKgL#Y3 zNkFYkanaisGENPc2l&QBHaS!=8KhMA|?8cNDd1Ru{5Nt(gfG(_9-uEed60ucg zr3NBkxc$~Mj6kZo=m>@^(mX)d^jq?qC98*l;Oj^3&dKF_`KP#6Nr>y&A+Y4>*Btl- zuAj%6cXEc0ogH#wQLCV^Duj2PsQ;5HWvdzK4In>RL%!;nZRaLkTv|3Yj+V|tGnm}J zH`|97BrG?Q+oAdPT^V;cB*R{^tsThJ-prWujR*_S$1hNs#F>(#V{~4f z^n955wdblt?WCYYN-+fFTWwgVmMXHOF61)7QBth3iF@L8$WHJ(1J5#WRccJ4&f0mvd*-0kjGQ?|!Zi0ZYg# zH1SQhMKL)x8h2}vh1<^I`I!U&fM({BrdcqloAcg^THlJeFRBH0`YyA!UQYGx&OGLM zs;ogx94ix$nVd9qqKGa0Hq#)%;L(w5cHYJ*dq`*bv$Jzl7L1gemn+!rb9a;BQ}nCa z9BpZA>80ELToeb##KZ(XN)SzKFUOb7*$_6-RhgrY7)}wg>Rgq*T^HgXVl~uPpX>a@ z(|UuLUZ&zNsk+2R#8QH)qmz_yq^Z8Z_C`}*-SPL&l0SPzDI}Lb+&XTS5|U+h5<&`m z{4^%ywyai$fidx%Zo=2!C#gt17)34w2N0c>m*!9~u|T^}fK$e|X!=;1302wZ8Uw=` zDa6V03Du74B6tM)B2H%3hJIe>GhjP4%k|S@V`EcN_}5oBBYJzwV*dD5tLwyPeHxC@ zCKkhdg2G`Hh$X^6?Xs?}*P72A(3IL{YQvE<#6=%$loUfiM4p-(q(#iNK?b`__K_01 zJ66qahxbk@O3r!e1D|tnSwPz}ZmhAX?@0uk{9|dG<|BO>{h_YB zdJZ@D4se_M*?1`qE70uca#x5qu19*k@ASj`!!0?_!*p}qEKiOB!&>5^0l{&Q$T#ix zmOtg^3b5deC)dX2k-z(zf=qR6sl~~2>!RJP{bp*$d%M|y%;WNIUTYd;jh?cyw}A$>UTolW^5M4OoPT58e*(l`Wq?R+w;JTh}5a_3-n) zeFpIt5Qx@b9BEyPT>(Z!4eLvdh&Yj$*PLz1d1vV=$Z0m?`iiS;RWdbCRli!|1&)${ zzPCic`_-usZjC>VjZ)+bgC5on(cCGT2Nj%FoDm7i28=YO6KaL%3oqdR2=o?E_ZASm zZzIKr(83d4DRcI#OsLfFO0Qkb%7n!c`WAV~Q$@?y2$k<8Q19gkq>rmHo%T|5-xa6- zYO%~lnBt7?Qrnwlz&%E-e|Dp({H`F{0S!Y^#agFq^rNjuZhhkbOh~|+N8(XV3GPNA*zRJ zMcE9}8(S7hq#;ePiE*p|BLxmLqM?>RcP4C*?qonHBVmk~|Ctaw%T;B!<9$WI_OnOp$x* zOcbsRSn%@Oz)x(Kg{kB%wx(EYoxHfrmo601HnOmQ>Qf+P@jV_I(_LExg=vbtb$I_i zX8PTvf(D?+QOP;J8S&*{m(Z}B+SF2FdfQ5A>7-dRwydtQI5!t&aG)q;Ir4cl?wbD_ zvM}XmtQ7M@ZFE}M7$j%vc>Zw(a8;I6C(T z(^1o%1m7=Xr39(dCArITjE_I$wFNvGMn8Q!f}e0y%S0L|-;#IIl(I#iZOwm#?=mDl z=b`pTfd7`j4=aV-z6O^`^q#=w73T@)1}yR<2k$SsHP2U;p{BrtBo%I)OR9xbWsYJ6 zgDoY@laex@LG#${;C`t6;U)q^Y~}+A*hImkq{~RiXUp2(fByXGA2ucGwTd{0w*n!t zrEs*a6u*9Khl>^PzyQQ*K!_XUv`3y+TWkek9->G$ln=RyNSn z?~`UnafhfWyr_bLf{hImpv6d#Gj`ISm6AfdEWR8DvFV}XPs0G@^S|vs2S+EXq3*+U znaIP{$U)nUt(cftYG3=|-EwjHlw}QSIAn$P|)!HlKts01l&*iR(0O>cLF4G$kzS*V8@KP}_c$j);N6PQ~ z8LRWlB2(xSOFFuda)XEaf(-ie-RB7IoV@*M0vD@4ew>~<2SF%IPOit0y(yPP4Qq9R zzTvji=T2;cf(uT9mZY)CI%FClPT;9vvvb73V zP5;P{r-o@a9+SJ@Cz=m~&Ys`Nrf+I;BRIK1SpE4^ErrI!9V;gbQmBSfN%Og=h(2~8 zSED#6uC9)of^jVI^v{YP3Sd^9+*|SW?1)LZeENoIg0PGAwAwxIrdN-m=Y8d85kjIKP6my4vX= zg^Ta+W@%}uQW$5(3LRQ5|Bdz0zb)3PZ4d^Nla&Sk2H}C@#K^=(9MO51t5OICk08JY zYim5j(w7$$Pv}SMf85@BE$i{u(qVW~$A;cxS@5V8s$J&;qIPz6Z{ED=#}p2D%)Bhk zH9CQrsk=?z`%N(P#-Letd$;%?gy9(cIuUkKRaI1Hr&*|`4`Mwdft*a}Cf_RxJD6(m zB&Rv=gq|~gXhlL`q&y0X3xC>-wJR@4C#<(uvdLbue0su|Uir!g6>qWkC9~=+$mqa< zO6pZDR67j;NA8OxrS~+$)5rPmKFm&>eVT^S69F2U8|q_0yN9xe=7%d0+xv1in|eFR zc8&h>$Dhtmx+_Mcu52bhTUlF|6cvSCI_Heh&atosfV2q=EK3BO4DV$vKBV0E_|@~Z z?c8ziJX{^n!8nZd=$-(Fy)W!Y_?@?|HZ!6&71P~`F%RZ4=v(!bF6@zgpyDs7sHj#v znX(Z;6bX(l7g5rS=Nsgw`XM%cvIjZ=YL~uut0nr;Wq3%wp>O7{VFvd&uQ!Z{M3<9> zML2Q7Z_NKTz{?}w>C)4k6%C=DMDRki^GHxcH7F#t{t&9*C4fC&6S|{c3Ic!8|D;_tIks#6h8iAEP zeIxh)5|)R@kk(5%1-bbu%IHly8afsI+rneEcyacz^T2q!&fvyQGsV-q#fVIBDR|#7 zK!%s>m!UpR!+CJS}324Wf2CLKsBciu@Z=OU`Sd-qOT z+v9j`;85ue(vTbIe7%JrWzfcpj=%Z}>*|+BqUijDS3c`)R-qxAr}FETi~^4aj2h9( z=oU9MdU4_5(@;};w3>25xBapFx3Xm+pCxm$nn{BAsJCm=#CcCYdV{7rDH$7r3P=j$ zQ4KUknLg|qpcuHbv9XQqFd0cv8SUhQ<~&8^?b|Fh`T)Bpc`Aj0^DYsRl=FfEZiKWB z+$^2UvPfC(ekWeEAK{s-$9B&2FEHKFEyFUbA)yDU`0aTU+wkZi&*Ih%O}B6g@?W$ST>r5wFpv-!vkXgM=HzbpMCMxKb*+2r+R`U?aiga$!loyf0c8pZE) zKyJU{#zh>_@cVR1y;a}t-yt+CJ)P{j>?`vVFh&V35%1_vB425h{q;>#K=d^_T|uX9 zDI(RCkdUymJBT|k2SA^QoAF&8)h3;n6jb&w#l9bDO*O|-?wI?ShN*TiFK!H*QGYbphIQp}$fmj;w+bA+2 zdJHvAc4TrXlA1vABO3^0L-gs#_?g*R28@n4P2aeL#b3W@<5uHed3~e%{+EfS)WpSY zPM1II6l5%z&ag##{zcPz8cIqbA-yc+Q9=FI=b&#TZyFyL=j`G#W_^0lFwN|JYO1at zKWVkMy}vv~RkrbB`F1t>_zGyIas%uAHZ&VtX5?mJ?M8a+4zF>v&oPd!>0X=y9881?k@Wb>+ui(w#Y z3Rp#F%}Wu#Df}nWa;9rD5*RsAVeLiY#n}0?l2Nt}p7yY!?a_Mv8`38Iy?Wfh`f;tc zHdjzka$1__bjiTqO-4>GRyI$cFKC7_i;&17QMf!YFE39jiY#x{AN0<^p~=T}?=a{rtp77Bhg=B>mJ(L>a+F5YV?a0G^d`R zhqHB=u2YK9CYLb{Cg&`

lF^a4$tfGFM>Mqkq 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 Date: Wed, 22 May 2024 12:47:50 +0100 Subject: [PATCH 14/14] answers to the first 3 labs --- docs/answers_for_lq/lab1.md | 30 ++++++++++++++++ docs/answers_for_lq/lab2.md | 68 +++++++++++++++++++++++++++++++++++++ docs/answers_for_lq/lab3.md | 63 ++++++++++++++++++++++++++++++++++ 3 files changed, 161 insertions(+) create mode 100644 docs/answers_for_lq/lab1.md create mode 100644 docs/answers_for_lq/lab2.md create mode 100644 docs/answers_for_lq/lab3.md diff --git a/docs/answers_for_lq/lab1.md b/docs/answers_for_lq/lab1.md new file mode 100644 index 00000000..55d62028 --- /dev/null +++ b/docs/answers_for_lq/lab1.md @@ -0,0 +1,30 @@ +# Відповіді на питання + +## Які категорії користувачів можуть приймати участь у проекті? +Категорії користувачів, що можуть приймати участь у проекті, залежать від специфіки проекту. Загалом, це можуть бути: +- Розробники +- Тестувальники +- Кінцеві користувачі +- Адміністратори системи +- Проектні менеджери +- Стейкхолдери + +## Етапи розробки баз даних +Етапи розробки баз даних зазвичай включають: +1. Збір вимог +2. Концептуальне проектування +3. Логічне проектування +4. Фізичне проектування +5. Імплементація +6. Тестування +7. Розгортання +8. Супровід і оновлення + +## Що означає "концептуальна модель"? +Концептуальна модель у контексті баз даних — це високорівнева структурна модель, що використовується для організації інформації та деталізації бізнес-правил. Вона узагальнює і представляє дані незалежно від того, як вони будуть збережені фізично. + +## Де визначаються ситуації, що не входять у список передумов? +Ситуації, що не входять у список передумов, зазвичай визначаються у специфікації вимог або під час аналізу ризиків проекту. Це може включати в себе: +- Непередбачувані використання системи +- Можливі випадки відмови або помилки +- Ризики, пов'язані з безпекою та конфіденційністю diff --git a/docs/answers_for_lq/lab2.md b/docs/answers_for_lq/lab2.md new file mode 100644 index 00000000..f8da9108 --- /dev/null +++ b/docs/answers_for_lq/lab2.md @@ -0,0 +1,68 @@ +# Відповіді на питання + +## Які категорії користувачів можуть приймати участь у проекті? +Категорії користувачів, що можуть приймати участь у проекті, залежать від специфіки проекту. Загалом, це можуть бути: +- Розробники +- Тестувальники +- Кінцеві користувачі +- Адміністратори системи +- Проектні менеджери +- Стейкхолдери + +## Що представляє собою діаграма Use Case? +Діаграма Use Case є частиною UML (Unified Modeling Language) і використовується для ілюстрації функціональних вимог до системи. Вона показує, як різні користувачі (актори) взаємодіють із системою для досягнення певних цілей. + +## Етапи розробки баз даних +Етапи розробки баз даних зазвичай включають: +1. Збір вимог +2. Концептуальне проектування +3. Логічне проектування +4. Фізичне проектування +5. Реалізація +6. Тестування +7. Розгортання +8. Підтримка та обслуговування + +## Які види відношень застосовуються в UML? +У UML використовуються різні типи відношень, включаючи: +- Асоціації +- Наслідування +- Залежності +- Агрегація +- Композиція + +## Де ініціюється і закінчується процес взаємодії відповідно до сценарію прецедента? +Процес взаємодії зазвичай ініціюється коли актор звертається до системи з певною метою (початок Use Case) і закінчується коли ця мета досягнута або коли процес переривається (кінець Use Case). + +## Яке зображення має прецедент на діаграмі UML? +На діаграмі UML прецедент зображується у вигляді овалу з назвою в середині. + +## З яких частин складається специфікація Use Case? +Специфікація Use Case зазвичай включає: +- Назву +- Опис +- Передумови +- Основний сценарій взаємодії +- Розширення (альтернативні сценарії) +- Виключення (умови виходу або помилки) + +## Де визначаються ситуації, що не входять у список передумов? +Ситуації, які не входять у список передумов, зазвичай розглядаються у рамках аналізу вимог і ризиків проекту, де вони визначаються як потенційні ризики або виключення. + +## Які повноваження може мати Actor? +Actor (актор) може мати різні повноваження залежно від його ролі у системі, включаючи: +- Доступ до певних функцій системи +- Вплив на зміни в системі +- Виконання специфічних операцій або процесів + +## На основі чого відбувається виділення сутностей проекту? +Виділення сутностей проекту зазвичай відбувається на основі аналізу бізнес-процесів, вимог до системи та інформаційних потреб користувачів. + +## Яке призначення прецедентів? +Призначення прецедентів полягає у визначенні та документуванні функціональних вимог, які система має виконувати для досягнення бізнес-цілей користувачів або замовників. + +## Які стосунки можливі між актором і елементом Use Case? +Між актором і елементом Use Case можливі такі стосунки: +- Асоціація (актор взаємодіє з Use Case) +- Залежність (актор залежить від результатів Use Case) +- Розширення (актор може ініціювати додаткові сценарії Use Case) diff --git a/docs/answers_for_lq/lab3.md b/docs/answers_for_lq/lab3.md new file mode 100644 index 00000000..5129ad4c --- /dev/null +++ b/docs/answers_for_lq/lab3.md @@ -0,0 +1,63 @@ +# Відповіді на питання + +## 1. Що таке бізнес моделювання? +Бізнес моделювання — це процес абстрагування та структурування ключових аспектів бізнесу для аналізу, покращення, та візуалізації бізнес-процесів та взаємодій усередині компанії. + +## 2. Призначення бізнес моделювання? +Бізнес моделювання використовується для: +- Оптимізації бізнес-процесів +- Виявлення та усунення неефективностей +- Підтримки рішень щодо стратегічних змін у компанії + +## 3. Де використовується бізнес моделювання? +Бізнес моделювання використовується в багатьох сферах, включаючи: +- Управління процесами +- Стратегічне планування +- Розвиток нових продуктів +- Інформаційні технології для розробки систем + +## 4. Що таке бізнес-сутність? +Бізнес-сутність — це основний компонент бізнес-моделі, який представляє інформацію або об'єкт реального світу, що має значення для організації. + +## 5. Для чого використовується бізнес-сутність? +Бізнес-сутність використовується для: +- Структурування інформації в системах +- Управління даними +- Моделювання бізнес-процесів + +## 6. Як визначити бізнес-сутність? +Бізнес-сутність визначається через її атрибути та взаємодії з іншими сутностями. Часто для цього аналізуються бізнес-процеси та вимоги до інформаційних потреб. + +## 7. Які існують зв’язки між бізнес-сутностями? +Між бізнес-сутностями можуть бути такі зв’язки: +- Асоціації +- Агрегації +- Композиції +- Спадкування + +## 8. Що таке асоціативний зв’язок? Як він відображається? +Асоціативний зв’язок відображає взаємовідносини між двома сутностями, де одна сутність може асоціюватися з багатьма іншими. На діаграмах відображається лінією, що з'єднує сутності. + +## 9. Що таке зв’язок агрегація? Як він відображається? +Агрегація — це вид асоціації, що представляє відносини "ціле-частина". На діаграмах відображається лінією з порожньою ромбовидною фігурою на кінці, що вказує на "ціле". + +## 10. Що таке зв’язок композиція? Як він відображається? +Композиція — сильніший вид агрегації, де частини не можуть існувати без цілого. На діаграмах відображається лінією з заповненою ромбовидною фігурою на кінці. + +## 11. Що таке зв’язок спадкування? Як він відображається? +Зв’язок спадкування використовується для визначення ієрархічних відносин між сутностями, де одна сутність успадковує характеристики іншої. На діаграмах відображається як лінія зі стрілкою, що вказує на базову сутність. + +## 12. Що таке атрибути бізнес-сутності? +Атрибути бізнес-сутності — це характеристики або властивості, що визначають дані та можуть бути збережені та оброблені в рамках бізнес-моделі. + +## 13. Для чого існують атрибути бізнес-об’єктів? +Атрибути бізнес-об’єктів слугують для деталізації та структурування інформації, яка потрібна для обробки та управління бізнес-процесами. + +## 14. Що таке словник предметної області? +Словник предметної області — це документ або база даних, що містить описи всіх термінів та понять, що використовуються у певній області діяльності. + +## Для чого використовується словник предметної області? +Словник предметної області використовується для: +- Забезпечення узгодженості в термінології +- Полегшення спілкування та взаєморозуміння між учасниками проекту +- Навчання нових членів команди