Parallel Code Smells: Eine Hitparade

Code Smells sind vor allem in der objektorientierten Programmierung als verdächtige Stellen bekannt, die auf Designfehler hinweisen. Das Konzept hilft auch bei der Fehlersuche in nebenläufigen Programmen.

vorlesen Druckansicht 12 Kommentare lesen
Parallel Code Smells: Eine Hitparade
Lesezeit: 22 Min.
Von
  • Luc Bläser
Inhaltsverzeichnis

Code Smells sind ein verbreitetes Schlagwort im Software Engineering. Es charakterisiert Symptome im Programmcode, die auf tieferliegende Designfehler hinweisen. Sinnbildlich – oder genauer sinngeruchlich – steht es für üble Codestellen, die es aufzuspüren und zu bereinigen gilt. Ursprünglich wurde der Begriff von Kent Beck 1990 etabliert und verschiedentlich weiter geprägt, unter anderem von Martin Fowler [1] und in diversen Code-Qualität-Büchern [2, 3].

Gegen viele, aber längst nicht alle Code Smells lassen sich rezeptartige Kuren definieren – meist als Refactorings, deren Zweck die Restrukturierung des Codes ohne Veränderung seines Verhaltens ist. Bisher lag der Fokus der Code Smells jedoch auf sequentiellen objektorientierten Programmen. Prominente Vertreter davon sind Riesenklassen, zu viele Parameter, Downcasts und einige andere mehr.

Dieser Artikel möchte den Code-Smell-Ansatz dagegen neu auf parallele und nebenläufige Programme anwenden. Konkret betrachtet er Multi-Threading mit seinen verschiedenen darüber liegenden Abstraktionen in gängigen Programmiersprachen. Im Folgenden sind die Code-Beispiele anhand von .NET C# illustriert. Sie können aber genauso in nahezu beliebige andere Sprachen wie Java und C++ übertragen werden.

Gerade in der nebenläufigen und parallelen Programmierung sind potenzielle Fehler oft gravierender, weil sie nichtdeterministisch sein können. Sie können nur sporadisch und nichtreproduzierbar auftreten, was das Aufspüren mit Tests schwierig bis unmöglich macht. Demnach ist jedes nützliche analytische Mittel recht – und das Erkennen paralleler Code Smells könnte eins davon sein, auch wenn es keine flächendeckende Problemlösung ist.

Aus Industrieprojekten und Code Reviews der letzten fünf Jahre ist beim Autor eine persönliche Sammlung paralleler Code Smells entstanden. Natürlich ist sie eine subjektive Einschätzung mit Spielraum für Kontroverse. Dieser Text ist somit als Anstoß für eine hoffentlich nützliche Code- und Designdiskussion gedacht. Nachfolgend wird die Top-10-Liste der Parallel Code Smells vorgestellt und erläutert.