1 Zielbestimmung
Es soll ein Case – Tool programmiert werden, das eine Hilfe bei der Softwareentwicklung mit UML sein soll. Das Programm soll es ermöglichen, über Eingabemasken Use – Cases, Klassen, Verbindungen zwischen den einzelnen Klassen bzw. Use – Cases und Pflichtenhefte eingeben zu können. Wichtig ist hierbei, dass alle erstellten Objekte einzeln abgespeichert werden können im Datenaustauschformat XML. Die Komponenten sollen graphisch flexibel dargestellt werden, so sollen unterschiedliche Möglichkeiten der Detaillierung darstellbar sein. Klassen sind z.B. sowohl mit als auch ohne Attribute und Operationen darstellbar.
1.1 Musskriterien
1. Eingabe der UML – Komponenten "Klasse", "Objekt" und "Use – Case“,
eines Pflichtenheftes und
Verbindungen zwischen Komponenten über Erfassmasken
2. graphische Darstellung / Ausgabe dieser Objekte
3. variierender Detaillierungsgrad bei der Anzeige der Komponenten
4. Editiermöglichkeit der Komponenten
5. Einfache Einbindungsmöglichkeit in ein späteres Gesamttool
1.2 Wunschkriterien
1. Erstellungsmöglichkeit von Klassendiagrammen, Use – Case – Diagrammen
und
Sequenzdiagrammen
2. Möglichkeit der Eingabe von frei wählbaren Datenzusätzen
1.3 Abgrenzungskriterien
1. Es soll kein vollständiges UML-Tool erstellt werden.
2 Produkteinsatz
2.1 Anwendungsbereiche
1. Softwareengineering (im Bereich der Planung, Analyse und Design mit
UML)
2. Präsentationen von Softwareentwicklungsideen
2.2 Zielgruppen
1. Programmierer
2. Softwareentwickler, die UML verwenden
2.3 Betriebsbedingungen:
1. Benutzer sollte Erfahrungen über Softwareengineering haben
3 Produktumgebung
3.1 Software
1. JDK – Environment
3.2 Hardware
1. eine hinreichend leistungsfähige Hardware, auf der Java läuft
3.3 Schnittstellen
1. XML als Datenaustauschmöglichkeit
4 Produktinformation
4.1. Use Case Diagramme
1. Neue Komponente ( = Use - Cases, Klassen, Links, Pflichtenheft)
Akteur | Benutzer |
Vorbedingung | - |
Nachbedingung | Erfolg: Komponente angelegt |
Ablauf | Anlegung der neuen Komponente, Übergang in Edit - Vorgang |
Ausnahmen | - |
2. Komponente öffnen
Akteur | Benutzer |
Vorbedingung | - |
Nachbedingung | Erfolg: Komponente geöffnet, Daten geladen |
Ablauf | Benutzer wählt Komponente aus, die Daten werden geladen |
Ausnahmen | Falls schon eine Komponente geöffnet: Fehlermeldung |
3. Komponente editieren
Akteur | Benutzer |
Vorbedingung | Komponente geöffnet |
Nachbedingung | Erfolg: Datenveränderungen vorgenommen, in Grafik übernommen |
Ablauf | Daten einlesen, verändern und speichern |
Ausnahmen | - |
4. Komponenten speichern
Akteur | Benutzer |
Vorbedingung | Komponente geöffnet |
Nachbedingung | Erfolg: Komponente gespeichert |
Ablauf | Der Benutzer gibt den Dateinamen für die Komponente ein, diese wird gespeichert |
Ausnahmen | Komponentenname schon vorhanden: Fehlermeldung |
5. Anzeigen
Akteur | Benutzer |
Vorbedingung | Komponente geöffnet |
Nachbedingung | Erfolg: Komponente grafisch dargestellt |
Ablauf | Die gewählte Komponente wird grafisch dargestellt mit den geladenen Daten |
Ausnahmen | - |
4.2 Sequenzdiagramme
1. Komponente neu
2. Komponente öffnen
3. Komponente editieren
4. Komponente speichern
5. Anzeigen
5. Konzeptklassen und Daten
5.1. Klassendiagramm
5.2 Klasse Info
|
String info_name
String filename String info_version String erstellungsdatum String aenderungsdatum String info_autor String info_firma String kommentag |
edit(String fenstertitel, String aufrufer)
read(xml xmlobjekt) write(xml xmlobjekt) |
5.3 Klasse Klasse
|
info klasse_info
String klasse_stereotyp String klasse_eigenschaftswerte klasse_methoden: String methode_name String methode_gueltigkeit String methode_rueckgabetyp String methode_parameter String methode_zusicherung Vector klasse_methoden klasse_attribute: String attribut_name String attribut_gueltigkeit String attribut_datentyp String attribut_initialwert String attribut_zusicherung Vector klasse_attribute |
edit()
lade(String filename) save(String filename) |
5.4 Klasse Objekt
|
info objekt_info
String objekt_stereotyp String objekt_klasse String objekt_eigenschaftswerte objekt_methoden: String methode_name String methode_gueltigkeit String methode_rueckgabetyp String methode_parameter String methode_zusicherung vector objekt_methoden objekt_attribute: String attribut_name String attribut_gueltigkeit String attribut_datentyp String attribut_attributwert String attribut_zusicherung vector objekt_attribute |
edit()
lade(String filename) save(String filename) |
5.5 Klasse Verbindung
|
Info header
String beschriftung String stereotyp String zusicherung Knoten: String pfeiltyp String multiplikator String zusicherung_knoten Knoten knoten1 Knoten knoten2 |
edit()
lade(String filename) save(String filename) |
5.6 Klasse Use - Case
|
Info usecase_info
String usecase_nummer Vector usecase_attribute Vector usecase_attribute_text |
edit()
lade(String filename) save(String filename) |
5.7 Klasse Pflichtenheft
|
Info pflichtenheft_info
String pflichten_text |
edit()
lade(String filename) save(String filename) |
5.8. Klasse Topp
|
boolean klasse_offen
boolean objekt_offen boolean usecase_offen boolean verbindung_offen boolean ph_offen |
start() |
5.9 Klasse XML
XML |
char safelastchar
int internalcount int maxbytes Vector vectorarray |
loadXML(String filename)
saveXML(String filename) getChar() : char lastChar() : char writeChar(char c) getTag(int maxlength) : String writeTag(string tag, int leerzeichen) getString(intmaxlength, String tag) : String writeString(String st) skipTag(String tag) |
5.10 Klasse Start_GUI
Start_GUI |
main() |
5.11 DTD
<?xml version="1.0"?>
<!-- ================================================================
-->
<!-- Header DTD -->
<!-- ================================================================
-->
<!-- wird jeweils eingebunden in die DTDs von
-->
<!-- Objekt, Klasse, Verbindung, UseCase und Pflichtenheft
-->
<!ELEMENT header (name?, filename?, version?,
date?, lastchanged?,
author?, company?, coment?) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT filename (#PCDATA) >
<!ELEMENT version (#PCDATA) >
<!ELEMENT date (#PCDATA) >
<!ELEMENT lastchanged (#PCDATA) >
<!ELEMENT author (#PCDATA) >
<!ELEMENT company (#PCDATA) >
<!ELEMENT comment (#PCDATA) >
<!-- ================================================================
-->
<!-- Objekt DTD -->
<!-- ================================================================
-->
<!ELEMENT objekt (header, body) >
<!ELEMENT body (stereotyp?, klasse?, eigenschaftswerte?,
methode*, attribut*) >
<!ELEMENT stereotyp (#PCDATA) >
<!ELEMENT klasse (#PCDATA) >
<!ELEMENT eigenschaftswerte (#PCDATA) >
<!ELEMENT methode (name, gueltigkeit?, rueckgabetyp?
parameter?, zusicherung?) >
<!ELEMENT attribut (name, gueltigkeit?, datentyp?
wert?, zusicherung?) >
<!ELEMENT gueltigkeit (#PCDATA) >
<!ELEMENT rueckgabetyp (#PCDATA) >
<!ELEMENT datentyp (#PCDATA) >
<!ELEMENT parameter (#PCDATA) >
<!ELEMENT wert (#PCDATA) >
<!ELEMENT zusicherung (#PCDATA) >
<!-- ================================================================
-->
<!-- Klasse DTD -->
<!-- ================================================================
-->
<!ELEMENT klasse (header, body) >
<!ELEMENT body (stereotyp?, eigenschaftswerte?,
methode*, attribut*) >
<!ELEMENT stereotyp (#PCDATA) >
<!ELEMENT eigenschaftswerte (#PCDATA) >
<!ELEMENT methode (name, gueltigkeit?, rueckgabetyp?
parameter?, zusicherung?) >
<!ELEMENT attribut (name, gueltigkeit?, datentyp?
initialwert?, zusicherung?) >
<!ELEMENT gueltigkeit (#PCDATA) >
<!ELEMENT rueckgabetyp (#PCDATA) >
<!ELEMENT datentyp (#PCDATA) >
<!ELEMENT parameter (#PCDATA) >
<!ELEMENT initialwert (#PCDATA) >
<!ELEMENT zusicherung (#PCDATA) >
<!-- ================================================================
-->
<!-- Verbindung DTD -->
<!-- ================================================================
-->
<!ELEMENT verbindung (header, body) >
<!ELEMENT body (beschriftung?, stereotyp?,
zusicherung?, knoten*) >
<!ELEMENT beschriftung (#PCDATA) >
<!ELEMENT stereotyp (#PCDATA) >
<!ELEMENT zusicherung (#PCDATA) >
<!ELEMENT knoten (pfeiltyp?, multiplikator?,
zusicherungs?) >
<!ELEMENT pfeiltyp (#PCDATA) >
<!ELEMENT multiplikator (#PCDATA) >
<!ELEMENT zusicherung (#PCDATA) >
<!-- ================================================================
-->
<!-- UseCase DTD -->
<!-- ================================================================
-->
<!ELEMENT usecase (header, body) >
<!ELEMENT body (nummer?, eintrag*, ?zusicherung) >
<!ELEMENT eintrag (bezeichnung, text) >
<!ELEMENT bezeichnung (#PCDATA) >
<!ELEMENT text (#PCDATA) >
<!ELEMENT zusicherung (#PCDATA) >
<!-- ================================================================
-->
<!-- Pflichtenheft DTD -->
<!-- ================================================================
-->
<!ELEMENT pflichtenheft (header, body) >
<!ELEMENT body (text) >
<!ELEMENT text (#PCDATA) >
6. Leistungen / Funktionen
6.1 Komponenten laden
- Laden von Use-Cases, Klassen, Objekten, Verbindungen und Pflichtenheften
6.2 Komponenten editieren
- Editieren von Komponenten über Editiermasken, die auf die jeweilige Komponente zugeschnitten sind
6.3 Komponenten anzeigen
- Die unterschiedlichen Komponenten können in
einem im Editierfenster enthaltenden
Vorschaufenster angezeigt werden, hierbei
kann bei Klasse und Objekt ein Detaillierungsgrad
gewählt werden.
6.4 Komponenten speichern
- Die Daten der unterschiedlichen Komponenten werden mittels XML gespeichert.
7. Benutzeroberfläche
7.1 Grundkonzeption
Das Programm enthält eine Menüleiste mit den wichtigsten Grundfunktionen.
Über die Menüpunkte
Use - Case, Klasse, Objekt, Verbindung und Pflichtenheft erreicht man
jeweils die Punkte
"neu" und "öffnen". Es öffnet sich jeweils ein Pop - up -
Fenster zum Eingeben der Daten für die
Komponenten. Die Dialog - Fenster enthalten Eingabefelder für
die Eingabe von Namen, Methoden etc.
Attribute, Methoden etc. werden in Listen verwaltet und können
dort verändert werden.
7.2 Screenshots
1. Hauptprogramm
2. Eingabemaske für die Klasse
3. Eingabemaske für die Objekte
4. Eingabemaske für die Verbindungen
5. Eingabemaske für das Pflichtenheft
6. Editiermaske für die Use - Cases
7. Editierfenster für die Eingabe der allgemeinen Informationen zu den Komponenten
8. Qualitätsziele
Ziel | ++ | + | +- | - |
Funktionalität | + | |||
Zuverlässigkeit | + | |||
Benutzbarkeit | + | |||
Effizienz | + | |||
Änderbarkeit | ++ |