Wikipedia · einfach zusammengefasst · Stand
Lines of Code
Üblicherweise rechnet man mit einer Produktivität – inklusive aller Projekttätigkeiten – von 10 bis 50 Codezeilen je Mitarbeiter und Tag. Ein …
Inhalt4 Abschnitte
Bedeutung der Kennzahl
Lines of Code (LOC; englisch für Code-Zeilen, auch source lines of code, SLOC) ist eine Softwaremetrik. Sie beschreibt die Größe einer Codebasis eines Computerprogramms oder deren Wachstum. Im einfachsten Fall werden alle Zeilen des Quelltextes gezählt.
LOC ist jedoch kein direktes Maß für die Effizienz von Programmierern. Die Zeilenzahl hängt unter anderem von Architektur, Erfahrung, gewählter Lösung, Formatierung und Programmiersprache ab. Nach der 80/20-Regel werden 80 % der Zeilen in 20 % der Zeit geschrieben; gründliches Testen kann dagegen viel Zeit beanspruchen, obwohl nur wenige Zeilen geändert oder ergänzt werden.
Als Produktivität einschließlich aller Projekttätigkeiten werden üblicherweise 10 bis 50 Codezeilen je Mitarbeiter und Tag angesetzt. Ein Projekt mit 1.000 Personentagen Aufwand, etwa 5 Personenjahre, sollte demnach 10.000 bis 50.000 LOC erzeugen.
Arten der Zeilenzählung
Die verschiedenen Zählweisen liefern für denselben Java-Quelltext unterschiedliche Werte:
- LOC oder physische Lines of Code: alle Zeilen einschließlich Leerzeilen und Kommentare; im Beispiel 7.
- SLOC: Codezeilen ohne Leerzeilen und Kommentare; im Beispiel 5.
- CLOC: Kommentarzeilen. Ob Zeilen mit sowohl Code als auch Kommentar mitzählen, ist nicht festgelegt; im Beispiel daher 1 oder 2.
- NCLOC, auch NCSL oder ELOC: Codezeilen ohne Leerzeilen, Kommentare sowie Header und Footer. Dazu zählen insbesondere äußere öffnende und schließende Klammern; auf Klassenebene außerdem Import-/Include-Statements, auf Methodenebene Methodendeklarationen. Das Beispiel hat 3 NCLOC auf Methodenebene und 5 auf Klassenebene.
- LLOC, auch Number of Statements (NOS): Anzahl der Anweisungen. Diese Größe wird beispielsweise bei COCOMO verwendet. Das Beispiel enthält 2 LLOC; in C gelten die Instruktionen einer for-Schleife als eigene Anweisungen, daher wären es 4 LLOC.
Aussagekraft und Einsatz
LOC-Vergleiche betrachten meist nur Größenordnungen: Programme reichen von wenigen Dutzend bis zu hunderten Millionen Zeilen. Die Zeilenzahl erlaubt nicht zwingend Rückschlüsse auf Komplexität, Funktionalität oder investierte Arbeitszeit. Externe Frameworks und Programmbibliotheken, Programmiersprache und Formatierung beeinflussen sie stark.
Auch LLOC beseitigt dieses Problem nicht vollständig, weil sich Bedeutung und Komplexität einer Anweisung je nach Sprache unterscheiden. Ein mehrere Bildschirmseiten langer Assembler-Quelltext kann letztlich dasselbe Programm enthalten wie einige wenige Zeilen einer höheren Programmiersprache.
Das Java-Beispiel lässt sich bei gleicher Programmbedeutung auf 4 physische LOC und 3 SLOC zusammenziehen; es hat dann je nach Berechnung 1 oder 2 CLOC, 1 NCLOC auf Methodenebene und weiterhin 2 LLOC. Die Verringerung der Zeilen reduziert aber die Lesbarkeit, erhöht damit die Komplexität und kann die Produktivität negativ beeinflussen. Weniger Codezeilen können also höhere Aufwände verursachen.
LOC dient außerdem zur Berechnung der Fehlerdichte. Je nach Einsatzzweck darf eine bestimmte Zahl von Programmfehlern nicht überschritten werden, etwa maximal 0,5 Fehler je KLOC, wobei Kilo 1000 LOC bedeutet, in militärischen oder Krankenhaussystemen.
Beispiele für Programmgrößen
Die Tabelle zeigt SLOC in Millionen und macht große Unterschiede zwischen Systemen sichtbar. Beim Linux-Kernel stieg die Zahl von weniger als 0,2 Mio. für Linux-Kernel 1.0 (1994, nur i386) über 8,1 Mio. für Linux-Kernel 2.6.0 (2003) auf 25,3 Mio. für Linux-Kernel 4.15 (2018). Der Multics-Kernel hatte 1983 0,25 Mio. SLOC; XNU 792.x hatte 2005 2 Mio.
Bei kompletten Betriebssystemen werden beispielsweise FreeBSD mit 8,8 Mio. und OpenSolaris mit 9,7 Mio. genannt. Windows NT 3.1 hatte 1993 4–5 Mio., Windows XP 2001 40 Mio. und Windows Server 2003 50 Mio. SLOC. Debian GNU/Linux wuchs von 55–59 Mio. bei Version 2.2 (2000) auf 324 Mio. bei Version 5.0 (2009).
Andere genannte Programme sind Lotus 1-2-3 1.0 mit 0,02 Mio. SLOC (1983), SAP NetWeaver 2007 mit 238 Mio., Mozilla Firefox mit 22,3 Mio. (2020) und Chromium als Basis für Google Chrome mit 34,9 Mio. (2020).