Bei dem Versuch, einen Überblick darüber zu bekommen, wie schwierig einige Legacy-C ++ - und C # -Code zu pflegen sind und das Risiko, Bugs einzuführen, wurde vorgeschlagen, zu messen, wie weit oder eng Variablen im Bereich liegen. Der Code verwendet viele Globals oder weit verbreitete Variablen, wobei lokale besser wären. Ein häufiges Vorkommen besteht darin, zu finden, dass diese Variablen für zwei oder drei Zeilen Code mehrere Bereichsebenen in denen sie deklariert sind verwendet werden.
Ich weiß, dass statische Code-Analyse-Tools normalerweise versuchen, Kopplung und Kohäsion zu quantifizieren, aber gibt es irgendetwas, das den Variablen- / Datenumfang genauer misst?
Ja, das ist eine Standardtechnik der statischen Analyse. Es heißt Analyse der variablen Lebendigkeit. In diesem Buch wird im Einführungsbeispiel eine solche Analyse durchgeführt.
Aus dem Wikipedia Artikel :
In der Compiler-Theorie, Live-Variablen-Analyse (oder einfach Lebendigkeit Analyse) ist eine klassische Datenflussanalyse, die von Compilern durchgeführt wird Berechnen Sie für jeden Programmpunkt die potenziell möglichen Variablen Lesen Sie vor dem nächsten Schreiben, also den Variablen, die live sind der Ausgang von jedem Programmpunkt.
Einfach ausgedrückt: Eine Variable ist live, wenn sie einen Wert enthält, der sein könnte in der Zukunft benötigt.
Ich werde mich auf lokale Variablen in OO-Sprachen konzentrieren (Java, C #, C ++). Ich kann mir eine Reihe von Maßnahmen vorstellen, die den Umfang einer lokalen Variablen betreffen.
Größe der lokalen Variablengröße
ist die Anzahl der Anweisungen, auf die eine lokale Variable zugreifen kann. Dies sollte nicht zu groß sein, da dies eine zu lange Methode anzeigt. Die Anzahl der Methodenanweisungen könnte jedoch eine angemessenere Messung sein.
Anzahl der zugänglichen lokalen Variablen
ist die Anzahl der zugänglichen lokalen Variablen für jede Anweisung einer Methode. Dies sollte nicht größer als 3 sein, da es die Auswahl erschwert, welche lokale Variable in einem Ausdruck verwendet werden soll.
Dichte der lokalen Variablennutzung
ist der Prozentsatz der Anweisungen, die auf eine lokale Variable zugreifen, im Gegensatz zu Anweisungen, auf die die lokale Variable zugreifbar ist. Niedrige Werte zeigen an, dass die Methode nicht sehr kohärent ist.
Kohärente Änderung von lokalen Variablen zählen
ist die Anzahl der Änderungen von lokalen Variablen innerhalb desselben Blocks. Dies bedeutet, dass mehr als eine lokale Variable zusammen gehört. Sie sollten also ein eigenes Objekt bilden und dadurch die Kohärenz erhöhen.
Sie können versuchen CppDepend und es ist CQLinq-Code-Abfragesprache, um einige globale Variablen zu erkennen, die nur von einer Methode oder vielleicht einer Klasse verwendet werden.
%Vor%Tags und Links java c# c++ metrics static-analysis