15.02.2013 Aufrufe

b2aat6n

b2aat6n

b2aat6n

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!