Das Original
In [Chidamber 1991] wird LCOM wie folgt definiert:- Gegeben eine Klasse C mit Methoden M1, M2, ..., Mn.
- Dann lassen sich n Teilmengen von Instanzvariablen bilden, wobei jede Teilmenge Ii genau diejenigen Instanzvariablen enthält, welche von Methode Mi verwendet werden.
- LCOM = Anzahl der disjunkten Teilmengen Ii.
Redefinition durch Li und Henry
- Bilde für eine Klasse die Menge aller Methoden-Teilmengen die folgende Bedingung erfüllt:
- Jede Teilmenge enthält mindestens eine Methode.
- Jedes Methoden-Paar einer Teilmenge greift auf mindestens eine gemeinsame Instanzvariable zu.
- LCOM = Anzahl der disjunkten Methoden-Teilmengen.
Redefinition durch Chidamber und Kemerer
In [Chidamber 1994] entwickelten Chidamber und Kemerer selbst eine neue LCOM-Definition. Diese Definition beruht nicht mehr auf der Größe disjunkter Teilmengen, sondern bildet eine Differenz von paarweise nicht-kohäsiven und paarweise kohäsiven Methoden.- Es werden die Paare aller Methoden der Klasse gebildet.
- Für jedes Paar wird geprüft, ob es mindestens ein gemeinsames Attribut verwendet.
- Es ergeben sich zwei Mengen P und Q:
- P: die Paare, die kein gemeinsames Attribut verwenden
- Q: die Paare, die mindestens ein gemeinsames Attribut verwenden
- LCOM = |P| - |Q| oder mindestens 0.
Prozentsatzmethode
- Ermittle für jede Instanzvariable den Anteil der Methoden, welche diese Variable nutzen.
- Bilde den Mittelwert dieser Prozentwerte und subtrahiere ihn von 100%.
- Ein hoher Wert weist auf schlechte Kohäsion hin.
Weitere Variationen und Implementierungsunterschiede
Auch die einzelnen LCOM-Definitionen erlauben noch Freiheitsgrade. Sollen Konstruktoren zu den Methoden zählen oder nicht? Sollen geerbte Instanzvariablen berücksichtigt werden oder nicht? Soll der gegenseitige Aufruf von Methoden berücksichtigt werden oder nicht? Sollen die gefundenen Kohäsionswerte durch Betrachtung externer Kopplungen "normalisiert" werden? Usw.Schlussbetrachtung und Bewertung
In einer Reihe empirischer Untersuchungen, darunter [Etzkorn 1998] und [Mäkelä 2006], werden verschiedene LCOM-Definitionen mittels Anwendung auf konkrete Klassen empirisch untersucht. Dabei ergeben sich teils deutliche Abweichungen zwischen den unterschiedlichen Ansätzen. Etzkorn und Kollegen betrachten die Definition aus [Chidamber 1994] als problematisch, konstatieren aber der Redefinition von Li und Henry (ohne Betrachtung geerbter Instanzvariablen, aber mit Betrachtung von Konstruktoren), insgesamt eine gute Annäherung der von Experten beurteilten Kohäsion. Mäkelä und Kollege fassen zusammen:"Ein guter LCOM-Wert deutet auf ein gutes Klassendesign hin, während schlechte LCOM-Werte nicht notwendigerweise ein schlechtes Klassendesign bedeuten müssen."In Anbetracht der Intensität der Forschung in diesem Bereich erscheint sowohl die Vielfalt der Definitionen als auch die empirisch festgestellte Aussagekraft ernüchternd. Es kann zumindest festgehalten werden, dass eine zweifelsfreie und aussagekräftige Formalisierung der Kohäsion von Methoden auf Grund rein syntaktischer Eigenschaften von Klassen bis heute nicht gelungen ist. Die verfügbaren Metriken liefern allenfalls Hinweise, die im Einzelfall vom Entwickler zu überprüfen sind.
Quellen
[Chidamber 1991] - Towards a metrics suite for object-oriented design, PROCEEDINGS: OOPSLA ’91, pp. 197-211, Chidamber, S.R., and C.F. Kemerer (1991)[Chidamber 1994] - A metrics suite for object-oriented design, Chidamber, S.R., and C.F. Kemerer (1994)
[Etzkorn 1998] - A Practical Look at the Lack of Cohesion in Methods Metric, Letha H. Etzkorn, Carl G. Davis, Wei Li (1998)
[Li 1993] - Maintenance metrics for the object-oriented paradigm, Li, W. and S. Henry (1993)
[Li 1995] - Measuring object-oriented design, Li, W., S. Henry, D. Kafury, and R. Schulman (1995)
[Mäkelä2006] - Observations on Lack of Cohesion Metrics, Sami Mäkelä, Ville Leppänen (2006)