Анализ возможных путей развития программного обеспечения




Скачать 83.87 Kb.
НазваниеАнализ возможных путей развития программного обеспечения
Дата публикации12.10.2013
Размер83.87 Kb.
ТипЛабораторная работа
uchebilka.ru > Информатика > Лабораторная работа
Лабораторная работа №4

Анализ возможных путей развития программного обеспечения

Цель работы Реализация и анализ путей развития программного обеспечения в соответствие с новыми требованиями

Порядок работы

  1. Получить новые требования к модулю, разработанному на лабораторных работах 1 и 2

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

  3. Реализовать рассмотренные классы

  4. Провести анализ качества полученного кода и сделать вывод о перспективном варианте реализации

Пример:

Для модуля вычисления корней квадратного уравнения с действительными параметрами реализовать возможность поиска решения на множестве комплексных чисел

Для задачи можно рассмотреть два варианта решения

  1. Путем ввода нового класса, который бы отвечал за хранение комплексных чисел

  2. Путем ввода нового класса, который бы отвечал за хранение комплексных чисел и реализовывал стандартные операции с комплексными числами, необходимыми для решения задачи.

Оба решения отражены на диаграммах классов





Реализация приведенных модулей представлена в следующих листингах

Заголовочный файл

#pragma once

struct ComplexNumber

{

public:

double real;

double image;

ComplexNumber(double iReal,double iImage=0);

ComplexNumber();

};

struct CSqrResult

{

static const int C_OK=1;

static const int C_ERROR=2;

ComplexNumber x1, x2;

int status;

};

class CSqrRoot

{

private:

double mAparam,mBparam,mCparam;

public:

CSqrRoot(void);

~CSqrRoot(void);

void initA(double a);

void initB(double b);

void initC(double c);

CSqrResult solve();

};

Исходный файл

#include "SqrRoot.h"

#include

using namespace std;

ComplexNumber::ComplexNumber(double iReal,double iImage)

{

real = iReal;

image =iImage;

}

ComplexNumber::ComplexNumber()

{

real=image=0;

}

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

{

double det = mBparam*mBparam-4*mAparam*mCparam;

if (det<0)

{

result.x1 = ComplexNumber((-2*mBparam/(4*mAparam)),sqrt(-det)/(4*mAparam));

result.x2 = ComplexNumber((-2*mBparam/(4*mAparam)),-sqrt(-det)/(4*mAparam));

}

else

{

result.x1 = ComplexNumber((-2*mBparam/(4*mAparam)),0);

result.x2 = result.x1;

}

}

return result;

}

Заголовочный файл

#pragma once

struct ComplexNumber

{

double real;

double image;

ComplexNumber();

ComplexNumber(double iReal,double iImage=0);

static ComplexNumber complexSqrt(double x);

static ComplexNumber add(ComplexNumber& x,ComplexNumber& y);

static ComplexNumber substract(ComplexNumber& x,ComplexNumber& y);

static ComplexNumber divide(ComplexNumber& x,double y);

};

struct CSqrResult

{

static const int C_OK=1;

static const int C_ERROR=2;

ComplexNumber x1,x2;

int status;

};

class CSqrRoot

{

private:

double mAparam,mBparam,mCparam;

public:

CSqrRoot(void);

~CSqrRoot(void);

void initA(double a);

void initB(double b);

void initC(double c);

CSqrResult solve();

};

#include "SqrRoot.h"

#include

using namespace std;

ComplexNumber::ComplexNumber(double iReal,double iImage)

{

real = iReal;

image =iImage;

}

ComplexNumber::ComplexNumber()

{

real=image=0;

}

ComplexNumber ComplexNumber::complexSqrt(double x)

{

ComplexNumber result;

if (x>0)

{

result.real=sqrt(x);

result.image=0;

}

else

{

result.image=sqrt(-x);

result.real=0;

}

return result;

}

ComplexNumber ComplexNumber::add(ComplexNumber& x,ComplexNumber& y)

{

ComplexNumber result;

result.real=x.real+y.real;

result.image=x.image+y.image;

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

Таким образом несмотря на большие значения строк кода и индекса цикломатичности второй вариант является более привлекательным в общем индексе сопровождаемости.

Добавить документ в свой блог или на сайт

Похожие:

Анализ возможных путей развития программного обеспечения iconН. А. Сидоров Национальный авиационный университет
Рассматривается приложение стиля к разработке программного обеспечения. Введено понятие стилистики программного обеспечения как области...

Анализ возможных путей развития программного обеспечения iconГ. М. Шамота Инновационная стратегия предприятия основа конкурентоспособности
Аннотация: в статье изложены основные стратегические направления инновационного развития отечественных предприятии, проведен их сравнительный...

Анализ возможных путей развития программного обеспечения iconЛегализация программного обеспечения
Это происходит из-за постепенного возрастания степени понимания украинскими компаниями того факта, что использование лицензионного...

Анализ возможных путей развития программного обеспечения iconПроблемы развития информационно-аналитических систем и сппр для экспертного...
При решении этого задания важной задачей есть формирование интерактивного интерфейса эксперта и потребителя. Существует необходимость...

Анализ возможных путей развития программного обеспечения icon1. Общие положения Общие сведения о процедуре Запроса Предложений
Технической поддержки Программного обеспечения систем обеспечения Информационной безопасности и антивирусного программного обеспечения...

Анализ возможных путей развития программного обеспечения iconЗакупочная документация
Технической поддержки Программного обеспечения Для безопасности ис и антивирусного программного обеспечения trend micro сроком на...

Анализ возможных путей развития программного обеспечения iconОбновление программного обеспечения
Внимание! Перед обновлением по убедитесь, что Устройство заряжено полностью во избежание разрядки во время обновления! Это может...

Анализ возможных путей развития программного обеспечения iconЭкзаменационные вопросы по дисциплине «Математический анализ» для...

Анализ возможных путей развития программного обеспечения iconРусский
Прочитайте внимательно: компания Autodesk, Inc. («Autodesk») предоставляет вам лицензию на использование программного обеспечения...

Анализ возможных путей развития программного обеспечения iconРеферат скачан с сайта allreferat wow ua
Сравнительный анализ каскадной и спиральной моделей разработки программного обеспечения

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
uchebilka.ru
Главная страница


<