The Blog

Assert(Lesbarkeit und Verständlichkeit)

Was ist besser, “Assert.That(foo.Bar, Is.EqualTo(„bla“)“ oder Foo.Bar.Should.Be.EqualTo(„bla“)? Handelt es sich um eine Geschmacksfrage oder gibt es eine herleitbare Antwort? Was bedeutet besser überhaupt? Schneller zu lesen? Schneller zu schreiben? Hier zumindest hoffe ich auf Konsens: Lesbarkeit und Verständlichkeit von Software sind, wenn es um Syntax geht, entscheidend. Unverständliche Software steht für teure Wartung und schlechte Evolvierbarkeit. Die Frage nach dem Besser ist also in diesem Fall die Frage nach dem schneller-zu-erfassen.

Leider ist hier eine logische Argumentation de facto am Ende: Denn was schneller zu erfassen ist, ist ohne Studie eine subjektive Einschätzung, die beeinflusst ist von Prägung und ästhetischem Empfinden. Nun fehlen subjektiven Einschätzungen nicht die Argumente, zählen wir sie auf:

Pro Assert.That():

  • Assert.That stellt das wichtigste voran u. ist damit schneller zu erfassen. Das “wichtigste zuerst” ist in jedem beschreibenden und auf Verständlichkeit ausgelegten Schreibstil eine Grundregel.
  • Assert.That ist ein visueller Anker.
  • Bei Verwendung von Extensions Methods muss erst „weit“ gelesen werden bis klar wird, dass es sich um eine Assertion handelt.

Con Assert.That():

  • Assert.That erzeugt visuelles Rauschen und bindet Aufmerksamkeit
  • Schon aus der Struktur des Quelltexts sollte klar ersichtlich sein, dass es sich um eine Assertion handelt.
  • Assert.That verlangsamt die Lesegeschwindigkeit, da es immer erst weggefiltert werden muss.

Wichtig zu bemerken: Verwendet man Mspec, verliert Assert.That seinen (behaupteten) Mehrwert, da die Assertion deutlich durch die Struktur angezeigt wird: Aber nicht jeder verwendet Mspec und wer als Mspec Nutzer argumentiert, sollte sich dessen bewusst sein.

Selbst wenn die Wissenschaft (vermutlich die Wahrnehmungspsychologie) herausfände, das eine sei besser als das andere, müssten wir dann gegen unsere Geschmack entscheiden? Nein! Denn Wissenschaft ist erschreckend fehlbar und relativ, und seinem Geschmack zu folgen, ist wichtiger als Mikrooptimierung. Ob Assert.That oder ExtensionMethod kann selbst im Team ausnahmsweise eine Konvention sein, die jeder für sich individuell entscheiden kann, denn nicht einmal hier lohnt die Konsistenz.

P.s: Ein dritte alternative sind Extension Methods in Verwendung mit Assert.That, beispielsweise: Assert.That(foo.Bar.IsEqualTo(„bla“)).

11 Awesome Comments So Far

Don't be a stranger, join the discussion by leaving your own comment