Лаб. 7 УКПО
.docxЛабораторная работа №7
Метрики Лоренца и Кидда
class TelephoneNetworkSubscriber
{
int phoneNumber;
string surname;
long passportNumber;
public TelephoneNetworkSubscriber(int phoneNumber, string surname, long passportNumber)
{
this.phoneNumber = phoneNumber;
this.surname = surname;
this.passportNumber = passportNumber;
}
public virtual void PrintInfo()
{
Console.WriteLine($"Номер телефона: {phoneNumber}");
Console.WriteLine($"Фамилия: {surname}");
Console.WriteLine($"Номер паспорта: {passportNumber}");
}
}
class Arrears : TelephoneNetworkSubscriber
{
public double paymentDebt { get; }
public Arrears(int phoneNumber, string surname, long passportNumber, double paymentDebt)
: base(phoneNumber, surname, passportNumber)
{
this.paymentDebt = paymentDebt;
}
public override void PrintInfo()
{
base.PrintInfo();
Console.WriteLine($"Задолженность: {paymentDebt}");
}
}
class Program
{
static void Main(string[] args)
{
List<Arrears> arrears = new List<Arrears>
{
new Arrears(1234567, "Попов", 1234567890, 12500),
new Arrears(7654321, "Новиков", 9876543210, 0.0),
new Arrears(1357642, "Молотов", 1357908642, 105.25)
};
Arrears arrearsMax = arrears.MaxBy(a => a.paymentDebt);
Console.WriteLine("Абонент с максимальной задолженностью:");
arrearsMax.PrintInfo();
}
}
Метрики размера класса CS:
Класс TelephoneNetworkSubscriber:
Количество инкапсулированных классом методов: 2
Количество инкапсулированных классом свойств: 3
CS = 2 + 3 = 5 (Значение метрики находится в установленных пределах (< 20))
Класс Arrears:
Количество инкапсулированных классом методов: 3
Количество инкапсулированных классом свойств: 1
CS = 3 + 1 = 4 (Значение метрики находится в установленных пределах (< 20))
Класс Program:
Количество инкапсулированных классом методов: 1
Количество инкапсулированных классом свойств: 0
CS = 1 + 0 = 1 (Значение метрики находится в установленных пределах (< 20))
Количество операций, переопределяемых подклассом NOO:
NOO(Arrears) = 1
Значение не превышает критического уровня (< 3). Тестирование и модификация классов будет несложными.
Количество операций, добавленных подклассом NOA:
NOA(Arrears) = 2
Значение не превышает критического уровня (<= 4). Тестирование и модификация классов будет несложными.
Индекс специализации SI:
SI(Arrears) = NOO * u(номер уровня иерархии) / Mобщ(общее число методов класса) = 1 * 2 / 3 = 0,67
Индекс специализации производных классов достаточно высок (> 0,15). Вероятность нарушения абстракции базового класса отдельными объектами высока. Рекомендуется снижение количества переопределяемых методов в производных классах.
Средний размер операций AOS:
Определим AOS путём подсчёта количества обращений к внешним методам.
AOS(TelephoneNetworkSubscriber) = 3 (Значение метрики находится в установленных пределах (< 9))
AOS(Arrears) = 2 (Значение метрики находится в установленных пределах (< 9))
AOS(Program) = 8 (Значение метрики находится в установленных пределах (< 9))
Из полученных значений показателей следует, что классы спроектированы достаточно удачно, так как вызовы методов всех классов главным образом сосредоточены в основном управляющем классе Program.
Сложность операций OC:
Класс TelephoneNetworkSubscriber:
Метод TelephoneNetworkSubscriber
Метод PrintInfo
Класс Arrears:
Метод get
Метод Arrears
Метод PrintInfo
Класс Program:
Метод Main
В связи с тем, что сложность операций всех классов не превышает 65, можно сделать вывод о допустимом уровне сложности.
Среднее количество параметров на операцию ANP (кол-во парметров методов / кол-во методов):
Класс TelephoneNetworkSubscriber:
ANP = 3 / 2 = 1,5
Класс Arrears:
ANP = 4 / 3 = 1,3
Класс Program:
ANP = 1 / 1 = 1
Все операции классов программы имею высокие значения характеристик по количеству используемых параметров в объектах (> 0,7), что значительно усложняет взаимодействие между объектами.
Количество описаний сценариев NSS:
Количество сценариев классов NSS определим по количеству используемых методов в классах.
Класс TelephoneNetworkSubscriber:
NSS = 2
Класс Arrears:
NSS = 3
Класс Program:
NSS = 1
Количество сценариев программы сравнительно невелико, что определяет небольшие размеры программы.
Количество ключевых классов NKC:
NKC = 1 (100%), поскольку все классы программы непосредственно связаны с проблемной областью определения абонента с максимальной задолженностью.
Количество подсистем NSUB:
NSUB = 2
Подсистема определения Абонента телефонной мети
Подсистема определения Задолженность
Количество подсистем программы обеспечивает достаточную управляемость проекта и невысокую трудоёмкость.
