Nomen est Omen
Das Finden von passenden Namen ist eine zeitlose, am häufigsten verwendete und (wahrscheinlich) die wirkungsvollste Fähigkeit in der Softwareentwicklung. Passende Namen sind essenziell für leicht verständlichen Code: Der Code dokumentiert implizit und macht das (Weiter-)Entwickeln effizient.
Viele der angesehensten Bücher über Best Practices im Software-Engineering enthalten Kapitel über die Namensgebung, u.a.:
- Clean Code (Robert C. Martin) – «Variable Names»
- The Pragmatic Programmer (Andrew Hunt, Davis Thomas) – «Naming Things»
- Refactoring (Martin Fowler) – «Mysterious Name»
- Code Complete (Steve McConnell) – «Meaningful Names»
- The Practice of Programming (Brian W. Kernigham, Rob Pike) – «Names»
Namen steuern, wie Software-Ingenieure denken und miteinander kommunizieren. Das beeinflusst deren Produktivität und Zufriedenheit. Das wiederum prägt langfristig das ganze Team. Jedoch ist «Naming» keine leichte Aufgabe:
- Der Entwickler muss ein tiefes Verständnis über das Konzept (Domain) haben, an dem er arbeitet. Neue Konzepte sind oft nicht abschliessend definiert und ändern im Laufe der Zeit.
- Das Zielpublikum wechselt: Namen müssen oft von einem immer grösseren und vielfältigeren Publikum verstanden werden.
- Die Art und Weise, wie die Richtigkeit eines Namens beurteilt wird, ist subjektiv: Die Wahrscheinlichkeit, dass 2 Entwickler den gleichen Namen wählen, liegt zwischen 7 -18% (abhängig vom zu benennenden Objekt).
- Es ist schwierig, Namensgebung in eine automatische (statische) Code-Analyse zu integrieren.
Wichtige Kriterien für passende Namen sind:
- Verständlichkeit
o Beschreibt das Konzept
o Enthält Begriffe aus der (Problem-) Domäne
o Keine Abkürzungen
- Prägnanz
o Abstraktionslevel einhalten
o Enthalten keine Metainformationen, Implementationsdetails und Leerwörter
- Konsistent
o Genau 1 Name pro Konzept (Synonyme vermeiden)
o Allgemeine Namenskonventionen einhalten (ev. Styleguide)
o Konsistente Antonyme verwenden
- Unterscheidbarkeit
o Homographe und Homophone vermeiden
o Vermeiden von Begriffen, die mehrere Bedeutungen haben können (Polyseme)
o Vermeiden von Begriffen mit unterschiedlicher technischer und nichttechnischer Bedeutung (z.B. «class Class» => besser: «class Course»)
Durch die praktische Anwendung fundierter Kriterien ist es einfacher leicht verständliche Namen zu finden, was die Softwareentwicklung für alle effizienter und angenehmer gestaltet.
Quelle:
Naming Things. The Hardest Problem in Software Engineering (Tom Benner)
Thomas Bossardt, Senior Software Entwickler, INTEGRATE Informatik AG