Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

ESRI 2011 - Workshop "Professionelle Softwareentwicklung mit ArcObjects"

Wir zeigen ihnen in diesem Workshop, wie "Clean Code Development" anhand smarter Architekturen, bewährter Design-Patterns und konsequenter Anwendung von Unit-Tests die äußere und innere Qualität ihrer ArcGIS Erweiterung verbessert.
by

Marko Apfel

on 13 January 2012

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of ESRI 2011 - Workshop "Professionelle Softwareentwicklung mit ArcObjects"

Professionell? Programmierfähigkeiten
Architektur
Toolset
Prozesse/Arbeitsweisen
Team
Qualität
Erfahrung
??? GoF
SOLID
Paketierung
... Neal Ford: Productive Programmer Developers who grew up using graphical user interfaces (OK, I’ll just go ahead and say it: Windows) don’t know many of the cool, efficient tricks of the trade of the Really Smart Guys of yesteryear. Developers today are not running their computers, they are walking them. prefer typing over mousing
typing is faster than navigating 10 Fingersystem lernen
http://de.schreibtrainer.com/ Hardware
Tastatur mit TrackPoint nehmen
Finger weg von der Maus! Workshop: "Professionelle Softwareentwicklung mit ArcObjects" Workshop
Theorie
Praxis
Überraschung Shortcuts & Accelerators lernen
zeitnah & nicht durch Listen lesen
nachschlagen & mehrfach wiederholen
laut sagen - die Kollegen freuts ;-)
Paircoding: gegenseitiges Coaching Jochen Manegold & Marko Apfel Software Craftmanship & Clean Code
Clean Code Developer Ærlighed i små ting er ikke nogen lille ting. QUALITÄT Meetingritis
Interrupts Desktop- & Tray-Benachrichtigungen ausschalten
"Sprechzeiten" einführen Win + Home extern (fallen dem Anwender auf)
intern (fallen dem SE-Team auf) Checkin-Policies
Reviewing
Coding Standards
FxCop
StyleCop
C&P-Detectoren
... Vollständigkeit des Toolsets
Versionsidentisch
Unabhängigkeit von Entwickler & Maschine
Risikominimierung (Projekt & Unternehmen)
Wissen ist gleichverteilt

Grundlage für CI "refactoring and productivity extension"
"on the fly" Code-Analyse mit Korrekturhilfe (ALT + Enter)
Codegenerierung (Templates für Files, Coderümpfe, ..)
Navigation
Unittesting-Frontend Von Trials, Spikes, Unittest, Prototypen
und Implementierungen Lernen
Forschen
Dokumentieren
Verifizieren Software Code-Wiederholungen
generische Konstrukte
Cross Cutting Concerns Logging, Transaktionen, Authorisierung, Auditing
try-catch-Blöcke
Thread-Dispatching AspectJ anno 2001
PostSharp Thread-Dispatching erleichtern das Deployment
bilden ein Paket
sind auf den ersten Blick COM-frei
Wizard-Unterstützung
User und Maschinen-spezifische Verzeichnisse
"Magie" in MSBuild-target Tipps Skript zum Aufräumen **/bin
**/obj
"%USERPROFILE%\Documents\ArcGIS\AddIns\Desktop10.0\{Addin-Id}"
"%LOCALAPPDATA%\ESRI\Desktop10.0\AssemblyCache\{Nachschauen!}" NAnt !!! Joel-Test 1. Benutzt des Team ein VCS?
2. Kann ein Build in einem einzigen Schritt durchgeführt werden?
3. Werden Builds täglich durchgeführt?
4. Gibt es eine Bug-Datenbank?
5. Werden alle Fehler behoben, bevor weiterprogrammiert wird?
6. Wird der Projektfortschritt penibel verfolgt?
7. Gibt es immer schriftliche Spezifikationen?
8. Haben die Entwickler eine ruhige, ungestörte Arbeitsumgebung?
9. Wird in vernünftige Werkzeuge investiert?
10. Gibt es spezielle Tester?
11. Ist Programmieren Teil des Job-Interviews?
12. Gibt es Usability-Tests mit absoluten Laien? Zählen Sie Ihre "JAs"! 12 perfekt
11 tolerierbar
unter 11 nicht tolerierbar viele SE-Firmen haben nur 2 oder 3
damit sind sie gegen professionellen Mitbewerb chancenlos
Microsoft & Co haben 12 rund um die Uhr! Definition?
Meßbarkeit von Anforderungen Grad, in dem ein Satz inhärenter Merkmale Anforderungen erfüllt Wartungsfreundlichkeit (Evolvierbarkeit)
Lesbarkeit
Verständlichkeit

Testbarkeit

Wiederverwendbarkeit
Flexibilität
Portierbarkeit Beeinflussen natürlich auch die externen … & TPM Qualität als eines der primären Ziele priorisieren
nicht nur WAS sondern auch WIE bewerten
Ausgliedern der QS aus allgemeinen Arbeitsbetrieb

Reviewings in allen Phasen
Problemdefinition, Anforderungsanalyse, Architektur, Bau, Test, ..

Motivieren & Aufschlauen
Technologien, Programmierkonstrukte, Arbeitsmittel
Paircoding & externes Consulting Software ist der Platz, an dem Träume gesät und Alpträume geerntet werden! Button, DockableWindow, Extension Create failing test case.
Create just enough code to compil
See that it fails (RED)
Create just enough code to make it pass
Run test, see that it passes (GREEN)
Refactor the code and test case to eliminate any duplication and simplify readability (REFACTOR) Und wo am günstigsten?
Wo ist das Erscheinen eines Fehlers am teuersten?
Bestätigung der Anforderungs-Realisierung
Regressionstests
immer auslieferbar, selten in schlechtem Zustand
Einfaches Design (SRP) integraler Part von Unit-Testing
geht (meist) auch ohne - aber: langsam, (nicht deterministische Abhängigkeiten zu Ressourcen)
kein (echter) "Unit"-Test mehr!
Mocks erlauben Isolation des SUT ("cleverer" Ersatz für Abhängigkeiten)
Mocks, Stubs, Fakes, Dummies, .. Mocking-Frameworks Überblick generieren Mocks
Verhalten definieren & verifizieren
state-based vs. behavioral testing
Rhino Mocks, Moq, Typemock Isolator Wir haben keine Zeit den Zaun zu reparieren,
weil wir damit beschäftigt sind die Hühner einzufangen. verifiziert Logik hinter der "Schnittstelle" einer Komponente
trivial: public, internal, protected
!trivial: private, (sowieso keine Schnittstelle)
Qualitätssteigerung (TDD) Fehler frühzeitig finden/lokalisieren (kleine Code-Einheiten)
seiteneffektfreie Änderungen/Refactoring
Trennung von Debugging- und Produktions-Code
Unittesting fördert ein besseres Code-Design (Trennung von Daten, Applikations-Logik und GUI)
Dokumentation/Vereinfacht die Wartung
Unit-Tests sind Code-(Verwendungs-)Beispiele
Liefert eine „Test-History“, Statistik

schneller Zugang zur Logik, kein App-Start (AGD)

Eitelkeit des Entwicklers: Tester vs. Software*
Unit-Tests geben ein besseres Lebensgefühl, weil man nicht ständig über versteckte Bugs grübeln muss ;-) Motivation Überblick RhinoMocks Rhino Mocks vs. Typemock Isolator Template Method
(Schablonenmethode) http://www.joelonsoftware.com/articles/fog0000000043.html Motivation IT-Infrastruktur Techniken Versioning Control Systeme Continuous Integration (CI) Bugtracking Issue-Tracking für SE
Workflow (wer, was, wann)
Statistik (FAQ, Skills)
SLA-Einhaltung Collaboration (Zusammenarbeit) gemeinsam genutzte Informationsbasen
Fertigkeiten, Ressourcen, Dokumentationen
Ideensammlung, Glossary
Conferencing (Video, Whiteboard)
Wikis, Sharepoint

Projekt-Doku (Architektur, Fundamentals, ..) Idee forciert durch XP (Kent Beck), aber älter
Änderung -> vollständiges Neubilden und Testen
sofortige Unit-Tests entdecken Fehler schnell
Integrations-Probleme werden laufend entdeckt und behoben (gefixt) – nicht erst kurz vor einem Meilenstein
konstante Verfügbarkeit eines lauffähigen Standes für Demo-, Test- oder Vertriebszwecke
„Positive Erziehung“ des Entwicklers ;-) Requirement Management Anforderungen systematisch erfassen
Abhängigkeiten verbinden
Impactanalysen (CR zu Implementierung & vice versa!) IDE & Co reichhaltiges Toolset
Produktivität erhöhen
Kreativität freien Lauf lassen Produktivität Einiges mehr! Usability nutzen Arbeitsorganisation Automatisieren CMD, BAT
PowerShell
FinalBuilder
Ant, NAnt & Co Skills ausbauen jedes Quartal ein IT-Buch lesen
jedes Jahr 1 neue Programmiersprache lernen

DEV-Community
Magazine, Twitter, Blog, ..
Coding-Dojos, Open Spaces, .. "Speed me up - Scotty" Toolset anpassen
Launchy, ReSharper, OneNote, ..
Keymaps for ReSharper
Keyboard Jedi
Key Promoter (Eclipse, IntelliJ) Ethik Programmierkonstrukte
Exception-Handling
Generische Datentypen
Enumerable statt Listen
Frameworks
einheitliche IoC-Container
Coding-Guidelines Effektivität von
QS-Maßnahmen (effektive und effiziente)
Stellrädchen Standards schaffen Standards verifizieren Initiativen SE wird erwachsen Patterns Tools ReSharper Prozesse, Methodiken, .. Trio Bagatelli Addins TDD
Test Driven Development Unit-Testing Mocking Realisierung Aspekt Orientiertes Programmieren DevTree Inversion of Control Metriken Productivity Power Tools verwendete Patterns SourceTree(s) Komponentenorientierung
Architektur
Programmieren gg Interfaces
Trennung von Verantwortlichkeiten
Architekt/Programmierer
Spezialisten für Komponenten CCD-Postkarten
Zielgruppe
Einzelnes Männlein: Single Developer
Drei Männlein: Team
Damit wird beschrieben, ob ein Baustein von einem Entwickler alleine sinnvoll umgesetzt werden kann, oder ob dazu die Mitwirkung des Teams notwendig ist.

Werte
Die anderen vier Symbole stehen für die Werte des CCD Wertesystems. Sie beschreiben, wie stark der Einfluss des Bausteins auf den jeweiligen Wert ist.
Baum: Evolvierbarkeit
Haken: Korrektheit
Zahnrad: Produktionseffizienz
Spiegel: Reflexion BDD: Given, When, Then MSpec: StoryQ: Seiri oder Organisation (sortieren)
Entferne Unnötiges von deinem Arbeitsplatz
Modularisierung: Code sollte dort stehen, wo man er auch hingehört
Seiton oder Ordentlichkeit (aufräumen)
Räume deinen Platz auf!
Vergeben geeigneter Namen, Code-Strukturierung, Lesbarkeit
Seiso oder Sauberkeit (wienern)
befreie den Arbeitsplatz von Abfall, Müllspuren
Entmülle deinen Code (Kommentaren, auskommentierten Codezeilen, ..)
Seiketsu oder Standardisierung
Konsens darüber, wie der Arbeitsplatz sauber gehalten werden soll
konsistenter Codierstil und gemeinsam in der Gruppe befolgte Praktiken
Shitsuke oder (Selbst-)Disziplin
Disziplin aufbringen, den Praktiken zu folgen, seine Arbeit regelmäßig zu überdenken und bereit zu sein, sich zu ändern Endspurt Gewinnspiel / Sponsoren NDepend (Patrick Smacchia)
1 Pro License
Typemock (Gil Zilberfeld, Avi Hein)
2 Isolator .NET, 1 Isolater C++
ReSharper (Hadi Hariri)
1 License
.NET Reflector (Hannah Jermy)
5 single user license VSPro
LINQPad (Joe Albahari)
1 Premium Single-User License
PostSharp (Britt King)
5 Professional Personal Licenses M
E
R
C
I Idee! Qualitätsbewertung von Sourcecode (>1970)
"Software an sich messen"
Verbesserung messen, Ausgangsituation vs. Delta
Maßzahl zur Bewertung
statische vs. dynamische Codeanalyse
Eigenschaften: eindeutig, objektiv, automatisierbar, .. LOC - Lines of Code
LLOC/ELOC, CLOC/NCLOC, ..
CC - Cyclomatic Compexity/McCabe
CC11 -> 0.28; CC74 ->0.98
Halstaed
Aufwand für Testen & Wartung
wirklich gutes Maß!
WMC - Weighted Methods per Class
Ca, Ce - afferent & efferent coupling
Fan in: andere Klassen referenziert X
Fan out: X referenziert andere Klassen DEMO NDepend LINQPad SOLID Paketierung CCP (Common Closure Principle)
CRP (Common Reuse Principle)
...

SDP (Stable Dependencies Principle)
SAP (Stable Abstractions Principle)
... DSM Quo Vadis? klassisch DVCS Organisation von
Namespaces Abhängigkeiten
DSM
CQL Code
Software*s Eitelkeit
Verifiziert Schnittstelle fehlerfreiere Software
leichtgewichtige Architektur
Regressionstests
Dokumentation
schneller Zugang = cleverer Ersatz für Abhängigkeiten
erlauben Isolation des SUT ("cleverer" Ersatz für Abhängigkeiten)
integraler Part von Unit-Testing
Mocks, Stubs, Fakes, Dummies, .. Deployment-Einheit
einfach zu verteilen
XCopy / XDel
registrierungsfrei
ggf. user-spezifisch
Company-Shares
signierbar, administrierbar, sicher
ZIP (MSBuild-Ausgabe) Überblick One single checkout should start you up! DEMO DEMO DEMO Keyboard Jedi
Keymaps for R#
http://blog.drorhelper.com/2009/05/15-resharper-keyboard-shortcuts-you.html System-Umwelt-Diagramm Komponenten-
Architektur DEMO You're welcome Git Extensions
git://github.com/Esri/Esri2011.git DEMO Lizenzen binden
Threading Chain of Responsibility DEMO Wizard Hinter den Kulissen Target
Add-in bauen (compilieren, zippen)
Add-in registrieren (& Kopie in Userfolder) DEMO Template Method
(Schablonenmethode) Composite
(Kompositum) Beispiel-Code GoF-Beispiel UriAnalyzer
Kompositum-Pattern
Schablonenmethode
LINQPad (optional)
SimpleLinqCode DEMO Solution Navigator
• Rooted View
• Navigation zu Klasse, Member, ..

Quick Access
• Zugriff auf sooooo vieles
○ add class
○ font
○ line numbers Tab Well UI
• Pinning
• Farben für Projekte

Assy-Referenzen
• Recent List
• grüner Haken

Scrollbar
• bunte Marker
• Vorschau Workflow-Flexibilität
keine Rename-Probs
Merge-Unterstützung
Performance You cannot expect to build a first-class application
unless you use the best available tools.
(MSDN-Magazine 2004/Juli) Helferlein Red-Gate Reflector Fusion Logger Disassembler
unzählige Plugins
Metadaten verfizieren Obfuscator einsetzen! DEMO Konzept IoC/DI EsriDE.Trials.CastleWindsor
EsriDE.Trials.CastleWindsor.DI.Fixture
EsriDE.Samples.ContentFinder
EsriDE.Samples.ContentFinder.AgdAdapter.Builder
Full transcript