Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e9d104f53a | |||
| b8f1e590e7 | |||
| 06b52b1efc | |||
| d67567d304 | |||
| 8b5812ac91 | |||
| acada2851d | |||
| 2332744679 | |||
| 605b898358 | |||
| dfa280a6b2 | |||
| e31c1eab09 | |||
| 35c3276a5c | |||
| 0b2e555a36 | |||
| bba0246d8d | |||
| 6dde82e6fb | |||
| 5d1eb939da | |||
| b7d6da08d3 | |||
| 0fda5ae979 | |||
| f97a9cb026 | |||
| 947fb51d4c | |||
| c7447675c5 | |||
| 86a25aefda | |||
| 614f0151a7 | |||
| 6456470407 | |||
| bf26464b7d | |||
| db649f6242 | |||
| ffe289e0c3 | |||
| ffeb21a811 | |||
| 6412576483 | |||
| ca632cfa55 | |||
| eb76664c04 | |||
| eb0973a4e8 | |||
| 5f0bd3e0d8 |
+176
-12
@@ -1,8 +1,69 @@
|
|||||||
# Розроблення вимог до системи
|
# Розроблення вимог до системи
|
||||||
|
|
||||||
## Основні визначення
|
## Вступ
|
||||||
|
У даному розділі проводиться аналіз предметної області, пов'язаної з системою організації та управління експертними опитуваннями. Представлені такі категорії:
|
||||||
|
|
||||||
|
- [Основні визначення](#основні-визначення), котрі можна зустріти в сфері експертних опитувань
|
||||||
|
- [Підходи та способи вирішення завдання](#підходи-та-способи-вирішення-завдання) опитування експертів
|
||||||
|
- [Порівняльна характеристика наявних засобів вирішення завдання](#порівняльна-характеристика-існуючих-засобів-вирішення-завдання) опитування експертів
|
||||||
|
- [Висновки](#висновки) щодо доцільності розробки нової системи
|
||||||
|
- [Література](#література), де наведені посилання на джерела інформації
|
||||||
|
|
||||||
|
## Основні визначення
|
||||||
|
### Технічні визначення
|
||||||
|
**База даних** [](https://uk.wikipedia.org/wiki/База_даних)
|
||||||
|
|
||||||
|
База даних (англ. database) – сукупність даних, організованих відповідно до концепції, яка описує характеристику цих даних і взаємозв'язки між їх елементами; ця сукупність підтримує щонайменше одну з областей застосування (за стандартом ISO/IEC 2382:2015). В загальному випадку база даних містить схеми, таблиці, подання, збережені процедури та інші об'єкти. Дані у базі організовують відповідно до моделі організації даних. Таким чином, сучасна база даних, крім самих даних, містить їх опис та може містити засоби для їх обробки.
|
||||||
|
|
||||||
|
**SQL** [](https://uk.wikipedia.org/wiki/SQL)
|
||||||
|
|
||||||
|
SQL (англ. Structured query language — мова структурованих запитів) — декларативна мова програмування для взаємодії користувача з базами даних, що застосовується для формування запитів, оновлення і керування реляційними БД, створення схеми бази даних та її модифікації, системи контролю за доступом до бази даних. Сама по собі SQL не є ані системою керування базами даних, ані окремим програмним продуктом. На відміну від дійсних мов програмування (C або Pascal), SQL може формувати інтерактивні запити або, бувши вбудованою в прикладні програми, виступати як інструкції для керування даними. Окрім цього, стандарт SQL містить функції для визначення зміни, перевірки та захисту даних.
|
||||||
|
|
||||||
|
### Загальні визначення
|
||||||
|
**Опитування** [](https://uk.wikipedia.org/wiki/Опитування)
|
||||||
|
|
||||||
|
Опи́тування — це метод збору соціологічної інформації про досліджуваний об'єкт під час безпосереднього (усне опитування, інтерв'ю) або опосередкованого (письмове опитування, анкетування) спілкування того хто опитує з респондентом. Опитування бувають соціологічні, політологічні, маркетингові, психологічні — залежно від предмету дослідження. Залежно від кількості опитуваних (вибірки, вибіркової сукупності) вони також можуть бути масовими, вибірковими, індивідуальними, експертними. Також використовується для вимірювання «громадської думки» з різних питань.
|
||||||
|
|
||||||
|
**Експерт** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
|
||||||
|
|
||||||
|
Експертом називають людину, що є фахівцем (спеціалістом) у певній предметній області (ПО) і може пояснити свої дії та міркування. Предметною областю називають будь-яку галузь діяльності людини, наприклад, “Технічні засоби автоматизації”, “Охорона довкілля”, “Системи штучного інтелекту” тощо.
|
||||||
|
**Експертне опитування**
|
||||||
|
Експертне опитування або опитування фахівців — це особливий метод маркетингового (і/або соціологічного) дослідження. В рамках такого опитування досліджувана тема обговорюється з експертами, компетентними в даній сфері.
|
||||||
|
### Методи експертного опитування
|
||||||
|
#### Активні методи
|
||||||
|
Активні методи передбачають спілкування між організаторами та експертами. Можливі два напрямки активної роботи з експертами: індивідуальна робота з експертом (анонімна чи відкрита) та робота з групою в цілому.
|
||||||
|
***
|
||||||
|
#### До індивідуальних активних методів належать анкетування, інтерв’ю, діалог з експертом, ігри з експертом.
|
||||||
|
|
||||||
|
**Інтерв’ю** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
|
||||||
|
|
||||||
|
Інтерв’ю – це форма спілкування між дослідником та експертом, при якій дослідник ставить заздалегідь підготовлену чергу запитань. Можна замінити ці запитання на інші у відповідності до ситуації.
|
||||||
|
|
||||||
|
**Діалог** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
|
||||||
|
|
||||||
|
Діалог – це метод отримання знань у формі бесіди між дослідником та експертом, коли немає жорстко регламентованого плану проведеня і визначеного заздалегідь переліку запитань.
|
||||||
|
|
||||||
|
**Ігри з експертом** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
|
||||||
|
|
||||||
|
Ігри з експертом (експертні ігри) – це експерименти, у яких фахівцю пропонують важливі ситуації з предметної області. Фахівець повинен запропонувати рішення по виходу з цих ситуацій на основі свого життєвого досвіду, спеціальних знань та уявлень.
|
||||||
|
***
|
||||||
|
#### До методів активної роботи з групою в цілому належать методи круглого столу, мозкового штурму та рольові ігри.
|
||||||
|
|
||||||
|
**Круглий стіл** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
|
||||||
|
|
||||||
|
“Круглий стіл” передбачає обговорення певної проблеми, у якому приймають участь експерти з однаковими правами. Задача дискусії – вивчити проблему всебічно, тому слід запрошувати експертів, які належать до різних наукових напрямків, мають різний вік, стать і т.ін. Цей метод не передбачає терміновості прийняття рішення.
|
||||||
|
|
||||||
|
**Мозковий штурм** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
|
||||||
|
|
||||||
|
“Мозковий штурм (атака)” – один із найбільш поширених методів активізації думок. Його застосовують у тих випадках, коли потрібно знайти вирішення певної проблеми за дуже короткий час. Під час такого обговоренння кожний експерт повинен запропонувати свій шлях розвязання задачі або розвинути думку іншого учасника.
|
||||||
|
|
||||||
|
**Рольові ігри** [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
|
||||||
|
|
||||||
|
Рольові ігри (експертні ігри) – це експерименти, у яких колективу спеціалістів пропонують складні ситуації з предметної області. Спеціалісти у процесі відкритого обговорення приймають рішення про шляхи виходу з цих ситуацій.
|
||||||
|
***
|
||||||
|
#### Пасивні методи
|
||||||
|
До пасивних методів належать спостереження за діяльністю експертів, запис їхніх міркувань у процесі роботи (так звані *“думки вголос”*), лекції, які вони можуть прочитати. [](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
|
||||||
|
|
||||||
*[Розділ містить визначення термінів та скорочень, які використовуються при аналізі предметної області.]*
|
|
||||||
|
|
||||||
## Підходи та способи вирішення завдання
|
## Підходи та способи вирішення завдання
|
||||||
|
|
||||||
@@ -34,7 +95,7 @@
|
|||||||
|
|
||||||
Мінуси: часові витрати; можливість втрати мотивації учасників.
|
Мінуси: часові витрати; можливість втрати мотивації учасників.
|
||||||
|
|
||||||
Метод «мозкової атаки» («Мозкового штурму») вважається найбільш відомим методом колективного прийняття творчих рішень. Він являє собою вільний, неструктурований процес генерування власних ідей, спонтанно пропонованих учасниками, навколо заданої теми. Філософія цього методу виходить із припущення, що при звичайних прийомах обговорення виникненню новаторських ідей перешкоджають контрольні механізми свідомості, які сковують потік цих ідей під тиском звичних, стереотипних форм прийняття рішення. Гальмівний вплив надають боязнь невдачі, страх виявитися смішним і т.д.
|
Метод «мозкового штурму (атаки)»
|
||||||
|
|
||||||
Плюси: стимулювання творчості; розширення горизонтів.
|
Плюси: стимулювання творчості; розширення горизонтів.
|
||||||
|
|
||||||
@@ -42,16 +103,119 @@
|
|||||||
|
|
||||||
## Порівняльна характеристика існуючих засобів вирішення завдання
|
## Порівняльна характеристика існуючих засобів вирішення завдання
|
||||||
|
|
||||||
*[Розділ містить опис існуючих програм, інформаційних систем, сервісів, тощо, призначених для вирішення
|
Розглядатимемо такі найпопулярніші інструменти для проведення анкетувань:
|
||||||
завдання. Дається порівняльна характеристика властивостей FURPS:*
|
|
||||||
- *Functionality (функциональні вимоги)*
|
|
||||||
- *Usability (вимоги до зручності роботи)*
|
|
||||||
- *Reliability (вимоги до надійності)*
|
|
||||||
- *Performance (вимоги до продуктивності)*
|
|
||||||
- *Supportability (вимоги до підтримки)*
|
|
||||||
|
|
||||||
*(у вигляді таблиці).]*
|
[Google Forms](https://uk.wikipedia.org/wiki/Google_Форми)
|
||||||
|
|
||||||
|
Google Forms — програмне забезпечення для адміністрування опитування,
|
||||||
|
що входить до складу безкоштовного веб-пакету Google Docs Editors,
|
||||||
|
пропонованого Google. Послуга також включає Google Docs, Google Sheets,
|
||||||
|
Google Slides, Google Drawings, Google Sites і Google Keep. Google Форми
|
||||||
|
доступні лише як веб-додаток. Додаток дозволяє користувачам створювати та
|
||||||
|
редагувати опитування в Інтернеті, співпрацюючи з іншими користувачами
|
||||||
|
в режимі реального часу. Зібрану інформацію можна автоматично внести в
|
||||||
|
електронну таблицю.
|
||||||
|
|
||||||
|
[SurveyMonkey](https://en.wikipedia.org/wiki/SurveyMonkey)
|
||||||
|
|
||||||
|
SurveyMonkey - це служба як для створення простих і невеликих опитувань,
|
||||||
|
так і для масової розсилки анкет, виявлення тенденцій і складання більших
|
||||||
|
досліджень. Сервіс дозволяє швидко створювати опитування, налаштовувати
|
||||||
|
їх зовнішній вигляд, змінювати місцями питання, проводити А/Б-тестування,
|
||||||
|
вставляти опитування на сайти та соціальні мережі, складати дуже детальні
|
||||||
|
та наочні звіти, захищати дані та інтегрувати засоби з MailChimp,
|
||||||
|
GroSocial та іншими сервісами.
|
||||||
|
|
||||||
|
[Responsly](https://www.responsly.com)
|
||||||
|
|
||||||
|
Responsly - платформа, яка дозволяє створювати онлайн-опитування та
|
||||||
|
анкети всього за кілька секунд і надсилати їх тисячам одержувачів одним
|
||||||
|
натисканням кнопки. Також є вбудована технологія штучного інтелекту, яка
|
||||||
|
надає широкий вибір типів питань для опитувань, вибраних спеціально для
|
||||||
|
певної аудиторії.
|
||||||
|
|
||||||
|
[Jotform](https://en.wikipedia.org/wiki/Jotform)
|
||||||
|
|
||||||
|
Jotform — це потужна онлайн програма, яка дозволяє будь-кому швидко
|
||||||
|
створювати власні онлайн форми. Інтуїтивно зрозумілий інтерфейс
|
||||||
|
конструктора форм робить створення форм неймовірно простим, без написання
|
||||||
|
жодного рядка коду. За допомогою Jotform користувачі можуть створювати та
|
||||||
|
публікувати форми, інтегрувати їх у свій веб-сайт та отримувати відповіді
|
||||||
|
електронною поштою. Jotform дозволяє створювати онлайн форми, отримувати
|
||||||
|
відповіді безпосередньо в електронних листах та створювати PDF форми для
|
||||||
|
заповнення.
|
||||||
|
|
||||||
|
[QuestionPro](https://questionpro.com/)
|
||||||
|
|
||||||
|
QuestionPro — це програмне забезпечення для створення та розповсюдження
|
||||||
|
опитувань. Воно складається з інтуїтивно зрозумілого інтерфейсу для
|
||||||
|
створення запитань для опитувань, інструментів для їх розповсюдження
|
||||||
|
електронною поштою або на веб-сайті та інструментів для аналізу та
|
||||||
|
перегляду результатів.
|
||||||
|
|
||||||
|
[Fillout](https://www.fillout.com/)
|
||||||
|
|
||||||
|
Fillout — це платформа для створення форм, опитувань і тестів. Fillout
|
||||||
|
інтегрується з інструментами, які вже використовує користувач, щоб
|
||||||
|
допомогти автоматизувати робочі процеси та масштабувати операції. Час
|
||||||
|
безперебійної роботи платформи та безпека додатків є двома пріоритетами
|
||||||
|
Fillout. Для компаній із суворими вимогами щодо резидентності даних та
|
||||||
|
іншими вимогами Fillout пропонує корпоративне рішення для безпечного
|
||||||
|
отримання даних у будь-якому масштабі.
|
||||||
|
|
||||||
|
Порівняймо наведені вище сервіси із нашим проєктом.
|
||||||
|
|
||||||
|
Умовні позначення в таблиці порівняння:
|
||||||
|
- 🔴 засіб не відповідає критерію
|
||||||
|
- 🟡 засіб частково відповідає критерію або вимагає коштів для повноцінного функціоналу
|
||||||
|
- 🟢 засіб цілком відповідає критерію в безкоштовній версії
|
||||||
|
- ⚪ засіб частково або повністю не надав інформацію щодо критерію
|
||||||
|
|
||||||
|
| Критерій |Xpertise (наш проєкт)|Google Forms|SurveyMonkey|Responsly|Jotform|QuestionPro|Fillout|
|
||||||
|
|:-----------:|:-------------------:|:----------:|:----------:|:-------:|:-----:|:---------:|:-----:|
|
||||||
|
|**Functionality**| | | | | | | |
|
||||||
|
|Мобільна версія| 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
|
||||||
|
|Типи відповідей| 4 шт. |⚪ |4 шт. (до 13 шт.)|⚪ |⚪|30 шт. (до 52 шт.)|40+ шт.|
|
||||||
|
|К-ть запитань в одній формі|50|безліч|10 (до безмежності)| безліч |100 (до 1 тис.)|безліч|безліч|
|
||||||
|
|К-ть форм | 50 (до 10 тис.) |безліч | безліч |3| 5 (до 100)|10 (до безмежності)| безліч |
|
||||||
|
|Макс. к-ть опитаних|10 тис. (до 10 млн.)|безліч | 25/міс. (до 40 тис./рік) |10/міс. (до 10 тис./міс.)|100/міс. (до 10 тис./міс.)|200/форму (до 100 тис./рік)|1 тис./міс. (до 10 тис./міс.)|
|
||||||
|
|Випадкова послідовність запитань|🟢| 🔴 | €99/міс. | $79/міс. | ⚪ | 🟡 | ⚪ |
|
||||||
|
|Умовні переходи| 🟢 | 🔴 | €39/міс. | 🟡 | ⚪ | 🟡 | 🟢 |
|
||||||
|
|Квота відповідей| 🟢 | ⚪ | €432/рік | $79/міс. | ⚪ | ⚪ | ⚪ |
|
||||||
|
|Таймер закінчення опитування| 🟢 | 🟢 | ⚪ | ⚪ | ⚪ | $1188/рік | $15/місяць |
|
||||||
|
|Перегляд недозаповнених форм| 🟢 | 🔴 | ⚪ | ⚪ | ⚪ | ⚪ | $75/міс. |
|
||||||
|
|Завантаження файлів| 🟢 | 🟢 | €432/рік | ⚪ | 🟢 | ⚪ | 🟢 |
|
||||||
|
|Доступне файлове сховище| 2 Гб (до 1 Тб) | 15 Гб (до 5 Тб) | без меж | - | 100 Мб (до 100 Гб) | - | 20 Мб/файл (до 1 Гб/файл |
|
||||||
|
|**Usability**|||||||||
|
||||||
|
|Простий будівельник форм|🟢|🟢|🟢|🟢|🟢|🟢|🟢|
|
||||||
|
|AI-помічник| 🔴 | 🔴 | 🔴 | $49/міс. | 🔴 | 🔴 | 🟢 |
|
||||||
|
|Заміна брендингу на власний|🟢 | $12/міс. | €1188/рік. | $159/міс. | 🟡 | $1188/рік | $40/міс. |
|
||||||
|
|Налаштування кольорової палітри|🟢 | 🟢 | €432/рік | $159/міс. | ⚪ | $15/міс. | $40/міс. |
|
||||||
|
|Перегляд аналітики в реальному часі| 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟡 |
|
||||||
|
|**Reliability**||||||||
|
||||||
|
|Автоматичні резервні копії| 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
|
||||||
|
|Шифрування з'єднань| 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
|
||||||
|
|**Performance**||||||||
|
||||||
|
|Оптимальне використання мережі| 🟢 | 🔴 | 🟡 | 🟢 | 🔴 | 🟡 | 🟡 |
|
||||||
|
|**Supportability**||||||||
|
||||||
|
|Інструкція з використання| 🟢 | ⚪ | ⚪ | 🟢 | 🟢 | 🟢 | 🟢 |
|
||||||
|
|Онлайн-підтримка| 🟢 | $72/рік | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
|
||||||
|
|
||||||
## Висновки
|
## Висновки
|
||||||
|
Завдяки проведеному дослідженню ринку бачимо, що більшість сучасних платформ не надають безкоштовної можливості налаштовувати умовні переходи між сторінками опитування, а також значно обмежують максимальну кількість зібраних відповідей. Комбінація цих функцій у безкоштовній версії нашого сервісу може стати вагомою перевагою для певних груп користувачів.
|
||||||
|
|
||||||
*[Робляться висновки щодо доцільності розробки нової або модифікації існуючої інформаційної системи, необхідності та способів інтеграції з системами(сервісами) третіх сторін, тощо.]*
|
Також додаткові функції (такі як квоти відповідей або перегляд недозаповнених форм), що наявні в безкоштовній версії продукту, можуть привабити додаткових користувачів, що бажають отримати такі інструменти, проте не хочуть віддавати чималі гроші за коштовні сервіси. З огляду на це вважаємо, що розробка такого проєкту має сенс.
|
||||||
|
|
||||||
|
## Література
|
||||||
|
|
||||||
|
1. [https://uk.wikipedia.org/wiki/База_даних](https://uk.wikipedia.org/wiki/База_даних)
|
||||||
|
2. [https://uk.wikipedia.org/wiki/SQL](https://uk.wikipedia.org/wiki/SQL)
|
||||||
|
3. [https://uk.wikipedia.org/wiki/Опитування](https://uk.wikipedia.org/wiki/Опитування)
|
||||||
|
4. [https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content](https://ela.kpi.ua/server/api/core/bitstreams/8a8030cf-bfc1-4586-b197-1c7e3bf02700/content)
|
||||||
|
5. [http://elbib.in.ua/vidi-ekspertnogo-opituvannya-metodologiya-ta-metodi-sotsiologichnih-doslidjen.html](http://elbib.in.ua/vidi-ekspertnogo-opituvannya-metodologiya-ta-metodi-sotsiologichnih-doslidjen.html)
|
||||||
|
6. [https://uk.wikipedia.org/wiki/Google_Форми](https://uk.wikipedia.org/wiki/Google_Форми)
|
||||||
|
7. [https://en.wikipedia.org/wiki/SurveyMonkey](https://en.wikipedia.org/wiki/SurveyMonkey)
|
||||||
|
8. [https://www.responsly.com](https://www.responsly.com)
|
||||||
|
9. [https://en.wikipedia.org/wiki/Jotform](https://en.wikipedia.org/wiki/Jotform)
|
||||||
|
10. [https://questionpro.com/](https://questionpro.com/)
|
||||||
|
11. [https://www.fillout.com/](https://www.fillout.com/)
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
# Запити зацікавлених осіб
|
||||||
|
|
||||||
|
## Вступ
|
||||||
|
|
||||||
|
*[Вступ повинен містити короткий огляд всього документу.]*
|
||||||
|
|
||||||
|
### Мета
|
||||||
|
|
||||||
|
*[Визначення мети цієї сукупності вимог. Зазвичай такою метою є створення та впровадження
|
||||||
|
інформаційної системи відповідного призначення.]*
|
||||||
|
|
||||||
|
### Контекст
|
||||||
|
|
||||||
|
*[Короткий опис того, з якими проектами пов'язаний цей документ, на що він впливає.]*
|
||||||
|
|
||||||
|
|
||||||
|
### Основні визначення та скорочення
|
||||||
|
|
||||||
|
*[Розділ містить визначення всіх термінів та скорочень, необхідних для правильного
|
||||||
|
тлумачення вимог. Можна зробити посилання на документ, в якому поданий аналіз предметної області.]*
|
||||||
|
|
||||||
|
|
||||||
|
### Посилання
|
||||||
|
|
||||||
|
*[Розділ містить повний список всіх документів, про які згадується.]*
|
||||||
|
|
||||||
|
|
||||||
|
## Короткий зміст
|
||||||
|
|
||||||
|
*[Розділ містить опис того, про що йдеться в еій частині цього документу, що залишилася.
|
||||||
|
Також тут описана структура документу.]*
|
||||||
|
|
||||||
|
## Характеристика ділових процесів
|
||||||
|
|
||||||
|
*[В цьому розділі визначаються зовнішні фактори, що впливають на бізнес (бізнес-актори),
|
||||||
|
та внутрішні фактори (робітники), дається загальна характеристика діяльності бізнес-акторів
|
||||||
|
та робітників, яка здійснюється за допомогою бізнесу.*
|
||||||
|
|
||||||
|
*Дається опис бізнес-сценаріїв взаємодії бізнес-акторів, робітників і, можливо, інформаційної системи за допомогою наступної
|
||||||
|
специфікації:*
|
||||||
|
|
||||||
|
|
||||||
|
***ID:***
|
||||||
|
|
||||||
|
***НАЗВА:***
|
||||||
|
|
||||||
|
***УЧАСНИКИ:***
|
||||||
|
|
||||||
|
***ПЕРЕДУМОВИ:***
|
||||||
|
|
||||||
|
***РЕЗУЛЬТАТ:***
|
||||||
|
|
||||||
|
***ВИКЛЮЧНІ СИТУАЦІЇ:***
|
||||||
|
|
||||||
|
***ОСНОВНИЙ СЦЕНАРІЙ:***
|
||||||
|
|
||||||
|
*Кількість сценаріїв визначається у відповідності до специфіки завдання та необхідного
|
||||||
|
рівня деталізації (зазвичай, 5-6 сценаріїв).*
|
||||||
|
|
||||||
|
## Короткий огляд продукту
|
||||||
|
|
||||||
|
*[Визначається границя системи та категорії її користувачів. Дається загальна характеристика категорій користувачів
|
||||||
|
системи]*
|
||||||
|
|
||||||
|
*[Нижче йде опис FURPS:]*
|
||||||
|
|
||||||
|
|
||||||
|
## Функціональність
|
||||||
|
|
||||||
|
*[Functionality (функциональні вимоги)]*
|
||||||
|
|
||||||
|
## Практичність
|
||||||
|
|
||||||
|
*[Usability (вимоги до зручності роботи)]*
|
||||||
|
|
||||||
|
## Надійність
|
||||||
|
|
||||||
|
*[Reliability (вимоги до надійності)]*
|
||||||
|
|
||||||
|
## Продуктивність
|
||||||
|
|
||||||
|
*[Performance (вимоги до продуктивності)]*
|
||||||
|
|
||||||
|
## Експлуатаційна придатність
|
||||||
|
|
||||||
|
*[Supportability (вимоги до підтримки)]*
|
||||||
Executable
+160
@@ -0,0 +1,160 @@
|
|||||||
|
#!/bin/python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# magic values
|
||||||
|
NO = 0
|
||||||
|
AUTO = 1
|
||||||
|
YES = 2
|
||||||
|
|
||||||
|
def convert_generic_v1(data):
|
||||||
|
split_raw_lines = [i.strip().split("|") for i in data.split("\n") if i]
|
||||||
|
|
||||||
|
return generate_table(split_raw_lines)
|
||||||
|
|
||||||
|
def convert_usecase_v1(filename, data):
|
||||||
|
split_raw_lines_from_file = [i.split(" | ") for i in data.split("\n") if i]
|
||||||
|
|
||||||
|
if '/' in filename:
|
||||||
|
use_case_name = filename.rsplit("/", 1)[1].upper()
|
||||||
|
elif '\\' in filename:
|
||||||
|
use_case_name = filename.rsplit("\\", 1)[1].upper()
|
||||||
|
else:
|
||||||
|
use_case_name = filename.upper()
|
||||||
|
|
||||||
|
split_raw_lines = [["ID", use_case_name]] + split_raw_lines_from_file
|
||||||
|
|
||||||
|
merged_lines = []
|
||||||
|
for i in split_raw_lines:
|
||||||
|
if i[0] == "":
|
||||||
|
merged_lines[-1][1] += "<br>" + i[1]
|
||||||
|
else:
|
||||||
|
merged_lines.append(i)
|
||||||
|
|
||||||
|
return generate_table(merged_lines)
|
||||||
|
|
||||||
|
def generate_table(raw_table_data):
|
||||||
|
table_lines = raw_table_data
|
||||||
|
transposed_table = list(zip(*table_lines))
|
||||||
|
|
||||||
|
field_sizes = [max([max([len(k)+2 for k in j.split("\n")]) for j in i]) for i in transposed_table]
|
||||||
|
|
||||||
|
formatted_table_lines = []
|
||||||
|
|
||||||
|
l = "|"
|
||||||
|
for i, field in enumerate(table_lines[0]):
|
||||||
|
l += field.center(field_sizes[i])
|
||||||
|
l += "|"
|
||||||
|
|
||||||
|
formatted_table_lines.append(l)
|
||||||
|
formatted_table_lines.append(f"|{'|'.join([':'+'-'*(i-2)+':' for i in field_sizes])}|")
|
||||||
|
|
||||||
|
for line in table_lines[1:]:
|
||||||
|
l = "|"
|
||||||
|
for i, field in enumerate(line):
|
||||||
|
l += field.center(field_sizes[i])
|
||||||
|
l += "|"
|
||||||
|
|
||||||
|
formatted_table_lines.append(l)
|
||||||
|
|
||||||
|
return "\n".join(formatted_table_lines)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__=="__main__":
|
||||||
|
# parse args
|
||||||
|
files = []
|
||||||
|
write_to_file = AUTO
|
||||||
|
write_to_stdout = AUTO
|
||||||
|
usecase_formatting = AUTO
|
||||||
|
verbose = AUTO
|
||||||
|
process_table_files = AUTO
|
||||||
|
|
||||||
|
# 1 pass (argument harvest)
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
if i.startswith("-"):
|
||||||
|
# записувати таблицю в файл
|
||||||
|
if i in ["-f", "--file"]:
|
||||||
|
write_to_file = YES
|
||||||
|
elif i in ["-nf", "--no-file"]:
|
||||||
|
write_to_file = NO
|
||||||
|
|
||||||
|
# виводити таблицю у стандартний вивід
|
||||||
|
elif i in ["-o", "--stdout"]:
|
||||||
|
write_to_stdout = YES
|
||||||
|
elif i in ["-no", "--no-stdout"]:
|
||||||
|
write_to_stdout = NO
|
||||||
|
|
||||||
|
# форматувати таблицю як use-case
|
||||||
|
elif i in ["-u", "--usecase", "--use-case"]:
|
||||||
|
usecase_formatting = YES
|
||||||
|
elif i in ["-nu", "--no-usecase", "--no-use-case"]:
|
||||||
|
usecase_formatting = NO
|
||||||
|
|
||||||
|
# виводити на екран додаткову інформацію
|
||||||
|
elif i in ["-v", "--verbose"]:
|
||||||
|
verbose = YES
|
||||||
|
elif i in ["-nv", "--no-verbose"]:
|
||||||
|
verbose = NO
|
||||||
|
|
||||||
|
elif i in ["-t", "--process-table"]:
|
||||||
|
process_table_files = YES
|
||||||
|
elif i in ["-nt", "--no-process-table"]:
|
||||||
|
process_table_files = NO
|
||||||
|
|
||||||
|
# 2 pass (filename harvest)
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
if not i.startswith("-"):
|
||||||
|
if i.endswith(".table") and process_table_files <= AUTO:
|
||||||
|
print(f"[Warning]: Excluding {i} to prevent processing of an already processed file (pass --process-table to override this behaviour)")
|
||||||
|
else:
|
||||||
|
files.append(i)
|
||||||
|
|
||||||
|
if len(files) < 1:
|
||||||
|
print("You need to pass at least one file as CLI argument", file=sys.stderr)
|
||||||
|
print("Exiting...", file=sys.stderr)
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
if len(files) == 1:
|
||||||
|
name = files[0]
|
||||||
|
data = open(name, encoding = "utf-8").read()
|
||||||
|
|
||||||
|
if usecase_formatting == YES:
|
||||||
|
if verbose == YES:
|
||||||
|
print(f"Force-formatting {name} as a use-case\n")
|
||||||
|
formatted_table_data = convert_usecase_v1(name.rsplit(".", 1)[0], data)
|
||||||
|
elif (name.endswith(".usecase") or name.endswith(".uc")) and usecase_formatting >= AUTO:
|
||||||
|
if verbose == YES:
|
||||||
|
print(f"Auto-detected use-case in file {name}\n")
|
||||||
|
formatted_table_data = convert_usecase_v1(name.rsplit(".", 1)[0], data)
|
||||||
|
else:
|
||||||
|
formatted_table_data = convert_generic_v1(data)
|
||||||
|
|
||||||
|
if write_to_stdout >= AUTO:
|
||||||
|
print(formatted_table_data)
|
||||||
|
|
||||||
|
if write_to_file > AUTO:
|
||||||
|
open(name + ".table", 'w', encoding = "utf-8").write(formatted_table_data+"\n")
|
||||||
|
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
for no, name in enumerate(files):
|
||||||
|
print(f"Converting {no+1}/{len(files)}")
|
||||||
|
|
||||||
|
data = open(name, encoding = "utf-8").read()
|
||||||
|
|
||||||
|
if usecase_formatting == YES:
|
||||||
|
if verbose >= AUTO:
|
||||||
|
print(f"Force-formatting {name} as a use-case")
|
||||||
|
formatted_table_data = convert_usecase_v1(name.rsplit(".", 1)[0], data)
|
||||||
|
elif (name.endswith(".usecase") or name.endswith(".uc")) and usecase_formatting >= AUTO:
|
||||||
|
if verbose >= AUTO:
|
||||||
|
print(f"Auto-detected use-case in file {name}")
|
||||||
|
formatted_table_data = convert_usecase_v1(name.rsplit(".", 1)[0], data)
|
||||||
|
else:
|
||||||
|
formatted_table_data = convert_generic_v1(data)
|
||||||
|
|
||||||
|
if write_to_stdout > AUTO:
|
||||||
|
print(formatted_table_data)
|
||||||
|
|
||||||
|
if write_to_file >= AUTO:
|
||||||
|
open(name + ".table", 'w', encoding = "utf-8").write(formatted_table_data+"\n")
|
||||||
Reference in New Issue
Block a user