Webplatform & klantmanagement
Mission Critical Silverlight Een 112 meldkamer GIS migreren naar nieuwe technologie
Robert Kieboom Technisch Directeur
[email protected] CityGIS B.V.
Agenda
Onderwerpen: • • • •
Het probleemdomein Beschrijving van het nieuwe product Ontwerpen van een nieuw platform Wat heeft CityGIS geleerd in dit proces
112 Meldkamers
CityGIS • • • • •
Marktleider 112 systemen Benelux 24x7 operatie Elke seconde telt, ook in de software Volledig in Nederland ontwikkeld Gebaseerd op het Microsoft Platform
Het globale 112 proces
112 Melding
Incident op de kaart
GPS Informatie Voertuigen
Inzetadvies
Voertuig Applicatie
Toewijzing
Opdracht met informatie
Video
Mobiele Applicatie
• Operationeel in ca. 1500 voertuigen ambulance, brandweer & politie • Navigatie naar het incident • Delen van real-time informatie Gaswolk, opbrekingen, locatie collega’s, tekenlagen
• Vitale informatie in de voertuigen Luchtfoto’s, brandkranen, ziekenhuizen, aanvalsplannen, bereikbaarheidskaart, loodsposten, ANWB paddenstoelen, Eric-kaarten, Chemiekaarten, Top10NL, GBKN
Landelijke infrastructuur
Landelijke Ambulance Servers: • • • • •
850 ambulances in 24 regio’s Dagelijks verkeer van meer dan 7,5 miljoen berichten Draadloze communicatie via verschillende netwerken Voertuiggegevens, GPS, incidenten, wegopbrekingen Heel veel koppelingen met externe systemen
Nieuwe ontwikkeling
SNEL
BETROUWBAAR
OPEN
EENVOUD
GEBRUIK
BEHEER
SAMENWERKEN
CityGIS Barracuda
• • • • • • •
Gebaseerd op .net, ontwikkeld in C# 112 Meldkamer client in Silverlight 3 Windows Communication Foundation Windows Presentation Foundation Van client-server naar service-oriented Schaalbaar en redundant Standaarden: HTTP, REST, SOAP, OGC
Barracuda Architectuur
UI Platforms
• Silverlight, WPF, Compact Framework • Ontwikkel voor het laagste platform – – – – – –
Compact framework Weinig verschil met Silverlight (behalve security) Ontwikkelaar kan geen fouten maken (intellisense) Op het normale framework werken compact assemblies zonder problemen Of gebruik de “Project Linker” van PRISM (nog niet beschikbaar in VS2010) Build continu voor alle platforms
• Maak zoveel mogelijk code onafhankelijk van UI platforms – PRISM, M-V-VM – Waardoor zoveel mogelijk unit testable wordt
Client-server naar service-oriented
Client-server • Server heeft intieme kennis van de client • Veel connecties op de server die voor langere tijd bestaan • Lastiger redundant en schaalbaar te maken • Geen of weinig standaarden (anders dan TCP/IP) Web services • Voorkom server state voor een specifieke client • Schaalbaarheid, robuustheid & redundantie • Standaardisatie • De keuze REST / SOAP • Web technologie is geoptimaliseerd voor HTTP GET
Grafische issues
• • • • • • •
Web client heeft beperkte grafische mogelijkheden Veel (grafische) content wordt op de server gegenereerd Gebruikmaken van WARP (DirectX software), GDI+ of WPF? Servers hebben geen grafische hardware acceleratie Wel meerdere processors en cores Parallel genereren van grafische content Abstraheer de grafische engine
Fase 1
• 6 maanden ontwikkeling • Functioneel zeer goed ontvangen bij de klanten • Heel veel assemblies & dependencies Productiviteit begint af te nemen…
Software rot
• Software gaat na verloop van tijd degraderen • Vooral dependency management is hierbij belangrijk • Veel onderlinge dependencies geven rigide & instabiele software – Moeilijk te veranderen – Bij wijzigingen beïnvloed dit het gehele systeem – “He, hoe kan dat nou breken, terwijl ik dit wijzig?”
• Hier moest meer aandacht aan besteed worden..
Design
Software Design is belangrijk.. • Het Microsoft Application Platform is zeer krachtig – But with great power comes great responsibility…
• Structuur en ontwerp bepalen in hoge mate de onderhoudbaarheid en daarmee het succes van een product • 80% van de totale ontwikkelingskosten van een product zit gemiddeld in het onderhoud
Uitgangspunten
• Agile ontwikkeling • Ontwikkeling van een framework – Partners moeten waarde kunnen toevoegen – Dit maakt API design nog belangrijker – API Documentatie
• Manage Dependencies • Kwaliteit: vakmanschap & practices
Tooling
• Visual Studio 2010 RC – Unit tests – Code coverage – Code metrics
• Team Foundation Server 2010 RC – – – –
Gated checkins Run unit tests bij elke build Continuous integration (build, test, deploy) Genereer documentatie bij elke build
• Ndepend – Zie dependencies en vergelijk met vorige builds – Onderzoek waar metrics misgaan – Gebruik CQL om problemen te controleren in elke build
Dependency Management
Module
Module
Module
Module
Module
Module
Module
Module
3 Dependencies
12 Dependencies
Dependency Disaster
1
2
4
3
5
6
7
1 is nu afhankelijk van 6 en daarmee 2, 3 , 4, 5 en 7 ook. Maar 2, 4 en 5 zijn nu ook afhankelijk geworden van 3. Het aantal dependencies explodeert door één simpele handeling ! Dit is een manier waarop een systeem degradeert..
Dependency Cycles
• • • • •
Voorkom cycles in de dependency graph Wijziging in 1 plek heeft invloed op teveel andere modules Verbreek cycles met het dependency inversion principle Of een nieuwe module voor het gedeelte dat die dependency nodig heeft Gebruik scripts om bij elke build te controleren op dependency problemen
1 8
3 2
6
Stabiel en abstract
• Stabiel: module waar veel andere modules afhankelijk van zijn • Abstract: module waarin veel abstracte types voorkomen • Stabiele modules moeten uitbreidbaar zijn, dus abstract • Heel stabiel en niet abstract: gevaarlijk • Heel abstract en niet stabiel: waardeloos • Minder stabiele modules moeten meer stabiele modules referencen – Dit is nog een reden waarom dependency cycles problemen geven
Abstractness vs. Instability
Metrics – Aantal regels in een method
Dependency Graph
Voorbeeld van een stabiele module, die zelf alleen stabielere modules referenced
Query – Cyclomatic Complexity
Aantal onafhankelijk paden in een method.
Test Driven Development TDD • Eerst een falende test schrijven zonder productie code • Je schrijft niet meer test code dan voldoende is om de test te laten falen • Je schrijft niet meer productie code dan voldoende is om de test succesvol te laten zijn Voordelen • Unit tests zijn specificaties/documentatie die altijd in sync zijn met code • Ontwerp van een API gebeurt vanuit het perspectief van de gebruiker • Minder debugging, als een minuut geleden alles nog werkte – Praktijk een factor 10 minder debugging
Het kost wel tijd en moeite om eraan te wennen…
Angst
“Ik moet deze code verbeteren” “Maar wat zal er dan breken?” “Ik raak het maar niet aan, anders wordt het mijn probleem” • Goede unit tests verminderen angst • Het wordt veiliger om code te refactoren • Code coverage moet wel hoog zijn – Streef naar meer dan 90% – Controleer dit met elke build
Model-View-ViewModel De opvolger van Model View Controller en Model View Presenter View • Doet databinding aan het ViewModel • Stuurt commands naar het ViewModel • Bevat geen logica, alleen presentatie ViewModel • Wij laten het geen afhankelijkheid hebben van presentatie • Dus geen references naar WPF of Silverlight • Maakt de data van het model geschikt voor data binding • Zet commands om in acties naar de services en het model Model • Representeert de data van het domein • Leeft in de servicelaag
M-V-VM vervolgd
Unit testing • Presentatie laag is altijd moeilijk te testen • ViewModels zijn prima te testen • Met M-V-VM wordt de moeilijk testbare code minimaal PRISM • PRISM van de MS Patterns & practices group het bekijken waard • Maakt een composable applicatie mogelijk • Modules met functionaliteit kunnen run time worden geladen • Modules zijn zeer losgekoppeld • Communicatie tussen modules via region context of pub/sub
Resources
• • • • • •
Clean Code (Robert C. Martin) Framework Design Guidelines (Cwalina & Abrams) Agile Principles, Patterns and Practices (Robert C. Martin) Effective C# (Bill Wagner) Sites: Channel 9, CodeBetter.com, Blogs: Scott Guthrie, Martin Fowler, Mike Taulty, Dan North Robert C Martin, Kirill Osenkov, Eric Lippert
[email protected] CityGIS B.V. Den Haag