Software-Projekt - Informatik - FB3 - Uni Bremen

Transcription

Software-Projekt - Informatik - FB3 - Uni Bremen
Software-Projekt
Prof. Dr. Rainer Koschke
Fachbereich Mathematik und Informatik
Arbeitsgruppe Softwaretechnik
Universität Bremen
Wintersemester 2008/09
Überblick I
1
Antworten auf gesammelte Fragen im Wiki
Antworten auf gesammelte Fragen im Wiki
Antworten auf gesammelte Fragen im Wiki
1
Antworten auf gesammelte Fragen im Wiki
Objektorientierte Modellierung
Softwarearchitektur
Entwurfsmuster und Architekturstile
Softwaretechnik im Allgemeinen
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
3 / 27
Antworten auf gesammelte Fragen im Wiki
Objektorientierte Modellierung
Übersicht über alle UML Diagramme: Welche gibt es alle und
was ist ihr Verwendungsgebiet? (Keine Wiederholung über die
Erstellung, Eigenschaften u.ä.)
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
4 / 27
Antworten auf gesammelte Fragen im Wiki
Objektorientierte Modellierung
Anwendungsfalldiagramm
→ Übersicht von Anwendungsfällen, Zusammenhang mit Akteuren,
Beziehungen zwischen Anwendungsfällen
Klassendiagramm
→ statische Beziehungen zwischen Dingen:
Daten- bzw. Domänenmodell
Klassenentwurf
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
5 / 27
Antworten auf gesammelte Fragen im Wiki
Objektorientierte Modellierung
Sequenzdiagramm
→ Interaktionen zwischen Akteuren
Interaktionen in Anwendungsfällen
Interaktionen zwischen Komponenten der Architektur
Programmablauf (Methoden und Klassen)
Kollaborationsdiagramme
→ äquivalent zu Sequenzdiagrammen
→ heben Akteure und deren prinzipielle Interaktion hervor, Reihenfolge
tritt in den Hintergrund
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
6 / 27
Antworten auf gesammelte Fragen im Wiki
Objektorientierte Modellierung
Zustandsdiagramme
→ zustandsbasiertes Verhalten, Reaktion auf Stimuli
Modellierung von Anwendungsfällen mit Zuständen
Objektlebenszyklus
Protokolle in Architektur
zustandsbasiertes Testen
Aktivitätsdiagramme
→ Abläufe: Aktionen und ihre Reihenfolge
Modellierung von Geschäftsprozessen
Beschreibung von Anwendungsfällen
Spezifikation/Entwurf von Algorithmen
Pfadtest
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
7 / 27
Antworten auf gesammelte Fragen im Wiki
Softwarearchitektur
Außerdem aus gegebenem Anlass, zu den unterschiedlichen
Blickwinkel des Architekturentwurfs.
Konzeptionelle Sicht nach Hofmeister u. a. 2000: Data und
Control Konnektoren, Unterschiede? (Wir haben z.B. bei jeder
Verbindung beides benutzt...??)
Alternative Modellierung der Konzeptionellen Sicht mit UML?
Vielleicht ein kleines Beispiel?
Die Unterschiede und Zusammenhänge zwischen System,
Subsystem, Modul und Komponente nochmal erläutern
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
8 / 27
Antworten auf gesammelte Fragen im Wiki
Konzeptioneller Blickwinkel (Hofmeister u. a. 2000)
Conceptual Configuration
1
*
*
1
0..1
*
CConnector
CComponent
0..1
0..1
*
0..1
0..1
0..1
cbinding
cbinding
*
*
*
*
*
CPort
*
connection
*
CRole
*
*
obeys
1
Rainer Koschke (Uni Bremen)
*
Protocol
Software-Projekt
obeys
1 conjugate
Wintersemester 2008/09
9 / 27
Antworten auf gesammelte Fragen im Wiki
Konzeptionelle Sicht
Compiler
«Component»
Main
«call»
«call»
call ist ein Control-Konnektor;
ein einfacher Aufruf
«call»
«Data»
Text-Pipe
«Component»
FrontEnd
«Component»
MiddleEnd
«bind»
«bind»
Producer
«Component»
BackEnd
«bind»
«bind»
Producer
Consumer
«Data»
AST-Pipe
Rainer Koschke (Uni Bremen)
«Data»
Assembler-Pipe
Software-Projekt
Consumer
«Data»
IL-Pipe
Wintersemester 2008/09
10 / 27
Antworten auf gesammelte Fragen im Wiki
Modulblickwinkel (Hofmeister u. a. 2000)
Module (layer) A uses
module (layer) B when
A requires an interface
that B provides
Subsystem
contain
0..1
*
require
*
require
*
provide
0..1 *
Interface
provide
*
*
*
Module
0..1
*
*
*
assigned−to
Layer
*
*
*
use
Rainer Koschke (Uni Bremen)
use
Software-Projekt
*
*
0..1
contain
Wintersemester 2008/09
11 / 27
Antworten auf gesammelte Fragen im Wiki
Modulsicht
Main
Run
GetToken
Lexer
Optimizer
<<Subsystem>>
MiddleEnd
<<Subsystem>> FrontEnd
Parse
Decorate
SyntaxAnalysis
SemanticAnalysis
ControlFlowAnalyzer
ILGenerator
Run
Create
Open
Lookup
Annotate
GetText
<<Layer>>
Programrepresentation
Rainer Koschke (Uni Bremen)
TextBuffer
Generate
IL
AST
Traverse
Traverse
Software-Projekt
Wintersemester 2008/09
12 / 27
Antworten auf gesammelte Fragen im Wiki
Ausführungsblickwinkel (Hofmeister u. a. 2000)
Software
Platform
*
Communication
Mechanism
1
contain
*
*
Platform
Element
*
*
1
consume
is a
*
* use mechanism
Runtime
Communication
Entity
Path
2..*
*
Platform
Resource
assigned to
Hardware
* 1
Resource
*
*
consume
*
assigned to
*
Module
communicate over
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
13 / 27
Antworten auf gesammelte Fragen im Wiki
Ausführungssicht
Processor1
Processor2
Main
<<Thread>> *
SyntaxAnalysis
AST
Lexer
Shared Memory
SemanticAnalysis
1
Optimizer
IL
1
TextBuffer
ILGenerator
ControlFlowAnalyzer
<<Thread>>
Rainer Koschke (Uni Bremen)
Software-Projekt
1
Wintersemester 2008/09
14 / 27
Antworten auf gesammelte Fragen im Wiki
Entwurfsmuster und Architekturstile
die factory method an einem kleinen konkreten
Implementierungsbeispiel darstellen
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
15 / 27
Antworten auf gesammelte Fragen im Wiki
Fahrradladenbeispiel: Erweiterung für andere Domänen
Anforderungen:
Artikeldaten sollen von einer Datei gelesen werden können
zukünftig sollen andere Domänen unterstützt werden (Fahrrad,
Computer und Klettern)
die Objekte dieser Domänen sind unterschiedlich
notwendige Anpassungen sollen einfach realisiert werden können
Lösungsstrategien:
die Klassen der Benutzungsschnittstelle beziehen sich nur auf die
Schnittstelle der abstrakten Klasse Artikel
Datei hat gleiche Syntax für alle Domänen (nur die Inhalte variieren)
die Artikel werden beim Einlesen der Datei als Objekte erzeugt
→ aber der Leser muss doch die Konstruktoren der Objekte kennen, oder
was?
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
16 / 27
Antworten auf gesammelte Fragen im Wiki
Lösungsstrategie
GUI
Artikel
Leser
ArtikelSchöpfer
+ Preis()
+ lies(dateiname)
+ Artikel FabrikMethode(id)
id=datei.liesId()
s.FabrikMethode(id)
ComputerArtikel
FahrradArtikel
FahrradSchöpfer
ComputerSchöpfer
+FabrikMethode(id) +FabrikMethode(id)
Rahmen
create
Felge
create
Rainer Koschke (Uni Bremen)
create
Software-Projekt
if (id == ”rahmen”)
return new Rahmen
if (id == ”felge”)
return new Felge
Wintersemester 2008/09
17 / 27
Antworten auf gesammelte Fragen im Wiki
Artikelklassen
public abstract class Artikel {
double Preis () { . . . }
}
p u b l i c a b s t r a c t c l a s s F a h r r a d A r t i k e l e x t e n d s A r t i k e l {. . . }
p u b l i c c l a s s F e l g e e x t e n d s F a h r r a d A r t i k e l {. . . }
p u b l i c c l a s s Rahmen e x t e n d s F a h r r a d A r t i k e l {. . . }
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
18 / 27
Antworten auf gesammelte Fragen im Wiki
Leser
public class Leser {
ArtikelSchoepfer schoepfer ;
Leser ( ArtikelSchoepfer schoepfer ) {
this . schoepfer = schoepfer ;
}
p r i v a t e S t r i n g r e a d i d ( F i l e I n p u t S t r e a m i n ) {. . . }
}
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
19 / 27
Antworten auf gesammelte Fragen im Wiki
Leser (Forts.)
p u b l i c void l i e s ( S t r i n g dateiname ) throws java . i o . IOException {
F i l e I n p u t S t r e a m i n = new F i l e I n p u t S t r e a m ( d a t e i n a m e ) ;
String id ;
Artikel artikel ;
w h i l e ( i n . a v a i l a b l e ( ) > 0) {
id = read id ( in );
try {
a r t i k e l = s c h o e p f e r . FabrikMethode ( i d ) ;
}
c a t c h ( A r t i k e l S c h o e p f e r . Unknown Id e ) {
System . o u t . p r i n t ( ” unknown i d ” + i d ) ;
// k e e p g o i n g
}
}
in . close ();
}
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
20 / 27
Antworten auf gesammelte Fragen im Wiki
Schöpfer
public abstract class ArtikelSchoepfer {
p u b l i c c l a s s Unknown Id e x t e n d s E x c e p t i o n { } ;
a b s t r a c t A r t i k e l F a b r i k M e t h o d e ( S t r i n g i d ) t h r o w s Unknown Id ;
}
public c l a s s FahrradSchoepfer extends ArtikelSchoepfer {
F a h r r a d A r t i k e l F a b r i k M e t h o d e ( S t r i n g i d ) t h r o w s Unknown Id {
i f ( i d == ” rahmen ” ) r e t u r n new Rahmen ( ) ;
e l s e i f ( i d == ” f e l g e ” ) r e t u r n new F e l g e ( ) ;
t h r o w new Unknown Id ( ) ;
}
}
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
21 / 27
Antworten auf gesammelte Fragen im Wiki
Softwaretechnik im Allgemeinen
kleiner Exkurs über agile Softwareentwicklung im Vergleich zum
Wasserfallmodell
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
22 / 27
Antworten auf gesammelte Fragen im Wiki
Extreme Programming (Beck 2000)
Wasserfallmodell — Extreme Programming — Code&Fix
Extreme Programming (XP) ist eine agile Methode für
kleinere bis größere Entwicklerteams (max. 10-15 Personen),
Probleme mit vagen Anforderungen
und Projekte, bei denen ein Kundenrepräsentant stets greifbar ist.
http://www.extremeprogramming.org/
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
23 / 27
Antworten auf gesammelte Fragen im Wiki
Extreme Programming (Beck 2000)
Anerkannte Prinzipien und Praktiken werden extrem“ umgesetzt:
”
Code-Reviews → permanente Reviews durch Pair-Programming
Testen → ständiges Testen: Unit-Tests sowie Akzeptanztests durch
den Kunden/Benutzer
klare Struktur → jeder verbessert sie kontinuierlich durch Refactoring
Einfachheit → stets die einfachste Struktur wählen, die die aktuellen
Anforderungen erfüllt
Integration → permanente Integration auch mehrmals am Tag
Validierung:
Kunde/Benutzer ist stets involviert bei der Planung neuer Iterationen
und verantwortlich für Akzeptanztest
kurze Iterationen → Dauer in Minuten und Stunden, nicht Wochen,
Tage, Jahre
aber auch Auslassung anerkannter Prinzipien:
Dokumentation: mündliche Überlieferung, Tests und Quellcode
Planung: sehr begrenzter Horizont
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
24 / 27
Antworten auf gesammelte Fragen im Wiki
Weitere XP-Charakteristika
Kunde vor Ort
eine Metapher statt einer Architekturbeschreibung
40-Stundenwoche
Code ist kollektives Eigentum
Kodierungsstandards
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
25 / 27
Antworten auf gesammelte Fragen im Wiki
Agile versus weit voraus planende Prozessmodelle (Boehm
und Turner 2003)
Risiken agiler Methode:
Skalierbarkeit, Kritikalität, Einfachheit des Entwurfs,
Personalfluktuation, Personalfähigkeiten
Risiken weit voraus planender Prozessmodelle:
Stabilität der Anforderungen, steter Wandel, Notwendigkeit schneller
Resultate, Personalfähigkeiten
Generelle Risiken:
Unsicherheiten bei der Technologie, unterschiedliche
Interessengruppen, komplexe Systeme
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
26 / 27
Antworten auf gesammelte Fragen im Wiki
1 Beck 2000 Beck, Kent: Extreme Programming Explained.
Addison-Wesley, 2000 (The XP Series). – ISBN 201-61641-6
2 Boehm und Turner 2003 Boehm, B. ; Turner, R.: Using risk to
balance agile and plan-driven methods. In: IEEE Computer 36 (2003),
Juni, Nr. 6, S. 57–66
3 Hofmeister u. a. 2000 Hofmeister, Christine ; Nord, Robert ;
Soni, Dilip: Applied Software Architecture. Addison Wesley, 2000
(Object Technology Series)
Rainer Koschke (Uni Bremen)
Software-Projekt
Wintersemester 2008/09
27 / 27