Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб. 5 УКПО

.docx
Скачиваний:
0
Добавлен:
25.01.2026
Размер:
277.4 Кб
Скачать

Лабораторная работа №5

Оценка характеристик программ на основе процедурно-ориентированных метрик

using System;

using System.Collections.Generic;

class Program

{

static bool IsPrime(int number)

{

if (number < 2) return false;

if (number == 2) return true;

if (number % 2 == 0) return false;

for (int i = 3; i * i <= number; i += 2)

{

if (number % i == 0)

return false;

}

return true;

}

static List<int> GetPrimesInRange(int n, int m)

{

List<int> primes = new List<int>();

for (int i = n; i <= m; i++)

{

if (IsPrime(i))

primes.Add(i);

}

return primes;

}

static void Main()

{

Console.Write("Введите начало интервала (n): ");

string nString = Console.ReadLine();

Console.Write("Введите конец интервала (m): ");

string mString = Console.ReadLine();

int n, m;

bool error = false;

if (!int.TryParse(nString, out n))

{

Console.WriteLine("Ошибка: Введённое значение n не является целым числом!");

error = true;

}

if (!int.TryParse(mString, out m))

{

Console.WriteLine("Ошибка: Введённое значение m не является целым числом!");

error = true;

}

if (error) return;

if (n > m)

{

Console.WriteLine("Ошибка: Введённое значение n больше введённого значения m!");

error = true;

}

if (error) return;

List<int> primes = GetPrimesInRange(n, m);

Console.WriteLine($"\nПростые числа в интервале [{n}, {m}]:");

if (primes.Count > 0)

{

Console.WriteLine(string.Join(" ", primes));

}

else

{

Console.WriteLine("Простых чисел нет.");

}

Console.WriteLine($"\nКоличество простых чисел: {primes.Count}");

}

}

f1 = 2

f2 = 9

f3 = 0

f4 = 0

f5 = 0

Исходные данные для расчёта FP-метрик:

k1 = 5; k2 = 1; k3 = 1; k4 = 1; k5 = 1; k6 = 5; k7 = 3; k8 = 1; k9 = 1; k10 = 1; k11 = 1; k12 = 1; k13 = 1 k14 = 1

K = k1 + … + k14 = 24

FP = F * (0,65 + 0,01 * K) = 37,38

Уровень связности:

IsPrime: 10 – модуль реализует единственную прикладную функции (определение числа на простоту).

GetPrimesInRange: 10 – модуль реализует единственную прикладную функции (составление списка простых чисел из интервала).

Main: 5 – модуль реализует не единственную прикладную функцию, действия внутри модуля связаны, порядок действия внутри модуля важен.

Вывод:

Таким образом, в решении преобладают модули с силой связности 5 и 10, что говорит о достаточно высоком качестве программы.

Уровень сцепления:

IsPrime: 1 – является вызываемым, и его входными параметрами являются простые данные.

GetPrimesInRange: 4 – является одновременно вызывающим и вызываемым (поскольку уровень сцепления вызывающего метода выше, то этот метод не рассматривается, как вызываемый), этот метод осуществляет вызов метода change с передачей ему параметра, влияющих на работу метода.

Main: 4 – является одновременно вызывающим и вызываемым (поскольку уровень сцепления вызывающего метода выше, то этот метод не рассматривается, как вызываемый), этот метод осуществляет вызов метода GetPrimesInRange с передачей ему параметров, влияющих на работу метода.

Вывод:

Сила сцепления программных модулей рассматриваемого решения составляет 1 и 4, что говорит о достаточно высоком уровне качества программы.

Соседние файлы в предмете Управление качеством программного обеспечения