Мера структурной сложности для UML-диаграмм классов*

Xu B., Kang D., Lu J. A Structural Complexity Measure for UML Class Diagrams // Computational Science — ICCS 2004: 4th International Conference, Kraków, Poland, June 6–9, 2004 / под ред. M. Bubak, G. D. van Albada, P. M. A. Sloot, J. Dongarra. — Berlin; Heidelberg: Springer, 2004. — (Lecture Notes in Computer Science; vol. 3036). — С. 421–424. — DOI: 10.1007/978-3-540-24685-5_56.

Baowen Xu1 2, Dazhou Kang1, Jianjiang Lu1 2 3

1Кафедра вычислительной техники и информатики, Юго-Восточный университет, Нанкин, 210096, Китай

2Цзянсуйский институт качества программного обеспечения, Нанкин, 210096, Китай

3Университет науки и технологий НОАК, Нанкин, 210007, Китай

bwxu@seu.edu.cn

Аннотация

Диаграммы классов UML являются ключевым артефактом на этапе концептуального моделирования, и их качество может существенно влиять на качество системы. Одной из важнейших характеристик для оценки качества диаграммы классов UML является мера структурной сложности. В данной работе для представления диаграмм классов используются взвешенные графы зависимостей классов, после чего предлагается мера структурной сложности диаграмм классов UML, основанная на энтропийном расстоянии. Подход учитывает сложность как самих классов, так и отношений между ними и предлагает правила преобразования значений сложности классов и различных типов отношений во взвешенный граф зависимостей классов. Предложенный метод обладает многими полезными свойствами, поэтому он позволяет объективно измерять структурную сложность диаграмм классов.

1 Введение

Одной из главных целей инженерии программного обеспечения является обеспечение качества объектно-ориентированного ПО уже на ранних этапах жизненного цикла, таких как этап концептуального моделирования. Диаграммы классов UML [1] являются ключевым артефактом на этом этапе. Мера структурной сложности — одна из важнейших метрик для оценки качества диаграммы классов UML [2].

Чидамбер и Кемерер предложили набор метрик проектирования на уровне класса []. Лоренц и Кидд предложили группу метрик, рассматривающих статические характеристики проектирования ПО [4]. Бриту, Абреу и Мелу предложили набор метрик на уровне системы [5]. Марчези предложил набор метрик для измерения диаграмм классов UML на этапе анализа, но не учёл некоторые измеряемые элементы UML [2]. Генеро предложила новые метрики, чтобы покрыть необходимость измерения этих отношений [6]. Мансо и Генеро использовали восемь метрик для измерения структурной сложности и размера диаграмм классов UML и их сопровождаемости [7]. Однако они не представили единую меру сложности, интегрирующую все эти метрики.

2 Взвешенные графы зависимостей классов

2.1 Метрики сложности для классов и отношений

Классы и отношения — базовые элементы диаграмм классов. Для измерения сложности классов мы используем подходящие метрики, предложенные другими авторами, которые удовлетворяют следующим условиям: для каждого класса применяется только одна метрика; её значение положительно и отражает сложность класса; метрика учитывает как структуру класса, так и наследование. В некоторых случаях здесь может использоваться мера когезии (связности).

В диаграммах классов UML основными типами отношений являются ассоциации, обобщения и зависимости. Сложность разных типов отношений можно сравнивать. Разные типы отношений в различной степени влияют на зависимость между классами. Мы разбиваем отношения в графе классов UML всего на десять видов, и их неодинаковое влияние на зависимость между классами может быть взвешено (см. табл. 1).

Таблица 1. Значение веса зависимости для отношений
Отношение Вес
1 Обычная зависимость H1
2 Обычная ассоциация H2
3 Квалифицированная ассоциация H3
4 Ассоциированный класс H4
5 Агрегация H5
6 Композиция H6
7 Обобщение (родитель — конкретный класс) H7
8 Связывание (Binding) H8
9 Обобщение (родитель — абстрактный класс) H9
10 Реализация (Realize) H10

При сравнении сложности этих типов отношений выполняются соотношения: H1 ≤ H2 ≤ H3 ≤ H4 ≤ H6 и H1 < H5 < H6 < H7 < H8 < H9 < H10.

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

2.2. Взвешенный граф зависимостей классов

Определение 1. Пусть \(D\) — заданная диаграмма классов. Взвешенный граф зависимостей классов (WCDG) определяется как \(G(D) = (N, E)\), где \(N = V(D)\), \(E = R(D)\), то есть множество вершин и рёбер соответственно.

\(V(D) = \{\, c \mid c \text{ — класс в } D \,\}\).

\(R(D) = \{\, (n_{1}, n_{2}, W(n_{1}, n_{2})) \mid n_{1}, n_{2} \in V(D) \land (\text{в } D \text{ есть отношение из } n_{1} \text{ в } n_{2} \text{ или } n_{1} = n_{2}) \,\}\).

Если \(n_{1} \ne n_{2}\), то \(W(n_{1}, n_{2}) = \sum_{i} W_{i}\), где \(W_{i}\) — взвешенное значение зависимости для каждого отношения из \(n_{1}\) в \(n_{2}\).

Если \(n_{1} = n_{2}\), то к \(W(n_{1}, n_{2})\) добавляется \(H_{1} \cdot C(n_{1})\), где \(C(n_{1})\) — сложность класса, обозначаемого \(n_{1}\).

Каждая вершина WCDG соответствует классу на диаграмме классов; отношения преобразуются в рёбра между вершинами. Сначала формируется структура WCDG по диаграмме классов, затем вычисляются весовые значения зависимости для всех отношений в диаграмме.

Пусть меры сложности классов \(A\) и \(B\) равны \(C(A)\) и \(C(B)\), а весовой коэффициент зависимости — \(H\). Взвешенное значение зависимости \(W\) для отношения из \(B\) в \(A\) вычисляется следующим образом:

  • Если у отношения нет кратности на стороне назначения (например, зависимости, включающие Generalization, Binding и Realize), то \(W = H \cdot C(A)\).
  • Если у отношения есть кратность на стороне назначения \(n\) (например, ассоциации, включая агрегацию и композицию), то \(W = H \cdot \left(2 - \frac{1}{n}\right) \cdot C(A)\). Если \(n = *\), полагаем \(\frac{1}{n} = 0\).
  • Для квалифицированной ассоциации: \(W = H_{3} \cdot \left(2 - \frac{1}{n}\right) \cdot C(B) + b\), где \(b\) обозначает сложность квалификатора.
  • Ассоциированный класс преобразуется в новую вершину, имеющую связи с \(A\) и \(B\).

Теперь можно вычислить веса рёбер и вершин на основе весов зависимости отношений. WCDG также может быть представлен в виде матрицы, где \(W[i][j] = W(n_{i}, n_{j})\). Это упрощает расчёт структурной сложности.

3. Мера структурной сложности на основе энтропийной дистанции

X и Y — дискретные случайные величины; \(A_x=\{x_i \mid 1 \le i \le m\}\), \(A_y=\{y_j \mid 1 \le j \le n\}\).

Энтропия их совместного распределения:

\[ H(X,Y)=-\sum_{x_i \in A_x,\; y_j \in A_y} p(x_i,y_j)\,\log p(x_i,y_j) \tag{1} \]

Условная энтропия \(X\) при наступлении \(Y\):

\[ H(X \mid Y)=\sum_{x_i \in A_x,\; y_j \in A_y} P(x_i,y_j)\,\log \frac{1}{P(x_i \mid y_j)} \tag{2} \]

Взаимная информация \(X\) и \(Y\):

\[ I(X,Y)=H(X)-H(X \mid Y)=H(Y)-H(Y \mid X) \tag{3} \]

Пусть \(D\) — заданная диаграмма классов; \(G(D)\) — соответствующий ей WCDG; \(N(D)\) — множество всех вершин WCDG.

Используем энтропийное расстояние для измерения сложности \(G(D)\). Случайными величинами \(X\) и \(Y\) обозначим соответственно веса исходящих и входящих рёбер каждой вершины. Положим \(A_x=A_y=N(D)\). Тогда для каждого \(x_i \in A_x\) и каждого \(y_j \in A_y\) имеем:

\[ p(x_i)=\frac{\sum\limits_{n_2 \in N(D)} W(x_i,n_2)}{\sum\limits_{n_1 \in N(D)}\sum\limits_{n_2 \in N(D)} W(n_1,n_2)},\qquad p(y_j)=\frac{\sum\limits_{n_1 \in N(D)} W(n_1,y_j)}{\sum\limits_{n_1 \in N(D)}\sum\limits_{n_2 \in N(D)} W(n_1,n_2)} \tag{4} \]

\[ p_{x,y}(x_i,y_j)=\frac{W(x_i,y_j)}{\sum\limits_{n_1 \in N(D)}\sum\limits_{n_2 \in N(D)} W(n_1,n_2)},\qquad p_{x}(x_i \mid y_j)=\frac{W(x_i,y_j)}{\sum\limits_{n_1 \in N(D)} W(n_1,y_j)} \tag{5} \]

Определение 2. Сложность диаграммы \(D\) определяется как энтропийное расстояние между \(X\) и \(Y\):

\[ \mathrm{Complexity}(D)=D_H(X,Y)=H(X,Y)-I(X,Y) \tag{6} \]

В частности, если \(D=\varnothing\), то \(\mathrm{Complexity}(D)=0\). Для любой диаграммы классов \(D\) выполняется:

\[ 0 \le \mathrm{Complexity}(D) \le 2\log|V(D)| \tag{7} \]

где \(V(D)\) — множество классов в диаграмме \(D\). Для оценки предложенной меры использованы свойства Вейукера [8] для метрик сложности (всего 9 свойств); показано, что мера удовлетворяет 7 из 9. Метод позволяет объективно измерять структурную сложность диаграмм классов.

4. Заключение

Мы используем взвешенные графы зависимостей классов для представления заданных диаграмм классов и затем предлагаем меру структурной сложности диаграмм классов UML, основанную на энтропийном расстоянии. Она учитывает сложность как самих классов, так и отношений между ними. Этот метод обладает многими полезными свойствами; поэтому он позволяет объективно измерять структурную сложность диаграмм классов.

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

Литература

  1. Rumbaugh, J., Jacobson, I., Booch, G.: *The Unified Modeling Language Reference Manual*. Addison-Wesley, Reading, MA, USA (1999).
  2. Marchesi, M.: OOA metrics for the Unified Modeling Language. Proc. 2nd Euromicro Conf. on Software Maintenance and Reengineering, Palazzo degli Affari, Italy (1998) 67–73.
  3. Chidamber, S., Kemerer, C.: A Metrics Suite for Object-Oriented Design. *IEEE Trans. on Software Engineering* 20(6) (1994) 476–493.
  4. Lorenz, M., Kidd, J.: *Object-Oriented Software Metrics: A Practical Guide*. Prentice Hall, Englewood Cliffs, NJ (1994).
  5. Brito, E., Abreu, F., Melo, W.: Evaluating the Impact of Object-Oriented Design on Software Quality. Proc. 3rd International Metric Symposium (1996) 90–99.
  6. Genero, M., Piattini, M.: Empirical validation of measures for class diagram structural complexity through controlled experiments. Proc. 5th International ECOOP Workshop on Quantitative Approaches in Object-Oriented Software Engineering, Budapest, Hungary (2001) 87–95.
  7. Manso, M.E., Genero, M., Piattini, M.: No-Redundant Metrics for UML Class Diagram Structural Complexity. *CAiSE 2003 — The 15th Conference on Advanced Information Systems Engineering*, LNCS 2681, 127–142.
  8. Weyuker, E.J.: Evaluating Software Complexity Measures. *IEEE Trans. on Software Engineering* (1988) 1357–1365.

* Исследование частично поддержано Фондом молодых учёных ННФК (60373066, 60303024), государственной фундаментальной программой исследований Китая 973 (2002CB312000), а также Государственным фондом научных исследований для программ подготовки докторов в университетах Китая.