Лаб. 5 УКПО
.docxЛабораторная работа №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, что говорит о достаточно высоком уровне качества программы.
