3 Stimmen

Berechnen Sie die durchschnittliche Anzahl von Codezeilen pro Methode für Javascript

Gibt es Tools zur Berechnung der durchschnittliche Anzahl von Codezeilen pro Methode ?

Ich möchte die durchschnittliche Größe der einzelnen Methoden kennen, nicht nur die Gesamtzahl der Zeilen im Projekt. Anhand der Anzahl pro Methode kann ich messen, wie einfach jede Methode ist.

Dies wird als Teil des Erstellungsprozesses berechnet und in einem Dashboard angezeigt. Die Idee dahinter ist, dass wir sehen können, ob die durchschnittliche Größe der einzelnen Methoden zunimmt. Dies weist darauf hin, dass die Komplexität des Codes zunimmt und wir möglicherweise über ein Refactoring nachdenken müssen.

1 Stimmen

Seit wann sind "Codezeilen" ein Maßstab für die Codequalität?

0 Stimmen

Ich habe die Frage aktualisiert, um deutlicher zu machen, dass ich über die durchschnittliche Anzahl von Codezeilen pro Methode und nicht die Gesamtzahl der Zeilen.

0 Stimmen

Die Anzahl der Zeilen in einer Methode ist kein Maßstab für die Berechnung von Komplexität oder Codequalität. Im Gegenteil, derselbe Code kann mit weniger Codezeilen pro Methode zehnmal komplexer zu verstehen und zu befolgen sein. Die Anzahl der Zeilen in jeder Methode wird durch die Anforderungen an die Funktionalität bestimmt. Eine Aufteilung in kleinere Methoden ist nur dann erforderlich, wenn Sie Code gemeinsam nutzen/wiederverwenden wollen. Selten, wenn überhaupt, ist es hilfreich, auszudrücken, was der Code tut. Ich würde es vorziehen, Kommentare zu verwenden, anstatt Dinge aufzuteilen, die keinen wirklichen Sinn haben.

2voto

Marius Punkte 55729

Führen Sie eine rekursive "for(i in this)"-Suche durch Ihr Projekt durch, und wenn das Objekt (i) eine Funktion ist, rufen Sie "test.toString().split(" auf. \n ").length". Damit wird die Anzahl der Zeilenumbrüche in der Funktion gezählt. Wenn es sich nicht um eine Funktion, sondern um ein Objekt handelt, rufen Sie diese Funktion in diesem Objekt auf. Zählen Sie auch die Anzahl der gefundenen Funktionen und teilen Sie dann die Gesamtzahl der Zeilenumbrüche durch die Gesamtzahl der Funktionen, um den Durchschnitt zu erhalten.

bearbeiten

function calculateMethodSize(obj){
  var fcount = 0;
  var fsize = 0;
  for(i in obj){
    if(obj[i] instanceof Function){
      fcount++;
      fsize += obj[i].toString().split(";\n").length;
    }else if(obj[i] instanceof Object){
      var ret = calculateMethodSize(obj[i]);
      fcount += ret.fcount;
      fsize += ret.fsize;
    }
  }
  return {fsize:fsize, fcount:fcount};
}
var data = calculateMethodSize(this);
var average = data.fsize / data.fcount;

Seien Sie jedoch vorsichtig bei der Ausführung dieses Codes. Wenn Sie ihn so ausführen, wie ich es getan habe, kann es zu einem Stapelüberlauf kommen (bei mir war es so).

0 Stimmen

Das klingt nach einem interessanten Ansatz. Können Sie klären, wie die "for(i in this)"-Suche funktionieren würde?

0 Stimmen

Mir gefällt die Idee dieses Ansatzes, da ich den Code nicht selbst parsen muss. Leider funktioniert es nicht mit der Art, wie ich Objekte deklariere: var obj = function() { this.method = function(a) { return a + 1; } }

1voto

Kurz, schnell und schmutzig: grep für ";", zählen Sie die Anzahl der Zeilen, dies wird Ihnen eine Schätzung der Anzahl der Anweisungen geben.

1 Stimmen

Das ist ziemlich schmutzig, ich benutze keine Semikolons in JS überhaupt (gut, außer für for() Schleifen :))

0 Stimmen

Ja, ja. Das hängt von Ihrem Stil ab. Alternativ können Sie auch nach " \n ". Aber auch hier ist die Fehleranfälligkeit groß.

0voto

PhiLho Punkte 39496

Ich bin mir nicht sicher, ob es das tut, aber auf der Suche nach Ihrem vorherigen Beitrag, was zyklomatische Komplexität ist, ging ich auf die entsprechende Wikipedia-Seite, die auf Code-Analysator . Dort heißt es:

Bei der Zählung für HTML- oder JSP-Dateien werden LoC korrekt gezählt für javascript- und vbscript-Code, der in den <script>-Tag eingebettet ist.

Ich weiß nicht, ob diese Zählung pro Methode durchgeführt wird, aber es könnte sich lohnen, einen Blick darauf zu werfen (es ist ein kostenloses Tool).

0voto

EndangeredMassa Punkte 16782

Definieren Sie Zeilen entweder als " \n " oder ";",

Sie könnten einen einfachen Algorithmus wie den folgenden ausprobieren:

FOR each line in a javascript file (or chunk of text)
    IF the line starts with "function " THEN
        PUSH the first left-curly brace you find onto a stack
        WHILE the stack is non-empty
            PUSH any left-curly braces in the current line
            POP any left-curly braces when you encounter a right-curly brace
            Increment your line-count by 1
            Increment your line counter (as mentioned in the FOR loop above)
        END WHILE
        Store your total lines for this function            
     ELSE
         //ignore the line because it's probably a global var or blank
     END IF
END FOR

Mir ist kein Tool bekannt, das dies automatisch tun kann. Aber es würde Spaß machen, zu versuchen, es selbst zu machen.

0voto

just somebody Punkte 17584

Wahrscheinlich möchten Sie auch andere Metriken einbeziehen, egal wie Sie die Zeilen zählen, stellen Sie nur sicher, dass es nicht angesichts von Funktionen, die ohne das Schlüsselwort "function" oder geschweifte Klammern definiert sind, abbricht. ein reales Beispiel:

var negate = bind1st(compose, not);

(hier ist negate eine Funktion, die aus den Funktionen bind1st, compose und not aufgebaut ist)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X