\begin{slide}{Code-Metriken}

Welche Code-Eigenschaften kann man messen?
Was sagen sie aus?
\begin{itemize}
\item Anzahl der Methoden pro Klasse
\item Anzahl der \dots pro \dots
\item textuelle Komplexität: Halstaed
\item strukturelle Komplexität: McCabe
\item OO-Klassenbeziehungen
\end{itemize}

\end{slide}

\begin{slide}{Code-Metriken: Halstaed}

(zitiert nach Balzert, Softwaretechnik II)

\begin{itemize}
\item
  $O$ Anzahl aller Operatoren/Operationen (Aktionen)
\item
  $o$ Anzahl unterschiedlicher Operatoren/Operationen
\item
  $A$ Anzahl aller Operanden/Argumente (Daten)
\item
  $a$ Anzahl unterschiedlicher Operanden/Argumente
\item  ($o+a$ Größe des Vokabulars, $O+A$ Größe der Implementierung)
\end{itemize}

Programmkomplexität: $\frac{o \cdot A}{2 \cdot a}$

\end{slide}

\begin{slide}{Code-Metriken: McCabe}

(zitiert nach Balzert, Softwaretechnik II)

zyklomatische Zahl (des Ablaufgraphen $G=(V,E)$)

$|E|-|V|+2c$ wobei $c=$ Anzahl der Zusammenhangskomponenten

(Beispiele)

Idee: durch Hinzufügen einer Schleife, Verzweigung usw.
steigt dieser Wert um eins.

\end{slide}

\begin{slide}{OO-Metriken}

\begin{itemize}
\item Attribute bzw. Methoden pro Klasse
\item Tiefe und Breite der Vererbungshierarchie
\item Kopplung (zwischen Klassen)
   wieviele andere Klassen sind in einer Klasse bekannt?
   (je weniger, desto besser)
\item Kohäsion (innerhalb einer Klasse):
   hängen die Methoden eng zusammen?
   (je enger, desto besser)
\end{itemize}

\end{slide}

\begin{slide}{Kohäsion: Chidamber und Kemerer}

  (Anzahl der Paare von Methoden, die kein gemeinsames Attribut benutzen)
  $-$ (Anzahl der Paare von Methoden, die ein gemeinsames Attribut benutzen)

  bezeichnet fehlende Kohäsion, d. h. kleinere Werte sind besser.

\end{slide}

\begin{slide}{Kohäsion: Henderson-Sellers}

  \begin{itemize}
  \item
    $M$ Menge der Methoden
  \item
    $A$ Menge der Attribute
  \item
    für $a\in A$: $Z(a) =$ Menge der Methoden, die $a$ benutzen
  \item $z$ Mittelwert von $|Z(a)|$ über $a\in A$
  \end{itemize}
  
  fehlende Kohäsion: $\frac{|M|-z}{|M|-1}$

  (kleinere Werte sind besser)


\end{slide}


\begin{slide}{Code-Metriken (Eclipse)}

Eclipse Code Metrics Plugin installieren
und für eigenes Projekt anwenden.
\begin{itemize}
\item
  \url{http://eclipse-metrics.sourceforge.net/}
\item
  Installieren in Eclipse: Help $\to$ Software Update $\to$
  Find $\to $ Search for New $\to$ New (Remote/Local) site
\item
  Projekt $\to$ Properties $\to $ Metrics $\to$ Enable,
  dann Projekt $\to$ Build, dann anschauen
\end{itemize}

\end{slide}

