Urban Myths: ASSERT und VERIFY
Aus aktuellem Anlaß schreibe ich jetzt was über ASSERT und VERIFY. Zwei Ereignisse in den vergangenen beiden Tagen in meinem näheren Dunstkreis bei επτ€σ veranlassen mich hierzu. Das erste war gestern, als ein Kollege zu mir kommt und erzählt, ein anderer Kollege hätte zum wiederholten Mal so etwas eingecheckt:
ASSERT(DoSomethingReallyImportant());
und die Tester hätten das Feature "SomethingReallyImportant" nicht abnehmen können, weil es schlicht nicht vorhanden war. Dann mußte ich heute früh stutzen, weil ein dritter Kollege bei einem von mir geforderten Bugfix genau dasselbe Pattern eingecheckt hatte. Als er dann in Mission Control einlief, verkündete er dann auch noch im Brustton der Überzeugung: "Ich baue an dieser Stelle keinen VERIFY statt dem ASSERT ein, weil ich auf keinen Fall will, daß dann diese MessageBox bei unseren Kunden auftaucht, wenn der Code versagt!".
Gak!
Diese Beispiele zeigen mir, daß offenbar unter einem Teil der Kollegen leichte Verwirrung darüber herrscht, was ASSERT und VERIFY tun, und bevor dadurch noch mehr Schaden entsteht (und weil ich weiß daß dieser Blog zumindest von einem Teil meiner Entwicklerkollegen aufmerksam verfolgt wird), hier ein paar hard facts:
- ASSERT und VERIFY zeigen niemals in einem Releasebuild (also beim Kunden) eine MessageBox an.
- Der Inhalt von VERIFY wird im Releasebuild immer ausgeführt, nur der Boolsche Ausdruck den das Argument von VERIFY darstellt, wird nicht evaluiert.
- Der Code der Teil des boolschen Ausdrucks ist, den das Argument von ASSERT darstellt, wird im Releasebuild eliminiert. Man sollte da also niemals lebenswichtige Funktionalität oder Funktionalität mit Seiteneffekten drin haben.
- ASSERT und VERIFY gehören zu den schärfsten Waffen, die wir als Entwickler haben, wer sie nicht einsetzt, sollte seine Ignoranz in dieser Hinsicht schleunigst und grundlegend überdenken.
Trackback address for this post
No feedback yet
Comments are closed for this post.