Softwareengineering - Softwaresanierung - Projekt: XCTL
Konzepte, Stand und Ausblick
zu
„Trennung von Funktionalität und
Oberfläche“
1.
2.
Kommunikation Funktionalität - Oberfläche
1.1
1.2
Polling - Verfahren
Pushing – Verfahren
1.3
Vergleich Polling vs. Pushing (-Berechnung)
Neuentwurf „Manuelle Justage“
2.1
2.2
2.3
2.4
Analyse-Definition
Reverse-Engineering
Design / Implementation
Test
3.
Re-Engineering: Subsystem Motorsteuerung
3.1
3.2
4.
Re-Engineering: Subsystem Ablaufsteuerung
4.1
4.2
5.
Schwerpunkte
entstandene Dokumente
Schwerpunkte
entstandene Dokumente
Re-Engineering: Subsystem Oberfläche
5.1
5.2
5.3
neue Klassen
entstandene Dokumente
neue Vererbungshierarchie
6.
Neues Subsystem Utilities
6.1
6.2
6.3
7.
U_TIMER
U_FILES
U_VALUES
aktuelle Arbeiten & Ausblick
1.1 Polling - Verfahren
Oberfläche
• Methoden zur Steuerung
(beginnen mit dem Präfix „Do“)
• Methoden zum Auslesen und Setzen von Attributen
(beginnen mit „Get“ bzw „Set“)
• Methoden zum Ermitteln von Zustandsänderungen
(beginnen mit „Get“)
Funktionalität
Hardware
Abb.1 „Schichten-Kommunikation bei polling“ (Quelle: nach Balzert)
1.2 Pushing - Verfahren
Oberfläche
• Methoden zur Steuerung
(beginnen mit dem Präfix „Do“)
• Methoden zum Auslesen und Setzen von Attributen
(beginnen mit „Get“ bzw „Set“)
• Methode zum Informieren über Zustandsänderungen
(beginnen mit „On“)
Funktionalität
Hardware
Abb.2 „Schichten-Kommunikation bei pushing“ (Quelle: selbst)
1.3 Vergleich Polling vs. Pushing ( -Berechnung)
1996 hat David H. Bailey,
zusammen mit Peter Borwein und Simon Plouffe,
eine neue Formel für  entdeckt:
   161 8k4 1  8k2 4  8k1 5  8k1 6 

k 0
k


Abb.3 „Formel zur Berechnung von “ (Quelle: http://www.nersc.gov/~dhbailey/)
1.3 Polling vs. Pushing
Abb.4 „UML-Klassendiagramm polling“
(Quelle: Together®, Version 6.0)
Abb.5 „UML-Klassendiagramm pushing“
(Quelle: Together®, Version 6.0)
Abb.5 „polling vs. pushing – Funktionalität“ (Quelle: selbst)
Abb.6 „polling vs. pushing – Oberfläche“ (Quelle: selbst)
2.1 Analyse-Definition
-
???/Layoutkonventionen
Manual Adjustment/Errors/Bewertung-v1.7
Manual Adjustment/Errors/ursprüngliche Manuelle Justage-v1.0
Manual Adjustment/Analysis and Definition/Gen.Descr./Pflichtenheft-v2.1
Manual Adjustment/Test/Test Cases/neue Manuelle Justage-v1.4
2.2 Reverse-Engineering
- User Interface/Design/Gen.Description/RevE GUI-Baisklassen-v1.2
- Manual Adjustment/Design/Gen.Description/RevE Manuelle Justage-v1.6
- Steering Motors/Design/Gen.Description/RevE Motorsteuerung-v1.5
- Flow Control/Design/Gen.Description/RevE Ablaufsteuerung-v1.9
- Windows-Ressourcen/Design/Gen.Description
2.3 Design / Implementation
Subsystem: Manuelle Justage
- neues Verzeichnis: ManJust
- getrennte Implementation (derzeit Polling-Variante):
Funktionalität:
MJ_Funk.cpp
MJ_Funk.h
Oberfläche:
MJ_GUI.cpp
MJ_GUI.h
Funktionalität:
Get/ Set-Methoden  lesen/ schreiben von Parametern
Do-Methoden
 Aktionen durchführen
(z.B. Antriebsbewegung durchführen)
Is/ Has-Methoden  Statusinformationen
CanDo-Methoden
 Prüfung, ob Set/ Do-Methoden durchführbar
(z.B. Prüfung ob Bewegung durchführbar)
- bei Set/ Do-Methoden Statusinformation als Rückgabewert
bei Is/ Has-Methoden per Referenzparameter
- beim Setzen, sofortige Sicherung der Antriebsparameter in den ini-Dateien
- Benutzung von TMList und TMotor zur Motorsteuerung (ohne C-Interface)
2.3 Design / Implementation
Oberfläche:
- Problem der Verwaltung der drei Teilbereiche
nicht jedes Steuerelement separat ansprechen, sonst LOC-Explosion
- enum-Auflistung für die Steuerelemente in einem Teilbereich
- Steuerelemente können durch diesen enum und die Nummer des
Teilbereichs eineindeutig angesprochen werden (Auflösung in Ress.-Id)
- Bildung von Klassen von Steuerelementen (z.B. Positionsangaben) in einem
Teilbereich
- jeweils zwei Methoden** (zum Füllen und Freigeben bzw. Sperren) der
enthaltenden Steuerelemente
- Problem mit der Ausführungsgeschwindigkeit bei der Vielzahl an
Steuerelementen
 Startzeit von 5 Sekunden bei Celeron 1GHz
-
**-Methoden werden indirekt per Windowsbotschaft aufgerufen
 damit Verarbeitung im Hintergrund
 Startzeit von ½ Sekunde, danach füllen und freigeben/ sperren der StE
TInterfaceTimer 
TManJustage 
 TModalDlg
 TManJustageDlg
 TMotorOffsetDlg
Abb.7 „UML-Klassendiagramm
der neuen Manuellen Justage“
(Quelle: Together®, Version 6.0)
 TPsdOffsetDlg
2.4 Test
Idee: separates Testen der Funkt. und Oberfl.
Funktionalität:
- CTE-Diagramm (CTE-XL) für vollständigen Test erstellt
- aufgrund der hohen Komplexität der MJ_GUI wurde
Test-GUI implementiert
- Vorteile: einfacher Code, Vorab-Bewertung des Funkt.-Interface möglich
- Testverlauf:
• Grundfunktionen Get/ Set
• Funktionen nur mit Abh. zu Grundfunktionen
• komplexe Funktionen (Antriebsbewegungen)
- Designidee: jeden Memberzugriff auch intern über Get/ Set-Methoden
3.1 Schwerpunkte Re-Engineering Motorsteuerung
-
stärkere Datenkapselung (Attribute public  protected)
alle FRIEND Deklarationen entfernt
TMotor exportiert
Instanziierungsmöglichkeiten von TMList eingeschränkt
kommentiert und strukturiert
Wertebereich von Parametern und Rückgabewerten korrigiert
Toten Code mit Datum auskommentiert
3.2 entstandene Dokumente
- Steering Motors/Design/Gen.Description/RevE Motorsteuerung-v1.5
- Steering Motors/Design/Gen.Description/RE Motorsteuerung-v1.0
- Steering Motors/Design/Gen.Description/RE Motorsteuerung-v1.1
Abb.8 „UML-Klassendiagramm des
geänderten Subsystems Motorsteuerung“
(Quelle: Together®, Version 6.0)
4.1 Schwerpunkte Re-Engineering Ablaufsteuerung
-
Member umsortiert und “Sinneinheiten“ zusammengefasst
einheitlich strukturiert und formatiert
Wertebereich von Parametern und Rückgabewerten korrigiert
Toten Code mit Datum auskommentiert
TSteering




stärkere Datenkapselung (public  protected): neue Accessor-/ Mutatormethoden
vormals globale Symbole in TSteering aufgenommen (meist static)
alle FRIEND Deklarationen entfernt
neue POLLING-Methode zum Auslesen der Status-/ Fehlerinformationen
 Absturzursache und sonstige Fehler beseitigt
- TCmd und abgeleitete Klassen
 neue Methode zum Ermitteln des Namens des Kommandos
4.2 entstandene Dokumente
- Flow Control/Design/Gen.Description/RevE Ablaufsteuerung-v1.9
- Flow Control/Design/Gen.Description/RE Ablaufsteuerung-v1.0
- Flow Control/Design/Gen.Description/RE Ablaufsteuerung-v1.1
Abb.9 „UML-Klassendiagramm des
geänderten Subsystems Ablaufsteuerung“
(Quelle: Together®, Version 6.0)
5.1 Schwerpunkte Re-Engineering Oberfläche
- Problem: nur das letzte erzeugte Fenster bekommt alle Nachrichten
- TBasicWindow
 neue Basisklasse für alle Fenster
 Zuordnung zwischen Fensterhandle und -objekt
 Veraltung von Tastenkombinationen (nur ab Win32)
- THotKey
 neue Klasse für Tastenkombinationen, aber erst ab Win32 verfügbar
- TBasicDialog (abgeleitet von TBasicWindow)
 neue Basisklasse für alle Dialogfenster
 beinhaltet Funktionalität zum lesen/ setzen von Steuerelementen
 davon abgeleitet TModalDlg, TModelessDlg
5.2 entstandene Dokumente
- User Interface/Design/Gen.Description/RevE GUI-Baisklassen-v1.2
- User Interface/Design/Gen.Description/RE GUI-Baisklassen-v1.0
Abb.10 „UML-Klassendiagramm des
neuen Subsystems Oberfläche“
(Quelle: Together®, Version 6.0)
6.1 U_TIMER
- Timerklassen für alle Betriebssysteme 16bit, NT
- völlig oberflächenunabhängig und mit identischem Interface
6.2 U_FILES
- globale Methoden zum lesen/ schreiben von String/ Double/ Long-Werten
aus/ in ini-Dateien
- Klasse TTxtRead zum Lesen von Textdateien (Unix/ PC-Zeilenumbrüche)
eingesetzt zum Lesen der mak-Dateien (Ablaufsteuerung)
6.3 U_VALUES
globale Methoden:
- zum Runden von Double-Werten
- zur Zahlenkonvertierung zwischen String und Long / String und Double
Abb.11 „UML-Klassendiagramm
zum Subsystem Utilities
(Timervererbung) “
(Quelle: Together®, Version 6.0)
7. aktuelle Arbeiten
-
Sammlung und Auswahl von Kommunikations-Konzepten
-
Testfälle und Test der Manuelle Justage GUI
7. Ausblick
-
Vorstellung des Neuentwurfs bei der Physik
-
Re-Engineering (schnelle Trennung): Alte Manuelle Justage und
Topographie
-
Untersuchung ob Regelwerk zur schnellen Trennung ableitbar

MJ_Stand_27.08.02