www.wikidata.de-de.nina.az
Die McCabe Metrik auch zyklomatische Komplexitat cyclomatic complexity ist eine Softwaremetrik mit der die Komplexitat eines Software Moduls Funktion Prozedur oder allgemein ein Stuck Sourcecode gemessen werden kann Die zyklomatische Komplexitat wurde 1976 durch Thomas J McCabe eingefuhrt 1 Hinter der Software Metrik von McCabe steckt der Gedanke dass ab einer bestimmten Komplexitat das Modul fur den Menschen nicht mehr begreifbar ist Die cyclomatic complexity ist definiert als Anzahl linear unabhangiger Pfade auf dem Kontrollflussgraphen eines Moduls Damit ist die Zahl eine obere Schranke fur die minimale Anzahl der Testfalle die notig sind um eine vollstandige Zweiguberdeckung des Kontrollflussgraphen zu erreichen Inhaltsverzeichnis 1 Berechnung 1 1 Berechnung durch Anzahl Binarverzweigungen 1 2 Berechnung durch Anzahl Knoten und Kanten 2 Interpretation der Metrik 3 Kritik 4 Literatur 5 Siehe auch 6 Weblinks 7 EinzelnachweiseBerechnung BearbeitenEs gibt zwei Ansatze wie man die zyklomatische Komplexitat nach McCabe also die linear unabhangigen Pfade in einem Kontrollfluss berechnen kann abhangig von der Anzahl der Binarverzweigungen oder abhangig von der Anzahl der Knoten und Kanten in Kontrollflussgraphen Berechnung durch Anzahl Binarverzweigungen Bearbeiten Das Komplexitatsmass nach McCabe M displaystyle M nbsp ist gleich der Anzahl der binaren Verzweigungen b displaystyle b nbsp plus 1 Bei Betrachtung mehrerer Kontrollflussgraphen also p gt 1 displaystyle p gt 1 nbsp gilt M b p displaystyle M b p nbsp wobei b Anzahl Binarverzweigungen also bedingte Anweisungen mit genau zwei Zweigen z B IF Anweisungen und p Anzahl der einzelnen Kontrollflussgraphen ein Graph pro Funktion Prozedur Verzweigungen mit mehr als zwei Zweigen konnen auf Binarverzweigungen heruntergebrochen werden Dabei gilt b z 1 displaystyle b z 1 nbsp mit z Anzahl Zweige Berechnung durch Anzahl Knoten und Kanten Bearbeiten Alternativ kann man das Komplexitatsmass noch durch die Anzahl der Knoten und Kanten im Kontrollflussgraph berechnen In diesem Fall ist die McCabe Zahl definiert als M e n 2 p displaystyle M e n 2p nbsp wobei e Anzahl Kanten im Graphen n Anzahl Knoten im Graphen und p Anzahl der Zusammenhangskomponenten des Graphen Interpretation der Metrik BearbeitenLaut McCabe sollte die zyklomatische Zahl eines in sich abgeschlossenen Teilprogramms nicht hoher als 10 sein da sonst das Programm zu komplex und zu schwer zu testen ist Diese Regel ist allerdings umstritten da sich die zyklomatische Zahl nur dann erhoht wenn verzweigende Anweisungen wie IF eingefugt werden aber nicht beim Einfugen sonstiger Anweisungen zum Beispiel einer Bildschirmausgabe Es kann also lediglich eine Aussage uber den Testaufwand Anzahl der zu testenden unabhangigen Programmpfade getroffen werden Kritik BearbeitenKomplexitatsmasse sind fur Menschen mitunter nicht intuitiv zu erfassen insbesondere switch Anweisungen werden haufig als weniger komplex angesehen als ihre Komplexitatszahl vermuten lasst So kann im folgenden Beispiel von Unubersichtlichkeit fur Menschen keine Rede sein jedoch erreicht es mit einer Komplexitatszahl von 8 einen recht hohen Wert const String wochentagsname const int nummer switch nummer case 1 return Montag case 2 return Dienstag case 3 return Mittwoch case 4 return Donnerstag case 5 return Freitag case 6 return Samstag case 7 return Sonntag return unbekannter Wochentag In der Praxis wird die switch Konstruktion haufig fur Nachschlageaufgaben dieser Art eingesetzt Die Funktion wochentagsname umfasst acht Kontrollflusspfade und acht Ausstiegspunkte hat entsprechend eine hohe Komplexitatszahl von 8 und ist trotzdem vom Menschen leicht zu uberblicken Dennoch birgt die Konstruktion Gefahren namlich die Moglichkeit in einzelne Case Anweisungen Nebenwirkungen einzubauen Die folgende Implementierung des gleichen Beispiels hat eine erheblich niedrigere Komplexitat weil keine Nebenwirkungen fur die acht Falle programmiert werden konnen die jeweils eine eigene Ruckgabeanweisung haben und die zudem untereinander nicht getrennt sind const String wochentagsname const int nummer string tage new string Montag Dienstag Mittwoch Donnerstag Freitag Samstag Sonntag String ergebnis unbekannter Wochentag if nummer gt 1 amp amp nummer lt sizeof tage ergebnis tage nummer 1 return ergebnis Allerdings enthalt der umstrukturierte Code mehr fehlertrachtige Stellen Nutzen des Operators sizeof Bereichsprufung fur Datenfeld tage und explizite Berechnung des Indexes Literatur BearbeitenThomas J McCabe A Complexity Measure In IEEE Transactions on Software Engineering Band SE 2 1976 S 308 320 Helmut Balzert Lehrbuch der Software Technik Software Management Software Qualitatssicherung Unternehmensmodellierung S 481 482 Christof Ebert James Cain Cyclomatic Complexity In IEEE Software 33 6 2016 S 27 29 1 Siehe auch BearbeitenKontrollflussorientierte Testverfahren Softwaremetrik SoftwarequalitatWeblinks BearbeitenThomas J McCabe A Complexity Measure PDF 1 68 MB 1976 Berechnung der McCabe Metrik Beispielprojekt PDF 0 74 MB Messung von McCabe Metriken McCabe s Cyclomatic Complexity and Why We Don t Use It Einzelnachweise Bearbeiten a b Christof Ebert James Cain Giuliano Antoniol Steve Counsell Phillip Laplante Cyclomatic Complexity In IEEE Software Band 33 Nr 6 November 2016 ISSN 0740 7459 S 27 29 doi 10 1109 MS 2016 147 ieee org abgerufen am 19 Februar 2021 Abgerufen von https de wikipedia org w index php title McCabe Metrik amp oldid 212105166