1. Глубина класса в графе наследования (nl)

По существу, на практике используют две различные по смыслу метрики с этим названием.

  • сумма длин всех путей в простейшей модели наследования от корневых вершин до рассматриваемой вершины;

  • длина максимального пути в простейшей модели наследования от корневых вершин до рассматриваемой вершины.

Nesting level (class-to-root-depth) is 1) the number of ancestors of a class) 2) the maximum length from the node to a root of the tree. Кроме этих определений метрики существуют и другие. Например, приводится пример вычисления глубины класса в графе наследования как среднего арифметического значений глубины класса всех вершин – непосредственных предков (parents) данной вершины. (Шкала значений интервальная.).

Данное определение справедливо только для ОО проектов и программ, в которых использовано множественное наследование. Метрика связана с сопровождаемостью и повторной используемостью программ аналогично DIT

    1. Связанность между классами объектов (cbo)

Связанность между классами объектов (Coupling Between Object classes-CBO) позволяет определить количество классов, с которыми связан данный класс. Это означает, что один класс использует методы или экземпляры другого класса.

Вероятное влияние метрики на характеристики системы:

  • Слишком большая связанность классов отрицательно влияет на модульность проекта и не позволяет повторно использовать классы.

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

  • Сильно взаимосвязанная система требует большего количества тестов и времени на тестирование.

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

Заметим, что причины связанности классов в данной метрике значения не имеют.

Пример:

Рассмотрим программу:

classView {

};

class Node : public View {

Rect area;

};

class Edge : public View {

Node getNode1();

Node getNode2();

bool has(Point p);

};

В этом случае:

  • CBO(View) = 2, поскольку он связан отношениемнаследованияс двумя классами-потомкамиNodeиEdge.

  • CBO(Node) = 3, поскольку он связан отношениемнаследованияс классомViewи отношениемассоциациис классомRect. Кроме того, класс Node используется классомEdgeкак результат вызова функцийgetNode1()иgetNode2().

  • CBO(Edge) = 3, поскольку он связан отношением наследования с классомView, использует классNodeкак результат вызова функцийgetNode1()иgetNode2(), а также использует классPointкак параметр функцииhas(Point p).

    1. Количество реакций на класс (rfc)

Количество реакций на класс (Responce For Class - RFC) позволяет определить количество методов, которое может быть выполнено в ответ на получение сообщения данным классом. В этой метрике учитываются не только выполняемые методы данного класса, но и методы других классов. Таким образом с помощью этой метрики можно оценить и степень потенциального "общения" этого класса с другими классами.

Другими словами, если класс C имеет n методов Mi (т.е. {Mi}), а каждый метод Mi из этого множества может обратиться к множеству {Rji} методов, расположенных как внутри класса C, так и вне его (в каждом множестве Rji содержится ji элементов), то объединение всех этих множеств называется множеством реакций (response set – RS) класса C:

Число элементов в множестве реакций класса называется реакцией класса C:

На практике чаще принято вычислять значение метрики RFC для класса следующим образом:

Вероятное влияние метрики на характеристики системы:

  • Большое количество методов, которые вызывается при вызове некоторого метода класса, существенно осложняет тестирование и отладку этого класса. Это требует большего понимания системы тем, кто ее тестирует.

  • Значения с наихудшим значением этой метрики требуют наибольшего времени тестирования.

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

Пример:

Рассмотрим программу:

classEdge :publicView {

Node *node1, *node2;

void setArea(Point p1, Point p2);

void draw(Graphics *g){

Point c1 = node1->getCenter();

Point c2 = node2->getCenter();

g->drawLine(p1, p2);

setArea(p1, p2);

}

};

В этом случае:

RFC(Edge) = 3, поскольку он вызывает методgetCenter()классаNode, методdrawLine(p1, p2)классаGraphicsи собственный методsetArea(p1, p2).