Sollte ich mich Sorgen machen, wenn mein LOC / Tag-Verhältnis zu hoch ist? [geschlossen]

9

Ich arbeite derzeit an einem Indie-Projekt, daher habe ich nicht den Luxus, während menschlicher Tests oder externer Codeüberprüfungen zu arbeiten. Ich sehe jedoch keine schwierigen Fehler in meinem aktuellen Code (ich behebe sie so, wie ich sie sehe und meistens handelt es sich nur um falsche Feldnamen und dergleichen (Dinge, die Sie in ein oder zwei Minuten beheben), und ich teste sie, nachdem ich eine Funktion implementiert habe, bevor ich sie weitergebe. In letzter Zeit war meine LOC-Nummer ungefähr 400 pro Tag (für die Aufzeichnung ist es C #), und ich implementiere nicht nur neue Systeme, sondern schreibe auch Dinge neu, die ich bereits geschrieben habe, und behebe einige Fehler.

Sollte ich gestört werden? Ist es das Zeichen, dass ich anhalten und den gesamten Code, den ich bis zu diesem Datum geschrieben habe, überprüfen und umgestalten muss?

Max Yankov
quelle
Wie messen Sie den LOC? Schließt es von Visual Studio generierten Code aus oder nicht?
jk.
Mit diesem Bash-Befehl in meinem Codeordner: (finde ./ -name '* .cs' -print0 | xargs -0 cat) | wc -l
Max Yankov
Richtig, so dass wahrscheinlich generierter Code enthalten ist, z. B. designer.cs - Ich würde mir keine Sorgen um die Anzahl der Zeilen machen, die Sie schreiben
jk.
Im Allgemeinen ja, aber in dieser speziellen Umgebung (Unity Game Engine) ist dies nicht der Fall.
Max Yankov
1
Ich versuche , so viele Codezeilen wie möglich zu entfernen, bevor ich weitere hinzufüge. Die Arbeit an einem Minimalsystem ist so viel angenehmer als die Alternative.
Jon Purdy

Antworten:

18

LOC ist wahrscheinlich eine der am häufigsten missbrauchten Metriken und daher wahrscheinlich eine der nutzloseren Messungen der Codequalität und eine noch nutzlosere Messung des Programmieraufwands.

Ja, das ist eine kühne Aussage für mich, und nein, ich kann Sie nicht auf Studien verweisen, die meinen Standpunkt belegen. Ich kann jedoch mit hart erarbeiteter Erfahrung feststellen, dass Sie sich wahrscheinlich Sorgen über die falschen Probleme machen, wenn Sie sich Gedanken darüber machen, wie viel Code Sie geschrieben haben.

Sie müssen sich zunächst fragen, was Sie messen oder beweisen möchten und ob dieser Beweis nur aus Interesse ist oder um eine umfassendere Qualitätsverbesserung zu unterstützen, und wo Sie diese Informationen verwenden müssen, um ein Buy-In von Ihrem Team zu erhalten / Management, etwas dagegen zu tun.

Eines der Dinge, für die ich LOC benutze, ist eine Art Überprüfung der geistigen Gesundheit. Wenn ich viel Code schreibe, interessiere ich mich mehr für LOC pro Methode oder LOC pro Klasse als für LOC insgesamt. Diese Messungen könnten Indikatoren sein , dass Sie weiter haben Refactoring zu tun , wenn Sie ein wenig OCD über sich fühlen , wie gut einkalkuliert Code sein sollte. Sehr große Klassen müssen möglicherweise in einige kleinere Klassen umgestaltet werden, und lange mehrzeilige Methoden müssen möglicherweise in mehrere Methoden oder andere Klassen unterteilt werden oder weisen sogar auf eine Wiederholung hin, die entfernt werden könnte. Beachten Sie, dass ich dort mehrmals das Wort "könnte" verwendet habe.

Die Realität ist, dass LOC nur einen möglichen Indikator bietet und keine wirkliche Garantie dafür, dass sich Ihr Code möglicherweise ändern muss. Die eigentliche Frage ist, ob sich der Code wie erforderlich und wie erwartet verhält. Wenn ja, ist Ihre nächste Frage, ob Sie den Code problemlos warten können oder nicht und ob Sie jetzt oder in Zukunft Zeit haben, Änderungen am Arbeitscode vorzunehmen, um Ihren Wartungsaufwand in Zukunft zu verringern.

Oft bedeutet viel Code, dass Sie später mehr warten müssen, aber manchmal kann sich sogar gut faktorisierter Code auf Hunderte von Codezeilen erstrecken, und ja, manchmal schreiben Sie Hunderte von Codezeilen pro Tag. Die Erfahrung zeigt mir jedoch, dass bei einer täglichen Ausgabe von Hunderten von Zeilen neuen Codes häufig das Risiko besteht, dass ein Großteil des Codes unangemessen von einer anderen Stelle ausgeschnitten und eingefügt wurde, und dass dies an sich auf Probleme mit hinweisen kann Vervielfältigung und Wartung, aber auch dies ist keine Garantie. Daher verlasse ich mich in der Regel auf meine Erfahrungen und Instinkte, die darauf beruhen, wie die anstehenden Aufgaben erledigt wurden.

Der beste Weg, um das Dilemma zu vermeiden, das IMHO in Ihrer Frage auftaucht, besteht darin, LOC zu vergessen und die ganze Zeit umzugestalten. Schreiben Sie zuerst Ihren Codetest, implementieren Sie, um fehlzuschlagen, refactor, um zu bestehen, und sehen Sie dann, was dort möglicherweise refactoriert wird, und verbessern Sie dann den Code. Sie verlassen die Aufgabe mit dem Wissen, dass Sie Ihre Arbeit bereits überprüft haben, und Sie werden nicht so besorgt sein, sich in Zukunft selbst zu erraten. Wenn Sie einen Test-First-Ansatz verwenden, wie ich ihn beschrieben habe, bedeutet jede LOC / Tag-Messung an Ihrem fertigen Code realistisch gesehen, dass Sie das 3-5-fache der gemessenen Menge geschrieben haben, wobei dieser Aufwand durch Ihr laufendes Refactoring erfolgreich verborgen wird Bemühungen.

S.Robins
quelle
1
+1 400 Zeilen pro Tag könnten ein Hinweis auf ein Problem sein. Leider denke ich, dass der einzige Weg, dies herauszufinden, die Codeüberprüfung ist, die für ein 1-Mann-Team schwierig ist
jk.
Vielen Dank für eine so ausführliche Antwort :) Ich denke, sie deckt das Thema vollständig ab.
Max Yankov
@jk. Ich glaube, ich spreche Ihren Kommentar im Rahmen meiner Antwort an. Wenn Sie alleine sind, können Sie Ihre Codequalität am besten schützen, indem Sie sich darauf konzentrieren, wie Sie Ihren Code schreiben und testen. Eine gute Reihe von Tests in Verbindung mit einer kontinuierlichen Refactoring-Mentalität kann in vielerlei Hinsicht so gut sein wie eine Codeüberprüfung. Beachten Sie, dass ich nicht auf Überprüfungen verzichten möchte, sondern dass sie zweitrangig sein sollten, um sicherzustellen, dass Ihr Produkt die Anforderungen erfüllt und eine gute Testabdeckung aufweist, sodass zukünftige Änderungen mit Zuversicht vorgenommen werden können. Meine erste Frage während der Codeüberprüfung lautet immer "Wo ist der Test dafür?" :-)
S.Robins
+1 Obwohl Sie nicht auf Studien verweisen können, die zeigen, dass LOC eine schlechte Metrik ist, ist es einfach, Studien zu finden, bei denen Probleme aufgetreten sind, weil sie LOC als Metrik verwendet haben.
Daramarak
Stimmen Sie voll und ganz zu, dass LOC eine nutzlose Metrik ist. An manchen Tagen schreibe ich Hunderte von Codezeilen und es ist in Ordnung. An manchen Tagen netto ich Null. An manchen Tagen entferne ich nur den Code. :-)
Brian Knoblauch
5

Überhaupt nicht - an manchen Tagen beheben Sie einen schwer zu findenden Fehler und ändern nur eine Zeile. An anderen Tagen fügen Sie neuen Code hinzu und schreiben mehrere tausend Zeilen.

Das tägliche LOC sagt Ihnen nichts, außer dass die Aufgaben für diesen Tag mit 400 Codezeilen erledigt werden könnten.

Tom Clarkson
quelle
2

Bei einigen dieser Antworten fehlt der Punkt, Sie verwenden LOC nicht als Maß für die Produktivität (wenn Sie es wären, würden Sie sich keine Sorgen darüber machen, zu "produktiv" zu sein). Was Sie tatsächlich tun, ist die Sorge um Ihre Codequalität, weil Code ist der Feind , über den man sich Sorgen machen muss.

Leider ist die einzige Möglichkeit, Informationen über die Codequalität zu erhalten, die Codeüberprüfung. Da Sie ein Ein-Mann-Team sind, ist dies schwierig, selbst wenn Sie aufgehört haben, Ihren Code zu überprüfen (und Sie möchten nicht wirklich aufhören, oder?) Eigener Code enthüllt nicht so viel wie ein Peer, der Ihren Code überprüft. Ich würde vorschlagen, dass Sie versuchen, jemanden zu veranlassen, zumindest einen Teil Ihres Codes zu überprüfen, damit Sie feststellen können, ob Ihr 400 LOC / Tag Kauderwelsch produziert oder nicht. Auch eine unabhängige Überprüfung des Tagescodes wird hier helfen

jk.
quelle
1

Sie sollten sich nicht mit der Anzahl der LOCs beschäftigen, die Sie pro Tag produzieren.

Aber Sie sollten sich Sorgen machen:

  • Wenn Ihr Code nicht getestet wurde (wenn Sie beispielsweise keine Komponententests haben)
  • Wenn Sie Probleme haben, neue Funktionen hinzuzufügen oder implementierte Funktionen zu ändern (dies bedeutet, dass Ihr Refactoring nicht korrekt war).
  • Wenn Ihre Erfahrung nicht groß ist und Ihr Code nicht überprüft wird (zusätzliche Augenpaare können Probleme erkennen).
BЈовић
quelle
0

LOC ist ein "offizielles" Maß für die Produktivität, aber Argumente gegen seinen Wert können langwierig sein (Ein ORM kann jedoch in 3 Minuten 50.000 Codezeilen generieren, wenn das Datenbankdesign falsch ist, wird der gesamte Code möglicherweise in den Papierkorb verschoben).

Ich schlage vor, Sie messen Ihren Fortschritt, indem Sie% erledigte Aufgabe gegen Zeit vs.% geplante Aufgaben verfolgen. Darauf kommt es an. Kunden zahlen für Arbeitscode, der Geschäftswert bietet, nicht für die LOCs.

Einige Referenzen zu LOC

Keine Chance
quelle
aber er verwendet LOC nicht als Produktivitätsmaß
jk.
Ja, aber wie gesagt, es ist kein genaues Maß. Das Gleiche gilt, wenn Sie einen "Durchschnittswert von 1.2100" verwenden, erhalten Sie einen Durchschnitt, der jedoch voreingenommen und nicht genau ist. Mit LOC wird es schlimmer, weil jede Entwicklungsumgebung und jeder Satz von Tools unterschiedliche Produktivitätszahlen widerspiegeln kann. Beispielsweise können LOCs nicht die Komplexität des Codes vergleichen, sondern nur seine Länge. Ich habe den ursprünglichen Beitrag mit 2 Referenzen geändert, die Sie möglicherweise sehen möchten.
NoChance
0

Messen Sie auch die Anzahl der Code-Duplikate ?

Wenn die hohe Ausgabe darauf zurückzuführen ist, dass Sie viel Kopieren und Einfügen in Ihrem Code haben, sollten Sie sich Sorgen machen.

Grund: Falls in Ihrer Copy & Paste-Quelle ein Fehler aufgetreten ist, ist es schwierig und fehleranfällig, alle Verwendungen des Copy & Paste zu korrigieren

k3b
quelle
-1

Wenn Sie an schönen Funktionscode glauben, sollte dies Ihre einzige Maßnahme sein

"Fließt es? Sieht es schön aus?"

Dunkle Nacht
quelle
3
die einzige Maßnahme? Wie funktioniert es? ist es schnell genug
jk.
Deshalb habe ich gesagt, funktional :)
Darknight