Cohesie is een kwalitatieve meting, wat betekent dat de te meten broncode wordt onderzocht met behulp van een rubric om een classificatie te bepalen. De cohesietypes, van de slechtste tot de beste, zijn als volgt:
Toevallige cohesie (slechtste) Toevallige cohesie is wanneer delen van een module willekeurig zijn gegroepeerd; de enige relatie tussen de delen is dat ze zijn gegroepeerd (bijv. een “Utilities”-klasse). Voorbeeld:
/*Groups: The function definitionsParts: The terms on each function*/Module A{ /* Implementation of r(x) = 5x + 3 There is no particular reason to group functions in this way, so the module is said to have Coincidental Cohesion. */ r(x) = a(x) + b(x) a(x) = 2x + 1 b(x) = 3x + 2}
Logische samenhang Logische samenhang is wanneer onderdelen van een module worden gegroepeerd omdat ze logisch gezien hetzelfde moeten doen, ook al zijn ze van nature verschillend (bijv. het groeperen van alle muis- en toetsenbordinvoerroutines). Temporele samenhang Temporele samenhang is wanneer delen van een module worden gegroepeerd op grond van het tijdstip waarop zij worden verwerkt – de delen worden op een bepaald tijdstip in de programma-uitvoering verwerkt (b.v. een functie die wordt aangeroepen na het opvangen van een uitzondering waardoor open bestanden worden gesloten, een foutenlogboek wordt gemaakt en de gebruiker wordt ingelicht). Procedurele samenhang Procedurele samenhang is wanneer delen van een module worden gegroepeerd omdat zij altijd een bepaalde volgorde van uitvoering volgen (bv. een functie die de bestandsrechten controleert en vervolgens het bestand opent). Communicatieve/informatieve samenhang Communicatieve samenhang is wanneer delen van een module gegroepeerd zijn omdat zij op dezelfde gegevens werken (bv. een module die op dezelfde informatierecord werkt). Sequentiële samenhang Sequentiële samenhang is wanneer delen van een module gegroepeerd zijn omdat de output van een deel de input is voor een ander deel, zoals bij een lopende band (bv. een functie die gegevens uit een bestand leest en de gegevens verwerkt). Functionele samenhang (best) Functionele samenhang is wanneer onderdelen van een module gegroepeerd zijn omdat zij alle bijdragen tot één welomschreven taak van de module (b.v. Lexicale analyse van een XML-string). Voorbeeld:
/*Groups: The function definitionsParts: The terms on each function*/Module A { /* Implementation of arithmetic operations This module is said to have functional cohesion because there is an intention to group simple arithmetic operations on it. */ a(x, y) = x + y b(x, y) = x * y}Module B { /* Module B: Implements r(x) = 5x + 3 This module can be said to have atomic cohesion. The whole system (with Modules A and B as parts) can also be said to have functional cohesion, because its parts both have specific separate purposes. */ r(x) = .a(.b(5, x), 3)}
Perfecte cohesie (atomair) Voorbeeld.
/*Groups: The function definitionsParts: The terms on each function*/Module A { /* Implementation of r(x) = 2x + 1 + 3x + 2 It's said to have perfect cohesion because it cannot be reduced any more than that. */ r(x) = 5x + 3}
Hoewel cohesie een rangschikkingstype is, wijzen de rangschikkingen niet op een gestage progressie van verbeterde cohesie. Studies van verschillende mensen, waaronder Larry Constantine, Edward Yourdon en Steve McConnell, geven aan dat de eerste twee cohesietypes inferieur zijn; communicatieve en sequentiële cohesie zijn zeer goed; en functionele cohesie is superieur.
Hoewel functionele cohesie wordt beschouwd als het meest wenselijke cohesietype voor een softwaremodule, kan het zijn dat het niet haalbaar is. Er zijn gevallen waarin communicatieve cohesie het hoogste cohesieniveau is dat onder de gegeven omstandigheden kan worden bereikt.