You are on page 1of 8

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

КИЇВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ імені Тараса Шевченка


ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ
Кафедра програмних систем і технологій

Дисципліна
«Якість ПЗ та тестування»

Лабораторна робота №10

на тему:
«Низхідне тестування»

Ткаченко Максим
Виконав: Кивлюк Юрій Олегович Перевірив:
Васильович

Група ІПЗ-31 Дата перевірки

Форма навчання денна


Оцінка
Спеціальність 121

2023
Практичний розділ:
Перша частина завдання:
1. Обрати номер завдання згідно номеру в списку групи.
Кожне з запропонованих завдань складається з двох частин – власне створення
масиву та його сортування. Кінцевий програмний продукт має складатися найменше`  з
двох модулів, окрім головного.
У разі бажання отримати більш високу оцінку, варто передбачити додаткові
модулі для вводу початкових даних та для виводу отриманого результату.
Обраний варіант завдання: Варіант 2
Даний масив A розміру N. Сформувати новий масив B того ж розміру, елементи якого
визначаються таким чином: BK = 2·AK якщо AK < 5, AK/2 в протилежному випадку.

Друга частина завдання


Отриманий кінцевий масив відсортувати за вказаним принципом – парні.
Виконання роботи передбачає наступну послідовність дій:

1. Створення (визначення) головного керуючого модуля;


2. Проектування заглушок кількох типів;
3. Сторення тестових варіантів;
4. Виконання тестування;
5. Оформлення результатів.

Виконання завдання:

Для виконання першого етапу нам треба створити головний керуючий модуль. Цей
модуль буде відповідати за виклик інших модулів, таких як: модуль що створює масив В,
або модуль що сортує кінцевий масив за вказаним принципом – парний.

Реалізація коду відбуватиметься на мові програмування C#.

Зобразимо принцип роботи головного керуючого модуля:

Тут описаний основний принцип роботи програми-модуля з почерговими діями.


Буде окремий модуль, що заповнює масив А введеними числами з клавіатури,
створюючи масив необхідного розміру.
Далі модуль що формує масив В відповідно масиву А та логіці з завдання.
Модуль що виконуватиме сортування масиву.

Після створення та розуміння основної логіки руху програми створимо код, що


реалізовуватиме цю логіку з основними методами:
using System;

class Program
{
static int[] GenerateA(int N)
{
Console.OutputEncoding = System.Text.Encoding.Default;

int[] array = new int[N];


int count = 0;

while (count < N)


{
Console.WriteLine($"\nВведіть {N - count} чисел масиву А через пробіл:");

string input = Console.ReadLine();


string[] elements = input.Split(' ');

for (int i = 0; i < elements.Length && count < N; i++)


{
if (int.TryParse(elements[i], out int value))
{
array[count++] = value;
}
else
{
Console.WriteLine("Неправильний формат введення. Спробуйте ще раз.");
}
}
}

return array;
}

static int[] GenerateB(int[] A, int N)


{
int[] B = new int[N];

for (int i = 0; i < N; i++)


{
if (A[i] < 5)
{
B[i] = 2 * A[i];
}
else
{
B[i] = A[i] / 2;
}
}

return B;
}

static void OutputArr(int[] Arr)


{
for(int i = 0; i < Arr.Length; i++)
{
Console.Write(Arr[i] + " ");
}

Console.Write("\n\n");
}

static int[] SortArr(int[] B)


{
Array.Sort(B, (x, y) => (x % 2 == y % 2) ? x.CompareTo(y) : (x % 2 == 0 ? -1 : 1));
return B;
}

static void Main()


{
Console.Write("Введіть кількість елементів масиву: ");
int N = int.Parse(Console.ReadLine());

Console.WriteLine("\nМасив А:");
int[] A = GenerateA(N);
OutputArr(A);

Console.WriteLine("Масив B:");
int[] B = GenerateB(A, N);
OutputArr(B);

Console.WriteLine("Відсортований масив:");
int[] sortedArr = SortArr(B);
OutputArr(sortedArr);

Console.ReadLine();
}
}

В даному коді описано введення кількості елементів масиву, потім введення


масиву А з виконанням перевірок на кількість заповнення та правильності формату
введення, процес введення не буде припинятися та коригуватися до моменту повністю
правильного вказаного масиву А.
Після чого йде генерація масиву В на основі поданого масиву А.
Далі сортування масиву В та виведення кінечного результуючого масиву.

Основні методи на основі яких будуть реалізовані методи заглушки:


На основі поставленого завдання було розроблено методи які будуть реалізовувати
програму:
 Метод для визначення масиву А:
static int[] GenerateA(int N)
{
Console.OutputEncoding = System.Text.Encoding.Default;

int[] array = new int[N];


int count = 0;

while (count < N)


{
Console.WriteLine($"\nВведіть {N - count} чисел масиву А через пробіл:");

string input = Console.ReadLine();


string[] elements = input.Split(' ');

for (int i = 0; i < elements.Length && count < N; i++)


{
if (int.TryParse(elements[i], out int value))
{
array[count++] = value;
}
else
{
Console.WriteLine("Неправильний формат введення. Спробуйте ще раз.");
}
}
}

return array;
}

 Метод для визначення масиву B:


static int[] GenerateB(int[] A, int N)
{
int[] B = new int[N];
for (int i = 0; i < N; i++)
{
if (A[i] < 5)
{
B[i] = 2 * A[i];
}
else
{
B[i] = A[i] / 2;
}
}

return B;
}

 Метод для сортування масиву В та отримання кінцевого результуючого масиву:


static int[] SortArr(int[] B)
{
Array.Sort(B, (x, y) => (x % 2 == y % 2) ? x.CompareTo(y) : (x % 2 == 0 ? -1 : 1));
return B;
}

Визначення методів заглушок:


 Метод для визначення масиву А:
static int[] GetArrayATest(int n)
{
int[] a = new int[n];

// Заглушка для введення масиву А


Random random = new Random();
for (int i = 0; i < n; i++)
{
a[i] = random.Next(1, 11);
}

return a;
}
Даний метод імітує введення необхідної кількості елементів, а насправді просто
заповнює масив випадковими числами.

 Метод для визначення масиву В:


static int[] GetArrayBTest(int[] A, int n)
{
int[] b = new int[n];

// Заглушка для введення масиву B


Random random = new Random();
for (int i = 0; i < n; i++)
{
b[i] = random.Next(1, 11);
}

return b;
}
Даний метод імітуватиме прийняття в роботу масиву А та його довжини, але
насправді просто видаватиме масив ініціалізований випадковими числами необхідної
довжини.

 Заглушка для виконання сортування:


static int[] SortArr(int[] B)
{
// Заглушка для сортування масиву B
Array.Sort(B);
return B;
}

Даний метод просто використовує вбудований метод сортування масиву та


повертає його.

Ці використані спрощені реалізації, надані як заглушки. При умові роботи над


реальними варіантами реалізації методів заглушками можна користуватись як тестовими.
Після закінчення роботи вони будуть замінені на кінцеві варіанти.

Перевіримо функціонування програми та введемо декілька тестових варіантів:


Для тестування введемо декілька тестових варіантів з очікуваними варіантами
відповідей:

1) Введемо кількість N = 7 та першочергово введемо кількість елементів 5,


перевіримо справність виведення помилок та необхідність виправлення помилок.
Перші введені елементи А = [ 1, 2, 3, 4, 5 ] -> Очікування реакції програми -> A =
[ 6, 7 ].

Отриманий масив B = [ 2, 4, 6, 8, 2, 3, 3 ]

Результуючий масив: [ 2, 2, 4, 6, 8, 3, 3 ]

Результат:

Програма відпрацювала коректно.

2) Введемо кількість N = 8 та введемо замість певного елемента невірний тип даних,


перевіримо справність виведення помилок та необхідність виправлення помилок.
Перші введені елементи А = [ 2, 4, 6, 8, 10, ’a’, 7, 9 ] -> Очікування реакції
програми -> A = [ 6 ] – Додатковий елемент.

Отриманий масив B = [ 4, 8, 3, 4, 5, 3, 4, 3 ]

Результуючий масив: [4, 4, 4, 8, 3, 3, 3, 5]

Результат:
Програма відпрацювала коректно.

3) Введемо кількість N = 7 та введемо елементи за спаданням.


Перші введені елементи А = [ 10, 8, 7, 6, 3, 2, 1 ].

Отриманий масив B = [ 5, 4, 3, 3, 6, 4, 2 ]

Результуючий масив: [2, 4, 4, 6, 3, 3, 5]

Результат:

Програма відпрацювала коректно.

При виконанні тестів програма відпрацювала коректно типи введення початкового


масиву, та показала стійкість до помилок. Також були протестовані випадки «найгірших»
початкових даних у вигляді елементів за спаданням.

Висновок:
При виконанні даної лабораторної роботи було ознайомлено з темою низхідного
тестування програми. Основна ідея полягає в тестуванні головного модуля, та окремої
заміни інших модулів на заглушки та почерговому введенні в експлуатацію готових
елементів фінальних методів. Процес повторюється доти, поки не будуть зібрані й
перевірені всі модулі.
При виконанні лабораторної було розроблено головний модуль управління, після
чого доповнено код необхідними модулями для підключення, які повноцінно
доповнювали результуючу програму.
При розробці модулів були використані так звані модулі «заглушки», які заміняли
основний код до його фінальної готової версії, що допомогло розробляти декілька
процесів паралельно, та полегшувало тестування ПЗ. Модульність виявилася ефективним
інструментом розробки, це значно полегшує та пришвидшує тестування, допомагає
виявити помилки на ранніх етапах в визначеному місці коду.
Використання «заглушок» показало себе з кращої сторони, так як їх введення в
експлуатацію не гальмує розробку на певному етапі. Вони швидкі в реалізації та прості в
розумінні. Також їх просто замінити на готові методи-модулі.
При тестуванні фінальної версії програми вона показала стійкість до помилок
користувача, та тести підтвердили правильне функціонування алгоритмів обрахунку, їх
послідовність.

You might also like