Communardo Software GmbH Lösungen aus Leidenschaft für Netzwerke
Communardo Software GmbH Leistungsportfolio - Kompetenzen
Folie 3
Communardo Software GmbH Referenten
Effiziente Softwareentwicklung
Effiziente Softwareentwicklung Was ist Effizienz?
Effiziente Softwareentwicklung Warum beschäftigt uns dieses Thema?
Effiziente Softwareentwicklung Kriterien für den Erfolg von Projekten.
Effiziente Softwareentwicklung
Effiziente Softwareentwicklung
Probleme in der Softwareentwicklung
Effiziente Softwareentwicklung
Effiziente Softwareentwicklung
Effiziente Softwareentwicklung
Buildmanagement
Entwickeln im Team
Folie 17
Entwickeln im Team
Ursachen für Fehler
Continous Integration
Continous Integration
Continous Integration
Vorteile Continous Integration
Deployement
Vorteile Build Management
Effiziente Softwareentwicklung
Motivation für MDA
AndroMDA
Andromda Generierungsprozess
Cartridges
Andromda Standardarchitektur
Folie 32
MDA - Buildmanagement
Versionierung von Modellen
MDA - Releasemanagement
MDA - Probleme
Einfluss auf den Softwareprozess
Andromda - Vorteile
Andromda - Nachteile
Open issues
Effiziente Softwareentwicklung
Software Factories
Software Factories
Software Factories
Software Factories
Software Factories
Software Factories
Effiziente Softwareentwicklung
Test & Quality
Folie 50
Frontendtests
Selenium
Praktikanten. Diplomarbeiten.
Effiziente Softwareentwicklung

Communardo Software GmbH Lösungen aus Leidenschaft für Netzwerke

1. Communardo Software GmbH Lösungen aus Leidenschaft für Netzwerke

2. Communardo Software GmbH Leistungsportfolio - Kompetenzen

Themen
Produkte
Technologien
Integrierte Enterprise 2.0 Lösungen
• Knowledge
Management
• Microsoft Office
SharePoint Server
• Intranet 2.0
• Microsoft Office
Project Server
• Project & Team
Collaboration
• Atlassian Confluence
Enterprise Wiki
• Communardo
ProductivityNet
Publisher
SurveyFramework
• Individuelle SoftwareEntwicklung
• auf Basis Java/JEE,
.NET und PHP
• Technische Anforderungsanalyse
und Softwarekonzeption

3. Folie 3

Communardo Themen
Moderne IT Lösungen im Enterprise 2.0
Knowledge
Management
• Wissensportale
• Enterprise Wikis
• Community Portale
• Corporate Search
• Corporate Tagging
Intranet 2.0
• Weblogs für Firma,
Bereich und Mitarbeiter
• Wissenswiki
• RSS-Feeds
• Social Bookmarks
• Personalisiertes Tagging
Project & Team
Collaboration
• Team Workspace
• Corporate Blogging
• Collaboration Workflow
• Security Workspace
• Virtuelle Projekträume

4. Communardo Software GmbH Referenten

Dipl.-Inf. Torsten Lunze
Software Architekt
www.communardo.de
www.xing.com/profile/torsten_lunze
Dipl.-Inf. Tino Schmidt
Teamleiter CMT
www.communardo.de
www.xing.com/profile/Tino_Schmidt5

5. Effiziente Softwareentwicklung

1. Motivation
2. Build Management
3. MDA
4. Software Factories
5. Test & Reports

6. Effiziente Softwareentwicklung Was ist Effizienz?

DIN EN ISO 9000:2000
„Effizienz ist das Verhältnis
zwischen dem erzielten
Ergebnis und den
eingesetzten Mitteln.“
> Maß der Wirtschaftlichkeit
Quelle: http://www.spmconsult.de/Effizienz.jpg

7. Effiziente Softwareentwicklung Warum beschäftigt uns dieses Thema?

Standish Group führt seit 1994 Umfragen zum Erfolg von
Softwareentwicklungsprojekten durch -> CHAOS Report
1994
1996
erfolgreich
1998
behindert
2000
gescheitert
2002
2004
0%
20%
40%
60%
80%
100%

8. Effiziente Softwareentwicklung Kriterien für den Erfolg von Projekten.

Termin eingehalten
Kosten eingehalten
Anforderungen erfüllt

9. Effiziente Softwareentwicklung

… führt zu:
- ertragreichen Projekten
- zufriedenen Kunden
- zufriedenen Mitarbeitern
- Wachstum und Arbeitsplätzen
- Freiraum für Innovationen
Die Summe zeigt: ein wichtiges Thema.

10. Effiziente Softwareentwicklung

Schwerpunkt dieser Vorlesung:
- Betrachtung technischer Einflüsse
- Vorstellung MDA, Produktlinien
Was ist nicht Inhalt dieser Vorlesung:
- Projektmanagementthemen
- Teamstrukturen, Zusammenarbeit
- Kunden – Auftragnehmerbeziehungen

11. Probleme in der Softwareentwicklung

Zu schneller Start in
die Implementierung
Systematische Tests fehlen
Copy&Paste - Code
Standards/Richtlinien
werden nicht eingehalten
unklare
Anforderungen
Analyse
Kommunikation
Entwurf
Implementierung
lange Implementierungszeiten
Integration
& Test
nicht ausreichende
Dokumentation
instabiles System
Vorgehensmodell fehlt
Installation
wiederkehrende
Implementierungsaufgaben durch
fehlende
Modularität
hohe Fehlerraten
Qualitätsmerkmale
werden nicht festgelegt.
Kundenzufriedenheit sieht anders aus.

12. Effiziente Softwareentwicklung

Implementierung
Frameworks und Bibliotheken nutzen
- generische Lösung für verwandte Probleme
- aktive Wiederverwendung
- z. B. Jakarta Commons Bibliotheken
Generierung nutzen
- in der integrierten Entwicklungsumgebung
- bei der Erstellung von WebServices
- für ganze Projekte und Module

13. Effiziente Softwareentwicklung

Infrastruktur
Einheitliche Entwicklungsumgebung
- Pakete mit Voreinstellungen bereitstellen
- Eclipse Distribution: Yoxos
Wikis & FAQs
- Links der Umgebungen (Dev, TuA, Live)
- Entwicklungshandbuch
- technische Beschreibungen, Zugangsdaten

14. Effiziente Softwareentwicklung

1. Motivation
2. Build Management
3. MDA
4. Software Factories
5. Test & Reports

15. Buildmanagement


Teil des Konfigurationsmanagements
Erstellung eines Softwarepaketes (Buildskripte)
Verteilen der Softwarepakete (Deployment)
Berechnung von Softwaremetriken
Automatisierung dieser Punkte
Tools:
• Ant
• Maven
• Continous Integration (Continuum, Cruise Control)
• Shell Skripte
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 15

16. Entwickeln im Team

SVN Repository
Commit
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 16

17. Folie 17

Entwickeln im Team
SVN Repository
Update
Commit
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 17

18. Entwickeln im Team

SVN Repository
Update
Commit
Compiler Error!
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 18

19. Ursachen für Fehler


Fehlerhafter Stand wurde eingecheckt
Bearbeitung gleicher Module
Fehler im lokalen Code
Falsche Konfiguration
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 19

20. Continous Integration

SVN Repository
Build
Update
Test
Commit
Report
Compiler Error!
Fehler im Build
aufgetreten?
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 20

21. Continous Integration

SVN Repository
Update
Commit
Build
Compiler Error!
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 21

22. Continous Integration


Definition Martin Fowler: „Continuous Integration is a
software development practice where members of a team
integrate their work frequently, usually each person
integrates at least daily - leading to multiple integrations
per day. Each integration is verified by an automated
build (including test) to detect integration errors as quickly
as possible. Many teams find that this approach leads to
significantly reduced integration problems and allows a
team to develop cohesive software more rapidly.”
[http://martinfowler.com/articles/continuousIntegration.html]
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 22

23. Vorteile Continous Integration


Schnelles Auffinden von Fehler
Automatisierung von Tests
Automatisierung der Überprüfung von Metriken
Bereitstellung einer aktuellen Version zum Testen
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 23

24. Deployement

Applikation
Code
DB
Lokal n

Applikation
Code
Applikation
Code
DB
Applikation
Applikation
DB
DB
DB
Continous
Integration
Testsystem
Lokal 1
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 24
Wirksystem

25. Vorteile Build Management


Standard Build Umgebung
• Früher: eigenes ANT Build Framework
• Heute: Maven (1 und 2), Nutzung der Standardfunktion soweit es
geht
Nutzung von Funktionen wie Continous Integration
Bündelung und Bereitstellung von Software
Kontinuierliche Generierung von Reports
Ähnliche Struktur der Projekte
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 25

26. Effiziente Softwareentwicklung

1. Motivation
2. Build Management
3. MDA
4. Software Factories
5. Test & Reports

27. Motivation für MDA


Welchen Vorteil bringt uns eine MDA Lösung?
Anforderungen
• Return of Investment
• Erlernbarkeit
• Stabilität
• Geringe Kosten für Tools
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 27

28. AndroMDA


Java Sourceforge Projekt
• Version 3.2 im weiteren verwendet
Modellierung erfolgt über UML
• Anpassungen durch UML Profile (Stereotypen und Tagged
Values)
Generierung anhand von Velocity Templates
Bündelung von Templates und Konfigurationen in Cartridges
Anpassung an generierten Code durch
• Vererbung
• Mergemappings
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 28

29. Andromda Generierungsprozess

© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 29

30. Cartridges


Vorgefertige Cartridges:
• (N)Hibernate
• EJB3
• Spring
• Webservices (AXIS, Xfire)
• Struts
AndroMDA und Cartridges können direkt verwendet werden ohne
Generator oder Templates anzupassen oder zu erstellen.
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 30

31. Andromda Standardarchitektur

© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 31

32. Folie 32

Modelliert
RentalService
+getAllCars() : List
+getCustomersByName( name : String )
CarDao
+load( id : Long ) : Car
+loadAll() : Car
+create( car : Car ) : Car
+update( car : Car ) : void
+remove( car : Car, id : Long ) : void
+allCarsRented() : boolean
Car
-serial : String
-name : String
-type : String
-id : Long
-cars
0..*
+isRented() : b oolean
+getOwner() : Person
RentalServiceBase
=>
CarDaoBase
+getAllCars() : List
+getCustomersByName( name : String )
#handleGetAllCars()
#handleGetCustomersByName( name : String )
#getCarDao() : CarDao
#getPersonDao()
CarImpl
+allCarsRented() : boolean
+create( car : Car ) : Car
+load( id : Long ) : Car
+remove( car : Car, id : Long ) : void
+loadAll() : Car
+update( car : Car ) : void
#handleAllCarsRented() : b oolean
Einmalig
generiert
RentalServiceImpl
#handleGetAllCars()
#handleGetCustomersByName( name : String )
+isRented() : boolean
CarDaoImpl
#handleAllCarsRented() : boolean
Person
Generiert
ServiceLocator
: RentalService
© Communardo Software GmbH · Fon +49 (0) 351 833820 ·+getRentalService()
[email protected]
· www.communardo.de
Car.hbm.xml
-name : String
-birthday : Date
+getCars() : Collection
Person.hbm.xml
PersonDao
Folie 32
-owner
1

33. MDA - Buildmanagement


Integration der Generierung in Maven 2
Kleine Änderung im Modell
• Ziel: Nur die Dateien neu generieren, die davon betroffen
sind
• Lösung:
• Generierung nur eines bestimmten Packages
• Generierung nur durch ausgewählte Cartridges
• Die Festlegung was neu generiert werden soll, wird nicht
automatisch sondern muss vom Entwickler getroffen
werden.

34. Versionierung von Modellen


Problem: XML Format eines Modells komplex
• Mergen nahezu unmöglich
Lösung:
• Aufsplitten der Modelle in Schichten (FE/Service/Backend)
und Komponenten (User/Evaluation/Security…)
• Mehrere Modelldateien
• Nutzen von Locks in Versionskontrollen
Alternativ:
• Teamworkserver (Checkin/Checkout über MagicDraw)
Generierte Dateien nicht in Versionskontrolle

35. MDA - Releasemanagement


Neues Release 2 wird entwickelt.
Das Modell für Release 2 wird umfangreich angepasst.
Es tritt ein Bug im Release 1 auf.
Der Bugfix benötigt eine Änderung des Modells für Release 1.
Die Änderung muss auch in Release 2 nachgezogen werden…
Automatismus?

36. MDA - Probleme


Konfliktlösung in Modellierung falls Entwickler gleichzeitig ein Modell
bearbeitet haben
BPM4Struts Cartridge zu unübersichtlich verwendbar
• Modellierung zu umständlich mit MagicDraw
• Zusätzlich hoher Lernaufwand um Cartridge zu verstehen
Bugs die durch Cartridge / Generator erzeugt werden sind
schwieriger zu beheben
Lösungen die an Standardarchitektur vorbeigehen:
• Erstellung von nichtgenerierten Klassen
• Keine Modellierung im Modell
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 36

37. Einfluss auf den Softwareprozess


Learning Curve: „Lernen statt Arbeiten“
• Lernaufwand höher: Zu verstehen was wird wie wo generiert
• Dafür Einsparung von Arbeit: Kleine Anpassung im Modell
Große Änderung im Code (anstatt per Hand)
Bei der Konfiguration des Projektes:
• Auswahl der zu nutzenden Cartridges
• Anpassung, Erweiterung an Architekturforderungen
Während des Projektes:
• Fehlerbehebung und Anpassung der Cartridges
• Zu entscheiden: Passe ich die Implementierung an oder suche
ich eine generische Lösung durch Veränderung der Cartridges?
Nachdem Projekt:
• Einfluss der Erfahrungen
• Wiederverwendung in neuen Projekten

38. Andromda - Vorteile


Vorgefertige Cartridges (Hibernate, Spring) sind Out Of The Box verwendbar
Müssen in anderen System i. d. R. erst von Hand geschrieben werden
Anpassbarkeit gegeben
Schnelles Entwickeln: Modell in Code
Gerine Fehleranfälligkeit durch generierten Code
Sicherstellung von Architekturrichtlinien
Konsistenz zwischen Code und Modellen
Erhöhung der Entwicklungsgeschwindigkeit
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 38

39. Andromda - Nachteile


Muss mit den vorgefertigten generierten Konzept der 3-Schichten-Architektur
leben
Trennung des Plattformspezifisches Modell nicht gegeben (für Andromda 4
geplant)
Verknüpfung von mehreren AndroMDA Projekten nur durch Anpassung von
Cartridges
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 39

40. Open issues


Stabilität des Datenmodells
• Auswirkungen auf Datenbank
Entfremdung des Entwicklers vom Code
Herstellerabhängigkeit durch Verwendung der Tools
Modellierung im Team
Releasemanagement
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 40

41. Effiziente Softwareentwicklung

1. Motivation
2. Build Management
3. MDA
4. Software Factories
5. Test & Reports

42. Software Factories

- aktuell: Begriff stark von Microsoft geprägt
- Paradigma der industriellen Softwareentwicklung
- Aufsetzen von Produktlinien
Ziele: Risiko, Kosten, Fehlerraten minimieren
Produkt-/ Projekteinführungszeiten verringern
hohe Qualität beibehalten / erreichen

43. Software Factories

Prinzipien:
- Geschäftsorientierung
- Domänenentwicklung und Applikationsentwicklung
- Trennung von Produkt übergreifenden
und Produkt spezifischen Funktionen
- Architektur zentrierte Entwicklung
- Varianten Management

44. Software Factories

Vorgehen:
Quelle: iX 5/2008. „Softwarewiederverwendun. Produktlinien – die Zukunft der industriellen Softwareentwicklung“

45. Software Factories

Erstellung konkreter Produkte - Bindungszeitpunkte
Funktionsplattform
Konkrete Variante

46. Software Factories

Erstellung konkreter Produkte - Bindungszeitpunkte
Funktionsplattform
Konkrete Variante

47. Software Factories

Herausforderungen:
- Trennung in Domän- und Applikationscode
- Änderung und Weiterentwicklung
- Dokumentation u. Information bei Änderungen
- Build Management
Teamorganisation:
- Abstimmung über Änderung am Domäncode
- Durchführung von Änderungen

48. Effiziente Softwareentwicklung

1. Motivation
2. Build Management
3. MDA
4. Software Factories
5. Test & Reports

49. Test & Quality

Test & Quality
Automatisierte Test
- Junit, Mock-up Test
- Frontend Tests: Selenium
Quality Reports (Force Feedback für Entwickler)
- in der integrierten Entwicklungsumgebung (Metriken,
CheckStyle)
- im Build Prozess verankert – Maven Reports
- Nutzung technischen Know Hows

50. Folie 50

Test & Quality
Maven Reports
Syntaktische Tests
- CheckStyle, Java Doc Abdeckung
- JDepend
Semantische Tests
- PMD Report
- FindBugs Report
manuelle und automatische Auswertung möglich
>> Beispiel

51. Frontendtests


Testen der Funktionalität so nah am Anwendungsfall wie möglich
Verschiedene Frameworks:
• HttpUnit, HtmlUnit, Selenium
Vorteile Selenium:
• Testen direkt im Browser
• Testen von verschiedenen Browserderivaten mit einer Codebasis
möglich
• Testen der Frontendkomponenten (insb. Javascript, Formulare)
© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 51

52. Selenium

© Communardo Software GmbH · Fon +49 (0) 351 833820 · [email protected] · www.communardo.de
Folie 52

53. Praktikanten. Diplomarbeiten.

Aktuelle Arbeiten:
- Tagging Server
- Tag Cloud Navigationen
- Performance Optimierung von Webapplikationen
Aktuelle Themen:
- Produktentwicklung,
- Enterprise 2.0,
- Visualisierung von Informationen,
- Projekt Twitter

54. Effiziente Softwareentwicklung

Vielen Dank.
English     Русский Правила