return result;
}
ComplexNumber ComplexNumber::substract(ComplexNumber& x,ComplexNumber& y)
{
ComplexNumber result;
result.real=x.real-y.real;
result.image=x.image-y.image;
return result;
}
ComplexNumber ComplexNumber::divide(ComplexNumber& x,double y)
{
ComplexNumber result;
result.real=x.real/y;
result.image=x.image/y;
return result;
}
CSqrRoot::CSqrRoot(void)
{
}
CSqrRoot::~CSqrRoot(void)
{
}
void CSqrRoot::initA(double a)
{
mAparam = a;
}
void CSqrRoot::initB(double b)
{
mBparam = b;
}
void CSqrRoot::initC(double c)
{
mCparam=c;
}
CSqrResult CSqrRoot::solve()
{
CSqrResult result;
if (mAparam==0)
{
if (mBparam!=0)
{
result.x1=result.x2=-mCparam/mBparam;
result.status=CSqrResult::C_OK;
}
else
{
result.status=CSqrResult::C_ERROR;
}
}else
{
ComplexNumber det = ComplexNumber::complexSqrt(mBparam*mBparam-4*mAparam*mCparam);
result.x1=result.x2=-2*mBparam;
result.x1=ComplexNumber::add(result.x1,det);
result.x2=ComplexNumber::substract(result.x2,det);
result.x1=ComplexNumber::divide(result.x1,4*mAparam);
result.x2=ComplexNumber::divide(result.x2,4*mAparam);
}
return result;
}
Расчет метрик для варианта 1
Вычисление метрики Холстеда
Операторы |
Число операторов |
Операнды |
Число операндов |
:: |
19 |
real |
12 |
= |
31 |
Image |
2 |
== |
1 |
iReal |
2 |
. |
34 |
iImage |
2 |
!= |
1 |
0 |
6 |
> |
1 |
a |
64 |
Unary - |
3 |
b |
38 |
/ |
3 |
c |
6 |
* |
6 |
mAparam |
5 |
return |
5 |
mBparam |
6 |
{ |
18 |
mCparam |
3 |
} |
18 |
result.x1 |
6 |
( |
22 |
result.x2 |
6 |
) |
22 |
result.status |
2 |
Binary - |
3 |
det |
3 |
4 |
3 |
||
2 |
7 |
n1= 15
n2=17
N1 = 187
N2 = 173
N= N1+N2 = 187+173=360
n=n1+n2= 15+17 =32
V=N*log2(n)=360*log2(32) = 1800
Цикломатическая сложность
Определяем как сумму цикломатических сложностей всех непустых методов класса
CC = 13
Число линий кода
LoC = 33
Индекс сопровождаемости
MI = MAX(0, (171 — 5.2 * ln(1800) — 0.23 * 13 — 16.2 * ln(33)) * 100 / 171)= 49,038
Глубина дерева наследования =1 (нет наследования)
Связность классов =3
Для второго варианта модификации кода
Вычисление метрики Холстеда
Операторы |
Число операторов |
Операнды |
Число операндов |
:: |
10 |
real |
2 |
= |
19 |
Image |
2 |
== |
1 |
iReal |
2 |
. |
9 |
iImage |
2 |
!= |
1 |
0 |
5 |
< |
1 |
x |
|
унарный - |
8 |
a |
50 |
/ |
6 |
b |
15 |
* |
11 |
c |
2 |
Return |
1 |
result.real |
|
{ |
14 |
result.image |
|
} |
14 |
x.real |
|
( |
24 |
y.real |
|
) |
24 |
x.image |
|
бинарный - |
y.image |
||
y |
|||
mAparam |
8 |
||
mBparam |
8 |
||
mCparam |
3 |
||
result.x1 |
4 |
||
result.x2 |
3 |
||
result.status |
2 |
||
det |
4 |
||
4 |
6 |
||
2 |
6 |
n1= 14
n2=17
N1 = 143
N2 = 124
N= N1+N2 = 143+124=267
n=n1+n2= 14+17 =31
V=N*log2(n)=267*log2(31) = 1322,7
Цикломатическая сложность
Определяем как сумму цикломатических сложностей всех непустых методов класса
CC = 13
Число линий кода
LoC = 19
Индекс сопровождаемости
MI = MAX(0, (171 — 5.2 * ln(1322,7) — 0.23 * 9 — 16.2 * ln(19)) * 100 / 171)= 42.33
Глубина дерева наследования =1 (нет наследования)
Связность классов =3
Таким образом несмотря на большие значения строк кода и индекса цикломатичности второй вариант является более привлекательным в общем индексе сопровождаемости.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.