Тестування програмного забезпечення

Дослідження алгоритму роботи та коду програми. Оцінка методом "чорного ящика". Тестування і налагодження розробленої програми на алгоритмічній мові високого рівня. Оцінювання якості програмного забезпечення за об’єктно-орієнтованими метриками зв’язності.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 11.03.2021
Размер файла 143,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

НАЦІОНАЛЬНИЙ АВІАЦІЙНИЙ УНІВЕРСИТЕТ

Факультет кібербезпеки, комп'ютерної та програмної інженерії

Кафедра комп'ютерних систем управління

Курсова робота

З дисципліни: «Інженерія програмного забезпечення»

Тема роботи: Тестування програмного забезпечення

Київ - 2019

Зміст

Варіант

1. Формальний опис розроблювальної системи

2. Алгоритм роботи програми

3. Код програми

4. Тестування програми

5. Тестування і налагодження розробленої програми на алгоритмічній мові високого рівня

6. Цикломатична складність 3 способами

7. Оцінювання якості пз за об'єктно-орієнтованими метриками зв'язності

Висновок

Список використаних джерел

Варіант

Завдання

Є вказівник на масив з єдиним елементом. Користувач вводить число. Якщо воно позитивне, записується у масив. Далі користувач вводить друге число, якщо воно позитивне, виділяють пам'ять для двох елементів масиву та записують в масив нове число. Це повторюється поки користувач не вводить негативне число. програмний орієнтований метрика код

Програма написана мовою високого рівня С++ та буде виконуватись у консольному вікні. На програму діє лише 1 обмеження - заборонений ввід будь яких символів окрім чисел.

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

1. Формальний опис розроблювальної системи

Функціональне призначення:

Програма призначена для занесення елементу в масив з динамічним розширенням пам'яті. Програма використовується самостійно. Користувач має змогу ввести значення масиву.

Опис логічної структури:

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

- інтерфейсний (функція main);

- виконавчий (функція main).

Інтерфейсний модуль керує взаємодією користувача з програмою після чого викликає виконавчий модуль. Виконавчий модуль відповідає за занесення елемента у масив та виділення пам'яті паді наступний.

Програма написана мовою програмування С++ з використанням компілятора і середи розробки MVS2019.

В якості структури даних, яка зберігає елементи, виступає одновимірний масив.

Структура програми подана у пункті 3 під назвою програмний код.

Умови застосування:

Програма експлуатується на ПК під керуванням ОС Windows 10. Для роботи в діалоговому режимі використовується монітор, клавіатура та мишка. Вхідні дані зберігаються на ОЗП або у кеш пам'яті процесора.

Вхідні та вихідні дані:

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

Склад і функції:

Програма складається тільки з виконавчої функції main(). В якості контейнера для зберігання матриці обраний одновимірний масив. Функція main за допомогою циклу викликає ввід вхідних значень у програму, також за допомогою наступного циклу відбувається занесення даних у масив та їх послідуючий вивід у вікно консолі.

2. Алгоритм роботи програми

3. Код програми

#include <iostream>

#include <Windows.h>

#include <cstdlib>

#include <assert.h>

#include <limits>

int main(int argc, char const* argv[]) {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

void* memory = malloc(sizeof(double));

assert(memory);

size_t capacity = 1;

size_t elements = 0;

while (true) {

double num;

std::cout << "Введите число: ";

std::cin >> num;

if (std::cin.fail()) {

std::cout << "Неверный ввод" << '\n';

break;

}

if (num < 0) {

break;

}

if (capacity == elements) {

capacity++;

void* tempPtr = realloc(memory, sizeof(double) * capacity); //++capasity вначале увеличит свое значение, а потом уже пойдет в функцию

assert(tempPtr);

memory = tempPtr;

}

//Приводим к типу double, для дальнейшей записи в него числа

double * int_memory = reinterpret_cast< double *>(memory);

int_memory[elements] = num;

elements++;

std::cout << "Записанные числа: ";

for (size_t i = 0; i < elements; i++) {

std::cout << int_memory[i] << "; ";

}

std::cout << '\n';

std::cout << "Текущий массив занимает: " << sizeof(double) * capacity << " байт\n";

}

free(memory);

system("pause");

return 0;

}

4. Тестування програми

Оцінювання методом «чорного ящика»

Тестові набори

Поле вводу

Вивід

Коментар

1

1;

Очікування на наступний елемент

34

1; 34;

Очікування на наступний елемент

99999999

1; 34; 99999999;

Очікування на наступний елемент

К

Невірний ввід

Завершення роботи програми

-98

-98

Завершення роботи програми

0.87

0.87

Очікування на наступний елемент

0.000000003

0.98; 0.000000003;

Очікування на наступний елемент

0,45

Невірний ввід

Завершення роботи програми

3!

Невірний ввід

Завершення роботи програми

Тест-кейси

1

Модуль вводу

Підмодуль виділення пам'яті

Пам'ять виділено

Пам'ять не виділено

Завершення програми

Підмодуль вводу

Ввід числа

Ввести число:

Натиснути «Enter»

Підмодуль коректності вводу

Ціле або з плаваючою комою

Очікування наступного числа

2

Модуль вводу

Підмодуль виділення пам'яті

Пам'ять виділено

Пам'ять не виділено

Завершення програми,

очищення пам'яті

Підмодуль вводу

Ввід числа

Ввести число:

Натиснути «Enter»

Підмодуль коректності вводу

Від'ємне число

Невірний ввід, завершення програми, очищення пам'яті

3

Модуль вводу

Підмодуль виділення пам'яті

Пам'ять виділено

Пам'ять не виділено

Завершення програми,

очищення пам'яті

Підмодуль вводу

Ввід числа

Ввести число:

Натиснути «Enter»

Підмодуль коректності вводу

Будь-який інший символ

Невірний ввід, завершення програми, очищення пам'яті

5. Тестування і налагодження розробленої програми на алгоритмічній мові високого рівня

Граф програми

1а. Виділяємо пам'ять aassert(memory);

1б. Виводимо повідомлення про помилку std::cin.fail()

1в. Очищення пам'яті free(memory);

1г. Завершення програми return 0;

2. Цикл запису чисел while (true)

3а. Введено число

3б. Введено символ > 1б.

3в. Число від'ємне num < 0 > 1б.

4. Якщо capacity == elements, то наступне число capacity++;

5а. Пам'ять наступному числу

void* tempPtr = realloc(memory, sizeof(double) * capacity);

5б. assert(); > 1б.

6. Вивід масиву cout << int_memory[i] > 1в.

Незалежні маршрути

Маршрут 1: 1а > 1б > 1в > 1г;

Маршрут 2: 1а > 2 > 3а > 3б > 1в > 1г

Маршрут 3: 1а > 2 > 3а > 3в > 1в > 1г

Маршрут 4: 1а > 2 > 3а > 4 > 1а

Маршрут 5: 1а > 2 > 3а > 4 > 5а > 5б > 1в

Маршрут 6: 1а > 2 > 3а > 4 > 5а > 6

Для того щоб пройти по всім маршрутам необхідно зробити три тести

cin >> 4; cin >> «символ(-и)»;

cin >> -4;

6. Цикломатична складність 3 способами

Для обчислення цикломатичного числа Маккейба CC (Cyclomatic Complexity) застосовується вираз: CC L N 2 P , де L - число дуг орієнтованого графа; N - число вершин; P - число компонентів зв'язності.

Потоковий граф має 6 регіони

V(G) = 16 дуг - 12 вузлів + 2 = 6

V(G) = 5 предикатних вузли + 1 = 6

Тестування гілок та операторів відношення

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

num = «символ» || num ? 0 || 0 ? num

Вхідні дані 1: num = «символ», на виході маємо:

Вхідні дані 2: num ? 0 || 0 ? num, на виході маємо:

Тестування циклу

Так як цикл у моїй програмі всього один, то для його тестування досить одного блоку даних:

Вхідні дані memory {4; 0.1; R}

int memory {4; R}

Перший прохід вивід:

4;

Другий прохід вивід:

4; 0.1;

Третій прохід вивід:

«Невірний ввід»

7. Оцінювання якості пз за об'єктно-орієнтованими метриками зв'язності

n1 = 0 - число унікальних операторів програми, включаючи символи-роздільники, імена процедур і знаки операцій (словник операторів);

n2 = 1 - число унікальних операндів програми (словник операндів) ;

N1 = 8 - загальне число операторів в програмі;

N2 = 7 - загальне число операндів в програмі;

n1' = 2 - теоретичне число унікальних операторів;

n2' = 1 - теоретичне число унікальних операндів;

n = 6 - словник програми;

N = 50 - довжина програми;

n' = 3 - теоретичний словник програми;

N' = 0 * 8 + 1 * 7 = 7 - теоретична довжина програми (для стилістично коректних програм відхилення N від N' не перевищує 10%);

V = 50 * 3.58 = 179 - обсяг програми;

V' = 50 * 3 = 150 - теоретичний об'єм програми, де n * - теоретичний словник програми;

L = 0.89 - рівень якості програмування, для ідеальної програми L = 1;

L' = 0.0741 - рівень якості програмування, заснований лише на параметрах реальної програми без урахування теоретичних параметрів;

EC = 1088 - складність розуміння програми;

D = 16 - трудомісткість кодування програми;

Y' = 4,25 - рівень мови вираження;

I = 8.5 - інформаційний зміст програми, дана характеристика дозволяє визначити розумові витрати на створення програми;

E = 142.4 - оцінка необхідних інтелектуальних зусиль при розробці програми, що характеризує число необхідних елементарних рішень при написанні програми.

Висновок

Під час виконання цієї курсової роботи я: розробив програму на мові високого рівня С++ та побудував для неї алгоритм, закріпив знання та навички з методів тестування роботи програми, розробив тест-кейси, побудував граф програми; закріпив знання набуті під час виконання лабораторних робіт.

Список використаних джерел

1. Інженерія програмного забезпечення - Кучеров Д.П., Артамонов Є.Б., Київ 2017

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.