Software Requirements

Software Requirements (Вимоги до ПЗ) — це структурований опис функцій, характеристик та обмежень, які повинна мати програмна система, щоб відповідати очікуванням замовника, користувачів та інших зацікавлених сторін.

Іншими словами — це відповіді на запитання:

  • Що має робити програма?
  • Як вона повинна працювати?
  • Для кого вона створюється і в яких умовах буде працювати?

Основні цілі вимог

  1. Зрозуміти потреби користувача
    • Визначити, які проблеми треба вирішити
    • Які задачі автоматизувати або спростити
  2. Служити основою для розробки
    • Вимоги — це вихідна точка для розробників, дизайнерів, тестувальників і менеджерів
  3. Зменшити ризики непорозумінь
    • Узгоджений документ із вимогами запобігає суперечкам і повторній розробці
  4. Забезпечити можливість тестування
    • Вимоги повинні бути перевірюваними: по ним створюються тест-кейси

Класифікація вимог

  1. Функціональні вимоги (Functional Requirements)

Це вимоги, які описують конкретну поведінку або функціональність системи.

Вони відповідають на питання: “Що повинна робити система?”

Приклади:

  • Користувач повинен мати змогу зареєструватися, використовуючи email і пароль.
  • Система має надсилати лист підтвердження після реєстрації.
  • Адміністратор може видалити обліковий запис користувача.

2. Нефункціональні вимоги (Non-Functional Requirements)

Ці вимоги описують якість системи, як вона виконує свої функції.

Вони відповідають на питання: “ЯК повинна працювати система?”

Приклади:

  • Система повинна обробляти не менше 500 запитів на секунду.
  • Інтерфейс має бути доступним для людей із вадами зору (відповідність WCAG).
  • Додаток має працювати офлайн.

Сюди входять:

  • Продуктивність
  • Безпека
  • Масштабованість
  • Надійність
  • Зручність інтерфейсу (usability)
  • Сумісність із платформами (Windows, iOS, Android тощо)

3. Бізнес-вимоги (Business Requirements)

Це високорівневі цілі проєкту або продукту з погляду бізнесу.

Приклади:

  • Надати клієнтам можливість купувати квитки онлайн.
  • Оптимізувати витрати на обробку заявок на 20% протягом півроку.
  • Зменшити кількість дзвінків до служби підтримки.

4. Системні вимоги (System Requirements)

Це вимоги до технічного середовища, в якому працюватиме система.

Приклади:

  • Підтримка ОС: Windows 11, Ubuntu 22.04.
  • Робота на сервері з мінімум 8 GB RAM та 4 CPU.
  • Підключення до бази даних PostgreSQL.

Як формуються вимоги?

1. Збір вимог (Requirements Elicitation)

Це процес збору інформації про те, що потрібно системі. Залучаються:

  • Замовники
  • Кінцеві користувачі
  • Бізнес-аналітики
  • Архітектори / розробники

Методи:

  • Інтерв’ю
  • Опитування
  • Аналіз існуючої системи
  • Спостереження
  • Воркшопи
  • Аналіз конкурентів

2. Аналіз і документування

Вимоги формулюються в структурованому вигляді:

  • У вигляді документа SRS (Software Requirements Specification)
  • У вигляді User Stories (у Agile-проєктах)
  • У вигляді Use Case діаграм або UML-діаграм

3. Перевірка та валідація

Потрібно переконатися, що:

  • Вимоги точно описують те, що потрібно
  • Вони не суперечать одна одній
  • Вони реалістичні (можна реалізувати з доступними ресурсами)
  • Вони такі, що можуть бути перевірені (можна протестувати результат)

Хто бере участь у роботі з вимогами?

РольЩо робить
Бізнес-аналітикЗбирає та формулює вимоги
Product OwnerВизначає пріоритети функцій (у Scrum)
РозробникОцінює складність реалізації
Тестувальник (QA)Готує тест-кейси на основі вимог
АрхітекторВизначає, як технічно реалізувати вимоги

Як виглядає документ з вимогами (SRS)?

Типовий зміст:

  1. Вступ
  2. Опис системи
  3. Функціональні вимоги
  4. Нефункціональні вимоги
  5. Інтерфейси користувача
  6. Обмеження
  7. Глосарій термінів

Якими мають бути хороші вимоги?

Вимоги повинні бути:

  • Чіткими — без двозначностей
  • Повними — охоплювати всі сценарії
  • Такими, що можна перевірити — можна протестувати
  • Послідовними — не суперечити одна одній
  • Зрозумілими — написаними зрозумілою мовою

Приклад вимоги:

User Story (Agile формат):

Як користувач, я хочу мати змогу змінити свій пароль, щоб забезпечити безпеку свого акаунта.

Acceptance Criteria:

  • Користувач може змінити пароль зі сторінки профілю
  • Стара комбінація логін-пароль має бути підтверджена
  • Новий пароль має містити щонайменше 8 символів
  • Після зміни пароля автоматично виконується вихід з усіх пристроїв

Висновок

Вимоги до ПЗ — це основа всієї розробки. Від того, наскільки правильно та повно вони сформульовані, залежить:

  • чи отримає замовник те, що очікує;
  • чи зможе команда реалізувати продукт у строки;
  • чи буде система зручною, ефективною та безпечною.

Чіткі вимоги = менше багів, менше переробок, більше задоволених користувачів.

Data Flow Testing

Data Flow Testing — це тип білого (white-box) тестування програмного забезпечення, який фокусується на відстеженні потоку даних у програмі для виявлення потенційних помилок, пов’язаних із використанням змінних.

Основна ідея:

В Data Flow Testing аналізується, як змінні оголошуються, ініціалізуються, використовуються та знищуються в програмному коді. Головна мета — виявити логічні помилки, які можуть виникнути через неправильне використання змінних.

Основні поняття:

  • Def (Definition) — місце, де змінна отримує значення (наприклад, через присвоєння або введення).
  • Use (Usage) — місце, де змінна використовується (наприклад, у виразах, умовах тощо).
  • Kill (Undefined) — момент, коли змінна перестає бути дійсною (наприклад, вихід за межі області видимості).

Приклади помилок, які може виявити Data Flow Testing:

  • Використання змінної до її ініціалізації.
  • Непотрібне або ніколи не використане присвоєння (мертві змінні).
  • Множинне присвоєння без проміжного використання.
  • Невикористані значення, що зберігаються в змінних.

Як працює:

  1. Код представляється у вигляді Control Flow Graph (CFG) — граф, де вузли — це інструкції або блоки коду, а ребра — переходи.
  2. Для кожної змінної визначаються точки:
    • де вона оголошується/отримує значення (Def);
    • де вона використовується (Use).
  3. Створюються шляхи Def-Use: від точки присвоєння до точки використання без повторного присвоєння.
  4. Тест-кейси створюються для покриття всіх таких шляхів.

Переваги:

  • Виявляє логічні помилки на ранньому етапі.
  • Дає глибше розуміння того, як обробляються дані в програмі.
  • Корисний для критичних систем, де надійність важлива.

Data Flow Testing — важливий метод для виявлення помилок, пов’язаних з неправильним використанням змінних. Це тестування не просто перевіряє, чи працює програма, а й як вона оперує даними всередині — що робить його дуже корисним для підвищення якості програмного забезпечення.

Control Flow Testing

Control Flow Testing (тестування керування потоком) — це один із підходів до структурного (white-box) тестування, який фокусується на логічному потоці виконання програми або окремої функції. Мета — перевірити всі можливі шляхи, якими може пройти виконання програми, щоб виявити помилки в логіці, умовах або переходах.

Основні терміни:

  • Control Flow Graph (CFG) — граф керування потоком, у якому вузли представляють блоки коду (наприклад, оператори або групи інструкцій), а ребра — можливі переходи між цими блоками залежно від умов.
  • Блок (Basic Block) — послідовність інструкцій, що виконується без розгалужень.

Основні види контрольного тестування потоку:

  1. Statement Coverage (Покриття операторів):
    • Перевіряє, чи всі інструкції коду були виконані хоча б один раз.
  2. Branch Coverage (Покриття гілок / умов):
    • Перевіряє, чи всі можливі гілки (true/false) умов були пройдені.
  3. Path Coverage (Покриття шляхів):
    • Перевіряє всі можливі унікальні шляхи виконання коду. Найглибший рівень, але часто складний для реалізації через велику кількість можливих шляхів.

Мета Control Flow Testing:

  • Виявити:
    • логічні помилки;
    • помилки умовного переходу;
    • пропущені шляхи;
    • нескінченні цикли або недосяжний код.

Приклад:

def absolute_value(x):
    if x >= 0:
        return x
    else:
        return -x

Для цього прикладу Control Flow Testing має охопити два шляхи:

  • коли x >= 0 (гілка if);
  • коли x < 0 (гілка else).

Переваги:

  • Дає глибоке розуміння внутрішньої логіки програми.
  • Допомагає виявити складні, умовно-залежні помилки.

Підбиваючи підсумок, Control Flow Testing — це ефективний підхід до внутрішнього тестування логіки програмного забезпечення, що дозволяє виявити помилки, які можуть залишитися непоміченими при тестуванні лише на основі вимог або специфікацій (тобто без доступу до коду).

Loop Testing

Loop Testing — це тип тестування програмного забезпечення, що належить до категорії білого ящика (white-box testing). Основна мета loop testing — перевірити правильність циклічних конструкцій (loops) у програмному коді.

Що саме тестується?

Тестуються цикли різного типу:

  • for
  • while
  • do-while
  • рекурсивні виклики (у деяких випадках)

Основні типи циклів, що тестуються

1. Прості цикли (Simple Loops). Цикл з однією умовою, наприклад:

for i in range(5):
   print(i)

2. Вкладені циклик (Nested loops). Один цикл всередині іншого.

for i in range(3):
    for j in range(2):
        print(i, j)

3. Залежні цикли

4. Cкладні цикли

Основна мета loop testing:

  • Перевірити:
    • Вхід у цикл (чи виконується хоча б раз)
    • Вихід з циклу (чи коректно завершується)
    • Повторення (чи виконується потрібну кількість разів)
  • Виявити:
    • Нескінченні цикли
    • Пропущені умови
    • Неправильні межі ітерацій

Типові тести:

  1. Zero Iteration (нуль разів) — цикл не виконується зовсім
  2. One Iteration (один раз)
  3. Typical Iteration (звичайна кількість разів)
  4. Max Iteration (максимально допустима кількість)
  5. Beyond Max (понад межу) — для виявлення помилок переповнення

Приклад (Python):

def count_positive(nums):
    count = 0
    for num in nums:
        if num > 0:
            count += 1
    return count

Loop Testing тут перевірить:

  • Порожній список ([])
  • Список з 1 елементом ([5])
  • Список з позитивними й негативними значеннями ([-1, 2, 3])
  • Інші граничні випадки (дуже великий список, змішані значення, межа між негативним і позитивним (-1, 0, 1), усі значення негативні тощо)

Loop Testing — це важлива техніка для виявлення логічних помилок у циклах, особливо коли програма має багато ітерацій або вкладені цикли. Застосовується переважно розробниками чи тестувальниками, що мають доступ до коду.

Dativ. Частина 2

Особові займенники в Dativ

NominativDativПереклад
ichmirмені
dudirтобі
erihmйому
sieihrїй
esihmйому/їй (середнє)
wirunsнам
ihreuchвам (множина)
sieihnenїм
SieIhnenВам (ввічливо)

Ich gebe dir das Buch. – Я даю тобі книжку.

Kannst du mir helfen? – Ти можеш мені допомогти?

Wir danken Ihnen. – Ми дякуємо Вам (ввічливо).

Присвійні займенники в Dativ

NominativЧол. рідЖін. рідСер. рідМножина
ichmeinemmeinermeinemmeinen
dudeinemdeinerdeinemdeinen
erseinemseinerseinemseinen
sieihremihrerihremihren
esseinemseinerseinemseinen
wirunseremunsererunseremunseren
ihreuremeurereuremeuren
sieihremihrerihremihren
SieIhremIhrerIhremIhren

Закінчення прикметників у Dativ

Рід/ЧислоАртикльПрикметник + іменник
der (ч.р.)demdem guten Mann
die (ж.р.)derder netten Frau
das (с.р.)demdem kleinen Kind
die (мн.)denden alten Leuten + -n на іменнику

З неозначеним артиклем (ein, eine – einem, einer)

РідАртикльПрикметник + іменник
der (ч.р.)einemeinem netten Mann
die (ж.р.)einereiner netten Frau
das (с.р.)einemeinem kleinen Kind

Без артикля

РідПрикметник + іменник
ч.р.gutem Mann
ж.р.netter Frau
с.р.kleinem Kind
множинаalten Leuten

Узагальнення

Тип артикляЧол. рід (der)Жін. рід (die)Сер. рід (das)Множина (die)
Означений артикль (dem/der/dem/den)-en-en-en-en
Неозначений артикль (einem/einer/einem/-)-en-en-en
Без артикля-em-er-em-en

Приклади речень

Ich helfe dem alten Mann. – Я допомагаю старому чоловіку.

Wir schenken einer lieben Freundin ein Buch. – Ми даруємо дорогій подрузі книжку.

Sie spricht mit kleinen Kindern. – Вона розмовляє з маленькими дітьми.

Dativ з поширеними дієсловами

НімецькоюТранслітераціяПереклад
Ich helfe meinem Bruder.Іх хельфе майнем брудер.Я допомагаю своєму брату.
Sie gibt dem Kind ein Buch.Зі ґібт дем кінд айн бух.Вона дає дитині книжку.
Wir danken unseren Eltern.Вір данкен унзерен ельтерн.Ми дякуємо нашим батькам.
Das Auto gehört meinem Vater.Дас ауто ґехьорт майнем фатер.Машина належить моєму татові.
Er zeigt dem Lehrer den Weg.Еа цайґт дем лерер ден веґ.Він показує вчителю дорогу.

Dativ з прийменниками, що завжди вимагають Dativ

Прийменники: mit, nach, aus, von, zu, bei, seit, gegenüber
НімецькоюТранслітераціяПереклад
Ich fahre mit dem Bus.Іх фаре міт дем бус.Я їду автобусом.
Er kommt aus der Stadt.Ер комт аус дер штат.Він приїжджає з міста.
Wir sprechen von der Schule.Вір шпрехен фон дер шуле.Ми говоримо про школу.
Sie geht zu ihrem Freund.Зі ґет цу ірем фройнд.Вона йде до свого друга.
Ich wohne bei meinen Großeltern.Іх воне бай майнен ґросельтерн.Я живу в бабусі й дідуся.
Seit einem Jahr lerne ich Deutsch.Зайт айнем яр лерне іх дойч.Вже рік я вчу німецьку.
Der Park liegt gegenüber der Schule.Дер парк ліґт ґеґенюбе дер шуле.Парк розташований навпроти школи.
Nach dem Frühstück gehe ich zur Schule.Нах дем Фрюштюк ґее іх цур Шулє.Після сніданку я йду до школи.

Dativ з прийменниками місця

Прийменники: in, an, auf, unter, über, neben, zwischen, hinter, vor
НімецькоюТранслітераціяПереклад
Ich bin in der Küche.Іх бін ін дер кюхе.Я на кухні.
Die Tasche hängt an der Wand.Ді таше хенґт ан дер ванд.Сумка висить на стіні.
Das Buch liegt auf dem Tisch.Дас бух ліґт ауф дем тіш.Книга лежить на столі.
Die Lampe hängt über dem Bett.Ді лампе хенґт ьубер дем бет.Лампа висить над ліжком.
Die Katze schläft unter dem Tisch.Ді каце шлефт унтер дем тіш.Кішка спить під столом.
Er steht neben der Tür.Ер штет небен дер тюр.Він стоїть біля дверей.
Ich sitze zwischen meinen Freunden.Іх зітце цвішен майнен фройнден.Я сиджу між своїми друзями.
Das Fahrrad steht hinter dem Haus.Дас фарад штет хінтер дем хаус.Велосипед стоїть за будинком.
Das Auto steht vor der Garage.Дас ауто штет фор дер ґараже.Авто стоїть перед гаражем.

Dativ з особовими займенниками

НімецькоюТранслітераціяПереклад
Kannst du mir helfen?Канст ду мір хельфен?Ти можеш мені допомогти?
Ich erzähle dir alles.Іх ерцеле дір аллес.Я розповім тобі все.
Wir geben ihm das Geld.Вір ґебен ім дас ґельд.Ми даємо йому гроші.
Sie schreibt uns oft.Зі шрайбт унс офт.Вона часто нам пише.
Ich schenke ihr eine Blume.Іх шенке ір айне блюме.Я дарую їй квітку.
Der Lehrer erklärt euch die Aufgabe.Дер лерер ерклерт ойх ді ауфґабе.Учитель пояснює вам завдання.
Die Großeltern helfen ihnen.Ді ґросельтерн хельфен інен.Дідусь і бабуся допомагають їм.
Ich danke Ihnen sehr.Іх данке Інен зер.Я дуже Вам вдячний.

Для додаткової візуалізації є відео.