b2aat6n
b2aat6n
b2aat6n
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Windows-Dienste implementieren<br />
So beherrschen Sie den Dienst<br />
Ein Windows-Dienst ist eng in die Infrastruktur des Betriebssystems integriert.<br />
Das erschwert automatisierte Tests.Wenn Sie den eigentlichen Kern des Dienstes unabhängig von<br />
der Infrastruktur halten, ist er dennoch für automatisierte Tests zugänglich.<br />
In der Aufgabenstellung zu dieser<br />
Übung habe ich auf zwei Risiken<br />
hingewiesen, die bei Infrastrukturprojekten<br />
oftmals auftreten. Zum<br />
einen bergen sie das Risiko, den Aspekt der<br />
Wiederverwendbarkeit zu stark zu berücksichtigen.<br />
Zum anderen ist die Versuchung<br />
groß, „von unten nach oben“ zu entwickeln.<br />
Beides führt in der Tendenz dazu,<br />
dass man zu viel tut. Nun mögen Sie sich<br />
vielleicht fragen, was denn so schlimm daran<br />
ist, mehr zu tun als gefordert. Sicher, es<br />
wäre schlimmer, weniger zu tun als gefordert.<br />
Jedoch wird beim „mehr tun“ Aufwand<br />
getrieben, den am Ende niemand<br />
bezahlen möchte. Möglicherweise wird sogar<br />
der geplante Termin nicht gehalten,<br />
weil unterwegs hier und da noch zusätzliche<br />
„Schmankerl“ eingebaut wurden. Aus<br />
diesem Grund sollten Anforderungen möglichst<br />
exakt umgesetzt werden.<br />
Und damit sind wir bei einem weiteren<br />
Knackpunkt: Was sind denn eigentlich die<br />
Anforderungen? Solange die nicht klar sind,<br />
kann ein Entwickler bei der Implementierung<br />
eigentlich nur falschliegen. Folglich<br />
sollte er so oft wie nötig nachfragen, um<br />
unklare Anforderungen zu präzisieren.<br />
Nun stand ich Ihnen während der Übung<br />
nicht als Kunde unmittelbar zur Verfügung,<br />
aber in der Aufgabenstellung war ein Feature<br />
explizit als „denkbare Erweiterung“<br />
aufgeführt, nämlich das Starten und Stoppen<br />
des Windows-Dienstes. Folglich sollte<br />
die Implementierung so voranschreiten,<br />
dass dieses Feature nicht sofort von Anfang<br />
an umgesetzt wird. Andererseits darf es<br />
auch nicht aufwendiger sein, das Feature<br />
nachträglich zu ergänzen, statt es von vornherein<br />
vorzusehen. Hilfreich ist es deshalb,<br />
die möglichen Features zunächst zu sammeln.<br />
Dann können Kunde und Entwickler<br />
die Features priorisieren und in der „richtigen“<br />
Reihenfolge abarbeiten.<br />
Beim Sammeln von Features muss eine<br />
Kundensicht eingenommen werden. Alle<br />
Features sollen dem Kunden Nutzen bringen.<br />
Am Ende muss schließlich der Kunde<br />
das Feature als „fertig“ akzeptieren und ab-<br />
nehmen. Das ist nur möglich, wenn das<br />
Feature für den Kunden tatsächlich relevant<br />
ist. Ein Feature wie etwa „Das Programm<br />
von 32 Bit auf 64 Bit umstellen“<br />
spiegelt nicht den unmittelbaren Kundennutzen<br />
wider. Lautet das Feature jedoch<br />
„Das Programm kann mit sehr großen Datenmengen<br />
umgehen“, liegt der Fokus auf<br />
dem Kundennutzen statt auf einem technischen<br />
Detail.<br />
Featureliste<br />
Für die Aufgabenstellung„Windows-Dienst“<br />
könnten die Features wie folgt aussehen:<br />
z F1: Ein Windows-Dienst kann installiert<br />
und deinstalliert werden.<br />
z F2: Der Windows-Dienst kann auch als<br />
Konsolenanwendung gestartet werden,<br />
ohne dass man ihn vorher als Dienst installieren<br />
muss.<br />
z F3: Der Windows-Dienst kann gestartet<br />
und gestoppt werden.<br />
Abnahmekriterien<br />
Um die Anforderungen zu präzisieren, sollten<br />
Abnahmekriterien definiert werden.<br />
Dadurch weiß der Entwickler, wann er mit<br />
der Arbeit fertig ist − eben dann, wenn alle<br />
Abnahmekriterien erfüllt sind. Die Abnahmekriterien<br />
für Feature F1 lauten:<br />
z Wenn der Dienst mit myservice.exe /install<br />
installiert wird, ist er unter Systemsteuerung/Services<br />
sichtbar.<br />
z Der Dienst kann nach der Installation<br />
über Systemsteuerung/Services oder net<br />
start myservice gestartet werden (und<br />
natürlich auch gestoppt werden).<br />
z Wenn der Dienst mit myservice.exe/uninstall<br />
deinstalliert wird, taucht er unter<br />
Systemsteuerung/Services nicht mehr auf.<br />
Spätestens an dieser Stelle beschleicht<br />
mich der Verdacht, dass hier mit automatisierten<br />
Tests nicht viel auszurichten ist. Am<br />
Ende hilft es nichts, der Dienst muss mit<br />
dem Betriebssystem korrekt zusammenarbeiten.<br />
Das lässt sich nur durch einen Integrationstest<br />
wirklich sicherstellen. Das bedeutet<br />
nun nicht, dass wir gar keine auto-<br />
matisierten Tests sehen werden, aber es<br />
werden wenige sein.<br />
Entwurf<br />
LÖSUNG<br />
Für Feature F1 kann nun eine Architektur<br />
entworfen werden. Dabei ist einerseits zu<br />
berücksichtigen, dass möglicherweise nicht<br />
alle Features sofort implementiert werden.<br />
Ein Feature wird nach dem anderen implementiert,<br />
niedrig priorisierte möglicherweise<br />
gar nicht. Wird ein Feature nach dem<br />
anderen implementiert, bietet das für den<br />
Kunden sehr viel Flexibilität: Er kann die<br />
Priorisierung von Features jederzeit ändern.<br />
Und er kann Features streichen oder auch<br />
neue hinzunehmen. Logischerweise gilt dies<br />
nicht für Features, die bereits in Arbeit sind.<br />
Aber alle noch nicht begonnenen Features<br />
stehen zur Disposition. Folglich sollte ein<br />
Architekturentwurf nur die Features im<br />
Detail berücksichtigen, die konkret zur Implementierung<br />
anstehen. Da weitere mögliche<br />
Features schon bekannt sind, kann<br />
und sollte man diese beim Architekturentwurf<br />
im Blick behalten. Diese Features sollten<br />
jedoch keinen nennenswerten Einfluss<br />
auf die Architektur nehmen, denn es droht<br />
jederzeit das Risiko, dass sie doch nicht benötigt<br />
werden. Gefragt ist also ein Blick über<br />
den Tellerrand der anstehenden Features,<br />
ohne dass man dabei gleich zu viel tut. Orientierung<br />
liefert die Fokussierung auf den<br />
Kundennutzen. Für den Kunden ist es weitaus<br />
angenehmer, das wichtigste Feature<br />
einsatzbereit geliefert zu bekommen, als<br />
viele unvollendete Features, die nicht einsatzbereit<br />
sind.<br />
Um einen möglichst flexiblen Architekturentwurf<br />
zu erreichen, müssen die beteiligten<br />
Funktionseinheiten lose gekoppelt<br />
sein. So ist die Wahrscheinlichkeit groß,<br />
dass zusätzliche Features leicht integriert<br />
werden können. Es liegt also auf der Hand,<br />
hier Event-Based Components (EBC) zu<br />
verwenden. Doch bevor es so weit ist, müssen<br />
die Anforderungen weiter präzisiert<br />
werden, denn noch ist nicht klar, wie die<br />
geforderte Dienstinfrastruktur eingesetzt<br />
werden soll.<br />
www.dotnetpro.de dotnetpro.dojos.2011 45