Mein Wekzeugkasten für Desktopapps - Hendrik Lösch @DWX2016
-
Upload
saxonia-systems-ag -
Category
Software
-
view
86 -
download
0
Transcript of Mein Wekzeugkasten für Desktopapps - Hendrik Lösch @DWX2016
FÜR DESKTOPAPPS
MEIN WERKZEUGKASTEN
Der Sprecher
Hendrik LöschSenior Consultant & [email protected]@HerrLoeschJust-About.Net
WARNUNG
Die geschilderten Vor- und Nachteile sind rein subjektiv und auf den Arbeitsablauf des
Autors zugeschnitten.
€ Kostenfrei nutzbar€ Kostenfrei mit Premiumfeatures€ Kostenpflichtig
Persönlicher Favorit
TASKS
Speclog
Erfassung und Aufbereitung von Anforderungen auf Basis einer dynamischen Story Map.
+ Sehr einfach zu bedienen.+ Bietet Übersicht über alle Anforderungen.+ Export nach Excel, Html und TFS.
o 100€ pro Nutzero Benötigt Einarbeitung
- Lässt einige grundlegende Komfortfunktionen vermissen (Undo/Redo)
€
Powerpoint Storyboarding
Zeichnen von UI Mockups mit Hilfe von Powerpoint.
+ Sehr einfach zu bedienen.+ Kann auch ohne Visual Studio genutzt werden.+ Bietet zahlreiche Steuerelemente.+ Ergebnisse können mit TFS Workitems verknüpft werden
o Kein Export in andere Formate (Html, Xaml)
- Aufwändig bei größeren Dialogen- Darstellung echter Interaktion sehr mühselig
€
Team Foundation Server / Visual Studio Team Services – Taskboard & Backlog
€
Verschiedene Ansichten zur Planung und Verwaltung von Arbeitspaketen.
+ Übersichtliche, rollenspezifische Sichten.+ Automatische Burndowncharts und Forecasts.+ Epics, Stories, Tasks, Bugs und Testfälle leicht verfügbar.+ Featurebranches können direkt aus Stories heraus erstellt werden.+ Viele Schnittstellen zu anderen Diensten.
o Nur in Kombination mit anderen TFS Features verfügbar.o Benötigt Einarbeitung. o Nicht offlinefähig.
Trello
€
Verschiedene Ansichten zur Planung und Verwaltung von Arbeitspaketen.
+ Einfach und übersichtlich.+ Alle wichtigen Features kostenlos.+ Frei konfigurierbare Spalten mit Spaltenlimits.+ Zusatzfeatures wie Taskalterung, Checklisten, Kopieren von Inhalten, Tasks per Email anlegen.+ Arbeit sehr gut mit anderen Diensten zusammen.
o Nicht offlinefähig
- Hierarchien von Aufgaben können nur aufwändig abgebildet werden.
Waffle.io
€
Taskboard des Issuetrackings von Github.
+ Einfach und übersichtlich.+ Alle wichtigen Features kostenlos.+ Frei konfigurierbare Spalten mit Spaltenlimits.+ Änderungen werden automatisch in Githubs Issuetracking übernommen.
o Nicht offlinefähig
- Hierarchien von Aufgaben können nur aufwändig abgebildet werden.
ETEO
€
Taskboard für touchfähige Großbildschirme zur Echtzeitsynchronisation verteilter Scrum Teams.
+ Einfach und übersichtlich.+ Anbindung von TFS und Jira
o Wird durch die Saxonia Systems AG mit Ihren Teams bereitgestellt.o Nicht offlinefähig.
- Kann nicht ohne TFS oder Jira arbeiten.
BUILD, SCV & CO.
Team Foundation Server / Visual Studio Team Services - Continuous Integration
€
Contionouse Integration umgebung des TFS / VSTS.
+ Vergleichsweise einfach und übersichtlich.+ Alle wichtigen Features kostenlos.+ Gute Übersicht über die Ergebnisse und den Verlauf.+ Bietet viele Erweiterungsmöglichkeiten über Plugins.
o Anpassungen am Projekttemplate können die Konfiguration verkomplizieren.
- In de kostenlosen Variante kommt es gelegentlich zu Verzögerungen bei aufwändigen Builds.
- Einsatz für nicht Microsofttechnologien noch nicht ganz ausgereift.
Appveyor
€
CI Umgebung für .Net Projekte.
+ Sehr einfach und übersichtlich.+ Für Opensource kostenlos.+ Gute Übersicht über die Ergebnisse und den Verlauf.+ Gute Zusammenarbeit mit Github.
o Geringe Anpassungmöglichkeiten.
- Ausführung und Dokumentation automatisierter Tests eher rudimentär.
Github
€
Beliebtester Hostingdienst für Opensource Projekte auf Basis von Git.
+ Sehr große Community.+ Für Opensource kostenlos.+ Wird von vielen Diensten unterstützt.
o Private Repositories kostenpflichtig.
- UI ist bedingt nutzerfreundlich.
Sourcetree
€
Sehr weit verbreitete GUI für Git
+ Plattformunabhängig+ Gute Abbildung der gängigen Arbeitsabläufe.+ kostenlos
o Wird bei größeren oder vielen Projekten träge.
- Anzeige der Dateihistorie und des Mergings sind verbesserungsfähig.
GitKraken
€
Vergleichsweise neue GUI für Git die versucht andere Wege der Darstellung zu gehen.
+ Plattformunabhängig+ Gute Abbildung der gängigen Arbeitsabläufe.+ Auch komplexe Aufgaben können über die UI gelöst werden.+ kostenlos.+ Gute Darstellung der Dateihistorie und Versionsvergleiche.
o Wird bei größeren oder vielen Projekten träge.o Benötigt etwas Einarbeitungszeit.
Conemu
€
Alternative Windows Console.
+ Bietet eine Vielzahl an Komfortfunktionen (Farbe, Copy&Paste, Tabbing, …)+ Kann mehrere Fenster zeitgleich verwalten.+ Durch Plugins aus dem VS heraus verwendbar.+ Kostenlos.
o Gleicher Befehlssatz wie der Windows Commandprompt.
- Keine Erweiterten Befehle oder Scripting.
WPF, UI & CO.
Prism 6.0
€
Framework zur Erstellung modularer Applikationen auf Basis diverser Xaml UI Technologien. Eignet sich besonders für komplexe Großanwendungen.
+ Bootstrapping der Anwendung.+ Regionhandling & Navigation.+ ViewModel Locator.+ Integration von DI Frameworks.+ Modulehandling / Plugins.+ Infrastruktur für Behaviours.+ DelegateCommands.+ Messagebus aka EventAggregator.+ Verschiedene Basisklassen für ViewModels.
o Bei Kleinstanwendungen eher schwergewichtig.
MVVM Light
€
Framework zur Erstellung modularer Applikationen auf Basis diverser Xaml UI Technologien.Eignet sich besonders für kleinere Anwendungen.
+ RelayCommands.+ Messagebus aka EventAggregator.+ Verschiedene Basisklassen für ViewModels.+ Design Time Data
o Die Applikationsinfrastruktur für Navigation und Bootstrapping ist nicht Teil des Frameworks.
Unitycontainer
€
IoC Container der sehr gut in Kombination mit Prism zusammen arbeitet.
+ Es gibt nur einen Typen bei dem Typen registriert und aufgelöst werden.+ Diverse Möglichkeiten um Einfluss auf die Lebenszeit von Instanzen zu nehmen.+ XML Konfiguration möglich.+ Automatische Registrierung bestimmter Typen einer Assembly möglich.+ Einsatz aspektorientierter Programmierung möglich.
o Es gibt weitaus schnellere IoC Container.o AOP wird zur Laufzeit vorgenommen und ist dadurch vergleichsweise langsam.
- Wird aktuell nicht sehr aktiv gepflegt.
Autofac
€
Umfangreicher IoC Container der sehr gut mit anderen Frameworks kombiniert werden kann.
+ Vergleichsweise schnelle Auflösung von Typen.+ Sehr umfangreiche Möglichkeiten um Einfluss auf die Lebenszeit von Instanzen zu nehmen.+ Automatische Registrierung bestimmter Typen einer Assembly möglich.+ Für diverse .Net Plattformen verfügbar.+ Konfiguration per XML und Json möglich.+ Eigene Modulinfrastruktur.+ Hervorragende Dokumentation und Pflege.
o Etwas aufwändig mit Prism zu verwenden.o Registrierung und Auflösung von Typen geschieht über unterschiedliche Klassen.
DATEN & CO.
Entity Framework
€
public IQueryable<Place> GetPlaces(int categoryId) { var places = this.dataBase.CategoryPlace
.Where(x => x.CategoryId == categoryId);
return this.dataBase.Place.Where(x => places.Any(p => p.PlaceId == x.Id));
}
public Language GetLanguage(int languageId) { return this.dataBase.Language.Find(languageId); }
Sehr umfangreicher objektrelationaler Mapper für diverse .Net Plattformen.
+ Sehr einfach und intuitiv zu nutzen.+ Gute Konfigurationsmöglichkeiten.+ Sowohl für kleine als auch große Projekte geeignet.+ Sehr aktive Community.
o Einsatz mit Nicht Microsoft Datenbanken gelegentlich schwierig.o Einfachheit täuscht darüber hinweg wie schnell man Performanceschwachstellen entwickeln kann.
- Verwirrende Releasestrategie der unterschiedlichen Versionen.
AutoMapper
€
Werkzeug zum automatischen Mappen von Daten aus einem Datenmodell in ein anderes.
+ Spart viel Zeit bei repetitiven Aufgaben.+ Bei Namensgleichheit der Properties müssen diese nicht konfiguriert werden.+ Intelligenter Umgang mit unterschiedlichen Datentypen.
- Verschiedenste Möglichkeiten der Konfiguration im Internet beschrieben die nicht mehr alle gültig sind.- Fehlergründe für Mapping gelegentlich schwer zu finden.
var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>());var mapper = new Mapper(config);OrderDto dto = mapper.Map<OrderDto>(order);
AutoMapper.EF6
€
Erweiterung des AutoMappers um Aufwände von wiederkehrender Aufgaben in Kombination mit Entity Framework zu verringern.
+ Vereinfacht wiederkehrende Aufgaben im Zusammenahng mit Entity Framework 6 noch weiter.
- Nur EF6 wird unterstützt.
var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>());
IEnumerable<OrderDto> dtos = context.Orders.ProjectToList<OrderDto>(config);
TEST, QUALITÄT & CO.
Team Foundation Server / Visual Studio Team Services
€
Tests sind integraler Bestandteile der Aufgabenverwaltung und werden über ein Webfrontend verwaltet. Automatisierte Tests können, ohne großen Aufwand, direkt in der Cloud ausgeführt werden.
+ Tests und Features können direkt verknüpft werden.+ Eindeutige Nachverfolg- / Nachvollziehbarkeit.+ Anbindung an Tools wie Excel.
o keine Offlinefähigkeit
- Halbautomatische Tests wie mit dem Test Manager sind nicht möglich.- Übersichtlichkeit kann bei vielen Tests verloren gehen.
NCrunch
€
Werkzeug mit dem automatisierte Tests kontinuierlich während der Programmierung ausgeführt werden.
+ Sehr schnelle Feedbackzyklen.+ Volle Integration ins Visual Studio.+ Sehr klare Darstellung der Testabdeckung und möglicher Fehlerstellen.+ Out-of-the-box Unterstützung für MS Test, NUnit, XUnit.net+ Umfangreiche Konfigurationsmöglichkeiten.
o Nicht für Integrationstests geeignet.o Funktionale UI
- Zugriffe auf das Dateisystem aus Tests heraus führen häufig zu Fehlern.
Xaml Styler
€
Plugin für Visual Studio um XAML Code automatisch zu formatieren.
+ Sehr einfach und leichtgewichtig.+ Xaml Dateien sind besser lesbar.
o Reformatierung des Codes kann zu Problemen bei Code-Reviews führen.
- Sehr große Dateien (>10k Zeilen) können das VS zum Absturz bringen.
MS Test
€
[TestClass] public class PersonValidationTests{ [TestMethod] public void Error_text_shall_be_provided() { var sut = new Person(); Assert.IsNotNull(sut["FirstName"]); Assert.IsNotNull(sut["LastName"]); Assert.IsNotNull(sut["BirthDate"]); }}
Testautomatisierungsframework des Visual Studios.
+ Gut geeignet für UI und Integrationstests+ Tests können ohne Zusatzaufwand im TFS Build ausgeführt werden.+ Code Coverage kann leicht erfasst werden.
o Interne Struktur von MS Test lässt nahezu keine Erweiterungen zu.
- Funktionalität unterscheidet sich von Plattform zu Plattform.
- Lässt diverse Standardfeatures moderner XUnit Frameworks vermissen (parametrisierte Tests, Auswertung von Exceptions, Propertybased Tests).
NUnit
€
[TestFixture] public class PersonValidationTests{ [Test] public void Error_text_shall_be_provided() { var sut = new Person(); Assert.That(sut["FirstName"], Is.Not.Null); Assert.That(sut["LastName"], Is.Not.Null); Assert.That(sut["BirthDate"], Is.Not.Null); }}
Sehr leistungsfähiges XUnit Testing Framework.
+ Gut geeignet für Unit und Integrationstests.+ Wird von vielen gängigen Tools unterstützt.+ Bietet die meisten Feautres der gängigen XUnit Frameworks.+ Ist sehr gut erweiterbar+ Kann für alle gängigen .Net Plattformen eingesetzt werden.
o Es wird ein Adapter benötigt um Tests in TFS und VS ausführen zu können (per NuGet installierbar)
Dynamic Specs
€
public class WhenPersonSelectionIsShown : Specifies<PersonSelectionViewModel> { public override void Given() { this.AvailablePersons = new List<Person>(){new Person()};
var repository = this.GetInstance<IRepository>();
A.CallTo(() => repository.GetPersons()).Returns(this.AvailablePersons); }
public override void When() { this.SUT.OnShow(); }
[Test] public void ThenAllAvailablePersonsAreShown() { Assert.AreEqual(this.AvailablePersons.Count(), this.SUT.Persons.Count()); }
public IEnumerable<Person> AvailablePersons { get; set; } }
Leichtgewichtige Erweiterung von NUnit und MS Test um Tests in BDD Stil zu verfassen.
+ Bietet Automocking.+ Sehr umfangreich und leicht erweiterbar.+ Erlaubt lesbarere Tests.+ Ist gut erweiterbar+ Leichtgewichtig.
o bietet vergleichsweise wenige Features moderner BDD Frameworks.
MS Test Coded UI Tests
€
Im Visual Studio integriertes Werkzeug zum automatisierten Testen von Applikationen auf UI-Ebene.
+ Sehr schnell einsatzfähig.+ Bietet eine einfache Möglichkeit der UI Automation.
o um wirklich umfassend eingesetzt werden zu können braucht es viel mehr Übung als Anfangs offensichtlich.o es empfiehlt sich die UI Map als Ausgangspunkt für eigenen Code zu verwenden.
- UI-Maps werden schnell unübersichtlich.- Das Tool „vergisst“ gelegentlich Steuerelemente.- Parameterübergabe an Methoden ungewöhnlich.- Refaktoring von UI-Maps ist sehr aufwändig.
Specflow
€
BDD-Framework mit dem Anforderungen und Tests verschmolzen werden können.
+ Anforderungen werden klarsprachlich definiert und sind der Ausgangspunkt für automatisierte Tests.+ Editor der Featurefiles verfügt über Autover- vollständigung und Code Highlightning.+ Kann mit diversen Testingframeworks genutzt werden.+ Macht die UI Maps der Coded UI Tests einfacher nutzbar.
o Das gesamte Team muss an der Pflege und Erstellung der Dateien beteiligt werden.
- Kopplung von Text und Test nur im Visual Studio verfügbar.
Fake it Easy
€
Sehr einfaches und leicht verständliches Mocking Framework welches einen umfassenden Einsatz von Interfaces verlangt.
+ Sehr einfach nutz und erlernbar.+ Tests mit FakeItEasy sind sehr gut lesbar.+ Sehr aktive Community.+ Weitreichend von anderen Frameworks unterstützt.+ Sehr gute Dokumentation.
- Kann keine konkreten Typen mocken.- Kann keine statischen Typen mocken.
Microsoft Fakes
€
[TestMethod]public void Selected_person_shall_be_removed_from_database(){ using(ShimsContext.Create()) { bool wasCalled = false; ShimPersonRepository.AllInstances.Delete =
x => { wasCalled = true; }; var sut = new PersonManagementViewModel(); sut.SelectedPerson = new Person();
sut.DeleteCommand.Execute(null); }
Assert.IsTrue(wasCalled, "Was not called!");}
Mockingfeature des Visual Studios mit dem auch konkrete Implementierungen ersetzt werden können.
+ Kann konkrete Typen mocken.+ Kann statische Typen mocken.
o Braucht ein Dupplikat der zu mockenden Assembly.
- Tests sind vergleichsweise schwer lesbar.- Mocking ist sehr langsam wenn Shims verwendet werden.
Object Filler
€
public class Person{ public string Name { get; set; } public string LastName { get; set; }}
public class HelloFiller{ public void FillPerson() { var pFiller = new Filler<Person>(); pFiller.Setup() .OnProperty(p => p.Name).Use("John") .OnProperty(p => p.LastName).Use(new RealNames(NameStyle.LastName));
var filledPerson = pFiller.Create(); }}
Framework zur automatisierten Generierung von Daten.
+ Sehr einfach verständlich.+ Sehr umfangreich.+ Bietet Implementierungen für viele Standardfälle.+ Gute Plugin-Infrastruktur um selbst Erweiterungen vorzunehmen.+ Gute Dokumentation+ Aktive Community
o Aufwändige Konfiguration führen zu repetitivem Code.
- Keine direkte Integration in Testingframeworks.
CODE QUALITÄT
ResharperBietet verschiedenste Möglichkeiten um Quellcode zu analysieren, refaktorisieren und zu verbessern.
€
Der Sprecher
Hendrik LöschSenior Consultant & [email protected]@HerrLoeschJust-About.Net
View ViewModel ModelDataBinding
BindableBaseValidateableBindableBase
ViewViewModel Model
DataBinding
„Entity ViewModel“