Test Driven Development mit .NET und C#–Tipp #2: Abhängigkeiten auflösen mit Stubs

19. Oktober 2011 20:45

Das Testen von Code ist eine wichtige und – für Entwickler – richtig coole Angelegenheit. Doch Testen ist weitaus mehr, als ein Testrunner und ein paar Attribute für Klassen und Methoden. In der Reihe “TDD Tipps” versuche ich regelmäßig Probleme zu erläutern, die beim Testen auftauchen und mit einem praktischen Hinweis einen Lösungsweg aufzuzeigen.

Unit-Tests sollen das Verhalten von nur einem einzigen Modul, für uns in diesem Fall einer Klasse, testen. Aber warum? Nehmen wir an wir testen die Methode Foo() in einer Klasse A die eine Referenz auf eine Klasse B hat. Im Laufe der Methode Foo() aus Klasse A wird die Methode Bar() aus Klasse B aufgerufen. Wenn wir jetzt A.Foo() testen, wird Code aus B.Bar() ausgeführt. Also ist das Ergebnis unseres Tests nicht mehr alleine von A, sondern auch von B abhängig und damit hängt auch der Testerfolg von A.Foo() von B.Bar() ab. Was hier noch nach einem einfachen Problem aussieht, wird spätestens zu einem Problem, wenn B eine externe Ressource nutzen würde, wie einen Webdienst, einen Mailserver, Datenbankserver o.ä. Aus dem und vielen anderen Gründen, sollte man in seinem Design immer so wenig Abhängigkeiten wie möglich haben. Was in der Theorie und in den zahlreichen Demos in Büchern und Konferenzen immer ganz einfach und simpel aussieht, gestaltet sich in der Praxis als teilweise sehr kompliziert. Wenn man ein Klassendesign entwirft, hat man an einigen Stellen zwangsläufig Abhängigkeiten.

Abbildung 1 verdeutlich das Problem noch einmal:

image

Abbildung 1: Klassendesign das getestet werden soll.

Würden wir nun einen Test für die Methode Foo() ) der Klasse A schreiben und dort ein Objekt der Klasse A instanziieren, würde dieses automatisch ein Objekt der Klasse B erzeugen, da A.Foo() ja deren Funktionalität nutzt.

Um solche Abhängigkeiten aufzulösen, bietet sich der Einsatz von Interfaces an. Mit nur einem Interface haben wir die Klassen voneinander entkoppelt und die Abhängigkeit zwischen A und B aufgelöst.image

Abbildung 2: Die Klassen A und B sind durch das Interface entkoppelt.

Zusätzlich übernimmt jetzt nicht mehr A selbst die Instanziierung von B, sondern wir injizieren dem Objekt von A mittels Konstruktorparameter b ein Objekt, das die Schnittstelle IB implementiert. Dadurch können wir von außen bestimmen, welches Objekt die Funktionalität IB.Bar() übernimmt, die wir von A.Foo() aus aufrufen.

Man stelle sich vor ,dass B.Bar() eine Datenbank aufruft. Gibt es dort einen Fehler, löst diese Methode eine InvalidOperationException aus. Unsere Methode A.Foo(), die ja B.Bar() aufruft, soll auf diese Exception mit einer CustomException reagieren. Wenn wir das mit dem Design aus Abbildung 1 testen möchten, müssten wir eine Datenbank aufsetzen, diese Tabellen in der Datenbank so manipulieren, dass in der Methode B.Bar() die gewünschte Exception auftritt und dann den Test für A.Foo() durchführen. Wir müssen quasi ein Szenario für B.Bar() simulieren, obwohl wir nur A.Foo() testen wollen. Das ist hier bereits verwirrend und in größeren Systemen führt das zu unglaublich kompliziertem Testcode den nach ein paar Tagen der Tester selbst nicht mehr versteht.

Mit dem Design aus Abbildung 2 ist das überhaupt kein Problem: In unserem Testprojekt legen wir einen sogenannten Stub an. Stub heißt, das er ein “dummer” Stellvertreter einer Interfaceimplementierung ist, der fest definierte Werte zurückgibt.

public class IBExceptionStub : IB
{
    public void Bar()
    {
        throw new InvalidOperationException("...");
    }
}

Listing 1: Ein Stub für einen Test der von B.Bar() eine Exception erwartet.

Schreiben wir nun also einen Test, der prüfen möchte, ob A.Foo() die erwartete CustomException auch tatsächlich auslöst, brauchen wir nur noch folgenden Code zu schreiben:

[TestMethod]
[ExpectedException(typeof(CustomException))]
public void Foo_DatabaseNotAvailable_CustomException()
{
    IB ib = new IBExceptionStub();
    A a = new A(ib);

    a.Foo();
}

Listing 2: Der Test für A.Foo() nutzt den ExceptionStub um einen Fehlerfall von B.Bar() zu simulieren.

Damit haben wir zwei Punkte erreicht:

Erstens können wir unterschiedlichste Verhalten von A in Abhängigkeit von Verhalten in B testen. Möchten wir z.B. ein Verhalten von A.Foo testen, wenn von B.Bar() aus der Datenbank ein ungültiger User geladen wird, schreiben wir einfach einen kleinen Stub.

Zweitens das Design ist wesentlich flexibler geworden durch die Entkopplung durch das Interface. Das Design aus Abbildung 1 wäre nicht durch eine Klasse C ersetzbar, welche die Methode Bar() ebenfalls anbietet. Das zweite Design könnte dies ohne Probleme, wenn C das Interface IB implementieren würde.

Das Ganze funktioniert so natürlich nur wenn Constructorinjection möglich ist. Sollte das nicht möglich sein, nutzt man dazu das ServiceLocator-Pattern. Aber das schauen wir uns in einem anderen Tipp genauer an.

Alle Beiträge der Reihe “TDD Tipps” sind hier zu finden.

Web Developer Conference 2011

18. Oktober 2011 22:19

Vom 17-18.11 fand zum ersten Mal die Web Developer Conference im Hamburger InterContinental Hotel statt. Mehr als 150 Teilnehmer konnten sich dabei in zwei Tracks auf den neusten Stand in der Webentwicklung bringen. Neben Vorträgen zu HTML5, JavaScript, NodeJs und vielen weiteren Themen, war auch ich kurzfristig mit einem Vortrag zum Thema “Schnittstellen im Web – Aktueller Technologiestand bei Webdiensten” vertreten. In der 60-minütigen Session versuchte ich den Teilnehmern die verschiedensten Technologien wie REST, SOAP und Data-Services zu erläutern, zu erklären wie und wo man diese Dienste in Architekturen am besten unterbringt und was man beim Thema Security zu beachten hat.

An dieser Stelle möchte ich mich noch einmal bei allen Teilnehmern meiner Session und natürlich auch allen Teilnehmern des Events bedanken. Es war für einen Desktopentwickler ein wirklich super cooler Informationsaustausch, der mir viele Anregungen und Perspektiven der Softwareentwicklung in den nächsten Jahren aufgezeigt hat. Ich freue mich schon auf die nächste Veranstaltung.

Wie mit den Teilnehmern besprochen, gibt es hier auch meine Folien zu dem Vortrag.

Links
Folien

Ein internal Interface in C# implementieren ohne public Methoden

12. Oktober 2011 14:15

Ab und zu kommt man in die Situation, dass man ein Interface in C# sowohl für public-Zwecke (Verwendung außerhalb eines Projekts) und auch für internal-Zwecke (Verwendung in dem jeweiligen Projekt) verwendet. Dabei gibt es das Problem, dass in C# keine Zugriffsmodifizierer für Interfacemethoden zulässig sind. Wie man das Ziel trotzdem erreicht, zeigt das Listing 1.

    public interface IPublic
    {
        void Foo();
    }

    internal interface IInternal : IPublic
    {
        void Bar();
    }

    class Something : IInternal
    {
        public void Foo()
        {
            throw new NotImplementedException();
        }

        void IInternal.Bar()
        {
            throw new NotImplementedException();
        }
    }

Listing 1: Das implementieren eines internal und eines public Interfaces

Der Trick daran ist es, die Funktionalität in ein Public Interface (hier IPublic) und ein Internal Interface (hier IInternal) aufzuteilen. Da IInternal von IPublic abgeleitet ist, bietet die interne Schnittstelle alle angebotenen Methoden an und die öffentliche Schnittstelle nur die öffentlich zugänglichen. Aber warum dann nicht in ein Interface? Ganz einfach, in einem Interface kann nur der Zugriffsmodifizierer für das gesamte Interface angegeben werden, nicht für einzelne Methoden oder Eigenschaften.

Weiter ist zu beachten das wenn ein Interface implizit implementiert wird, müssen dadurch alle implementierten Methoden public sein, egal welchen Zugriffsmodifizierer das Interface hat. Daher wird die Methode Bar() aus dem Interface IInternal explizit implementiert, womit wir das gewünschte Verhalten erzielt wird.

Test Driven Development mit .NET und C#–Tipp #1: Events testen

11. Oktober 2011 23:08

Das Testen von Code ist eine wichtige und – für  Entwickler – richtig coole Angelegenheit. Doch Testen ist weitaus mehr, als ein Testrunner und ein paar Attribute für Klassen uns Methoden. In der Reihe “TDD Tipps” versuche ich regelmäßig Probleme zu erläutern, die beim Testen auftauchen und mit einem praktischen Hinweis einen Lösungsweg aufzuzeigen.

Um Klassen untereinander zu benachrichtigen und voneinander zu entkoppeln, können Events genutzt werden. Wenn man Klassen mit Events testen möchte, muss natürlich auch das korrekte auslösen des Events getestet werden. Hat man kein entsprechendes Mock-Framework zur Hand, geht das auch relativ einfach mit Lambda-Expressions. Gegeben sei folgende Klasse Foo mit dem Event Bar (die so natürlich NICHT im Produktivcode auftauchen sollte):

public class Foo
{
    public event EventHandler Now;
    public void Bar()
    {
        Now(null, null);
    }
}

Listing 1: Die Klasse Foo mit dem Event Now, das getestet werden soll

Das Testen ist relativ einfach und simple:

[TestMethod]
public void Bar_EventSubscribed_EventIsRaised()
{
    bool isRaised = false;
    Foo foo = new Foo();
    foo.Now += (sender, args) => isRaised = true;
            
    foo.Bar();

    Assert.IsTrue(isRaised);
}

Listing 2: Die Methode, die testet, ob das Event ausgelöst wurde

Zunächst wird eine Variable isRaised deklariert und mit false initialisiert. Diese Variable erfasst, ob das Event ausgelöst wurde. Danach wird mit einem Lambda-Ausdruck dafür gesorgt, dass diese Variable auf true gesetzt wird, wenn das Event ausgelöst wird. Im Assert-Teil ist dann nur noch zu prüfen, ob diese Variable auf true gesetzt wurde.

Alle Beiträge der Reihe “TDD Tipps” sind hier zu finden.

Buchvorstellung: iWoz – Wie ich den Computer erfand und Apple mitgründete von Steve Wozniak

11. Oktober 2011 20:55

Eigentlich verwende ich die wenige Zeit die ich zum Lesen habe, meist für das Studium von Fachbüchern. Als ich jetzt aber durch Zufall den Klassiker “The Silicon Valley Story” gesehen habe (dort geht es geht um die Anfänge von Microsoft und Apple aus Sicht von Steve Wozniak und Steve Ballmer), bin ich auf das Buch iWoz von Apple-Mitgründer Steve Wozniak aufmerksam geworden. Da dies ein Buch mit starkem Technikhintergrund ist, ohne gleichzeitig ein Fachbuch zu sein, verschenkte ich es zu einem Geburtstag an einen Freund als leichte Lektüre für zwischendurch. Beim Einpacken durchstöberte ich den Umschlagtext und war derart fasziniert, dass ich es gleich ein zweites Mal bestellte Smiley 

Das Buch beschreibt zunächst seinen Werdegang beginnend im Alter von 3 Jahren und schon dort zeigt sich, dass Steve Wozniak nicht nur technisch hochbegabt ist, sondern bereits in frühen Tagen von seinem Vater neben technischen Dingen vor allem eine hohe moralische Wertvorstellung vermittelt bekommt. Er beschreibt weiter wie sein Vater als Ingenieur bei Lockheed arbeitet und wie er ihm bereits früh elektronische Prinzipien wie Spannung, Strom und Widerstände erklärt. Dabei merkt man die ganze Zeit wie sehr in Steve der Ehrgeiz brennt, selbst irgendwann ein solcher Ingenieur zu sein, wie sein Vater. Die Erzählungen gehen weiter über Technologiewettbewerbe in der Highschool, seine Anfänge im Studium, die Entwicklung der BlueBox (Gerät um kostenlos telefonieren zu können), seine ersten Kontakte zu Steve Jobs, seinem ersten (richtigen) Job bei Hewlett Packard und schließlich die Gründung von Apple. Dabei geht er besonders auf die Schaltungen und Geräte ein, die er dabei entwickelt, so detailliert, wie ich es in einem solchen Buch nicht erwartet hätte. Dabei erstaunt Wozniak bereits im frühen Jahren mit selbstentwickelten Geräten wie z.B. dem Tic-Tac-Toe-Computer, der wahrscheinlich selbst mich, als studierten Nachrichtentechniker, vor ein Problem stellen würde.

Dabei ist das Buch ein gelungener Mix für jeden Lesen, denn es geht nicht nur um technische Dinge, sondern auch um viele lustige Dinge, moralische Wertvorstellungen und amerikanische Geschichte. Aber für mich besonders interessant war die Erkenntnis, warum Steve Wozniak zu dem Genie geworden ist und das es nicht das oft beschrieben “göttliche Talent” war, sondern eine solide und gründliche Erziehung, Wissbegierde, ein guter Lehrer und ein Schulsystem, das genau auf solche Kinder ausgelegt ist und diese fördert. Die Art und Weise wie dieses Buch die Lebensgeschichte und die unglaublichen Leistungen vermittelt ist beispiellos und ein Muss für jeden technisch Interessierten.

Für jeden, der den Werdegang einem der größten Ingenieure der Welt einmal genauer verfolgen möchte, ist dieses Buch genau das richtige. Selten hat mich ein Buch so sehr gefesselt, motiviert und begeistert zugleich. Man merkt in jeder Zeile das Wozniak ein Ingenieur durch und durch ist und es macht teilweise wirklich sprachlos, welche Leistungen er bereits im jungen Alter vollbracht hat.

Links
iWoz – Die Autobiographie des Apple-Erfinders

i, i, i wo ist Es denn?

5. Oktober 2011 06:18

Wo einige Unternehmen teure Werbekampagnen starten müssen, um ihre neu entwickelten Produkte an die Kunden zu bringen, stellt eine Firma jedes Jahr aufs Neue eine Ausnahme dar: Apple. Kein anderes Unternehmen versteht es derart gut, ihre Kunden (bei Apple darf man sie getrost Fans oder Jünger nennen) vorab derart zu illusionieren, das selbst erwachsene Personen sich plötzlich aufführen wie Schulkinder zur Weihnachtszeit. Das Apple noch nicht auf die Idee gekommen ist, in ihren iStores einen Keynotekalender in Apfelform zu verkaufen, womit man vom Ankündigungsdatum an, jeden Tag ein kleines Kläppchen öffnen kann (wobei jeden Tag ein App-Symbol mit einem Hinweis auf das baldige Produkt zu finden ist), bis zu angekündigten Keynote, verstehe ich bis heute nicht.

Microsoft fuhr in diesem Jahr mit Windows 8 ein ähnliche Strategie: Nachdem man den Kunden (ja, hier sind es leider nur Kunden) vorab einige Screenshots oder kurze Videos “hingeworfen” hatte, zog man eine Veranstaltung ganz im Stil von Apple auf: Die Build (ehemals Professional Developer Conference – PDC). Auch wenn ich persönlich es Microsoft nicht zugetraut hätte, war die Konferenz aus Kundensicht wirklich fast so etwas wie die legendären Apple-Keynotes – Windows 8 ist echt ein geniales Stück Software und die (nicht Entwickler-)Massen waren begeistert. Aber eben nur fast, es fehlte eine Präsens auf der Bühne. “The one” mit dem sich jeder ein Stück weit identifizieren konnte und zu dem gleichzeitig auch jeder irgendwie hinauf schaute… So jemand wie Steve Jobs! 

Doch natürlich schläft auch die Apfelfraktion nicht – vor einige Zeit kündige Apple die längst überfällige Keynote an: “Let’s talk iPhone”. Zusammen mit diesem knappen Satz, wurde ein Bild veröffentlich, auf dem genau vier App-Icons zu sehen waren: Ein Kalender Icon mit “Tuesday the 4th”, einem Icon mit der Uhrzeit 10:00, einem Map-Icon mit der Adresse von Apple’s Headquater und einem Icon das einen verpassten Anruf zeigt. Das die ersten drei Icons auf die Keynote am 4.10.2011 um 10:00 Uhr im Apple Headquater in Kalifornien hinwiesen, war klar, aber das letzte Icon führt zu den wildesten Spekulationen – Einige spekulierten gar darüber, ob das neue Gesicht von Apple Tim Cook, in der Keynote einen Videocall mit Steve Jobs führen würde um über das neue iPhone zu plaudern. Und wie jedes Jahr geht mir dabei derselbe Gedanke durch den Kopf: Wow Apple! Egal auf welcher Newsseite man in der letzten zeit unterwegs war, überall gab es wildeste Spekulationen über das neue iPhone 5. Während einige nur über die Funktionen spekulierten, präsentierten andere gar Ganze selbst angefertigte Prototypen. Zusätzlich konnte man seit einiger Zeit bei T-Mobile ein neues Smartphone vorbestellen – jedem war klar um welches Smartphone es sich handeln würde. Versuchte man an der Hotline das neue iPhone zu bestellen, entgegnete die nette Dame am Ende nur mit “das haben wir hier nicht, sie können nur ein Smartphone der neusten Generation vorbestellen” – Wuuuhaaaa, das ist der Punkt an dem die Nägel der eingefleischten Apple-Jünger schon bis zur Schulter abgekaut waren.

Pünktlich um 19 Uhr (MEZ), als alle Apple-Jünger ihr iPad gen Kalifornien gedreht und die Gebets-App gestartet hatten, startete die Keynote mit Tim Cook. Und dann wurde es präsentiert: Das iPhone 4S… VIER ESS! Nicht 5!!! Bitte was?!?! Unter Jobs begeisterte Apple jedes Jahr, fast ohne Ausnahme, mit genialen und vor Innovation nur so platzenden Produkten und jetzt reicht es plötzlich nur noch für ein 4S??? Ein herber Schlag für die Jünger und ein toller Tag im Kalender für alle Applefeinde – Das was Apple Jahrelang ausgezeichnet hatte, mit dem Apple eine Phänomen wie sonst nirgends geschaffen hatte… sie hatten es versaut! In Zeiten in denen über Features wie Stereokameras, 3D-Bildschirme, HD-Auflösungen, Bezahlen mit Smartphones und vielem Mehr gesprochen wird, schafft Apple es nur, ihren Antennenbug zu fixen, eine bessere Kamera einzubauen, einen doppelkern Prozessor einzubauen und eine Spracherkennung zu integrieren? Na klasse, letzteres kann man Windows Phone 7 Mango auch, aber das Feature ist so unwichtig, das selbst Microsoft es nicht für nötig gehalten hat, es gesondert zu erwähnen – zumal es für den deutschen Raum noch nicht zu funktionieren scheint. Selbst mit den angesprochenen Verbesserungen schafft Apple es nicht wirklich zur Hardwarespitze der Smartphones aufzuschließen.

Und was gab es noch? Die iCloud – Noch eine Wolke mehr am Himmel, nur komisch das selbst Apple nicht versteht, dass schon die bisherigen Wolken bei dem gemeinen Fußvolk nicht sonderlich beliebt sind. Die iCloud soll auf Amazon AWS und Windows Azure (ja, das Ding von Microsoft, irgendwann muss sich Microsoft’s großes Apple-Aktienpaket ja auszahlen) basieren. Dort bekommt man 5GB umsonst und 10GB für 16 Euro im Jahr. Nun kann man Bilder, Musik und Filme mit allen Apple-Geräten synchronisieren. Das Apple schon in der Vergangenheit nicht unbedingt verantwortungsvoll mit den Daten der Jünger umgegangen ist, wird hier bestimmt bald keinen mehr interessieren und das man bei Microsoft 25GB umsonst bekommt, auch nicht.

Welches Fazit sollten wir daraus ziehen? Jahrelang war Apple im Smartphone und Tabletbereich der Innovationsmotor, der nun aber nur noch Trabant-Qualität zu haben scheint. Das angekündigte iPhone 4S zaubert jedem Android oder Phone 7 Mango Besitzer ein breiten selbstzufriedenes Lächeln ins Gesicht und sollte auf der anderen Seite jedem Apple-Jünger zum nachdenken anreden. Jemand hat einmal gesagt, das dass Problem von Microsoft seiner Meinung nach ist, das heute keine Person mit Visionen mehr an der Spitze ist, sondern jemand der nur in Zahlen denkt. Trifft dasselbe jetzt etwa auch auf Apple zu nachdem Jobs krankheitsbedingt ausgeschieden ist? Ich Sinne der vielen Innovationen die Apple uns gegeben hat, hoffe ich, dass es nicht so ist…

Windows Phone 7 Mango Update mit einem Trick schon jetzt für alle Geräte

28. September 2011 14:11

imageMicrosoft hat beschlossen das Mango Update für Windows Phone 7 in mehreren Wellen auszurollen und so kommt es, das einige noch auf das Update warten müssen (z.B. alle die das Samsung Omnia 7 besitzen). Mit einem kleinen Trick kann man den Updatemechanismus umgehen und jetzt schon in den Genuss des Updates kommen:

  1. Zune Software updaten
  2. Einstellungen –> Telefon
  3. Danach auf Aktualisieren klicken
  4. Normal zeigt er hier “Kein Update verfügbar an”, wenn man jedoch direkt nach dem Klick die Internetverbindung trennt, wird das Mango-Update gefunden

Nach ca. 30 Minuten ist man dann unterwegs mit Windows Phone 7 Mango…

Viel Spaß damit Smiley

Zusätzliche Bing-Funktionen für die deutsche Version von Windows Phone 7 Mango freischalten

28. September 2011 14:05

image_thumb[1]Seit heute wird das neue Windows Phone 7 Mango Update verteilt. Im Bing-Hub muss man leider feststellen, dass viele der angekündigten Features nicht verfügbar sind. Dies kann mit einem kleinen Trick aktiviert werden:

Unter Einstellungen –> Region & Sprache –> Browser und Suchsprache wählt man Englisch (USA)

Danach findet sich in der Bing-Suche (die trotz der Einstellung komplett auf deutsch ist) nicht nur den Menüpunkt “in der Nähe” (eins der besten neuen Features) sondern Bing Vision erkennt nun neben den bisherigen Optionen QR-Codes und Microsoft Tags auch normale Barcodes, Bücher, CDs und DVDs.

Warum diese Funktionen gesperrt sind ist mir nicht wirklich ersichtlich, da “in der Nähe” wirklich sehr gut funktioniert und eine absolut geniale Erweiterung des Bing-Hubs ist. Bei der Suche nach Büchern, CDs und DVDs stellt man jedoch schnell fest, das fast nur englischsprachige Bücher erkannt werden – das könnte also ein Grund sein.

Zusätzlich soll auch die gesamte Umstellung auf die englische Sprache weitere gesperrte Features freischalten, allerdings habe ich das noch nicht getestet.

Ist der .NET-Entwickler der neue VB6-Entwickler?

14. September 2011 07:55

Etwas mehr als 12 Stunden sind seit der BUILD vergangen… Die Konferenz die endlich Klarheit bringen sollte, die uns Entwicklern die Marschrichtung für die Zukunft aufzeigen sollte. Das Gefühl war schon irgendwie beängstigend am Vormittag, die Nervosität bei vielen Leuten spürbar. Durch die Verschwiegenheit von Microsoft im Vorfeld wurden die wildesten Gerüchte gestreut: Wird HTML5&JS die neue primäre Sprache für Windowsentwicklung? Wird es .NET weiterhin in seiner jetzigen Form geben? Haben wir viele Jahre eine Technologie gelernt, die nun veraltet ist?

Die Keynote begann, Windows 8 wurde gezeigt und dann war es raus: Es wird eine neue Laufzeitumgebung geben, genannt Windows RT, welche für die Entwicklung von Windows 8 Apps genutzt wird. Diese Runtime kann mit diversen Sprachen genutzt werden, neben HTML/JS und C++ glücklicherweise auch C#… Das HTML gesetzt war, vermuteten viele bereits, aber eine wirkliche Bekenntnis zu C# und zu .NET gab Microsoft bis dato nicht. Aber ist jetzt alles gut für das .NET Framework? Nein – ich denke nicht!

Wirklich viele Informationen über die nächste .NET Version gab es ja nicht. Bei der Sessionlist der BUILD ist mir folgende Session aufgefallen, auf die ich meine Argumentation stütze:

image

Das .NET-Framework wird also neue Erweiterungen bekommen, um Anwendungen für Windows 8 zu schreiben, bzw. die Windows RT aus .NET heraus nutzen zu können. Das man neue Erweiterungen für ein Betriebssystem bereitstellt, kennen wir bereits von Windows 7. Allerdings wurde das damals als “Windows 7 API Code Pack” bereitgestellt und nicht als Bestandteil einer neuen Version von .NET zu Verfügung gestellt.

Das Konzept von Microsoft war es (einmal!?), ein Framework für alle Windowsplattformen zur Verfügung zu stellen. Damit war sichergestellt, das Anwendungen, die auf einer Frameworkversion auf Betriebssystem X laufen, auch auf einem Betriebssystem Y läuft, vorausgesetzt es existiert eine Runtime dazu. Sollte Microsoft also wirklich die API für Windows 8 in .NET integrieren, wäre diese Plattformunabhängigkeit Geschichte. Macht man sich da das eigene Konzept kaputt?

Schaut man sich die Sessions zur BUILD an, wird eines deutlich: Der Kernpunkt dieser Konferenz ist neben Windows 8 vor allem HTML5 und JavaScript.

  • 9 Sessions zu .NET
  • 7 Sessions zu ASP.NET
  • 7 Sessions zu C#
  • 40 (!!!) Sessions zu HTML5

Merkwürdig das HTML5 als Technologie die langjährig gefeierte Technologie .NET mit einer gigantischen Entwicklergemeinde zu überholen scheint. Schaut man sich die Sessions im Bereich .NET, ASP.NET und C# an, mangelt es an wirklichen Innovationen und es erweckt den Eindruck, das diese Frameworkversion einzig und allein für die Kompatibilität mit Windows 8 entwickelt wurde und um die Brücke für ASP.NET Entwickler hin zu HTML5 Metro UI zu schlagen.

Wir sind bald im zehnten Jahr des .NET-Zeitalters angekommen. In dieser Zeit hat sich viel Verändert, das Framework wurde massiv erweitert und um coole und innovative Features ergänzt, wie z.B. LINQ. Wir haben mit WPF eine UI-Technologie die in der Lage ist, hardwarebeschleunigte Oberflächen zu entwickeln die schick und modern aussehen. Nun hat Microsoft mit Windows 8 ihr Flaggschiff zurück auf 0 gestellt (mehr oder weniger), und so viele Bereiche neu entwickelt wie bei keinem Betriebssystem vorher. Aber womit wurden die Oberfläche von Windows entwickelt? Mit HTML5 und JavaScript! Wurde das Betriebssystem auf Basis von managed Code geschrieben? Nein, aber warum? Das Forschungsbetriebssytem Singularity von Microsoft Research hat doch gezeigt, das ein performantes managed OS möglich ist und zahlreiche Vorteile hat. Welche großen Microsoftprodukte gibt es den, die mit .NET umgesetzt wurden, wenn wir Sharepoint einmal außen vor lassen? Keins!

Diese Tatsache zeigt mir, das Microsoft selbst nicht mehr an eine Zukunft von .NET glaubt und diese Version 4.5 des Frameworks untermauert das Ganze noch einmal. Egal mit wem man im Vorfeld gesprochen hat und über ein mögliches AUS von .NET diskutierte, jeder entgegnete mit der selben Antwort “Microsoft wird doch keine Technologie sterben lassen, in die sie so viele Jahre so viel Geld investiert haben”. Aber haben die VB6 Entwickler das nicht früher vielleicht auch behauptet bevor .NET veröffentlicht wurde? Ich befürchte die .NET Entwickler werden die neuen VB6 Entwickler…

Their strategy with Phone 7 has shifted?

4. September 2011 13:49

Recht verwundert war ich dieser Tage über eine Email in meinem Posteingang. Golo Rodenwollte vorab zur BUILD seine Prognose zur Zukunft der Microsofttechnologien bekannt geben, welche ja bekanntlich dort die Stoßrichtung für die kommenden Jahre bekommen soll, um später wirklich sagen zu können “Ich habs euch ja gesagt…”

Da man sich recht regelmäßig über dieses Thema in der letzten Zeit mit vielen Leuten ausgetauscht hatte, war nicht viel neues zu lesen, erst recht nicht der Punkt “Windows 7 wird zugunsten von Windows 8 nicht weiterentwickelt”. "Der Punkt ist ja sowas von klar”, war meine Antwort. Erst bei der Antwort bemerkte ich, dass dort Windows PHONE 7 stand! Das neu entwickelte und gehypte Smarthonebetriebssystem Phone 7 schon nach so kurzer Zeit einstampfen für ein ehemaliges Desktopbetriebssystem? So ein Blödsinn…

War das wirklich so abwegig? Dieser Gedanke verfolgte mich den ganzen Tag weiter. Wie könnte Microsofts Ausrichtung der nächsten Jahre aussehen? Würde man wirklich so einen Super-GAU heraufbeschwören und allen Phone7-Kritikern recht geben?

Gehen wir mal zurück in den Oktober 2010. Microsoft veröffentlichte ein halbfertiges Handybetriebssystem und verärgerte sehr viele Kunden mit einer halbfertigen Software die selbst eingefleischten Microsoft-Fans die Tränen in die Augen trieb. Jeder fragte sich warum ein Produkt derart spät und unfertig auf den Markt gebracht wurde. Man muss ein Phone 7 Device nicht lange in der Hand halten, um den Eindruck zu bekommen, dass es bei Meilenstein X einfach rausgehauen wurde. Die Frage an der Stelle ist nur, was war der Grund für den Meilenstein? War es wirklich weil Microsoft unbedingt auf den Markt wollte oder evtl. ein weitreichender Technologiewechsel?

Zeitgleich wurde die Professional Developers Conference, kurz PDC, veranstaltet. Als jeder die üblichen Themen Silverlight, .NET, Azure & Co. vermutete, stand plötzlich etwas auf dem Plan, womit kaum jemand auf einer Microsoftkonferenz gerechnet hätte: HTML 5. Egal welche Session man schaute (sogar die Keynote), HTML5 war allgegenwärtig. Seitdem wird Silverlight für Web / Desktop nach Meinung vieler langsam sterben gelassen. Das missglückte Statement “our strategy with silverlight has shifted” von Bob Muglia trug sein übriges dazu.

Mitte des Jahres wurde Windows 8 angekündigt. Schon vor diesem Termin gab Microsoft bekannt, dass Windows 8 zukünftig auch auf ARM-Plattformen laufen würde. Damit strebt Microsoft das Ziel an, Windows 8 auf gängigen Tabletsystem lauffähig zu machen – super. Nebenbei wurde bekannt, dass das gesamte Betriebssystem derart modular aufgebaut sein soll, dass es in der Minimalinstallation auch auf Kleinstsystemen laufen soll  - Oha, was ist Microsofts Definition von Kleinstsystem? Okay, Windows 8 als Basis auf allen Geräten und die Plattform wird .NET, dachten viele… Aber das .NET-Framework wurde mit keinem Wort erwähnt… Stattdessen wieder nur HTML 5 als primäre Technologie.

Aber ist HTML 5 wirklich die neue Kerntechnologie? Nun ja, im Jahr 2010 war Microsofts Motto “Three screens and a cloud”. Jemand sagte mal zu mir “Wenn Microsoft nicht unter Druck versuchen wird, Azure durchzudrücken, will es niemand haben”. Der Technologiewechsel macht vor dem Hintergrund durchaus sinn, würde man eine breite Masse an Geräten nur mit “dummen” HTML5-Oberflächen ausstatten, wäre es naheliegend die Logik auf Server auszulagern und damit natürlich auch in die Cloud.

Zusätzlich möchte Microsoft in Windows 8 einen Marketplace für Desktopanwendungen einführen. Anders als bei der Einführung des Marketplace für Phone 7 hätte man hier nicht mit dem gigantischen Vorsprung von Apple und Android zu kämpfen (der übrigens bis heute nicht mal ansatzweise aufgeholt wurde), denn “Apps” für Windows 8 werden direkt nach der Veröffentlichung durch die Abwärtskompatibilität massenhaft zur Verfügung stehen.

Angenommen das alles würde eintreffen, was hat das mit Phone 7 zu tun? Naja, welchen Sinn hätte ein unausgereiftes MobileOS wie Phone 7 mit Silverlight als “Programmierplattform”, welches nach wie vor kein wirklich attraktives App-Angebot im Marketplace hat, wenn auf der anderen Seite ein seit Jahren bewährtes Desktopbetriebssystem bereit steht, was durch Anpassung nun auch auf “Kleinstgeräten”, also Smartphones laufen würde und deren Marketplace in kurzer Zeit etabliert sein wird?

Deshalb stelle ich mal die gewagte Theorie auf (natürlich durch die angesprochene Mail von Golo Roden): Microsoft wird Windows 8 auf ALLEN Plattformen bringen, das heißt auch auf Smartphones. Deshalb wird die Entwicklung von Phone 7 nicht mehr weitergeführt. Die neue primäre Entwicklungstechnologie auf dem “Screen” wird HTML5 + JScript. Dazu wird Microsoft eine neue Backendtechnologie auf Azure-Basis zur Verfügung stellen, die mit HTML5 + JScript effektiv genutzt werden kann. Nachdem Microsoft vor einem halben Jahr bekannt gegeben hat, Node.js auf Windows zu portieren, liegt die Vermutung nahe, das es etwas in diese Richtung geben wird.

In einem Jahr ein Smartphone mit Windows 8 in den Händen zu halten wäre klasse – darauf freue ich mich. Aber wo bei diesen Prognosen taucht .NET auf? Hat sich Microsofts Strategie damit auch geändert?


video2brain - Videotraining

© Copyright 2011 by David Tielke - Impressum