Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Метрики объектно-ориентированных программных систем



Метрики объектно-ориентированных программных систем

 

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

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

Метрические особенности объектно-ориентированных программных систем

 

Объектно-ориентированные метрики вводятся с целью:

q улучшить понимание качества продукта;

q оценить эффективность процесса конструирования;

q улучшить качество работы на этапе проектирования.

 

 

выделяют пять характеристик объектно-ориентированных систем:

- локализацию,

- инкапсуляцию,

- информационную закрытость,

- наследование и

- способы абстрагирования объектов.

Эти характеристики оказывают максимальное влияние на объектно-ориентированные метрики.

Локализация

 

Локализация фиксирует способ группировки информации в программе.

В классических методах, где используется функциональная декомпозиция, информация локализуется вокруг функций.

В объектно-ориентированной среде информация группируется внутри классов или объектов (инкапсуляцией как данных, так и процессов).

Поскольку в классических методах основной механизм локализации — функция, программные метрики ориентированы на внутреннюю структуру или сложность функций (длина модуля, связность, цикломатическая сложность) или на способ, которым функции связываются друг с другом (сцепление модулей).

Так как в объектно-ориентированной системе базовым элементом является класс, то локализация здесь основывается на объектах.

Метрики, отображающие способы взаимодействия классов, должны быть приспособлены к отношениям «один-к-одному». «один-ко-многим», «многие-ко-многим».

Инкапсуляция

 

Инкапсуляция — упаковка (связывание) совокупности элементов.

В объектно-ориентированных системах инкапсулируются обязанности класса, представляемые его свойствами (а для агрегатов — и свойствами других классов), операциями и состояниями.

Инкапсуляция переводит измерения на более высокий уровень абстракции (пример — метрика «количество операций на класс»).

Информационная закрытость

Информационная закрытость делает невидимыми операционные детали программного компонента. Другим компонентам доступна только необходимая информация.

Метрики, измеряющие степень достигнутой закрытости, отображают качество объектно-ориентированного проекта.

Наследование

Наследование — механизм, обеспечивающий тиражирование обязанностей одного класса в другие классы. Наследование распространяется через все уровни иерархии классов.

Объектно-ориентированные метрики (количество детей — потомков класса, количество родителей, высота класса в иерархии наследования).

Абстракция

Абстракция — это механизм, который позволяет проектировщику выделять главное в программном компоненте (как свойства, так и операции) без учета второстепенных деталей.

объектно-ориентированные метрики должны представлять абстракции в терминах измерений класса.

Примеры: количество экземпляров класса в приложении, количество родовых классов на приложение, отношение количества родовых к количеству неродовых классов.

Эволюция мер связи для объектно-ориентированных программных систем

 

классической мерой сложности внутренних связей модуля является связность , а классической мерой сложности внешних связей — сцепление.

Рассмотрим развитие этих мер применительно к объектно-ориентированным системам.

Связность объектов

 

В классическом методе Л. Констентайна и Э. Йордана определены семь типов связности.

1. Связность по совпадению. В модуле отсутствуют явно выраженные внутренние связи.

2. Логическая связность. Части модуля объединены по принципу функционального подобия.

3. Временная связность. Части модуля не связаны, но необходимы в один и тот же период работы системы.

4. Процедурная связность. Части модуля связаны порядком выполняемых ими действий, реализующих некоторый сценарий поведения.

5. Коммуникативная связность. Части модуля связаны по данным (работают с одной и той же структурой данных).

6. Информационная (последовательная) связность. Выходные данные одной части используются как входные данные в другой части модуля.

7. Функциональная связность. Части модуля вместе реализуют одну функцию. (обладает наибольшей связностью)

8. Объектная связность. Каждая операция обеспечивает функциональность, которая предусматривает, что все свойства объекта будут модифицироваться, отображаться и использоваться как базис для предоставления услуг

.

Высокая связность — желательная характеристика, так как она означает, что объект представляет единую часть в проблемной области, существует в едином пространстве.

При изменении системы все действия над частью инкапсулируются в едином компоненте. Поэтому для производства изменения нет нужды модифицировать много компонентов.

Метрики для вычисления связности классов.

Метрики связности по данным

 

Л. Отт и Б. Мехра разработали модель секционирования класса.

Секционирование основывается на экземплярных переменных класса.

Для каждого метода класса получают ряд секций, а затем производят объединение всех секций класса.

Измерение связности основывается на количестве лексем данных (data tokens), которые появляются в нескольких секциях и «склеивают» секции в модуль.

Под лексемами данных здесь понимают определения констант и переменных или ссылки на константы и переменные.

Базовым понятием методики является секция данных. Она составляется для каждого выходного параметра метода.

Секция данных — это последовательность лексем данных в операторах, которые требуются для вычисления этого параметра.

Например, на рис. 3.1 представлен программный текст метода SumAndProduct. Все лексемы, входящие в секцию переменной SumN, выделены рамками. Сама секция для SumN записывается как следующая последовательность лексем:

N1 • SumN1 • I1 • SumN2 • O1 • I2 • 12 • N2 • SumN3 SumN4 • I3.

Рис. 3.1. Секция данных для переменной SumN

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

N1 • ProdN1 • I1 • ProdN2 •11 • I2 • 12 • N2 • ProdN3 • ProdN4 • I4

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

Таблица 3.1. Профиль секций данных для метода SumAndProduct

SumN ProdN Оператор
    procedure SumAndProduct
(N iinteger;
Var SumN, ProdN iinteger)
    var
I: integer;
    begin
  SumN: =0
  ProdN: =1
for I: =1 to N do begin
  SumN: =SumN+l
  ProdN: =ProdN*l
    end
    end;

в столбце переменной для каждой секции указывается количество лексем из i-й строки метода, которые включаются в секцию.

 

Еще одно базовое понятие методики — секционированная абстракция. Секционированная абстракция это объединение всех секций данных метода. Например, секционированная абстракция метода SumAndProduct имеет вид

SA(SumAndProduct) = { N1 • SumN1 • I1 • SumN2 • O1 • I2 • 12 • N2 • SumN3 SumN4 • I3,

N1 • ProdN1 • I1 • ProdN2 •11 • I2 • 12 • N2 • ProdN3 • ProdN4 • I4}.

 

Введем главные определения.

Секционированной абстракцией класса (Class Slice Abstraction) CSA(C) называют объединение секций всех экземплярных переменных класса. Полный набор секций составляют путем обработки всех методов класса.

Склеенными лексемами называют те лексемы данных, которые являются элементами более чем одной секции данных.

Сильно склеенными лексемами называют те склеенные лексемы, которые являются элементами всех секций данных.

Сильная связность по данным ( StrongData Cohesion) это метрика, основанная на количестве лексем данных, входящих во все секции данных для класса.

Иначе говоря, сильная связность по данным учитывает количество сильно склеенных лексем в классе С, она вычисляется по формуле:

,

где

SG(CSA(C)) — объединение сильно склеенных лексем каждого из методов класса С,

лексемы(С) — множество всех лексем данных класса С.

Т.о., класс без сильно склеенных лексем имеет нулевую сильную связность по данным.

Слабая связность по данным

(Weak Data Cohesion) метрика, которая оценивает связность, базируясь на склеенных лексемах.

Склеенные лексемы не требуют связывания всех секций данных, поэтому данная метрика определяет более слабый тип связности.

Слабая связность по данным вычисляется по формуле:

,

где G(CSA(C)) — объединение склеенных лексем каждого из методов класса.

Класс без склеенных лексем не имеет слабой связности по данным.

 

Наиболее точной метрикой связности между секциями данных является клейкость данных (Data Adhesiveness) .

Клейкость данных определяется как отношение суммы из количеств секций, содержащих каждую склеенную лексему, к произведению количества лексем данных в классе на количество секций данных. Метрика вычисляется по формуле:

.

 

Приведем пример. Применим метрики к классу, профиль секций которого показан в табл. 3.2.

Таблица 3.2. Профиль секций данных для класса Stack

array top size Класс Stack
1 1 1 class Stack {int *array, top, size;
  public:
  Stack(int s) {
2 2 size=s;
2 2 array=new int [size];
top=0; }
  int IsEmpty () {
return top==0};
  int Size (){
return size};
  intVtop(){
3 3 return array [top-1]; }
  void Push (int item) {
2 2 2 if (top= =size)
  printf (" Empty stack. \n" );
  else
3 3 3 array [top++]=item; }
  int Pop () {
if (IsEmpty ())
  printf (" Full stack. \n" );
  else
  --top; }
  };

в столбце переменной для каждой секции указывается количество лексем из i-й строки метода, которые включаются в секцию.

 

Очевидно, что CSA(Stack) включает три секции с 19 лексемами, имеет 5 сильно склеенных лексем и 12 склеенных лексем.

Расчеты по рассмотренным метрикам дают следующие значения:

SDC(CSA(Stack)) = 5/19 = 0, 26

WDC(CSA(Stack)) = 12/19 = 0, 63

DA(CSA(Stack)) =(7*2 + 5*3)/(19*3) = 0, 51

Сцепление объектов

 

Рассмотрим объектно-ориентированные метрики сцепления, предложенные М. Хитцем и Б. Монтазери [38].

Локальность данных

 

Локальность данных LD (Locality of Data) метрика, отражающая качество абстракции, реализуемой классом. Чем выше локальность данных, тем выше самодостаточность класса. Эта характеристика оказывает сильное влияние на такие внешние характеристики, как повторная используемость и тестируемость класса.

Метрика LD представляется как отношение количества локальных данных в классе к общему количеству данных, используемых этим классом.

Будем использовать терминологию языка C++. Обозначим как Mi(1 i n) методы класса. В их число не будем включать методы чтения/записи экземплярных переменных. Тогда формулу для вычисления локальности данных можно записать в виде:

,

где:

q Li(1 i n) — множество локальных переменных, к которым имеют доступ методы Mi (прямо или с помощью методов чтения/записи). Такими переменными являются: непубличные экземплярныё переменные класса; унаследованные защищенные экземплярныё переменные их суперклассов; статические переменные, локально определенные в Mi;

q Ti(1 i n) — множество всех переменных, используемых в Mi, кроме динамических локальных переменных, определенных в Mi.

Для обеспечения надежности оценки здесь исключены все вспомогательные переменные, определенные в Mi , — они не играют важной роли в проектировании.

Защищенная экземплярная переменная, которая унаследована классом С, является локальной переменной для его экземпляра (и следовательно, является элементом Li), даже если она не объявлена в классе С. Использование такой переменной методами класса не вредит локальности данных, однако нежелательно, если мы заинтересованы уменьшить значение CDBC.

Метрики Лоренца и Кидда

 

Коллекция метрик Лоренца и Кидда — результат практического, промышленного подхода к оценке ОО-проектов [45].

Метрики для ОО-проектов

 

Основными задачами менеджера проекта являются планирование, координация, отслеживание работ и управление программным проектом.

Одним из ключевых вопросов планирования является оценка размера программного продукта. Прогноз размера продукта обеспечивают следующие ОО-метрики.

Набор метрик Фернандо Абреу

 

Набор метрик MOOD (Metrics for Object Oriented Design), предложенный Ф. Абреу в 1994 году, — другой пример академического подхода к оценке качества ОО-проектирования [6]. Основными целями MOOD-набора являются:

1) покрытие базовых механизмов объектно-ориентированной парадигмы, таких как инкапсуляция, наследование, полиморфизм, посылка сообщений;

2) формальное определение метрик, позволяющее избежать субъективности измерения;

3) независимость от размера оцениваемого программного продукта;

4) независимость от языка программирования, на котором написан оцениваемый продукт.

Набор MOOD включает в себя следующие метрики:

1) фактор закрытости метода (МНF);

2) фактор закрытости свойства (AHF);

3) фактор наследования метода (MIF);

4) фактор наследования свойства (AIF);

5) фактор полиморфизма (POF);

6) фактор сцепления (СОF).

Каждая из этих метрик относится к основному механизму объектно-ориентированной парадигмы: инкапсуляции (МНF и АНF), наследованию (MIF и AIF), полиморфизму (POF) и посылке сообщений (СОF). В определениях MOOD не используются специфические конструкции языков программирования.

Метрики инкапсуляции

 

К метрикам инкапсуляции относятся: «Недостаток связности в методах LCOM», «Процент публичных и защищенных PAP (Percent Public and Protected)» и «Публичный доступ к компонентным данным PAD (Public Access to Data members)».

Метрики наследования

 

К метрикам наследования относятся «Количество корневых классов NOR (Number Of Root classes)», «Коэффициент объединения по входу FIN», «Количество детей NOC» и «Высота дерева наследования DIT».

Метрики полиморфизма

 

Рассмотрим следующие метрики полиморфизма: «Процентное количество не переопределенных запросов OVR», «Процентное количество динамических запросов DYN», «Скачок класса Bounce-С» и «Скачок системы Bounce-S».

Метрики объектно-ориентированных программных систем

 

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

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


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-06-05; Просмотров: 3113; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.059 с.)
Главная | Случайная страница | Обратная связь