CodeQL library for C#
codeql/csharp-all 0.5.1 (changelog, source)
Search

Predicate lackOfCohesionCK

The Chidamber-Kemerer lack of cohesion metric.

The aim of this metric is to try and determine whether a class represents one abstraction (good) or multiple abstractions (bad). If a class represents multiple abstractions, it should be split up into multiple classes.

In the Chidamber and Kemerer method, this is measured as follows:

  • n1 = number of pairs of distinct methods in a type that do not have at least one commonly accessed field or property.
  • n2 = number of pairs of distinct methods in a type that do have at least one commonly accessed field or property.
  • lcom = max((n1 - n2)/2, 0).

We divide by 2 because each pair (m1, m2) is counted twice in n1 and n2.

High values of lcom indicate a lack of cohesion. Specifically, an lcom of greater than 500 indicates a potential problem.

Import path

import semmle.code.csharp.metrics.Coupling
predicate lackOfCohesionCK(ValueOrRefType t, float locm)