EIS - Implementierung eines Energie

Werbung
EIS
Implementierung eines
Energie-Informationssystems (Endbericht)
Projektgruppe Energie-Informationssyteme
Daniel Aarden, Ole Behrens, Malte Diehl, Hannes Dillwitz,
Simon Droste, Tammo Filusch, Florian Frische, Winfried Klinker,
Jens Plüster, Dirk Räder, Thorben Witt
30. September 2006
Projektgruppe Energie-Informationssysteme
Carl von Ossietzky Universität Oldenburg
Department für Informatik
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Inhaltsverzeichnis
1 Einleitung
1.1
12
Einführung in den Energiemarkt . . . . . . . . . . . . . . . . . .
13
1.1.1
Begriffe aus der Energiewirtschaft . . . . . . . . . . . . .
13
1.1.2
Weitere EIS-spezifische Begriffe . . . . . . . . . . . . . . .
14
2 Übersicht über das Energieinformationssystem (EIS)
16
2.1
Modellierter Weltausschnitt . . . . . . . . . . . . . . . . . . . . .
16
2.2
Implementierte Funktionen . . . . . . . . . . . . . . . . . . . . .
17
3 Anforderungen an das Produkt
20
3.1
Aus dem Weltmodell abgeleitete Systemabgrenzung
. . . . . . .
20
3.2
Funktionale Anforderungen . . . . . . . . . . . . . . . . . . . . .
21
3.2.1
Datenhaltung und -zugriff . . . . . . . . . . . . . . . . . .
21
3.2.2
Dateneingabe und -austausch . . . . . . . . . . . . . . . .
22
3.2.3
Datenbasis . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.2.4
Energiehandel . . . . . . . . . . . . . . . . . . . . . . . . .
24
3.2.5
Entscheidungsunterstützung . . . . . . . . . . . . . . . . .
24
3.2.6
Fahrplanmanagement . . . . . . . . . . . . . . . . . . . .
26
Nicht-funktionale Anforderungen . . . . . . . . . . . . . . . . . .
27
3.3.1
Benutzbarkeit . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.3.2
Zuverlässigkeit . . . . . . . . . . . . . . . . . . . . . . . .
27
3.3.3
Effizienz . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.3.4
Leistungsverhalten . . . . . . . . . . . . . . . . . . . . . .
27
3.3.5
Wartbarkeit/Erweiterbarkeit . . . . . . . . . . . . . . . .
28
3.3.6
Skalierbarkeit . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.3.7
Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.3.8
Dokumentation . . . . . . . . . . . . . . . . . . . . . . . .
28
Hinzugefügte und entfallene Anforderungen . . . . . . . . . . . .
29
3.3
3.4
4 Umsetzung der Anforderungen
4.1
30
Technologien . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
4.1.1
Programmiersprache . . . . . . . . . . . . . . . . . . . . .
30
4.1.2
Datenhaltung . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.1.3
Grafische Oberfläche . . . . . . . . . . . . . . . . . . . . .
31
4.1.4
Datenaustausch . . . . . . . . . . . . . . . . . . . . . . . .
34
2
EIS - Energie-Informationssystem
4.2
4.3
4.4
Projektgruppe Energie-Informationssyteme
Konzepte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.2.1
Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.2.2
Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . .
41
4.2.3
Transaktionskontrolle . . . . . . . . . . . . . . . . . . . .
43
4.2.4
Rollenbasierte Sicherheit . . . . . . . . . . . . . . . . . . .
45
4.2.5
Benutzbarkeit/Usability . . . . . . . . . . . . . . . . . . .
47
Softwarearchitektur . . . . . . . . . . . . . . . . . . . . . . . . . .
49
4.3.1
Datenhaltung . . . . . . . . . . . . . . . . . . . . . . . . .
51
4.3.2
Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
4.3.3
Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
Ablauf der Implementierung . . . . . . . . . . . . . . . . . . . . .
54
5 Implementierung der einzelnen Funktionen
5.0.1
5.1
5.2
5.3
5.4
56
ReturnCode-Rückgabewerte . . . . . . . . . . . . . . . . .
56
Stammdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
5.1.1
Systemnutzer . . . . . . . . . . . . . . . . . . . . . . . . .
57
5.1.2
Kunden und -verträge, Tarife und Lastprofile . . . . . . .
62
5.1.3
Stromlieferanten, Lieferangebote und -verträge . . . . . .
75
5.1.4
Bilanzkreise und Regelzonen . . . . . . . . . . . . . . . .
81
EEX-Handel
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
88
5.2.1
Zugangsdaten zur Energiebörse . . . . . . . . . . . . . . .
89
5.2.2
Abgabe und Bearbeitung von Angeboten . . . . . . . . .
91
5.2.3
Bestätigte Lieferungen . . . . . . . . . . . . . . . . . . . . 100
5.2.4
Aktuelle Marktdaten der Energiebörse . . . . . . . . . . . 105
5.2.5
EEX-Parser . . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.2.6
Die Funktionsweise von EEX.exe . . . . . . . . . . . . . . 108
Entscheidungsunterstützung . . . . . . . . . . . . . . . . . . . . . 109
5.3.1
Lastprognosen . . . . . . . . . . . . . . . . . . . . . . . . 109
5.3.2
Störungsverwaltung . . . . . . . . . . . . . . . . . . . . . 115
5.3.3
Kaufempfehlungen . . . . . . . . . . . . . . . . . . . . . . 120
Fahrpläne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
6 Tests
139
6.1
Datenbankzugriff . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
6.2
Webservicetests . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
6.3
Systemtests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6.4
Installationstest . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
6.5
Lasttests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
3
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
7 Vorgehensmodell
7.1
7.2
148
Scrum - Entwicklungsmodell für das EIS . . . . . . . . . . . . . . 148
7.1.1
Agile Softwareentwicklung . . . . . . . . . . . . . . . . . . 148
7.1.2
Eigenschaften agiler Softwareentwicklung mit Scrum . . . 150
7.1.3
Sprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
7.1.4
Product Backlog . . . . . . . . . . . . . . . . . . . . . . . 152
7.1.5
Sprint Backlog . . . . . . . . . . . . . . . . . . . . . . . . 152
7.1.6
Daily Scrum
7.1.7
Sprint Review . . . . . . . . . . . . . . . . . . . . . . . . . 152
7.1.8
Sprint Retrospective . . . . . . . . . . . . . . . . . . . . . 152
. . . . . . . . . . . . . . . . . . . . . . . . . 152
Erfahrungen mit Scrum . . . . . . . . . . . . . . . . . . . . . . . 152
7.2.1
Eigene Umsetzung . . . . . . . . . . . . . . . . . . . . . . 153
7.2.2
Planen der Sprints und Sprint Review Meetings . . . . . . 153
7.3
Warm Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
7.4
Erster Sprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
7.5
7.6
7.7
7.8
7.9
7.4.1
Verlauf des ersten Sprints . . . . . . . . . . . . . . . . . . 155
7.4.2
Probleme und Ereignisse im ersten Sprint . . . . . . . . . 156
7.4.3
Review Meeting des ersten Sprints . . . . . . . . . . . . . 157
Zweiter Sprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
7.5.1
Verlauf des zweiten Sprints . . . . . . . . . . . . . . . . . 157
7.5.2
Probleme und Ereignisse im zweiten Sprint . . . . . . . . 158
7.5.3
Review Meeting zum zweiten Sprint . . . . . . . . . . . . 159
Dritter Sprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
7.6.1
Verlauf des dritten Sprints . . . . . . . . . . . . . . . . . . 159
7.6.2
Probleme und Ereignisse im dritten Sprint . . . . . . . . . 159
7.6.3
Review Meeting zum dritten Sprint . . . . . . . . . . . . . 160
Vierter Sprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
7.7.1
Verlauf des vierten Sprints . . . . . . . . . . . . . . . . . . 160
7.7.2
Probleme und Ereignisse im vierten Sprint . . . . . . . . . 161
7.7.3
Review Meeting zum vierten Sprint . . . . . . . . . . . . 162
Fünfter Sprint
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
7.8.1
Verlauf des 5. Sprints . . . . . . . . . . . . . . . . . . . . 162
7.8.2
Probleme und Ereignisse im fünften Sprint . . . . . . . . 162
7.8.3
Review Meeting zum fünften Sprint . . . . . . . . . . . . 162
Abschlussarbeiten und Organisation . . . . . . . . . . . . . . . . 162
4
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
8 Fazit
164
8.1
Allgemeines Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
8.2
Thematik Energieinformationssysteme . . . . . . . . . . . . . . . 164
8.3
Umsetzung des Entwurfs . . . . . . . . . . . . . . . . . . . . . . . 165
8.4
Implementierung des Programms . . . . . . . . . . . . . . . . . . 165
8.5
Arbeit als Projektgruppe
8.6
Die Arbeit mit Scrum . . . . . . . . . . . . . . . . . . . . . . . . 167
8.7
Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
. . . . . . . . . . . . . . . . . . . . . . 166
9 Benutzerhandbuch
169
9.1
Willkommen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
9.2
Systemvorausetzungen . . . . . . . . . . . . . . . . . . . . . . . . 169
9.3
9.4
9.2.1
Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
9.2.2
Betriebsystem . . . . . . . . . . . . . . . . . . . . . . . . . 169
9.2.3
Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
9.3.1
Installation der Serverkomponenten . . . . . . . . . . . . 170
9.3.2
Datenbank aufsetzen . . . . . . . . . . . . . . . . . . . . . 170
9.3.3
Konfiguration der Datenbankverbindung . . . . . . . . . . 172
9.3.4
EEX-Marktdaten aktualisieren . . . . . . . . . . . . . . . 172
9.3.5
Installation der Clientanwendung . . . . . . . . . . . . . . 173
Erste Schritte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
9.4.1
Programm starten . . . . . . . . . . . . . . . . . . . . . . 174
9.4.2
Serveradresse angeben . . . . . . . . . . . . . . . . . . . . 174
9.4.3
Einloggen . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
9.4.4
Administratorpasswort ändern . . . . . . . . . . . . . . . 174
9.4.5
Benutzer anlegen . . . . . . . . . . . . . . . . . . . . . . . 175
9.5
Der Startbildschirm . . . . . . . . . . . . . . . . . . . . . . . . . 176
9.6
Das ToDo-Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
9.7
Fehlermeldungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
9.8
Auswahlfenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
9.9
9.8.1
Auswahl für Tarife . . . . . . . . . . . . . . . . . . . . . . 179
9.8.2
Auswahl für Regelzonen . . . . . . . . . . . . . . . . . . . 179
9.8.3
Auswahl für Lastprofile . . . . . . . . . . . . . . . . . . . 180
9.8.4
Auswahl für Bilanzkreise
. . . . . . . . . . . . . . . . . . 180
Kunden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
5
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
9.9.1
Kunden anlegen . . . . . . . . . . . . . . . . . . . . . . . 181
9.9.2
Kunden bearbeiten . . . . . . . . . . . . . . . . . . . . . . 182
9.9.3
Kunden löschen . . . . . . . . . . . . . . . . . . . . . . . . 183
9.9.4
Kundenvertrag anlegen . . . . . . . . . . . . . . . . . . . 183
9.9.5
Kundenvertrag bearbeiten . . . . . . . . . . . . . . . . . . 185
9.9.6
Kundenvertrag löschen . . . . . . . . . . . . . . . . . . . . 185
9.10 Lastprofile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
9.10.1 Lastprofile anlegen . . . . . . . . . . . . . . . . . . . . . . 187
9.10.2 Lastprofile bearbeiten . . . . . . . . . . . . . . . . . . . . 188
9.10.3 Lastprofile löschen . . . . . . . . . . . . . . . . . . . . . . 188
9.11 Tarife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
9.11.1 Tarife anlegen . . . . . . . . . . . . . . . . . . . . . . . . . 189
9.11.2 Tarife bearbeiten . . . . . . . . . . . . . . . . . . . . . . . 190
9.11.3 Tarife löschen . . . . . . . . . . . . . . . . . . . . . . . . . 190
9.12 Fahrpläne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
9.12.1 Fahrplan erstellen . . . . . . . . . . . . . . . . . . . . . . 191
9.12.2 Fahrplan löschen . . . . . . . . . . . . . . . . . . . . . . . 192
9.13 Kaufempfehlungen . . . . . . . . . . . . . . . . . . . . . . . . . . 193
9.13.1 Schritt 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
9.13.2 Schritt 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
9.13.3 Schritt 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
9.13.4 Schritt 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
9.13.5 Schritt 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
9.13.6 Schritt 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
9.14 Lieferanten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
9.14.1 Lieferanten anlegen . . . . . . . . . . . . . . . . . . . . . . 199
9.14.2 Lieferanten bearbeiten . . . . . . . . . . . . . . . . . . . . 200
9.14.3 Lieferanten löschen . . . . . . . . . . . . . . . . . . . . . . 200
9.14.4 Lieferangebot/–vertrag anlegen . . . . . . . . . . . . . . . 200
9.14.5 Lieferangebot/-vertrag bearbeiten . . . . . . . . . . . . . 201
9.14.6 Lieferangebot/-vertrag löschen . . . . . . . . . . . . . . . 201
9.15 Lastprognosen
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
9.16 Bilanzkreise und Regelzonen . . . . . . . . . . . . . . . . . . . . . 205
9.16.1 Massenupdate . . . . . . . . . . . . . . . . . . . . . . . . . 205
9.17 EEX - Angebote . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
9.17.1 Blockgebote . . . . . . . . . . . . . . . . . . . . . . . . . . 208
6
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
9.17.2 Stundengebote . . . . . . . . . . . . . . . . . . . . . . . . 209
9.17.3 EEX-Lieferungen eintragen . . . . . . . . . . . . . . . . . 209
9.18 EEX - Lieferungen . . . . . . . . . . . . . . . . . . . . . . . . . . 211
9.18.1 Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
9.18.2 Lieferung bearbeiten . . . . . . . . . . . . . . . . . . . . . 211
9.18.3 Lieferung löschen . . . . . . . . . . . . . . . . . . . . . . . 212
9.19 Störungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
9.19.1 Störung melden . . . . . . . . . . . . . . . . . . . . . . . . 213
9.19.2 Störung bearbeiten . . . . . . . . . . . . . . . . . . . . . . 213
9.19.3 Störung löschen . . . . . . . . . . . . . . . . . . . . . . . . 214
9.20 Systemnutzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
9.20.1 Rollen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
9.20.2 Benutzer anlegen/bearbeiten . . . . . . . . . . . . . . . . 217
9.20.3 Benutzer löschen . . . . . . . . . . . . . . . . . . . . . . . 217
9.21 Szenarien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
9.21.1 Szenario 1: Herausgabe einer aktualisierten Bilanzkreisliste 218
9.21.2 Szenario 2: Abschluss eines neuen Vertrages . . . . . . . . 221
9.22 Hilfefunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
10 Glossar
225
Literatur
227
7
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildungsverzeichnis
1
Der Implementierung zugrunde liegender Weltausschnitt . . . . .
16
2
Aufbau der Entscheidungsunterstützung . . . . . . . . . . . . . .
26
3
Ausführliche Fehlermeldung mit Eingabemöglichkeit . . . . . . .
42
4
Usability Lifecycle . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5
Architekt des implementierten Energieinformationssystems
. . .
50
6
Struktur der Solution in Microsoft Visual Studio . . . . . . . . .
50
7
Datenbankschema des Energieinformationssystems . . . . . . . .
52
8
Klassen EisUser, Person und EisUserRole . . . . . . . . . . . . .
57
9
Klasse EisUserDAL . . . . . . . . . . . . . . . . . . . . . . . . . .
58
10
Klasse UserManager . . . . . . . . . . . . . . . . . . . . . . . . .
59
11
Übersicht über alle Systemnutzer . . . . . . . . . . . . . . . . . .
61
12
Anlegen oder Bearbeiten eines Nutzers . . . . . . . . . . . . . . .
61
13
Klassen zur Kundenverwaltung . . . . . . . . . . . . . . . . . . .
64
14
Klasse CustomerDAL . . . . . . . . . . . . . . . . . . . . . . . .
64
15
Klasse CustomerManager . . . . . . . . . . . . . . . . . . . . . .
65
16
Klasse CustomerCustomerContractDAL . . . . . . . . . . . . . .
66
17
Klasse CustomerCustomerContractManager . . . . . . . . . . . .
68
18
Anlegen oder Bearbeiten eines Kunden . . . . . . . . . . . . . . .
69
19
Anlegen oder Bearbeiten eines Kundenvertrages . . . . . . . . . .
69
20
Übersicht über Kunden und ihre Verträge . . . . . . . . . . . . .
70
21
Klasse EnergyProfileDAL . . . . . . . . . . . . . . . . . . . . . .
73
22
Klasse EnergyProfileManager . . . . . . . . . . . . . . . . . . . .
74
23
Hauptfenster der Lastprofilverwaltung . . . . . . . . . . . . . . .
75
24
Eingabefenster für Lastprofile . . . . . . . . . . . . . . . . . . . .
76
25
Lieferant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
26
Lieferangebot und -vertrag . . . . . . . . . . . . . . . . . . . . . .
78
27
Lieferanten im Datenzugriff . . . . . . . . . . . . . . . . . . . . .
79
28
Lieferanten in der Geschäftslogik . . . . . . . . . . . . . . . . . .
80
29
Bilanzkreis- und Regelzonenobjekt . . . . . . . . . . . . . . . . .
82
30
Datenzugriff auf Bilanzkreise und Regelzonen . . . . . . . . . . .
83
31
Bilanzkreise und Regelzonen in der Geschäftslogik . . . . . . . .
85
32
Übersicht der vorhandenen Bilanzkreise . . . . . . . . . . . . . .
87
33
Bearbeiten-Fenster für einen Bilanzkreis . . . . . . . . . . . . . .
87
34
Panel für EEX-Handel . . . . . . . . . . . . . . . . . . . . . . . .
89
8
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
35
Klasse EexAccount . . . . . . . . . . . . . . . . . . . . . . . . . .
90
36
Klasse EexAccountDAL . . . . . . . . . . . . . . . . . . . . . . .
90
37
Eingabefenster für EEX-Zugangsdaten . . . . . . . . . . . . . . .
91
38
Klassen EexHourBid und EexHourBidDetails . . . . . . . . . . .
92
39
Klassen EexBlockBid und EexBlockBidDetails . . . . . . . . . .
93
40
Erstellung des Reports für Stundenangebote in Visual Studio 2005 94
41
Vorschau auf den PDF-Export eines Stundenangebots . . . . . .
95
42
Klassen für den Datenbankzugriff auf EEX-Angebote . . . . . . .
95
43
Eingabefenster für Stundenangebote . . . . . . . . . . . . . . . .
98
44
Eingabefenster zur Preissetzung für Stundenangebote
99
45
Eingabefenster für Blockangebote . . . . . . . . . . . . . . . . . . 100
46
Klasse EexManager . . . . . . . . . . . . . . . . . . . . . . . . . . 101
47
Klasse EexDelivery . . . . . . . . . . . . . . . . . . . . . . . . . . 102
48
Klasse EexDeliveryDAL . . . . . . . . . . . . . . . . . . . . . . . 102
49
EEX-Lieferungsübersicht mit Bearbeitungsmöglichkeiten . . . . . 104
50
Eingabefenster für EEX-Lieferungen . . . . . . . . . . . . . . . . 105
51
Klasse EexMarketData . . . . . . . . . . . . . . . . . . . . . . . . 105
52
Klasse EexMarketDataDAL . . . . . . . . . . . . . . . . . . . . . 106
53
Fenster für aktuelle Marktdaten . . . . . . . . . . . . . . . . . . . 108
54
Die GUI für den EEX-Scraper . . . . . . . . . . . . . . . . . . . . 109
55
Die Program-Klasse von EEX.exe . . . . . . . . . . . . . . . . . . 110
56
Klassen EnergyPrediction und EnergyPredictionTimeSeries . . . 111
57
Klasse EnergyPredictionDAL . . . . . . . . . . . . . . . . . . . . 111
58
Klasse EnergyPredictionManager . . . . . . . . . . . . . . . . . . 112
59
GUI zur Erstellung von Lastprognosen . . . . . . . . . . . . . . . 113
60
GUI zur Konfiguration des AdvancedPredictionPlugin
61
Klasse Disturbance . . . . . . . . . . . . . . . . . . . . . . . . . . 115
62
Klasse DisturbanceDAL . . . . . . . . . . . . . . . . . . . . . . . 116
63
Klasse DisturbanceManager . . . . . . . . . . . . . . . . . . . . . 117
64
Störungsverwaltung
65
Neue Störung eingeben . . . . . . . . . . . . . . . . . . . . . . . . 119
66
Liefervertrag auswählen . . . . . . . . . . . . . . . . . . . . . . . 119
67
Klasse Recommendation . . . . . . . . . . . . . . . . . . . . . . . 120
68
Klasse RecommendationDAL . . . . . . . . . . . . . . . . . . . . 121
69
Klasse RecommendationManager . . . . . . . . . . . . . . . . . . 122
70
Auswahl der zu verwendenden Lastprognose . . . . . . . . . . . . 124
. . . . . .
. . . . . . 114
. . . . . . . . . . . . . . . . . . . . . . . . . 118
9
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
71
Zu berücksichtigenden Lieferverträge und -angebote . . . . . . . 124
72
Auswahl des Kaufempfehlungs-Algorithmus . . . . . . . . . . . . 125
73
Konfiguration des Kaufempfehlungs-Algorithmus . . . . . . . . . 125
74
Ergebnis der Berechnung . . . . . . . . . . . . . . . . . . . . . . . 126
75
Nachbearbeitung der Kaufempfehlung . . . . . . . . . . . . . . . 127
76
Schematischer Ablauf der Evolutionsstrategie . . . . . . . . . . . 127
77
Klassen Schedule und ScheduleTimeSeries . . . . . . . . . . . . . 131
78
Klasse ScheduleDAL . . . . . . . . . . . . . . . . . . . . . . . . . 133
79
Klasse ScheduleManager . . . . . . . . . . . . . . . . . . . . . . . 135
80
Grafische Oberfläche für Fahrpläne . . . . . . . . . . . . . . . . . 137
81
Testprotokoll nach Lasttest in Visual Studio . . . . . . . . . . . . 146
82
Agiler Prozess im Scrum-Modell . . . . . . . . . . . . . . . . . . 149
83
Wirtschaftlichkeit von agilen und konventionellen Methoden . . . 150
84
Terminplanung der einzelnen Scrums . . . . . . . . . . . . . . . . 154
85
SQL Server Management Studio . . . . . . . . . . . . . . . . . . 171
86
SQL Server Management Studio - Datenbankdatei auswählen . . 172
87
Vergabe der Benutzerrechte . . . . . . . . . . . . . . . . . . . . . 173
88
Auswahlfenster zum Aktualisieren der EEX Marktdaten . . . . . 174
89
Die Startoberfläche des Programms . . . . . . . . . . . . . . . . . 176
90
Hier geben Sie die Daten in die ToDo-Liste ein . . . . . . . . . . 177
91
Fehlermeldung bei inkorrekten Daten . . . . . . . . . . . . . . . . 178
92
Eine Fehlermeldung, die Sie auf unzureichende Rechte hinweist. . 178
93
Das Auswahlfenster für Tarife . . . . . . . . . . . . . . . . . . . . 179
94
Das Auswahlfenster für Regelzonen . . . . . . . . . . . . . . . . . 179
95
Das Auswahlfenster für Lastprofile . . . . . . . . . . . . . . . . . 180
96
Das Auswahlfenster für Bilanzkreise . . . . . . . . . . . . . . . . 180
97
Die Oberfläche zur Verwaltung von Kunden und deren Verträge . 181
98
Einen neuen Kunden anlegen . . . . . . . . . . . . . . . . . . . . 182
99
Einen bestehenden Kunden bearbeiten . . . . . . . . . . . . . . . 182
100 Einen bestehenden Kunden löschen . . . . . . . . . . . . . . . . . 183
101 Einen neuen Kundenvertrag anlegen . . . . . . . . . . . . . . . . 183
102 Einem Kunden ein Lastprofil zuweisen . . . . . . . . . . . . . . . 184
103 Einem Kunden einen Tarif zuweisen . . . . . . . . . . . . . . . . 184
104 Einem Kunden eine Regelzone zuweisen . . . . . . . . . . . . . . 185
105 Einem Kunden einen Bilanzkreis zuweisen . . . . . . . . . . . . . 185
106 Einen bestehenden Kundenvertrag bearbeiten . . . . . . . . . . . 186
10
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
107 Die Oberfläche zur Verwaltung von Lastprofilen . . . . . . . . . . 187
108 Ein neues Lastprofil anlegen . . . . . . . . . . . . . . . . . . . . . 188
109 Ein Lastprofil bearbeiten
. . . . . . . . . . . . . . . . . . . . . . 188
110 Die Oberfläche zur Verwaltung von Tarifen . . . . . . . . . . . . 189
111 Einen neuen Tarif anlegen . . . . . . . . . . . . . . . . . . . . . . 190
112 Einen Tarif bearbeiten . . . . . . . . . . . . . . . . . . . . . . . . 190
113 Die Oberfläche zur Erstellung von Fahrplänen . . . . . . . . . . . 191
114 Einen Fahrplan im Browserfenster anzeigen . . . . . . . . . . . . 192
115 Die Oberfläche zur Erstellung von Kaufempfehlungen: Schritt 1 . 193
116 Die Oberfläche zur Erstellung von Kaufempfehlungen: Schritt 2 . 194
117 Die Oberfläche zur Erstellung von Kaufempfehlungen: Schritt 3 . 195
118 Die Oberfläche zur Erstellung von Kaufempfehlungen: Schritt 4 . 196
119 Die Oberfläche zur Erstellung von Kaufempfehlungen: Schritt 5 . 197
120 Die Oberfläche zur Erstellung von Kaufempfehlungen: Schritt 6 . 198
121 Die Oberfläche zur Verwaltung von Lieferanten . . . . . . . . . . 199
122 Ein bestehenden Lieferanten bearbeiten . . . . . . . . . . . . . . 200
123 Ein Lieferangebot/-vertrag anlegen . . . . . . . . . . . . . . . . . 201
124 Eine Regelzone auswählen . . . . . . . . . . . . . . . . . . . . . . 201
125 Die Oberfläche zur Verwaltung und Erstellung von Lastprognosen 203
126 Oberfläche zur Verwaltung von Bilanzkreisen und Regelzonen . . 205
127 Die Oberfläche zur Verwaltung von EEX-Angeboten . . . . . . . 207
128 EEX-Daten ändern . . . . . . . . . . . . . . . . . . . . . . . . . . 208
129 Ein Blockangebot erstellen . . . . . . . . . . . . . . . . . . . . . . 209
130 Ein Stundenangebot erstellen . . . . . . . . . . . . . . . . . . . . 210
131 Die Oberfläche zur Verwaltung von EEX-Lieferungen . . . . . . . 211
132 Die Oberfläche zur Verwaltung und Erstellung von Störungen . . 213
133 Die Oberfläche zur Verwaltung von Systemnutzern . . . . . . . . 215
134 Einen Systemnutzer hinzufügen . . . . . . . . . . . . . . . . . . . 216
135 Die ToDo-Liste zeigt, dass heute eine Aufgabe anliegt . . . . . . 218
136 Auswahl der CSV-Datei zur Listenaktualisierung . . . . . . . . . 219
137 Bearbeitung des Ereignisses in der ToDo-Liste . . . . . . . . . . . 220
138 In der Lieferantenansicht prüft der Nutzer die Angebote . . . . . 221
139 In der Störungsansicht vergleicht der Nutzer die Störrate . . . . . 222
140 Verwaltung von Angeboten und Verträgen in Lieferantenansicht . 223
11
EIS - Energie-Informationssystem
1
Projektgruppe Energie-Informationssyteme
Einleitung
Dies ist der Endbericht der Projektgruppe Energieinformationssysteme, die in
der Abteilung Informationssysteme des Departments für Informatik der Universität Oldenburg vom 1. Oktober 2005 bis zum 30. September 2006 veranstaltet
wurde. Neben dem offiziellen Namen wurden den Teilnehmern kaum Vorgaben
hinsichtlich ihrer Arbeit gemacht, außer dass sie sich mit dem Geschehen und
den Abläufen in der Energiebranche beschäftigen sollte.
Nachdem in der Seminarphase zunächst zahlreiche Vorträge rund um die
Themen Energieversorgung, liberalisierte Energiemärkte und Produktionsplanungssysteme gehalten worden waren, begann folglich eine Diskussion über die
weitere Vorgehensweise. Nur kurze Zeit später war vor dem Hintergrund der voranschreitenden Liberalisierung der Strommärkte die Entscheidung gefallen, ein
Informationssystem zu implementieren, das Energiehändlern bei ihrer täglichen
Arbeit rund um Stromein- und -verkauf hilft und auch umfangreiche Entscheidungsunterstützung in wichtigen Fragen bietet.
Der vorliegende Bericht ist nun das Ergebnis der zwölf Monate Planung und
Entwicklung der Projektgruppe Energieinformationssysteme. In den folgenden
Kapiteln stellt er die wesentlichen Resultate der Gruppenarbeit heraus und bietet dem Leser darüber hinaus eine verständliche Darstellung der Entscheidungsprozesse und Vorgehensweisen innerhalb der Gruppe. Viele Entscheidungen und
Ergebnisse im Vorfeld der Implementierung wurden schon im ersten Semester
dieses Projektes erarbeitet. Diese sind im Zwischenbericht enthalten. Auf ihn
wird im Verlauf dieses Endberichtes des öfteren verwiesen. Im Zwischenbericht,
der Anfang April 2006 abgegeben wurde, sind
• die Ausarbeitung der einzelnen Projektgruppenmitglieder für die anfängliche Seminarphase,
• die ursprüngliche Anforderungsdefinition und
• der detaillierte Entwurf der Implementierung enthalten.
Kapitel zwei dieses Berichts bietet einen kurzen Überblick über den betrachteten Weltausschnitt und das daraus entstandene Programm. In Kapitel drei
werden die Anforderungen, die als Grundlage der Implementierung an das Programm gestellt wurden, zusammengefasst. Das darauffolgende Kapitel erläutert
den Ablauf der Implementierung und, welche Technologien, Konzepte und Softwarearchitektur zur Erfüllung der zuvor gestellten Anforderungen eingesetzt
wurden. Die einzelnen Funktionen des Programms werden dann in Kapitel fünf
ausführlich vorgestellt, wobei der Schwerpunkt auf der Art und Weise der Implementierung in den verschiedenne Schichten der Archtektur liegt. Kapitel sechs
beschäftigt sich anschließend mit den verschiedenen Testarten, die eingesetzt
wurden, um einen reibungslosen Programmablauf sicherzustellen. Im siebten
Kapitel wird das Vorgehensmodell, das während der Implementierung verfolgt
wurde, dargestellt, bevor im achten ein detailliertes Fazit der Arbeit samt Ausblick auf zukünftige Entwicklungsmöglichkeiten des Programms geboten wird.
Das neunte und letzte Kapitel ist ein Benutzerhandbuch. Während das fünfte Kapitel beschreibt, wie das System implementiert wurde und was es kann,
12
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
wird hier gezeigt, wie man die einzelnen Funktionen korrekt bedient, was man
beachten muss, welche Systemanforderungen das Programm stellt und wie man
es installiert. Zudem werden auch einige Benutzungsszenarien durchgespielt, die
typische Handlungsabfolgen einfach erklären.
1.1
Einführung in den Energiemarkt
In den letzten Jahren wurde der europäische Energiemarkt zunehmend liberalisiert. Das Stromnetz ist nicht mehr in staatlicher Hand, sondern wird von
einigen so genannten Übertragungsnetzbetreibern (ÜNB) verwaltet, denen zugleich die meisten Kraftwerke gehören. Die Energiehändler, die eine Vielzahl
von Endkunden zu beliefern haben1 , kaufen zu diesem Zweck Strom bei anderen
Energiehändlern und melden die daraus resultierenden Stromflüsse regelmäßig
den Netzbetreibern. Diese haben die Pflicht, dafür zu sorgen, dass jederzeit auf
Grundlage der Angaben der Energiehändler die passende Energiemenge an jeden Ort des Netzes gelangt. Der Datenaustausch zwischen den ÜNB und den
Händlern sowie die Bilanzierung der Energiemengen erfolgt in länderübergreifend einheitlichen Standards.
Im Folgenden werden nun in alphabetischer Reihenfolge einige Begriffe erklärt, die für das Verständnis der Vorgänge auf dem Energiemarkt unabdingbar
sind. Des weiteren werden die für das Verständnis der Arbeit der Projektgruppe
und der Funktionsweise des erstellten Energieinformationssystems (EIS) wichtigsten und immer wieder vorkommenden Termini definiert.
1.1.1
Begriffe aus der Energiewirtschaft
Bilanzkreis: Ein Bilanzkreis ist eine Sammlung aus Stromeinspeise- und entnahmepunkten, der zwischen ÜNB ↓ und Energiehändler oder ausländischem Netzbetreiber definiert wird. Die Salden von Einspeisung und
Entnahme müssen stets ausgeglichen sein. Strom kann zwischen zwei Regelzonen nur innerhalb eines Bilanzkreises ausgetauscht werden.
Energiehändler: Energiehändler kaufen Strom bei Kraftwerksbetreibern oder
anderen Energiehändlern ein und verkaufen diesen an Endverbraucher
oder weitere Energiehändler. Sie verfügen über kein eigenes Netz und werden durch einen bei den ÜNBs registrierten Bilanzkreis repräsentiert.
European Transmission System Operators (ETSO): Hierbei handelt es
sich um den Zusammenschluss der europäischen Übertragungsnetzbetreiber mit dem Ziel, die Arbeit besser miteinander zu koordinieren und einheitliche Standards für den Energieaustausch zwischen den verschiedenen
Netzen zu schaffen.
ETSO Scheduling System (ESS): Das ETSO Scheduling System ist ein von
der ETSO herausgegebenes, auf XML basierendes Fahrplanformat, in dem
seit Mitte 2004 alle Akteure am Energiemarkt ihre Fahrpläne an die ÜNBs
weiterleiten müssen. Weitergehende Informationen befinden sich in [For03].
1 Es gibt auch zahlreiche Akteure wie etwa die Deutsche Bank, die nur zum Zwecke der
Spekulation an den entsprechenden Börsen Strom kaufen und verkaufen und keinerlei Kundenverträge zu bedienen haben.
13
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Fahrplan: Die ÜNBs erhalten von den anderen ÜNBs, Energiehändlern und
ausländischen Netzbetreibern täglich Fahrpläne, in denen in Viertelstundenblöcken der Stromtransfer von einem Bilanzkreis (einer Regelzone) in
einen anderen Bilanzkreis (eine andere Regelzone) in Megawatt aufgeführt wird. Fahrpläne können kurzfristig angepasst und sogar noch nach
Inkrafttreten verändert werden. Ihre Erstellung erfolgt auf Grundlage der
Lastprofile für Objekte eines bestimmten Bilanzkreises (einer bestimmten
Regelzone).
Lastprofil: Zu jedem Objekt, das mit Strom beliefert wird, gehört ein Lastprofil, das seinen Bedarf in Abhängigkeit von Parametern wie Uhr- und
Jahreszeit beschreibt, um die Stromerzeugung verlässlich planen zu können.
Regelzone: Jedem ÜNB ist ein bestimmter Bereich zugeordnet, in dem er
Stromeinspeisung und -entnahme regelt und die Salden ausgleicht. Diese Bereiche werden Regelzonen genannt. Innerhalb einer Regelzone kann
Strom zwischen beliebigen Bilanzkreisen ausgetauscht werden.
Übertragungsnetzbetreiber (ÜNB): Übertragungsnetzbetreiber sind diejenigen Unternehmen, denen das Netz an Freiluft- und Erdkabeln zum
Stromtransport gehört. In Deutschland sind dies EnBW, Vattenfall, RWE
und E.ON.
1.1.2
Weitere EIS-spezifische Begriffe
Kaufempfehlung: Eine Kaufempfehlung wird anhand der Lastprognose erstellt und listet die Angebote auf, deren gleichzeitiger Abschluss möglichst
kostengünstig und möglichst vollständig den für den Zeitraum der Lastprognose gültigen Strombedarf decken kann.
Kunde: Kunden sind Einzelpersonen, Unternehmen und Haushalte, die ihren
Strombedarf über den Energiehändler teilweise oder ganz decken.
Kundenvertrag: Kundenverträge sind Verträge, die der Energiehändler mit
seinen Kunden geschlossen hat und in denen er ihnen Stromlieferungen zu
bestimmten Konditionen zusichert.
Lastprognose: Lastprognosen werden auf Basis der Lastprofile der Kunden
erstellt und geben für bestimmte Zeiträume an, wie viel Strom voraussichtlich eingekauft werden muss, um den Kundenbedarf zu decken. Sie
werden für verschieden lange Zeiträume erstellt.
Lieferant: Unter der Bezeichnung Lieferant werden die Kraftwerksbetreiber
und Energieanbieter zusammengefasst, die dem Energiehändler Stromlieferungen anbieten.
Lieferangebot: Lieferangebote werden von Lieferanten gemacht und umfassen
eine Strommenge, die zu einem bestimmten Preis über einen bestimmten
Zeitraum lang zur Verfügung gestellt werden kann.
Liefervertrag: Lieferverträge sind angenommene Lieferangebote, die dadurch
für den Lieferanten verbindlich geworden sind.
14
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Marktdaten: Unter Marktdaten sind die wichtigsten Kurse der European Energy Exchange (EEX) in Leipzig zusammengefasst, die dem Energiehändler
und den Nutzern einen Überblick über die aktuelle Marktlage und damit
die Eignung der vorliegenden Angebote gewähren.
Nutzer: Als Nutzer werden im Folgenden die Personen bezeichnet, die das EIS
bedienen; also im wesentlichen Angestellte des jeweiligen Energiehändlers,
der das System einsetzt.
Tarif: Als Tarif werden die Konditionen, zu denen Strom an ein bestimmtes
Objekt geliefert wird, genannt. Tarife richten sich im Allgemeinen vor
allem nach Abnahmemenge, Lieferzeitraum und Energiemix.
Störung: Störungen sind unvorhergesehene Ereignisse, die die Bereitstellung
des Stroms durch Lieferanten oder die Abnahme des Stroms durch Kunden
beeinträchtigen.
15
EIS - Energie-Informationssystem
2
2.1
Projektgruppe Energie-Informationssyteme
Übersicht über das Energieinformationssystem
(EIS)
Modellierter Weltausschnitt
Abbildung 1: Der Implementierung zugrunde liegender Weltausschnitt
Abbildung 1 stellt den als Basis des Energieinformationssystems modellierten Weltausschnitt dar. In ihm steht der Energiehändler im Zentrum des modellierten Weltausschnitts, weil er der zentrale Akteur ist, der Energieein- und
-verkauf koordiniert und das Geschäft überwacht. Die Abläufe innerhalb des
Weltausschnitts werden durch die schwarzen Pfeile symbolisiert. Kleine Kreise
sind Knoten, an denen wichtige Elemente des Weltausschnitts aufeinander treffen. Die Rechtecke symbolisieren Entitäten, also zum Beispiel handelnde Subjekte. Eine typische Handlungskette, die sich durch den ganzen Weltausschnitt
zieht, ist die folgende:
Zunächst melden sich Kunden beim Energiehändler an und schließen mit ihm
für beliebige Objekte (Häuser, Fabriken etc.) Verträge ab, um diese mit Strom
zu versorgen. Verträge basieren auf einem Tarif, in dem der Strompreis und
16
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
der Anteil erneuerbarer Energien festgehalten werden. Darüber hinaus verfügen
sie jeweils über ein Lastprofil, das zeitlich detailliert aufgeschlüsselte Angaben
über die benötigten Energiemengen enthält. Auf Grundlage der Kundenverträge
werden nun für jeden Tag Lastprognosen erstellt, die den Gesamtstrombedarf
des Energiehändlers zur Versorgung seiner Kunden berechnen.
Gleichzeitig geben Energieanbieter, also z. B. andere Energiehändler oder
Kraftwerksbetreiber, Lieferangebote beim Energiehändler ab. Diese Angebote
und die Lastprognosen dienen als Basis für die vom System erzeugten Kaufempfehlungen, die nach bestimmten Kriterien wie optimale Bedarfsdeckung oder
minimale Kosten Lieferangeboten heraussucht und zum Abschluss vorschlägt.
Durch aktuelle Marktdaten von der Europäischen Energiebörse werden die Entscheidungen des Nutzers zusätzlich beeinflusst.
Aus dem Abschluss von Lieferverträgen ergibt sich dennoch oftmals eine
gewisse Fehldeckung, auch können sie durch Störungen wie etwa Kraftwerksnotabschaltungen unerwartet beeinträchtigt werden, weswegen durch kurzfristige Angebote an der EEX versucht werden muss, zusätzlichen Strom zu kaufen
oder überschüssigen zu verkaufen. Kommt es an der EEX dazu, dass ein anderer Energiehändler ein solches Angebot teilweise oder ganz akzeptiert, resultiert
daraus eine neue Lieferung, hier zur Abgrenzung von herkömmlichen Lieferverträgen als EEX-Lieferung bezeichnet. Sind alle Lieferungen für einen bestimmten
Tag vereinbart und die Kundenbedürfnisse gedeckt, kann der Nutzer einen Fahrplan im von der ETSO vorgegebenen ESS-Format erstellen, der die einzelnen
Lieferungen an den Händler für jeden betroffenen Übertragungsnetzbetreiber
aufsaldiert.
Mit der auf der Grundlage dieses Modells erstellten Software kann unter
anderem dieses Szenario nachempfunden werden. Eingesetzt wird sie vom Energiehändler, benutzt von seinen Angestellten, die in ihren verschiedenen Rollen
die Datenbasis pflegen und sie zur Entscheidungsunterstützung nutzen. Wenn
in dem Modell ein Lieferant ein Lieferangebot abgibt, so bedeutet dies für die
Benutzung des Programms, dass ein Nutzer, dem als Aufgabe die Lieferantenbetreuung zugewiesen wurde, die Daten dieses Angebots ins System eingibt.
2.2
Implementierte Funktionen
Das EIS, das in den vergangenen sechs Monaten implementiert wurde, dient
als unterstützendes System für einen Energiehändler, der sich bei Stromerzeugern, anderen Lieferanten und der Europäischen Energiebörse (EEX) mit Strom
eindeckt, um seine Kunden, also die Endabnehmer des Stroms, gemäß den laufenden Verträgen zu bedienen. Dazu wurden vier große Funktionsblöcke implementiert:
• Stammdatenverwaltung: In diesen Block fallen alle Funktionen, die zur
Administration des Systems dienen (Nutzer- und Rechteverwaltung), sowie die Verwaltung von Kunden- und Lieferantendaten. Hierzu gehören
bei der Kundenverwaltung die personen- oder firmenbezogenen Daten der
Kunden selbst, ihre Verträge mit dem Händler, die ihnen Stromlieferungen zum Endverbrauch zu sichern, die Lastprofile, nach denen die Kunden
17
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
beliefert werden, sowie die verschiedenen Tarife, zu denen der Händler seinen Strom anbietet. Zur Lieferantenverwaltung gehört die Verwaltung der
personen- und firmenbezogenen Daten der Lieferanten sowie deren Lieferangebote und die abgeschlossenen Lieferverträge. Außerdem kommen die
Datenbestände zu Regelzonen und Bilanzkreise hinzu, die dazu dienen,
Verträge und Stromflüsse nach Verantwortungsbereichen zu ordnen, und
für EEX-Handel sowie Fahrpläne benötigt werden. Zu jedem dieser Punkte
bietet die Stammdatenverwaltung Möglichkeiten zum Anlegen, Auslesen,
Ändern und Löschen von Objekten.
• EEX-Handel: Während normale Lieferverträge eher der langfristigen Versorgung dienen, ist der EEX-Handel eher zur Beseitigung kurzzeitiger Fehldeckungen gedacht. Es können Angebote für die EEX erstellt und in die
von der EEX bereitgestellten Faxvorlage exportiert werden. Zu abgegebenen Angeboten können darüber hinaus Lieferungen eingetragen werden,
falls sich an der EEX ein Handelspartner gefunden hat. Auf diesem Wege ist es sowohl möglich, zusätzlich benötigten Strom zu kaufen, als auch
überschüssigen Strom zu verkaufen, während herkömmliche Lieferverträge
nur Lieferungen zum Händler vorsehen.
• Entscheidungsunterstützung: Die Entscheidungsunterstützung versorgt den
Händler mit Informationen zum erwarteten Stromverbrauch für beliebige
Zeiträume, zu aktuellen Versorgungsstörungen, die Lieferverträge betreffen, sowie zu aktuellen Fehldeckungen. Auf dieser Basis werden Empfehlungen zum Abschluss von Lieferangeboten erstellt, die dem Händler erlauben, möglichst optimal seinen Strombedarf zu decken.
• Fahrplanerstellung: Die Fahrpläne werden benötigt, um den Kraftwerksbetreibern zu signalisieren, wann sie dem Händler welche Mengen an Strom
liefern müssen. Dazu wurde ein von der ETSO vorgegebenes XML-Format
(ESS) implementiert, das zum Datenaustausch benutzt wird. So können
Fahrpläne direkt aus dem System heraus generiert werden, so dass sie nur
noch an die entsprechenden Stellen versandt werden müssen.
Die vom EIS angebotenen Funktionen sind also die folgenden (für eine detaillierte Beschreibung siehe auch Kapitel 5):
• Nutzerverwaltung (Anlegen, anzeigen, bearbeiten, löschen)
• Rollenverwaltung (Benutzern Rollen zuweisen und entziehen)
• Kundenverwaltung (Anlegen, anzeigen, bearbeiten, löschen)
• Kundenverträge (Anlegen, anzeigen, bearbeiten, löschen, zuordnen)
• Lastprofile (Anlegen, anzeigen, bearbeiten, löschen, zuordnen)
• Tarife (Anlegen, anzeigen, bearbeiten, löschen, zuordnen, (de)aktivieren)
• Lieferantenverwaltung (Anlegen, anzeigen, bearbeiten, löschen)
• Lieferangebote/-verträge (Anlegen, anzeigen, bearbeiten, löschen, zuordnen, abschließen)
18
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• Bilanzkreise (Anlegen, anzeigen, bearbeiten, löschen, (de)aktivieren)
• Regelzonen (Anlegen, anzeigen, bearbeiten, löschen, (de)aktivieren)
• Störungen (Anlegen, anzeigen, löschen)
• Lastprognosen (Berechnen, speichern, löschen, anzeigen, Plugins einbinden)
• Kaufempfehlungen (Berechnen, umsetzen, speichern, löschen, anzeigen,
Plugins einbinden)
• EEX-Angebote (Anlegen, bearbeiten, löschen, anzeigen, exportieren)
• EEX-Lieferungen (Anlegen, bearbeiten, zuordnen, löschen, anzeigen)
• Fahrpläne (Anlegen, exportieren, anzeigen, löschen)
Wie schon im Zwischenbericht geschrieben, kann das System nicht dazu eingesetzt werden,
• buchhalterische Aufgaben zu erledigen oder automatisieren,
• Stromflüsse innerhalb von Bilanzkreisen zu modellieren,
• mehrere Energiehändler gleichzeitig zu verwalten (nur über mehrere Installationen),
• Lastprofile automatisch zu optimieren (nur manuell) und
• Stromhandel zu automatisieren (wohl aber dazu, ihn durchzuführen).
19
EIS - Energie-Informationssystem
3
Projektgruppe Energie-Informationssyteme
Anforderungen an das Produkt
In diesem Kapitel wird ein Überblick über die Anforderungen gegeben, die während der Implementierung an das Programm gestellt wurden. Sie unterscheiden
sich in geringem Maße von den in der ursprünglichen Anforderungsdefinition
(siehe Kapitel 3 des Zwischenberichts) festgehaltenen Anforderungen, da sich
während des weiteren Entwurfs- und Entwicklungsprozesses in manchen Fällen Änderungen als sinnvoll oder unvermeidbar herausstellten. Ein Vergleich
zwischen den initialen und den während der Implementierung gültigen Anforderungen steht am Ende dieses Kapitels. Wie die Anforderungen letztendlich
umgesetzt wurden, findet sich in Kapitel 4.
3.1
Aus dem Weltmodell abgeleitete Systemabgrenzung
Das zu implementierende Energieinformationssystem soll in der Lage sein, die
Abläufe im Weltmodell nachzuvollziehen und den Energiehändler, der es einsetzt, in die Lage versetzen, seine Energiekäufe und -verkäufe möglichst effizient
zu tätigen im Hinblick auf Kosten und anfallenden Bedarf seiner Kunden. Darüber hinaus muss das System in der Lage sein, mit wichtigen Instanzen außerhalb des modellierten Weltausschnitts (Energiebörse, Netzbetreiber etc.) zwecks
Datenaustausch zu kommunizieren.
Dazu bedarf es einer Reihe weit verbreiteter Standardfunktionen wie etwa
einer Kundenverwaltung, aber auch neuartiger Leistungsmerkmale wie etwa Mechanismen zum Finden möglichst optimaler Kaufempfehlungen und zur Nutzung
der Beschaffungsmöglichkeiten am liberalisierten Energiemarkt, so dass sich ein
innovatives Gesamtsystem mit echtem Mehrwert gegenüber bisherigen Lösungen ergibt. Ebenfalls sollen Fahrpläne generiert werden können, damit der Energiehändler den betroffenen Übertragungsnetzbetreibern mitteilen kann, wieviel
Energie ihm und damit seinen Kunden zugeleitet werden muss.
Mit dem System soll es möglich sein, Energie direkt bei entsprechenden Anbietern einzukaufen oder An- und Verkäufe über die Energiebörse EEX zu tätigen. Kernstück des Systems ist hierbei die Funktion der Entscheidungsunterstützung für die Berechnung des voraussichtlichen Strombedarfs der Kunden
zu beliebigen Zeitpunkten und für die Empfehlung von Lieferangeboten zum
Kauf. Auf einer Lastprognose aufbauend soll unter Berücksichtigung verschiedener Planungsintervalle sowie weiterer Parameter ein Kaufvorschlag unterbreitet
werden, der dann vom Benutzer entsprechend getätigt oder auch verworfen sowie geändert werden kann. Durch einen steten Abgleich zwischen bestehenden
Verträgen und dem ermittelten Bedarf soll so ein effizienter Handel mit Energie ermöglicht werden. Weiterhin soll das System Störungen, also kurzfristige
Nichterfüllungen von Lieferverträgen, die etwa durch Kraftwerksausfälle entstehen, wahrnehmen und behandeln, indem Kaufvorschläge entsprechend angepasst
werden.
Das System soll darüber hinaus Kunden, Lieferanten, deren Verträge und alle
anderen insbesondere zur Entscheidungsunterstützung nötigen Daten verwalten,
sowie Daten für die Lastprognosen und die Ermittlung des Kaufvorschlags (aktuelle Energiepreise usw.) beschaffen und langfristig ablegen, um eine Basis für
spätere Analysen auf diesen Daten zu bieten.
20
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Insgesamt soll sich das System insbesondere durch Entscheidungsunterstützung, Nutzung neuer Handelsmöglichkeiten am Energiemarkt, integriertes Fahrplanmanagement und Einhaltung aktueller Standards zum Datenaustausch von
anderen Lösungen abheben.
3.2
Funktionale Anforderungen
In Abschnitt 3.1 wurde das Einsatzgebiet des Systems dargestellt. Daraus ergeben sich die im folgenden erläuterten detaillierten Anforderungen an die Funktionalität des Systems. Anhand der vorangegangenen Systemabgrenzung, in der
auch die Funktionen umrissen wurden, lassen sich vier größere Blöcke innerhalb
der zu erstellenden Software identifizieren: Datenbasis, Entscheidungsunterstützung, Energiehandel und Fahrplanmanagement.
3.2.1
Datenhaltung und -zugriff
An die Datenhaltung ergeben sich folgende Anforderungen:
• In der Datenhaltung muss der gesamte modellierte Weltausschnitt repräsentiert werden.
• Sie muss persistent sein. Einmal gespeicherte Daten dürfen nicht verloren
gehen, solange sie nicht explizit gelöscht werden.
• Sie muss übersichtlich und in ihrer Struktur an den Zusammenhängen des
modellierten Weltausschnitts orientiert sein.
• Sie muss sicher sein, das heißt, sie darf nur berechtigte Zugriffe zulassen.
• Sie muss auch bei komplexen Anfragen schnellen Zugriff auf die einzelnen
Datensätze gewährleisten, da mit großen Datenmengen zu rechnen ist.
• Sie muss in der Lage sein, Beziehungen zwischen Objekten aufzustellen
und die Einhaltung der sich so ergebenden Referenzbedingungen zu überwachen.
• Des weiteren muss die Datenhaltung die zu speichernden Daten korrekt,
vollständig, möglichst minimal, lesbar und redundanzfrei darstellen.
Der Zugriff auf die einzelnen Datensätze muss im Normalfall Funktionen zum
Auslesen, Anlegen, Ändern und Löschen umfassen. Beim lesenden Zugriff auf
Daten müssen diese nicht nur aus den persistenten Datenbeständen ausgelesen,
sondern auch derart transformiert werden, dass daraus die von der Software
erwarteten Datentypen resultieren. Umgekehrt müssen die an die Datenhaltung
übergebenen Datentypen vor der Speicherung in eine Form überführt werden,
die von der Datenhaltung aufgenommen werden kann. Vor dem Einfügen oder
Ändern von Datensätzen müssen durch das Programm das korrekte Format
der Daten sowie deren referenzielle Integrität bei Beziehungen untereinander
sichergestellt werden.
21
EIS - Energie-Informationssystem
3.2.2
Projektgruppe Energie-Informationssyteme
Dateneingabe und -austausch
Die Dateneingabe erfolgt in der Regel manuell durch die Benutzer des Systems,
sofern es sich um einzelne Datensätze oder allgemein kleinere Datenmengen handelt. Dazu müssen dem Nutzer geeignete Eingabemöglichkeiten zur Verfügung
gestellt werden. Dies hat durch eine grafische Oberfläche zu geschehen, über die
alle Funktionen, mittels derer ein Nutzer direkt auf den Datenbestand zugreifen
darf, angeboten werden.
Für größere Datenmengen soll das Programm spezielle Schnittstellen bereithalten, die einen direkten Import oder Export von Daten erlaubt. Sofern die
exportierten Dateien mit anderen Akteuren auf dem Energiemarkt ausgetauscht
werden sollen, sind die derzeit aktuellen Insdustriestandards zu beachten und zu
implementieren. Der Import kann vollautomatisch oder durch manuell angeordneten Import aus vorliegenden Quellen geschehen, der Export soll ausschließlich
auf Veranlassung eines Benutzers erfolgen.
Derartige Schnittstellen bieten sich zum Import an für Marktdaten der EEX,
für den Export bei Fahrplänen und EEX-Geschäften. Funktionen zum Datenimport, die automatisch aufgerufen werden, müssen nicht in der grafischen Oberfläche bedienbar sein.
3.2.3
Datenbasis
Die Daten, die als Grundlage für weitere Berechnungen wie Lastprognosen dienen, werden als Stammdaten in der Datenbasis zusammengefasst. Hierzu zählen
Daten zu
• Kunden und -verträgen,
• Lieferanten, Lieferangeboten und -verträgen,
• Regelzonen und Bilanzkreisen
• Tarifen und
• Lastprofilen.
Kunden und ihre Verträge müssen erfasst werden, damit der Energiehändler
weiß, wen er wann mit Strom beliefern muss. Zu den erforderlichen Daten gehören personen- oder firmenbezogene Informationen zum Kunden wie Name,
Anschrift und Bankverbindung, Daten zur Laufzeit des Vertrages, den Stromkosten, dem gewünschten Energiemix und den jeweils zu liefernden Strommengen.
Lieferanten mit ihren Angeboten und abgeschlossenen Verträgen müssen
ebenfalls erfasst werden, da sie die Grundlage der Versorgung des Energiehändlers mit Strom bilden. Zu jedem Lieferanten müssen firmenbezogene Informationen wie Anschrift, Ansprechpartner und Bankverbindung vorliegen. Die Lieferangebote müssen Angaben zu Zeitraum, Strommenge, und -preis enthalten.
Um Kunden- und Lieferverträge zwecks Bilanzierung und Durchführung der
Stromflüsse richtig einordnen zu können, müssen Bilanzkreise und Regelzonen
22
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
zu jedem Angebot und jedem Vertrag erfasst werden. Die von der ETSO erarbeiteten Industriestandards bezüglich dieser beiden Entitäten sind einzuhalten.
Das heißt, dass jeder Bilanzkreis und jede Regelzone über ein Objekt repräsentiert wird, das mindestens einen eindeutigen EIC, einen Eignernamen und eine
Abkürzung des Eigners enthält.
Zwecks Vertragsvereinbarung mit den Kunden benötigt das Energieinformationssystem Möglichkeiten zur Tarifgestaltung. Dazu gehört eine Tarifverwaltung, die es dem Energiehändler erlaubt, Tarife zu erstellen, zu ändern, nach
Kundenwünschen anzupassen und sie einem Kundenvertrag zuzuordnen. Energiemixe sollen dabei berücksichtigt werden, da sie in der Zukunft an Bedeutung
gewinnen dürften.
Um den zeitlich schwankenden Energieverbrauch von Stromkunden wiederzugeben, werden Lastprofile benötigt. Ihre Repräsentation innerhalb der Software muss sich ebenfalls an den gängigen Industriestandards ausrichten, wonach
Verbrauchswerte in 15-minütigen Intervallen angegeben werden.
Für alle hier genannten Entitäten sind Funktionen zum Eingeben, Auslesen,
Bearbeiten und Löschen nötig. Die Zusammenhänge zwischen ihnen müssen sich
in der Datenhaltung wiederfinden.
Zusätzlich hierzu sollen zur besseren Information des jeweiligen Nutzers die
aktuellen Preisdaten von der EEX bezogen werden können. Dazu müssen datumsabhängige Informationen über die verschiedenen Strompreisindizes, die an
der EEX notiert werden, in der Software repräsentiert werden. Diese Daten müssen täglich aktualisiert werden. Folgende Indizes der EEX sind relevant, da sie
das Tagesgeschehen wiedergeben:
• Phelix Day Peak: Preis für Strom zur Deckung von Spitzenlast
• Phelix Day Base: Preis für Strom zur Deckung von Normallast
• Off Peak I: Blockpreis für Lieferung zwischen
• Off Peak II: Blockpreis für Lieferung zwischen
• Night: Blockpreis für Lieferung zwischen 0 und 6 Uhr
• Morning: Blockpreis für Lieferung zwischen 6 und 10 Uhr
• High Noon: Blockpreis für Lieferung zwischen 11 und 14 Uhr
• Afternoon: Blockpreis für Lieferung zwischen 15 und 18 Uhr
• Rush Hour: Blockpreis für Lieferung zwischen 16 und 20 Uhr
• Evening: Blockpreis für Lieferung zwischen 18 und 24 Uhr
• Business: Blockpreis für Lieferung zwischen 8 und 16 Uhr
• Stundenpreise: Individuelle Preisangaben für jede Stunde des Tages
23
EIS - Energie-Informationssystem
3.2.4
Projektgruppe Energie-Informationssyteme
Energiehandel
Unter dem Punkt Energiehandel werden sämtliche Funktionen zum Beschaffen
und – bei Überschuss – Veräußern von Energie zusammengefasst. Hier muss
folgende Funktionalität geboten werden:
• Abschluss von Lieferverträgen mit beliebigen Lieferanten
• Angebote zum Strom(ver)kauf an der EEX erstellen
• Auf Basis von EEX-Angeboten vereinbarte Lieferungen registrieren
Zum Abschluss von Lieferverträgen müssen bereits eingegangene Lieferangebote vom Energiehändler als akzeptiert markiert werden können, wobei sich die
übrigen Daten in der Regel nicht ändern. Es muss aber dennoch möglich sein,
bei Annahme eines Angebots dessen Angaben zu modifizieren, da sich durch
Verhandlungen des Lieferanten mit dem Händler Änderungen ergeben haben
können. Lieferangbote und -verträge sollen eher zur langfristigen Deckung des
Bedarfs des Händlers dienen und dementsprechend längere Laufzeiten (Wochen,
Monate etc.) aufweisen. Es ist nicht nötig, Lastprofile auch für Lieferverträge
zu verwenden, da Lieferungen vom Anfang bis zum Ende eine konstante Menge
festlegen.
Zur Deckung des kurzfristigen Strombedarfs (maximal eine Woche) sollen
die durch die Liberalisierung des Energiemarktes neu geschaffenen Handelsmöglichkeiten an der Europäischen Energiebörse in Leipzig genutzt werden können.
Das Programm muss daher in der Lage sein, EEX-Angebote vorzulegen, die
dem Standardformat der EEX entsprechen. Es gibt hier im wesentlichen zwei
Angebotsarten, die zur kurzfristigen Bedarfsdeckung infrage kommen. Dies sind
Stunden- und Blockangebote. Zumindest diese Angebotstypen müssen vom Nutzer im Programm erstellt, bearbeitet und gelöscht werden können.
Die auf Basis dieser EEX-Angebote entstandenen Lieferungen müssen ebenfalls ins System eingepflegt und verwaltet werden können. Dazu gehören für jede
EEX-Lieferungen mindestens der Lieferzeitraum, die konstante Liefermenge, der
Preis, das zugrunde liegende EEX-Angebot und zwecks Bilanzierung Regelzone
und Bilanzkreis des Lieferanten.
3.2.5
Entscheidungsunterstützung
Die Entscheidungsunterstützung enthält im wesentlichen die Funktionen zur
Lastprognose und zur Kaufempfehlung. Hinzu kommen Daten zu Störungen in
der Belieferung des Händlers mit Energie, wenn beispielsweise ein Kraftwerk
heruntergefahren werden musste. Derartige Störungen müssen einzelnen Lieferverträgen zugeordnet werden können. Dies dient dem Zweck, dass perspektivisch Fehlleistungen der anderen Vertragspartei protokolliert werden sollen, um
Konventionalstrafen einzufordern. Außerdem müssen Störungen aus Gründen
der Planbarkeit des Energiebedarfs mindestens Angaben darüber enthalten, wie
groß der Leistungsausfall ist und ob sie derzeit aktuell sind. Ebenso sollte die
Möglichkeit bestehen, eine Nachricht und einen händlerinternen Code hinzuzufügen, um die Störungen besser einordnen zu können.
24
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Lastprognosen Die Lastprognosen stellen die Basis für die Kaufentscheidung,
mit denen der Strom für bestimmte Zeiträume eingekauft werden kann. Für die
Bestimmung der Lastdaten werden als Grundlage Lastprofile für die Kunden
verwendet, mit denen eine Prognose für spätere Kaufentscheidungen getroffen
werden. Die Zeiträume, in denen Prognosen erstellt werden, erstrecken sich mindestens über
• ein langfristiges (Jahr),
• ein mittelfristiges (Quartal) und
• ein kurzfristiges Intervall (Tag).
Diese Prognosen sollen auch für Monats- und Wochenfrist erstellt werden können, jedoch sind diese Möglichkeiten optional. Um eine weitaus bessere Prognose
zu erstellen, werden weitere Parameter wie z. B. Wetterdaten oder Lastspitzen
bei Großereignissen berücksichtigt. Eine wichtige Anforderung ist die Anpassbarkeit der Parameter und Algorithmen zur Prognoseerstellung an die Bedürfnisse des jeweiligen Energiehändlers.
Aus Gründen der Kompatibilität zu den Lastprofilen der Kundenverträge
sollen die auf den darin gespeicherten Daten aufbauenden Lastprognosen ebenfalls Zeitschemata enthalten, die in 15-minütige Zeitintervalle aufgegliedert sind
und den jeweils erwarteten Verbrauch wiedergeben. Des Weiteren muss zu jeder
Lastprognose ihr Gültigkeitszeitraum erfasst werden. Die Erstellung von Lastprognosen muss wegen der zu erwarteten sehr großen Zahl an Kundenverträgen
nach Eingabe aller benötigten Parameter vollautomatisch erfolgen.
Kaufempfehlungen Das Entscheidungsunterstützungssystem soll mit Hilfe
von Verbrauchsprognosen, bestehenden Verträgen, EEX-Lieferungen und Lieferangeboten Kaufvorschläge generieren. Dazu muss zunächst ein Abgleich zwischen zugesicherten Lieferungen und dem pronostizierten Verbrauch stattfinden, um den Fehlbedarf zu ermitteln. Störungen müssen bei der Fehldeckungsermittlung ebenfalls einbezogen werden. Dann müssen aus den vorhandenen
Lieferangeboten die passendsten für einen Kaufvorschlag herausgesucht werden.
Hierbei sollen sowohl langfristige als auch kurzfristige Angebote betrachtet und
vorgeschlagen werden, um dem Benutzer einen effizienten Handel mit Energie
zu ermöglichen. Langfristige Verträge sind dabei zu bevorteilen, da sie größere
Verlässlichkeit und meistens Kostenvorteile bieten. Vorgesehen ist wie bei der
Lastprognose die Erstellung von Kaufempfehlung mindestens für die lange, die
mittlere und die kurze Frist. Als standardmäßige Gütekriterien sind mindestens
die Genauigkeit der Deckung des Fehlbedarfs durch den Kaufvorschlag und die
Höhe der Kosten zu berücksichtigen.
Als optionale Erweiterung ist eine weitere Optimierung der Kaufvorschläge angedacht. Hierbei können zusätzliche Parameter, wie zum Beispiel Kundenfluktuation, frühzeitig mit in die Betrachtung einbezogen werden, um eine
bessere Nutzung von Langzeitverträgen zu erreichen. Weiterhin kann mit Hilfe von Schwellenwerten für Über- bzw. Unterdeckungen die Kaufentscheidung
verfeinert werden.
25
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 2: Aufbau der Entscheidungsunterstützung
Wie bei Lastprognosen sollen Kaufempfehlungen in hohem Maße flexibel, d.
h. an die Bedürfnisse des Energiehändlers und seine bevorzugten Gütekriterien
anpassbar sein. Die Erstellung von Kaufempfehlungen muss nach Eingabe der
benötigten Parameter vollautomatisch ablaufen. Es soll darüber hinaus möglich
sein, die vorgeschlagenen Angebote auf einen Schlag abzuschließen, wenn die
erstellte Kaufempfehlung den Wünschen des Energiehändlers entspricht. Eine
Übersicht über das gesamte Entscheidungsunterstützungssystem liefert Abbildung 2.
3.2.6
Fahrplanmanagement
Fahrpläne werden von den Übertragungsnetzbetreibern benötigt, damit sie wissen, wieviel Strom sie zu welcher Zeit produzieren und wohin sie ihn leiten
müssen. Seit einigen Jahren ist der Standard für Fahrpläne das XML-basierte
ESS-Format. Fahrpläne werden für jeweils einen Tag erzeugt und enthalten die
nach Bilanzkreisen und Regelzonen aggregierten Lieferungen. Das System muss
also in der Lage sein, alle ÜNBs, über die es Strom zur Versorgung seiner Kunden bezieht, mit EES-konformen Fahrplänen zu versorgen. Die Erstellung dieser
Fahrpläne muss auf Befehl des Nutzers vollautomatisch geschehen, nachdem die
benötigten Parameter eingegeben sind, da eine manuelle Erstellung wegen der
großen zugrunde liegenden Datenmenge jeden vertretbaren Zeitrahmen sprengen würde und überdies sehr fehleranfällig wäre. Eine Nachbereitungsfunktion
ist gemäß den ETSO-Vorgaben insofern einzurichten, als Fahrpläne neu erstellt
und mit höheren Versionsnummern versehen werden können.
26
EIS - Energie-Informationssystem
3.3
Projektgruppe Energie-Informationssyteme
Nicht-funktionale Anforderungen
Neben den gerade geschilderten Anforderungen an die Funktionen ergeben sich
zahlreiche nicht-funktionale Anforderungen.
3.3.1
Benutzbarkeit
Das Softwaresystem muss von einem Nutzer, der mit den Vorgängen der Energiewirtschaft vertraut ist, ohne große Einarbeitungszeit bedient werden können.
Die Hilfestellung, die vom Programm angeboten wird, kann also von entsprechenden fachlichen Kenntnissen der Benutzer ausgehen. Eine Anpassung des
Systems an fachlich unversierte Privatnutzer ist nicht erforderlich.
Da das System für den Einsatz im deutschsprachigen Raum gedacht ist,
soll die Sprache des Programms standardmäßig Deutsch sein, wenngleich die
Möglichkeit zur späteren Übersetzung in andere Sprachen bestehen soll.
Die Oberfläche muss übersichtlich gestaltet und nach den einzelnen Funktionsblöcken gegliedert sein, damit sich Nutzer schnell darin zurecht finden können. Das Design soll daher weitgehend dem üblichen Look & Feel von WindowsProgrammen folgen, jedoch auch eigene Akzente setzen, die es davon leicht abheben, um es unverwechselbar zu machen. Gleichzeitig soll das System insgesamt
optisch ansprechend sein, so dass die Nutzer gerne damit arbeiten.
3.3.2
Zuverlässigkeit
Komplettabstürze des Programms sind zu durch geeignetes Abfangen von Fehlern zu vermeiden; sie sollen zu keinem Zeitpunkt auftreten. Falls Fehler innerhalb des Programms auftreten, sollen diese dem Benutzer kenntlich gemacht
werden, damit er darüber informiert ist, dass das System nicht so gearbeitet hat
wie erwartet. Falsche Benutzereingaben sollen so früh wie möglich abgefangen
werden, so dass gar kein Prozess mit diesen falschen Eingaben gestartet wird
und Fehler gleich im Vorfeld vermieden werden. Sollte es dennoch zu einem Systemabsturz kommen, so dürfen keinesfalls bereits gespeicherte Daten verloren
gehen.
3.3.3
Effizienz
Das Programm muss sofort auf Nutzereingaben reagieren. Einfache Anfragen
wie das Einfügen eines neuen Datensatzes oder das Abfragen einer Liste dürfen
auch bei großen Datenmengen nicht mehr als wenige Sekunden benötigen. Dies
gilt auch für den Fall, dass mehrere Nutzer gleichzeitig mit dem Programm
arbeiten. Sämtliche vom Betriebssystem zur Verfügung gestellten Ressourcen
dürfen voll ausgeschöpft werden.
3.3.4
Leistungsverhalten
Das Programm muss mit kleinen, mittleren und großen Datenbeständen problemlos umgehen können. Ein großer Datenbestand ist in diesem Kontext ein
27
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
solcher, der sämtliche Daten eines durchschnittlichen Energiehändlers oder versorgers, etwa eines Stadtwerks mit einigen zehn- bis hunderttausend Kunden,
enthält.
Die Ergebnisse der Algorithmen zur Entscheidungsunterstützung müssen im
Hinblick auf die vorgegebenen Parameter optimal sein, falls es sich nicht um heuristische Algorithmen handelt. Heuristische Ergebnisse müssen möglichst nah
an den vom Benutzer vorzugebenden Zielwerten liegen. Exakte Ergebnisse sind
auch für die Fahrplanerstellung vonnöten. Hier darf keine Heuristik eingesetzt
werden.
3.3.5
Wartbarkeit/Erweiterbarkeit
Das Energieinformationssystem muss auch nach seiner Fertigstellung leicht zu
modifizieren und zu erweitern sein. Darüber hinaus müssen Wartungsarbeiten,
etwa zum Beheben von Programmfehlern, auch von Menschen, die an der Erstellung des Projekts nicht beteiligt waren, ohne große Einarbeitungszeit vorgenommen werden können. Das Programm muss daher klar strukturiert sein.
Die Abbildung des Weltausschnitts auf die Programmbestandteile muss daher
nachvollziehbar gestaltet sein. Darüber hinaus sollen die einzelnen funktionalen
Blöcke wie Datenzugriff oder grafische Oberfläche klar voneinander getrennt und
über wohldefinierte Schnittstellen miteinander verbunden werden, so dass man
sie durch andere Implementierungen ersetzen kann.
3.3.6
Skalierbarkeit
Die erstellte Software ist als Mehrbenutzersystem auszulegen und muss dementsprechend eine beliebige Anzahl an Nutzern verwalten können. Je nach Hardwareumgebung müssen auch mehrere oder viele Nutzer gleichzeitig mit dem
System arbeiten können, ohne dass sich daraus nennenswerte Geschwindigkeitsbeeinträchtigungen ergeben.
3.3.7
Sicherheit
Die Funktionen des Programms und der Datenbestand müssen vor unerlaubten
Zugriffen geschützt sein. Dies gilt sowohl für Zugriffe von außerhalb über die
Schnittstellen des Programms als auch für Zugriffe von angemeldeten Benutzern,
die Funktionen aufrufen, für die sie keine entsprechenden Rechte haben.
3.3.8
Dokumentation
Die Dokumentation soll durch ein ausführliches Benutzerhandbuch erfolgen, das
sowohl in gedruckter Form vorliegt als auch innerhalb des Programms kontextabhängig aufgerufen werden kann. Zusätzlich soll der Quellcode angemessen
kommentiert und nach Möglichkeit eine HTML- oder ähnliche Dokumentation
davon, wie dies etwa in Java mittels JavaDoc möglich ist, generiert werden.
28
EIS - Energie-Informationssystem
3.4
Projektgruppe Energie-Informationssyteme
Hinzugefügte und entfallene Anforderungen
Als Vergleichsgrundlage dienen an dieser Stelle das dritte und vierte Kapitel
des Zwischenberichts. Komplett weggelassen wurden gegenüber den darin enthaltenen Anforderungen lediglich die Wetterdaten. Dies hat drei Gründe: Der
Aufwand zur Implementierung des ohnehin nur als optional vorgesehenen Leistungsmerkmals wäre durch den enormen Aufwand zur regelmäßigen Beschaffung der benötigten Informationen (Parsen zahlreicher HTML-Seiten; verborgene, fehlende, teils unzuverlässige Quellen) unverhältnismäßig im Vergleich zum
Nutzen gewesen. Ebenso hätte ein kompliziertes Modell zur adäquaten Berücksichtung der Wetterdaten in den Kundenverträgen entwickelt werden müssen,
da Wetterdaten in den vorliegenden Lastprofilen anderer Energieversorger nicht
benutzt werden und somit keine Grundlage existiert, auf der man leicht ein
eigenes System hätte aufbauen können.
Die Bedeutung erneuerbarer Energien wurde stark reduziert. Ihr Anteil an
der insgesamt gelieferten Energie kann zwar noch für jeden Tarif festgelegt
werden, findet aber ansonsten, etwa bei Lieferangeboten, keine Berücksichtigung mehr. Die Berücksichtigung erneuerbarer Energien bei Lieferverträgen und
Kaufempfehlungen könnte ein Ansatzpunkt zur Weiterentwicklung des Systems
sein.
Störungen wurden insoweit reduziert, als sie nicht mehr direkt in einen Liefervertrag integriert werden, sondern nur noch bei der Berechnung von Lastprognosen zum Einsatz kommen.
In vielen weiteren Fällen wurde während der Entwicklung in Details von den
ursprünglichen Anforderungen abgewichen, wie bei einem Vergleich zwischen
den in diesem Kapitel aufgeführten Anforderungen und der Anforderungsdefinition aus dem Zwischenbericht zu sehen ist, weil zwischenzeitlich gefundene
Anforderungen und Lösungen sich als besser oder realistischer herausstellten.
29
EIS - Energie-Informationssystem
4
Projektgruppe Energie-Informationssyteme
Umsetzung der Anforderungen
Dieses Kapitel beschreibt, welche Technologien, welche Konzepte und welche Architektur zur Umsetzung der Anforderungen eingesetzt wurden. Außerdem wird
ein Überblick über den zeitlichen Ablauf der Implementierungsarbeiten gegeben.
Im anschließenden Kapitel werden die Details der implementierten Funktionen
erläutert.
4.1
Technologien
Dieses Kapitel bietet einen Überblick über die Technologien, die im Vorfeld des
Projekts zur Verfügung standen. Außerdem wird erläutert, für welche dieser
Technologien wir uns entschieden haben und warum. Zum besseren Verständnis
der folgenden Diskussion sei erwähnt, dass die Projektgruppe eine Client-ServerArchitektur für ihre Software wählte, was in Abschnitt 4.3 näher ausgeführt
wird.
4.1.1
Programmiersprache
Aufgrund der Größe des Projekts und weil das Programm möglichst in vielen Betrieben eingesetzt werden können sollte, wollte die Projektgruppe eine
erprobte, leicht zu nutzende und kompatible Programmiersprache nutzen. Zunächst wurde dazu Java ins Spiel gebracht, da alle Projektgruppenmitglieder
diese Sprache kannten und bereits eingesetzt hatten. Auch ist Java weitestgehend plattformunabhängig und bietet eine ausgereifte Unterstützung für viele
andere Aspekte, die sich sehr früh als relevant erwiesen, wie Datenbankzugriff
oder XML-Verarbeitung. Spätestens aber, nachdem beschlossen war, eine ClientServer-Architektur mit Kommunikation über Webservices zu implementieren,
wurde Java als Programiersprache nicht weiter verfolgt, da einige Projektgruppenteilnehmer mit Webservices in Verbindung mit Java-Programmen schlechte
Erfahrungen gemacht hatten. Diese bezogen sich im wesentlichen auf Probleme
mit persistenter Speicherung von Objekten und Beziehungen zwischen diesen in
einer MySQL-Datenbank unter J2EE und dem Java Enterprise Application Server. Für den Einsatz einer Client-Server-Architektur unter Java wird aber ein
solcher Applicationserver benötigt, daher hätten hier zunächst noch einige Recherchen angestellt werden müssen und es wäre mit weitergehenden Problemen
zu rechnen gewesen. Darüber hinaus wurde die geringe Ausführungsgeschwindigkeit von Java-Programmen bemängelt. Da außerdem eine eigenständige grafische
Oberfläche implementiert werden sollte, kam verschärfend hinzu, dass selbst bei
komplexen Entwicklungsumgebungen wie Eclipse oder netbeans aus Sicht der
Teilnehmer bislang nur unzureichende Unterstützung bei der Erstellung grafischer Oberflächen (GUI) geboten wird.
Nachdem sich die Meinung gegen Java wandte, wurde C# in Verbindung
mit dem .NET-Framework von Microsoft vorgeschlagen. Die meisten Teilnehmer hatten hiermit zwar keinerlei Erfahrungen, jedoch ähnelt diese Sprache
Java sehr stark und ist daher leicht zu erlernen, wenn man Java einigermaßen
beherrscht. Die Laufzeitprobleme von Java, die durch das Interpretieren des
Bytecodes zur Laufzeit entstehen, fallen in C# nicht an, da .NET-Programme
30
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
bei Programmstart in nativen Maschinencode übersetzt und ausgeführt werden
kann. Darüber hinaus gibt es mit Visual Studio 2005 eine Entwicklungsumgebung, die einfaches GUI-Design erlaubt und auch die Erstellung von Webservices
sowie das Projektmanagement weitgehend automatisiert. Die Gruppe entschied
sich also für C# als Programmiersprache.
4.1.2
Datenhaltung
Von Anfang an war im Hinblick auf die in Abschnitt 3.2.1 gestellten Anforderungen deutlich geworden, dass nur ein Datenbanksystem für die Datenhaltung
infrage kommen würde, weil die zu erwartenden Datenmengen – es handelt sich
bei dem Programm schließlich um eine Lösung für größere Unternehmen und
viele Benutzer – mit anderen Datenhaltungsmethoden, etwa einer Dateistruktur, die überdies noch aufwändig hätte konzipiert werden müssen, nur äußerst
ineffizient zu handhaben sind.
Die Entscheidung fiel auf den Microsoft SQL Server 2005. Dies geschah
vor dem Hintergrund, dass zuvor bereits beschlossen worden war, das .NETFramework von Microsoft zu benutzen. Daher bot es sich an, auch bei der Datenhaltung auf ein Microsoft-Produkt zurückzugreifen, weil die Kompatibilität
zu den anderen .NET-Technologien am größten ist. Zudem existiert über die Microsoft Enterprise Library eine mächtige Bibliothek, die viele Aufgaben in der
Kommunikation mit der Datenbank, etwa das Auslesen großer Datenmengen
effizient handhabt und/oder vereinfacht.
MySQL wäre noch am ehesten eine Alternative zu SQL Server 2005 gewesen,
zumal es frei verfügbar ist. Auch können viele Projektgruppenmitglieder Erfahrungen im Umgang mit MySQL vorweisen. Allerdings wäre die Unterstützung
dieser Datenbank durch die .NET-Technologien nicht sehr groß gewesen, und gerade bei großen Datenmengen werden MySQL starke Geschwindigkeitsnachteile
zugeschrieben.
4.1.3
Grafische Oberfläche
Innerhalb des Energieinformationssystems treten zwei Arten grafischer Oberflächen auf: Eine eigenständige, statische GUI, in der das von der Projektgruppe
ausgelieferte Programm abläuft sowie eine HTML-basierte Oberfläche für die
Plugins (siehe Abschnitt 4.2.1), die von den Programmierern der Plugins zu
verfassen ist. Die im weiteren erläuterten Designentscheidungen wurden insbesondere vor dem Hintergrund getroffen, dass leichte Bedienbarkeit, Überschaubarkeit und ansprechende Optik wesentliche Anforderungen an die GUI darstellen.
Eigenständige GUI Die grafische Oberfläche, über die das Programm gesteuert wird, greift wiederum auf drei verschiedene Bibliotheken von drei verschiedenen Anbietern zurück, die im folgenden vorgestellt werden.
31
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Windows.Forms Die Bibliothek Windows.Forms von Microsoft ist Teil
des .NET-Frameworks und beinhaltet zahlreiche Standardelemente zur Erstellung einer GUI, etwa Eingabefelder für Text, Schaltflächen oder Menüleisten.
Es lag am nächsten, sich für den Einsatz dieser Bibliothek zu entscheiden, da sie
durch ihre Integration in das Framework und die Unterstützung durch den Oberflächeneditor von Visual Studio 2005 einfach zu benutzen und darüber hinaus
durch den Einsatz in zahlreichen Applikationen bereits vielfach erprobt ist, was
eine hohe Ausgereiftheit versprach. Überdies versprach sich die Projektgruppe
durch die Benutzung von Windows-Standardkomponenten eine hohe intuitive
Benutzbarkeit, weil jeder, der weitverbreitete Programme wie Microsoft Word
bedient, mit ihnen vertraut ist. Windows Forms bieten außerdem vielfältige Validierungsmöglichkeiten für Benutzereingaben, indem reguläre Ausdrücke benutzt
oder bestimmte Datentypen zum Abgleich mit den Eingaben herangezogen werden, und erleichtern damit die Arbeit nicht unerheblich.
ZedGraph Allerdings konnten mit Windows.Forms nicht alle Anforderungen der Projektgruppe im Hinblick auf ihre grafische Oberfläche abgedeckt werden. So fehlte es beispielsweise an Komponenten zum Erstellen von Diagrammen. Hier wurde nach intensiver Recherche die als Open Source frei verfügbare
Bibliothek ZedGraph [Zed] gefunden, die eingesetzt wird, um die aktuelle Fehldeckung sowie die Anteile der verschiedenen Tarife an allen Kundenverträgen
zu illustrieren.
Die eingesetzten Diagramme waren nötig, um teilweise komplexe Sachverhalte auf einen Blick zu verdeutlichen. An geeigneten Stellen (Fehldeckungsübersicht, Tarifnutzung) wurden Diagramme bewusst eingesetzt, um die Aufmerksamkeit des Nutzers nicht unnötig zu strapazieren und um ihm die Arbeit bei
der Erfassung und Einschätzung von Sachverhalten zu erleichtern.
Fireball Darüber hinaus war mit den Standardkomponenten von Windows.Forms keine den Vorstellungen der Projektgruppe gerecht werdende Navigationsleiste machbar. Zusätzlich zu der Menüleiste am oberen Bildschirmrand
sollte eine Navigation am linken Bildschirmrand eingeblendet werden, die zu jedem Menüpunkt umfangreiche Zusatzinformationen einblenden konnte. Hierzu
benutzte die Projektgruppe die ebenfalls frei verfügbare Bibliothek FireFX in
der Version Beta 2 [Fir].
Diese Bibliothek ermöglichte eine eingängige Navigation im Stile von Microsoft Outlook abzubilden. Der Projektgruppe war es in diesem Zusammenhang
besonders wichtig, auf bestehende, bewährte Konzepte zu setzen. Das aufgabenorientierte Layout von Outlook machte es dabei besonders leicht, Informationen
kategorisiert zu präsentieren.
HTML-Oberfläche Um die spätere Erweiterung und die Anbindung von externen Anbietern zu erleichtern, wurde in die Software eine Plugin-Schnittstelle
implementiert (siehe Abschnitt 4.2.1). Die Schnittstelle ermöglicht das einfache
Hinzufügen von Algorithmen für die Lastprognose sowie für die Kaufempfehlung. Durch das Pluginsystem wird große Flexibilität erreicht.
32
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Für die Umsetzung dieses Systems wurde hauptsächlich auf die umfangreichen Möglichkeiten des .NET-Frameworks im Bezug auf Metadaten zurückgegriffen. Mittels der in .NET integrierten Reflection-API ist es möglich, Informationen über Objekte zur Laufzeit auszulesen und Objekte und Methoden
dynamisch zu laden und auszuführen. Diese Technologie ermöglichte es, mit
vergleichsweise geringem Aufwand ein solches Pluginsystem in unsere Software
zu integrieren. Die Einzelheiten der Umsetzung sowie Informationen für die Entwicklung eigener Plugins für das EIS-System sind in Kapitel 4.2.1 beschrieben.
Aus der Tatsache, dass über das Pluginsystem beliebige Algorithmen ins
Programm eingebunden werden können, und weil eine Client-Server-Architektur
eingesetzt wurde, ergaben sich zwei neue Anforderungen, die zu Beginn der
Implementierung nicht feststanden:
Das Pluginsystem muss überaus flexibel im Hinblick auf Art und Anzahl der
Parameter der Algorithmen sein muss. Ein Beispiel: Algorithmus A benötigt drei
Parameter vom Typ double, während Algorithmus B nur einen Parameter vom
Typ bool für die Ausführung benötigt. Weil diese Parameter vom Benutzer vor
der Ausführung festgelegt werden müssen, ist die Entwicklung einer geeigneten
Schnittstelle sowie einer geeigneten Oberfläche für die Eingabe durch den Nutzer
erforderlich.
Außerdem müssen die oft aufwändigen Algorithmen serverseitig ausgeführt
werden, um die Ressourcen des Servers zu nutzen und eine vereinfachtes Deployment zu erreichen. Diese beiden Anforderungen stellten ein Problem da, weil es
somit notwendig wurde, eine Oberfläche zur Eingabe der Parameter vom Server
an den Client zu senden.
Ein erster Ansatz, das Serialisieren von Windows-Forms mit den Mitteln
des .NET-Frameworks, schlug leider fehl, da es grundsätzlich nicht vorgesehen
ist, Formulare oder Steuerelemente zu serialisieren. Für diese Problemstellung
gibt es folgende Lösungsmöglichkeiten, die im Folgenden kurz auf ihre Vor- und
Nachteile untersucht werden sollen:
• Generische Oberfläche: Eine einfache Möglichkeit zur Lösung des Problems hätte darin bestanden, eine generische Oberfläche zu entwerfen, die
eine beliebige Anzahl an Parameter z. B. in einer Tabellenstruktur anzeigt und die Eingabe durch den Nutzer ermöglicht. Diese ließe sich etwa
in einem eigenen Formular unterbringen. Obwohl und auch auch gerade
weil diese Möglichkeit sehr einfach umzusetzen war, wurde diese Methode
nicht benutzt, da sie von der Gruppe als zu unflexibel eingestuft wurde.
Weil es sich bei den Algorithmen um komplexe Berechnungen handelt,
sind oftmals Hilfetexte oder auch grafische Illustrationen vonnöten, um
dem Nutzer bei seinen Eingaben zu unterstützen. Dies wäre mit dieser
Methode nicht realisierbar gewesen.
• Framework für die Serialisierung von Windows-Forms: Da das .NETFramework keine Serialisierung von Steuerelementen und Formularen unterstützt, wurde intensiv nach Frameworks und Open-Source-Werkzeugen
gesucht die diese Funktionalität bieten. Jedoch blieb die Suche erfolglos, so
dass nur die Möglichkeit blieb, selbst ein Framework zu entwickeln, welches
die Eigenschaften von Steuerelementen sowie den Aufbau von Formularen
in einem Format wie XML serialisiert, so dass eine Deserialisierung auf
33
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
der Clientseite wieder möglich ist. Diese Alternative wurde ebenfalls abgelehnt, da der Aufwand als zu hoch eingeschätzt wurde und sich die Gruppe
außerdem zu weit von der ursprünglichen Problemstellung entfernt hätten.
• Windows Presentation Foundation: Microsoft entwickelt im Moment ein
neues Framework für die Oberflächengestaltung, genannt Windows Presentation Foundation. Dieses nutzt eine XML-basierte Sprache zur Beschreibung von 2D- sowie 3D-Oberflächen. Obwohl das Framework sehr
mächtig ist und sich damit optisch sehr ansprechende Oberflächen entwickeln lassen, gab es mehrere Punkte die gegen den Einsatz in unserem
Projekt sprachen. Zum einen handelt es sich dabei um Beta-Software,
die nicht für den Produktivbetrieb gedacht ist, und zum anderen würden
durch den Einsatz die Systemanforderungen erhöht, da die Windows Presentation Foundation das .NET-Framework in Version 3 voraussetzt, die
ebenfalls noch nicht erschienen ist.
• Webbasierte Oberfläche: Diese Lösung bietet ein Höchstmaß an Flexibilität und der Entwicklungsaufwand wurde als vertretbar eingestuft. Daher
haben wir diese Methode ausgewählt. Der Ansatz soll im folgenden kurz
erläutert werden, wobei die genaue technische Umsetzung in Kapitel 4.2.1
beschrieben ist.
ASP.NET-basierte Pluginkonfiguration Bei der auf ASP.NET basierten Pluginkonfiguration erstellt der Plugin-Entwickler eine frei definierbare Oberfläche für das von Ihm entwickelte Plugin. Dabei kann er auf alle Funktionen
von ASP.NET wie die Validierungsfunktionen zugreifen und kann Technologien
wie Stylesheets nutzen, um die Pluginoberfläche individuell und ansprechend zu
gestalten. Jede so erstellte Seite muss lediglich einen Knopf mit einem vorgegebenen Namen aufweisen, welcher die Konfiguration abschließt. Diese Webseite
wird bei der Konfiguration automatisch in einen in die Clientanwendung des EIS
integrierten Browser geladen. Mittels DHTML bzw. JavaScript kommunizieren
die Host-Anwendung, also die Windows-Forms-Anwendung, sowie die Webseite
miteinander und tauschen Daten aus. Die genaue technische Umsetzung ist in
Kapitel 4.2.1 nachzulesen.
4.1.4
Datenaustausch
Einer der wichtigsten Anforderungen (vgl. Kapitel 3) bei einer Client-ServerAnwendung ist der effiziente Datenaustausch zwischen beiden Seiten. Hier wurden drei Alternativen begutachtet:
• SOAP-Webservices: Webservices bieten ihre Schnittstellen über XMLDateien an und sind über einen eindeutigen Unified Resource Identifier
zugreifbar. Der Client richtet also eine Anfrage an den Webservice, der
diese an den Server weiterleitet und das Ergebnis des Servers an den
Client zurückgibt. Hierzu dienen spezielle Protokolle wie das vom World
Wide Web Consortium veröffentlichte und frei nutzbare SOAP. Webservices wurden von der Projektgruppe zum Datenaustausch gewählt, weil
sie plattformunabhängig sind und Microsoft Visual Studio sie unterstützt,
34
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
so dass Clients auch für andere Plattformen entwickelt werden können und
der Entwicklungsaufwand reduziert wird. Desweiteren ermöglichen sie die
Interaktion von Programmen, die auf unterschiedlichen Betriebssystemen
laufen und in verschiedenen Programmiersprachen geschrieben sind. Dadurch sind alternative Clients, die ebenfalls auf den EIS-Server zugreifen
wollen, nicht auf C# festgelegt.
• .NET-Remoting: Bei .NET-Remoting handelt es sich um einen RPC2 Mechanismus, der durch das .NET-Framework bereitgestellt wird. Die
Kommunikation erfolgt dabei über so genannte Channels, wobei die verbreitetste Variante die Nutzung eines Binärformats, das über TCP übertragen wird, ist. Das Protokoll ist proprietär und kann nur von anderen
.NET-Anwendungen genutzt werden. Außerdem ist schon ein Nachfolger
dieser Technologie in der Entwicklung, und es kann davon ausgegangen
werden, dass .NET-Remoting in Zukunft in seiner bisherigen Form nicht
weiterentwickelt wird. Daher wurde diese Variante trotz des zu erwartenden Performancevorsprungs gegenüber Webservices nicht eingesetzt.
• .NET Enterprise Services (Com+): Bei den .NET Enterprise Services handelt es sich um Klassen und Funktionen, die den Zugriff auf die COM+Dienste bieten. Die COM-Komponententechnologie ist weit verbreitet und
bietet eine höhere Geschwindigkeit und zusätzliche Funktionen gegenüber
Webservices. Die Nachteile dieser Technologie liegen in der Beschränkung
auf die proprietären Protokolle, die dabei genutzt werden. Es ist daher
nicht plattformübergreifend verfügbar. Zudem ist die Einarbeitungszeit in
die Technologie höher und das Deployment aufwändiger als bei der Nutzung von SOAP-Webservices.
Eine derartige Client-Server-Archtektur mit SOAP-Webservices wurde unter anderem beispielhaft von Microsoft in Adventure Works [Adv], einem Programm
zum Management von Kinos, implementiert und wird auf den Seiten des Microsoft Developer Networks detailliert beschrieben. Diverse Ansätze und Ideen aus
diesem Programm dienten als Anregungen für die Programmierung des Energieinformationssystems.
2 Remote
Procedure Call, Aufruf einer entfernten Methode
35
EIS - Energie-Informationssystem
4.2
Projektgruppe Energie-Informationssyteme
Konzepte
Dieser Abschnitt beschreibt Konzepte, die von der Projektgruppe eingesetzt
wurden, um insbesondere nicht-funktionale Anforderungen zu erfüllen.
4.2.1
Plugins
Eine zentrale Anforderung an das Entscheidungsunterstützungssystem (vgl. Abschnitt 3.2.5) war die möglichst flexible und den Benutzerwünschen entsprechende Gestaltung von Lastprognosen und Kaufempfehlungen. Um dem Endnutzer
des Energieinformationssystems dies zu bieten, entschied sich die Projektgruppe, die zugehörigen Funktionen als Plugin-Systeme zu realisieren. Das bedeutet,
dass das Programm nicht über fest in den übrigen Code eingebettete, vorgegebene Algorithmen verfügt, die dann bei Benutzung einer dieser Funktionen aufgerufen werden, sondern dass Drittanbieter in C# oder anderen Sprachen, die
das .NET-2.0-Framework unterstützen, eigene Berechnungsmethoden erstellen
und über eine vordefinierte Schnittstelle in das System einfügen können. Für
einige Teile der Entwicklung des Pluginsystems erwies sich der Artikel Plugin
Architecture using C# aus dem Internetportal The Code Project, einem Forum
für Entwickler, die Microsoft Visual Studio .NET einsetzen (siehe [Plu03]), als
hilfreich.
Aufbau des Plugin-Systems Im wesentlichen besteht das Plugin-System
aus nur fünf Klassen und Interfaces:
• IPredictionPlugin: In diesem Interface wird die Schnittstelle für Plugins
zum Erstellen von Lastprognosen definiert.
• IRecommendationPlugin: In diesem Interface wird die Schnittstelle für
Plugins zum Erstellen von Kaufempfehlungen definiert.
• PluginHost: Diese Klasse stellt Funktionen bereit, die beiderlei Plugins
erkennen und registrieren können. Sie wird nur intern von der Klasse PluginManager verwendet.
• PluginManager : Diese Klasse stellt Funktionen bereit, die aus dem Webservice aufgerufen werden können und einen Zugriff auf die Plugins erlauben.
• AdditionalParameter : Hierbei handelt es sich um eine Hilfsklasse zum Umgang mit den benutzerdefinierten Parametern eines Plugins.
Die Schnittstellen sind im Projekt DataObjects enthalten, welches bei der Eigenentwicklung eines Plugins referenziert werden muss. Die weiteren Klassen für
die Pluginverwaltung sind im Projekt BusinessLogic zusammengefasst.
Arbeitsweise des Plugin-Systems Wenn das Programm startet, sind zunächst keine Plugins geladen. Verfügbare Plugins werden zur Laufzeit eingebunden, sobald die grafischen Oberflächen zur Erstellung von Lastprognosen oder
Kaufempfehlungen aufgerufen werden. Plugins müssen dabei als vorkompilierte
36
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
DLL-Dateien vorliegen, damit sie erkannt werden können. Diese DLLs müssen
sich im Unterverzeichnis Plugins“ im Verzeichnis des Webservices auf dem Ser”
ver befinden. Sofern ein Plugin eine spezielle Oberfläche zur Konfiguration bereitstellt, muss diese als ASPX-Datei im virtuellen Verzeichnis des Webservices
liegen.
Wenn in der Clientanwendung das Lastprognosemodul aufgerufen wird, wird
eine Anfrage über alle verfügbaren Plugins per Webservice-Aufruf an den Server
geleitet. Dieser ruft intern die Klasse PluginManager auf, welche die verfügbaren Plugins ermittelt. Dabei greift die Klasse PluginManager auf die Hilfsklasse
PluginHost zu und ruft deren statische Methode RegisterPredictionPlugins()
auf. Das Unterverzeichnis Plugins“ der Webanwendung wird dann nach DLLs
”
durchsucht, die unter Rückgriff auf das Paket System.Reflection geladen werden. Dabei wird versucht, die in den unterschiedlichen DLL definierten Typen
zu finden und sie unter Benutzung der Vererbungseigenschaft als IPredictionPlugin-Objekte zu instantiieren. Nicht passende Typen werden dabei ignoriert.
Ein Fehlschlag mit einem Abbruch des Ladevorgangs entsteht dann, wenn zwar
vom Interface abgeleitete Typen gefunden werden, diese aber offenbar nicht die
aktuelle Version der Schnittstelle implementieren (weil beispielsweise Methoden mehr Parameter haben als vorgegeben). War der Ladevorgang erfolgreich,
stehen alle gefundenen Plugins im Array PredictionPlugins zur Verfügung und
können von außen abgerufen werden. Die Plugins stehen so lange zur Verfügung,
bis durch erneuten Aufruf von RegisterPredictionPlugins() eine neue Suche gestartet wird. Die Einbindung von Plugins zur Lastprognose verläuft analog über
die Methode RegisterRecommendationPlugins().
Im Folgenden werden die Abläufe beim Einbinden von Plugins zur Kaufempfehlung zur Laufzeit anhand der betreffenden Codeabschnitte der Methode
RegisterRecommendationPlugins nachgezeichnet.
Zunächst werden mit der folgenden Anweisung die Pfade aller DLL-Dateien
ermittelt, die im Verzeichnis mit dem absoluten Pfad path liegen und im Array
pluginFiles gehalten.
string[] pluginFiles = Directory.GetFiles(path, "*.DLL");
Falls keine DLLs vorhanden sind, wird abgebrochen:
if(pluginFiles.Length == 0) {
recommendationPlugins = null;
return;
Sofern DLLs vorhanden sind, wird innerhalb einer for -Schleife versucht, sie
als Assembly-Objekte zu laden. Dazu wird das Paket System.Reflection benötigt, das das Einbinden von kompiliertem Quellcode zur Laufzeit ermöglicht.
Assembly assembly = null;
try {
assembly = Assembly.LoadFrom(pluginFiles[i]);
} catch(Exception exc) {
throw new FileLoadException("Konnte Datei nicht laden: " +
pluginFiles[i]);
37
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
if(assembly == null)
throw new FileNotFoundException("DLL nicht gefunden");
Zuvor wird außerhalb der Schleife noch eine Liste initialisiert, in die alle
gültigen Plugins aufgenommen werden.
List<IRecommendationPlugin> tmp = new List<IRecommendationPlugin>();
Anschließend wird für jede DLL versucht, alle darin vorhandenen Klassen
als Implementierung des IRecommendationPlugin-Interfaces zu instantiieren.
Ist dies nicht möglich, tritt eine Ausnahme auf, die aber ignoriert wird, weil
in einer DLL beliebige Klassen definiert werden können, die nichts mit den
Plugins zu tun haben müssen. Dasselbe Verhalten tritt ein, wenn eine andere
als die aktuelle Version des Interfaces von der zu ladenden Klasse implementiert
wurde. War die Instantiierung erfolgreich, wird die gefundene Klasse in die Liste
der Plugins zur Kaufempfehlung aufgenommen.
int numTypes = assembly.GetTypes().Length;
for(int j = 0; j < numTypes; ++j) {
Type t = assembly.GetTypes()[j];
try {
IRecommendationPlugin irp =
(IRecommendationPlugin)Activator.CreateInstance(t);
tmp.Add(irp);
} catch(Exception exc) {
}
}
Zum Abschluss wird noch das Attribut RecommendationPlugins aktualisiert,
über das aus anderen Klassen auf die Plugins zugegriffen werden kann.
recommendationPlugins = new IRecommendationPlugin[tmp.Count];
for(int i = 0; i < tmp.Count; ++i) {
recommendationPlugins[i] = tmp[i];
}
Wenn ein Plugin über eine eigene Konfigurationsoberfläche verfügt, wird diese
geladen wenn der Nutzer aus der Windowsoberläche heraus das Plugin startet.
Dabei wird zunächst ein integrierter Webbrowser innerhalb der Windowsanwendung gestartet und die im Plugin angegebene URL aufgerufen. Das Plugin selber
spezifiziert nur den Dateinamen der ASPX-Datei und der restliche Teil der URL
wird dann automatisch ermittelt. Der integrierte Webbrowser basiert auf dem
Internet Explorer 6. Er ist so konfiguriert, dass nur auf die Seiten des Plugins
zugegriffen werden kann und verbietet z.B. Drag und Drop Aktionen aus Sicherheitsgründen. Jede Konfigurationsoberfläche ist verpflichtet, eine Schaltfläche
mit dem Namen cmdStart“ zu implementieren, welcher die Konfiguration ab”
schließt. Nach dem Laden der ASPX-Seite im Browser wird nach diesem Knopf
gesucht und es wird ein Eventhandler registriert, der bei einem Klick durch den
Benutzer eine Funktion innerhalb der PG-EIS-Client-Anwendung auslöst. Diese
Funktion liest dann die Daten nach den im Plugin spezifizierten Parametern
aus. Anschließend ruft die Clientanwendung eine Methode des Webservices auf
und übergibt dabei die eindeutige ID des Plugins, die Werte für die Parameter
und weitere Werte wie z. B. Start- und Enddatum.
38
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Implementierung eines Plugins Das Plugin-System stellt zwei unterschiedliche Schnittstellen für Lastprognosen und Kaufempfehlungen bereit, die ausprogrammiert werden müssen, damit das Plugin-System darauf zugreifen und
das Programm damit sinnvoll arbeiten kann. Beide Schnittstellen verfügen über
einige Attribute zur Beschreibung des jeweiligen Plugins:
• Id : Eine eindeutige ID, die über die Methode Guid.NewGuid() erzeugt
werden kann.
• Name: Der offizielle Name des Plugins.
• Author : Der Verfasser des Algorithmus oder die Firma, die das Plugin
vertreibt.
• Description: Eine Beschreibung der Funktionsweise des Algorithmus.
• Version: Informationen zur Version des Plugins.
• License: Die Lizenzangaben des Plugins.
• ConfigPanel : Wenn das Plugin über eine eigene Konfigurationsoberfläche
verfügen soll, muss diese Eigenschaft den Namen der ASPX-Datei wiedergeben, welche die Konfigurationsoberfläche enthält. Eine ASPX-Datei
ist ein ASP.NET-Dokument, das neben HTML-Code auch .NET-Code und
spezielle Steuerelemente enthalten darf. Durch die Definition einer eigenen
ASPX-Seite kann jedem Plugin eine umfangreiche und attraktive Oberfläche zur Konfiguration hinzugefügt werden.
• ParameterWerte: Diese Eigenschaft wird von außen gesetzt nachdem das
Plugin konfiguriert wurde.
Jedes Plugin verfügt außerdem noch über eine Eigenschaft Parameter, welche
die zusätzlichen Parameter beschreibt die über die Konfigurationsoberfläche vom
Benutzer definiert werden. Hier sieht man ein Beispiel:
public AdditionalParameter[] Parameter {
get {
AdditionalParameter[] parameter = new AdditionalParameter[3];
AdditionalParameter paraPopSize = new AdditionalParameter();
paraPopSize.Attribut = "Value";
paraPopSize.ElementID = "PopulationsTextBox";
AdditionalParameter paraGenSize = new AdditionalParameter();
paraGenSize.Attribut = "Value";
paraGenSize.ElementID = "GenerationsTextBox";
AdditionalParameter paraAbbruch = new AdditionalParameter();
paraAbbruch.Attribut = "Value";
paraAbbruch.ElementID = "AbortTextBox";
parameter[0] = paraPopSize;
parameter[1] = paraGenSize;
parameter[2] = paraAbbruch;
return parameter;
}
}
39
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Jeder Parameter enthält Informationen wie der Wert aus der Konfigurationsoberfläche übernommen werden muss. Die Eigenschaft ElementID liefert einen
Verweis auf das Element, z. B. eine Textbox, und die Eigenschaft Attribut bezeichnet das Attribut, das den Wert, den der Benutzer eingetragen hat, beschreibt.
Für die Überprüfung der Korrektheit der vom Benutzer eingegebenen Werte
ist der Verfasser des Plugins weitgehend selbst verantwortlich. In den mitgelieferten Plugins wurde die Überprüfung mittels der von ASP zur Verfügung
gestellten Validatoren realisiert. Das System macht allerdings zwei Vorgaben,
die vom Verfasser erfüllt werden müssen. Zum einen muss der Button zum Absenden der Eingaben cmdStart heißen. Die zweite Auflage ist ein boolescher
Wert vali, in den das Ergebnis der Validierung eingetragen werden muss. Dieser Wert wird später vom System als Korrektheitsbestätigung der übergebenen
Eingaben abgefragt.
Ist die Implementierung abgeschlossen, müssen die Plugins zu DLL-Dateien
kompiliert und in das Unterverzeichnis Plugins“ kopiert werden, wobei die Kon”
figurationsoberfläche (APSX-Datei) in das Hauptverzeichnis des Webservice kopiert werden muss.
Plugins zur Lastprognose Die wichtigste zu implementierende Methode bei
einem Plugin zur Lastprognose ist predictEnergyConsumption(). In ihr muss der
Programmierer den Algorithmus unterbringen, der zum Erstellen der Lastprognose benötigt wird. Sie wird nach der Konfiguration des Plugins vom Hauptprogramm aufgerufen und bekommt als Parameter ein Start- und ein Enddatum für die Lastprognose übergeben sowie eine Liste mit Kundenverträgen, die
ganz in diesen Zeitraum fallen oder sich mit ihm überschneiden. Als Rückgabe
wird ein Objekt vom Typ EnergyPrediction erwartet, das alle Informationen zur
Lastprognose beinhaltet.
Plugins zur Kaufempfehlung Für ein Plugin zur Kaufempfehlung muss die
Methode recommendSupplierContracts() implementiert werden. Die Methode
übernimmt die Erstellung der Kaufempfehlung und wird vom Hauptprogramm
aufgerufen. Übergeben werden eine Lastprognose (Typ EnergyPrediction), auf
der die Kaufempfehlung aufbaut, indem sie deren Start- und Enddatum sowie die Verbrauchswerte übernimmt, sowie drei Listen mit Lieferangeboten und
-verträgen (Typ SupplierContract). In der ersten befinden sich bereits abgeschlossene Lieferverträge, die sich mit dem Zeitraum der Kaufempfehlung überschneiden, in der zweiten Lieferangebote, die im Resultat der Kaufempfehlung
unbedingt auftauchen müssen, und in der dritten Lieferangebote, bei denen der
Algorithmus der Kaufempfehlung selbständig entscheiden kann, ob er sie zum
Abschluss vorschlägt oder nicht. Die Rückgabe der Methode ist eine Objekt
vom Typ RecommendationReturn welches ein Statuscode enthält der besagt ob
die Methode erfolgreich war. So ist es möglich, Meldungen an den Benutzer zurückzugeben, falls die von ihm angegebenen Daten nicht für die Erstellung einer
sinnvollen Empfehlung ausreichen. Das Objekt RecommendationReturn enthält
eine Kaufempfehlung vom Typ Recommendation falls kein Fehler aufgetreten
ist.
40
EIS - Energie-Informationssystem
4.2.2
Projektgruppe Energie-Informationssyteme
Fehlerbehandlung
Da sich auch bei sorgfältigen Tests nicht sicherstellen lässt, dass alle Systemfunktionen fehlerfrei arbeiten und es immer wieder zu Ausnahmesituationen
kommen kann, ist eine verlässliche und für den Nutzer transparente Fehlerbehandlung äußerst wichtig (vgl. hierzu Abschnitt 3.3.2 bei den nicht-funktionalen
Anforderungen). Auftretende Ausnahmen werden dabei vom Webservice an die
GUI weitergereicht und dort in aussagekräftige Fehlermeldungen an den Benutzer umgesetzt. Desweiteren werden die Fehler vom Webservice und vom
Service Access Layer abhängig von den jeweiligen Konfigurationseinstellungen
protokolliert. Als Voreinstellung wurden die Dateien C:\eis-log-server.txt
und C:\eis-log-client.txt sowie die ausführlichste Protokollierung gewählt.
Die Ursachen für solche Ausnahmen lassen sich im Wesentlichen in die Punkte
Programmfehler und fehlerhafte Benutzereingaben unterteilen; beide werden im
Folgenden vorgestellt.
Programmfehler Zunächst werden Programmfehler betrachtet, also solche,
die im regulären Programmablauf entstehen. Dazu werden drei Phasen des Ablaufs untersucht: Programmstart, laufender Betrieb und Beenden.
Beim Start des Webservice können Ausnahmen bezüglich fehlerhafter Konfigurationsdateien auftreten; diese werden lediglich in den Protokollen vermerkt.
Während des laufenden Betriebs können im Webservice Ausnahmen von der Datenbank bei Verletzung von Integritätsbedingungen und der Geschäftslogik bei
der Zugriffs- und Rechtekontrolle ausgelöst werden. Sofern der Rückgabewert
der jeweiligen Funktion es zulässt, wird die Ausnahme direkt in eine entsprechende Rückgabe umgesetzt. Ansonsten wird die Ausnahme vom Webservice automatisch als SOAP-Fault gekapselt und an den Client weitergereicht. Mögliche
Ausnahmen kennzeichnen einen fehlgeschlagenen Datenbankzugriff, verschiedene Fehler in der Zugriffskontrolle sowie den Hinweis, dass ein gewünschtes Objekt
nicht in der Datenbank gefunden wurde. Beim Herunterfahren des Webservice
können keine Ausnahmen auftreten, da hierbei nicht auf die Datenbank, Bibliotheken oder Konfigurationseinstellungen zugegriffen wird.
Die Kapselung als SOAP-Fault wird vom Service Access Layer durch Analyse der Nachricht (siehe Quellcode auf Seite 42) aufgehoben, die entsprechende
Ausnahme erzeugt und an die grafische Oberfläche geleitet. Da der serverseitig
verwendete Internet Information Server die Fehlermeldung und weitere Daten
zur Fehleranalyse in einem einzigen String zusammenfasst, wird diese Nachricht anhand von Trennzeichen in mehrere Strings aufgeteilt und diese mit
den Namensschemata von Exceptions verglichen. Dabei wird der letzte gefundene Treffer zur weiteren Auswertung mit den für diese Anwendung definierten
Exception-Namen verglichen. Entspricht der Exception-Name einem aus dem
Schema, wird eine entsprechende Exception erzeugt, ansonsten die allgemeine
System.Exception.
Die GUI gibt, abhängig von der aufgerufenen Funktion und der Art der Ausnahme, eine einfache Fehlermeldung aus oder informiert den Nutzer ausführlich
(siehe Abbildung 3) über die aufgetretene Ausnahme und ermöglicht ihm auch,
einen Kommentar einzugeben. Dort kann er beispielsweise beschreiben, welche
Funktion er ausführen möchte oder welche eingegebenen Daten zum Ausnahme
41
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
geführt haben. Der Kommentar wird zusammen mit den Daten der eigentlichen
Ausnahme in den konfigurierten Client-Protokollen gespeichert.
private void extractFromSoapException(SoapException exc) {
Trace.WriteLine(exc.Message);
char[] separator = { ’:’, ’>’ };
string[] splitMessage = exc.Message.Split(separator);
string excType = "";
foreach (string split in splitMessage) {
if (Regex.IsMatch(split,
"^[ ]*PG.EIS.Exceptions.[ A-Za-z]*Exception$") ||
Regex.IsMatch(split,
"^[ ]*System.Data.SqlClient.SqlException$")) {
excType = split;
excType = excType.Trim();
}
}
switch (excType) {
case "PG.EIS.Exceptions.LogOnFailedException":
Trace.WriteLineIf(TraceLevelSwitch.TraceError,
"LogOnFailedException detected by SAL.");
throw new LogOnFailedException();
[...]
}
}
Abbildung 3: Ausführliche Fehlermeldung mit Eingabemöglichkeit
Fehlerhafte Benutzereingaben Die andere Gruppe von Fehlern entsteht
durch Falscheingaben von Benutzern, beispielsweise Daten wie 31.02.2006 oder
42
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
24:45 Uhr. Gerade in Eingabefeldern für Freitext können aber auch gezielt
falsche Daten eingegeben werden, die Schadcode in Form von Datenbankbefehlen enthalten.
Zur Überprüfung der Eingaben wurden verschiedene Methoden eingesetzt.
Sofern es sich um Eingaben handelt, die direkt in vorgegebene Objekte wie
DateTime umgewandelt werden sollen, wird die von Windows.Forms bereitgestellte Funktionaliät Validator eingesetzt. Diesem gibt man über Eigenschaften
vor, welche Formate und Wertebereiche für das jeweilige Feld vor. Verletzt die
Eingabe diese Eigenschaften, wird ein Icon mit Fehlermeldung eingeblendet.
Handelt es sich um Eingaben, für die keine vorgegebenen Prüfungen existieren (z.B. Namen, Telefonnummern oder Email-Adressen), wird auf die selbst
implementierte Klasse CheckUserInput zugegriffen. Wie im Beispiel-Code auf
Seite 43 zu sehen ist, wird zunächst geprüft, ob die Eingabe notwendig ist und,
falls keine Eingabe erfolgte, ein Hinweis auf das leere Feld ausgegeben. Anschließend wird geprüft, ob die Eingabe gegen einen regulären Ausdruck gültig
ist. Dieser Ausdruck beschreibt alle möglichen Zeichenkombinationen, die eine
gültige Emailadresse darstellen. Schlägt die Prüfung fehl, wird ein Hinweis auf
fehlerhafte Zeichen ausgegeben.
public static string CheckEMail(string eMail, bool isMandatory) {
string errorMessage = null;
if (eMail == null || eMail == "") {
if(isMandatory)
errorMessage = DE.ErrorEmptyField;
}
else if (!Regex.IsMatch(eMail, "^[A-Za-z0-9._%-]+
[@][A-Za-z0-9._%-]+.[A-Za-z]{2,4}$")) {
errorMessage = DE.ErrorWrongChar;
}
return errorMessage;
}
Gibt ein Benutzer dagegen gezielt Datenbankbefehle ein, die die Datenbank
manipulieren oder gar löschen sollen, bezeichnet man den Angriff als SQLInjection. Sofern diese Eingaben die Prüfungen passieren, werden sie an den
Server weitergeleitet. Dort werden die Werte aber nicht direkt an die Datenbank übergeben, sondern zunächst in SqlParameter-Objekten gekapselt. Diese
sorgen dafür, dass sämtliche SQL-Befehle, die eventuell in den Werten enthalten
sind, maskiert werden. Durch die Maskierung erkennt der Datenbankserver sie
nicht als Befehl, sondern als Wert und speichert sie statt dessen in der Datenbank.
4.2.3
Transaktionskontrolle
Um Dateninkonsistenzen zu vermeiden, müssen insbesondere schreibende Zugriffe auf den Datenbestand ständig überwacht und bereits erfolgte Änderungen
im Rahmen einer Transaktion bei deren Scheitern wieder rückgängig gemacht
werden können. Diese Transaktionskontrolle dient maßgeblich zur Erfüllung der
43
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Als Hilfsmittel zur Implementierung dieser Transaktionskontrolle wurden
die in der Assembly System.Transactions bereitgestellten Funktionen genutzt.
Insbesondere existiert hier die Klasse TransactionScope, mit der sich Codeblöcke als eine Transaktion zusammenfassen lassen und die darin untergebrachten
Datenänderungen somit als atomare Operation entweder ganz oder gar nicht
ausgeführt werden.
Die Systemebene, auf der die Transaktionskontrolle implementiert wurde, ist
der Service Access Layer, in dem die eigentliche Geschäftslogik auf Serverseite sich befindet. Eine niedrigere Ebene wäre nicht möglich gewesen, da in den
Datenobjekten selbst keine Operationen stattfinden und die Datenzugriffsebene
austauschbar ist. Das heißt, das in der vorgenommenen Implementierung zwar
eine Datenbank eingesetzt wird, aber ein anderes Programmierer-Team genauso
gut zum Beispiel eine dateibasierte Datenhaltung einführen könnte. Wäre die
Transaktionskontrolle in der Datenzugriffsebene realisiert worden, müsste bei
jeder neu geschriebenen Datenhaltung auch die Transaktionskontrolle neu verfasst werden. Damit man sich darum nicht eigens kümmern muss, bleibt nichts
übrig als die Implementierung in der Geschäftslogikebene. Jede höhere Abstraktionsebene befände sich im Webservice oder auf Clientseite und ist nicht für die
Ausführung solcher Algorithmen gedacht.
Die Anwendung des Transaktionsmanagers sei hier anhand eines Beispiels
demonstriert. Die Klasse EnergyProfileManager beinhaltet die Geschäftslogik
für den Umgang mit Lastprofilen, die in Kundenverträgen zum Einsatz kommen.
Die Methode AddNewEnergyProfile speichert ein vom Webservice übergebenes
Lastprofil im System. Der zugehörige Code sieht wie folgt aus:
public static ReturnCode AddNewEnergyProfile(EnergyProfile ep) {
if (ep == null) {
return ReturnCode.NullParameterGiven;
}
using(TransactionScope scope = new TransactionScope()) {
if(EnergyProfileDAL.InsertEnergyProfile(ep)) {
scope.Complete();
return ReturnCode.OK;
} else {
return ReturnCode.Error;
}
}
}
Über die using-Direktive wird der gesamte kritische Code des Schreibzugriffs
einer neuen Transaktion unterworfen. Hinter der Methode InsertEnergyProfile
verbirgt sich sämtlicher Code, der auf die Datenbank zugreift. Falls das Einfügen des Objektes gelingt, wird über den Befehl scope.Complete() die Änderung
im Datenbestand irreversibel gespeichert. Andernfalls wird der Bereich über die
else-Option verlassen, ohne die Transaktion abzuschließen. Das bedeutet, dass
die bis zum Verlassen der using-Direktive durchgeführten Änderungen am Datenbestand verworfen werden.
Bei Lesezugriffen dagegen wird auf eine derartige Transaktionskontrolle verzichtet, weil es dadurch nicht durch inkonsistente Datenbestände kommen kann.
44
EIS - Energie-Informationssystem
4.2.4
Projektgruppe Energie-Informationssyteme
Rollenbasierte Sicherheit
Das Programm stellt verschiedene Rollen für Nutzer des Systems bereit, anhand derer die Zugriffsrechte auf die einzelnen Funktionen kontrolliert werden,
um unbefugte Aktionen zu verhindern, wobei ein Nutzer mehrere Rollen auf sich
vereinen kann. Die Realisierung dieses Sicherheitskonzeptes erfolgte mit Hilfe der
Microsoft Enterprise Library. Sie bietet die Möglichkeit, innerhalb des Webservices, der die Funktionen des Servers nach außen für Clients zugänglich macht,
Zugriffsregeln zu definieren. Das heißt, man weist einer Regel einen Namen zu
und gibt an, welche Rolle oder welche Kombination von Rollen ein Nutzer besitzen muss, um Funktionen des Programms, die nach dieser Regel behandelt
werden, aufrufen zu dürfen.
In Anlehnung an den Entwurf wurden folgende Rollen für Systemnutzer
eingeführt:
• Administrator: Ein Administrator hat als einziger das Recht, Nutzer anzulegen, zu bearbeiten und zu löschen. Darüber hinaus kann er ihnen Rollen
zubilligen oder aberkennen. Allerdings ergibt sich eine bedeutende Abweichung der Administratorenrolle vom Entwurf, da er keine besonderen
Zugriffsrechte auf andere Daten wie etwa Kundenverträge hat, kann sie
also nicht bearbeiten oder löschen. Dies ist der Tatsache geschuldet, dass
ein Administrator nicht notwendigerweise Ahnung von den firmeninternen
Abläufen hat und seine Pflicht oft darauf reduziert ist, das System am
Laufen zu halten, nicht aber, in die Arbeit anderer Nutzer einzugreifen.
• Kundenbetreuer: Kundenbetreuer haben Zugriff auf alle Funktionen, die
Kunden in irgendeiner Weise betreffen. Dazu gehört neben der Verwaltung
des Kundenstammes auch der volle Zugriff auf die Kundenverträge sowie
die Tarife und die Lastprofile, die diesen Verträgen zugeordnet werden.
Außerdem können Kundenbetreuer Bilanzkreise und Regelzonen verwalten. Der Kundenbetreuer übernimmt also im Vergleich zum Entwurf auch
die Rollen des Tarif- und des Lastprofilspezialisten.
• Lieferantenbetreuer: Analog zu den Kundenbetreuern können Lieferantenbetreuer auf alle Funktionen zugreifen, die zur Verwaltung des Lieferantenstammes und seiner Verträge benötigt werden. Ebenso können sie Bilanzkreise und Regelzonen anlegen, bearbeiten und löschen, da diese auch
für Lieferverträge unabdingbar sind. Nur von ihnen können Lastprognosen
und Kaufempfehlungen erstellt werden, da diese für die Entscheidungsunterstützung beim Abschluss neuer Lieferverträge benötigt werden. Es ließe
sich einwenden, dass auch Kundenbetreuer Lastprognosen erstellen können
sollten, weil Kundenverträge deren Grundlage darstellen, jedoch arbeiten
sie mit diesen Prognosen im Gegensatz zu Lieferantenbetreuern nicht weiter. Lieferantenbetreuer besorgen auch die Fahrplanerstellung, damit die
Regelzonenbetreiber der Lieferanten über bevorstehende Transaktionen informiert sind. Auch legen sie Störungsmeldungen an, wenn ein Liefervertrag nicht voll erfüllt wird. Sie vereinen damit neben ihrer ursprünglichen
Rolle auch die des Stromhändlers und des Fahrplanspezialisten auf sich.
Dies ist möglich, da die Erstellung von Fahrplänen vollständig, und die von
Lastprofilen bzw. Kaufempfehlungen fast vollständig automatisiert ist und
praktisch keine Spezialkenntnisse mehr nötig sind.
45
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• EEX-Händler: EEX-Händler haben die Möglichkeit, Block- und Stundenangebote an der EEX abzugeben und zu korrigieren. Dazu steht ihnen
neben den Formularen für die Angebote auch eine Druck- und PDF Exportfunktion zur Verfügung, da die EEX in Leipzig die Angebote per
Fax erwartet. Bestätigte Lieferungen können von ihnen mit allen nötigen
Daten ins System eingespeichert werden.
• Extern: Diese Rolle wird derzeit nicht benutzt, steht aber bereit für zukünftige Erweiterungen des Systems. Es ist angedacht, dass auch externe
Nutzer, etwa Lieferanten, über das Internet Zugriff auf bestimmte Funktionen des Systems erhalten und dazu diese Rolle zugewiesen bekommen.
Jeder Rolle ist auch eine entsprechende Regel zugeordnet, die ihren Inhabern den
Zugriff auf die entsprechenden Funktionen gewährt. Desweiteren existiert eine
Regel, die allgemeinen Zugriff ermöglicht. Diese findet beispielsweise Einsatz auf
dem Startpanel.
Die Regeln mit den zugehörigen Rollen werden in der Konfigurationsdatei des
Webservices hinterlegt (Web.Config). Beim Aufruf einer Methode des Webservices wird dann zunächst überprüft, ob die Anmeldung des Nutzers am System
überhaupt gültig ist. Unangemeldet können keine Systemfunktionen aufgerufen
werden. Ist der Nutzer korrekt angemeldet, wozu u. a. seine IP mit der im System gespeicherten Session-IP übereinstimmen muss, wird überprüft, ob seine
Rollen und die daraus resultiernden Befugnisse für die aufgerufene WebserviceFunktion ausreichen. Dazu wird vor dem eigentlichen Funktionsaufruf eine Hilfsfunktion aufgerufen, die einen String, der den Namen der Regel für die folgende
Methode beinhaltet, anhand der Einträge in der Konfigurationsdatei mit den
Rollen des Nutzers abgleicht. Nur wenn der Nutzer über alle Rollen verfügt, die
die Regel verlangt, wird der Methodenzugriff gestattet. Ansonsten kommt es zu
einer Fehlermeldung, die an die grafische Oberfläche weitergereicht wird und den
Nutzer über den verweigerten Zugriff informiert. Der folgende Codeausschnitt
zeigt als Beispiel den Aufruf einer typischen WebService-Methode.
[WebMethod]
[SoapHeader("SessionHeader", Direction = SoapHeaderDirection.In)]
public ReturnCode DeleteAllSchedules() {
EnsureSessionIsValid();
IstErlaubt("Supplier");
return ScheduleManager.DeleteAllSchedules();
}
In der ersten Zeile wird die Methode als nach außen bereitzustellende Webservice-Methode deklariert. Der folgende Befehl gibt an, dass die Sitzungsdaten
des aktuellen Nutzers übermittelt werden sollen. SoapHeaderDirection.In bestimmt, dass diese Methode vom Client aus aufzurufen ist. Nach dem Eintritt
in die Methode, die ein Objekt vom Typ ReturnCode zurückgibt, wird mit
EnsureSessionIsValid() die Gültigkeit der zuvor übergebenen Sitzungsdaten
überprüft. Hier kommt es bei Ungültigkeit zu einer Exception.
Danach testet die Methode IstErlaubt(), ob die Rechte des Benutzers für
den Zugriff auf DeleteAllSchedules() ausreichen. Hier entsteht ebenfalls eine
46
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Exception, falls dies nicht der Fall ist. Über den übergebenen String Supplier
wird festgelegt, dass diese Methode nur dann aufgerufen werden darf, wenn dem
Nutzer die gleichnamige Rolle aus der Datei Web.Config zugewiesen ist.
4.2.5
Benutzbarkeit/Usability
Schon in einem frühen Stadium der Implementierung hat die Projektgruppe
mittels so genanntem Usability Engineering [SB06] das Layout und Design des
Programms validiert und versucht, es kontinuierlich zu verbessern. Aufgrund
von Zeitmangel musste leider auf eine vollständige und wissenschaftliche Herleitung der Zielgruppen verzichtet werden. Die Projektgruppe hat sich deshalb
eines intuitiven Ansatzes bedient, zumal bei diesem Programm die Zielgruppe
generell relativ leicht zu identifizieren ist. Leider bestand zu keiner Zeit Zugriff
auf die in diesem Zusammenhang identifizierten Personen und so mussten die
Tests mit branchenfremden Personen durchgeführt werden. Jedoch wählte die
Projektgruppe bei diesen Tests bewusst Personen mit unterschiedlichen Fähigkeiten und Kenntnissen am Rechner, um eine möglichst große Abdeckung an
Nutzertypen zu erreichen.
Nachdem im Laufe des zweiten Sprints deutlich wurde, dass eine Standardisierung der Nutzungsoberfläche und eine Überprüfung der Benutzbarkeit nötig
sei, wurde zuerst der so genannte Hände-hoch-Test nach Art des FraunhoferInstitutes [FI] eingeführt. Nach dem Abschluss der Arbeiten an einem Dialog
mußte jeder Entwickler sich folgende Fragen stellen:
1. Kann ich bei Eingabefeldern erkennen, was ich in welchem Format eingeben kann?
2. Ist erkennbar, was thematisch zusammengehört?
3. Ist erkennbar, was Pflichteingaben sind?
4. Welche Aktionen werden mir angeboten?
5. Welche Aktion wird eine Folge- oder Untermaske aufrufen?
6. Wie kann ich die Maske schließen?
7. Wie kann ich in der Maske navigieren?
8. Welche Tab-Folge ist zu erwarten?
Zudem fand ab dem zweiten Sprint jeweils eine Iteration des so genannten Usability Lifecyle (siehe Abb. X) statt, d. h., mit Beendigung jedes Sprints
wurden drei Personen, die außerhalb der Projektgruppe standen, zum Test der
Usability heran gezogen. Auf Basis dieser Testergebnisse wurden dann weitere Entwurfsentscheidungen getroffen (beispielhafte Testergebnisse siehe Fragebögen im Anhang). Ziel dabei war es, sowohl Schwächen als auch Stärken zu
identifizieren und die Schwächen auszubessern, ohne dabei die Stärken zu beeinflussen.
Die Projektgruppe konzentrierte sich dabei darauf, die folgenden Eigenschaften des Programms zu überprüfen. Diese basieren zum Teil auf den DIN-ENISO-Normen 9241, 13407 und 14915 (vgl. hierzu [Usa97], [Usa99] und [Usa03]).
47
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 4: Usability Lifecycle
1. Aufgabenangemessenheit: Alle benötigten Funktionen sind im Programm
enthalten und so gestaltet das sie bei der Erledigung einer Aufgabe unterstützen.
2. Selbstbeschreibungsfähigkeit: Die enthaltenen Funktionen sind selbst deskriptiv und klar ersichtlich.
3. Steuerbarkeit: Das System ist einfach handhabbar und gibt dem Nutzer
die Kontrolle über die Dialoge.
4. Fehlertoleranz: Fehlermeldungen sind deutlich und erklärend.
5. Lernförderlichkeit: Lernstrategien werden durch schrittweisen Anleitungen
oder Anwendungsfälle unterstützt.
6. Joy of use: Arbeitsabläufe sollen durch ansprechende Gestaltung und trotz
notwendiger Konsistenz spannend“ gehalten werden und die Nutzung des
”
Programms interessanter machen.
48
EIS - Energie-Informationssystem
4.3
Projektgruppe Energie-Informationssyteme
Softwarearchitektur
Bei der Softwarearchitektur standen im wesentlichen zwei Möglichkeiten zur
Debatte: Eine monolithische Anwendung, die auf jedem für ihren Gebrauch
vorgesehenen Rechner installiert werden muss, und eine verteilte Client-ServerAnwendung, bei der ein Server zentral installiert wird und die einzelnen Rechner nur die Client-Programe benötigen. Diese Eigenschaft eines Client-ServerSystems eignet sich insbesondere, um den unter dem Punkt Skalierbarkeit subsummierten Anforderungen gerecht zu werden.
Der monolithische Programmblock hätte als Vorteil eine vergleichsweise hohe Effizienz für die einzelnen Nutzeranfragen mit sich gebracht, weil die einzelnen Komponenten eine hohe Verzahnung miteinander aufgewiesen hätten.
Allerdings wäre dieser Ansatz auch sehr problembehaftet gewesen. Die Wartung durch den Anwender wäre erschwert worden, es hätten sich, wenn auch die
Datenbank auf jedem Rechner hätte aufgesetzt werden müssen, Probleme mit
Dateninkonsistenzen ergeben, und ein Austausch von Teilen des Programms wäre kaum möglich gewesen. Gerade der letzte Punkt, die Austauschbarkeit von
Teilen des Programms, war aber auch eine wesentliche nicht-funktionale Anforderung der Projektgruppe (siehe Abschnitt 3.3.5). Dazu gehört etwa, dass
verschiedene Clients angeboten werden können oder dass man den Datenzugriff
über eine andere Datenbank laufen lassen kann. Client-Server-Anwendungen
erzwingen im allgemeinen auch eine klare Strukturierung des Programms und
begünstigen damit einfache Wartung durch die Entwickler. Die Geschwindigkeit
ist zwar durch den Zwang, ständig Daten zwischen Client und Server hin- und
herschicken zu müssen, geringer, jedoch wiegt das nicht die bislang beschriebenen Vorteile auf. Die Projektgruppe entschied sich also für eine mehrschichtige
Client-Server-Architektur.
Die Architektur unseres Systems orientiert sich dabei bis auf wenige Punkte
komplett am Zwischenberichts (vgl. dort Abbildung 4.23). Entfallen sind aus
Zeitgründen beispielhafte Implementierungen von Diensten, die externen Beteiligten zum direkten Zugriff über das Internet bereitgestellt werden sollten.
Hauptwerkzeug zur Erstellung des Projekts war Microsoft Visual Studio 2005,
so dass auch auf die Fähigkeiten von .NET 2.0 zurückgegriffen werden konnte.
Das gesamte Programm wurde als so genannte Lösung (Solution) mit mehreren
Teilprojekten (Projects), die einzelne Ebenen der Architektur umfassen, erstellt.
Diese Ebenen werden im folgenden vorgestellt.
Der in Abbildung 4.23 des Entwurfs zu sehende Simulator wird durch zwei
Programme zum serverseitigen Befüllen der Datenbank mit großen Mengen an
Kunden- und Lieferantendaten sowie einen ausführlichen Webservice-Test (siehe
Abschnitt 6.2) ersetzt.
Abbildung 5 gewährt einen Gesamtüberblick über das implementierte System. Auf Serverseite befinden sich Datenhaltung und Datenzugriff sowie der
Webservice, dessen Funktionen auch dem Client zugänglich sind. Auf Clientseite befinden sich die GUI sowie der Service Access Layer als Vermittler zwischen
GUI und Webservice. Über alle Ebenen erstrecken sich die Datenhaltungsklassen
und die rollenbasierte Sicherheit.
Abbildung 6 zeigt die Projektstruktur des Systems in Visual Studio. Jedes
Rechteck innerhalb der Solution steht für ein Teilprojekt. Eine hellgelbe Ein49
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 5: Architekt des implementierten Energieinformationssystems
Abbildung 6: Struktur der Solution in Microsoft Visual Studio
50
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
färbung bedeutet, dass das jeweilige Projekt serverseitig liegt, hellgrüne Farbe
steht für Projekte auf Clientseite. Die Teilprojekte Webservice und DataObjects
sind anders eingefärbt, weil sie beiden Seiten zur Verfügung stehen.
4.3.1
Datenhaltung
Die Datenhaltungsklassen stellen als unterste Schicht die abstrakten Datentypen bereit, die das Rückgrat des Systems für den Datenaustausch zwischen
den verschiedenen Ebenen bilden. Es wurden zur angemessenen Abbildung des
Weltausschnitts Klassen für Stammdaten (Nutzer, Kunden, Lieferanten sowie
Verträge und Rechte), Entscheidungsunterstützung (Lastprognosen und Kaufempfehlungen), EEX-Handel und Fahrpläne angelegt. Sie stehen dem Server
vollständig zur Verfügung. Der Client hingegen sieht nur diejenigen Klassen, die
als Rückgabewerte von Webservice-Methoden dienen. Zusätzlich zu den Klassen,
die vollständige Entitäten repräsentieren, gibt es auf das für jeweilige Aufgabe
reduzierte Maß Hilfsklassen, die nur die wichtigsten Informationen einer Entität
enthalten. Dies dient dazu, die Datenmengen, die über den Webservice zu übertragen sind, zu reduzieren, da insbesondere bei Anfragen wie Zeige eine Über”
sicht aller Kundenverträge!“ tausende Objekte erzeugt und gesendet werden
müssen. Indem nur die tatsächlich zur Anzeige derartiger Übersichten erforderlichen Daten ausgelesen und übertragen werden – vor allem werden komplexe
Objekthierarchien mit zusätzlichen Zugriffen auf die Datenhaltung vermieden
–, sinkt die zu übertragende Datenmenge und damit die Zugriffszeit, was die
Anforderung bezüglich hoher Geschwindigkeit von Datenhaltung und -zugriff
erfüllen hilft.
4.3.2
Server
Datenzugriff Zur Speicherung der Daten wurde wie geplant der Microsoft
SQL Server 2005 eingesetzt, in dem für jede Entität, d. h. jeden abstrakten
Datentypen, eine eigene, gleichnamige Tabelle erzeugt wurde. Darüber hinaus
waren an mehreren Stellen Verknüpfungstabellen nötig, um m-n-Beziehungen
zu realisieren. Für das Befüllen der Hilfsklassen mit Daten wurden Views eingerichtet, die die benötigten Attribute ohne zusätzliche Datenbankabfragen bereitstellen. Vergleiche hierzu Abbildung 7, die von Microsoft SQL Server 2005
aus den vorhandenen Tabellen und Beziehungen zwischen diesen erzeugt wurde
und das Datenbankschema wiedergibt. Dabei sind die einzelnen Tabellen jeweils
mit ihrem Namen und den als Primär- oder Fremdschlüssel genutzen Attributen
zu sehen. Die Linien zwischen den Tabellen geben Fremdschlüsselbeziehungen
an.
Der Zugriff auf die Daten erfolgt über eine austauschbare Architekturschicht,
im Projekt Data Layer oder Data Access Layer genannt (vgl. Abbildung 4.23
des Zwischenberichts). Sämtlicher Code, der auf die Daten zugreift, ist in dieser
Schicht gekapselt. In der Regel wurden für alle Entitäten die Standardroutinen
zum Einfügen, Bearbeiten, Löschen und Anzeigen bereitgestellt, wie es im Entwurf vorgesehen wurde. Gelegentlich gibt es Ausnahmen, etwa bei Kaufempfehlungen und Lastprognose, wo eine (manuelle) Nachbearbeitung nicht vorgesehen
ist. Zusätzlich wurden bei einigen Objekten weitere Methoden bereitgestellt, die
etwa nur zur Zeit freigegebene Tarife für Kundenverträge ausgeben.
51
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 7: Datenbankschema des Energieinformationssystems
52
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Durch die Kapselung des Datenbankcodes in einer Schicht ist es möglich,
diese Schicht komplett durch eine andere auszutauschen, die beispielsweise mit
einem Dateisystem im Hintergrund arbeitet, ohne die anderen Schichten anpassen zu müssen.
Als weiteres Hilfsmittel kam die Microsoft Enterprise Library zum Einsatz.
Geschäftslogik In der Geschäftslogik werden alle komplizierten Algorithmen
gebündelt und ausgeführt. Dies umfasst:
• Berechnung von Lastprognosen über Plugins
• Berechnung von Kaufempfehlungen über Plugins
• Berechnung von aktuellen Über- und Unterdeckungen
• Erstellung von Fahrplänen
• Überwachung von Transaktionen
Generell ist die Geschäftslogikschicht (in Abbildung 4.23 des Zwischenberichts
als Business Layer bezeichnet) die Schicht, an die der Webservice sämtliche
Anfragen der Clients delegiert, sobald er festgestellt hat, dass der Nutzer diese
Anfrage überhaupt tätigen darf. Anders als noch im Entwurf dargelegt, gibt es
innerhalb der Geschäftslogik keine streng voneinander abgegrenzten Module für
genau je eine Komponente des Systems, sondern vielmehr Manager-Klassen für
alle dem Client zugänglichen Funktionen. Dabei wurde je eine solche ManagerKlasse für eine einzelne oder wenige logisch direkt zusammenhängende Klassen
erstellt.
Reine Datenbankabfragen werden von der Geschäftslogik in der Regel ungefiltert an die darunterliegende Datenzugriffsebene weitergeleitet und ihre Ergebnisse nach erfolgreicher Transaktionsausführung zurückgegeben. Mehr über die
einzelnen Funktionen findet sich in den Abschnitten zu Transaktionskontrolle
(4.2.3), Lastprognosen (5.3.1), Kaufempfehlungen (5.3.3), Fahrplänen (5.4) und
EEX-Handel (5.2).
Webservice Der Webservice dient als Vermittler zwischen Client und Server und übernimmt die Funktion der Fassaden aus dem Zwischenbericht. Benutzt wird das plattformunabhängige SOAP -Protokoll[SOA03] in Verbindung
mit dem Internet Information Server von Microsoft. Zu jeder Methode der Geschäftslogik, auf die der Client zugreifen können soll, existiert eine gleichnamige
Methode im Webservice, die nach außen zur Verfügung gestellt wird.
Berechnungen finden beim Aufruf einer Webservice-Methode nicht statt, da
sämtliche Aufrufe an die Geschäftslogik weitergeleitet und ihre Ergebnisse an
den Client zurückgeschickt werden. Es wird allerdings im Rahmen der rollenbasierten Sicherheit überprüft, ob der aktuelle Nutzer eine gültige Anmeldung am
System sowie die nötigen Rechte zum Aufruf dieser Methode vorweisen kann.
Ist dem nicht so, wird der Aufruf durch Werfen der entsprechenden Exception
abgebrochen.
53
EIS - Energie-Informationssystem
4.3.3
Projektgruppe Energie-Informationssyteme
Client
Service Access Layer Der Service Access Layer ist das Bindeglied zwischen
grafischer Oberfläche und Webservice. Er greift über eine Schnittstelle auf die
vom Webservice bereitgestellten Methoden zu und stellt sie der grafischen Oberfläche bereit. Berechnungen finden in dieser Schicht nicht statt.
Grafische Oberfläche (Client) Die grafische Benutzeroberfläche, auch GUI
abgekürzt, sorgt für die Interaktion des Nutzers mit dem Programm. Die fertige GUI ist dabei ein Zwischenprodukt zwischen Thin und Rich Client, weil
sämtliche komplexen Algorithmen wie etwa zur Berechnung eines Lastprofils
serverseitig durchgeführt werden, einfache Aufgaben wie etwa Datenvalidierung
aber wie im Entwurf angekündigt Aufgabe der GUI-Schicht bleiben. Der Grund
dafür ist, dass bei serverseitiger Validierung ständig Verbindungen über den
Webservice auf- und abgebaut werden müssten und dies mit dem zugehörigen
Datenaustausch eine erhebliche Systembelastung darstellen würde, nur um vergleichsweise simple Berechnungen wie etwa die Überprüfung eines Zahlwertes
auszulagern.
Zur Realisierung wurde im Wesentlichen die Grafikbibliothek Windows.Forms
benutzt. Die Oberfläche ist dabei zweigeteilt in eine Navigationsleiste auf der
linken Seite und wechselnde Datenpanels auf der rechten Seite. Ebenso wurden
Kontextmenüs, die mit der rechten Maustaste geöffnet werden, eingefügt sowie
eine Menüleiste am oberen Rand des Programms, um den Zugriff auf die einzelnen Funktionen möglichst benutzerfreundlich und effizient zu gestalten. Die
Darstellung der Daten erfolgt als Übersicht in der Regel über Tabellen bzw.
bei ihrer Eingabe über sich öffnende Eingabefenster, in denen auch die oben
beschriebenen Validierungsfunktionen aufgerufen werden.
Außerdem wurden an manchen Stellen, z. B. bei der Anzeige der aktuellen
Über- oder Unterdeckung zur Veranschaulichung dynamisch generierte Diagramme eingesetzt, die mit ZedGraph [Zed] erzeugt wurden. Für die Navigationsleiste
wurde die Bibliothek Fireball.Windows.Forms von DotNetFireball [Fir] verwendet. Näheres zu den in der grafischen Oberflächen verwendeten Technologien
findet sich in Abschnitt 4.1.3.
4.4
Ablauf der Implementierung
Die Implementierung begann wenige Tage nach Anfang des Sommersemesters
2006 und dauerte bis Ende September desselben Jahres. Zunächst stand im
Vordergrund, den modellierten Weltausschnitt mit seinen Entitäten und Beziehungen zwischen ihnen (siehe Abbildung 1) in Klassen zu übersetzen, diese
Klassen mit allen benötigten Attributen zu versehen und das so entstandene
Datengerüst in der Datenbank adäquat abzubilden. Zeitgleich wurden die verschiedenen Schichten der Architektur wie in Abschnitt 4.3 beschrieben festgelegt. Um die Kommunikation des Programms mit der Datenbank sicherzustellen,
wurden jetzt die Datenbankzugriffsklassen erstellt und mit Standardfunktionen
zum Auslesen, Anlegen, Bearbeiten und Löschen der jeweiligen Objekte ausgestattet. Obwohl im weiteren Verlauf des Projekts hin und wieder kleinere
54
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Änderungen am Klassengerüst, der Datenbank und dem -zugriff nötig wurden,
erwiesen sich diese Projektteile als gut durchdacht und dementsprechend stabil.
Die weitere Implementierung orientierte sich im wesentlichen an den in Abschnitt 3 identifizierten Funktionsblöcken. Dabei wurden jeweils vertikale Prototypen erstellt, das heißt, eine oder mehrere Funktionen wurden immer komplett
durch alle Ebenen hindurch programmiert. Dieses Vorgehen erwies sich als vorteilhaft, da die jeweiligen Funktionen über die grafische Oberfläche und damit
unter realistischer Benutzerinteraktion getestet werden konnten.
Zunächst wurden die Stammdaten (Kundenverträge, Lieferangebote etc.)
server- und clientseitig ausprogrammiert und mit einer grafischen Oberfläche
versehen. Es folgten darauf aufbauend die Funktionen zur Entscheidungsunterstützung, zum EEX-Handel und zur Fahrplanverwaltung. Bei der Entscheidungsunterstützung traten allerdings insofern Probleme auf, als das zugehörige
Pluginsystem für Lastprognosen und Kaufempfehlungen in der ersten Version seine aufwändigen Berechnungen clientseitig ausführte, was nicht dem Sinn
einer Client-Server-Architektur entspricht. Zeitgleich zur Implementierung der
Handelsfunktionen musste daher das Pluginssystem umgeschrieben werden. Die
Algorithmen mussten dazu allerdings nicht angepasst werden.
Während der Implementierung der einzelnen Funktionsblöcke wurden ständig Fehlerbehandlung und Transaktionskontrolle in die neu erstellten Klassen
eingefügt. Ebenso wurde ständig auf ein einheitliches Aussehen der verschiedenen GUI-Bestandteile geachtet und bei Abweichungen Anpassungen vorgenommen. Die rollenbasierte Sicherheit wurde dagegen erst nach weitgehendem Abschluss der Implementierungsarbeiten hinzugefügt, da dies nur sehr geringfügige
Änderungen des Programmcodes und ausschließlich in der Webservice-Schicht
nach sich zog und somit auf einen Schlag erledigt werden konnte.
Bei der Programmierung der Schnittstellen wurde sehr darauf geachtet, dass
die Anforderungen hinsichtlich der Beachtung von Industriestandards eingehalten wurden. Die Fahrplanschnittstelle wurde so gestaltet, dass die Fahrplandaten in der Datenbank gespeichert und automatisch in eine XML-Datei im ESSFormat exportiert werden. Die EEX-Daten werden über ein separates Programm
erfasst, das in den Taskplaner unter Windows eingebunden werden kann und jeden Tag automatisch neue oder fehlende Daten von den EEX-Webseiten ausliest
und in die Datenbank einfügt. EEX-Angebote werden ins Programm eingegeben und können automatisch in eine Faxvorlage exportiert werden, die von der
EEX zur Abgabe von Angeboten eingesetzt wird. In allen drei Fällen wurden
also die selbst gestellten Anforderungen erfüllt. Über die im Anforderungskapitel genannten Schnittstellen hinaus erwies es sich als nützlich, Importfunktionen
für Regelzonen- und Bilanzkreisdaten anzubieten, da hier ebenfalls recht große
Datenmengen anfallen, die oft aktualisiert werden müssen.
Den letzten Monat verbrachte die Projektgruppe im wesentlichen mit ausführlichen Tests aller Funktionen und Fehlerkorrekturen, da sich bei derartigen
Projekten Fehler auch bei sorgfältiger Programmierung nicht vermeiden lassen.
55
EIS - Energie-Informationssystem
5
Projektgruppe Energie-Informationssyteme
Implementierung der einzelnen Funktionen
Dieses Kapitel gewährt einen überaus detaillierten Überblick über die Implementierung der einzelnen Programmfunktionen. Im Vordergrund steht dabei zu
erklären, wie die Implementierung in den einzelnen Schichten erfolgte und was
die Funktionen genau leisten. Genaue Hinweise zur Bedienung der einzelnen
Funktionen sind im Handbuch (Kapitel 9) zu finden.
5.0.1
ReturnCode-Rückgabewerte
In den folgenden Abschnitten wird bei vielen Funktionen auf Rückgabewerte des
Typs ReturnCode verwiesen, die das Ergebnis oder den Erfolg einer Operation
anzeigen. Es handelt sich dabei um eine Enumeration, die eine überschaubare
Anzahl an Codes enthält, die bestimmte Sachverhalte anzeigen. Dieser Typ wird
insbesondere dann eingesetzt, wenn boolesche Werte zu ungenau sein können.
So reicht es zum Beispiel aus Sicht der Fehlerbehandlung nicht aus, wenn nur
bekannt ist, dass eine Datenbankabfrage fehlgeschlagen ist; vielmehr ist hier eine
möglichst genaue Angabe des Grundes wichtig.
An dieser Stelle wird eine Übersicht über die in der Enumeration vorhandenen Werte und ihre Bedeutung geboten.
• None: Wird zum Initialisieren genutzt und solange noch kein genauerer
Wert ermittelt wurde.
• OK: Bestätigt den Erfolg einer Operation.
• DBFailure: Gibt an, dass eine Operation aufgrund einer falschen oder
unzulässigen Datenbankanfrage nicht vollführt werden konnte.
• Error: Gibt an, dass während einer Operation ein Fehler aufgetreten ist,
der ein erfolgreiches Beenden verhindert.
• NotFound: Zeigt an, dass ein gesuchtes Objekt nicht gefunden wurde.
• NullParameterGiven: Weist auf mindestens einen zum Durchführen einer
Operation fehlenden Parameterwert hin.
• IsUsed: Zeigt an, dass ein gespeichertes Objekt noch durch andere gespeicherte Objekte referenziert wird, so dass eine Löschung damit ausgeschlossen ist.
• IsCurrentlyServed: Gibt an, dass ein Vertrag momentan läuft und deswegen nicht gelöscht werden darf.
• Yes: Wird teilweise wie OK eingesetzt, teilweise als Antwort auf Anfragen,
ob ein Objekt eine bestimmte Eigenschaft besitzt.
• No: Verneint, dass ein Objekt eine bestimmte Eigentschaft besitzt.
• HasDisturbances: Wird eingesetzt, wenn ein Liefervertrag wegen noch bestehender Störungen nicht gelöscht werden darf.
56
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• NoSupplierContract: Wird benutzt, wenn eine Kaufempfehlung keine Lieferangebote enthält.
• CalculationFailed: Zeigt an, dass eine numerische Berechnung fehlgeschlagen ist.
• IsLastAdmin: Gibt an, dass ein Nutzer nicht gelöscht werden darf, weil er
der letzte Administrator ist.
5.1
5.1.1
Stammdaten
Systemnutzer
Allgemeines Die Systemnutzer sind die Benutzer des Programms die die
Funktionen des Energieinformationssystems nutzen. Dabei ist es nötig, die verschiedenen Funktionen auch nur denen zur Verfügung zu stellen, die zur Benutzung dieser authorisiert sind. Die Benutzerverwaltung stellt dies sicher und
macht es möglich, einem Benutzer eine oder mehrere dynamisch konfigurierbare
Rollen zuzuordnen. Rollen ermöglichen es, die Rechte zur Benutzung des Programms einzuschränken. Genaueres über das Rollenkonzept kann in Abschnitt
4.2.4 nachgelesen werden.
Die Verwaltung der Systemnutzer deckt die im Entwurf beschriebenen Anwendungsfälle 1 bis 6 ab. Zusätzlich werden An- und Abmeldung realisiert.
Abbildung 8: Klassen EisUser, Person und EisUserRole
Nutzer mit ihren Daten werden von der Klasse EisUser repräsentiert, die
von der allgemeineren Klasse Person abgeleitet ist. Die zugehörigen Benutzerrollen werden in der Klasse EisUserRole gespeichert, die als Array in jedem
Nutzerobjekt gehalten werden (siehe Abbildung 8).
Systemnutzer im Datenzugriff Nutzer werden in der Datenbanktabelle
EisUser gespeichert, die die Attribute der gleichnamigen Klasse abbildet. Die
verschiedenen vom System angebotenen Benutzerrollen liegen in der Tabelle
Role und werden über die Tabelle EisUserRole mit den einzelnen Nutzern verknüpft.
In der Klasse EisUserDAL (siehe 9) wird der Datenzugriff auf Benutzer und
ihre Rechte folgendermaßen gewährleistet:
57
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 9: Klasse EisUserDAL
• DeleteEisUser : Identifiziert einen Systembenutzer über ein GUID-Objekt,
löscht diesen aus der Datenbank und zeigt über einen ReturnCode den
Erfolg der Aktion an.
• GetAllEisUsers: Liefert alle in der Datenbank gespeicherten Systemnutzer
zurück.
• GetEisUser : Identifiziert einen Systembenutzer über ein Guid-Objekt in
der Datenbank und liefert das entsprechende EisUser-Objekt zurück
• GetEisUser : Identifiziert einen Systembenutzer über ein string-Objekt,
das das eindeutigen Login enthält, in der Datenbank und liefert das entsprechende EisUser-Objekt zurück.
• GetUsersByFirstname: Identifiziert einen Systembenutzer über ein stringObjekt in der Datenbank anhand seines Vornamens und liefert die entsprechenden EisUser-Objekte zurück.
• GetUsersByLastname: Identifiziert einen Systembenutzer über ein stringObjekt in der Datenbank anhand des Nachnamens und liefert die entsprechenden EisUser-Objekte zurück.
• GetUsersByLogin: Funktioniert wie GetEisUser(string s).
• GetUsersByRole: Identifiziert einen Systembenutzer über ein string-Objekt,
das einen Rollennamen angibt, in der Datenbank und liefert eine Liste mit
allen Nutzern zurück, die diese Rolle innehaben.
• GetUsersOnline: Liefert alle in der Datenbank als eingeloggt gekennzeichneten Systemnutzer in Form einer Liste zurück.
58
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• InsertEisUser : Speichert das übergebene EisUser-Objekt in der Datenbank und gibt den Erfolg der Operation über ein ReturnCode-Objekt zurück.
• UpdateEisUser : Speichert das übergebene, geänderte EisUser-Objekt in
der Datenbank und liefert das Ergebnis der Operation über ein ReturnCodeObjekt zurück.
• IsUserUsed : Überprüft ob der durch das übergebene eindeutige ID in Form
einer GUID) repräsentierte Systemnutzer durch Referenzen auf andere Datensätze von einer Löschung ausgeschlossen ist, weil sonst die referenzielle
Integrität verloren ginge.
Abbildung 10: Klasse UserManager
Systemnutzer im der Geschäftslogik In der Geschäftslogik ist der Systemnutzer durch die Klasse UserManager (siehe Abbildung 10) repräsentiert,
hier werden keine Algortihmen ausgeführt sondern nur Zugriff auf die Datenhaltungsschicht bereitgestellt. Folgende Methoden stehen zur Verfügung:
• AddNewEisUser : Ruft mit dem übergebenen EisUser-Objekt die statische Methode InsertEisUser der Klasse EisUserDAL auf und gibt deren
Ergebnis zurück.
• DeleteEisUser : Ruft mit dem übergebenen Guid-Objekt die statische Methode DeleteEisUser der Klasse EisUserDAL auf und gibt deren Ergebnis
zurück.
• GetAllEisUsers: Ruft statische Methode GetAllEisUsers der Klasse
EisUserDAL auf und gibt deren Ergebnis zurück.
59
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• GetEisUser : Ruft mit dem übergebenen Guid-Objekt die statische Methode GetEisUser der Klasse EisUserDAL auf und gibt deren Ergebnis
zurück.
• GetEisUserRoles: Ruft mit dem übergebenen Guid-Objekt die statische
Methode GetEisUserRoles der Klasse EisUserDAL auf und gibt deren Ergebnis zurück.
• GetUsersByFirstname: Ruft mit dem übergebenen string die statische
Methode GetUsersByFirstname der Klasse EisUserDAL auf und gibt deren
Ergebnis zurück.
• GetUsersByLastname: Ruft mit dem übergebenen string die statische
Methode GetUsersByLastname der Klasse EisUserDAL auf und gibt deren
Ergebnis zurück.
• GetUsersByLogin: Ruft mit dem übergebenen string die statische Methode GetUsersByLogin der Klasse EisUserDAL auf und gibt deren Ergebnis
zurück.
• GetUsersByRole: Ruft mit dem übergebenen string die statische Methode GetUsersByRole der Klasse EisUserDAL auf und gibt deren Ergebnis
zurück.
• IsUserUsed : Ruft mit dem übergebenen EisUser-Objekt die statische Methode IsUserUsed der Klasse EisUserDAL auf und gibt deren Ergebnis
zurück.
• LogOff : Ruft mit dem übergebenen Guid-Objekt die statische Methode
DeleteSession der Klasse SessionManager auf und meldet den Nutzer mit
der übergebenen GUID dadurch vom System ab.
• LogOn: Meldet einen Nutzer mittels eines übergebenen Logins und eines
Passworts am System an und initialisiert eine neue Session für diesen Nutzer oder verweigert die Anmeldung im Falle fehlerhafter Anmeldedaten.
• UpdateEisUser : Ruft mit dem übergebenen string die statische Methode
GetUsersByRole der Klasse EisUserDAL auf und deren Ergebnis zurück.
Systemnutzer in der grafischen Oberfläche Die Nutzerverwaltung wird
im Programmmenü durch den Button Systemnutzer repräsentiert, wobei nur
Administratoren auf diese Funktion zugreifen dürfen. Im zugehörigen Panel (siehe Abbildung 11) werden alle Systembenutzer mit ihren Stammdaten angezeigt.
Weitere Möglichkeiten in der Nutzerverwaltung sind die Suche bestimmter Benutzer anhand verschiedener durch ein Drop-Down-Fenster auswählbarer
Parameter. Am unteren Rand befinden sich die Funktionen zum Anlegen, Bearbeiten und Löschen. Zum Anlegen öffnet sich ein Panel (siehe Abbildung 12
mit Eingabefeldern und einer Liste zur Rechtevergabe als Popup, analog öffnet
sich das gleiche Panel beim Bearbeiten eines Benutzers, allerdings muss der zu
bearbeitende Nutzer in der Liste ausgewählt worden sein. Zum Löschen eines
Benutzers ist eine Bestätigung nötig. Das Programm verbietet die Löschung des
letzten Administratoren bzw. die Aberkennung des Administratorenstatus für
60
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 11: Übersicht über alle Systemnutzer
Abbildung 12: Anlegen oder Bearbeiten eines Nutzers
61
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
den letzten verbleibenden, da sonst mangels Zugriffsrechten kein Nutzer mehr
Zugriff auf die Nutzerverwaltung hätte.
5.1.2
Kunden und -verträge, Tarife und Lastprofile
Allgemeines Unter Stromkunden sind im Zusammenhang dieses Projektes
die Endabnehmer, also Endkunden eines Händlers zu verstehen, die Verträge
mit ihm abschließen und auf dieser Basis mit Strom beliefert werden. Zu jedem
Kunden werden die wesentlichen personenbezogenen Daten inklusive Bankverbindung gespeichert. Kunden können wegen der referenziellen Integrität der
Daten nur gelöscht werden, wenn sie nicht über Verträge mit dem Händler verfügen. Stromkunden werden über die von der Klasse Person abgeleitete Klasse
Customer dargestellt. In der Datenbank speichert die Tabelle Customer alle zu
Kunden anfallenden Daten.
Kundenverträge sind Lieferverträge, die mit einem Endkunden des Unternehmens abgschlossen werden. Diese können angelegt, bearbeitet und für den
Fall, dass kein Kunde mit ihnen Verknüpft ist, gelöscht werden. Jeder Kundenvertrag ist einer Regelzone und einem Regelkreis zugeordnet, weshalb es in der
Klasse CustomerContract, die Kundenverträge darstellt, entsprechende Referenzen gibt. Darüber hinaus gibt es zur Reduzierung des Datenverkehrs eine
vereinfachte Version der Kundenverträge, die in einem Datenbankview gespeichert und in der Klasse CustomerContractInfo gehalten wird.
Ein Tarif, dargestellt durch die Klasse Tariff beschreibt einen Energietarif,
der sich aus Strom aus herkömmlichen Quellen, sowie erneuerbaren Energien
zusammensetzt. Tarife können aktiv oder inaktiv sein. Sind sie aktiv, können
sie für neu abgeschlossene Kundenverträge benutzt werden, sonst sind sie auf die
Nutzung in vorhandenen Verträgen beschränkt. Jeder Vertrag hat genau einen
Tarif.
Lastprofile, die über die Klasse EnergyProfile dargestellt werden, sind die
Grundlage für Prognosen über den Energiebedarf, den der Energiehändler, der
das System benutzt, decken muss. Sie ordnen gemäß den Vorgaben der European
Transmission System Operators (ETSO) jeder Viertelstunde eines Tages einen
Energiebedarf in MWh zu. Ein Lastprofil enthält also insgesamt 96 Werte. Jedem
Kundenvertrag wird genau ein Lastprofil zugewiesen, damit ersichtlich ist, wann
das zu beliefernde Objekt mit wieviel Energie versorgt werden muss.
Im Entwurf war noch vorgesehen, insgesamt sechs derartige Zeitreihen in
einem Lastprofil mit je 96 Werten unterzubringen, um eine Differenzierung der
Verbrauchswerte zu erreichen, da diese je nach Jahreszeit und Wochentag stark
voneinander abweichen. Geplant waren Zeitreihen, die zwischen Sommer, Winter und einer Übergangsjahreszeit unterscheiden sowie zwischen Werktagen und
Wochenenden.
Dies Modell wurde während der Implementierung zugunsten einer einzigen
Zeitreihe – wie oben beschrieben – verworfen. Dafür gibt es im wesentlichen zwei
Gründe:
• Zum einen ist es nicht angenehm, als Nutzer knapp 600 Werte eingeben zu
müssen, um ein Lastprofil zu erstellen. Hierfür eine geeignete, d. h. nutzbare grafische Oberfläche zu erstellen, wäre praktisch unmöglich gewesen.
62
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• Andererseits ist das Modell mit sechs Zeitreihen schon recht speziell und
übernimmt durch die Abänderung der Verbrauchswerte in Abhängigkeit
von bestimmten Faktoren bereits Aufgaben, die eigentlich der Lastprognose und ihren Algorithmen zufallen. Daher erscheint es sinnvoller, dies
auch auf diese Komponente zu verlagern und die Lastprognose auf eine
Zeitreihe zu beschränken.
Das Zusammenspiel zwischen den verschiedenen Objekten wird in Abbildung 13
repräsentiert. Durch die Kundenverwaltung werden die im Entwurf beschriebenen Anwendungsfälle 7 bis 27 abgedeckt.
Um den Betrieb des Systems realitätsnah zu simulieren, wurden mehrere
zehntausend automatisch generierte Kunden mit einem oder mehreren Verträgen
in die Datenbank eingespeist. Als Grundlage für die Verträge dienten fünf real
existierende Lastprofile, die im Internet heruntergeladen werden können [Las06]
und unter anderem vom VDEW (Verband der Elektrizitätswirtschaft) benutzt
werden. Es handelt sich dabei um Profile für Telefonzellen, Straßenbeleuchtungen, Privathaushalte, kleine Gewerbebetriebe und landwirtschaftliche Betriebe.
Es werden jeweils mehrere Zeitreihen für Werte an verschiedenen Tagen und zu
verschiedenen Jahreszeiten angeboten. Die Entscheidung fiel dabei stets auf die
Werte für Werktage während der Übergangszeit zwischen Sommer und Winter
bzw. umgekehrt, weil dies relativ gut den Verbrauch bei durchschnittlichen Temperaturen repräsentiert. Die jahreszeitliche Anpassung der Werte erfolgt dann
in den Lastprognosen (siehe Abschnitt 5.3.1).
Kunden im Datenzugriff Kundenobjekte werden durch die Datenbanktabelle Customer abgebildet. In der Klasse CustomerDAL (siehe Abbildung 14)
wird der Datenzugriff folgendermaßen gewährleistet:
• AddNewCustomer : Fügt den übergebenen Kunden in die Datenbank ein
und gibt den Erfolg der Operation als ReturnCode zurück.
• CountCustomers: Zählt alle in der Datenbank vorhandenen Kundendatensätze und liefert deren Anzahl als Rückgabewert zurück.
• CreateCustomerFromDataRow : Erzeugt aus einem übergebenen Datensatz
aus der Datenbank ein neues Customer-Objekt und liefert es zurück.
• DeleteCustomer : Identifiziert einen Kunden über ein Guid-Objekt, löscht
diesen aus der Datenbank und zeigt über einen ReturnCode den Erfolg
der Aktion an.
• GetAllCustomers: Liefert alle in der Datenbank gespeicherten Kunden als
Liste von Customer-Objekten zurück.
• GetCustomer : Identifiziert einen Kunden über ein Guid-Objekt in der Datenbank, liest ihn aus und gibt ihn zurück.
• UpdateCustomer : Bekommt ein Kundenobjekt übergeben und aktualisiert
die Daten des bereits gespeicherten Datensatzes mit derselben GUID und
gibt den Erfolg der Aktion als ReturnCode zurück.
63
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 13: Klassen zur Kundenverwaltung
Abbildung 14: Klasse CustomerDAL
64
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• GetCustomerByNumber : Identifiziert einen Kunden anhand seiner von der
Datenbank vergebenen eindeutigen Kundennummer, liest ihn aus und gibt
ihn zurück.
• GetCustomerByName: Liefert eine Liste mit allen Kunden zurück, deren
Nachname einer übergebenen Zeichenkette hinreichend ähnelt.
• GetCustomerByCity: Liefert eine Liste mit allen Kunden zurück, deren
Wohnort einer übergebenen Zeichenkette hinreichend ähnelt.
• GetCustomerByContract: Liefert einen Kunden zurück, dem ein Kundenvertrag mit einer bestimmten übergebenen GUID zugeordnet ist oder
null, falls kein Kunde gefunden wurde.
Abbildung 15: Klasse CustomerManager
Kunden in der Geschäftslogik In der Geschäftslogik steht die Klasse
CustomerManager bereit (siehe Abbildung 15). Hier werden keine Algorithmen
ausgeführt sondern nur Zugriff auf die Datenhaltungsschicht bereitgestellt. Folgende Methoden stehen zur Verfügung:
• AddNewCustomer : Ruft mit dem übergebenen Customer-Objekt die statische Methode InsertCustomer der Klasse CustomerDAL auf und gibt deren
Ergebnis zurück.
• CountCustomer : Ruft die gleichnamige Methode aus der Klasse CustomerDAL
auf und gibt deren Ergebnis zurück.
• DeleteCustomer : Ruft mit dem übergebenen GUID-Objekt die statische
Methode DeleteCustomer der Klasse CustomerDAL auf und gibt deren Ergebnis zurück.
• GetCustomer : Ruft mit dem übergebenen Customer-Objekt die statische
Methode GetCustomer der Klasse CustomerDAL auf und gibt deren Ergebnis zurück.
65
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• GetAllCustomers: Ruft die statische Methode GetAllCustomers der Klasse
CustomerDAL auf und gibt deren Ergebnis zurück.
• UpdateCustomer : Ruft mit dem übergebenen Customer-Objekt die statische Methode UpdateCustomer der Klasse CustomerDAL auf und gibt
deren Ergebnis zurück.
• GetCustomerByNumber : Ruft mit dem übergebenen ID aus dem die statische Methode GetCustomerByNumber der Klasse CustomerDAL auf und
gibt deren Ergebnis zurück.
• GetCustomerByName: Ruft mit der übergebenen Zeichenkette die statische Methode GetCustomerByName der Klasse CustomerDAL auf und gibt
deren Ergebnis zurück.
• GetCustomerByCity: Ruft mit der übergebenen Zeichenkette die statische
Methode GetCustomerByCity der Klasse CustomerDAL auf und gibt deren
Ergebnis zurück.
• GetCustomerByContract: Ruft mit dem übergebenen GUID-Objekt die
statische Methode GetCustomerByContract der Klasse CustomerDAL auf
und gibt deren Ergebnis zurück
Abbildung 16: Klasse CustomerCustomerContractDAL
Kundenverträge im Datenzugriff Für Kundenverträge steht die Tabelle
CustomerContract zur Verfügung, die 1-1 -Fremdschlüsselbeziehungen zu den
Tabellen Customer, EnergyProfile, Tariff, AccountingArea und ControlArea
enthält. In der Klasse CustomerContractDAL (siehe Abbildung 16) wird der Datenzugriff folgendermaßen gewährleistet:
• CountCustomerContracts: Zählt alle vorhandenen Kundenverträge in der
Datenbank und gibt ihre Anzahl zurück.
66
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• CountCustomerContractsPerTariff : Zählt zu einem Tarif mit einer bestimmten GUID alle vorhandenen Verträge in der Datenbank und gibt
ihre Anzahl zurück.
• CreateCustomerContractFromDataRow : Erzeugt aus einer ausgelesenen
Tabellenzeile ein neues CustomerContract-Objekt.
• CreateCustomerContractInfoFromDataRow : Erzeugt aus einer ausgelesenen Viewzeile ein neues CustomerContractInfo-Objekt.
• DeleteCustomerContract: Identifiziert einen Kundenvertrag über eine GUID,
löscht diesen aus der Datenbank und zeigt über einen ReturnCode den Erfolg der Aktion an.
• GetAllCustomerContracts: Liefert alle in der Datenbank gespeicherten
Kundenverträge zurück.
• GetCustomerContract: Identifiziert einen Kundenvertrag über eine GUID
in der Datenbank, liest ihn aus und liefert ihn zurück.
• GetCustomerContractInfosForEnergyPrediction: Liefert alle in der Datenbank gespeicherten Kundenverträge, die teilweise oder ganz in den Zeitraum einer Lastprognose fallen, als vereinfachte CustomerContractInfoObjekte in einer Liste zurück.
• GetCustomerContractsForEnergyPrediction: Liefert alle in der Datenbank
gespeicherten Kundenverträge als Liste zurück, die teilweise oder ganz in
den Zeitraum einer Lastprognose fallen.
• GetCustomerContractsForCustomer : Liefert alle für einen Kunden mit einer bestimmten GUID gespeicherten Kundenverträge zurück.
• GetExpiringCustomerContracts: Liefert eine Liste aller Kundenverträge
zurück, die bis zu einem übergebenen Datum auslaufen.
• InsertCustomerContract: Fügt ein neues CustomerContract-Objekt in die
Datenbank ein und gibt den Erfolg der Operation als ReturnCode zurück.
• HasCustomerContracts: überprüft in der Datenbank, ob zu einem Kunden
Kunderverträge bestehen, und liefert True zurück, falls dem so ist, oder
False.
• UpdateCustomerContract: Ändert mittels des übergebenen Kundenvertrages die Werte des bereits in der Datenbank gespeicherten Datensatzes mit
derselben GUID in der Datenbank und liefert den Erfolg der Operation
über einen ReturnCode zurück.
Kundenverträge in der Geschäftslogik In der Geschäftslogik ist der Kundenvertrag durch die Klasse CustomerContractManager repräsentiert (siehe Abbildung 17). Folgende Methoden stehen zur Verfügung:
• AddNewCustomerContract: Ruft mit dem übergebenen CustomerContractObjekt die statische Methode InsertCustomerContract der Klasse
CustomerContractDAL auf und gibt deren Ergebnis zurück.
67
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 17: Klasse CustomerCustomerContractManager
• CountCustomerContracts: Ruft die gleichnamige Methode der Klasse
CustomerContractDAL auf und gibt deren Ergebnis zurück.
• CountCustomerContractsPerTariff : Ruft die gleichnamige Methode der
Klasse
CustomerContractDAL auf und gibt deren Ergebnis zurück.
• DeleteCustomerContract: Ruft mit der übergebenen GUID die gleichnamige Methode der Klasse CustomerContractDAL auf und gibt deren Ergebnis
zurück.
• GetAllCustomerContracts: Ruft die gleichnamige Methode der Klasse
CustomerContractDAL auf und gibt deren Ergebnis zurück.
• GetCustomerContract: Ruft mit der übergebenen GUID die g leichnamige
Methode der Klasse CustomerContractDAL auf und gibt deren Ergebnis
zurück.
• GetCustomerContractsForCustomer : Ruft die gleichnamige Methode der
Klasse CustomerContractDAL auf und gibt deren Ergebnis zurück.
• GetCustomerContractsForEnergyPrediction: Ruft die gleichnamige Methode der Klasse CustomerContractDAL auf und gibt deren Ergebnis zurück.
• GetCustomerContractInfosForEnergyPrediction: Ruft die gleichnamige Methode der Klasse CustomerContractDAL auf und gibt deren Ergebnis zurück.
• GetExpiringCustomerContracts: Ruft mit dem übergebenen Datum die
gleichnamige Methode der Klasse CustomerContractsDAL auf und gibt
deren Ergebnis zurück.
68
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• UpdateCustomerContract: Ruft mit dem übergebenen CustomerContractObjekt die gleichnamige Methode der Klasse CustomerContractDAL auf
und gibt deren Ergebnis zurück.
• HasCustomerContracts: Ruft die gleichnamige Methode der Klasse
CustomerContractDAL auf und gibt deren Ergebnis zurück.
Abbildung 18: Anlegen oder Bearbeiten eines Kunden
Abbildung 19: Anlegen oder Bearbeiten eines Kundenvertrages
Kunden und Kundenverträge in der grafischen Oberfläche In der grafischen Oberfläche wurde für die gesamte Kundenverwaltung ein zweiteiliges
Panel entworfen (siehe Abbildung 20), auf das Zugriff nur möglich ist, wenn
der Nutzer die Rolle Kundenbetreuer besitzt. Bei der Auswahl des Menüpunkts
Kunden in der linken Navigationsleiste wird es aufgerufen und zeigt im oberen
69
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Teil eine Kundenliste an, die bestimmten Suchkriterien entspricht. Es kann nach
Nachnamen, Kundennummern, Nutzern mit bestimmten Tarifen und Wohnorten gesucht werden. Dass anfangs nicht alle Nutzer angezeigt werden dient dazu, die über den Webservice zu übertragende Datenmenge gering zu halten. Bei
einigen Zehntausend registrierten Kunden könnten hierdurch bei vielen Nutzern nicht mehr vernachlässigbare Verzögerungen entstehen. Zu den gefundenen
Kunden werden alle wichtigen Daten angezeigt, die nach Auswahl eines Eintrags
über Doppelklick, das Kontextmenü oder einen Klick auf den Button Bearbeiten editiert werden können. Dazu öffnet sich, ebenso wie nach dem Klick auf
Anlegen, ein neues Panel, in das die Benutzerdaten eingetippt werden können
(siehe Abbildung 18).
Abbildung 20: Übersicht über Kunden und ihre Verträge
Im unteren Teil des Hauptpanels werden zu jedem ausgewählten Kunden
seine Verträge – sowohl gültige wie auch abgelaufene oder zukünftige – angezeigt.
Auch für die Kundenverträge stehen die Funktionen Anlegen, Bearbeiten und
Löschen zur Verfügung, wobei nur solche Verträge gelöscht werden können, die
noch nicht in Kraft getreten oder bereits abgelaufen sind. Neue Verträge können
nur nach Auswahl eines Kunden, dem sie zugeordnet werden sollen, angelegt
werden. Bei einem Klick auf den zugehörigen Button Anlegen wird ein Fenster
zur Dateneingabe geöffnet (siehe Abbildung 19), ebenso wenn ein Vertrag zum
Bearbeiten ausgewählt wird.
70
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Außerdem werden im Fenster links über der Navigationsleiste die aktuell
aktiven Tarife nach angezeigt, die nach der Häufigkeit ihrer Nutzung geordnet
sind. Nicht aktive Tarife werden nicht angezeigt, da sie dem Systemnutzer nicht
für den Abschluss neuer Verträge zur Verfügung stehen.
Tarife im Datenzugriff Tarife sind in der Datenbank durch die Tabelle
Tariff dargestellt. Der Datenzugriff wird über die statische Klasse TariffDAL
realisiert, die die folgende statische Methoden bereitstellt
• CreateTariffFromDataRow : Erzeugt aus einer ausgelesenen Tabellenzeile
ein neues Tariff-Objekt und gibt es zurück.
• InsertTariff : Fügt ein übergebenes Tariff-Objekt als neuen Tarif in die
Datenbank ein und zeigt über einen ReturnCode den Erfolg der Aktion
an.
• UpdateTariff : Aktualisiert anhand eines übergebenen Tariff-Objekts einen
in der Datenbank gespeicherten Tarif und zeigt über einen ReturnCode den
Erfolg der Aktion an.
• DeleteTariff : Löscht einen in der Datenbank gespeicherten Tarif und zeigt
über einen ReturnCode den Erfolg der Aktion an.
• IsTariffUsed : Überprüft, ob ein Tarif noch von Kundenverträgen benutzt
wird, und gibt das Ergebnis als booleschen Wert zurück.
• GetTariff : Liest einen Tarif mit einer übergebenen GUID aus der Datenbank aus und gibt ihn zurück.
• GetActiveTariffs: Liest alle Tarife mit aktiven Status aus der Datenbank
aus und liefert sie als Liste zurück.
• GetRankedTariffs: Liest alle Tarife aus der Datenbank aus und gibt sie
nach Benutzungshäufigkeit geordnet als Liste zurück.
• GetRankedActiveTariffs: Liest alle aktiven Tarife aus der Datenbank aus
und gibt sie nach Benutzungshäufigkeit geordnet als Liste zurück.
• GetAllTariffs: Liest alle Tarife aus der Datenbank aus und liefert sie als
Liste von Tariff-Objekten zurück.
Tarife in der Geschäftslogik In der Geschäftslogikschicht existiert die statische Klasse TarifManager zum Umgang mit Tarifen. Bereitgestellte Methoden:
• AddNewTariff : Ruft mit dem übergebenen Tariff-Objekt die statische
Methode InsertTariff der Klasse TariffDAL auf und deren Ergebnis zurück.
• DeleteTarif : Ruft mit der übergebenen GUID die statische Methode DeleteTariff der Klasse TarifDAL auf und git deren Ergebnis zurück.
• GetActiveTariffs: Ruft die statische Methode GetActiveTariffs aus der
Klasse TarifDAL auf und liefert deren Ergebnis als Array zurück.
71
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• GetAllTariffs: Ruft die statische Methode GetAllTariffs aus der Klasse
TariffDAL auf und liefert deren Ergebnis als Array zurück.
• GetRankedTariffs: Ruft die statische Methode GetRankedTariffs aus der
Klasse TariffDAL auf und liefert deren Ergebnis als Array zurück.
• GetRankedActiveTariffs: Ruft die statische Methode GetRankedActiveTariffs aus der Klasse TariffDAL auf und liefert deren Ergebnis als Array
zurück.
• GetTariff : Ruft mit einer übergebenen GUID für ein Tariff-Objekt die
statische Methode GetTariff der Klasse TariffDAL auf und gibt das Ergebnis zurück.
• IsTariffUsed : Ruft die statische Methode IsTariffUsed der Klasse TariffDAL
auf und übergibt ein Tariff-Objekt. Das Ergebnis wird zurückgegeben.
• UpdateTariff : Ruft mit dem übergebenen Tariff-Objekt die statische Methode UpdateTariff der Klasse TariffDAL auf und gibt deren Ergebnis
zurück.
Tarife in der grafischen Oberfläche In der GUI ist die Tarifverwaltung
über den Button Tarife im Hauptmenü zu erreichen. Das Tarif-Panel listet alle vorhandenen Tarife in einer Übersicht, geordnet nach Benutzungshäufigkeit,
auf. Darunter befinden sich Buttons für die entsprechenden Funktionen auf Tarifdaten (anlegen, ändern, löschen, (de)aktivieren). Ein ausgewählter Tarif kann
über den Button Tarif (de)aktivieren aktiviert bzw. deaktiviert werden. Ein
Haken in der Spalte Aktiv markiert aktive Tarife. In das Bearbeitungspanel,
ein sich zusätzlich öffnendes Fenster, gelangt man über den Tarif anlegen- oder
Tarif bearbeiten-Button. Hier gibt man die neuen bzw. ändert die vorhandenen
Werte eines Tarifs. Nach Eingabe und Validierung der Werte wird von der GUI
im Service Access Layer die Methode AddNewTariff zum Anlegen eines neuen
Tarifs bzw. UpdateTariff zum Bearbeiten eines vorhandenen Tarifs aufgerufen
und dieser Aufruf über den Webservice an den Server weitergeleitet.
Lastprofile im Datenzugriff Lastprofile werden in der Tabelle EnergyProfile
gespeichert. Die Verbrauchswerte eines Lastprofils sind dabei als CSVs in einer
Zelle gespeichert, was zwar kein optimales Datenbanklayout darstellt, weil so
keine Normalform eingehalten wird, jedoch erheblichen Aufwand bei der Programmierung erspart. Außerdem ist es unproblematisch, da CSVs einfach zu
parsen sind und nirgendwo Nullwerte oder Redundanzen auftreten. Der Datenzugriff wird über die statische Klasse EnergyProfileDAL realisiert, die die bereits
im vorigen Abschnitt vorgestellten statischen Methoden bereitstellt:
• CreateEnergyProfileFromDataRow : Erstellt aus einer ausgelesenen Tabellenzeile ein neues EnergyProfile-Objekt und gibt dieses zurück.
• InsertEnergyProfile: Fügt ein übergebenes Lastprofil in die Datenbank ein
und zeigt über einen ReturnCode den Erfolg der Aktion an.
72
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 21: Klasse EnergyProfileDAL
• UpdateEnergyProfile: Aktualisiert ein in der Datenbank gespeichertes Lastprofil anhand des übergebenen EnergyProfile-Objekts und zeigt über
einen ReturnCode den Erfolg der Aktion an.
• DeleteEnergyProfile: Löscht ein in der Datenbank gespeichertes Lastprofil
mit einer bestimmten GUID und zeigt über einen ReturnCode den Erfolg
der Aktion an.
• IsEnergyProfileUsed : Überprüft, ob ein Lastprofil noch von Kundenverträgen benutzt wird, und gibt das Ergebnis als booleschen Wert zurück.
• GetEnergyProfile: Liest ein Lastprofil mit einer übergebenen GUID aus der
Datenbank aus und gibt es zurück.
• GetEnergyProfileByName: Liest Lastprofile, deren Namen einen übergebenen String enthalten, aus der Datenbank aus und liefert sie als Liste
zurück.
• GetRankedEnergyProfile: Liest alle Lastprofile geordnet nach Einsatzhäufigkeit aus der Datenbank aus und liefert sie als Liste zurück.
• GetAllEnergyProfiles: Liest alle Lastprofile aus der Datenbank aus und
liefert sie als Liste zurück.
Lastprofile in der Geschäftslogik In der Geschäftslogikschicht existiert die
statische Klasse EnergyProfileManager zum Umgang mit Lastprofilen. Da aber
keinerlei Algorithmen auf den Lastprofilen ausgeführt werden müssen, erfolgt
lediglich ein Zugriff auf die passenden Methoden der darunterliegenden Datenhaltungsschicht, deren Ergebnisse weitergeleitet und vom Webservice, der die
Methoden dieser Klasse aufruft, als Rückgabewerte verwendet werden.
• AddNewEnergyProfile: Ruft mit dem übergebenen EnergyProfile-Objekt
die statische Methode InsertEnergyProfile der Klasse EnergyProfileDAL
auf und gibt deren Ergebnis zurück.
73
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 22: Klasse EnergyProfileManager
• UpdateEnergyProfile: Ruft mit dem übergebenen EnergyProfile-Objekt
die statische Methode UpdateEnergyProfile der Klasse EnergyProfileDAL
auf und gibt deren Ergebnis zurück.
• DeleteEnergyProfile: Ruft mit der übergebenen ID die statische Methode DeleteEnergyProfile der Klasse EnergyProfileDAL auf und gibt deren
Ergebnis zurück.
• IsEnergyProfileUsed : Ruft mit dem übergebenen EnergyProfile-Objekt
die statische Methode IsEnergyProfileUsed der Klasse EnergyProfileDAL
auf und gibt deren Ergebnis zurück.
• GetEnergyProfile: Ruft mit dem übergebenen EnergyProfile-Objekt die
statische Methode InsertEnergyProfile der Klasse EnergyProfileDAL auf
und gibt deren Ergebnis zurück.
• GetEnergyProfileByName: Ruft mit dem übergebenen String die statische
Methode GetEnergyProfileByName der Klasse EnergyProfileDAL auf und
gibt deren Ergebnis zurück.
• GetAllEnergyProfiles: Ruft die statische Methode GetAllEnergyProfiles
der Klasse EnergyProfileDAL auf, wandelt deren Ergebnis (eine Liste mit
EnergyProfile-Objekten) in ein Array um und gibt dies zurück.
Lastprofile in der grafischen Oberfläche Die grafische Oberfläche der
Lastprofile ist relativ einfach aufgebaut und besteht nur aus zwei Elementen:
• dem Übersichtsfenster, das die vorhandenen Lastprofile auflistet und den
Zugriff auf die verschiedenen Operationen für Lastprofile (anlegen, bearbeiten, löschen) bereitstellt und auch eine Suchfunktion bietet, die nach
bestimmten Lastprofilnamen sucht, und
• dem Eingabefenster, das erscheint, wenn ein neues Lastprofil erstellt oder
ein im Übersichtsfenster ausgewähltes geändert werden soll. Nach der Eingabe und Validierung von Werten wird durch Klick auf den Button Speichern die Funktion AddNewEnergyProfile aus dem Service Access Layer
74
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 23: Hauptfenster der Lastprofilverwaltung
aufgerufen, die das erzeugte Lastprofil über den Webservice zum Einfügen
in die Datenbank an den Server weiterreicht (analog beim Bearbeiten die
Methode UpdateEnergyProfile).
Beide Oberflächen sind als Windows Forms angelegt, wobei das Übersichtsfenster in das Hauptfenster und das Eingabefenster als abhängiges Pop-Up geladen
wird.
5.1.3
Stromlieferanten, Lieferangebote und -verträge
Allgemeines Ein Stromlieferant ist ein elementarer Bestandteil der Logik des
Programms. Er beliefert einen Stromhändler mit der benötigten Energie, welche
er mit seinen verschiedenen Kraftwerken (z.B. Atom-, Kohle-, Wind-, Wasserkraftwerke) produziert. Ein Lieferant kann einem Händler ein Lieferangebot für
Strom unterbreiten. Der Händler kann, wenn ihm die Bedingungen des Angebotes zusagen, dieses Angebot annehmen, sodass zwischen den beteiligten Parteien
ein Vertrag geschlossen wird. Der Vertragsschluss wird durch Änderung des Feldes Signed auf true gespeichert.
Die Klasse SupplierContract speichert sämtliche Details zu den einzelnen
Angeboten und Verträgen. Da gerade bei Übertragung von vielen Verträgen hier
große Datenmengen zusammen kommen, können auch SupplierContractInfoObjekte übertragen werden, die nur die für Übersichten notwendigen Daten
enthalten. Somit wird die Datenmenge und die Übertragungsdauer reduziert.
Die im Folgenden beschriebenen Funktionen decken die Anwendungsfälle 34 bis
46 des Entwurfs ab. Anwendungsfall 37 wurde dahingehend modifiziert, dass
Bilanzkreise und Regelzonen nun nicht mehr je Lieferant erfasst werden, sondern
je Liefervertrag.
Als Datenbasis wurden für den Testbetrieb etliche Lieferanten und mehrere
hundert, meist längerfristige Lieferverträge im Megawattbereich in die Datenbank eingefügt, die zusammen mit den Kundenverträgen eine für einen kleineren Stromhändler oder Energieversorger – etwa ein Stadtwerk, das ohne eigene
75
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 24: Eingabefenster für Lastprofile
Kraftwerke eine kleine Großstadt wie Oldenburg versorgen muss – eine realistische Situation ergibt.
Lieferanten, Lieferangebote und -verträge in der Datenbank In der
Datenbank existieren die Tabellen Supplier für die Lieferantendaten und SupplierContracts für die Lieferangebote und -verträge. Sie bilden die jeweiligen
Objekte ab.
Lieferanten, Lieferangebote und -verträge im Datenzugriff Der Datenzugriff wird über die statischen Klassen SupplierDAL und SupplierContractDAL
realisiert. Die nachfolgend vorgestellten Methoden werden von Funktionen der
Klassen SupplierManager.cs und SupplierContractManager.cs aufgerufen:
• CountSuppliers: Gibt die Zahl der in der Datenbank gespeicherten Lieferanten zurück.
• CreateSupplierFromDataRow: Erzeugt aus dem übergebenen DataRow-Objekt ein Supplier-Objekt und gibt dieses zurück.
• DeleteSupplier: Löscht den durch die übergebene GUID eindeutig identifizierten Lieferanten aus der Datenbank und zeigt über einen booleschen
Wert den Erfolg der Aktion an.
76
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 25: Lieferant
• GetAllSuppliers: Liest alle Lieferanten aus der Datenbank aus und liefert
diese als generische Liste zurück.
• GetSupplier: Liest den durch die übergebene GUID identifizierten Lieferanten aus und gibt ihn zurück.
• GetSuppliersByCity: Liest alle Lieferanten, deren Firmensitz den übergebenen Wert enthält, aus und gibt diese als generische Liste zurück.
• GetSuppliersByCompany: Liest alle Lieferanten, deren Firmenname den
übergebenen Wert enthält, aus und gibt diese als generische Liste zurück.
• GetSuppliersByEmail: Liest alle Lieferanten, deren Emailadresse den übergebenen Wert enthält, aus und gibt diese als generische Liste zurück.
• GetSuppliersByFax: Liest alle Lieferanten, deren Faxnummer den übergebenen Wert enthält, aus und gibt diese als generische Liste zurück.
• GetSuppliersByLastName: Liest alle Lieferanten, deren Ansprechpartner
im Nachnamen den übergebenen Wert enthalten, aus und gibt diese als
generische Liste zurück.
• GetSuppliersByFon: Liest alle Lieferanten, deren Telefonnummer den übergebenen Wert enthält, aus und gibt diese als generische Liste zurück.
• GetSuppliersBySupplierId: Liest alle Lieferanten, deren ID den übergebenen Wert enthält, aus und gibt diese als generische Liste zurück.
• HasSupplierContracts: Gibt an, ob ein Lieferant noch über Lieferverträge
verfügt. Der Lieferant kann als Supplier-Objekt übergeben oder durch
eine GUID identifiziert werden.
77
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 26: Lieferangebot und -vertrag
• InsertSupplier: Fügt einen neuen Lieranten in die Datenbank ein und zeigt
über einen booleschen Wert den Erfolg der Aktion an.
• UpdateSupplier: Aktualisiert einen Datenbankeintrag auf die Werte des
übergebenen Supplier-Objektes und zeigt über einen booleschen Wert
den Erfolg der Aktion an.
• CountSupplierContracs: Liefert die Anzahl an vorhandenen Lieferangeboten und -verträgen zurück.
• CreateSupplierContractFromDataRow: Erstellt ein neues Lieferangebot bzw.
einen neuen Liefervertrag aus dem übergebenenDataRow-Objekt.
• CreateSupplierContractInfoFromDataRow: Erstellt ein neues
SupplierContractInfo-Objekt aus dem übergebenen DataRow-Objekt.
• DeleteSupplierContract: Löscht ein Angebot oder einen Vertrag aus der
Datenbank, dessen ID dieser Funktion übergeben wird. Der Erfolg der
Aktion wird über den zurück gegebenen booleschen Wert angezeigt.
• GetAllSupplierContracts: Liefert alle in der DB gespeicherten Lieferangebote und -verträge als generische Liste zurück.
• GetDemandCoverageInPercent: Liefert die Abdeckung des Energiebedarfs
in Prozent zum aktuellen Zeitpunkt zurück. Dabei werden die Kundenverträge als Grundlage genommen, falls für den aktuellen Zeitpunkt keine
Lastprognose vorhanden ist. Andernfalls wird die zuletzt erzeugte Lastprognose, die zum aktuellen Zeitpunkt gilt, genommen.
78
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 27: Lieferanten im Datenzugriff
• GetExpiringSupplierContracts: Liefert eine generische Liste aller Verträge
zurück, die bis zum übergebenen Zeitpunkt ablaufen und vom übergebenen
Nutzer betreut werden.
• GetSupplierContract: Liefert einen bestimmten Liefervertrag oder -angebot
für eine übergebene ID zurück.
• GetSupplierContractInfoByDate: Liefert alle im übergebenen Zeitraum gültigen Lieferverträge und -angebote als Liste von Info-Objekten zurück.
• GetSupplierContractInfoForRecommendation: Liefert alle im Zeitraum der
übergebenen Kaufempfehlung gültigen Lieferangebote als Info-Objekte zurück.
• GetSupplierContractsByCompany: Liefert alle Lieferangebote und -verträge,
deren Lieferantennamen den übergebenen Wert enthält, zurück.
• GetSupplierContractsForRecommendation: Liefert alle im Zeitraum der
übergebenen Kaufempfehlung gültigen Lieferangebot zurück.
• GetSupplierContractsForSchedule: Liefert alle am übergebenen Tag gültigen Lieferverträge zurück.
• GetSupplierContractsForSupplier: Liefert alle Angebote und Verträge für
ein übergebenes Supplier -Objekt zurück.
• GetSupply: Hilfsmethode für GetSupplyCoverageInPercent. Berechnet die
für den übergebenen Tag vereinbarte zu liefernde Energiemenge und gibt
diese zurück.
• HasDisturbances: Überprüft für einen übergebenen Vertrag bzw. für ein
übergebenes Angebot, ob Störungen vorliegen. Falls aktuell Störungen aufgetreten sind, wird true zurück gegeben, false sonst.
79
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• InsertSupplierContract: Fügt einen neuen Liefervertrag oder ein neues Lieferangebot in die Datenbank ein. Ein entsprechendes SupplierContractObjekt wird dieser Funktion übergeben.
• UpdateSupplierContract: Aktualisiert einen übergebenen Vertrag oder ein
übergebenes Angebot in der Datenbank und liefert true zurück, falls die
Aktualisierung erfolgreich war, false sonst.
Lieferanten, Lieferangebote und -verträge in der Geschäftslogik Die
Geschäftslogik stellt die Klassen SupplierManager.cs und
SupplierContractManager.cs zur Verfügung. In diesen Klassen sind alle gültigen Funktionen definiert, die auf Lieferanten, Lieferangeboten und -verträgen,
ausgeführt werden können. Jeder in dieser Klasse definierten Funktion ist eine entsprechende ausführende Funktion in der Datenzugriffsschicht zugeordnet,
welche von hier aus aufgerufen wird. Das Ergebnis des Datenzugriffs wird zurückgegeben. Sofern die Funktionsnamen im Datenzugriff von denen der Geschäftslogik abweichen oder weitere Prüfungen oder Berechnungen durchgeführt
werden, sind die Zuordnungen aufgeführt.
Abbildung 28: Lieferanten in der Geschäftslogik
• AddNewSupplier: Ruft InsertSupplier auf.
• DeleteSupplier: Prüft zunächst, ob ein Lieferant noch laufende Verträge
hat. Ist dies der Fall, darf er nicht gelöscht werden und es wird IsUsed
zurück gegeben. Ansonsten wird die Funktion DeleteSupplier aufgerufen
und deren Ergebnis als OK für true bzw. Error für false zurück gegeben.
• UpdateSupplier: Prüft zunächst, ob der zu aktualisierende Eintrag noch
in der Datenbank vorhanden ist und ruft bei Erfolg UpdateSupplier auf.
Mögliche Rückgabewerte sind NotFound, OK, Error und DBFailure.
• DeleteSupplierContract: Prüft vor dem eigentlichen Löschen, ob der Vertrag noch in der Datenbank existiert, ob er gerade bedient wird und
80
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
ob Störungen existieren. Anschließend wird DeleteSupplierContract aufgerufen. Mögliche Rückgabewerte sind NotFound, IsCurrentlyServed,
HasDisturbances, OK, Error und DBFailure.
Lieferanten in der grafischen Oberfläche Die Übersicht über die Lieferanten eines Händlers wird in der GUI durch Anklicken des Buttons Lieferanten
oder den entsprechenden Menüpunkt erreicht. Der Systemnutzer sieht nun eine nach Lieferantennummern geordnete Liste. Standardmäßig werden in diesem
Menüpunkt alle Lieferanten des Händlers angezeigt, da die Liste der Lieferanten
im Gegensatz zu der Liste der Kunden überschaubar ist. Weitere Felder neben
den Lieferantennummern sind deren Firmenname, Straße, Hausnummer, Postleitzahl, Ort, Kontonummer, Bankleitzahl, Telefon- und Faxnummer, Anrede,
Vorname, Nachname und E-Mail-Adresse.
Um nun nach bestimmten Lieferanten suchen zu können, bietet das System dem Nutzer eine Suchfunktion an, mittels welcher er nach Lieferantennummer, Firmenname, Ort, Nachname, Telefonnummer, Telefaxnummer oder
E-Mail-Adresse suchen kann. Zusätzlich hat der Nutzer auch die Möglichkeit,
nach der speziellen Suche die Liste aller Lieferanten zurück zu erhalten, indem
er auf den Button Alle Anzeigen drückt.
Unter dem Datenfeld, welches die Lieferanten anzeigt, sind drei weitere Buttons angeordnet. Diese sind zum Hinzufügen neuer Lieferanten, Bearbeiten oder
Löschen bestehender Lieferanten vorgesehen und tragen die Aufschriften Lieferant anlegen, Lieferant bearbeiten, Lieferant löschen.
In einem weiteren Datenfeld, welches sich unter der Lieferantenanzeige befindet, werden die zu einem Lieferanten gehörenden Lieferangebote und Lieferverträge angezeigt. Dieses Datenfeld ist gefüllt mit Werten für die Attribute Bearbeiter, Bilanzkreis, Regelzone, Startdatum, Enddatum, Menge (MWh/h), Preis
(Euro/MWh) und Abgeschlossen. Abgeschlossen bezeichnet hiebei den Status
eines Angebotes. Ist das jeweilige Feld mit einem Häkchen gekennzeichnet, so
ist das Angebot bereits ein Vertrag.
Auch zu diesem Datenfeld gibt es Buttons, mit denen bestimmte Aktionen durchgeführt werden können. Diese sind das Hinzufügen eines neuen Angebotes oder Vertrages, das Bearbeiten eines Angebotes oder Vertrages und
das Löschen eines Angebotes oder Vertrages. Die Namen dieser Buttons lauten
Lieferantangebot/-vertrag eingeben, Lieferantangebot/-vertrag bearbeiten
und Lieferantangebot/-vertrag löschen.
5.1.4
Bilanzkreise und Regelzonen
Allgemeines Ein Bilanzkreis stellt den Verantwortungsbereich eines Stromhändlers dar, in dem dieser für ausgeglichene Ein- und Verkauf von Energie
verantwortlich ist. Ein Bilanzkreis kann sich über mehrere Regelzonen erstrecken. Bei der Erfüllung von Lieferverträgen wird Strom aus einem Bilanzkreis
in einen anderen geführt. Für jeden Bilanzkreis wird der Name des Unternehmens, eine Abkürzung und der ETSO Identification Code (EIC) gespeichert.
Ein Bilanzkreis wird im EIC durch ein X an der dritten Stelle des EIC gekennzeichnet.
81
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Regelzonen stellen den Verantwortungsbereich der einzelnen Übertragungsnetzbetreiber (ÜNB) dar, innerhalb dessen sie für ausgeglichene Einspeisung
und Entnahme von Energie verantwortlich sind. Die Regelzone ist dabei identisch mit dem physikalischen Stromnetz, dass der ÜNB betreibt. Wie auch für
Bilanzkreise werden Name des Unternehmens, Abkürzung und EIC gespeichert.
Regelzonen werden durch ein Y an der dritten Stelle des EIC gekennzeichnet. Zu
Abbildung 29: Bilanzkreis- und Regelzonenobjekt
jedem Lieferangebot, -vertrag und Kundenvertrag werden Bilanzkreis und Regelzone gespeichert, um die für den ordnungsgemäßen Netzbetrieb notwendigen
Energiefahrpläne erstellen zu können.
Die Verwaltung von Bilanzkreisen und Regelzonen deckt die Anwendungsfälle 28 bis 33 des Entwurfs ab.
Bilanzkreise und Regelzonen in der Datenbank Für Bilanzkreise und
Regelzonen existiert je eine Tabelle (AccountingArea und ControlArea) in der
Datenbank. Sie bilden die gleichnamigen Objekte eins zu eins ab.
Bilanzkreise und Regelzonen im Datenzugriff
• AccountingAreaReferenced: Prüft, ob in einer der Tabellen, die auf die
AccountingArea-Tabelle verweisen, ein Verweis auf die übergebene ID existiert und gibt true zurück, falls ein Verweis existiert, false sonst.
• CreateAccountingAreaFromDataRow: Erstellt ein AccountingArea-Objekt
aus dem übergebenen DataRow-Objekt.
• DeleteAccountingArea: Löscht das mittels der übergebenen ID eindeutig
identifizierte AccountingArea-Objekt aus der Datenbank.
• GetAccountingArea: Liefert den Bilanzkreis zurück, der zur übergegebenen
ID gehört.
• GetAccountingAreaByAbbreviation: Liefert alle Bilanzkreise zurück, deren
Abkürzung die übergebene Zeichenfolge enthält.
82
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 30: Datenzugriff auf Bilanzkreise und Regelzonen
• GetAccountingAreaByEIC: Liefert alle Bilanzkreise zurück, deren EIC die
übergebene Zeichenfolge enthält.
• GetAccountingAreaByOwner: Liefert alle Bilanzkreise zurück, deren Eigentümer die übergebene Zeichenfolge enthält.
• GetAllAccountingAreas: Liefert alle Bilanzkreise aus der Datenbank zurück.
• GetDatabase: Gibt die verwendete Datenbankverbindung zurück. Diese
Funktion wird für das Massen-Update benötigt, da hier durch die Transaktionsmechanismen dieselbe Verbindung für alle Anfragen benutzt werden
muss.
• GetMarkedAccountingAreas: Liefert alle Bilanzkreise zurück, deren DeletedFeld auf true gesetzt ist.
• InsertAccountingArea: Fügt das übergebene AccountingArea-Objekt in die
Datenbank ein.
• IsEICAvailable: Prüft, ob in der Datenbank bereits ein Eintrag mit dem
übergebenen EIC existiert. Gibt true zurück, falls kein Eintrag existiert,
false sonst.
• MarkAccountingAreaAsDeleted: Setzt für das durch die übergebene ID eindeutig identifizierte AccountingArea-Objekt das Feld Deleted auf true.
• UpdateAccountingArea: Aktualisiert den Datenbankeintrag für das übergebene AccountingArea-Objekt mit dessen Daten.
83
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• ControlAreaReferenced: Prüft, ob in einer der Tabellen, die auf die ControlArea-Tabelle verweisen, ein Verweis auf die übergebene ID existiert und
gibt true zurück, falls ein Verweis existiert, false sonst.
• CreateControlAreaFromDataRow: Erstellt ein ControlArea-Objekt aus dem
übergebenen DataRow-Objekt.
• DeleteControlArea: Löscht das mittels der übergebenen ID eindeutig identifizierte ControlArea-Objekt aus der Datenbank.
• GetAllControlAreas: Liefert alle Regelzonen aus der Datenbank zurück.
• GetControlArea: Liefert die Regelzone zurück, die zur übergegebenen ID
gehört.
• GetControlAreaByAbbreviation: Liefert alle Regelzonen zurück, deren Abkürzung die übergebene Zeichenfolge enthält.
• GetControlAreaByEIC: Liefert alle Regelzonen zurück, deren EIC die übergebene Zeichenfolge enthält.
• GetControlAreaByOwner: Liefert alle Regelzonen zurück, deren Eigentümer die übergebene Zeichenfolge enthält.
• GetMarkedControlAreas: Liefert alle Regelzonen zurück, deren DeletedFeld auf true gesetzt ist.
• InsertControlArea: Fügt das übergebene ControlArea-Objekt in die Datenbank ein.
• IsEICAvailable: Prüft, ob in der Datenbank bereits ein Eintrag mit dem
übergebenen EIC existiert. Gibt true zurück, falls kein Eintrag existiert,
false sonst.
• MarkControlAreaAsDeleted: Setzt für das durch die übergebene ID eindeutig identifizierte ControlArea-Objekt das Feld Deleted auf true.
• UpdateControlArea: Aktualisiert den Datenbankeintrag für das übergebene ControlArea-Objekt mit dessen Daten.
Bilanzkreise und Regelzonen in der Geschäftslogik Die Geschäftslogik
stellt durch die Klassen AccountingAreaManager.cs und
ControlAreaManager.cs alle für den Client verfügbaren Methoden bereit, über
die auf Bilanzkreise und Regelzonen zugegriffen werden kann. Die meisten dieser Funktionen rufen die gleichnamigen Funktionen der jeweiligen Datenzugriffsklassen auf; alle Methoden, die weitere Berechnungen durchführen, werden im
Folgenden erläutert.
• AreaBulkUpdate: Der übergebene Array enthält in jeder Zeile eine Regelzone oder einen Bilanzkreis. Zusammen sind das alle aktuell gültigen Einträge, die laut VDN Berlin vorhanden sind. Innerhalb einer Transaktion
wird nun jeder String abgearbeitet. Zunächst werden Listen aller bislang
84
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 31: Bilanzkreise und Regelzonen in der Geschäftslogik
bekannten Bilanzkreise und Regelzonen aus der Datenbank durch Aufruf von GetAllAccountingAreas und GetAllControlAreas des Datenzugriffs
geladen und mit dem übergebenen Array verglichen. Weicht ein Listeneintrag von der entsprechenden Zeile (identifiziert über den EIC) ab, wird der
Listeneintrag aktualisiert und die Änderung durch Aufruf von UpdateAccountingArea bzw. UpdateControlArea an die Datenbank gemeldet. Jedes
verglichene Element wird aus seiner Liste – nicht der Datenbank – entfernt.
Existiert zu einer Zeile des Arrays kein Eintrag in den Listen, wird ein
entsprechender neuer Eintrag durch Aufruf der statischen Methode InsertAccountingArea bzw. InsertControlArea erzeugt. Sobald nun der gesamte
Array abgearbeitet wurde, stehen in den beiden Listen nur noch die Regelzonen und Bilanzkreise, die zwar in der Datenbank, aber nicht im Array
enthalten sind. Sie werden somit gelöscht oder, falls noch Referenzen auf
sie existieren, als gelöscht markiert.
Sind alle Datenbankoperationen ohne Fehler abgeschlossen, wird die Transaktion ebenfalls geschlossen und die Änderungen somit in die Produktivdaten übernommen. Es wird OK zurückgegeben. Hat eine DB-Operation
einen Fehler produziert, wird die Transaktion abgebrochen, sämtliche Änderungen verworfen und Error zurückgegeben. Wurde eine Exception geworfen, wird sie gefangen, die Transaktion abgebrochen und DBFailure
zurückgegeben.
• bulkDeleteAccountingArea: Hilfsmethode für AreaBulkUpdate. Löscht alle
übergebenen Bilanzkreise aus der Datenbank.
85
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• bulkDeleteControlArea: Hilfsmethode für AreaBulkUpdate. Löscht alle übergebenen Regelzonen aus der Datenbank.
• DeleteAccountingArea: Prüft zunächst, ob der zu löschende Bilanzkreis
noch in der Datenbank existiert und ob keinerlei Referenzen auf diesen
existieren. Sind diese Prüfungen erfolgreich, wird der Bilanzkreis aus der
Datenbank gelöscht. Mögliche Rückgabewerte sind NotFound, IsUsed, OK,
Error und DBFailure.
• MarkAccountingAreaAsDeleted: Prüft zunächst, ob der zu ändernde Bilanzkreis noch in der Datenbank existiert und markiert diesen im Erfolgsfall als gelöscht. Mögliche Rückgabewerte sind NotFound, OK, Error und
DBFailure.
• processAccountingArea: Hilfsfunktion für AreaBulkUpdate. Bearbeitet einen
als Bilanzkreis identifizierten String und führt die nötigen Updates aus
oder erzeugt einen neuen Datenbankeintrag.
• processControlArea: Hilfsfunktion für AreaBulkUpdate. Bearbeitet einen
als Regelzone identifizierten String und führt die nötigen Updates aus oder
erzeugt einen neuen Datenbankeintrag.
• UpdateAccountingArea: Prüft zunächst, ob der zu ändernde Bilanzkreis
noch in der Datenbank existiert und führt im Erfolgsfall die Änderung
aus. Mögliche Rückgabewerte sind NotFound, OK, Error und DBFailure.
• DeleteControlArea: Prüft zunächst, ob die zu löschende Regelzone noch in
der Datenbank existiert und ob keinerlei Referenzen auf diese existieren.
Sind diese Prüfungen erfolgreich, wird die Regelzone aus der Datenbank
gelöscht. Mögliche Rückgabewerte sind NotFound, IsUsed, OK, Error und
DBFailure.
• MarkControlAreaAsDeleted: Prüft zunächst, ob die zu ändernde Regelzone
noch in der Datenbank existiert und markiert sie im Erfolgsfall als gelöscht.
Mögliche Rückgabewerte sind NotFound, OK, Error und DBFailure.
• UpdateControlArea: Prüft zunächst, ob die zu ändernde Regelzone noch
in der Datenbank existiert und führt im Erfolgsfall die Änderung aus.
Mögliche Rückgabewerte sind NotFound, OK, Error und DBFailure.
Bilanzkreise und Regelzonen in der grafischen Oberfläche Da Bilanzkreise und Regelzonen von der Datenhaltung her nahezu identisch sind, wurden
ihre Verwaltungsfunktionen in einem gemeinsamen Panel zusammen gefasst.
Es ist in der GUI über den Menüpunkt ”Bilanzierung” im Hauptmenü oder
den entsprechenden Button links zu erreichen. Das Verwaltungspanel (Klasse
PanelSearchArea.cs) ist in das Hauptfenster integriert und listet zunächst alle
Bilanzkreise in einer Übersicht auf. Der Anzeigemodus kann beliebig von Bilanzkreisen zu Regelzonen und zurück gewechselt werden; eine Suchfunktion dient
zur Eingrenzung der Anzeige. Unterhalb der Übersicht finden sich Buttons für
die Funktionen Anlegen, Ändern und Löschen.
86
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 32: Übersicht der vorhandenen Bilanzkreise
In das Bearbeitungspanel (Klasse PanelAddArea.cs) gelangt man über einen
Klick auf die Buttons Bilanzkreis (Regelzone) anlegen bzw. Bilanzkreis (Regelzone) ändern. Im sich öffnenden Popup-Fenster gibt man die neuen Daten ein
bzw. ändert die vorhandenen Daten.
Abbildung 33: Bearbeiten-Fenster für einen Bilanzkreis
Soll ein Bilanzkreis oder eine Regelzone gelöscht werden, wird zunächst geprüft, ob noch irgendwo Referenzen darauf existieren. Falls ja, wird nur eine
Gelöscht-Attribut gesetzt; dadurch können keine weiteren Referenzen auf das
Objekt angelegt werden. Falls nein, werden die Informationen aus der Datenbank gelöscht. In der Übersicht werden als gelöscht markierte Bilanzkreise und
Regelzone grau dargestellt.
87
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Über den Button Massen-Update können berechtigte Nutzer eine CSV-Datei
im Format Unternehmen;Abkürzung;EIC auswählen. Diese Datei wird an den
Server übertragen und bringt die Datenbestände für Bilanzkreise und Regelzone
auf den Stand der Datei. Eine aktuelle Liste mit gültigen EICs ist beispielsweise
unter [EIC06] als Excel-Datei verfügbar. Nach dem Export in das vorgegebene
Format kann diese Datei vom EIS verarbeitet.
5.2
EEX-Handel
Die (langfristigen) Lieferverträge reichen nicht immer für eine (nahezu) exakte
Deckung des Strombedarfs der zu versorgenden Kunden aus. Laut Vorgaben
dürfen die in Fahrplänen angegebenen Mengen maximal fünf Prozent nach oben
oder unten von der tatsächlich verbrauchten Menge abweichen. Zudem kann es
durch Störungen seitens der Stromanbieter zu kurzfristigen Versorgungsengpässen kommen. Um solche Probleme in den Griff zu bekommen und weil Strom
im Zuge der Liberalisierung des Energiemarktes zunehmend an Energiebörsen
gehandelt wird, bietet das Energieinformationssystem auch die Möglichkeit, Angebote zum Kauf oder Verkauf von Strom zu erstellen, die direkt an der Europäischen Energiebörse EEX in Leipzig abgegeben werden können.
EEX-Handel in der grafischen Oberfläche Der gesamte Handel mit der
EEX wurde zwecks besserer Übersicht in einem Panel zusammengefasst. Links
über der Navigationsleiste wird bei Aufruf des Panels eine Tabelle mit den aktuellen Marktdaten eingeblendet (siehe 5.2.4). Das eigentliche Panel ist dreigeteilt
(siehe Abbildung 34). Oben wird eine Liste mit Lastprognosen angezeigt, die
am aktuellen Tag gelten. Bei Auswahl einer dieser Lastprognosen wird rechts
daneben ein Graph mit Hilfe der ZedGraph-Bibliothek berechnet, der die Überbzw. Unterdeckung für den folgenden Tag, das heißt, um wieviel mit den aktuellen Lieferverträgen und EEX-Lieferungen sowie Störungen der durch die
Kundenverträge anfallende Energiebedarf über- oder unterschritten wird.
Die Berechnung der Überdeckung wird wie auch alle anderen komplizierten
Algorithmen in der serverseitigen Geschäftslogik statt (Klasse EexManager). Dazu existiert in der Datenzugriffsschicht die Methode subtractContractFromEnergyPrediction, die als Argument unter anderem die ausgewählte Lastprognose
übergeben bekommt. Zunächst werden alle Lieferverträge und EEX-Lieferungen
ermittelt, die am fraglichen Tag gelten. Danach werden die darin genannten
Mengen für die einzelnen Zeitintervalle von den in der Lastprognose genannten
Verbrauchswerten subtrahiert, wobei die in Lieferverträgen genannten Mengen
nur abzüglich eventueller Störungen betrachtet werden. Allerdings geschieht diese Berechnung nur für jedes vierte Viertelstundenintervall, so dass in der Methode computeGraphPoints, die die im Graphen anzuzeigenden Werte zurückliefert,
nur ein Wert pro Stunde berechnet wird. Dies geschieht, damit der Graph, der
nur sehr begrenzten Platz zur Verfügung hat, übersichtlich bleibt, und um die
Rechenzeit, die sich als zu lang erwies, zu reduzieren.
Unter dem Graphen finden sich zwei Übersichten, in denen zum einen alle
bestehenden EEX-Stundenganbote und zum anderen alle bestehenden EEXBlockangebote mit den wichtigsten Parametern angezeigt werden. Bei Klick auf
den Anlegen-Button wird jeweils ein Fenster geöffnet, in das ein neues Angebot
88
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 34: Panel für EEX-Handel
eingegeben werden kann. Der Bearbeiten-Button öffnet das gleiche Fenster, jedoch mit den Daten des ausgewählten Angebots befüllt. Ein Klick auf Lieferung
öffnet einen Dialog zur Eingabe einer EEX-Lieferung auf Basis des ausgewählten
Angebots.
Ganz unten schließlich befinden sich Anzeigen für die EEX-Zugangsdaten
des angemeldeten Nutzers, die er über einen Klick auf Daten ändern bearbeiten
kann. Sollte noch kein EEX-Konto im System gespeichert sein, wird er beim Aufruf dieses Panels gebeten, eines anzulegen, weil ohne EEX-Zugangsdaten keine
Angebote verfasst werden können. Überprüft werden die eingegebenen Daten
allerdings nicht, da es keine Schnittstelle zum Datenbestand der Energiebörse
gibt.
Die EEX-Funktionalitäten decken die Anwendungsfälle 72 bis 84 sowie 63
des Entwurfs ab.
5.2.1
Zugangsdaten zur Energiebörse
Damit an der EEX gehandelt werden kann, müssen die Nutzer, die dies tun
wollen, sich durch spezielle Zugangsdaten, nämlich einen eindeutigen Händlernamen und eine zugehörige ID, ausweisen. Dieser Zusammenhang wird in der
Klasse EexAccount verwirklicht, wobei jedem Systemnutzer maximal ein solcher
Zugang gewährt wird (siehe Abbildung 35
89
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 35: Klasse EexAccount
EEX-Zugangsdaten im Datenzugriff Es existiert eine Datenbanktabelle
namens EexAccount, in der die in der gleichnamigen Klasse vorhandenen Attribute gespeichert werden und eine Fremdschlüsselbeziehung zum Systemnutzer,
dem diese Zugangsdaten gehören, besteht.
Abbildung 36: Klasse EexAccountDAL
In der Klasse EexAccountDAL (siehe Abbildung 36 werden folgende Methoden zum Zugriff auf die Datenbank bereit:
• GetEexAccount: Liefert zu einer gegebenen ID ein bestimmtes aus der
Datenbank ausgelesenes EexAccount-Objekt zurück.
• InsertEexAccount: Fügt neue EEX-Zugangsdaten für einen Benutzer in die
Datenbank ein.
• UpdateEexAccount: Aktualisiert die vorhandenen EEX-Zugangsdaten eines Nutzers in der Datenbank.
• DeleteEexHourBid: Löscht die EEX-Zugangsdaten eines Nutzers mit einer
bestimmten ID aus der Datenbank.
• CreateEexAccountFromDataRow: Erzeugt aus einer aus der Tabelle
EexAccount ausgelesenen Zeile einen Satz an Zugangsdaten für einen Benutzer.
90
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
EEX-Zugangsdaten in der Geschäftslogik Die Geschäftslogik für EEXZugangsdaten beschränkt sich auf das Delegieren der Anfragen des Webservices
an die Datenhaltungsschicht, da keinerlei Berechnungen auszuführen sind. Folgende Methoden in der Klasse EexManager (siehe Abbildung 46) kümmern sich
darum und werden bei Clientanfragen vom Webservice aufgerufen:
• GetEexAccount: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• AddNewEexAccount: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• UpdateEexAccount: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• DeleteEexHourBid: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
EEX-Zugangsdaten in der grafischen Oberfläche In der GUI nehmen
EEX-Zugangsdaten nur wenig Raum ein. Im unteren Teil des EEX-Panels werden die aktuellen Zugangsdaten des angemeldeten Nutzers angezeigt, und bei
Anklicken der Schaltfläche Daten ändern öffnet sich ein neues Fenster zur Eingabe eines neuen Kontonamens und einer neuen Konto-ID (siehe Abbildung 37).
Dieses Fenster erscheint auch, wenn noch keine EEX-Zugangsdaten angelegt
wurden, da ansonsten keine Angebote abgegeben werden können. Bei Nichteingabe wird kein Zugriff auf die weiteren Funktionen gewährt.
Abbildung 37: Eingabefenster für EEX-Zugangsdaten
5.2.2
Abgabe und Bearbeitung von Angeboten
Es wurden wie im Entwurf vorgesehen zwei der vielen verschiedenen Angebotstypen, die an der EEX gehandelt werden, implementiert:
• Stundenangebote
• Blockangebote
Beide Angebotstypen dienen in der Regel zur kurzfristigen Beschaffung kleinerer Energiemengen bis 250 MWh und können somit die oben genannten Probleme, die Nutzern unseres Systems durch Störungen längerfristiger Verträge oder
91
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
andere Gründe entstehen können, lösen helfen. Andere, vorwiegend zu spekulativen Zwecken eingesetzte Möglichkeiten wie etwa Terminhandel wurden aus
zeitlichen Aspekten, aber auch weil sie im Kontext eines Händlers, der Kunden
mit realem Strom versorgt und nicht spekuliert, nicht aufgegriffen. Beide Angebotstypen werden im folgenden näher erläutert. Ihnen gemein sind wesentliche
Parameter wie die Laufzeit von genau einer Woche und die Möglichkeit, in dieser Woche das Angebot nur an bestimmten Tagen gelten zu lassen. Außerdem
kann jedes Angebot nachträglich korrigiert werden und wird mit den Zugangsdaten des Nutzers, der es verfasst, versehen. Anders als normale Lieferangebote
können EEX-Angebote nicht zur Berechnung von Kaufempfehlungen herangezogen werden, weil der Energiehändler, der sie abgegeben hat, nicht über ihre
Annahme entscheidet.
Stundenangebote In einem Stundenangebot werden nun für die einzelnen
Stunden eines Tages Energiemengen zwischen −250 und 250 MWh angegeben,
wobei die Nummerierung der Stunden bei 1 (entspricht 0:00 bis 0:59 Uhr) beginnt und bei 24 (entspricht 23:00 bis 23:59 Uhr) endet. Für jede Stunde können
bis zu 16 verschiedene Mengen zu selbst definierten Höchstkauf- oder Mindestverkaufpreisen angegeben werden. Ein Kaufangebot besitzt dabei kein oder ein
positives Vorzeichen bei der Mengenangabe, ein Verkaufsangebot ein negatives.
Zu jedem Stundenangebot muss darüber hinaus angegeben werden, für welche
Regelzone es gedacht ist.
Abbildung 38: Klassen EexHourBid und EexHourBidDetails
Als abstrakter Datentyp wurden Stundenangebote wie in Abbildung 38 dargestellt implementiert. Es gibt dazu zwei Klassen, wobei die Klasse EexHourBid
die Rahmendaten beinhaltet sowie eine Liste von EexHourBidDetails-Objekten,
in denen jeweils die für eine Stunde zu den verschiedenen Preisen angegebenen
Mengen enthalten sind. Entsprechend wurden auch zwei gleichnamige Tabellen
92
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
in der Datenbank angelegt, wobei die Tabelle EexHourBidDetails einen Fremdschlüssel in die Tabelle EexHourBid besitzt.
Blockangebote Blockangebote dagegen beziehen sich auf von der EEX vordefinierte Zeitblöcke, in denen dann die ge- oder verkauften Mengen aus dem
jeweiligen Zielnetz geliefert oder dahin transferiert werden müssen, wozu für
jedes der maximal 15 auf einem Formular anzugebenden Angebote eine eigene Regelzone genannt werden muss. Mit den Vorzeichen für Kauf und Verkauf
verhält es sich hier genauso wie bei den Stundenangeboten.
Abbildung 39: Klassen EexBlockBid und EexBlockBidDetails
Wie bereits die Stundenangebote werden die Blockangebote auch durch zwei
Klassen – EexBlockBid und EexBlockBidDetails – dargestellt (siehe Abbildung 39). Die erste Klasse enthält wieder die Rahmeninformationen wie AngebotsID, Zugangsdaten des Benutzers und die Woche, in der das Angebot gilt. Die
zweite enthält diesmal je eines der maximal 15 Teilgebote pro Instanz. Pro Teilangebot muss eine Regelzone, eine Energiemenge, ein Höchstkauf- oder Mindestverkaufspreis sowie ein Block angegeben werden. In der Datenbank ergaben sich
aus diesem Modell ebenfalls zwei Tabellen namens EexBlockBid und EexBlockBidDetails, wobei aus letzterer eine Fremdschlüsselbeziehung zur erstgenannten
besteht.
PDF-Export Angebote sollen bei der EEX per Fax eingereicht werden. Hierfür werden von der Energiebörse spezielle Angebotsformulare bereitgestellt. Die
vom EIS erstellten Angebote können – sofern alle erforderlichen Daten vorhanden sind – in eine PDF -Datei exportiert werden, so dass man sie bei der Energiebörse einreichen kann. Dazu wurden die Formulare der EEX als Grafikdateien
ins System eingefügt und dienen als Hintergrund für einen von Windows.Forms
angebotenen ReportViewer, in den aus den relevanten Klassen die benötigten
Daten, also die mit Werten besetzten Attribute der Instanzen, im What-yousee-is-what-you-get-Verfahren eingebunden und positioniert werden können.
93
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Die Anzeige dieser Daten erwies sich jedoch als komplizierter als erwartet,
da sich nur einfache Datentypen direkt in die Vorlage einbinden ließen. Für alle
komplexeren Datenstrukturen, etwa Arrays, oder zum Zugriff auf Attribute von
Instanzen anderer Klassen, die innerhalb der ursprünglichen Klasse referenziert
werden, mussten Hilfsklassen erstellt werden. Diese werden vor Erzeugung des
Reports mit den nicht direkt einzubindenden Attributen der anderen Klassen
gefüllt. Die Attribute werden dann in eine Form gebracht, die direkt in den
Report übernommen werden kann, und eingebunden.
Die in den Report eingefügten Daten wurden so platziert, dass das von der
EEX bereitgestellte Formular korrekt ausgefüllt ist. Beim Aufruf des Kommandos PDF-Export öffnet sich ein neues Fenster, in dem dieser Report als Vorschau
angezeigt wird, und die Optionen zum Speichern als PDF werden angezeigt. Die
folgenden beiden Abbildungen (40 und 41) zeigen die Vorlage des Reports für
Stundenangebote und die PDF-Export-Vorschau.
Abbildung 40: Erstellung des Reports für Stundenangebote in Visual Studio
2005
EEX-Angebote im Datenzugriff Für den Datenzugriff auf EEX-Angebote
stehen die Klassen EexBlockBidDAL und EexHourBidDal zur Verfügung, deren
Methoden hier erläutert werden. Außerdem gibt es für die Angebotsdetails zwei
weitere Klassen, deren Methoden innerhalb der hier aufgeführten aufgerufen
werden und hier nicht weiter diskutiert werden.
• GetAllEexHourBids: Liefert alle EEX-Stundenangebote aus der Datenbank als Liste von EexHourBid-Objekten zurück.
• GetEexHourBid: Liefert das EEX-Stundenangebot zurück, das zur übergebenen GUID gehört.
94
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 41: Vorschau auf den PDF-Export eines Stundenangebots
Abbildung 42: Klassen für den Datenbankzugriff auf EEX-Angebote
95
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• GetEexHourBidDataSet: Liefert ein DataSet-Objekt zurück, das vereinfachte Darstellungen aller EEX-Stundenangebote zur Anzeige von Übersichten enthält.
• GetAllEexBlockBidInfos: Liefert vereinfachte Darstellungen aller EEX-Blockangebote als Liste von EexBlockBidInfo-Objekten zurück.
• InsertEexHourBid: Fügt ein neues EEX-Stundenangebot in die Datenbank
ein.
• UpdateEexHourBid: Aktualisiert mittels des übergebenen Stundenangebot
ein vorhandenes EEX-Stundenangebot in der Datenbank und gibt den
Erfolg dieser Operation als ReturnCode-Objekt zurück.
• DeleteEexHourBid: Löscht ein über seine GUID identifiziertes EEX-Stundenangebot aus der Datenbank und gibt den Erfolg der Operation als
ReturnCode-Objekt zurück. Stundenangebote können auch gelöscht werden, wenn sich noch EEX-Lieferungen auf sie beziehen.
• GetAllEexBlockBids: Liefert alle EEX-Blockangebote als Liste
von EexBlockBid-Objekten aus der Datenbank zurück.
• GetEexBlockBid: Liefert das EEX-Blockangebot zurück, das zur übergebenen GUID gehört.
• GetEexBlockBidDataSet: Liefert ein DataSet zurück, das vereinfachte Darstellungen aller EEX-Blockangebote zur Anzeige von Übersichten enthält.
• GetAllEexBlockBidInfos: Liefert vereinfachte Darstellungen aller
EEX-Blockangebote als Liste von EexBlockBidInfo-Objekten zurück.
• InsertEexBlockBid: Fügt ein neues EEX-Blockangebot in die Datenbank
ein.
• UpdateEexBlockBid: Aktualisiert mittels des übergebenen Blockangebots
ein vorhandenes EEX-Blockangebot in der Datenbank und gibt den Erfolg
dieser Operation als ReturnCode-Objekt zurück.
• DeleteEexBlockBid: Löscht ein über seine GUID identifiziertes EEX-Blockangebot aus der Datenbank und gibt den Erfolg der Operation als Objekt
des Typs ReturnCode zurück. Blockangebote können auch gelöscht werden, wenn sich noch EEX-Lieferungen auf sie beziehen.
EEX-Angebote in der Geschäftslogik Die Geschäftslogik befindet sich in
der Klasse EexManager. Die zentralen Methoden zum Zugriff auf EEX-Angebote
werden hier kurz vorgestellt.
• GetAllEexHourBids: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• GetEexHourBid: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
96
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• GetEexHourBidDataSet: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• AddNewEexHourBid: Ruft mit dem übergebenen Stundenangebot als Argument die Methode InsertEexHourBid aus der Datenzugriffsschicht auf
und liefert deren Ergebnis zurück.
• UpdateEexHourBid: Ruft mit dem übergebenen Stundenangebot als Argument die gleichnamige Methode aus der Datenzugriffsschicht auf und
liefert deren Ergebnis zurück.
• DeleteEexHourBid: Ruft mit der übergebenen GUID als Argument die
gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren
Ergebnis zurück.
• GetAllEexBlockBids: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• GetEexBlockBid: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• GetEexBlockBidDataSet: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• AddNewEexBlockBid: Ruft mit dem übergebenen Blockangebot als Argument die Methode InsertEexBlockBid aus der Datenzugriffsschicht auf
und liefert deren Ergebnis zurück.
• UpdateEexBlockBid: Ruft mit dem übergebenen Blockangebot als Argument die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• DeleteEexBlockBid: Ruft mit der übergebenen GUID als Argument die
gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren
Ergebnis zurück.
Stundenangebote in der GUI Für Stundenangebote wurde ein eigenes
GUI-Fenster erstellt (siehe Abbildung 43, das sich öffnet wenn der Benutzer
im EEX-Panel unter der Übersicht der Stundenangebote auf Erstellen oder –
sofern ein Angebot ausgewählt ist – Bearbeiten klickt. Zum Bearbeiten eines
Angebots wird das in der Übersicht ausgewählte dem neuen Panel übergeben
und dessen Daten dort angezeigt. In diesem Panel, das überdies ähnlich aufgebaut ist wie das zugrunde liegende EEX-Formular, lassen sich alle für das
Stundenangebot benötigten Parameter setzen. Diese sind:
• Gültigkeitszeitraum (Jahr und Woche)
• Wochentage
• Korrekturangebot, sind also frühere Versionen vorhanden
• Betroffene Regelzone
97
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 43: Eingabefenster für Stundenangebote
Für die Hauptdaten des Angebots, also wann wieviel Energie geliefert werden
soll, steht eine Tabelle mit insgesamt 18 Spalten und 24 Zeilen zur Verfügung,
die den EEX-Vorgaben entspricht. In den beiden linken Spalten werden die
Stundenintervalle eingetragen, für die die rechts daneben angegebenen Energiemengen ge- oder verkauft werden sollen. Steht links beispielsweise Von 1 bis 1
bedeutet dies, dass die Mengen in derselben Zeile für die erste Stunde des Tages,
also die Zeit von 0:00 Uhr bis 0:59 Uhr gelten. Eine Zeitangabe Von 4 bis 6 steht
für Lieferungen von 4:00 Uhr bis 6:59 Uhr.
Die Mengen, die daneben stehen, sind jeweils bis zu 16 Mengen, die bei verschiedenen Preisen angeboten oder nachgefragt werden. Diese 16 Preise können
über den Button Preise wählen in einem weiteren Fenster gesetzt werden, wobei als Mindestgrenze 0 und als Höchstgrenze 3000 Euro gesetzt wurden. Die
Preisangabe von 0 Euro für die erste Mengenspalte und von 3000 Euro für die
letzte Spalte ist darüber hinaus durch die EEX fest vorgegeben.
Es müssen nicht für jeden Preis Mengen gesetzt werden, aber mindestens eine
Menge für jedes Zeitintervall wird gefordert. Negative Mengen gelten wie bereits
erwähnt als Verkaufs-, nicht-negative Mengen als Kaufwunsch. Die Preise dienen
dabei als Höchstkauf- oder Mindestverkaufspreise für die eingetragen Menge.
Die von der EEX vorgegebene Höchstmenge von 250 MWh wird überwacht,
und erst wenn das Angebot korrekt ausgefüllt ist, wird der Button PDF-Export
freigeschaltet, über den man sich den in Absatz 5.2.2 beschriebenen Report
generieren lassen kann.
Durch einen Klick auf den Speichern-Button wird mit den vorhandenen Daten ein neues EexHourBid-Objekt erzeugt und die Methode AddNewEexHourBid
aus dem Service Access Layer aufgerufen, um das Objekt über den Webservice
in die Datenbank einzufügen. Die übrigen, nicht vom Nutzer einzugebenden
98
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 44: Eingabefenster zur Preissetzung für Stundenangebote
Parameter wie EEX-Zugangsdaten oder Datum des Angebots werden dabei automatisch ermittelt.
Blockangebote in der GUI Die Eingabe von Blockangeboten erfolgt analog
zu Stundenangeboten über einen Klick auf die Buttons Erstellen oder Bearbeiten, woraufhin sich ein neues Fenster öffnet (siehe Abbildung 45), das ggf. mit
den Daten des bereits vorhandenen Blockangebots gefüllt wird. Auch das Design
dieses Panels entspricht der EEX-Vorlage. Die Rahmendaten des Angebots, die
vom Nutzer bereitzustellen sind, sind die folgenden:
• Gültigkeitszeitraum (Jahr und Woche)
• Wochentage
• Korrekturangebot, sind also frühere Versionen vorhanden
Unter dem Bereich für diese Daten folgt ein zweigeteilter Abschnitt, in dem sich
links eine Matrix mit vier Spalten und 15 Zeilen befindet. In jede Zeile kann
dabei ein Kauf- oder Verkaufswunsch eingetragen werden. Dazu muss ein Block
ausgewählt werden, für den dieser gilt, wobei ein Block einen von der EEX vordefinierten Zeitraum beschreibt, von denen insgesamt 12 zur Verfügung stehen.
Ebenso muss in Abweichung von Stundenangeboten für jeden der maximal 15
Wünsche eine Regelzone angegeben werden, aus der die Energie bezogen bzw.
in die sie geliefert werden muss. Pro Kauf- bzw. Verkaufswunsch muss wieder
ein Höchst- bzw. Mindestpreis eingegeben werden. Die Mengenrestriktion von
maximal 250 MWh pro Block wird ebenfalls beachtet. Wenn das Angebot korrekt ausgefüllt ist, wird der Button PDF-Export freigeschaltet, über den man
sich den in Absatz 5.2.2 beschriebenen Report generieren lassen kann.
99
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 45: Eingabefenster für Blockangebote
Indem auf den Button Speichern geklickt wird, erzeugt das Programm ein
neues EexBlockBid-Objekt und füllt es mit den eingegebenen Daten. Die fehlenden Daten wie Datum oder EEX-Zugang werden automatisch ergänzt. Danach
wird die Methode AddNewEexBlockBid mit dem erzeugten Objekt aufgerufen
und dieses dem Server zum Einfügen in die Datenbank übergeben.
5.2.3
Bestätigte Lieferungen
Wenn Teile eines EEX-Angebots von einem anderen Energiehändler akzeptiert
wurden, entstehen daraus neue Lieferverpflichtungen. Diese werden in Objekten
des Typs EexDelivery gespeichert, wobei es unerheblich ist, ob das zugrunde
liegende Angebot, auf das eine Referenz gespeichert wird, ein Block- oder Stundenangebot war. Zu jeder EEX-Lieferung werden neben dem Zeitraum, in dem
sie stattfindet, die konstant zu liefernde Menge in MW, der Preis pro MWh in
Euro sowie die Regelzone und der Bilanzkreis, die Ursprung oder bei Verkäufen
Ziel der Lieferungen sind, vermerkt. Daraus ergibt sich der Datentyp, der in
Abbildung 47 dargestellt ist.
Spezielle EEX-Lieferungen waren im Entwurf ursprünglich nicht vorgesehen,
erwiesen sich aber als sinnvoll, da sie einige Abweichungen von normalen Lieferverträgen aufweisen. Zum einen sind sie mit einem vorher abgegebenen EEXAngebot verbunden und sind stets abgeschlossene Verträge, die Unterscheidung
zwischen von Lieferanten abgegebenen Angeboten und abgeschlossenen Verträgen entfällt also. Außerdem können EEX-Lieferungen von oder zu beliebigen
Händlern erfolgen, auch solchen, die nicht als Lieferanten eingetragen sind. Darüber hinaus besitzen EEX-Lieferungen die eine Mengenbegrenzung. Ansonsten
sind die Formate aber zueinander kompatibel, was die Berechnung von Kaufemp100
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 46: Klasse EexManager
101
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 47: Klasse EexDelivery
fehlungen und aktueller Fehldeckung erleichtert. Zu EEX-Lieferungen, die über
mehrere Tage gehen und dort jeweils nur einzelne Stunden abdecken, müssen
mehrere EexDelivery-Objekte erzeugt werden, die jeweils einen der verschiedenen Lieferzeiträume an den verschiedenen Tagen abdecken, da zwecks Kompatibilität zu normalen Lieferverträgen nur ein konstanter Energiefluss während
der Laufzeit vorgesehen ist.
Abbildung 48: Klasse EexDeliveryDAL
EEX-Lieferungen im Datenzugriff Zum Zugriff auf die Daten der Lieferungen existiert die Klasse EexDeliveryDAL (Abbildung 48), die auf die Datenbanktabelle EexDelivery zugreift, die die EEX-Lieferungen relational abbildet.
Zur Verbindung zwischen EEX-Angebot und zugehöriger Lieferung existiert eine Referenz über die Angebots-GUID. Die Methoden zum Datenzugriff sind die
folgenden:
102
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• CountEexDeliveriesForDay: Bekommt ein DateTime-Objekt übergeben,
zählt auf dieser Grundlage alle EEX-Lieferungen in der Datenbank, die
an diesem Tag für einen beliebigen Zeitraum gelten und gibt das Ergebnis
zurück.
• DeleteEexDelivery: Löscht die EEX-Lieferung mit der übergebenen GUID
aus der Datenbank und gibt mit einem ReturnCode-Objekt den Erfolg der
Operation zurück.
• GetAllEexDeliveries: Liest alle gespeicherten EEX-Lieferungen aus der Datenbank aus und gibt sie als Liste von EexDelivery-Objekten zurück.
• GetEexDelivery: Liefert die zur übergebenen GUID gehörende EEX-Lieferung zurück.
• GetEexDeliveryForSchedule: Bekommt ein DateTime-Objekt übergeben und
extrahiert auf dieser Grundlage alle EEX-Lieferungen aus der Datenbank,
die am besagten Tag für einen beliebigen Zeitraum gelten. Diese Lieferungen werden in einer Liste von EexDelivery-Objekten zurückgegeben.
• InsertEexDelivery: Bekommt eine neue EEX-Lieferung zum Einfügen in
die Datenbank übergeben und gibt über einen ReturnCode das Ergebnis
der Operation zurück.
• UpdateEexDelivery: Bekommt eine bearbeite EEX-Lieferung, mit der ein
vorhandener Datenbankeintrag aktualisiert werden soll, übergeben und
gibt über einen ReturnCode das Ergebnis der Operation zurück.
EEX-Lieferungen in der Geschäftslogik In der Geschäftslogik werden im
wesentlichen durch die Klasse EexManager (siehe Abbildung 46) auf Anfrage
des Webservices die Methoden aus der Datenbanklogik angesprochen und deren
Ergebnis zurückgegeben. Zusätzlich existieren Methoden zur Berechnung geund verkaufter Mengen.
• CountEexDeliveriesForDay: Ruft die gleichnamige Methode aus der Klasse
EexDeliveryDAL auf und liefert deren Ergebnis zurück.
• DeleteEexDelivery: Ruft die gleichnamige Methode aus der Klasse
EexDeliveryDAL auf und liefert deren Ergebnis zurück.
• GetAllEexDeliveries: Ruft die gleichnamige Methode aus der Klasse
EexDeliveryDAL auf und liefert deren Ergebnis zurück.
• GetBoughtEnergyAmount: Berechnet für einen übergebenen Tag (als
DateTime) die Gesamtmenge der über die EEX verkauften Energie in
MWh und liefert das Ergebnis zurück.
• GetEexDelivery: Ruft die gleichnamige Methode aus der Klasse
EexDeliveryDAL auf und liefert deren Ergebnis zurück.
• GetSoldEnergyAmount: Berechnet für einen übergebenen Tag (als
DateTime) die Gesamtmenge der über die EEX verkauften Energie in
MWh und liefert das Ergebnis.
103
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• InsertEexDelivery: Ruft die gleichnamige Methode aus der Klasse
EexDeliveryDAL auf und liefert deren Ergebnis zurück.
• UpdateEexDelivery: Ruft die gleichnamige Methode aus der Klasse
EexDeliveryDAL auf und liefert deren Ergebnis zurück.
Abbildung 49: EEX-Lieferungsübersicht mit Bearbeitungsmöglichkeiten
EEX-Lieferungen in der GUI In der Benutzeroberfläche existiert ein eigenes Panel (Abbildung 49 zur Übersicht über die vorhandenen Lieferungen. In
einer Tabelle werden die wichtigsten Daten aller Lieferungen dargestellt. Jede
Lieferung lässt sich, nachdem sie ausgewählt wurde, über ein Kontextmenü oder
einen Klick auf den Button Markierte bearbeiten editieren. Dann wird das Panel
zum Bearbeiten einer EEX-Lieferung aufgerufen und mit den vorhandenen Daten gefüllt. Nach dem Klick auf Speichern erfolgt die Zuweisung der neuen Daten
an das EexDelivery-Objekt und ein Aufruf der Methode UpdateEexDelivery
mit dem geänderten Objekt. Gelöscht werden EEX-Lieferungen über das Kontextmenü oder einen Klick auf den Button Markierte löschen. Nach einer Sicherheitsabfrage wird die Methode DeleteEexDelivery aufgerufen.
Anlegen lassen sich EEX-Lieferungen nur über das Panel für EEX-Angebote.
Und zwar muss aus den dort vorhandenen Übersichten ein Stunden- bzw. ein
Blockangebot ausgewählt werden, bevor über einen Klick auf Lieferung eingeben das Eingabefenster (siehe Abbildung 50) geöffnet wird. Dies liegt daran,
dass jeder Lieferung ein Angebot zugeordnet werden muss. Nach Eingabe aller
benötigten Daten und deren Validierung wird bei Drücken des Buttons Speichern ein neues EexDelivery-Objekt erzeugt, gefüllt und über die Methode
AddNewEexDelivery an den Webservice zwecks Speicherung übergeben.
104
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 50: Eingabefenster für EEX-Lieferungen
5.2.4
Aktuelle Marktdaten der Energiebörse
Damit der Nutzer bei Erstellung von Angeboten immer einen Überblick hat,
welche Preise für welche Stunden oder Blöcke derzeit zu zahlen sind, werden im
Info-Bereich des Programms stets die aktuellen Strompreise der Energiebörse
für alle Blöcke und sämtliche 24 Stunden eines Tages eingeblendet. Diese Daten
werden von der EEX-Homepage bezogen. Hierzu wurde ein separates Programm
entwickelt, welches taskgesteuert einmal täglich die neu bereitgestellten Daten
der EEX parst und sie in die Datenbank schreibt. Zur Speicherung steht die
Tabelle EexMarketData bereit. Eine gleichnamige Klasse übernimmt die Datenhaltung im Programm (siehe Abbildung 51).
Abbildung 51: Klasse EexMarketData
Die Attribute dieser Klasse, die zur Darstellung der an der EEX gehandelten
Tarife dienen, sind die folgenden:
105
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• Afternoon: Strompreis für den EEX-Block zwischen 14 und 18 Uhr
• Business: Strompreis für den EEX-Block zwischen 8 und 16 Uhr
• Evening: Strompreis für den EEX-Block zwischen 18 und 24 Uhr
• Hours: Array mit Einzelpreisen für die 24 Stunden eines Tages
• Morning: Strompreis für den EEX-Block zwischen 6 und 11 Uhr
• Night: Strompreis für den EEX-Block zwischen 0 und 6 Uhr
• OffPeak1: Strompreis für den EEX-Block zwischen 0 und 8 Uhr
• OffPeak2: Strompreis für den EEX-Block zwischen 20 und 24 Uhr
• PhelixDayBase: Basispreis für normale Stromlieferungen über den ganzen
Tag.
• PhelixDayPeak: Basispreis für Stromlieferungen zur Hochlastzeit zwischen
8 bis 16 Uhr.
• RushHour: Strompreis für den EEX-Block zwischen 16 und 20 Uhr.
Abbildung 52: Klasse EexMarketDataDAL
Marktdaten im Datenzugriff Zur Kommunikation mit der Datenbank steht
die Klasse EexMarketDataDAL zur Verfügung. Sie stellt die folgenden Methoden
bereit:
• CreateEexMarketDataFromDataRow : Erzeugt aus einer ausgelesenen Tabellenzeile ein neues EexMarketData-Objekt und gibt es zurück.
• DeleteEexMarketData: Löscht ein EexMarketData-Objekt aus der Datenbank und liefert über einen ReturnCode den Erfolg dieser Operation zurück.
• GetAllEexMarketData: Liefert alle vorhandenen Datensätze aus der Datenbank als Liste von EexMarketData-Objekten zurück.
106
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• GetEexMarketData: Liefert einen Datensatz als EexMarketData-Objekt
zurück, der entweder eine bestimmte GUID oder ein bestimmtes Gültigkeitsdatum aufweist.
• InsertEexMarketData: Fügt ein übergebenes EexMarketData-Objekt in
die Datenbank ein und gibt den Erfolg der Operation über einen ReturnCode
zurück.
• UpdateEexMarketData: Aktualisiert anhand eines übergebenen
EexMarketData-Objektes den zugehörigen Datensatz in der Datenbank
und gibt den Erfolg der Operation über einen ReturnCode zurück.
Marktdaten in der Geschäftslogik Die Geschäftslogik für EEX-Marktdaten
findet sich in der Klasse EexManager (siehe Abbildung 46). Komplexere Berechnungen finden nicht statt; es werden nur Anfragen an die Datenzugriffslogik
weitergeleitet. Dies geschieht durch die Funktion
• GetEexMarketData: Ruft mit einem übergebenen Datum die gleichnamige
Methode der Klasse EexMarketDataDAL auf und liefert deren Ergebnis
zurück.
Marktdaten in der grafischen Oberfläche Beim Aufruf des Panels für
EEX-Handel durch Klick auf den entsprechenden Menüpunkt in der linken Navigationsleiste wird oberhalb der Navigation ein Fenster eingeblendet, in dem
die aktuellsten von der EEX bezogenen Preise mit den zugehörigen Tarifen eingeblendet werden, sofern Preisdaten in der Datenbank verfügbar sind (siehe
Abbildung 53).
5.2.5
EEX-Parser
Das Programm EEX.exe wird mit einem übergebenen Parameter aufgerufen,
welcher die jeweilige Ausführung des Programms bestimmt. Diese Parameter
sind -f, -a und -n.
Mit eex -f werden die fehlenden Tagesdaten in die Datenbank geschrieben.
Damit sind die Tagesdaten gemeint, die auf der EEX-Seite aktualisiert wurden,
aber sich noch nicht in der Datenbank befinden. Dazu wird die Tagedifferenz
zwischen dem neuesten Eintrag in der Datenbank und dem neuesten Eintrag
auf der EEX-Seite ermittelt. Beträgt diese Differenz zum Beispiel drei Tage,
so werden die letzten drei Einträge von der EEX-Seite in die Datenbank geschrieben. Es können jedoch keine Lücken“ einzelner Tage in der Datenbank
”
gefüllt werden, die jedoch auch niemals auftreten sollten. Dieser Parameter ist
der Standardaufruf des Parsers.
Der Parameter -a schreibt alle acht auf der EEX-Seite angebotenen Tagesmarktdaten in die Datenbank. Er bietet sich für den erstmaligen Eintrag in
eine noch leere Datenbank an. Ansonsten besteht die Gefahr von Redundanzen,
da keine explizite Prüfung erfolgt, ob die Marktdaten eines bestimmten Tages
bereits vorhanden sind.
107
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 53: Fenster für aktuelle Marktdaten
Der letzte Parameter -n schreibt nur den neuesten Tagesdatensatz der EEXSeite in die Datenbank. Er dient in erster Linie rein administrativen Zwecken,
zum Beispiel für Datenbanktests.
Es wurde eine eigenständige GUI entwickelt, die die manuelle Ausführung
des Parsers erleichtert. Sie ist in Abbildung 54 zu sehen. Das Parsen von Webseiten wird auch als scrapen bezeichnet, weshalb auch vom EEX-Scraper die
Rede ist. Die EEX-GUI erlaubt die Auswahl des gewünschten Parameters durch
den Benutzer. Zuvor muss noch der Pfad zu EEX.exe gesetzt werden. Dies geschieht durch den Setzen-Button neben der Pfadangabe. Nach einmaliger Auswahl wird dieser Pfad in der Datei Verzeichnis.txt gespeichert und bei jedem
Programmstart wieder ausgelesen.
Die Aktualisierung der Marktdaten in der Datenbank wird dadurch automatisiert, dass eex.exe -f täglich durch den Taskmanager des Windows-Servers
ausgeführt wird. Da die EEX die Marktdaten täglich zwischen 12:00 und 13:00
Uhr aktualisiert, bietet sich hier 13:05 Uhr als Zeitpunkt für den Aufruf an.
5.2.6
Die Funktionsweise von EEX.exe
Das Programm EEX.exe wird durch die Klasse Program repräsentiert (siehe
Abbildung 55). Die zentralen Methoden zum Programmablauf werden hier kurz
vorgestellt.
• ScrapIt: Liest die angegebene URL (der EEX-Seite) aus und schreibt den
Inhalt in einen String.
108
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 54: Die GUI für den EEX-Scraper
• BeschneideInhalt: schneidet die drei relevanten Info-Bereiche zurecht, bzw.
entfernt die Teile der HTML-Seite, die nicht benötigt werden.
• EntferneHtml: entfernt die HTML-Tags aus dem String, der den Webseiteninhalt speichert.
• Schreibe: schreibt die Marktdaten in eine Textdatei.
• erzeugeMarktdaten: erzeugt aus dem Inhaltstring die Marktdatenobjekte.
• ausfuehren: führt die Methoden BeschneideInhalt, EntferneHtml, Schreibe
und erzeugeMarktdaten in dieser Reihenfolge aus.
• dbEintrag: schreibt die gewünschten Marktdaten in die Datenbank.
• fehlendeTage: Hilfsfunktion, die die Anzahl der fehlenden Tage berechnet.
• verbose: zeigt die Marktdaten im Windows-Eingabefenster an.
• Main: das eigentliche Hauptprogramm, das auch die Parameter entgegennimmt und sie entsprechend auswertet.
5.3
5.3.1
Entscheidungsunterstützung
Lastprognosen
Allgemeines Eine Lastprognose gibt für einen bestimmten Zeitraum in der
Zukunft den erwarteten Energieverbrauch der Kunden des Energiehändlers an.
Jede Lastprognose enthält eine beliebige Anzahl an Lastprofilen, wobei jedes
Lastprofil einen Tag abdeckt. Das Lastprofil ist in Viertelstundenabschnitte unterteilt, denen jeweils die erwartete Energi emenge in MWh zugeordnet ist.
Grundlage jeder Lastprognose sind die Kundenverträge, die mit dem Energiehändler abgeschlossen wurden und sich mit dem Zeitraum der Lastprognose
überschneiden oder komplett in diesen fallen, und deren Lastprofile. Lastprognosen dienen als Grundlage für Kaufempfehlungen.
109
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 55: Die Program-Klasse von EEX.exe
Lastprognosen werden mit Hilfe benutzerdefinierter Algorithmen berechnet,
wozu das Programm ein Plugin-System bereitstellt, das erlaubt, zur Laufzeit
neue Plugins zu laden und zu benutzen. Dieses System wird in Abschnitt 4.2.1
ausführlich erläutert. Die Verwaltung der Lastprognose implementiert die Anwendungsfälle 47 bis 51 des Entwurfs.
Lastprognose als abstrakter Datentyp Die Umsetzung der Lastprognosen
als Datentyp erstreckt sich über zwei Klassen (s. Abb. 56). Alles, was mit den
Zeitreihen der Lastprognose zu tun hat, ist in die Klasse EnergyPredictionTimeSeries ausgelagert. In der Klasse EnergyPrediction werden nur Daten gehalten,
die einmal pro Instanz vorkommen. Dies sind das Erstelldatum der Lastprognose
(Created ), der Geltungszeitraum (begrenzt durch StartDate und EndDate), die
eindeutige ID, eine laufende Nummer sowie ein Infofeld. Außerdem wird ein Konstruktor angeboten und eine Liste von EnergyPredictionTimeSeries-Objekten,
in denen die prognostizierten Verbrauchswerte gespeichert sind.
Dabei steht jedes Objekt in der Liste für die Vorhersage für einen bestimmten
Tag, wobei die Objekte durchgehend vom ersten bis zum letzten Tag der Geltungsdauer geordnet sind. Jedes Objekt vom Typ EnergyPredictionTimeSeries
speichert neben einer eindeutigen ID auch, für welchen Tag es den Energieverbrauch prognostiziert (Feld Day), eine GUID-Referenz zum zugehörigen EnergyPrediction-Objekt und eine Liste mit 96 Energieverbrauchswerten, je einem
für jede Viertelstunde des Tages (zugreifbar über Index this oder Amounts).
Lastprognosen in der Datenbank Beide Klassen, die zur Repräsentation einer Lastprognose dienen, werden in der Datenbank über je eine gleichnamige Tabelle dargestellt. Jedes Attribut der Klassen wird auf eine Spalte der
jeweiligen Tabelle abgebildet, wobei das Array aus der Klasse EnergyPredictionTimeSeries über CSV-Werte ebenfalls in einer Spalte abgelegt wird und
beim Einfügen und Auslesen entsprechend formatiert werden muss. Als Primärschlüssel dienen in beiden Klassen die ID-Felder. Zudem gibt es in der Tabelle
110
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 56: Klassen EnergyPrediction und EnergyPredictionTimeSeries
EnergyPredictionTimeSeries eine Fremdschlüsselbeziehung der Spalte energyPrediction zur Spalte id der Tabelle EnergyPrediction, um so die Zeitreihen mit
der zugehörigen Lastprognose in Verbindung zu bringen.
Abbildung 57: Klasse EnergyPredictionDAL
Lastprognosen im Datenzugriff Der Datenzugriff wird über die statische
Klasse EnergyPredictionDAL realisiert, die die bereits im vorigen Abschnitt angesprochenen statischen Methoden bereitstellt:
• InsertEnergyPrediction: Fügt eine neue Lastprognose in die Datenbank
ein und zeigt über einen booleschen Wert den Erfolg der Aktion an.
• DeleteEnergyPrediction: Löscht eine in der Datenbank gespeicherte Lastprognose und zeigt über einen booleschen Wert den Erfolg der Aktion an.
111
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• IsEnergyPredictionUsed : Überprüft, ob eine Lastprognose noch von Kaufempfehlungen benutzt wird, und gibt das Ergebnis als booleschen Wert
zurück.
• GetEnergyPrediction: Liest eine Lastprognose mit einer übergebenen ID
aus der Datenbank aus und gibt sie zurück.
• GetAllEnergyPredictions: Liest alle Lastprognosen aus der Datenbank aus
und liefert sie als Liste zurück.
Abbildung 58: Klasse EnergyPredictionManager
Lastprognosen in der Geschäftslogik Die Klasse EnergyPredictionManager übernimmt den Umgang mit Lastprognosen in der Geschäftslogik. Weil
keinerlei Algorithmen auf den Lastprofilen ausgeführt werden müssen, erfolgt
lediglich ein Zugriff auf die passenden Methoden der darunterliegenden Datenhaltungsschicht, deren Ergebnisse weitergeleitet und vom Webservice, der die
Methoden dieser Klasse aufruft, als Rückgabewerte verwendet werden. Zu jeder
Methode aus dem Service Access Layer existiert eine bereitgestellte Methode:
• AddNewEnergyPrediction: Ruft mit dem übergebenen EnergyPredictionObjekt die statische Methode InsertEnergyPrediction der Klasse EnergyPredictionDAL auf und gibt deren Ergebnis zurück.
• DeleteEnergyPrediction: Ruft mit der übergebenen ID die statische Methode DeleteEnergyPrediction der Klasse EnergyPredictionDAL auf und
gibt deren Ergebnis zurück.
• IsEnergyPredictionUsed : Ruft mit dem übergebenen EnergyPredictionObjekt die statische Methode IsEnergyPredictionUsed der Klasse EnergyPredictionDAL auf und gibt deren Ergebnis zurück.
• GetEnergyPrediction: Ruft mit dem übergebenen EnergyPrediction-Objekt
die statische Methode InsertEnergyPrediction der Klasse EnergyPredictionDAL auf und gibt deren Ergebnis zurück.
• GetAllEnergyPredictions: Ruft die statische Methode GetAllEnergyPredictions der Klasse EnergyPredictionDAL auf, wandelt deren Ergebnis (eine
Liste mit EnergyPrediction-Objekten) in ein Array um und gibt es zurück.
112
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Lastprognosen in der grafischen Oberfläche Zum Erstellen von Lastprognosen gibt es eine zweigeteilte grafische Oberfläche. Links gibt es die Möglichkeit, Plugins mit Algorithmen auszuwählen. Nachdem ein Algorithmus ausge-
Abbildung 59: GUI zur Erstellung von Lastprognosen
wählt sowie Anfangs- und Enddatum der Lastprognose eingegeben wurden, kann
der Nutzer über den Button Lastprognose konfigurieren die individuellen Parameter des Plugins einstellen und es starten. Anfangs- und Enddatum können
beliebige Zeitspannen abdecken, so dass damit die Anforderungen (vgl. Kapitel 3) an die Laufzeit der Lastprognose (und auch der Kaufempfehlungen, da
Kaufempfehlungen auf Lastprognosen und deren Laufzeit aufbauen) übertroffen
werden.
Die Algorithmen zur Lastprognose Das Energieinformationssystem verfügt bereits über zwei Algorithmen zum Erstellen von Lastprognosen.
• SimplePredictionPlugin: Dies eine ist ein sehr einfacher Algorithmus, der
lediglich die in den Lastprofilen der Kundenverträge angegebenen Werte aufaddiert und danach in der Lastprognose speichert. Für jedes Zeitintervall jedes Tages werden also die Werte aus allen Kundenverträgen,
die während dieses Zeitintervalls gelten, summiert und dann in das entsprechende Zeitintervall der Lastprognose geschrieben. Weitere Parameter
existieren nicht.
• AdvancedPredictionPlugin: Dieser Algorithmus verfährt nach demselben
Prinzip wie der vorige, summiert also auch die Werte auf, allerdings werden
113
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
drei weitere, vom Benutzer vorzugebende Parameter berücksichtigt. Dies
sind:
– Ein fester prozentualer Wert für die Abweichung des Stromverbrauchs
an Wochenenden vom normalen Verbrauch an Werktagen.
– Ein fester prozentualer Wert für die maximale jahreszeitlich bedingte Abweichung des tatsächlichen Stromverbrauchs von den in den
Lastprofilen angegebenen Werten. Diese Abweichung wird über eine
Kosinuskurve repräsentiert, die standardmäßig bei Neujahr ihr Maximum und zur Jahresmitte ihr Minimum erreicht. Dort wird der
Prozentwert voll aufgeschlagen bzw. voll abgezogen.
– Ein weiterer Wert gibt an, um wieviele Tage die Sinuskurve gegenüber
der Standardposition mit den Extrema bei Neujahr und Jahresmitte
verschoben ist. Dieser Parameter ist notwendig, weil normalerweise
die kälteste Zeit des Jahres einige Wochen nach Neujahr und die
heißeste einige Wochen nach der Jahresmitte liegt.
Abbildung 60: GUI zur Konfiguration des AdvancedPredictionPlugin
Beide Algorithmen sind im Projekt PredictionPlugins zusammengefasst und
werden gegen das übrige Projekt zu einer DLL kompiliert. Die zusätzlichen
Parameter des zweiten Algorithmus werden über ein einfaches GUI eingegeben,
das von der Lastprognosenoberfläche aufgerufen wird.
114
EIS - Energie-Informationssystem
5.3.2
Projektgruppe Energie-Informationssyteme
Störungsverwaltung
Allgemeines Störungen werden von den Energielieferanten an die Benutzer
des Energieinformationssystens gemeldet und von diesen in das System eingetragen. Diese Störungen wirken sich dabei auf die laufenden Verträge mit den
Lieferanten aus und werden bei der Erstellung von Lastprognosen und Kaufempfehlungen berücksichtigt. Eine Störung vermindert die Menge der aktuellen
Energielieferung zu einem bestimmten Zeitraum, was zu neuen Berechnungen
des Strombedarfs folgen kann. Die Störungsverwaltung realisiert die Anwendungsfälle 58 bis 62.
Störungen als Datentyp Die Umsetzung der Störungen in einen Datentyp
erfolgt durch die Klasse Disturbances. Sie speichert zur eindeutigen Identifikation eine Guid, den Liefervertrag, auf dem die Störung angewendet wird, den
Repräsentationscode, die voraussichtliche Fehlmenge, die zugehörige, erklärende
Nachricht für die Störung, das Kennzeichen, ob die Störung noch aktuell ist und
den Zeitpunkt, für wann die Störung gültig ist.
Abbildung 61: Klasse Disturbance
Störungen in der Datenbank Die Klasse Disturbance, siehe Abbildung 61,
für die Repräsentation einer Störung wird in der Datenbank über eine gleichnamige Tabelle dargestellt. Jedes Attribut der Klasse wird auf eine Spalte der
jeweiligen Tabelle abgebildet. Als Primärschlüssel dient das ID-Feld. Zudem gibt
es in der Tabelle eine Fremdschlüsselbeziehung der Spalte supplierContract zur
Spalte id der Tabelle SupplierContract, um so die Störungen mit dem zugehörigen Liefervertrag in Verbindung zu bringen.
Störungen im Datenzugriff Der Datenzugriff wird über die statische Klasse DisturbanceDAL, siehe Abbildung 62, realisiert, die die bereits im vorigen
Abschnitt angesprochenen statischen Methoden bereitstellt:
• InsertDisturbance: Fügt eine neue Störung in die Datenbank ein und zeigt
über einen booleschen Wert den Erfolg der Aktion an.
115
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 62: Klasse DisturbanceDAL
• UpdateDisturbance: Aktualisiert eine vorhandene Störung in der Datenbank und zeigt über einen booleschen Wert den Erfolg der Aktion an.
• DeleteDisturbance: Löscht eine in der Datenbank gespeicherte Störung und
zeigt über einen booleschen Wert den Erfolg der Aktion an.
• GetDisturbance: Liest eine Störung mit einer übergebenen ID aus der Datenbank aus und gibt sie zurück.
• GetAllDisturbances: Liest alle Störungen aus der Datenbank aus und liefert sie als Liste zurück.
• GetDisturbancesForContract: Bekommt ein Guid-Objekt übergeben und
liest alle Störungen aus der Datenbank für einen bestimmten Liefervertrag
aus und gibt sie als Liste zurück.
• GetDisturbancesNotCurrent: Liest alle historischen Störungen aus der Datenbank aus und gibt sie als Liste zurück.
• GetDisturbancesByDate: Bekommt ein DateTime-Objekt übergeben und
liest alle Störungen aus der Datenbank zu dem Datum aus und gibt sie
als Liste zurück.
• GetDisturbancesByCode: Bekommt einen Störungscode übergeben, liest
alle Störungen mit diesem Code aus der Datenbank aus und gibt sie als
Liste zurück.
• GetDisturbancesByCompany: Bekommt einen Firmennamen übergeben,
liest alle Störungen für Unternehmen mit diesem Namen aus der Datenbank aus und gibt sie als Liste zurück.
116
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• GetDisturbancesForWorstSuppliers: Liefert eine Liste von Objekten des
Typs FlopDisturbances zurück, in der zu den einzelnen Lieferanten die
jeweilige Anzahl der Störungen aufgelistet sind.
Abbildung 63: Klasse DisturbanceManager
Störungen in der Geschäftslogik Die Klasse DisturbanceManager, Abbildung 63, übernimmt den Umgang mit Störungen in der Geschäftslogik. Weil
keinerlei Algorithmen auf den Störungen ausgeführt werden müssen, erfolgt lediglich ein Zugriff auf die passenden Methoden der darunterliegenden Datenhaltungsschicht, deren Ergebnisse weitergeleitet und vom Webservice, der die
Methoden dieser Klasse aufruft, als Rückgabewerte verwendet werden. Zu jeder
Methode aus dem Service Access Layer existiert eine bereitgestellte Methode:
• AddNewDisturbance: Ruft mit dem übergebenen Disturbance-Objekt die
statische Methode InsertDisturbance der Klasse DisturbanceDAL auf und
gibt deren Ergebnis zurück.
• UpdateDisturbance: Ruft mit dem übergebenen Disturbance-Objekt die
statische Methode UpdateDisturbance der Klasse DisturbanceDAL auf und
gibt deren Ergebnis zurück.
• DeleteDisturbance: Ruft mit der übergebenen ID die statische Methode
DeleteDisturbance der Klasse DisturbanceDAL auf und gibt deren Ergebnis
zurück.
• GetDisturbance: Ruft mit der übergebenen ID die statische Methode GetDisturbance der Klasse DisturbanceDAL auf und gibt deren Ergebnis zurück.
• GetAllDisturbances: Ruft die statische Methode GetAllDisturbance der
Klasse DisturbanceDAL auf, wandelt deren Ergebnis (eine Liste mit Disturbance-Objekten) in ein Array um und gibt es zurück.
117
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• GetDisturbancesForContract: Ruft die statische Methode GetDisturbancesForContract der Klasse DisturbanceDAL auf, wandelt deren Ergebnis
(eine Liste mit Disturbance-Objekten) in ein Array um und gibt es zurück.
• GetDisturbancesNotCurrent: Ruft die statische Methode GetDisturbancesNotCurrent der Klasse DisturbanceDAL auf, wandelt deren Ergebnis (eine
Liste mit Disturbance-Objekten) in ein Array um und gibt es zurück.
• GetDisturbancesByDate: Ruft die statische Methode GetDisturbancesByDate der Klasse DisturbanceDAL auf, wandelt deren Ergebnis (eine Liste
mit Disturbance-Objekten) in ein Array um und gibt es zurück.
• GetDisturbancesByCode: Ruft die statische Methode GetDisturbancesByCode der Klasse DisturbanceDAL auf, wandelt deren Ergebnis (eine Liste
mit Disturbance-Objekten) in ein Array um und gibt es zurück.
• GetDisturbancesByCompany: Ruft die statische Methode GetDisturbancesByCompany der Klasse DisturbanceDAL auf, wandelt deren Ergebnis
(eine Liste mit Disturbance-Objekten) in ein Array um und gibt es zurück.
• GetDisturbancesForWorstSuppliers: Ruft die statische Methode GetDisturbancesForWorstSuppliers der Klasse DisturbanceDAL auf, wandelt deren Ergebnis (eine Liste mit FlopDisturbances-Objekten) in ein Array um
und gibt es zurück.
Abbildung 64: Störungsverwaltung
118
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Störungen in der GUI In der GUI ist die Störungsverwaltung über den
Button Störung im Hauptmenü zu erreichen. Im oberen Hauptmenü werden die
Lieferanten mit den meisten Störungen angezeigt. Das Störungs-Panel (Klasse PanelDisturbance) enthält die Möglichkeit, nach eingetragenen Störungen zu
suchen und diese im Panel anzuzeigen, siehe Abbildung 64. Die Suche kann
nach verschiedenen Kriterien (Historische Störungen, bestimmtes Datum, Meldungscode oder Lieferantenname) durchgeführt werden, wobei eine Anzeige aller
Störungen über den Button Alle anzeigen“ möglich ist. Darunter befinden sich
”
die entsprechenden Schalter für die Funktionen auf Störungsdaten (anlegen, ändern und löschen.
In das Bearbeitungspanel Klasse PanelAddDisturbance, Abbildung 65, gelangt
Abbildung 65: Neue Störung eingeben
man über den Anlegen- oder Bearbeiten-Button. Hier gibt man die neuen, bzw.
ändert die vorhandenen Werte einer Störung. Beide Klassen sind als Windows
Forms angelegt, wobei PanelDisturbance in den Client eingebettet ist, das Panel
zum ändern und anlegen von Störungen wurde als Pop-Up-Fenster implementiert.
Abbildung 66: Liefervertrag auswählen
Im Bearbeitungspanel für Störungen kann ebenfalls ein weiteres Pop-Up
Fenster Klasse PanelSearchSupplierContracts, siehe 66 aufgerufen werden.
119
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Dieses dient zur Auswahl eines Lieferantenvertrags, der zu der aktuellen Störung gehört. In dem Fenster kann über ein Suchfeld nach Lieferantenverträgen
gesucht werden. Der ausgewählte Vertrag wird an das vorige Fenster übergeben.
5.3.3
Kaufempfehlungen
Allgemeines Kaufempfehlungen sind eine Zusammenstellung von Lieferangeboten, die den erwarteten Energiebedarf möglichst präzise deckt. Der erwartete
Energiebedarf wird durch eine oben beschriebene Lastprognose repräsentiert.
Die Berechnung erfolgt serverseitig über das Plugin-System. Ein genetischer
Algorithmus wird mitgeliefert. Hier werden die Anwendungsfälle 52 bis 57 umgesetzt.
Abbildung 67: Klasse Recommendation
Kaufempfehlungen als Datentyp Die Umsetzung der Kaufempfehlungen
in einen Datentyp erfolgt durch die Klasse Recommendation (siehe Abbildung
67). Sie speichert zur eindeutigen Identifikation eine Guid, die Lastprognose,
auf der die Empfehlung basiert, das Erstellungsdatum, den durch Start- und
Enddatum bestimmten Gültigkeitszeitraum, die benötigte und die durch die
vorgeschlagenen Angebote gedeckte Energiemenge, eine laufende Nummer, den
Namen des verwendeten Algorithmus und eine Liste mit den empfohlenden Lieferverträgen.
Darüber hinaus gibt es noch die Klasse RecommendationInfo, die nur die
wichtigsten Informationen einer Kaufempfehlung enthält und bei Übersichten
zwecks Reduzierung der zu übertragenden Datenmenge eingesetzt wird.
Kaufempfehlungen im Datenzugriff Kaufempfehlungen werden in der Tabelle Recommendation gespeichert, von der aus eine Fremdschlüsselbeziehung
120
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 68: Klasse RecommendationDAL
zur Tabelle EnergyPrediction besteht, da jede Kaufempfehlung auf einer Lastprognose beruht. Zum Zugriff auf diese Datensätze steht die Klasse
RecommendationDAL bereit (siehe Abbildung 68). Diese beinhaltet folgende Methoden:
• CreateRecommendationFromDataRow : Erzeugt aus einem aus der Datenbank ausgelesenen Datensatz ein neues Recommendation-Objekt und gibt
es zurück.
• CreateRecommendationInfoFromDataRow : Erzeugt aus einem aus der Datenbank ausgelesenen Datensatz ein neues RecommendationInfo-Objekt
und gibt es zurück.
• DeleteAllRecommendations: Löscht alle gespeicherten Kaufempfehlungen
aus der Datenbank und gibt das Ergebnis der Operation als ReturnCodeObjekt zurück.
• DeleteRecommendation: Löscht die Kaufempfehlung mit einer bestimmten GUID aus der Datenbank und gibt den Erfolg der Operation als
ReturnCode-Objekt zurück.
• GetAllRecommendationInfos: Liefert alle gespeicherten Kaufempfehlungen in Form vereinfachter RecommendationInfo-Objekte zurück.
• GetAllRecommendations: Liefert alle gespeicherten Kaufempfehlungen in
Form von Recommendation-Objekten zurück.
• GetRecommendation: Liefert eine Kaufempfehlung mit einer bestimmten
GUID zurück.
• GetSupplierContractsForRecommendation: Liefert anhand des Zeitraums,
für den eine Kaufempfehlung erstellt werden soll, alle Lieferverträge als
Liste von SupplierContract-Objekten zurück, die in diesem Zeitraum gelten.
121
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• InsertRecommendation: Fügt ein übergebenes Recommendation-Objekt in
die Datenbank ein und gibt das Ergebnis der Operation über ein ReturnCodeObjekt zurück. UpdateRecommendation: Aktualisiert eine bereits gespeicherte Kaufempfehlung mit den Daten des übergebenen RecommendationObjekts und liefert das Ergebnis der Operaiton als ReturnCode zurück.
Abbildung 69: Klasse RecommendationManager
Kaufempfehlungen in der Geschäftslogik Die Klasse
RecommendationManager enthält die Methoden zum Umgang mit Kaufempfehlungen. Die Logik zur Berechnung der Kaufempfehlungen befindet sich in den
Plugins, die von anderen Programmierern bereitgestellt werden müssen. Wie
diese zu implementieren sind, ist in Abschnitt über das Pluginsystem nachzulesen (4.2.1). Ein genetischer Algorithmus wurde als Beispiel implementiert und
wird in Abschnitt 5.3.3 beschrieben. In der Geschäftslogik verbleiben daher nur
die folgenden Methoden:
• AddNewRecommendationRuft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• CalculateAvailableEnergy: Berechnet zu einer bereits erstellten Kaufempfehlung, wieviel Energie für den gesamten Zeitraum benötigt wird, um den
Bedarf aller Kunden hundertprozentig zu decken und gibt diesen Wert zurück.
• CalculateNeededEnergy: Berechnet zu einer bereits erstellten Kaufempfehlung, wieviel Energie für den gesamten Zeitraum aufgrund der abgeschlossenen Verträge zur Verfügung steht und gibt diesen Wert zurück.
• DeleteAllRecommendations: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert den Erfolg der Operation als ReturnCode
zurück.
122
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• DeleteRecommendation: Ruft mit der übergebenen GUID die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert den Erfolg der
Operation als ReturnCode zurück.
• GetAllRecommendationInfos: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• GetAllRecommendations: Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• GetRecommendation: Ruft mit der übergebenen GUID die gleichnamige
Methode aus der Datenzugriffsschicht auf und liefert deren Ergebnis zurück.
• RealizeRecommendation: Ruft in der Datenbankzugriffsschicht die Methoden zum Speichern der übergebenen fertigen Kaufempfehlung auf und
sorgt dafür, dass sämtliche ausgewählten Lieferangebote als Verträge abgeschlossen werden. Ein zurückgegebener ReturnCode gibt Auskunft über
den Erfolg der Operation.
• UpdateRecommendation Ruft die gleichnamige Methode aus der Datenzugriffsschicht auf und liefert den Erfolg der Operation als ReturnCode
zurück.
Erstellung von Kaufempfehlungen Die folgenden zwei Abschnitte beschreiben, wie ein Nutzer die Funktionen zum Erstellen von Kaufempfehlungen benutzen kann und wie der mitgelieferte Algorithmus arbeitet.
Kaufempfehlungen in der grafischen Oberfläche Die grafische Oberfläche für Kaufempfehlungen wurde als sechsteiliger Wizard realisiert. Im ersten
Schritt muss aus den vorhadenen Lastprognosen (angezeigt werden der Übersicht halber nur die aktuellen) eine als Grundlage der Kaufempfehlung ausgewählt werden.
Dann wird eine Liste aller noch nicht abgeschlossenen Angebote, die teilweise
oder ganz in den Zeitraum der gewählten Lastprognose fallen, gezeigt. (Zeitraum
der Lastprognose und der zu erstellenden Kaufempfehlung sind identisch.) Zu
jedem Angebot kann der Nutzer auswählen, ob es auf jeden Fall, gar nicht oder
nur, wenn der Algorithmus zur Berechnung der Kaufempfehlung es für sinnvoll
erachtet, in die Kaufempfehlung aufgenommen werden soll.
Der dritte Schritt zeigt eine Liste aller verfügbaren Algorithmen – auch hier
kam das Plugin-System zum Einsatz – für die Kaufempfehlungserstellung an
und liefert zu jedem eine kurze Erläuterung, sofern die Programmierer diese
angegeben haben.
Schritt vier dient zur Konfiguration des Algorithmus. In der Regel werden zusätzliche, vom Benutzer einzugebende Parameter benötigt, die über eine HTMLOberfläche innerhalb eines Browser-Fensters abgefragt werden, bevor ein Klick
auf Start die Berechnung anstößt.
Nach der Berechnung, die einige Sekunden dauern kann, werden in zwei
Übersichten die vom Algorithmus zum Abschluss empfohlenen Angebote sowie
123
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 70: Auswahl der zu verwendenden Lastprognose
Abbildung 71: Zu berücksichtigenden Lieferverträge und -angebote
124
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 72: Auswahl des Kaufempfehlungs-Algorithmus
Abbildung 73: Konfiguration des Kaufempfehlungs-Algorithmus
125
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
die ohnehin für den Kaufempfehlungszeitraum bereits abgeschlossenen Verträge
angezeigt.
Abbildung 74: Ergebnis der Berechnung
Im letzten Schritt kann die Kaufempfehlung noch manuell nachbearbeitet
werden. Der Nutzer kann empfohlene Angebote aussortieren und andere, vom
Algorithmus nicht berücksichtigte Angebote, hinzufügen. Schließlich wird die
Kaufempfehlung durch einen Klick auf den entsprechenden Button umgesetzt
und gespeichert und damit alle berücksichtigten Angebote angenommen, also in
Verträge umgewandelt.
Genetischer Algorithmus für Kaufempfehlungen Zur Generierung
von Kaufempfehlungen stellt das EIS einen als Plugin (näheres zum Pluginsystem siehe Abschnitt 4.2.1) genetischen Algorithmus zur Verfügung, der gemäß
der Evolutionsstrategie [Rec94] versucht, ein möglichst nah am Optimum liegendes, heuristisches Ergebnis zu erzielen. Gegenstand der Berechnungen sind
dabei Lieferangebote, die in den Zeitraum einer Kaufempfehlung fallen. Aus allen verfügbaren Angeboten erzeugt der Algorithmus eine Menge von Angeboten,
die sowohl möglichst gut den Energiebedarf für den Zeitraum der Kaufempfehlung, der in der zugrundeliegenden Lastprognose ermittelt wurde, decken und
gleichzeitig möglichst kostengünstig abgeschlossen werden können.
Vom Benutzer sind zur Konfiguration des Algorithmus vier Parameter zu
setzen:
126
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 75: Nachbearbeitung der Kaufempfehlung
Abbildung 76: Schematischer Ablauf der Evolutionsstrategie
127
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• Die Größe der initialen Population, also wie groß die Teilmenge aller möglichen Lösungen sein soll, die zu Beginn der Berechnung erstellt wird.
• Die Anzahl der aus der Population zu erzeugenden Generationen. Sie gibt
an, wie viele verschiedene Lösungsvorschläge aus der initialen Population
generiert werden sollen. Das Erreichen der maximalen Generationenanzahl
ist zugleich die Abbruchbedingung für den Algorithmus.
• Ein gewünschter Preis, der als vorzeitige Abbruchbedingung für den Algorithmus benutzt wird. Unterschreitet ein Kandidat den an dieser Stelle
eingetragenen Wert, so bricht der Algorithmus ab und stellt das Ergebnis
dar.
• Die Option einen Mehreinkauf zuzulassen. Ist diese Checkbox gesetzt so
wird der Zeitraum eines Liefervertrags, der über den Zeitraum der Lastprognose, und damit den eigentlichen Planungszeitraum hinausgeht, nicht
negativ bewertet. Dadurch wird die Möglichkeit des Kaufes eines langfristigen Vertrages zu wahrscheinlich günstigeren Konditionen ermöglicht.
Der Algorithmus läuft nach Eingabe dieser Parameter wie folgt ab:
1. Initialisierung Lieferangebote, die der Benutzer unbedingt haben möchte,
werden als gesetzt behandelt und die von ihnen kompensierte Energiemenge vom gesamten Bedarf subtrahiert. Als initiale Population der Größe n
werden n Lösungskandidaten, also Listen zum Abschluss vorgeschlagener
Lieferangebote, zufällig aus den optional vorzuschlagenden Angeboten erstellt. Kandidaten, die den Energiebedarf nicht decken, werden nicht berücksichtigt. Nun werden nacheinander die m Generationen erstellt. Für
die erste Generation wird die initiale Population verwendet.
2. Evaluierung Für die einzelnen Lösungskandidaten der Population wird
nun die Fitness berechnet, also ein Double-Wert, der angibt, wie gut ein
Kandidat den beiden Optimierungskriterien (Deckung des Strombedarfs
und möglichst geringe Kosten) entspricht. Je kleiner der Fitnesswert dabei ist, desto besser werden die Kriterien erfüllt. Dazu werden die Gesamtpreise der Lieferverträge errechnet und aufaddiert. Die Berechnung
des durch die Stromlieferung beigesteuerten Teils des Fitnesswertes verläuft etwas anders. Hier wird zunächst die durch die Lieferverträge während des Kaufempfehlungszeitraums verursachte Überdeckung erfasst. Anschließend wird die vor und nach besagtem Zeitraum anfallende Energiemenge bestimmt. Beides fließt negativ in die Bewertung ein. Einzige
Ausnahme bildet hierbei der Zeitraum der über den eigentlichen PLanungszeitraum hinausgeht. Für diesen kann mittels der Option Mehrkauf
zulassen eine negative Berwertung ein- oder ausgestellt werden.
3. Selektion Nach der Fitnessberechung werden die Lösungskandidaten sortiert und der fitteste Kandidat einer Liste zugewiesen, die eine engere
Auswahl an Vorschlägen enthält. Zuvor wird versucht, diesen Kandidaten
weiter zu optimieren, indem Lieferangebote entfernt werden und überprüft
wird, ob nach wie vor der Energiebedarf gedeckt wird.
128
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
4. Rekombination Nun ist die Berechnung einer Generation abgeschlossen.
Für die nächste Generation wird eine neue Population benötigt, die aus
Veränderung der bestehenden hervorgeht. Dies geschieht durch Kreuzen
und Mutieren der besten Kandidaten der vorhergehenden Population.
• Beim Kreuzen werden zwei Lösungskandidaten einer Funktion übergeben, die aus diesen Kandidaten zwei neue erstellt und zurückliefert,
indem die erste Hälften der in diesen Kandidaten gespeicherten Vertragslisten in den ersten neuen Kandidaten übertragen werden und
die zweiten Hälften in den zweiten neuen.
• Beim Mutieren hingegen wird eine zufällige Anzahl an Lieferverträgen aus der Vertragsliste durch andere ebenfalls zufälligbestimmte
Lieferverträge ausgetauscht.
5. Ergebnis Dieser Kreislauf aus Evaluierung, Selektion und Rekombination setzt sich fort, bis die maximale Anzahl an Generationen erreicht ist
oder der vom Benutzer eingegebene gewünschte Preis unterschritten wurde. Aus der danach m Kandidaten umfassenden engeren Auswahl wird
derjenige mit dem besten, also geringsten Fitnesswert ausgewählt und zurückgegeben.
5.4
Fahrpläne
Fahrpläne sind das wichtigste Endprodukt, das aus dem Einsatz des Energieinformationssystems resultiert, da ohne sie die gesamte Stromversorgung auf
dem liberalisierten, nicht mehr staatsmonopolistisch organisierten Energiemarkt
nicht funktionieren würde.
Allgemeines zum Fahrplankonzept Damit die Kraftwerksbetreiber, die
über ein Regelzonen identifiziert werden, wissen, wann sie welche Energiemengen
bereitstellen müssen, brauchen sie detaillierte Informationen über den Bedarf
der verschiedenen Stromanbieter, die sich den Kraftwerksbetreibern gegenüber
durch Angabe eines ihnen zugeordneten Bilanzkreises ausweisen. Dies gilt auch
für solche Stromhändler, die nur aus spekulativen Gründen kaufen und verkaufen
und selbst gar keine Kunden haben, die mit Energie versorgt werden müssen.
Jeden Tag bis 14 Uhr müssen die einzelnen Stromhändler jedem von ihren
Transaktionen betroffenen Kraftwerksbetreiber sogenannte Fahrpläne vorlegen,
die in Viertelstundenintervallen den Stromverbrauch angeben. Dabei wird zusätzlich bei jedem Fahrplan für einen Kraftwerksbetreiber nach Bilanzkreisen
unterschieden. Fahrpläne können dabei gegebenenfalls auch nachträglich korrigiert werden.
Die Fahrpläne werden seit einigen Jahren im sogenannten ESS -Format zwischen den Betroffenen ausgetauscht. Das ESS, englisch für ETSO Scheduling
System wurde von der ETSO standardisiert und ist XML-basiert. Insgesamt
besteht das Fahrplanmanagement aus vier Teilen:
• der eigentlichen Fahrplannachricht (Schedule Planning Message),
• der Empfangsbestätigung (Acknowledgement Message),
129
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• der Fehlernachricht (Anomaly Report) und
• der endgültigen Fahrplanbestätigung (Confirmation Report).
Implementierte Komponenten im EIS Von den oben genannten vier Bestandteilen des Fahrplanmanagements wurde im EIS nur die wichtigste verwirklicht, nämlich die Fahrplannachricht. Die anderen drei XML-Nachrichten wurden aus Zeitgründen nicht berücksichtigt. Die hier beschriebenen Funktionen
entsprechen den Anwendungsfällen 64 bis 71 aus dem Zwischenbericht.
Fahrpläne können von ausreichend mit Rechten ausgestatteten Nutzern erstellt und gelöscht, jedoch nicht bearbeitet werden werden. Falls ein Fahrplan
sich im Nachhinein als unvollständig herausstellen sollte – etwa weil kurzfristig
neue Lieferverträge hinzugekommen sind –, muss ein komplett neuer Fahrplan
für den betreffenden Tag erstellt werden, der automatisch eine neue Versionsnummer erhält. Eine manuelle Bearbeitung von Fahrplänen wurde nicht erlaubt,
da das Format sonst zu leicht mit Fehlern durchsetzt würde. Alle benötigten Informationen, also Lieferanten und Lieferverträge, sind zur Zeit der Erstellung
eines Fahrplans bereits im System gespeichert und werden dementsprechend
automatisch extrahiert und zur Berechnung der Strommengen herangezogen.
Die im EIS implementierte Version der Fahrplannachricht entspricht Version
2, Release 3, die zu Beginn der Programmierarbeiten (Februar 2006) aktuell war.
Inzwischen (Juli 2006) wurde Version 3, Release 0 veröffentlicht, die im Rahmen
der Projektgruppe aber keine Berücksichtigung mehr finden konnte.
Fahrpläne als Datentyp Ein Fahrplan besteht aus zahlreichen administrativen Angaben, die etwa die Version des Fahrplans oder seinen Empfänger beinhalten. Diese Informationen sind in der Klasse Schedule gespeichert. Außerdem
existiert pro Fahrplan eine beliebige Anzahl an Zeitschemata. Jedes Schema enthält neben weiteren administrativen Daten 96 Viertelstundenintervalle mit Verbrauchswerten, die einen kompletten Tag abdecken. Diese Datenstruktur wird
über die Klasse ScheduleTimeSeries repräsentiert, die zur Realisierung der 1n-Beziehung von der Klasse Schedule referenziert wird. Abbildung 77 zeigt eine
Übersicht über beide Klassen.
Im folgenden werden die für Fahrpläne benötigten administrativen Daten
näher erläutert und beschrieben, wie sie vom System behandelt werden. Eine ausführliche Beschreibung findet sich in den Dokumenten der ETSO (siehe
[Ope03]).
• Attribute eines Fahrplans:
– ClassificationType: Wird gesetzt, um die Art des Fahrplans gegenüber
den anderen ETSO-Teilnehmern zu markieren. Wird stets auf den
Code für Energieaustausch gesetzt.
– Day: Der Tag, für den der Fahrplan gilt.
– Filename: Der von der ETSO vorgegebene Dateiname, der ebenfalls
in der XML-Datei gespeichert wird.
– Id: Eine eindeutige Identifikationsnummer des Fahrplans. Das System
erzeugt hierzu eine GUID.
130
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 77: Klassen Schedule und ScheduleTimeSeries
– MessageDateAndTime: Das Datum, an dem der Fahrplan erstellt
wurde.
– MessageId: Eine eindeutige Identifikationsnummer des Fahrplans, die
in allen Versionen dieses Fahrplans gleich bleibt. Das System erzeugt
hierzu eine GUID.
– MessageType: Der Typ des Fahrplans. Wird vom System auf den
vordefinierten Wert für bilanzwirksame Fahrpläne gesetzt.
– MessageVersion: Die Version des Fahrplans. Wird vom System als
aufsteigende Reihe, beginnend mit 1, behandelt.
– ProcessType: Der Vorgang, der durch den Fahrplan beschrieben wird.
Das System benutzt hier stets den Wert für zukünftige, so genannte
Day-ahead -Fahrpläne.
– ReceiverCodingScheme: Gibt an, wie die ID des Empfängers codiert
ist. Das System zeigt hier eine Codierung als EIC an.
– ReceiverId: Die eindeutige Identifikation des Empfängers.
– ReceiverRole: Zeigt über einen ETSO-Code an, welche Funktion der
Empfänger des Fahrplans einnimmt.
– SenderCodingScheme: Gibt an, wie die ID des Senders codiert ist.
Das System zeigt hier eine Codierung als EIC an.
131
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
– SenderId: Die eindeutige Identifikation des Senders.
– SenderRole: Zeigt über einen ETSO-Code an, welche Funktion der
Sender des Fahrplans einnimmt.
– Timespan: Die genaue Zeitspanne, in der der Fahrplan gilt.
• Attribute eines Fahrplanzeitschemas:
– AccountingAreaIn: Enthält den EIC des Bilanzkreises, in den der
Strom geliefert wird.
– AccountingAreaInCodingScheme: Enthält das Schema, mit dem der
Bilanzkreis des Stromempfängers in der XML-Datei codiert ist. Wird
vom System auf die Konstante für EICs gesetzt.
– AccountingAreaOut: Enthält den EIC des Bilanzkreises, aus dem der
Strom transferiert wird.
– AccountingAreaOutCodingScheme: Enthält das Schema, mit dem der
Bilanzkreis des Stromsenders in der XML-Datei codiert ist. Wird vom
System auf die Konstante für EICs gesetzt.
– Aggregation: Zeigt an, für welchen Bereich die Energietransfers aggregiert sind. Wird vom Programm stets auf den ESTO-Code für
Regelzonen gesetzt.
– Agreement: Wird in der vorhandenen Implementierung nicht benötigt
und daher nicht gesetzt.
– Amounts: Die eigentliche Zeitreihe als Array von 96 Werten, einer
für jede Viertelstunde des Tages. Hier werden die vom Fahrplanerstellungsalgorithmus ermittelten Werte gespeichert.
– BusinessType: Gibt die Art des Geschäfts an. Wird vom Programm
auf den Wert für Energieverbrauch gesetzt, da mit der gelieferten
Energie Kunden bedient werden.
– ContractType: Gibt die Art der Lieferung an. Die vom System generierten Fahrpläne werden dabei stets als Transaktionen für einen Tag
klassifiziert.
– ControlAreaIn: Enthält den EIC des Bilanzkreises, in den der Strom
geliefert wird.
– ControlAreaInCodingScheme: Enthält das Schema, mit dem der Bilanzkreis des Stromempfängers in der XML-Datei codiert ist. Wird
vom System auf die Konstante für EICs gesetzt.
– ControlAreaOut: Enthält den EIC des Bilanzkreises, aus dem der
Strom transferiert wird.
– ControlAreaOutCodingScheme: Enthält das Schema, mit dem der Bilanzkreis des Stromsenders in der XML-Datei codiert ist. Wird vom
System auf die Konstante für EICs gesetzt.
– Id: Eine eindeutige GUID, mit der dieses Zeitschema identifiziert werden.
– MeasurementUnit: Gibt die Maßeinheit für die Energie in den Zeitintervallen an. Wird auf den ETSO-Standardwert für Megawattstunden
gesetzt.
132
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
– MeteringPoint: Wird in der vorhandenen Implementierung nicht benötigt und daher nicht gesetzt.
– MeteringPointCodingScheme: Wird in der vorhandenen Implementierung nicht benötigt und daher nicht gesetzt.
– Product: Die Art der gelieferten Energie. Wird auf den ETSO-Code
für aktive Energie gesetzt.
– Resolution: Zeigt die Dauer der Zeitintervalle. Dieser Wert wird auf
die ETSO-Konstante für 15-minütige Intervalle gesetzt.
– Schedule: Enthält eine Referenz auf das zugrunde liegende ScheduleObjekt.
– TimeInterval: Gibt an, wie lange die einzelnen Zeitintervalle des Schemas dauern. Wird vom Programm auf den ETSO-Standardwert von
15 Minuten gesetzt.
– TimeSeriesIdentification: Die eindeutige Identifikationsnummer des
Zeitschemas. Bleibt bei verschiedenen Versionen des Zeitschemas gleich.
– Version: Die Version des Zeitschemas. Wird vom System als laufende
Nummer, beginnend mit 1, behandelt.
Abbildung 78: Klasse ScheduleDAL
Fahrpläne im Datenzugriff Der Datenzugriff erfolgt über die Klasse
ScheduleDAL. Sie schreibt und liest Fahrpläne in die bzw. aus den zugehörigen
Datenbanktabellen Schedule und ScheduleTimeSeries, die jeweils die gleichnamige Datenhaltungsklasse abdecken. Die einzelnen Methoden sind:
• CalculateMessageVersion: Berechnet anhand der Anzahl der in der Datenbank vorhandenen Einträge ein und derselben Fahrplannachricht die
Version der zu erzeugenden nächsten Fahrplanversion und liefert sie zurück.
133
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• CalculateTimeSeriesVersion: Berechnet anhand der Anzahl der in der Datenbank vorhandenen Einträge ein und desselben Fahrplanzeitschemas die
Version der zu erzeugenden nächsten Zeitschemaversion und liefert sie zurück.
• CountSchedulesForDay: Zählt die für einen bestimmten Tag erzeugten
Fahrpläne (Anzahl Dateien) und liefert das Ergebnis zurück.
• CreateScheduleFromDataRow : Erzeugt aus einem aus der Datenbank ausgelesenen Datensatz ein neues Schedule-Objekt mit zugehörigen
ScheduleTimeSeries-Instanzen und liefert es zurück.
• DeleteAllSchedules: Löscht alle bislang erzeugten Fahrpläne aus der Datenbank und gibt als Ergebnis ein ReturnCode-Objekt zurück, das den
Ausgang der Operation beschreibt. Die zugehörigen XML-Dateien werden
nicht gelöscht, da der Nutzer diese speichern kann, wo er möchte, und diese
Orte dem System nicht bekannt sind.
• DeleteSchedule: Löscht anhand einer übergebenen GUID einen bestimmten Fahrplan aus der Datenbank und gibt als Ergebnis ein ReturnCodeObjekt zurück, das den Ausgang der Operation beschreibt. Die zugehörigen XML-Dateien werden nicht gelöscht, da der Nutzer diese speichern
kann, wo er möchte, und diese Orte dem System nicht bekannt sind.
• DeleteSchedulesForDay: Löscht alle für einen bestimmten Tag erzeugten
Fahrpläne aus der Datenbank und gibt als Ergebnis ein ReturnCodeObjekt zurück, das den Ausgang der Operation beschreibt. Die zugehörigen XML-Dateien werden nicht gelöscht, da der Nutzer diese speichern
kann, wo er möchte, und diese Orte dem System nicht bekannt sind.
• GetAllSchedules: Liest alle vorhandenen Fahrplandatensätze aus der Datenbank aus und liefert sie als Liste von Schedule-Objekten zurück.
• GetMessageId : Bekommt ein DateTime-Objekt sowie einen EIC als Empfängerkennung übergeben und liefert anhand dieser Daten die ID der Fahrplannachricht (nicht die des Fahrplandatensatzes) zurück, die an diesem
Tag für den übergebenen Empfänger gilt.
• GetSchedule: Liefert aus der Datenbank ein Schedule-Objekt mit einer
bestimmten ID zurück.
• GetScheduleTimeSeriesForSchedule: Liest die Datensätze von Fahrplanzeitschemata, die zu einem bestimmten Fahrplan gehören, aus der Datenbank aus und gibt sie als Liste von ScheduleTimeSeries-Objekten
zurück.
• InsertSchedule: Bekommt ein Schedule-Objekt übergeben, fügt es in die
Datenbank ein und gibt den Erfolg der Operation als ReturnCode-Objekt
codiert zurück.
• UpdateSchedule: Bekommt ein Schedule-Objekt übergeben, aktualisiert
mit seinen Daten den Datensatz mit derselben ID und gibt den Erfolg der
Operation als ReturnCode-Objekt codiert zurück.
134
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 79: Klasse ScheduleManager
Fahrpläne in der Geschäftslogik Die Geschäftslogik für Fahrpläne und
damit auch die Erstellung von Fahrplänen, eine der Hauptfunktionen des Programms, befindet sich in der Klasse ScheduleManager. Ein Überblick über ihre Methoden ist in Abbildung 79 zu sehen. Die Methoden, deren Name mit
Write beginnt, dienen allesamt dazu, die erstellten Schedule-Objekte in XMLFahrplandateien gemäß ESS-Format zu transformieren. Die Fahrplanerstellung
läuft dabei wie folgt ab:
• Der Benutzer muss vor der Erstellung zunächst eingeben, welchen Bilanzkreis er durch seine Firma vertritt und für welchen Netzbetreiber, also
für welche Regelzone der Fahrplan ist. Ein Datum, für das der Fahrplan
gelten soll, ist ebenfalls notwendig.
• Anschließend beginnt der Erstellungsprozess. Es wird dabei eine XMLDatei gemäß ESS erstellt, die alle Transaktionen enthält, die zwecks Versorgung der Stromkunden des Händlers anfallen. In der Regel handelt es
sich um Lieferungen in die Regelzone des Händlers, die von anderen Bilanzkreisen, also Stromanbietern, kommen. Es ist aber auch möglich, dass
die Lieferungen aus der Regelzone des Händlers kommen, wenn Überschußenergie veräußert wird. Für jede durch Lieferverträge oder EEXLieferungen auftretende Kombinationen von Regelzonen und Bilanzkreisen, die an Transaktionen beteiligt sind, wird ein eigenes Zeitschema im
Fahrplan angelegt. Sind noch andere Regelzonen als die des Händlers an
135
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
den Transaktionen beteiligt, wird für jede dieser Regelzonen eine weitere
Fahrplandatei in XML erzeugt, die dann jeweils die Transaktionen zwischen dem Händler und der betroffenen Regelzone auflistet.
• Um diese Dateien erstellen zu können, werden zunächst über die Methoden
GetSupplierContractsForSchedule und GetEexDeliveriesForSchedule
sämtliche abgeschlossenen Lieferverträge und EEX-Lieferungen ausgelesen, die an dem Tag, für den der Fahrplan gemacht wird, gelten.
• Anschließend werden Lieferungen und Verträge zuerst nach Regelzonen
und dann innerhalb dieser Aufteilung nach Bilanzkreisen geordnet, sodass die jeweiligen Listen bereits in der richtigen Sortierung für die verschiedenen zu erstellenden Fahrplanobjekte und zugehörigen Zeitreihen
vorliegen. Das Sortieren nach Regelzonen geschieht über die Methoden
GetContractsForControlArea und GetDeliveriesForControlArea. Die
Sortierung nach Bilanzkreisen erfolgt durch Aufruf von SortContractsBy
AccountingAreas und SortDeliveriesByAccountingAreas. Zuvor werden Listen aller beteiligten Regelzonen und Bilanzkreise über die Methoden GetAccountingAreasInvolved und GetControlAreasInvolved erstellt.
• Nun wird für jede Regelzone über die Methode ein neues Schedule-Objekt
erzeugt und mit den von der ETSO vorgegebenen administrativen Daten
gefüllt.
• Dann wird für jeden Bilanzkreis, der in der sortieren Liste für diese Regelzone aufgeführt ist, ein Zeitschema als ScheduleTimeSeries-Objekt
erstellt und gefüllt.
• Um die Verbrauchsmengen je Zeitreihe zu berechnen, wird die Methode
AggregateAmounts aufgerufen. Hier wird zunächst zu jedem Liefervertrag
überprüft, ob noch aktuelle Störungen dazu existieren, deren Menge dann
ggf. von der zu liefernden Menge abgezogen wird. Dann werden für alle
EEX-Lieferungen und Lieferverträge, die zu ein und derselben Kombination von Bilanzkreisen und Regelzonen gehören, die Liefermengen für alle
Viertelstundenintervalle aufaddiert.
• Falls dabei durch Verkäufe an die EEX negative Mengen zustande kommt,
was über die Methode HasNegativeAmounts abgefragt wird, müssen die
negativen Werte in eine eigene Zeitreihe mit vertauschten Regelzonen und
Bilanzkreisen und umgekehrten Vorzeichen ausgelagert werden. Das liegt
daran, dass die ETSO im ESS-Format nur nicht-negative Energiewerte vorsieht. Das Aufteilen des Zeitschemas geschieht über die Methode
SplitTimeSeries.
• Damit ist die inhaltliche Erstellung der Fahrpläne abgeschlossen, und die
erzeugten Objekte werden über Aufrufe der verschiedenen Write-Methoden
in ESS-konforme XML-Dateien transformiert. Die Daten der Fahrpläne
werden in der Datenbank gespeichert.
Die übrigen Methoden der Klasse ScheduleManager funktionieren wie folgt:
136
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• DeleteAllSchedules: Ruft die gleichnamige Methode der Klasse
ScheduleDAL auf gibt als Ergebnis ein ReturnCode-Objekt zurück, das
den Ausgang der Operation beschreibt.
• DeleteSchedulesForDay: Ruft die gleichnamige Methode der Klasse
ScheduleDAL auf gibt als Ergebnis ein ReturnCode-Objekt zurück, das
den Ausgang der Operation beschreibt.
Abbildung 80: Grafische Oberfläche für Fahrpläne
Fahrpläne in der Benutzeroberfläche Zur Fahrplanverwaltung existiert
ein dreigeteiltes Panel (siehe Abbildung 80). Oben werden Fahrpläne erstellt, indem der Tag, für den der Fahrplan berechnet werden soll, sowie Bilanzkreis und
Regelzone des Händlers, der das System einsetzt, ausgewählt werden. Schließlich wird über einen Dialog noch der Ort bestimmt, an dem die fertigen XMLDateien zu speichern sind.
Im mittleren Teil kann der Nutzer sich links für beliebige Verzeichnisse auf
dem Rechner eine Liste von Fahrplandateien anzeigen lassen. Wählt man einen
der aufgeführten Dateinamen an, wird in einem Fenster recht daneben die zugehörige XML-Datei angezeigt. Dazu wurde das von Windows.Forms bereitgestellte WebBrowser-Control benutzt, das als Parameter übergebene XML-Dateien
automatisch formatiert darstellt.
137
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Unten besteht die Möglichkeit, nach Eingabe eines Datums die Fahrpläne
eines Tages oder gleich alle vorhandenen Fahrpläne zu löschen. Dazu werden
bei Bestätigung der Sicherheitsabfrage die entsprechenden Methoden aus dem
Service Access Layer aufgerufen.
138
EIS - Energie-Informationssystem
6
Projektgruppe Energie-Informationssyteme
Tests
Um die volle Funktionsfähigkeit sowie vor allem die Korrektheit des Programms
sicherzustellen, wurden umfangreiche Testmaßnahmen unternommen. Zum einen
wurden Unittests zum Testen einzelner Klassen mit ihren Funktionen verwendet, um während der Entwicklung Fehler zu finden und eine Basis für Tests nach
Codeänderungen zu haben. Des Weiteren wurde am Ende ein umfangreicher
Systemtest durchgeführt, bei dem die Oberfläche von mehreren Testern untersucht wurde. Die dabei gefundenen Bugs wurden protokolliert und anschließend
behoben. Im Anschluss wurden die Installationsroutinen getestet, indem das
Programm auf verschiedene Rechnerkonfigurationen installiert wurde. Um Aussagen über die Skalierbarkeit sowie die Performanz der Anwendung zu treffen,
wurden Lasttests durchgeführt.
6.1
Datenbankzugriff
Die korrekte und zuverlässige Kommunikation mit der Datenbank sicherzustellen war einer der wichtigsten Aspekte bei der Programmierung des Systems. Im
Gegensatz zu normalem Programmcode werden Syntaxfehler oder falsche Referenzen nicht automatisch während der Eingabe oder beim Kompilieren angezeigt, sondern treten erst beim Ausführen der entsprechenden Datenbankabfragen auf. Um zu gewährleisten, dass die einzelnen Funktionen auch das tun, was
von ihnen erwartet wird, wurde das Testprojekt DALTests erstellt, in dem für
jede Klasse der Datenbankzugriffsschicht eine Testklasse als Unittest implementiert wurde, die mit Beispieldaten die Funktionen der zugrundeliegenden Klasse
aufruft und deren Ergebnis überprüft. In der Regel werden Anlegen, Auslesen,
Bearbeiten und Löschen von Objekten eines Typs getestet. Das Testprojekt wird
dazu mit allen Klassen in Visual Studio ausgeführt und liefert Protokolle über
Erfolg oder Fehlschlag des Testlaufs zurück. Im folgenden wird als Beispiel für
die allgemeine Vorgehensweise der Testcode der Klasse CustomerDALTest, die
die Datenbankfunktionen zum Umgang mit Kunden-Objekten testet, erläutert.
Zunächst wird die Testklasse als solche deklariert und der zugehörige Testcontext der aufrufenden Testumgebung zur Verfügung gestellt.
[TestClass()]
public class CustomerDALTest {
private TestContext testContextInstance;
public TestContext TestContext {
get { return testContextInstance; }
set { testContextInstance = value; }
}
Innerhalb der Methode MyTestInitialize wird Code angegeben, der zur Vorbereitung des eigentlichen Tests nötig ist, in diesem Fall das Anlegen und Speichern einiger Hilfsobjekte, die später benötigt werden. In der Methode MyTestCleanup steht Code, der nach dem Ausführen des Tests zum Aufräumen“ be”
nötigt wird – in diesem Fall müssen die Hilfsobjekte wieder aus der Datenbank
gelöscht werden. Das Aufräumen sieht hier wie folgt aus:
139
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
[TestCleanup()]
public void MyTestCleanup() {
Assert.IsFalse(CustomerContractDAL.DeleteCustomerContract(
contract.Id));
Assert.IsTrue(TariffDAL.DeleteTariff(t.Id) &&
EnergyProfileDAL.DeleteEnergyProfile(ep.Id) &&
ControlAreaDAL.DeleteControlArea(ca.Id) &&
AccountingAreaDAL.DeleteAccountingArea(aa.Id) &&
EisUserDAL.DeleteEisUser(eu.Id));
aa = null;
ca = null;
ep = null;
eu = null;
t = null;
}
Anschließend wird die Testmethode CustomerTest deklariert – alle Funktionstests einer Datenzugriffsklasse werden jeweils in einer Testmethode zusammengefasst.
[TestMethod()]
public void CustomerTest() {
Nun wird zunächst ein fiktiver Testkunde erzeugt, mit beliebigen Daten gefüllt und in der Datenbank abgelegt. Der Assert-Befehl am Ende überprüft, wie
dies auch in anderen Testframeworks der Fall ist, ob die aufgerufende Methode zum Einfügen des Datensatzes einen bestimmten Wert, in diesem Fall true
für erfolgreiches Speichern, zurückliefert. Andernfalls schlägt der Test fehl und
terminiert.
Customer c = new Customer();
c.Address = "Frau";
c.City = "Bramsche";
c.Company = "Ruhrgas AG";
c.Email = "[email protected]";
c.Fax = "0514/4241";
c.FirstName = "Anja";
c.SortCode = "22143224";
c.BankAccountNumber = "21487423878";
c.Id = Guid.NewGuid();
c.LastName = "Meier";
c.Number = "15c";
c.Phone = "05123/3421";
c.Street = "Energiestraße";
c.Zipcode = "46234";
c.DateOfBirth = new DateTime(1976,08,20);
Assert.IsTrue(CustomerDAL.InsertCustomer(c));
Nach dem Einfügen folgt der Test der Bearbeitungsfunktion. Dazu werden
einige Werte des Kunden verändert und anschließend die geeignete Funktion
140
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
zur Änderung eines Datensatzes aufgerufen und ihr Ergebnis wieder mit Assert
überwacht.
c.Zipcode = "45324";
c.Number = "22 - 24";
c.LastName = "Bierhoff";
c.Street = "Waldweg";
Assert.IsTrue(CustomerDAL.UpdateCustomer(c));
Anschließend werden die Funktionen zum Auslesen bestimmter Kundendatensätze überprüft. Zunächst das Auslesen über die dem soeben eingefügten
Objekte zugewiesene GUID. Direkt danach wird über Vergleiche der zahlreichen Attribute des ausgelesenen mit dem ursprünglichen Objekt sichergestellt,
dass die richtigen Werte aus der Datenbank extrahiert wurden. Weicht ein Wert
von den Erwartungen ab, schlägt der Test fehl.
Customer test = CustomerDAL.GetCustomer(c.Id);
Assert.Equals(test.Address,c.Address);
Assert.Equals(test.City,c.City);
Assert.Equals(test.Company,c.Company);
Assert.Equals(test.Email,c.Email);
Assert.Equals(test.Fax,c.Fax);
Assert.Equals(test.FirstName,c.FirstName);
Assert.Equals(test.BankAccountNumber,c.BankAccountNumber);
Assert.Equals(test.Id,c.Id);
Assert.Equals(test.LastName,c.LastName);
Assert.Equals(test.Number,c.Number);
Assert.Equals(test.Phone,c.Phone);
Assert.Equals(test.Street,c.Street);
Assert.Equals(test.DateOfBirth,c.DateOfBirth);
Assert.Equals(test.SortCode,c.SortCode);
Assert.Equals(test.Zipcode,c.Zipcode);
Dieses Vorgehen wird für die anderen Auslesemethoden, die Listen mit zahlreichen Objekten zurückliefern, wiederholt, wobei vor dem Abgleich zunächst
aus allen Elementen der Liste über die GUID das richtige herausgesucht wird.
Überprüft wird außerdem, ob das erwartete Objekt überhaupt in der Liste vorhanden ist. Falls nicht, kommt es wieder zu einem Fehlschlag.
found = false;
List<CustomerContract> cc =
CustomerDAL.GetCustomerByName("Bierhoff");
for(int i = 0; i < cc.Count; ++i) {
test = cc[i];
if(test.Id == c.Id) {
found = true;
Assert.Equals(test.Address, c.Address);
Assert.Equals(test.City, c.City);
...
141
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
}
}
Assert.IsTrue(found);
Nachdem alle Auslesemethoden getestet sind, erfolgt schließlich noch die
Löschung des Kundenobjektes, deren Erfolg ebenfalls überwacht wird, womit
der Test beendet ist.
Assert.IsTrue(CustomerDAL.DeleteCustomer(c.Id));
Durch diese Vorgehensweise ist eine hohe Codeabdeckung in den getesteten
Klassen gewährleistet, da alle vorhandenen Methoden zum Anlegen, Auslesen,
Bearbeiten und Löschen mindestens einmal aufgerufen werden. An dieser Stelle könnte man einwenden, dass nur mit korrekten Werten gearbeitet wird und
nicht mit ungültigen Eingaben, die von der Datenzugriffsklasse abgefangen werden müssten. Dies Problem stellt sich hier allerdings nicht, weil sämtliche Daten clientseitig auf ihre Gültigkeit überprüft werden, so dass fehlerhafte Daten
gar nicht in diese Architekturschicht gelangen, sondern schon früher zurückgewiesen werden. Damit entfällt auch die Notwendigkeit der Überwachung in
dieser Schicht. Allerdings müsste, sobald Plugins zum Zugriff von außen auf
den Webservice bereitgestellt werden, was in dieser Version nicht der Fall ist,
zusätzlicher Code zur Validierung von außen gelieferter Daten in die Geschäftslogik eingebaut werden, weil dann die GUI-seitige Validierung nicht griffe und
korrekte Werte nicht sichergestellt werden könnten.
6.2
Webservicetests
Zusätzlich zu den Tests der Datenzugriffslogik wurden Testfälle für die Methoden des Webservice entwickelt, die auch als Grundlage für die Lasttests dienen
(vgl. Abschnitt 6.5). Sie wurden ebenfalls als Unittests implementiert, die jeweils
Methoden, die funktional zusammengehören — also etwa solche zur Tarifverwaltung —, überprüfen. Dabei werden nahezu alle Funktionen des Webservices einmal oder mehrfach aufgerufen, um eine hohe Codeabdeckung zu gewährleisten.
Ihre Ergebnisse werden überprüft, sofern es sich nicht um reine Datenbankanfragen handelt, die bereits in den Tests der Datenzugriffslogik überprüft wurden.
In den Testfällen werden typische Handlungsabläufe durchgespielt wie beispielsweise das Anlegen eines Kunden mit anschließender Zuweisung von Verträgen
und Lastprofilen. Der Code für diesen Test der Webservicemethoden zum Anlegen von Kundenverträgen wird hier als Beispiel und zum Vergleich mit dem
Code der Datenzugriffstests vorgestellt.
Anfangs der Methode wird ein Kundenvertrag über den Aufruf von Helper CreateCustomerContract generiert und alle zugehörigen Objekte wie Regelzone oder Bilanzkreis angelegt.
[TestMethod]
public void CustomerContractTest() {
ReturnCode rc;
142
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
CustomerContract cc = Helper_CreateCustomerContract();
cc.StartDate = DateTime.Now.AddDays(3);
cc.Id = Guid.NewGuid();
cc.EndDate = DateTime.Now.AddDays(52);
Anschließend werden die zugehörigen Objekte, die über Refenzen mit dem im
Mittelpunkt stehenden Kundenvertrag verbunden sind, eingefügt, damit es nicht
zu Konflikten in der Datenbank kommt. Dies sind ein Bilanzkreis, eine Regelzone, ein Kunde, ein Systemnutzer, ein Lastprofil und ein Tarif. Über das
Überprüfen des rc genannten ReturnCode-Objekts wird sichergestellt, dass die
Methoden erfolgreich ausgeführt wurden.
rc = target.AddNewAccountingArea(cc.AccountingArea);
Assert.IsTrue(rc == ReturnCode.OK);
rc = target.AddNewControlArea(cc.ControlArea);
Assert.IsTrue(rc == ReturnCode.OK);
rc = target.AddNewCustomer(cc.Customer);
Assert.IsTrue(rc == ReturnCode.OK);
rc = target.AddNewEisUser(cc.EisUser);
Assert.IsTrue(rc == ReturnCode.OK);
rc = target.AddNewEnergyProfile(cc.EnergyProfile);
Assert.IsTrue(rc == ReturnCode.OK);
rc = target.AddNewTariff(cc.Tariff);
Assert.IsTrue(rc == ReturnCode.OK);
Dann wird der Kundenvertrag eingefügt.
rc = target.AddNewCustomerContract(cc);
Assert.IsTrue(rc == ReturnCode.OK);
Nun werden Abfragen zum Auslesen von Kunden und -verträgen durchgeführt, indem die verschiedenen dazu bereitgestellten Methoden (Auslesen aller
Kundenverträge, aller Verträge eines Kunden, eines bestimmten Vertrages und
des Kunden, der einen bestimmten Vertrag hat) aufgerufen werden, und sichergestellt, dass Daten übermittelt wurden. Eine genaue Überprüfung der Ergebnisse wie bei den Datenzugriffstests erfolgt nicht, da in jenen bereits sichergestellt
wurde, dass die Daten richtig ausgelesen werden. Es geht hier nur noch darum
zu kontrollieren, ob die Daten auch über den Webservice zurückkommen.
CustomerContract[] ccs = target.GetAllCustomerContracts();
Assert.IsTrue(ccs.Length > 0);
ccs = target.GetCustomerContractsForCustomer(cc.Customer);
Assert.IsTrue(ccs.Length > 0);
143
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
CustomerContract c = target.GetCustomerContract(cc.Id);
Assert.IsTrue(c.Id == cc.Id);
Customer[] cs = target.GetCustomerByContract(cc.Id);
Assert.IsTrue(cs.Length > 0);
Sind diese Überprüfungen erfolgreich, wird der Kundenvertrag wieder gelöscht und abschließend gewissermaßen aufgeräumt, das heißt, alle eigens für
diesen Vertrag angelegten Objekte werden ebenfalls aus den Datenbeständen
entfernt. Die Ergebnisse dieser Funktionsaufrufe werden wieder überprüft. Bezeugen die Ergebniscodes den Erfolg dieser Operationen, ist der Test erfolgreich
beendet.
rc = target.DeleteCustomerContract(cc.Id);
Assert.IsTrue(rc == ReturnCode.OK);
rc = target.DeleteCustomer(c.Customer.Id);
Assert.IsTrue(rc == ReturnCode.OK);
rc = target.DeleteControlArea(c.ControlArea.Id);
Assert.IsTrue(rc == ReturnCode.OK);
rc = target.DeleteAccountingArea(c.AccountingArea.Id);
Assert.IsTrue(rc == ReturnCode.OK);
rc = target.DeleteEisUser(c.EisUser);
Assert.IsTrue(rc == ReturnCode.OK);
rc = target.DeleteEnergyProfile(c.EnergyProfile.Id);
Assert.IsTrue(rc == ReturnCode.OK);
rc = target.DeleteTariff(c.Tariff.Id);
Assert.IsTrue(rc == ReturnCode.OK);
6.3
Systemtests
Abschließend und vor allem auch, um die geforderte Bedienbarkeit sicherzustellen (vgl. 3.3.1), wurde das gesamte System einem manuellen Test unterzogen.
Dabei wurden alle Masken des Programms untersucht und alle Funktionen auf
Korrektheit überprüft. Diese Tests waren sehr umfangreich und wurden von
mehreren Testern durchgeführt. Alle Tests wurden dabei protokolliert, so dass
gefundene Fehler gleich in Beziehung zu Korrekturmaßnahmen gesetzt werden
konnten. Im folgenden soll kurz der Aufbau der Protokolldokumentation vorgestellt werden.
Jedes Testdokument spezifziert zunächst das Datum der Tests sowie den
Namen des Testers. Unter dem Punkt Leistungsmerkmal ist beschrieben, welche
Maske bzw. welche Funktionen untersucht wurden. Außerdem wird noch die
Systemumgebung erfasst.
Ein einzelner Testfall hat dabei folgende Attribute:
144
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• Testfall-Nr.: Die Nummer des Testfalls.
• Beschreibung: Beschreibung der getesteten Funktion.
• Erwartetes Ergebnis Beschreibung des Ergebnisses, das der Nutzer erwartet.
• Ergebnis: Die Spalte enhält das Ergebnis. Es sind folgende Werte verwendet:
– + bedeutet, dass der Test erfolgreich war.
– 0 bedeutet, dass der Test war Einschränkungen erfolgreich war. Diese
Einschränkungen sind dann in den Anmerkungen beschrieben.
– - bedeutet, dass der Test nicht erfolgreich war. Die aufgetretenen
Fehler sind dann in den Anmerkungen beschrieben.
• Fehler/Anmerkungen: Freitext für Bemerkungen
Alle Protokolle zu Tests und Fehlerkorrekturen sind als Anhang angefügt.
6.4
Installationstest
Neben dem Systemtest wurde auch ein Installationstest durchgeführt. Dabei
wurden die von der Projektgruppe erstellten Setup-Programme auf verschiedenen Rechnern ausgeführt. Im Anschluss wurde bei einer kurzen manuellen
Überprüfung getestet, ob alle erorderlichen Komponenten einwandfrei auf dem
Zielsystem installiert wurden und ob alle Funktionen ausführbar waren. Die folgende Tabelle listet die Rechner auf, auf denen wir die Software getestet haben.
Auf allen Systemen lief die Installation ohne Probleme.
Rechner
Intel P4; 2,6 GHz; 1 GB RAM
Intel P4; 3,2 GHz; 1,5 GB RAM
Intel P4; 3,2 GHz; 1,5 GB RAM
AMD Athlon 64; 3,2 GHz; 1 GB RAM
Intel Centrio; 1,5 GHz; 1 GB RAM
Dual Xeon; 3,4 GHz; 4 GB RAM
6.5
Betriebssystem
Windows XP SP2
Windows 2003 Server
Windows 2003 Server
Windows XP SP2
Windows XP SP2
Windows 2003
Typ
Client
Client
Server
Client
Client
Server
Lasttests
Die Lasttests dienen unter anderem dazu, die Skalierbarkeit des Systems im
Mehrbenutzerbetrieb (vgl. nicht-funktionale Anforderungen, Abschnitt 3.3.6)
zu überprüfen, und benutzen die Testsuite für die Webservicetests. Microsoft
Visual Studio bietet standardisierte Vorlagen für Lasttests an, mit deren Hilfe
sich Testszenarien durchspielen lassen. So ist es möglich, einen Lasttest über verschiedene Zeiträume durchzuführen, konstante oder variable Benutzerzahlen zu
simulieren oder das Benutzerverhalten etwa durch Denkpausen zu beeinflussen.
Auch können die einzelnen Testmethoden zu einem Testmix zusammengefasst
werden, in dem ein benutzerdefinierter Prozentsatz von Aufrufen auf jeweils eine
Methode entfällt.
145
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Diese Lasttests wurden in verschiedenen Konfigurationen durchgeführt und
bescheinigten dem System eine überaus akzeptable Performanz. Protokolliert
wurden seitens der Entwicklungsumgebung jeweils zahlreiche Werte für das Testaggregat wie auch für die einzelnen Methodenaufrufe. Die Testresultate sind sowohl in tabellarischer als auch in grafischer Form verfügbar. Im folgenden wird
die Arbeitsweise des Lasttests an einem Beispiel vorgeführt.
Abbildung 81: Testprotokoll nach Lasttest in Visual Studio
Abbildung 81 zeigt ein Testprotokoll, nachdem zuvor ein sechsminütiger
Lasttest durchgeführt worden war, in dem die Nutzerhandlungen zur Kundenund zur Lieferantenverwaltung simuliert wurden. Die gerade (rote) Linie im
Graphen weist die Anzahl der Nutzer aus, die gleichzeitig am System arbeiten. In diesem Fall lag sie bei konstant 30 Nutzern. Zwischen den verschiedenen
Aktionen der Nutzer war eine Nachdenkzeit von zehn Sekunden vorgegeben
worden (hier nicht zu sehen). Die in stark ausschlagende (grüne) Linie symbolisiert die jeweils pro Sekunde durchgeführten Testmethodenaufrufe. Die unterste
(blaue) Linie steht für die durchschnittliche Dauer eines Testaufrufs in Sekunden. Zahlreiche andere Werte sind noch protokolliert, so zum Beispiel die drei
eben genannten Werte nochmals deaggregiert für jede einzelne Testmethode.
Festgehalten wird zu jedem dieser Werte der minimale, maximale, durchschnittliche und letzte aufgetretene Wert. So ist zum Beispiel für die Anzahl der Tests
pro Sekunde zu erkennen, dass die maximale Anzahl bei sechs Aufrufen lag und
die durchschnittliche Anzahl knapp unter dreien. In dem rechten oberen Fenster
sind für die jeweils ausgewählte Größe die Anzahlen der Tests für die einzelnen,
hier fünfsekündigen Zeitintervalle abgebildet.
Diese sehr detaillierte Art der Protokollierung durch Visual Studio erlaubt
deutliche Rückschlüsse auf die Leistungsfähigkeit des Systems. So lässt sich anhand der 2, 73 durchschnittlich pro Sekunde durchgeführten Testläufe ablesen,
dass der Webservice die anfallenden Daten überaus schnell überträgt und die
Datenbearbeitung durch das System insgesamt sehr effizient geschieht. Die zu146
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
grunde liegenden Testmethoden zu Kunden- und Lieferantenverwaltung enthielten nämlich nicht nur einzelne Methodenaufrufe aus dem Webservice, sondern
ein komplettes Benutzungsszenario mit verschiedenen Aufrufen zum Anlegen,
Bearbeiten, Löschen und vor allem Auslesen. Zum Zeitpunkt des hier vorgestellten Testlaufs etwa befanden sich gut tausend Kunden in der Datenbank, die für
einen Aufruf der Kundenverwaltungstestmethode einmal komplett und mehrfach nach bestimmten Kriterien ausgelesen und übertragen werden mussten.
Hinzu kommt ein neu erzeugter sowie ein zu löschender Kunde und 29 andere
angemeldete Nutzer. Man kann also sagen, dass die Kommunikation innerhalb
der Client-Server-Anwendung effizient abläuft und auch größere Benutzermengen kein Problem für das System darstellen. Andere Testläufe bestätigten den
hier gewonnenen Eindruck.
147
EIS - Energie-Informationssystem
7
Projektgruppe Energie-Informationssyteme
Vorgehensmodell
Die Erstellung einer komplexen Software durch eine relativ große Gruppe mit
immerhin elf Teilnehmern erfordert ein strukturiertes Vorgehensmodell. Die wesentlichen Gründe sind, dass dadurch ein koordinierter Entwicklungsprozess in
der Gruppe möglich wird und niemand den Überblick über den Projektstand verliert. Allerdings stießen etablierte Vorgehensmodelle wie das Wasserfallmodell
oder das V-Modell auf wenig Gegenliebe in der Projektgruppe, da die anderweitig mit diesen Methodiken gemachten Erfahrungen – etwa im Softwareprojekt
im Grundstudium – nicht sehr positiv ausgefallen waren. Insbesondere wurde
ein System gewünscht, das flexibler war und alle Ebenen der Entwicklung bis
hin zur Aufgabenzuteilung an die einzelnen Mitglieder umfasste. Hier fand sich
das noch recht junge Scrum-Modell als Lösung. Erfahrungen mit diesem Modell
hatte noch niemand in der Gruppe gemacht, so dass es sich zugleich anbot, es
einmal unter realen Bedingungen zu testen, weil Projektgruppen nicht nur dazu
dienen, möglichst schnell möglichst viel zu programmieren, sondern auch dazu, neue Erfahrungen zu sammeln. In den folgenden Abschnitten wird zunächst
beschrieben, was Scrum ist und wie es in der Projektgruppe eingesetzt wurde.
7.1
7.1.1
Scrum - Entwicklungsmodell für das EIS
Agile Softwareentwicklung
Auf Flexibilität ausgerichtete Softwareentwicklung ist eine Form des Softwareentwicklungsprozesses und zeichnet sich durch vergleichsweise geringen bürokratischen Aufwand aus. Damit bildet die so genannte agile Softwareentwicklung ein Gegengewicht zu den herkömmlichen Entwicklungsprozessen wie dem
V-Modell und dem Wasserfallmodell, bei welchen der hohe bürokratische Aufwand für die Mitarbeiter eines Softwareentwicklungsteams häufig als hinderlich
angesehen wird.
Je nach Betrachtungsquerschnitt lässt sich agile Softwareentwicklung auf verschiedene Ebenen zergliedern, die im folgenden Beschrieben und in Abbildung
82 dargestellt werden. Näheres zu den Grundsätzen der agilen Softwareentwicklung, die im folgenden umrissen werden, findet sich unter anderem im Manifesto
for Agile Software Development [BBa01], im Artikel Agile Processes [Mar02] von
Robert C. Martin oder im Artikel The New Methodology [BBa01] von Martin
Fowler.
Agile Werte sind die unterste Ebene und bilden das Fundament agiler Softwareentwicklung und zielen auf soziale Kompetenzen der Mitarbeiter. Dazu
zählen:
• Ehrlichkeit
• Kommunikation
• Kritikfähigkeit
• Engagement
148
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 82: Agiler Prozess im Scrum-Modell
Agile Prinzipien sind ein Leitsatz für die Arbeitsweise mit dieser Art der
Softwareentwicklung. Sie beschreiben die Dos and Don´t Dos des agilen
Prozesses und sind in dem Manifesto for Agile Software Development“
”
[BBa01] nachzulesen. Das Verfahren kann dabei nur funktionieren, solange sich jeder Beteiligte eines Projektes an die bestehenden Prinzipien hält.
Daraus wird ersichtlich, wieso Werte wie Ehrlichkeit im agilen Entwicklungsprozess so wichtig sind. Beispiele für agile Prinzipien sind etwa
• selbstständiges Arbeiten,
• genaues Arbeiten und
• Terminverpflichtung.
Agile Methoden sind die zur Bearbeitung eines Projektes eingesetzten Teilverfahren, auch Arbeitstechniken genannt. Meist bauen die eingesetzten
Methoden aufeinander auf, so dass das Weglassen bestimmter Methoden
für den Entwicklungsprozess eher hinderlich ist. Die eingesetzten Methoden dienen dazu, die Aufwandskurve und damit die Kostenkurve möglichst
gering zu halten. Dies wird in den nächsten Abschnitten noch ausführlicher begründet werden. Agile Methoden werden von Martin Fowler in
[Fow05] ausführlich beschrieben, so dass an dieser Stelle nicht weiter auf
die umfangreichen Vorteile dieser Arbeitsweisen eingegangen werden soll.
Zur Veranschaulichung wurde Abbildung 83 aus [kos] übernommen.
Agile Prozesse sind die im Rahmen des Projektes eingesetzten Softwareentwicklungsprozesse. Diese bedienen sich agiler Methoden. Werden diese
Prozesse erfolgreich zur Entwicklung von Software eingesetzt, spricht man
von agiler Softwareentwicklung. Den eingesetzten Prozessen liegt in der
Theorie zugrunde, die für den Entwurf eingeplante Zeit zu minimieren
und schnell zu ausführbarem Code zu gelangen.
149
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 83: Wirtschaftlichkeit von agilen und konventionellen Methoden
The most immediate difference is that they are less document-oriented,
”
usually emphasizing a smaller amount of documentation for a given task.
In many ways they are rather code-oriented: following a route that says
that the key part of documentation is source code.“ [Fow05]
7.1.2
Eigenschaften agiler Softwareentwicklung mit Scrum
Die Projektgruppe einigte sich nach kurzer Diskussion darauf, agile Softwareentwicklung einzusetzen. Dabei entschied sie sich dafür, deren Verfahren im
Rahmen des so genannten Scrum-Modells anzuwenden. Da dieses Modell relativ
neu und noch nicht sehr verbreitet ist, soll in diesem Abschnitt kurz auf seine
Vorteile eingegangen werden. Scrum wurde maßgeblich von Ken Schwaber und
Jeff Sutherland entworfen [Sch05]. Dabei soll das Modell die beteiligten Menschen in den Mittelpunkt stellen und dem sozialen Aspekt der Gruppenarbeit
große Bedeutung einräumen. Kommunikation zwischen den Teammitgliedern
bildet ein zentrales Element bei der Bearbeitung der zu erfüllenden Aufgaben.
In regelmäßig stattfindenden Treffen (zwei- bis dreimal pro Woche), genannt
Scrums, werden daher auftretende Probleme und Fortschritte besprochen. Große
Softwareprojekte sind für den einzelnen Entwickler oft schwer zu überblicken.
Scrums helfen, Probleme zu erkennen, bevor sie akut werden. Dies spart Zeit
und damit das Geld des Auftraggebers.
Das Projekt wird zudem in kleinen, einwöchigen Etappen bearbeitet. Jede
Etappe enthält alle Entwicklungsschritte des Gesamtprojekts (Anforderungsanalyse, Design, Implementierung, Test). Diese Etappen werden Sprints genannt
und werden schriftlich festgehalten. So können sich alle Mitglieder über Fortschritte anderer Mitarbeiter informieren. Dies wiederum hilft bei der Prävention
von Fehlern.
150
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Es wird auf einen strikten Anforderungskatalog des Kunden verzichtet, dafür
werden auch Kundenwünsche berücksichtigt, die sich noch während der Softwareentwicklung ergeben. Dies ist möglich, da, anders als in klassischen Verfahren,
der Entwicklungsprozess in Sprints organisiert ist. Nur die im aktuellen Iterationsschritt benötigten Merkmale werden implementiert. Scrum ist bietet durch
diese Flexibilität wie auch andere vergleichbare Vorgehensmodelle, etwa Extreme
Programming, Kostenvorteile für den Auftraggeber (vgl. Abbildung 83). Auch
für die Entwickler kann Scrum eine geeignete Arbeitsweise sein, denn aus der
Erfahrung heraus betrachten viele Entwickler von Software die Dokumentation eher als ein Hindernis und weniger als eine Hilfe. Scrum ist jedoch nicht
vollkommen planlos, wie man nun vermuten könnte. Dies wäre fatal, da kleine
Programmierfehler große Korrekturphasen erfordern würden. Um diesem Irrtum vorzubeugen, soll im nächsten beschrieben werden, wie Scrum es schafft,
mit verringertem Planungsaufwand dennoch planvoll zu einer funktionierenden
Software zu gelangen.
Scrum basiert auf dem iterativen Umsetzen vordringlicher Anforderungen
[Sch05]. Während Extreme Programming allerdings noch Konzepte zur Ermittlung von Anforderungen umfasst, liegt der Schwerpunkt in Scrum auf deren
Abarbeitung. Scrum ist somit in erster Linie ein Managementprozess, der sich
mit anderen Vorgehensmodellen — sinnvollerweise aber agilen — kombinieren
läßt. Schwaber sieht Scrum als empirischen Prozess, einem Prozess ständiger
Adaption im Gegensatz zu den herkömmlichen definierten Modellen.
Scrum besteht im wesentlichen aus den folgenden Kernpraktiken, welche
nachstehend näher beschrieben werden und auch auf den Internetseiten der
Agile Alliance“ [All] nachzulesen sind:
”
• Sprint
• Product Backlog
• Sprint Backlog
• Daily Scrum
• Sprint Review
• Sprint Retrospective
7.1.3
Sprint
Sprints stehen bei der Softwareentwicklung mit Scrum im Mittelpunkt. In einem Sprint werden die in einem Product Backlog (s. u.) gesammelten Anforderungen den Kunden Schritt für Schritt abgearbeitet. Die im Product Backlog
aufgestellten Anforderungen werden in Sprint Backlogs eingetragen. In einem
Sprint Backlog ist festgehalten, welche Anforderungen in einem bestimmten
Sprintzeitraum erfüllt werden sollen. Die Iterationslänge beträgt in der Regel
30 Tage, innerhalb dieser Projektgruppe jedoch nur sieben Tage, da in kleineren
Schritten gearbeitet wird. Die Entscheidung, welche Anforderungen umgesetzt
werden, wird vom Kunden nach von ihm festgelegten Prioritäten getroffen. Die
Anforderungen aus dem Sprint Backlog werden vom Team aufgeteilt und jeder
Entwickler schätzt und bewertet die ihm zugewiesenen Aufgaben.
151
EIS - Energie-Informationssystem
7.1.4
Projektgruppe Energie-Informationssyteme
Product Backlog
Ein Product Backlog ist eine Liste priorisierter Anforderungen, die in zukünftigen Sprints abgearbeitet werden sollen. Das Product Backlog gibt damit eine
grobe Entwicklungsrichtung für das Softwareprodukt an.
7.1.5
Sprint Backlog
Ein Sprint Backlog ist eine Liste der Anforderungen, die in einem Sprint abgearbeitet werden sollen. Welche Anforderungen aus dem Product Backlog in das
Sprint Backlog wandern, bestimmt allein der Kunde auf Basis der Schätzungen
der Entwickler.
7.1.6
Daily Scrum
Bei jedem Meeting findet ein kurzes (15-minütiges) Scrum-Meeting statt. Bei
einem Scrum-Meeting skizziert eine Gruppe, die einen bestimmten Scrum abarbeitet kurz Ergebnisse und Probleme. Da jede Gruppe selbständig arbeitet, erfordert dieses Verfahren Disziplinierung der Mitglieder. Der Begriff Daily-Scrum
ist im Rahmen der Projektgruppe irreführend, da nicht täglich Treffen stattfinden.
7.1.7
Sprint Review
Ist der Iterationszeitraum eines Sprints vorbei, findet ein Sprint Review statt.
Hier können dem Kunden die abgearbeiteten Anforderungen eines Sprints vorgestellt werden und Zusagen zur Abarbeitung von Aufgaben des nächsten Sprints
gemacht werden.
7.1.8
Sprint Retrospective
Nach dem öffentlichen Sprint Review mit dem Kunden findet ein Meeting der
Entwickler statt. Folgende Fragen sollen geklärt werden:
• Welche Ereignisse sind eingetreten?
• Was lief gut?
• Was ist verbesserungswürdig?
7.2
Erfahrungen mit Scrum
Wie schon vor der Implementierung im ersten Semester der Projektgruppe geplant, sollte die eigentliche Umsetzung des Energieinformationssystem mit Hilfe
von Scrum geschehen. Wie bereits im vorigen Abschnitt beschrieben, ist Scrum
eine agile Methode der Softwarentwicklung. Da die Projektgruppe von der Idee
angetan war, eine solche im Studium noch unbekannte und ungenutzte Softwarentwicklungsmethode zu nutzen, und auch die eigentliche Arbeitsweise im
152
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Scrum interessant fanden, entschied man sich, mit diesen Konzept bzw. mit
einer modifizierten Variante zu arbeiten.
Die hier beschriebenen Features unseres Projektes sind im Backlog in weitere
Aufgaben unterteilt. Um Scrum und die Features genauer und übersichtlicher
beschreiben zu können, werden diese unterteilten Aufgaben gruppiert. So werden
Items aus dem Backlog in dieser Beschreibung zusammengefasst. Zum Beispiel
werden die Aufgaben Kunden anlegen, Kunden löschen usw. zum Leistungsmerkmal Kunden zusammengefasst und beschrieben.
7.2.1
Eigene Umsetzung
Da für die Gruppenmitglieder feststand, dass man in einer Projektgruppe nicht
identisch zu einer wirklichen Softwareentwicklerfirma arbeiten kann — als Gründe sind hier zum Beispiel projektexterne Verpflichtungen, sei es zum Beispiel
durch die Universität und außeruniversitäre Arbeiten oder personelle und technische Kapazitäten, zu nennen — aber trotzdem versuchen sollte, sich so nah
wie möglich an eine solche Umgebung und Arbeitsweise zu orientieren, wurde
das Scrum Konzept so modifiziert, dass man unter den gegebenen Bedingungen sinnvoll mit den Ideen arbeiten konnte. Des Weiteren wurde stets versucht,
einen Softwareprozess in wirtschaftlicher Umgebung zu simulieren.
Im folgenden soll aufgeführt werden, wie die Projektgruppe sich die Arbeit
mit Scrum vorstellte und in der hier beschriebenen Dokumentation der Sprints
auch, wie sie im Prozess der Entwicklung stellenweise den Scrumprozess anpasste. Es bestand dabei nicht die Absicht, aus einem bestehenden Konzept ein
eigenes Softwareentwicklungsmodell zu erstellen, sondern eher nicht starr und
undynamisch an einer Idee zu hängen, die man so nicht in der Gruppe umsetzen
konnte. Gerade weil es sich bei Scrum um eine sehr agile Methode der Softwareentwicklung handelt, hielt die Projektgruppe diese Anpassung für sinnvoll.
7.2.2
Planen der Sprints und Sprint Review Meetings
Zuvorderst stand das Erstellen eines Planes, an dem man sich orientieren konnte, wieviel Zeit man zur Verfügung hat und welche Ziele in einer solchen Zeit
erreicht werden können. Ein Sprint im ursprünglichen Scrum ist für eine Woche
angesetzt, in der es tägliche Treffen gibt und an dessen Ende die aufgestellten
Features implementiert sein sollen bzw. eine Zusammenfassung über Geschafftes
und Offenes geliefert wird. Die Gruppe einigte sich darauf, diese Sprints an ihre
Situation anzupassen und den Zeitraum auf einen Monat zu verlängern. Das
hieß, dass im zweiten Semester des Projektes, dem Sommersemester 2006, vier
bis fünf Sprints aufgestellt und mit Features gefüllt werden konnten. Dementsprechend wurde ein Plan für diese Situation aufgestellt.
• Warm Up: 07.04.2006-14.04.2006 | Bevor mit dem eigentlichen Sprint angefangen wurde, sollten im sogenannten Warm Up erst noch offenstehende
organisatorische Dinge geklärt werden.
• Erster Sprint inklusive der Sprint Organisation: 14.04.2006-31.05.2006 |
Grobe Organisation der Sprints und der Aufstellung des ersten Sprints.
153
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 84: Terminplanung der einzelnen Scrums
• Zweiter Sprint: 31.05.2006-05.07.2006 | Sprint Review Meeting des ersten
Sprints und Aufstellung des zweiten Sprints.
• Dritter Sprint: 05.07.2006-02.08.2006 | Sprint Review Meeting des zweiten
Sprints und Aufstellung des dritten Sprints.
• Vierter Sprint: 02.08.2006-30.08.2006 | Sprint Review Meeting des dritten
Sprints und Aufstellung des vierten Sprints.
• Fünfter Sprint: 30.08.2006-13.09.2006 | Sprint Review Meeting des vierten
Sprints. Diskussion über die Nutzung und Aufstellung des fünften Sprints.
• Projektabschluss: 13.09.2006-20.09.2006 | Sprint Review Meeting des fünften Sprints. Abschließende Arbeiten an Dokumentation, Tests, Handbuch
und eventuellen noch offenen zu erledigenden Aufgaben
• Abschlussbericht: 20.09.2006-30.09.2006 | Finale Zusammenstellung des
Berichtes, Korrektur und lezte Formatierungen des Berichtes. Bestimmung
einer Person aus der Gruppe zur Präsentation des Projektes
7.3
Warm Up
Das Warm Up war dafür angedacht, einen möglichst reibungslosen Start in die
Arbeit mit den Sprints zu gewährleisten. Es sollte verhindert werden, dass viele Fragen zur Implementierung erst bei der eigentlichen Arbeit auftauchen. So
wurde als erstes noch einmal zusammengefasst, was bereits erledigt wurde, insbesondere im Zusammenhang mit dem Zwischenbericht und dem angetesten
Prototypen innerhalb der gewählten Entwicklungsumgebung. Zusätzlich wurden Tipps sowie Hilfen zur Installation, Benutzung der Entwicklungsumgebung
und Zusatzprogrammen gegeben. Hintergedanke war auch, alle Mitglieder der
Projektgruppe nach den Semesterferien wieder auf einen Stand zu bringen, um
die Motivation für alle zu erhalten und niemanden aus der Arbeit bzw. bestimmten Bereichen des Projektes auszuschließen. So sollte jeder wissen, mit welchen
Mitteln die eigentliche Programmierarbeit zu leisten ist und welche Schritte zu
tun sind, um gestellte Aufgaben bewältigen zu können. Aus eigener Erfahrung
ist zu sagen, dass es sehr frustrierend ist, wenn man bereits am Start scheinbar
unendlich viele Probleme bewältigen muss, um überhaupt den ersten Schritt in
Richtung der eigentlichen Implementierung gehen zu können. So wurde zum Beispiel von einigen Mitgliedern der Gruppe erläutert, wie man richtig mit der gewählten Entwicklungsumgebung arbeitet und beispielhaft einige Arbeitsschritte
vorgeführt.
154
EIS - Energie-Informationssystem
7.4
7.4.1
Projektgruppe Energie-Informationssyteme
Erster Sprint
Verlauf des ersten Sprints
Um sich mit dem ersten Sprint vertraut zu machen und da kein vorrausgegangenes Sprint Review Meeting von einem früheren Sprint bzw. ein Sprint selbst
vorlag, um in diesem bereits Aufgaben und sonstige Dinge zu verteilen, entschied sich die Projektgruppe dafür, den ersten Sprint zusammen mit der noch
dazugehörigen einmalig zu bestimmenden Organisation der Sprints von vier auf
sechs Wochen zu erweitern. Da auch noch das komplette Backlog, also den Pool
für alle gewünschten Features, mit den dazugehörigen Aufgaben erstellt werden
musste, wurde der Vorschlag der Sprintverlängerung übernommen.
Zu Beginn des ersten Sprints wurde ein Scrum-Master bestimmt, der die
Organisation der einzelnen Sprints übernehmen sollte. Der Scrum-Master musste unter anderem die von der Gruppe aufgestellten Features des Backlogs in
das dafür eingerichte Plugin von Visual Studio übertragen. So hatte die ganze
Gruppe eine Übersicht über alle Aufgaben, die zu bewältigen waren. Die Aufgaben wurden mit einer Priorität und einer teilweise mit einer eingeschätzten
Bearbeitungszeit versehen. Aus dem Backlog wurden nun für den ersten Sprint
die gewünschten Features ausgewählt.
Damit die Arbeit mit den Features gut funktionierte, wurden in den ersten
zwei Wochen des Sprints von den Teilnehmern einige Konzepte ausgearbeitet
und der Gruppe vorgestellt:
• Transaktionskonzepte definieren
• Logging definieren
• Tests definieren
• Benachrichtung bei Ergeignissen
• Sessionhandling definieren
• Form der Exceptions
• Datenbankanbindung
Sinn war es, allen Teilnehmern einen einheitlichen Zugang zu verschaffen, um
die gelösten Aufgaben nicht nur zu bewältigen, sondern die Ergebnisse konsistent und für die ganze Gruppe lesbar bzw. verständlich und nachvollziehbar zu
halten. Diese Konzepte wurden in einer Sitzung von den jeweiligen Verantwortlichen vorgetragen und anhand von Beispielen oder Definitionen erklärt, so dass
jeder auf dem Wissensstand war, diese Anleitungen auch umzusetzen.
Die Gruppe entschied sich danach, erst einmal die Stammdaten des Systems zu implementieren, zumal diese Daten relativ unabhängig von den jeweiligen anderen Features sind. Somit sollte das Grundgerüst geschaffen werden,
um dann später mit diesem weiter arbeiten und die folgenden, komplexeren
Features leichter umsetzen zu können. Es sollten also Benutzer, Lieferanten,
Kunden, Bilanzkreise und Regelzonen, Tarife und Lastprofile als zugängliche
Leistungsmerkmale nach diesem Sprint existieren. Für eine sinnvolle Nutzung
155
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
wurde dementsprechend die erste grobe Form der Nutzungsoberfläche gestaltet
(weitere Informationen dazu im Kapitel 4). So konnten die Stammdaten gleich
in eine zusammenhängende Umgebung gebracht werden, was einerseits eine gute
Übersicht bot, was das System bereits leistet, aber auch schon eine Vorschau
darauf ergab und erste Ideen weckte, wie die restlichen Features in das bereits
vorhandene Programm integriert werden konnten.
Die hier erwähnten Stammdatenfeatures lassen sich im Detail im Kapitel
Funktionen – Stammdaten nachlesen.
7.4.2
Probleme und Ereignisse im ersten Sprint
Während der Arbeit am ersten Sprint wurde die Struktur der Backlog Items
noch einmal überarbeitet, um sinnvoller mit diesen arbeiten und diese besser
verteilen zu können. Falls sinnvoll, wurde ein Feature auf die drei Entwicklungsebenen verteilt: Datenbank, Oberfläche und Logik. Zum einen hatte der
Scrum-Master dadurch eine bessere Übersicht, wie weit eine zusammenhängende Aufgabe bereits bearbeitet ist, und zum anderen konnten die Teilnehmer sich
in ihren Untergruppen effizienter aufteilen. Wie auch schon zuvor tauchten immer wieder Probleme mit der genutzten Entwicklungsumgebung auf. Einerseits
erfüllte das Plugin zur Organisation des Scrums nicht ganz die Ansprüche, die
die Gruppe daran gestellt hatte:
Backlog und Sprint Die Arbeit mit dem Backlog und den eigentlichen Sprints
wurde dadurch erschwert, dass zwischen diesen beiden Bereichen im Plugin keine direkte Verbindung besteht. Dass heißt, jedes Objekt aus dem
Backlog musste manuell im Sprint neu erstellt und größtenteils auch neu
beschrieben werden. Zum einen musste die Gruppe jetzt darauf achten,
die erhaltenen Aufgaben im Sprint zu bearbeiten und zusätzlich noch einige Einstellungen im Stammobjekt im Backlog zu tätigen. So musste zum
Beispiel der aktuelle Bearbeitungsstatus sowohl im Backlog als auch im
Sprint manuell umgestellt werden. Ein größeres Durcheinander wurde aber
dennoch vermieden, lediglich die Übersicht im Backlog ging mit der Zeit
immer wieder etwas verloren.
Integrierte Reports Die anfänglich als praktisch empfundenen Reports zur
Ausgabe von beispielsweise Sprintarbeitsstatistiken stellten sich im weiteren Verlauf als für die Gruppe unnütz heraus. Da kein Report manuell konfigurierbar ist und eine hohe Einarbeitungszeit für die Erstellung
von eigenen Reports kein vernünftiges Verhältnis zwischen Aufwand und
Ertrag versprach, wurden diese Reports nicht weiter genutzt. So wurde
beschlossen, im Endbericht eine Zusammenfassung in ähnlicher Form zu
gestalten.
Sprint- und Backlogitems Da die Projektgruppe die Reports nicht nutzen
wollte, hatten die tiefgreifenderen Beschreibungen der Items aus den Sprints
oder auch den Backlogs für uns ebenfalls keinen direkten Sinn, so dass man
sich darauf einigte, nur die nötigsten Informationen zu beschreiben. Da das
das Backlog gemeinsam erstellt worden war somit jeder auch Ahnung von
den einzelnen Features hatte, ergaben sich aus dieser Entscheidung auch
156
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
keine weiteren Probleme, zumal sich die Aufgabenmenge noch in überschaubaren Dimensionen befand.
Andererseits wurde die Gruppe von unerklärlichen Fehlermeldungen seitens Visual Studio befallen, die zwar keinen Einfluss auf unser Programm hatte, doch
einige Male an den Nerven der Gruppenmitglieder zerrte.
7.4.3
Review Meeting des ersten Sprints
Das Sprint Review Meeting gab uns die Möglichkeit, den Betreuern der Projektgruppe, wie in einer realen wirtschaftlichen Umgebung, unsere Ergebnisse
zu präsentieren und zusätzlich Verbesserungen und Anregungen einzuholen. Im
ersten Meeting kristallisierte sich schnell heraus, dass die doch umfangreiche
Aufgabenstellung zwar bewältigt worden war, aber trotzdem noch einige Fehler
im System vorhanden waren. Es wurde empfohlen, diese erst zu beheben, bevor man mit neuen Features weitermachen würde, da sich ein nicht beseitigter
Fehler in den anderen Aufgaben wahrscheinlich noch weiter ausbreiten würde.
Da die Gruppe eine Woche bereits als Puffer für unerwartete Ereignisse eingeplant hat, wurde der zweite Sprint entsprechend um eine Woche erweitert. In
der ersten Woche sollten also möglichst alle Fehler behoben werden, damit man
in der darauffolgenden Sprintwoche direkt am ursprünglich geplanten, zweiten
Sprint ansetzen konnte. In diesem Zusammenhang wurde auch festgelegt, die
Oberfläche während der Entwicklung genauer zu bearbeiten und einheitlich zu
gestalten, damit Fehler schon frühzeitig verringert werden können.
7.5
7.5.1
Zweiter Sprint
Verlauf des zweiten Sprints
In der anfänglichen groben Planung des Scrums war der zweite Sprint für die
Erstellung der Entscheidungsunterstützung und dazugehöriger Aufgaben angedacht. Der Sprint wurde jetzt um die Fehlersuche und Behebung erweitert. Wie
schon erwähnt, wurde der zweite Sprint um eine Woche verlängert, um das
Gerüst der Implementierung möglichst fehlerfrei zu halten.
Zu Beginn wurde aus dem ersten Sprint heraus eine Fehlerliste zusammengestellt, damit in der ersten Woche die Behebung schnell durchgeführt werden
konnte. In der ersten Sitzung wurden diese Fehler auf die Gruppe verteilt. Es
wurde also versucht, diese Liste abzuarbeiten. Am Ende dieser Woche hatte man
zwar einen Großteil der Fehler behoben, entschied sich aber dafür, zwei Personen
aus der Gruppe für eine weitere Fehlersuche abzustellen. So sollte die Gruppe
wie geplant an den noch aufzustellenden neuen Aufgaben arbeiten können, aber
auch die restlichen Fehler noch beseitigen und neue möglichst schnell beheben
können.
Als Hauptaufgaben wurden das Pluginsystem zum einen für die Lastprognosen und zum anderen für die Entscheidungsunterstützung (weitere Informationen siehe Abschnitt 4.2.1, Seite 36) und die rollenbasierte Sicherheit innerhalb
des Programmes bestimmt (weitere Informationen siehe Abschnitt 4.2.4, Seite
157
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
45). Zusätzlich sollten für die jeweiligen Pluginsysteme Algorithmen entwickelt
werden, die mit verschiedenen Zielsetzungen die Entscheidungsunterstützung
bzw. das Lastprognoseplugin lauffähig machen sollten. So wurde zum Beispiel
zuerst ein simpler Algorithmus entwickelt, der das Problem kurzsichtig und auf
einfachstem Wege löst, um das Gesamtsystem erst einmal testen zu können. Alle
folgenden Algorithmen sollten nach den Kriterien Geschwindigkeit und Optimalität verbessert werden.
Neben diesen Features wurden zusätzlich kleinere Aufgaben verteilt:
Systembeschreibung Jeder Verantwortliche einer Aufgabe im dafür eingerichteten Scrum- Verwaltungs-Plugin sollte, soweit dies möglich ist, das
entsprechende Feature schon für den Endbericht in grober Form beschreiben.
Oberfläche Alle Fenster sollten einer einheitlichen Vorlage entsprechen, so dass
neue Inhalte nach dieser Form erstellt und bereits bestehende an diese
Vorgaben angepasst werden konnten.
Script für Testzwecke Um das System sinnvoll testen zu können, wurden der
Datenbank Testdaten zugefügt. Gerade im Hinblick auf die Probleme im
ersten Scrum sollten solche oder ähnliche Fehler auch durch diese Daten
vermieden werden.
Exceptions definieren Da in der Gruppe die Behandlung von Exceptions
noch nicht eindeutig war, wurde hierzu abermals ein Konzept zur Umsetzung ausgearbeitet.
Diese wurden parallel zu den Hauptaufgaben bearbeitet, so dass es in der Gruppe eigentlich selten einen Leerlauf für eine Person gab, da immer eine kleine
Aufgabe zu erledigen war, wenn man an einem Hauptfeature zum Beispiel auf
Ergebnisse von Gruppenmitgliedern warten musste.
7.5.2
Probleme und Ereignisse im zweiten Sprint
Das Hauptproblem war sicherlich, dass man die Probleme aus dem ersten Sprint,
seien es nun Probleme mit der Entwicklungsumgebung oder mit Fehlern im eigenen Programm selbst, nicht wirklich für den zweiten Sprint eingeplant hatte,
soweit man das überhaupt tun kann. Auf jeden Fall war man nicht auf einen
holprigen Sprintverlauf vorbereitet. Und so musste man sich erst daran gewöhnen, offene Aufgaben nachträglich zu bewältigen, gleichzeitig aber auch die neuen Aufgaben nicht aus den Augen zu verlieren. So hatte die Gruppe auch die
Fehler an sich unterschätzt und dies in der ersten Woche abermals gemerkt, als
es hieß, diese erst einmal aus dem Wege zu schaffen. So fiel auf, dass Fehler
wieder neue Fehler nach sich ziehen und so eine Aufgabe leicht sehr zeitaufwendig werden lassen können. In der zweiten Woche hatte die Projektgruppe diese
Tatsache aber dennoch erkannt und die Aufgaben entsprechend angepasst, so
dass der zweite Sprint die gewünschten Ergebnisse lieferte.
158
EIS - Energie-Informationssystem
7.5.3
Projektgruppe Energie-Informationssyteme
Review Meeting zum zweiten Sprint
Im Meeting wurden einerseits die neuen Features vorgestellt und andererseits
die Arbeit an den Fehlern vorgeführt. Ergebnis war, dass der Großteil der Fehler ausgemerzt wurde und lediglich einige Unstimmigkeiten in der Validierung
herrschten. An den neuen Hauptfeatures fehlten noch einige Detailarbeiten, die
im dritten Sprint aufgearbeitet werden sollten. Dazu gehörten zum Beispiel die
Anpassung der Oberfläche oder der Erweiterung um einige aus dem Entwurf
vorgesehenen Optionen.
7.6
7.6.1
Dritter Sprint
Verlauf des dritten Sprints
Im Verlauf des dritten Sprints traten zum ersten Mal ernsthafte Probleme auf,
die man neben den neuen gestellten Aufgaben zu bewältigen hatte.
Zuerst einmal wurde nach dem Meeting festgelegt, dass in diesem Sprint die
vorgesehenen Features der EEX implementiert werden sollten (weitere Informationen siehe Abschnitt 5.2, Seite 88). Zusätzlich sollten die erstellten Features
aus dem zweiten Sprint abgeschlossen werden. Zum einen hieß dies, dass die
Kaufentscheidung um die eigentliche Umsetzung erweitert werden sollte. Außerdem sollte die Oberfläche nicht mehr nur einheitlich sein, sondern auch ein
an Windows ausgerichtetes Design erhalten.
Wie schon erwähnt, bemühte man sich intensiver um die Fehlersuche, dennoch nutzte die Gruppe die Validierung für die Nutzungsoberfläche noch zu
uneinheitlich und lückenhaft. So wurde ebenfalls die Aufgabe verteilt, eine einheitliche Validierungsfunktion zu erstellen bzw. die alte den Ansprüchen entsprechend anzupassen. So war ebenfalls gewährleistet, dass alle Oberflächeninhalte
einheitlich auf zum Beispiel falsche Eingaben reagieren.
Als erstes ernsthaftes Problem stellte sich die Testbarkeit der Multithreading-fähigkeit des Webservices unseres Programmes heraus. Da es nicht möglich
war, dies über Visual Studio nachzuweisen, wurden wir von den Betreuern gebeten, dies explizit vorzuweisen. Zum einen hieß dies, dass einige Teilnehmer der
Gruppe nicht für die eigentlich vorgesehenen Aufgaben zur Verfügung standen
und dass diese Analyse ein Mangel im Programm aufzeigen könnte. Es wurde
davon ausgegangen, dass unser Programm Multithreading unterstützt, ohne dies
wirklich überprüft zu haben. So wurde dieser vorzubringende Beweis ebenfalls
eine Aufgabe im dritten Sprint.
Das zweite Problem war, dass die strikte Trennung von Client und Server nicht eingehalten wurde. Dieser Missstand sollte ebenfalls in diesem Sprint
zusätzlich behoben werden, so dass nicht die volle Gruppenkapazität für die
eigentlichen Aufgaben bereit stand.
7.6.2
Probleme und Ereignisse im dritten Sprint
Da die Gruppe sich in diesem Sprint im Verhältnis zu den vorangegangenen
Sprints eine übersichtliche Anzahl an Aufgaben gestellt hatte, wurde das Problem der Arbeitsaufteilung hinsichtlich der Gruppenkapazität gut umgangen.
159
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
So hatte man nach der Verteilung der Hauptaufgaben immer noch genügend
Teilnehmer für die Behebung der eben genannten Mängel zur Verfügung. Die
Arbeitsteilung von Client und Server, bei der der Client die grafische Oberfläche
enthält und der Server die Berechnungen übernimmt, konnte bis auf eine Ausnahme gut umgesetzt werden, da das Problem und das Prinzip von der Gruppe
verstanden worden war. Die Ausnahme bildete das Pluginsystem. Hier war es in
einem ersten Anlauf nicht gelungen, die überaus komplexen Berechnungen auf
der Serverseite ablaufen zu lassen, da die vom Pluginsystem benötigten Interfaces sich nicht über den Webservice übertragen ließen. Dies widersprach aber
deutlich den Anforderungen an die oben geschilderte Arbeitsteilung. Da dieses
Problem aber nicht ohne großen Zeitaufwand zu beheben war, wurden erst einmal Lösungsvorschläge erarbeitet, die dann im vierten Sprint umgesetzt werden
sollten.
Das Problem der Multithreading-Fähigkeit wurde anfangs von der Gruppe
unterschätzt, da man sich sicher war, dass der Webservice dazu fähig wäre. Einen
soliden Beweis konnte man dennoch nicht liefern, so dass auch diese Aufgabe
im vierten Sprint erneut aufgenommen werden musste.
7.6.3
Review Meeting zum dritten Sprint
Im Meeting wurden kurz die wenigen neuen Features vorgestellt, das Hauptaugenmerk lag aber auf der Bewältigung und Diskussion der noch offenstehenden
Probleme. Zum einen wurde ein Konzept vorgestellt, mit dem sich das Problem
der Arbeitsteilung zwischen Client und Server beheben lassen sollte. Betreuer
und Gruppe einigten sich auf eine Bearbeitung innerhalb des vierten Sprints.
Bei dem noch ausstehenden Beweis hingegen wurde von den Betreuern auf eine
schnelle Bearbeitung gedrängt, da bei einem negativen Ergebnis — sprich einer
nicht vorhandenen Multithreading-Fähigkeit des Webservices — zu schließen
ist, dass die Arbeitsweise des Webservices ungenügend ist und eine Umstellung
viel Zeit kosten würde. Das hätte auch geheißen, dass der gesamte Zeitplan in
Gefahrg geraten wäre.
7.7
7.7.1
Vierter Sprint
Verlauf des vierten Sprints
Wie schon im zweiten Sprint kam in diesem Sprint eine unerwartet aufwändige
und eher schwierige Aufgabe hinzu. Diese war, den Beweis zu erbringen, dass
unser Webservice multithreading-fähig ist. Schwierig deshalb, weil in der Gruppe
noch keine Erfahrungen zu diesem Thema und insbesondere nicht im Zusammenhang mit Visual Studio existierten. Diese Aufgabe sollte also so schnell wie
möglich gelöst werden, d. h. nicht erst am Ende des vierten Sprints abgeschlossen
sein.
Trotz dieses Problems mussten die weiteren noch offenstehenden Aufgaben
erledigt werden. Da der vierte Sprint eigentlich der letzte Sprint sein sollte, in
dem neue Features eingebaut werden sollten, wurde eine intensive Sprintplanung durchgeführt. So wurden alle noch im Backlog existierenden Aufgaben
160
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
gesammelt und versucht, für die jeweiligen Aufgaben Zeiteinschätzungen anzugeben. Entsprechend der Priorität wurde dann entschieden, welche Features
noch bearbeitet werden sollten. Folgende Aufgaben wurden dem vierten Sprint
hinzugefügt:
Störungen: Weitere Informationen siehe Abschnitt 5.3.2, Seite 115
Druckoptionen
Fahrpläne: Weitere Informationen siehe Abschnitt 5.4, Seite 129
Informationen innerhalb der Oberfläche
Finale Oberflächenanpassung:
Umstellung des Pluginsystems: Weitere Informationen siehe Abschnitt 4.2.1,
Seite 36
Abschluss der Validierungsfunktionen: Weitere Informationen siehe Abschnitt
4.2.2, Seite 42
Erstaunlicherweise sind nur einige als optional gekennzeichnete Aufgaben aus
dem Backlog nicht in die Sprints mit eingeflosssen, was bedeutete, dass bei
einem erfolgreichen Abschluss des vierten Sprints die gestellten Aufgaben der
Gruppe bewältigt wären.
7.7.2
Probleme und Ereignisse im vierten Sprint
Das große Problem zu Beginn des Sprints, nämlich der noch zu liefernde Beweis,
konnte innerhalb der ersten Tage endgültig gelöst werden. Der Webservice ist
multithreading-fähig, jedoch kann man dies nicht direkt in der Entwicklungsumgebung nachweisen geschweige denn testen. Ein solcher Test ist anscheinend nur
über Lasttests möglich. Erst nach einigen Recherchen über Foren und Hilfestellungen zur Thematik sowie einer Anfrage an Microsoft konnte man zu diesem
Ergebnis gelangen, was selbst den Betreuer etwas verwunderte. In ihren Augen
eignet sich Microsoft Visual Studio wegen der fehlenden Testbarkeit nur bedingt für die Entwicklung von Client-Server-Anwendungen. Zur Erleichterung
der Gruppe wurde das Problem von den Betreuern als gelöst betrachtet und die
noch ausstehenden Aufgaben konnten angegangen werden.
Ebenfalls gelöst wurde das Problem der Pluginumstellung. Diese arbeitet
jetzt serverseitig und nicht wie zunächst implementiert clientseitig (weitere Informationen im Abschnitt 4.3, Seite 49).
Ein kleines weiteres Problem war die Urlaubsthematik in der Gruppe. Da
ein nicht unerheblicher Teil im vierten Sprint Urlaub eingereicht hatte, musste
die Planung der Aufgaben entsprechend präzise erfolgen. Dies wurde dann auch
dementsprechend gemacht, so dass die gestellten Aufgaben dieses Sprints zum
Großteil gelöst werden konnten. Wie immer am Ende eines Sprints fehlten zu den
einzelnen Aufgaben noch Details bzw. traten Fehler auf, die dann im folgenden
Sprint behoben bzw. bearbeitet werden sollten. Da der letzte Sprint als reiner
Dokumentations-, Test- und Sprint zur Fehlerbehebung angedacht war, konnte
man die letzten offenstehenden Verbesserungen ohne Probleme in den Verlauf
des Scrumprozesses mit einbeziehen.
161
EIS - Energie-Informationssystem
7.7.3
Projektgruppe Energie-Informationssyteme
Review Meeting zum vierten Sprint
Im Meeting wurden wie gewohnt alle erstellten Features vorgestellt und im Anschluss der neue Sprint geplant. Hauptaugenmerk lag also auf der Vervollständigung der Dokumentation, dem Testen des Programmes und dazugehörigen Komponenten, entsprechende Fehlerbehebung und dem Schreiben des Abschlussberichtes.
Zum einen sollten Datenbankzugriffe getestet, Systemtests, Installationstests, Lasttests und Webservice-Tests durchgeführt werden (weitere Informationen in Kapitel 6, Seite 139). So sollten alle Bereiche abgedeckt werden.
7.8
7.8.1
Fünfter Sprint
Verlauf des 5. Sprints
Da in diesem Sprint nur noch stellenweise am Programm selbst gearbeitet wurde
(z. B. abschließende Arbeiten an der GUI und letzte Optimierungen an den Plugins), konnten die Tests konsequent im vorhandenen Zeitraum entwickelt werden.
Bei der Dokumentation traten wie erwartet keine weiteren Schwierigkeiten auf,
ebenso beim Schreiben der ersten Kapitel des Endberichtes. Die schwierigen und
komplexeren Arbeiten am Endbericht sollten nach dem fünften Sprint starten.
7.8.2
Probleme und Ereignisse im fünften Sprint
Das Pluginsystem war zwar bereits entsprechend den Vorgaben der Betreuer
überarbeitet worden und arbeitete nun serverseitig, allerdings haperte es noch
an der Einbindung der generischen Benutzeroberflächen ins übrige Programm.
Die Arbeiten an diesem — im Vergleich zur Umstellung der Arbeitsweise kleinen — Problem wurden als Spezialfall im Scrum vermerkt, da sie auch noch
nach dem vierten und fünften Sprint fortgesetzt wurden. An dieser Stelle wurde
vom eigentlich Plan abgewichen, keine weiteren Features bzw. Aufgaben im Programm nach dem fünften Sprint zu tätigen. Für die Endfassung des Programms
musste dieses Leistungsmerkmal aber auf jeden Fall enthalten sein und wurde
auch als noch schaffbar und sinnvoll eingestuft. So sollte die Einbindung des
Pluginsystems auf jeden Fall so lange weiterentwickelt werden, wie es die Zeit
zuließ.
7.8.3
Review Meeting zum fünften Sprint
Das letzte Meeting war sehr kurz und es wurde nur einmal kurz besprochen,
was geschafft wurde und was noch an Aufgaben offenstand. Dazu gehörten noch
einige kleine Fehler bei der Installation, die noch behoben werden mussten und
weitere Restarbeiten, die im folgenden Kapitel beschrieben werden.
7.9
Abschlussarbeiten und Organisation
Zu diesem Zeitpunkt wollte man eigentlich nur noch am Endbericht schreiben
und keine weiteren Arbeiten am Programm oder den dazugehörigen Komponenten tätigen. Da aber noch einige Tests, Oberflächenarbeiten, Behebung kleinerer
162
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Programmfehler und der Abschluss der Einbindung des Plugins anstanden, wurde selbstverständlich an diesen Punkten weitergearbeitet. Die Gruppe war davon
überzeugt, beides gleichzeitig fortführen zu können, um ein solides Endprodukt
abzuliefern. Der Zeitaufwand in jenen Tagen wurde dementsprechend hoch, wie
schon in den Wochen davor, um ein Projekt mit dem gewünschtem Ergebnis
abliefern zu können.
Ein persönliches Gruppenfazit zu Scrum an sich und der Arbeit damit findet
sich in Kapitel sec:fazit.
163
EIS - Energie-Informationssystem
8
Projektgruppe Energie-Informationssyteme
Fazit
Die Arbeit in der Projektgruppe hat sich in mehreren Ebenen abgespielt, weshalb sich das Fazit auch in verschiedene Kapitel teilt.
8.1
Allgemeines Fazit
Nach der Fertigstellung des Projekts kann der Schluss gezogen werden, dass
die entwickelte Software bereits eine solide Grundlage für eine kommerzielle
Weiterentwicklung darstellt. Insbesondere die zum Datenaustausch eingesetzten Formate (Fahrpläne, EEX-Handel), aber auch die intern eingesetzten Datenstrukturen (Lastprofile, Regelzonen etc.) entsprechen den aktuellen industriellen Standards und enthalten somit alle Informationen, die Akteure auf dem
realen Energiemarkt benötigen, um mit Energie zu handeln und ihre Kunden
zu versorgen. Hier hat sich die anfängliche Einarbeitung in die Thematik Ener”
giewirtschaft“ bezahlt gemacht. Auch die übrigen Leistungsmerkmale wie die
Client-Server-Architektur, die Mehrbenutzerfähigkeit, die Austauschbarkeit verschiedener Programmteile und ganz besonders das überaus flexible System zur
Entscheidungsunterstützung bei Lastprognosen und Kaufempfehlungen erfüllen
wesentliche Anforderungen, die ein Energiehändler an ein Programm zur Hilfe
bei seinen Aktivitäten auf dem Strommarkt stellen kann.
8.2
Thematik Energieinformationssysteme
Die Arbeit an dem eigentlichen Thema Energieinformationssysteme war für die
Teilnehmer im ersten Semester mit Sicherheit informativ und interessant, zumal
man sich in dieser Projektgruppe sehr detailliert in diesen Bereich einarbeiten
musste, um sinnvoll ein eigenes Thema zu konstruieren. Gerade aus diesem
Grund ist es eigentlich schade, dass im zweiten Semester die Auseinandersetzung mit dem Thema im Prinzip immer weiter in den Hintergrund gerückt ist
und Dinge wie Implementierungsschwierigkeiten, Softwarearchitektur, Algorithmenwahl usw. in den Vordergrund gerückt sind. Dieser Umschwung ist wahrscheinlich nicht zu vermeiden, da natürlich ein großer Teil an Programmierarbeit
geleistet werden muss und man nicht die ganze Zeit über die Energiethematik
referieren und konzipieren kann, so dass am Ende kein wirkliches Produkt ensteht. Vielleicht wäre aber ein erneuter Bezug zum Thema zur Mitte des zweiten
Semesters interessant gewesen. Zum Beispiel hätte man als Projektgruppe einem
Außenstehenden ein paar Ergebnisse präsentieren können. Wahrscheinlich wäre
es dann zu spät gewesen, Anregungen oder Verbesserungen noch umzusetzen,
aber eventuell hätte eine externe Meinung die Energiethematik in der Gruppe
noch einmal neu aufleben lassen, da man am Ende des Scrums doch des öfteren
nur noch Sprintitems und das Backlog im Kopf hatte.
In diesem Zusammenhang stellte sich besonders die Findung eines eigenen
Projektes für die Gruppe im nachhinein als eine erfahrungsreiche Aufgabe heraus. Da noch niemand wirkliche Erfahrung mit einer solchen Aufgabe hatte, waren die ständigen Zweifel und Nachfragen bei den Betreuern, ob wir überhaupt
ein angemessenes Konzept erstellt haben, sicherlich verständlich. Abschließend
164
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
kann man aber sagen, dass gerade das Finden eines eigenen Themas eine Projektgruppe in dem Sinne weiterbringt, dass man nicht nur einen Teil einer Thematik betrachtet, sondern viele Seiten in Augenschein nimmt. So wächst ganz
automatisch das Verständnis für ein Thema, weil man nicht nur den Blick auf
ein vorgegebenes Projekt gerichtet hat, sondern viele Faktoren beachtet werden
müssen. Dieser Rundumblick wurde bei uns zusätzlich noch durch die weit gefächerten Themen unserer Seminarphase erweitert, so dass die ganze Gruppe
voll im Thema integriert war. Diese Vorarbeit war mit Sicherheit eine hilfreiche
Erfahrung, wie man bestimmte Probleme oder Aufgaben in Zukunft angehen
kann.
8.3
Umsetzung des Entwurfs
Die Umsetzung des Entwurfs lässt sich insgesamt als sehr erfreulich und gradlinig beurteilen. In Kapitel 2.1 werden die Unterschiede zwischen Entwurf und
Umsetzung dargestellt. Hierbei werden nur sehr geringe Abweichungen aufgelistet, was für eine sehr gute konzeptionelle Vorarbeit und Disziplin innerhalb
der Projektgruppe spricht. Es konnten alle als essentiell hervorgehobenen Leistungsmerkmale implementiert werden sowie einige weitere, nützliche Features.
Insbesondere hervorzuheben ist, dass die bei der Umsetzung dieser Features
keine Vereinfachungen gegenüber der realen Welt vorgenommen wurden, um
Probleme zu umgehen oder Arbeit zu sparen. Daher lässt sich abschließend zur
Umsetzung sagen, dass die Projektgruppe EIS“ die selbstgesteckten Ziele er”
reicht hat.
8.4
Implementierung des Programms
In Kapitel 4 wurden bereits die eingesetzten Technologien, Konzepte und Arbeitsweisen vorgestellt. Die Entscheidung, auf Microsoft basierende Lösungen
einzusetzen, erwies sich im Verlauf der Implementierung als vorteilhaft. Es konnte auf eine Vielzahl produktiver Werkzeuge zurückgegriffen werden, die die Umsetzung des Programms deutlich erleichterten. Als Beispiel sei hier der GUIDesigner in der Visual-Studio-Entwicklungsumgebung genannt. Auch die einfache Anbindung des Microsoft SQL Server 2005 an das Programm bestätigte die
Auswahl, eine Lösung aus einem Guss“ zu verwenden.
”
Es soll natürlich nicht verschwiegen werden, dass während der Implementierung auch viele Schwierigkeiten und Probleme auftraten. Eine anscheinend
nicht ganz auf den Gesetzen der Logik basierende Versionsverwaltung der Team
”
Edition“ ließ so manchen Zweifel aufkommen. Die Tatsache, dass jedes dieser
Probleme letztlich gehandhabt werden konnte, spricht jedoch wieder für unsere
Entscheidung.
Dem Umstand, dass für die meisten Mitglieder der Projektgruppe die Entwicklungswelt von Microsoft sowie die Programmiersprache C# völliges Neuland
waren, läßt sich positiv entnehmen, hier neue Erfahrungen und Fähigkeiten gewonnen zu haben. Aus dieser Sicht war es besonders vorteilhaft, die jeweils
aktuellsten Versionen einzusetzen, etwa .NET 2.0, SQL Server 2005 oder Visual
Studio 2005. So merkte man auch, dass .NET ausgereifter zu sein scheint als das
165
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
über die Jahre gewachsenes Java. Aber auch mit .NET und C# zu programmieren hat — wie eigentlich jede Entscheidung — seine Vor- und Nachteile. So
stellte man beim Programmieren fest, dass die Dokumentation bei Java wiederum intuitiver und leichter bedienbar war. Helfen konnte man sich aber durch die
doch sehr große Gemeinschaft um .NET, Microsoft und Co., die einen an den
meisten Stellen durch zahlreiche Foren und Anleitungen weitergebracht hat.
Auch wenn die Implementierung nicht immer glatt lief und zwischenzeitlich
manchen Nerv etwas überstrapaziert hat, so zeigt jedoch die Tatsache, dass alle geforderten Features erfolgreich integriert werden konnten, dass die einzelnen
Mitglieder in der Lage sind, eigenständig Probleme zu lösen und sich nicht durch
gelegentliche Rückschläge von einem einmal eingeschlagenen Weg abbringen lassen.
Würde man vor die Wahl gestellt werden, ob man sich bei einem erneuten Projekt noch einmal für die selben Mittel und Wege entscheiden würde,
so sprechen am Ende dieses Projektes selbstverständlich immer Dinge für und
gegen eine erneute Benutzung. So war einerseits der Einstieg in .NET und C#
sehr komfortabel, einige Arbeitsschritte aber widerum sehr ungewöhnlich und
manchmal auch umständlich. Vor allem das aufgetretene Problem im Bereich
des Multithreading und insebesondere die Tests, um es zu beseitigen, lassen daran zweifeln, dass man eine große Serveranwendung ohne weiteres und in einem
solchen Projektgruppenrahmen im Visual Studio entwickeln kann. So müsste
man vorher sicherstellen, dass man zum Beispiel durch einen Drittanbieter alle
Bereiche des Multithreadings ausgiebig testen kann, wenn dies nicht in Visual
Studio so möglich ist, wie man es individuell erwartet. Dennoch möchte man
die gewonnenen Erfahrung mit der gewählten Umgebung nicht missen und ist
einer erneuten Nutzung nicht abgeneigt, besonders da man jetzt mehrere Seiten
kennt und aus dieser Erfahrung heraus vor und Nachteile entsprechend abwiegen
kann.
8.5
Arbeit als Projektgruppe
Die Gruppe hatte das Glück, aus wirklich sehr umgänglichen Charakteren zusammengesetzt worden zu sein. Die Stimmung in der Gruppe war eigentlich nie
wirklich negativ, was sich natürlich auch auf die Arbeit an sich auswirkt, da selten Spannungen herschten, die das Arbeitsklima geschädigt hätten. Sicherlich
wäre es für eine Projektgruppe interessant gewesen, wenn sie intern persönliche
Konflikte hätte bewältigen müssen und nicht nur Probleme programmiertechnischer Natur, zumal im wahren Leben vermutlich ebenfalls nicht immer ein
reibungloses Klima herschen wird. Dieses Fehlen hat aber niemanden wirklich
gestört, so dass die Arbeit in der Gruppe dennoch viel Erfahrung und auch dem
einen oder anderen Spaß einbrachte.
Einige dieser Erfahrungen konnte man schon im Softwarprojekt sammeln,
doch ist sicherlich allen aufgefallen, dass die Arbeit in der Projektgruppe sich
in wesentlichen Bereichen davon unterscheidet. Wie schön erwähnt, wäre da die
Themenfindung zu nennen, die völlig selbstverantwortliche Zeiteinteilung oder
auch die selbständige Wahl von Vorgehensweisen, Definitionen, Entwicklungsumgebungen usw. Aber gerade diese eigene Verantwortung im Projekt hat einen
Großteil der gewonnenen Erfahrung ausgemacht.
166
EIS - Energie-Informationssystem
8.6
Projektgruppe Energie-Informationssyteme
Die Arbeit mit Scrum
Die Entscheidung, mit einem alternativen Entwicklungsmodell zu arbeiten, war
vielleicht riskant, da man im Studium dem Konzept Scrum noch nicht begegnet war, aber am Ende dieser Projektgruppe darf man wohl sagen, dass dieses
Modell sehr gut mit unserer Gruppe harmonierte.
Zum einen ist das Backlog eine gute Methode gewesen, um die Aufgaben
im Überblick zu behalten, zum anderen gab es aber auch eine Möglichkeit das
Projekt um neue, unerkannte Aufgaben zu erweitern und auf neue Ereignisse
entsprechend zu reagieren.
Die Aufteilung des Semesters in die jeweiligen Sprints gab ebenfalls immer
eine gute Orientierung und man konnte in etwa einschätzen, welche neuen Aufgaben noch hinzugefügt werden können und welche optionalen Aufgaben nicht
mehr mit aufgenommen werden sollten.
Durch die Sprint-Review-Meetings war man des Weiteren motiviert, den Betreuern jeden Monat etwas Neues zu zeigen und das Projekt voranzutreiben.
Die Gruppe hatte so auch die Möglichkeit, sich jederzeit Verbesserungsvorschläge und Wünsche der Betreuer einzuholen und diese direkt im nächsten Sprint
umzusetzen.
Nach dem ersten Sprint hatte die Gruppe im Prinzip immer eine lauffähige
Version des Projektes zur Verfügung, so dass einerseits die Gruppe immer eine Orientierung innerhalb der Sprints hatte und andererseits die Betreuer sich
Informationen über den aktuellen Entwicklungsstand einholen und der Gruppe
weitere Hinweise und Anmerkungen geben konnten.
8.7
Ausblick
Auf Basis der Projektergebnisse wäre es nur logisch, das bestehende Programm
zu einem kommerziellen Energieinformationssystem weiterzuentwickeln. Die Erfassung der Basisdaten ist aus Sicht der Projektgruppe bereits gegeben. Die
fehlenden Leistungsmerkmale, die man von einem kommerziellen System erwarten würde, betreffen in erster Linie abwicklungstechnische Aspekte. Hierzu zählt
beispielsweise ein Rechnungswesen, das automatisch Kundenrechnungen erstellt,
Abbuchungen vornimmt oder Finanzbilanzen erstellt. Darüber hinaus wäre eine
direkte Anbindung an die EEX über eine digitale Schnittstelle anstatt der bisherigen Faxverschickung wünschenswert, um einen reibungsloseren Handel an der
Strombörse zu ermöglichen. Dies ermöglichte auch eine bessere Erstellung von
Kaufempfehlungen, so dass Vorschläge und Entscheidungen anhand einer größeren Datenbasis getroffen werden könnten. Denkbar wäre auch eine verbesserte
Integration von Stromlieferanten, denen man eine direktere Anbindung an das
eigene System über den Webservice bereitstellt, um etwa Angebote unmittelbar in den Datenbestand einzuspeisen. Zusammenfassend lässt sich sagen, dass
mit dem Energieinformationssystem der Projektgruppe eine solide Grundlage
für Energieunternehmen geschaffen wurde, auf der sowohl individuelle als auch
allgemeinere Lösungen entwickelt werden können.
Anbei eine Liste mit möglichen neuen Leistungsmerkmalen, entstanden aus
den vorangegangenen Überlegungen, die man zum Beispiel auf weitere Sprints
innerhalb eines Scrum-Prozesses aufteilen könnte:
167
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Externe Anbindung: Öffentliche Schnittstelle für Stromlieferanten zur Angabe
von Angeboten: So wäre es im Programm möglich, nicht mehr nur durch
manuelle Eingabe, sondern automatisiert und damit arbeitssprarend und
in Echtzeit Angebote anderer Stromhändler zu erfassen.
Verwaltung der Stammdaten: Erweiterte Stammdatenverwaltung z. B. für Erinnerungen an den Benutzer bei wichtigen Ereignissen wie Neuerichtung
von Bilanzkreisen, Tarifumstellung usw.: Dadurch würde verhindert, dass
der Systemnutzer wichtige Geschehnisse in seinem Verantwortungsbereich
nicht bemerkt, wodurch dem Energiehändler Schaden entstehen könnte.
Weboberfläche: Erstellung einer webbasierten GUI: Durch dieses Feature wäre
es nicht mehr nur möglich, das Programm über die vorgegebene Oberfläche, sondern über einen normalen Webbrowser zu nutzen.
Algorithmen zur Kaufempfehlung und Lastprognose: Zusätzliche, mitgelieferte Algorithmen, die nach anderen Maßgaben arbeiten: Man würde dem
Benutzer weitere Algorithem liefern oder alte austauschen, um etwa die
Kaufempfehlung noch zu optimieren und diesen Prozess in der Laufzeit
schneller zu gestalten. So könnte man auch überlegen, ein Update zu liefern, welches einem nach einem bestimmten Zeitraum immer die neuesten
Algorithmen für das Programm zur Verfügung stellt.
Erweiterung der Benutzertypen: Neue Rollen bzw. neue Möglichkeiten zur Rollenverwaltung integrieren: Kunden des Programms könnten hier die individuellen Berechtigungen für die Nutzer selbst konfigurieren.
Energiebörse EEX: Erweiterte Anbindung an den kostenpflichtigen Service der
EEX: Durch dieses Feature fiele die bisher umständliche, aber derzeit nicht
anders mögilche Nutzung der EEX weg, und zusätzlich würde die Interaktion mit ihr beschleunigt.
Lokalisierung: Übersetzung des Programms in andere weitverbreitete Sprachen
wie Englisch oder Französisch: Somit wäre das Programm nicht mehr nur
in der deutschen Sprache verfasst, und man könnte einen internationalen
Kundenstamm aufbauen.
Erweiterte Benutzbarkeit: Anpassung der Oberfläche und Bedienung an Standards der Usability und des barrierefreien Zugangs: Indem möglichst wenige die Benutzung des Program als schwierig empfinden und niemand
gänzlich aufgrund von Behinderungen von der Nutzung ausgeschlossen
wird, erhöht sich die Akzeptanz des Programms ebenfalls.
168
EIS - Energie-Informationssystem
9
Projektgruppe Energie-Informationssyteme
Benutzerhandbuch
9.1
Willkommen
Vielen Dank, dass sie sich für unser Produkt EIS entschieden haben. Dieses
Handbuch soll Ihnen den Einstieg in das Programm erleichtern und Hilfestellungen geben, falls Sie einmal nicht weiter kommen.
Ihr EIS-Team
9.2
9.2.1
Systemvorausetzungen
Hardware
Für den Betrieb des Energieinformationssystems EIS sind folgende Systemvorraussetzungen empfohlen:
• Prozessor mit mind. 2 GHz Taktung
• 1 GB Hauptspeicher (für die Serverkomponente möglichst 2 GB)
• 500 MB Festplattenplatz (für den Server mit Datenbank entsprechend
mehr)
9.2.2
Betriebsystem
Als Betriebssystem werden folgende Plattformen untersützt:
Clientanwendung:
• Windows XP oder höher.
• installiertes .NET-2.0-Framework
Server:
• Windows 2003 Server oder höher.
• installiertes .NET-2.0-Framework
• installierter Internet Information Server
9.2.3
Datenbank
• Microsoft SQL Server 2005 oder
• Microsoft SQL Server 2005 Express
169
EIS - Energie-Informationssystem
9.3
Projektgruppe Energie-Informationssyteme
Installation
In diesem Kapitel werden die Schritte erklärt, die nötig sind um eine neue Installation von EIS in Betrieb zu nehmen. Diese Schritte müssen vom Systemadministrator vorgenommen werden.
9.3.1
Installation der Serverkomponenten
Legen Sie die DVD–ROM in das DVD–ROM–Laufwerk ein. Wenn der Autostart
nicht deaktiviert wurde, wird automatisch ein Fenster geladen, in dem Sie auf
“Server-Komponenten“ klicken müssen. Daraufhin startet das Installationsprogramm für die Severkomponenten. Hier werden Sie aufgefordert, einen Namen
für das virtuelle Verzeichnis im Internet Information Server anzugeben. Diesen
Namen müssen Sie sich merken, da er für die Konfiguration der Clientanwendung benötigt wird.
9.3.2
Datenbank aufsetzen
Im Anschluss an die Serverinstallation muss die Datenbank eingerichtet werden.
Dazu benötigen Sie einen Server mit installiertem SQL Server 2005. Dies kann
auch derselbe Server sein, auf dem auch der IIS läuft. Um Hilfe für die Installation des MS SQL Server zu erhalten, konsultieren Sie die Dokumentation des
SQL-Servers. Dabei ist es wichtig, dass Sie für die Anmeldung am SQL-Server
den so genannten Mixed Mode erlauben. Näheres dazu finden sie ebenfalls in
der SQL-Server-Dokumentation. Nachdem Sie den Datenbankserver erfolgreich
installiert haben, müssen Sie die mitgelieferte Datenbankdatei zum Server hinzufügen. Dazu benötigen Sie das SQL Server Management Studio, welches frei
verfügbar ist und auf den Internetseiten von Microsoft heruntergeladen werden
kann. Im Folgenden wird beschrieben, wie Sie die mitgelieferte Grunddatenbank
mithilfe des SQL Management Studios installieren können.
Starten Sie zunächst das SQL Server Management Studio. Nachdem Sie sich
erfolgreich an Ihrem Server angemeldet haben, klicken Sie im Objektexplorer
mit der rechten Maustaste auf den Eintrag Databases (siehe Abbildung 85).
170
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 85: SQL Server Management Studio
Durch den Klick auf Attach ... öffnet sich ein weiteres Fenster (siehe Abbildung 86),
in dem Sie zunächst auf Add ... klicken müssen. Daraufhin erscheint ein Dateibrowser, mit dessen Hilfe Sie die Datei ”EISDB.mdf” auswählen. Diese Datei
befindet sich in dem Ordner, in welchem Sie die Serverkomponenten der EISSoftware installiert haben (Üblicherweise c:/inetpub/wwwroot/SetupServer).
Die Datei wird jetzt in der Liste “Databases to attach“ angezeigt. Klicken Sie
nun auf OK, um den Vorgang abzuschliessen. Die Datenbank ist nun installiert!
Versichern Sie sich, dass der Nutzer angelegt wurde!
Wenn der Datenbankserver und der Webserver auf verschiedenen Rechnern
installiert sind, muss der Datenbankserver so konfiguriert werden, dass das TCPProtokoll genutzt wird. Um das TCP-Protokoll zu aktivieren, starten Sie den
SQL Server Configuration Manager. Im Unterpunkt SQL Native Client Configuration / Client Protocols müssen Sie das TCP/IP-Protokoll aktivieren. Bitte
beachten Sie, dass für die Nutzung des Protokolls der dazu jeweilige Port (Standard ist 1433) in Ihrer Firewallsoftware freigeschaltet werden muss. Konsultieren
Sie dazu die Hilfe oder Dokumentation Ihrer Firewallsoftware oder wenden Sie
sich an Ihren Systemadministrator.
171
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 86: SQL Server Management Studio - Datenbankdatei auswählen
9.3.3
Konfiguration der Datenbankverbindung
Um die Verbindung des EIS-Servers zur Datenbank zu erstellen, starten Sie unter Systemsteuerung / Verwaltung den Internet-Informationsdienste-Manager.
Wählen Sie das virtuelle Verzeichnis aus, das Sie bei der Serverinstalltion angegeben haben und klicken Sie mit der rechten Maustaste auf den Eintrag “Eigenschaften“. Auf der Karteikarte “ASP.NET“ wählen Sie bitte unter ASP.NETVersion den Eintrag mit der Versionsnummer 2 aus. Klicken Sie dann auf die
Schaltfläche Konfiguration bearbeiten .... Daraufhin wird ein neues Fenster geöffnet. Hier müssen Sie nun die Verbindungszeichenfolge “EISSQLSERVER“ bearbeiten. Tragen Sie hier eine gültige Zeichenfolge für die Verbindung zu Ihrem
Datenbankserver ein. Beachten Sie bitte, dass Sie einem neu angelegten Datenbanknutzer auch die entsprechenden Rechte an der EISDB erteilen, siehe dazu
Abbildung 87.
9.3.4
EEX-Marktdaten aktualisieren
Nachdem Sie die Datenbankkonfiguration abgeschlossen haben, führen Sie die
Verknüpfung ”EEX-Marktdaten aktualisieren” auf dem Desktop des Servers aus.
Dies ist nur einmal nach der Installation nötig. Wählen Sie die Option ”Alle
172
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 87: Vergabe der Benutzerrechte
Marktdaten aktualisieren” und klicken Sie auf ”Ausführen” (siehe Abbildung 88.
Ohne diesen Schritt sind die EEX Funktionen des EIS nicht verfügbar.
9.3.5
Installation der Clientanwendung
Legen Sie die DVD–ROM in das DVD–ROM–Laufwerk ein. Wenn der Autostart
nicht deaktiviert wurde, wird automatisch ein Fenster geladen, in dem Sie auf
“Client-Komponenten“ klicken müssen. Daraufhin startet das Installationsprogramm für die Clientanwendung. Folgen Sie den Anweisungen auf dem Bildschirm, um den Client zu installieren. Beim ersten Start der Clientanwendung
wird der Nuzer aufgefordert, die URL zum EIS-Server anzugeben. Diese muss
mit dem Präfix “http://“, gefolgt vom Servernamen und nach einem Doppelpunkt der Portnummer des Webservers (Standard ist 80), angegeben werden.
Nach einem weiteren Schrägstrich geben Sie den unter der Serverinstallation
festgelegten Namen gefolgt von “/Service.asmx“ an.
173
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 88: Auswahlfenster zum Aktualisieren der EEX Marktdaten
9.4
9.4.1
Erste Schritte
Programm starten
Öffnen Sie das EIS–Symbol auf dem Desktop oder starten Sie die Verknüpfung
im Windows–Startmenü.
9.4.2
Serveradresse angeben
Beim ersten Start des Programms werden Sie nach der URL des Webservice auf
der Serverseite gefragt. Geben Sie die entsprechende URL an und klicken Sie
auf ”Speichern”. Diese Abfrage ist einmalig.
9.4.3
Einloggen
Allgemeine Hinweise zum Loginfenster: Um sich am Programm anzumelden,
müssen Sie einen Benutzernamen und ein Passwort im Loginfenster eingeben.
Diese Daten erhalten Sie bei Ihrem Systemadministrator. Um sich einzuloggen,
geben Sie ihren Benutzernamen und ihr entsprechendes Passwort ein und klicken
Sie auf ”Anmelden”. Um den Vorgang abzubrechen, klicken Sie auf ”Abbrechen”.
9.4.4
Administratorpasswort ändern
Loggen Sie sich mit dem Benutzernamen ”admin” ein. Das Passwort lautet ebenfalls ”admin” (ohne Anführungszeichen). Wählen Sie aus dem Menü den Punkt
”Systemnutzer”. Wählen Sie dann das Admin-Konto aus, und klicken Sie die
174
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Schaltfläche ”Bearbeiten”. Ändern Sie die Daten wie gewünscht. Besonderes
Augenmerk gilt hier dem Passwort des Administratorkontos. Geben Sie unter
”Passwort” Ihr neues Kontopasswort ein, bestätigen Sie es noch einmal in dem
Feld darunter. Nach erfolgter Eingabe klicken Sie ”Speichern”, um die Änderungen zu übernehmen.
Nun wird es Zeit, einige Nutzer anzulegen, die für die einzelnen Funktionen
des Programms Zugriffsrechte haben.
9.4.5
Benutzer anlegen
Legen Sie Benutzer mit den jeweiligen Rollen an. Genauere Informationen zu
der Erstellung von Systemnutzern und verschiedenen Rollen (Rechten), die ein
Systemnutzer haben kann, finden Sie im Abschnitt Systemnutzer“.
”
175
EIS - Energie-Informationssystem
9.5
Projektgruppe Energie-Informationssyteme
Der Startbildschirm
Abbildung 89: Die Startoberfläche des Programms
Nach dem Einloggen sehen Sie als erstes den Starbildschirm, Abbildung 89,
des EIS. Hier finden Sie eine Übersicht über die wichtigsten Daten, Termine und
Vorfälle, die das EIS betreffen. Im Bereich ”Überblick” finden Sie oben eine Liste
der aktuellen Störungen. Darunter eine Liste mit in weniger als einem Monat
auslaufenden Kundenverträgen und widerrum darunter eine Liste mit bald auslaufenden Lieferverträgen. Auf der rechten Seite finden Sie ein Tortendiagramm,
welches die prozentuale Verteilung der Tarife verdeutlicht.
Direkt unter dem überlick finden Sie das sog. ToDo Panel.
176
EIS - Energie-Informationssystem
9.6
Projektgruppe Energie-Informationssyteme
Das ToDo-Panel
Im ToDo-Panel, siehe Abbildung 90, können Sie ihre persönlichen Aufgaben und
Notizen verwalten. Klicken Sie ”Anlegen” um eine neue Aufgabe anzulegen.
Abbildung 90: Hier geben Sie die Daten in die ToDo-Liste ein
Füllen Sie die Felder aus. Als Code können Sie eine bliebige Zeichengfolge
(bis zu 10 Stellen) wählen, die Ihnen später das wiederfinden erleichtert. Unter
Status wählen Sie den aktuellen Status der Aufgabe aus. Unter ”Aufgabe” geben
Sie dann eine Beschreibung der Aufgabe ein.
Mit einem Klick auf ”Bearbeiten” können Sie eine bestehende Aufgabe öffnen
und den Status und/oder die Aufgabenbeschreibung ändern.
Mit einem Klick auf ”Löschen” können Sie eine abgeschlossene Aufgabe aus
der Liste löschen.
177
EIS - Energie-Informationssystem
9.7
Projektgruppe Energie-Informationssyteme
Fehlermeldungen
Während der Benutzung des EIS werden Sie das ein oder andere Mal auf eine
Fehlermeldung stoßen. Es gibt zwei Arten von Fehlern, die auftreten können.
Zunächst einmal so genannte Exceptions. Dieses sind Fehler, die durch Falscheingaben und/oder Datenbankfehler erzeugt werden. Sollte solche eine Exception
auftreten, weist Sie das EIS mit einem Fenster darauf hin. Dieses sieht wie in
Abbildung 91 aus.
Abbildung 91: Fehlermeldung bei inkorrekten Daten
Hier finden Sie eine Beschreibung des Fehlers und ein Eingabefeld, in dem Sie
einen Kommentar für den Systemadministrator hinterlassen können. Beispielsweise können Sie hier Ihre letzten Schritte bevor der Fehler auftrat eintragen
und an den Administrator Ihres EIS senden.
Ein zweiter Fehlertyp der auftreten kann, ist der in Abbildung 92 gezeigte.
Diese Meldung weist Sie darauf hin, dass Sie eine Funktion aufgerufen haben,
für die Ihr Benutzerkonto keine Berechtigung hat.
Abbildung 92: Eine Fehlermeldung, die Sie auf unzureichende Rechte hinweist.
178
EIS - Energie-Informationssystem
9.8
Projektgruppe Energie-Informationssyteme
Auswahlfenster
Im Laufe der Benutzung von EIS werden Sie auf einige Auswahlfenster stoßen,
die sich nach dem Klick auf ein Lupensymbol öffnen. Hier eine kleine Übersicht:
9.8.1
Auswahl für Tarife
Abbildung 93: Das Auswahlfenster für Tarife
Wählen Sie einen Tarif aus und klicken Sie auf ”Auswählen”, um den Tarif
auszuwählen. Ein Klick auf ”Abbrechen” bricht die Auswahl ab (siehe Abbildung
93).
9.8.2
Auswahl für Regelzonen
Abbildung 94: Das Auswahlfenster für Regelzonen
Wählen Sie eine Regelzone aus und klicken Sie auf ”Auswählen”, um die entsprechende Regelzone zu übernehmen. Mit einem Klick auf ”Abbrechen” brechen
Sie die Auswahl ab. Um die Regelzonen einzugrenzen, können Sie einen Suchbegriff und einen Suchbereich eingeben und mit ”Suchen” eine Suche starten (siehe
Abbildung 94).
179
EIS - Energie-Informationssystem
9.8.3
Projektgruppe Energie-Informationssyteme
Auswahl für Lastprofile
Abbildung 95: Das Auswahlfenster für Lastprofile
Wählen Sie ein Lastprofil aus und klicken Sie auf ”Auswählen”, um es zu
übernehmen. Klicken Sie auf ”Abbrechen”, um die Auswahl abzubrechen, ohne
ein Lastprofil zu übernehmen (siehe Abbildung 95).
9.8.4
Auswahl für Bilanzkreise
Abbildung 96: Das Auswahlfenster für Bilanzkreise
Wählen Sie einen Bilanzkreis aus und klicken Sie auf ”Auswählen”, um den
Bilanzkreis zu übernehmen. Mit einem Klick auf ”Abbrechen” brechen Sie die
Auswahl ab. Um die Bilanzkreise einzugrenzen, können Sie einen Suchbegriff
und einen Suchbreich eingeben und mit ”Suchen” entsprechende Bilanzkreise
auflisten (siehe Abbildung 96).
180
EIS - Energie-Informationssystem
9.9
Projektgruppe Energie-Informationssyteme
Kunden
In der Kundenverwaltung können Kundendaten angelegt, verändert und gelöscht werden. Außerdem werden hier Kundenverträge den Kunden zugeordnet. Es können Kundenverträge neu hinzugefügt, bearbeitet und auch gelöscht
werden. In den folgenden Abschnitten erfahren Sie, wie Kundendaten und deren Verträge angelegt, bearbeitet und gelöscht werden. Abbildung 97 zeigt die
Oberfläche der Kundenverwaltung.
Abbildung 97: Die Oberfläche zur Verwaltung von Kunden und deren Verträge
9.9.1
Kunden anlegen
Zum Anlegen eines Kunden müssen Sie als Kundenbetreuer eingeloggt sein.
Wählen Sie im Auswahlmenü oder dem Programmmenü den Punkt ”Kunden”
aus. Klicken Sie die Schaltfläche ”Anlegen...” und füllen Sie die entsprechenden
Felder aus (siehe Abbildung 98). Wenn Sie alle benötigten Felder korrekt ausgefüllt haben (die Überprüfung der Eingaben erfolgt im übrigen transparent, d.h.,
während der Eingabe werden ihre Angaben auf Stimmigkeit geprüft), klicken
Sie auf die Schaltfläche Speichern“. Ihr Kundendatensatz wird vom Programm
”
181
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
abgespeichert und steht Ihnen in der Kundenverwaltung zur Verfügung. Wollen
Sie den eigegebenen Datensatz nicht speichern, so klicken Sie auf Abbrechen“
”
oder schließen Sie das Fenster mit einem Klick auf das Kreuz in der rechten
oberen Ecke des Eingabefensters.
Abbildung 98: Einen neuen Kunden anlegen
9.9.2
Kunden bearbeiten
Zum Bearbeiten eines Kundendatensatzes geben Sie einen Suchbegriff (z.B.
Kundennummer, (Nach–)Namen und oder andere bekannte Merkmale des Kunden in die am oberen Rand der Kundenverwaltung befindliche Suchmaske ein.
Wählen Sie die Art der Suche im Klappmenü links neben der Suchmaske aus, geben Sie den Suchbegriff ein und klicken sie auf die Schaltfläche ”Suchen”. Wählen
Sie das Ergebnis bzw. eines der Ergebnisse der Suche aus, und klicken Sie die
Schaltfläche ”Bearbeiten ...”. Die Maske für Kundendaten öffnet sich mit den
Daten des ausgewählten Kundendatensatzes (siehe Abbildung 99). Fügen Sie
die gewünschten Änderungen ein und klicken Sie die Schaltfläche ”Speichern”.
Um den Vorgang abzubrechen, klicken Sie auf Abbrechen“ oder auf das Kreuz
”
in der Ecke oben rechts der Maske.
Abbildung 99: Einen bestehenden Kunden bearbeiten
182
EIS - Energie-Informationssystem
9.9.3
Projektgruppe Energie-Informationssyteme
Kunden löschen
Abbildung 100: Einen bestehenden Kunden löschen
Um einen Kundendatensatz zu löschen, vollziehen Sie eine Suche wie unter
”Kundendaten bearbeiten” beschrieben, oder wählen Sie den gewünschten Kundendatensatz direkt in der Kundendatenliste aus. Klicken Sie jetzt die Schaltfläche ”Löschen”. bestäigen Sie die Sicherheitsabfrage mit einem Klick auf die
Schaltfläche ”Ja” (siehe Abbildung 100). Der Kunde ist nun aus der Datenbank
gelöscht. Zu beachten: Es können nur Kundendaten gelöscht werden, die nicht
in einem laufenden Kundenvertrag verankert sind.
9.9.4
Kundenvertrag anlegen
Abbildung 101: Einen neuen Kundenvertrag anlegen
Um einen Kundenvertrag anzulegen, wählen Sie zunächst einen Kunden aus,
für den Sie einen Vertrag anlegen möchten. Wenn Sie einen Kunden ausgewählt
haben, erscheinen auf der Vertragsanzeige alle Verträge, die diesem Kunden bereits zugeordnet sind. Klicken Sie nun die Schaltfläche Anlegen ...“, um einem
”
183
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Kunden einen neuen Vertrag zuzuordnen. Füllen Sie alle Felder aus (siehe Abbildung 101). Die Einträge für Lastprofil, Tarif, Regelzone, Bilanzkreis wählen
Sie aus dem Menü aus, welches sich durch klicken des Lupensymbols öffnet, das
rechts neben dem jeweiligen Textfeld positioniert ist. Wenn Sie alle Felder auf
der linken Seite ausgefüllt haben, werden die Einträge der rechten Seite automatisch berechnet. Wenn Sie mit den Eingaben einverstanden sind, klicken Sie
auf die Schaltfläche Speichern“ oder auf die Schaltfläche Abbrechen“, wenn Sie
”
”
die Daten nicht speichern wollen.
Auf den folgenden vier Abbildungen sehen Sie die Fenster, in denen Sie für
einen Vertrag ein Lastprofil (siehe Abbildung 102), einen Tarif (siehe Abbildung 103), eine Regelzone (siehe Abbildung 104) und einen Bilanzkreis (siehe
Abbildung 105) auswählen.
Abbildung 102: Einem Kunden ein Lastprofil zuweisen
Abbildung 103: Einem Kunden einen Tarif zuweisen
184
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 104: Einem Kunden eine Regelzone zuweisen
Abbildung 105: Einem Kunden einen Bilanzkreis zuweisen
9.9.5
Kundenvertrag bearbeiten
Wenn Sie einen bestehenden Kundenvertrag bearbeiten wollen, wählen Sie zunächst den betreffenden Kunden aus der Liste aus. Es erscheinen nun alle Verträge, die diesem Kunden zugeordnet sind. Wählen Sie den Vertrag aus, den Sie
bearbeiten wollen, indem Sie auf die Schaltfläche Bearbeiten...“ klicken oder
”
doppelklicken Sie auf den zu bearbeitenden Vertrag. Es erscheint eine weitere
Maske auf dem Bildschirm, die mit den Vertragsdaten gefüllt ist (siehe Abbildung 106). Nehmen Sie die notwendigen Änderungen des Vertrags vor und
drücken Sie anschließend auf die Schaltfläche Speichern“ wenn Sie die Daten
”
speichern wollen oder klicken Sie auf Abbrechen“ wenn Sie die Daten nicht
”
ändern wollen.
9.9.6
Kundenvertrag löschen
Wenn Sie einen bestehenden Kundenvertrag bearbeiten wollen, wählen Sie zunächst den betreffenden Kunden aus der Liste aus. Es erscheinen nun alle Verträ185
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 106: Einen bestehenden Kundenvertrag bearbeiten
ge, die diesem Kunden zugeordnet sind. Wählen Sie den zu löschenden Vertrag
an, so dass dieser blau markiert ist und klicken Sie die Schaltfläche Löschen“.
”
186
EIS - Energie-Informationssystem
9.10
Projektgruppe Energie-Informationssyteme
Lastprofile
In der Lastprofilverwaltung (siehe Abbildung 107) können Sie neue Lastprofile anlegen, bearbeiten oder löschen. Sie können bestehende Lastprofile mit der
gegebenen Suchfunktion suchen. Durch klicken der Schaltfläche Zurücksetzen“
”
wird Ihre Eingabe aus der Suchmaske entfernt.
Abbildung 107: Die Oberfläche zur Verwaltung von Lastprofilen
9.10.1
Lastprofile anlegen
Sie können ein neues Lastprofil anlegen, indem Sie die Schaltfläche Anlegen...“
”
klicken. Es öffnet sich eine Eingabemaske (siehe Abbildung 108), in der Sie die
geforderten Daten eingeben müssen. Die Eingabe eines Lastprofils ist zeitaufwendig, da ein vollständiges Lastprofil aus 96 Eingaben besteht. Wenn Sie das
neue Lastprofil speichern möchten, klicken Sie auf die Schaltfläche Speichern“.
”
Um den Vorgang abzubrechen, klicken Sie auf Abbrechen“.
”
187
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 108: Ein neues Lastprofil anlegen
9.10.2
Lastprofile bearbeiten
Sie können bestehende Lastprofile einfach bearbeiten. Wählen Sie das zu bearbeitende Lastprofil aus der Liste aus, klicken Sie anschließend die Schaltfläche
Bearbeiten...“. Es öffnet sich eine Eingabemaske (siehe Abbildung 109), die mit
”
den Daten des zu bearbeitenden Lastprofils gefüllt ist. Ändern Sie die Felder,
die Sie ändern möchten und drücken Sie zum Bestätigen auf die Schaltfläche
Speichern“. Um den Vorgang abzubrechen, klicken Sie auf Abbrechen“.
”
”
Abbildung 109: Ein Lastprofil bearbeiten
9.10.3
Lastprofile löschen
Wenn Sie ein Lastprofil löschen wollen, markieren Sie das zu löschende Lastprofil
und drücken Sie auf Löschen“. Bestätigen Sie die folgende Sicherheitsabfrage
”
mit Ja“, wenn Sie das ausgewählte Lastprofil löschen möchten oder drücken Sie
”
Nein“, wenn Sie das Lastprofil nicht löschen wollen.
”
188
EIS - Energie-Informationssystem
9.11
Projektgruppe Energie-Informationssyteme
Tarife
In der Tarifverwaltung (siehe Abbildung 111) können Tarife hinzugefügt,
bearbeitet oder gelöscht werden. Bestehende Tarife können auf aktiv“ oder auf
”
inaktiv“ gestellt sein. Ist ein Tarif aktiv, so kann in der Kundenverwaltung
”
ein Kundenvertrag mit diesem Tarif eingegeben werden. Ist er nicht aktiv, so
erscheint er nicht in der Kundenverwaltung.
Abbildung 110: Die Oberfläche zur Verwaltung von Tarifen
9.11.1
Tarife anlegen
Wenn Sie einen Tarif anlegen möchten, klicken Sie auf die Schaltfläche Anle”
gen...“. Es erscheint ein neues Fenster (siehe Abbildung 111). Hier tragen Sie
die dort verlangten Attribute ein. Ein Tarif kann nur dann übernommen werden, wenn alle Felder korrekt ausgefüllt sind. Haben Sie einen Tarif angelegt,
erscheint er in der Liste der Tarife als inaktiv. Um diesen Tarif verwenden zu
können, müssen Sie ihn durch Klicken auf die Schaltfläche (De)aktivieren“ ak”
tivieren.
189
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 111: Einen neuen Tarif anlegen
9.11.2
Tarife bearbeiten
Wenn Sie einen Tarif bearbeiten möchten, wählen Sie diesen aus der Liste aus
und klicken Sie auf die Schaltfläche Bearbeiten...“ oder doppelklicken Sie auf
”
den zu bearbeitenden Tarif. Es erscheint ein neues Fenster (siehe Abbildung
112). Sie können nun die Attribute bearbeiten. Durch Betätigen der Schaltfläche Speichern“ werden die neuen Werte in das Programm übernommen. Durch
”
Betätigen der Schaltfläche Abbrechen“ werden keine Änderungen am Tarif ge”
speichert und der Vorgang abgebrochen.
Abbildung 112: Einen Tarif bearbeiten
9.11.3
Tarife löschen
Sie können nur dann einen Tarif löschen, wenn er inaktiv ist. Möchten Sie einen
inaktiven Tarif löschen, so klicken Sie auf die Schaltfläche Löschen“. Der Tarif
”
wird nun aus der Liste entfernt.
190
EIS - Energie-Informationssystem
9.12
Projektgruppe Energie-Informationssyteme
Fahrpläne
In der Fahrplanverwaltung (siehe Abbildung 113) können Sie Ihre Fahrpläne
automatisch erstellen. Das Ergebnis ist eine XML-Datei im ESS-Format. Sie
können hier natürlich auch problemlos bereits erstellte Fahrpläne löschen. Wie
Sie dies machen, erfahren Sie in den nächsten Abschnitten.
Abbildung 113: Die Oberfläche zur Erstellung von Fahrplänen
9.12.1
Fahrplan erstellen
Wenn Sie einen Fahrplan erstellen möchten, brauchen Sie lediglich ein Datum
auszuwählen, für das ein Fahrplan erstellt werden soll. Außerdem müssen Sie
noch den entsprechenden Bilanzkreis und die Regelzone bestimmen. Diese wählen Sie aus den neben der Datumseingabe positionierten Ausklappmenüs. Sollten
Sie hier keine Bilanzkreise oder Regelzonen auswählbar sein, überprüfen Sie unter dem Menüpunkt Bilanzkreise und Regelzonen“ ob Sie eine CSV–Datei mit
”
Bilanzkreis– und Regelzonendaten in die Datenbank übertragen haben. Wenn
Ihre Eingaben vom System akzeptiert wurden, müssen Sie noch einen Zielordner
für die erstellte XML–Datei bestimmen. Der Name der erzeugten XML–Datei
191
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
wird automatisch nach den Regeln der ETSO bestimmt. Erstellte Fahrpläne finden Sie in der Liste Vorhandene Fahrpläne“. Durch Markieren eines erstellten
”
Fahrplanes in dieser Liste wird der Inhalt der XML–Datei auf der rechten Seite
angezeigt (siehe Abbildung 114).
9.12.2
Fahrplan löschen
Sie können Fahrpläne entweder für einen Tag löschen oder gleich alle vorhandenen. Hierzu geben Sie entweder ein Datum ein, für das alle vorhandenen Fahrpläne entfernt werden sollen, oder klicken Sie auf die Schaltfläche Löschen“ neben
”
dem Text Alle Fahrpläne löschen“. Achtung: Durch diese Maßnahme werden
”
alle Fahrpläne unwiderruflich aus der Datenbank gelöscht! Eine Löschung der
zugehörigen XML-Dateien findet allerdings nicht statt. Diese Dateien müssen
Sie gegebenenfalls manuell aus dem Dateisystem Ihres Computers löschen.
Abbildung 114: Einen Fahrplan im Browserfenster anzeigen
192
EIS - Energie-Informationssystem
9.13
Projektgruppe Energie-Informationssyteme
Kaufempfehlungen
Um eine Kaufempfehlung zu erhalten, sind nur wenige Schritte notwendig.
Beachten Sie, dass zur Austellung einer Kaufempfehlung zuvor eine Lastprognose generiert worden sein muss, da sich der Kaufempfehlungsalgorithmus auf
Daten und Vorgaben aus einer Lastprognose angewiesen ist (siehe ”Lastprognosen”).
9.13.1
Schritt 1
Wählen Sie den Menüpunkt ”Kaufempfehlungen” aus dem (Programm–)Menü.
Es öffnet sich die Programmseite für Kaufempfehlungen. Wenn Sie eine Lastprognose als Basis gewählt haben (siehe Abbildung 115), klicken Sie auf die
Schaltfläche ”Weiter...”, um zu Schritt 2 zu gelangen.
Abbildung 115: Die Oberfläche zur Erstellung von Kaufempfehlungen: Schritt 1
193
EIS - Energie-Informationssystem
9.13.2
Projektgruppe Energie-Informationssyteme
Schritt 2
Im 2. Schritt wählen Sie nun aus den bestehenden Lieferverträgen mit Lieferanten diejenigen Verträge aus, die entweder auf jeden Fall oder auf keinen Fall in
die Kaufempfehlung mit einbezogen werden sollen (siehe Abbildung 116). Dazu
finden Sie in der äußerst rechten Spalte für jeden Vertrag eine sog. ”Checkbox”,
also ein Kästchen in dem Sie mit einem Mausclick einen Haken setzen (Vertrag
miteinbeziehen) oder entfernen können (Vertrag nicht miteinbeziehen). Sofern
Sie die initiale graue Markierung belassen, bleibt es dem Algorithmus freigestellt, das betreffende Angebot zu berücksichtigen oder nicht. Haben Sie ihre
Auswahl getroffen klicken Sie ”Weiter...”, um zu Schritt 3 der Kaufempfehlung
zu gelangen.
Abbildung 116: Die Oberfläche zur Erstellung von Kaufempfehlungen: Schritt 2
194
EIS - Energie-Informationssystem
9.13.3
Projektgruppe Energie-Informationssyteme
Schritt 3
In diesem Schritt wählen Sie das Plugin (externes Programmpaket) mit dem
von Ihnen gewünschten Algorithmus zur Erstellung einer Kaufempfehlung (siehe Abbildung 117). Im oberen Auswahlfenster wird Ihnen eine Auswahl von
verfügbaren Plugins angezeigt. Wählen Sie das gewünschte Plugin mit einem
Klick aus. In der unteren Hälfte des Programmfensters wird die Versionsinformation sowie eine kurze Beschreibung des gewählten Plugins angezeigt. Haben
Sie sich für ein Plugin entscheiden, klicken Sie ”Weiter...”, um zu Schritt 4 zu
gelangen.
Abbildung 117: Die Oberfläche zur Erstellung von Kaufempfehlungen: Schritt 3
195
EIS - Energie-Informationssystem
9.13.4
Projektgruppe Energie-Informationssyteme
Schritt 4
In diesem Abschnitt konfigurieren Sie die Einstellungen des in Schritt 3 gewählten Plugins. Je nach Plugin werden Ihnen hier Möglichkeiten zur Anpassung
des entsprechenden Algorithmus gezeigt. Für Informationen zu den jeweiligen
verfügbaren Einstellungsmöglichkeiten konsultieren Sie die Dokumentation des
Plugins in Schritt 3 oder der entsprechenden Dokumentation die jedem Plugin
beiliegen sollte. Sobald Sie alle Einstellungen ihren Wünschen angepasst haben,
klicken Sie ”Prüfen” (siehe Abbildung 118). Daraufhin werden die eingegebenen
Parameter auf Gültigkeit überprüft. Sind sie nicht gültig, erhalten Sie eine Benachrichtigung und können die Werte korrigieren. Sind sie gültig, ändert sich
die Beschriftung des Buttons zu ”Erstellen”. Klicken Sie ihn erneut, um die
Kaufempfehlung generieren zu lassen und zum nächsten Schritt der Kaufempfehlungserstellung zu gelangen.
Abbildung 118: Die Oberfläche zur Erstellung von Kaufempfehlungen: Schritt 4
196
EIS - Energie-Informationssystem
9.13.5
Projektgruppe Energie-Informationssyteme
Schritt 5
Im 5. Schritt sehen Sie das Ergebnis der Berechnung der Kaufempfehlung. Im
Bereich ”Basisinformationen” finden Sie übersichtsdaten für die abgeschlossene
Berechnung (siehe Abbildung 119). ”Nr.” bezeichnet die laufende Nummer der
Kaufempfehlung. ”Erstellt” stellt das Datum der Erstellung der Kaufempfehlung
dar. Das Zeitfenster für die Gültigkeit der Kaufempfehlung ergibt sich aus den
Punkten ”Gültig ab” und ”Gültig bis”. ”Gesamtbedarf” gibt den Bedarf an Energie in MWh wieder der für den entsprechenden Zeitraum der zugrundeliegenden
Lastprognose gilt. ”Gesamteinkauf” gibt die Energiemenge in MWh an, die der
Kaufempfehlungsalgorithmus zur Deckung des Gesamtbedarfs an Energie vorgeschlagen hat.
Im unteren Bereich werden in einer übersicht auf der linken Seite die zum Abschluss vorgeschlagenen Lieferangebote dargestellt. Auf der rechten Seite werden
bereits abgeschlossene Lieferverträge angezeigt.
Klicken sie auf ”Weiter”, um zum letzten Schritt zu gelangen.
Abbildung 119: Die Oberfläche zur Erstellung von Kaufempfehlungen: Schritt 5
197
EIS - Energie-Informationssystem
9.13.6
Projektgruppe Energie-Informationssyteme
Schritt 6
Im letzten Schritt der Kaufempfehlung können Sie Änderungen an der erstellten
Kaufempfehlung vornehmen, dazu können Sie auf der rechten Seite der Ansicht
andere infrage kommende Angebot zu der Kaufempfehlung hinzufügen (siehe
Abbildung 120). Wählen Sie dazu ein infragekommendes Angebot auf der rechten Seite und klicken sie ”Hinzufügen” um das Angebot zur Kaufempfehlung
hinzuzufügen. Bereits hinzugefügte Lieferangebote können Sie auf der linken
Seite einsehen. Um eines dieser Angebote wieder aus der Liste zu entfernen,
wählen Sie das entsprechende Angebot aus, und klicken Sie auf ”Löschen”.
Um die Kaufempfehlung und damit die empfohlenen Angebote abzuschließen, klicken Sie auf die Schaltfläche ”Fertigstellen...”.
Abbildung 120: Die Oberfläche zur Erstellung von Kaufempfehlungen: Schritt 6
198
EIS - Energie-Informationssystem
9.14
Projektgruppe Energie-Informationssyteme
Lieferanten
In der Lieferantenverwaltung (siehe Abbildung 121) haben Sie Zugriff auf die
Daten der im System gespeicherten Lieferantendaten und deren Verträge. In den
folgenden Abschnitten erfahren Sie, wie Sie neue Lieferanten in die Datenbank
speichern, bearbeiten oder auch löschen können. Außerdem wird erklärt, wie Sie
zu einem Lieferanten gehörende Lieferverträge bearbeiten oder löschen können.
Sie erfahren außerdem, wie Sie neue Verträge für bestimmte Lieferanten erstellen
können.
Abbildung 121: Die Oberfläche zur Verwaltung von Lieferanten
9.14.1
Lieferanten anlegen
Um einen neuen Lieferanten anzulegen, klicken Sie in der Lieferantenverwaltung
auf die Schaltfläche Anlegen...“. Das Programm öffnet eine Eingabemaske, in
”
welche Sie die für einen Lieferanten wichtigen Daten eingeben müssen. Wenn
Sie Felder auslassen, kann der neue Lieferant nicht angelegt werden. Haben Sie
alle Felder korrekt ausgefüllt, so klicken Sie die Schaltfläche Speichern“, um
”
den neuen Lieferanten im System zu speichern, oder klicken Sie die Schaltfläche
199
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbrechen“, um den Vorgang abzubrechen, ohne einen neuen Lieferanten zu
”
speichern.
9.14.2
Lieferanten bearbeiten
Um einen bestehenden Lieferanten zu bearbeiten, suchen Sie diesen über die
Suchfunktion des Programms aus. Markieren Sie den zu bearbeitenden Lieferanten, so dass dieser blau hinterlegt wird, und klicken Sie auf die Schaltfläche
Bearbeiten...“. Ändern Sie die Daten ab, die Sie ändern möchten, und betätigen
”
Sie anschließend die Schaltfläche Speichern“ (siehe Abbildung 122). Wenn die
”
von Ihnen geänderten Daten zulässig sind, werden diese übernommen. Wollen
Sie die Daten nicht speichern, so klicken Sie auf die Schaltfläche Abbrechen“
”
oder auf das Kreuz in der rechten oberen Ecke der Eingabemaske.
Abbildung 122: Ein bestehenden Lieferanten bearbeiten
9.14.3
Lieferanten löschen
Wenn Sie einen Lieferanten löschen möchten, markieren Sie den zu löschenden
Lieferanten, so dass dieser blau hinterlegt ist und klicken Sie auf die Schaltfläche
Löschen“. Der Löschvorgang ist nur dann zulässig, wenn für diesen Lieferanten
”
keine aktuellen Lieferangebote oder Lieferverträge vorhanden sind. Möchten Sie
den Löschvorgang abbrechen, klicken Sie die Schaltfläche Abbrechen“.
”
9.14.4
Lieferangebot/–vertrag anlegen
Sie können für einen bestehenden Lieferanten ein neues Lieferangebot oder einen
Liefervertrag anlegen. Wählen Sie hierzu zunächst den Lieferanten aus der Liste
aus, dem Sie ein Angebot oder einen Vertrag zuordnen möchten. Klicken Sie
anschließend auf die Schaltfläche Anlegen...“ in der Angebots- und Vertrags”
verwaltung. Es öffnet sich eine Eingabemaske (siehe Abbildung 123), in der Sie
alle Felder korrekt ausfüllen müssen. Der Status gibt an, ob es sich bei Ihrer
Eingabe um ein Angebot eines Lieferanten handelt oder um einen bereits abgeschlossenen Vertrag. Sie können den Status eines Angebots jederzeit ändern.
Wählen Sie die Regelzone und den entsprechenden Bilanzkreis aus, indem Sie auf
200
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
das jeweilige Lupensymbol klicken (siehe Abbildung 124). Wenn Ihre Eingaben
korrekt sind, können Sie den Datensatz abspeichern. Wollen Sie den Datensatz
nicht speichern, klicken Sie die Schaltfläche Abbrechen“ oder das Kreuz in der
”
rechten oberen Ecke der Eingabemaske.
Abbildung 123: Ein Lieferangebot/-vertrag anlegen
Abbildung 124: Eine Regelzone auswählen
9.14.5
Lieferangebot/-vertrag bearbeiten
Sie können bestehende Lieferangebote oder Lieferverträge bearbeiten. Hierzu
wählen Sie zunächst den Lieferanten aus, dessen Angebot oder Vertrag Sie bearbeiten möchten. Klicken Sie anschließend auf die Schaltfläche Bearbeiten...“
”
der Angebots- und Vertragsverwaltung. Ändern Sie die Daten, die Sie ändern
wollen, und betätigen Sie anschließend die Schaltfläche Speichern“, wenn Sie
”
diese Daten abspeichern möchten, oder klicken Sie auf Abbrechen“, wenn Sie
”
den alten Datensatz unverändert lassen möchten.
9.14.6
Lieferangebot/-vertrag löschen
Wenn Sie ein Angebot löschen wollen, das zu einem bestimmten Lieferanten
gehört, können Sie dies ohne Einschränkung tun, indem Sie den zu löschenden
201
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Datensatz auswählen und die Schaltfläche Löschen“ aus der Angebots- und
”
Vertragsverwaltung klicken. Der Datensatz wird aus der Liste entfernt. Wollen
Sie einen Vertrag löschen, ist dies nicht ohne weiteres möglich. Sie können einen
Vertrag nur dann löschen, wenn er ausgelaufen und ist und sich keine Kaufempfehlung mehr auf ihn bezieht. Alternativ können Sie den Vertrag auf den
Angebotsstatus zurücksetzen und ihn anschließend löschen.
202
EIS - Energie-Informationssystem
9.15
Projektgruppe Energie-Informationssyteme
Lastprognosen
Abbildung 125: Die Oberfläche zur Verwaltung und Erstellung von Lastprognosen
Sie können mit diesem Programm sehr einfach Lastprognosen erstellen. Wählen Sie zunächst einen Prognosealgorithmus aus der Liste aus, die mit Verfügba”
re Lastprognosealgorithmen“ betitelt ist (siehe Abbildung 125). Informationen
zum gewählten Algorithmus werden Ihnen unten angezeigt. Haben Sie sich für
einen Algorithmus entschieden, tragen Sie noch das Start- und das Enddatum
des Zeitraumes ein, der in die Lastprognose mit einfließen soll. Klicken Sie zum
Erstellen der Lastprognose auf die Schaltfläche Lastprognose erstellen“. Für
”
manche Algorithmen werden weitere Eingaben erforderlich sein. In diesen Fällen
öffnet sich nach klicken der Schaltfläche Prognose erstellen“ eine Eingabemaske.
”
Haben Sie diese Ausgefüllt und bestätigt, wird eine Lastprognose erstellt und
in der rechten Liste mit dem Titel Bereits erstellte Lastprognosen“ angezeigt.
”
Um die Details einer bestimmten Lastprognose einzusehen, klicken Sie auf die
Schaltfläche Details“. Es öffnet sich daraufhin ein weiteres Fenster, welches die
”
Details zu der von Ihnen gewählten Lastprognose enthält, aufgeschlüsselt nach
96 Tages-Viertelstunden und den Tagen, für die eine Lastprognose erstellt wurde. Wenn Sie eine Lastprognose löschen möchten, klicken Sie auf die Schaltfläche
203
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Löschen“ und bestätigen Sie die Sicherheitsabfrage. Sie können eine Lastpro”
gnose nur löschen, wenn keine Kaufempfehlung mehr auf ihr basiert.
204
EIS - Energie-Informationssystem
9.16
Projektgruppe Energie-Informationssyteme
Bilanzkreise und Regelzonen
Abbildung 126: Oberfläche zur Verwaltung von Bilanzkreisen und Regelzonen
9.16.1
Massenupdate
Um eine aktuelle Liste mit Bilanzkreisen und Regelzonen per Massenupdate
in die Datenbank zu übertragen, wählen Sie den Menüpunkt ”Bilanzkreise und
Regelzonen” und klicken dann die Schaltfläche ”Massenupdate”, wählen Sie jetzt
eine CSV–Datei mit Bilanzkreisen und Regelzonen und klicken Sie dann ”OK”.
Die Liste wird dann in die Datenbank übertragen.
Eine Liste der aktuell gültigen Bilanzkreise und Regelzone erhalten Sie beispielsweise auf [EIC06] als Datei für Microsoft Excel. Laden Sie diese herunter
und öffnen Sie sie. Löschen Sie alle Zeilen, die keine Bilanzkreise oder Regelzonen enthalten. Löschen Sie ebenfalls leere Spalten und die Spalte ”Änderungsdatum”. Sortieren Sie anschließend die Spalten in der Reihenfolge Eigentümer,
Abkürzung, EIC. Klicken Sie dann auf Datei, Speichern unter. Wählen Sie als
Dateityp ”CSV (Trennzeichen-getrennt) (*.csv)” und einen beliebigen Dateinamen. Bestätigen Sie die folgende Abfrage mit ja.
205
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Wie alle anderen Daten können auch die Angaben zu Bilanzkreisen und Regelzonen manuell geändert werden, indem sie Schaltflächen ”Anlegen ...”, ”Bearbeiten ...” und ”Löschen ...” am unteren Rand des Übersichtspanels (siehe
Abbildung 126) betätigen. Für die letzten beiden Funktionen muss ein Bilanzkreis oder eine Regelzone ausgewählt sein. Über das Auswahlfeld oben links
wechseln Sie zwischen der Übersicht für Bilanzkreisen und der für Regelzonen
hin und her.
206
EIS - Energie-Informationssystem
9.17
Projektgruppe Energie-Informationssyteme
EEX - Angebote
Um die EIS–Funktionen für die EEX nutzen zu können, müssen Sie als
EEX-Händler eingeloggt sein, bzw. es muss mindestens einen ”EEX–Händler”Systemnutzer geben, dessen Daten für den Handel an der EEX genutzt werden.
Sofern dies nicht der Fall ist, werden Sie aufgefordert, Ihre EEX-Zugangsdaten
einzugeben.
Um in die EEX–Übersicht zu gelangen, wählen Sie den Menüpunkt ”EEXAngebote” im Programmmenü. Sie können in der Übersicht eine aktuelle Lastprognose auswählen. Die Daten der Lastprognose werden nun intern mit den
bereits vereinbarten Lieferungen an Sie abzüglich der Störungen abgeglichen.
In dem Deckungsgraphen der übersicht können Sie erkennen, ob und wann Sie
für die errechnete Last zu einem bestimmten Zeitpunkt genug Energie durch
Verträge und Lieferungen zur Verfügung stehen haben (siehe Abbildung 127).
Abbildung 127: Die Oberfläche zur Verwaltung von EEX-Angeboten
Unter dem Punkt ”Ihre Blockangebote” sehen Sie eine Übersicht über alle zur
Zeit aktuellen Blockangebote, die Sie an der EEX platziert haben. Entsprechend
darunter die Stundenangebote im Bereich ”Ihre Stundenangebote”.
207
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Im untersten Abschnitt können Sie ablesen welche EEX–Händlerdaten (TraderID und TraderLogin) zur Zeit für den EEX–Handel genutzt werden. Das
aktive EEX–Händler–Konto können Sie mit einem Klick auf ”Daten ändern...”
wechseln.
Abbildung 128: EEX-Daten ändern
Geben Sie dazu die entsprechenden EEX-Daten ein, und bestätigen Sie (siehe
Abbildung 128).
In der Info–Spalte links sehen Sie die aktuellen Marktdaten der EEX, also
die Preise für bestimmte Blöcke.
9.17.1
Blockgebote
Blockgebot anlegen Im Bereich ”Ihre Blockgebote” finden Sie eine Übersicht über die aktuellen Blockgebote die Sie an der EEX platziert haben. Um ein
neues Blockgebot für die EEX anzulegen, klicken Sie auf die Schaltfläche ”Anlegen...”. Geben Sie in dem neuen Fenster (siehe Abbildung 129) die gewünschten
Daten für Ihr neues Blockgebot ein. Speichern Sie das neue Blockgebot mit einem Klicke auf ”Speichern”. Sie können das Blockgebot nun mit einem Klick
auf ”PDF erzeugen” als druckbares Faxformular erzeugen lassen bzw. drucken
bzw. direkt an den Faxdrucker übergeben. Für Informationen zu den Druckeinstellungen wenden Sie sich an den jeweiligen Systemadministrator, der für
Sie zuständig ist. Analog dazu können Sie bereits abgegebene Blockangebote
bearbeiten.
208
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 129: Ein Blockangebot erstellen
Blockgebot löschen Um ein Blockgebot zu löschen, wählen Sie das entsprechende Gebot aus der Liste aus und klicken Sie auf ”Löschen”. Bestätigen Sie
die Sicherheitsfrage mit ”OK” um das Gebot endgültig zu löschen. Es können
nur bisher unbestätigte Gebote gelöscht werden.
9.17.2
Stundengebote
Stundengebot anlegen Im Bereich ”Ihre Stundengebote” finden Sie eine
Übersicht über die aktuellen Stundengebote, die Sie an der EEX platziert haben.
Um ein neues Stundengebot für die EEX anzulegen, klicken Sie auf die Schaltfläche ”Anlegen...”. Geben Sie in dem neuen Fenster (siehe Abbildung 130) die
gewünschten Daten für Ihr neues Stundengebot ein. Speichern Sie das neue Stundengebot mit einem Klick auf ”Speichern”. Sie können das Stundengebot nun
mit einem Klick auf ”PDF erzeugen” als druckbares Faxformular erzeugen lassen bzw. drucken bzw. direkt an den Faxdrucker übergeben. Für Informationen
zu den Druckeinstellungen wenden Sie sich an den jeweiligen Systemadministrator, der für Sie zuständig ist. Analog dazu können Sie bereits abgegebene
Stundenangebote bearbeiten.
Stundengebot löschen Um ein Stundengebot zu löschen, wählen Sie das
entsprechende Gebot aus der Liste aus und klicken Sie auf ”Löschen”. Bestätigen
Sie die Sicherheitsfrage mit ”OK” um das Gebot endgültig zu löschen. Es können
nur bisher unbestätigte Gebote gelöscht werden.
9.17.3
EEX-Lieferungen eintragen
Wenn Sie ein Stunden- oder Blockangebot eingegeben haben, können Sie dazu eine an der EEX ausgehandelte Lieferung eintragen. Wählen Sie dazu das
209
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Abbildung 130: Ein Stundenangebot erstellen
jeweilige Angebot aus und klicken Sie auf den zugehörigen Button mit der Aufschrift ”Lieferung ...”. Sie werden dann in einem neuen Fenster nach den Daten
der Lieferung gefragt und können diese mit einem Klick auf die Schaltfläche
”Speichern” sichern.
210
EIS - Energie-Informationssystem
9.18
9.18.1
Projektgruppe Energie-Informationssyteme
EEX - Lieferungen
Übersicht
Um eine Übersicht über aus EEX-Angeboten resultierende Lieferungen zu erhalten, wählen Sie im Menü den Punkt ”EEX–Lieferungen”. Sie erhalten eine Liste
mit allen Lieferungen, die Sie abgeschlossen haben (siehe Abbildung 131). In
der Infospalte links sehen Sie eine Übersicht der gelieferten bzw. gekauften und
verkauften Energiemengen in MWh sowie die Anzahl der aktuellen Lieferungen.
Abbildung 131: Die Oberfläche zur Verwaltung von EEX-Lieferungen
9.18.2
Lieferung bearbeiten
Zur Korrektur einer EEX–Lieferung wählen Sie eine Lieferung aus der Liste
mit einem Mausklick aus (blau hinterlegt) und klicken Sie dann die Schaltfläche
”Bearbeiten...”. ändern Sie die gewünschten Parameter und speichern Sie die
Änderungen mit einem Klick auf ”Speichern”. Zum Abbrechen klicken Sie die
Schaltfläche ”Abbrechen”.
211
EIS - Energie-Informationssystem
9.18.3
Projektgruppe Energie-Informationssyteme
Lieferung löschen
Um eine Lieferung zu löschen, wählen Sie mit einem Mausklick die entsprechende Lieferung in der Übersicht aus und klicken Sie dann die Schaltfläche
”Löschen”. Sie müssen zum endgültigen Löschen der Lieferung die Sicherheitsabfrage mit ”Ja” bestätigen. Andernfalls brechen Sie die Löschung mit einem
Klick auf ”´Nein” ab.
212
EIS - Energie-Informationssystem
9.19
Projektgruppe Energie-Informationssyteme
Störungen
Unter dem Punkt ”Störung” können Sie aktuelle und vergangene Störungen
im Stromübertragungsnetz einsehen, die an Sie übermittelt wurden (siehe Abbildung 132). Geben Sie in der Suchmaske einene Suchbegriff ein und klicken Sie
”Suchen”, um eine bestimmte Störung zu suchen. Um alle vorliegenden Störungen anzuzeigen, klicken Sie auf ”Alle anzeigen”. Es werden nun alle Störungen
mit den entsprechenden Daten in der Liste angezeigt.
Abbildung 132: Die Oberfläche zur Verwaltung und Erstellung von Störungen
9.19.1
Störung melden
Sie können eine neue Störung melden, indem Sie die Schalfläche ”Anlegen” klicken. Geben Sie in der neuen Maske (siehe Abbildung 9.19.1) die entsprechenden
Daten für die Störung ein. Bestätigen Sie die Störung mit einem Klick auf ”OK”.
9.19.2
Störung bearbeiten
Eine bereits bestehende Störung können Sie nachdem Sie sie ausgewählt haben,
mit einem Klick auf ”Bearbeiten...” ändern.
213
EIS - Energie-Informationssystem
9.19.3
Projektgruppe Energie-Informationssyteme
Störung löschen
Mit einem Klick auf ”Löschen” können Sie eine ausgwählte Störung löschen.
Bestätigen Sie die Sicherheitsabfrage mit ”Ja”, um die Störung endgültig zu
löschen.
214
EIS - Energie-Informationssystem
9.20
Projektgruppe Energie-Informationssyteme
Systemnutzer
Abbildung 133: Die Oberfläche zur Verwaltung von Systemnutzern
9.20.1
Rollen
Jeder Systemnutzer kann keine, eine oder mehrere Rollen haben. Diese lauten
wie folgt:
Administrator Der Administrator hat uneingeschränkte Rechte zum Zugriff
auf die Nutzerverwaltung des EIS. Es kann mehrere Administratoren geben.
Mindestens ein Adminstrator muss im System vorhanden sein.
EEX–Händler Die Daten die einem EEX–Händler Account zugeordnet sind,
können zum Handel an der EEX eingesetzt werden (siehe EEX–Angebote).
EEX–Händler hat Zugriff auf die Funktionen:
• EEX–Angebote
215
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
• EEX–Lieferungen
Um auf die Funktionen EEX–Angebote und EEX–Lieferungen zugreifen zu können, müssen Sie als EEX–Händler eingeloggt sein bzw. als Admin wenn ein
EEX–Händler Konto angelegt wurde.
Kundenbetreuer Ein Kundenbetreuer verwaltet Stammdaten für eigene Kunden. Kundenbetreuer haben Zugriff auf die Funktionen:
• Kundenverwaltung inkl. Kundenverträge
• Tarife
• Lastprofile
• Bilanzkreise und Regelzonen
Lieferentenbetreuer Ein Lieferantenbetreuer verwaltet Stammdaten für Energielieferanten. Lieferantenbetreuer haben Zugriff auf die Funktionen:
• Lieferantenverwaltung inkl. Lieferverträge.
• Lastprognosen
• Kaufempfehlungen
• Bilanzkreise und Regelzonen
• Störungen
Abbildung 134: Einen Systemnutzer hinzufügen
216
EIS - Energie-Informationssystem
9.20.2
Projektgruppe Energie-Informationssyteme
Benutzer anlegen/bearbeiten
Wählen Sie aus dem Menü den Punkt ”Systemnutzer” (siehe Abbildung 133).
Zum Anlegen neuer Systemnutzer klicken Sie auf die Schaltfläche ”Anlegen”
(siehe Abbildung 134). Geben Sie die entsprechenden Daten an, wählen Sie
keine, eine oder mehrere Rollen für den neuen Systemnutzer aus und klicken
Sie dann auf die Schaltfläche ”Speichern”, um die Änderungen zu speichern. Der
neue Systemnutzer erscheint jetzt in der Liste der Systemnutzer. Analog können
Sie einen bestehenden Systemnutzer auch bearbeiten und ihm beispielsweise
Rollen aberkennen. Dazu klicken
9.20.3
Benutzer löschen
Über einen Klick auf die Schaltfläche ”Löschen” können Sie beliebige Systemnutzer – auch sich selbst – löschen. Voraussetzung dafür ist, dass der zu löschende
Nutzer keine Verträge und keinen EEX-Handel mehr betreut. Eine Löschung
ist ebenfalls nicht möglich, wenn es sich um den letzten im System verbliebenen Adminstrator handelt, da sonst ein Zugriff auf die Benutzerverwaltung
unmöglich würde. Bevor ein Nutzer tatsächlich gelöscht wird, müssen Sie eine
Sicherheitsabfrage bestätigen.
217
EIS - Energie-Informationssystem
9.21
9.21.1
Projektgruppe Energie-Informationssyteme
Szenarien
Szenario 1: Herausgabe einer aktualisierten Bilanzkreisliste
Der EIS-Nutzer Klaus Mustermann startet zu Beginn seines Arbeitstages das
System und gelangt nach erfolgreicher Anmeldung auf die Übersichtsseite. Er
kontrolliert die eingegangenen Störungen und die heute auslaufenden Verträge
mit Kunden und Lieferanten. Schließlich schaut er auf seine ToDo-Liste und
stellt fest, dass an diesem Tag eine aktualisierte Liste mit Bilanzkreisen herausgegeben wurde (siehe Abbildung 9.21.1).
Abbildung 135: Die ToDo-Liste zeigt, dass heute eine Aufgabe anliegt
218
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Er öffnet seinen Internetbrowser und lädt sich die aktuelle Liste herunter.
Anschließend kann er diese Datei verwenden, um die Liste des Systems zu aktualisieren. Hierzu wechselt er in die Verwaltung der Bilanzkreise und Regelzonen,
indem er im Menü Bilanzkreise und Regelzonen“ anklickt. Er klickt nun auf
”
Durchsuchen“ und gibt den Dateipfad zu der soeben heruntergeladenen CSV”
Datei an (siehe Abbildung 9.21.1). Abschließend klickt er auf die Schaltfläche
Datei verarbeiten“. Die Liste ist nun aktualisiert und der EIS-Nutzer kehrt
”
wieder in die Übersicht zurück, zu der er durch ein Klick auf Willkommen“ im
”
Menü gelangt.
Abbildung 136: Auswahl der CSV-Datei zur Listenaktualisierung
219
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Hier muss er nun die abgeschlossene Aufgabe als bearbeitet markieren. Er
wählt aus der ToDo-Liste den entsprechenden Eintrag aus und klickt auf Be”
arbeiten...“. Er setzt den Status von Nicht angefangen“ auf Bearbeitet“ und
”
”
klickt dann auf Speichern“ (siehe Abbildung 137). Der Vorgang ist hiermit
”
abgeschlossen. Alternativ könnte der Nutzer den Eintrag natürlich auch sofort
löschen.
Abbildung 137: Bearbeitung des Ereignisses in der ToDo-Liste
220
EIS - Energie-Informationssystem
9.21.2
Projektgruppe Energie-Informationssyteme
Szenario 2: Abschluss eines neuen Vertrages
Ein EIS-Nutzer möchte einen Vertrag mit einem Lieferanten schließen, um den
Strombedarf seiner Kunden decken zu können. Er hat mehrere Angebote von
Lieferanten im System gespeichert. Er überprüft einige gleichwertige Angebote
(siehe Abbildung 138) und fragt sich nun, mit welchem dieser Lieferanten er
einen Vertrag abschließen soll. Er entscheidet sich dazu, dem Lieferanten den
Vorzug zu geben, der das geringste Störungsaufkommen hat. Dazu wechselt der
Nutzer in die Störungsansicht des EIS-Systems.
Abbildung 138: In der Lieferantenansicht prüft der Nutzer die Angebote
221
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Hier gibt der Nutzer nacheinander die Namen der Lieferanten ein, die er im
Auge hat. Er erhält eine Übersicht über die Störungen, die im Zusammenhang
mit dem jeweiligen Lieferanten aufgetreten sind (siehe Abbildung 139). Nachdem der Nutzer sich auf Basis der Störungsinformationen für einen Lieferanten
entschieden hat, kann es zum Vertragsschluss mit diesem Lieferanten kommen.
Er kehrt zurück in die Lieferantenansicht.
Abbildung 139: In der Störungsansicht vergleicht der Nutzer die Störrate
222
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
In der Lieferantenansicht wählt der Nutzer das Angebot des Lieferanten,
dass der Nutzer zu einem Vertrag im System ändern möchte. Er klickt auf Be”
arbeiten...“ und ändert den Status von Angebot“ auf Vertrag“ (siehe Abbildung
”
”
140). Der Vorgang ist nun abgeschlossen.
Abbildung 140: Verwaltung von Angeboten und Verträgen in Lieferantenansicht
223
EIS - Energie-Informationssystem
9.22
Projektgruppe Energie-Informationssyteme
Hilfefunktion
Zum Aufrufen der Online–Hilfe können Sie jederzeit die Taste F1 drücken. Die
Online–Hilfe wird dann an der für die derzeitig Ausgewählte Funktion relevanten
Seite geöffnet. Um die Windows-Hilfedatei auf der Startseite zu öffnen, wählen
Sie im Programm-Menu den Punkt ”Hilfe”.
224
EIS - Energie-Informationssystem
10
Projektgruppe Energie-Informationssyteme
Glossar
Agile Modeling Agile Modellierung, Sammlung von Werten, Prinzipien und
Methoden zur Softwaremodellierung, die auf einfache Weise in einem Entwicklungsprojekt angewandt werden können.
CRM Customer Relationship Management, Kundenverwaltung, die sich um
Anlegen, Ändern und Löschen kundenbezogener Daten kümmert.
CRUD-Methoden Create, Read, Update, Delete, Standardmethoden zum Zugriff auf Objekte in einer Datenbank zum Einfügen, Auslesen, Bearbeiten
und Löschen.
CSV Comma Seperated Values, Textdatei zur Speicherung oder Austasuch von
einfach strukturierten Daten, einzelne Werte sind durch ein Trennzeichen
(z.B. Komma) voneinander getrennt
CVS Concurrent Versions System, Programm zur Versionsverwaltung von Dateien, hauptsächlich Software-Quelltext
DLL Dynamic Link Library, unter Microsoft Windows eingesetzte Programmbibliothek, die Programmcode und/oder Daten beinhalten kann.
DSS Decision Support System, Entscheidungsunterstützungssystem, das dem
Nutzer eines Systems sinnvolle, möglichst optimale Vorschläge zur Lösung
einer bestimmten, meist betriebswirtschaftlichen Fragestellung anbietet.
EEX European Energy Exchange, elektronischer Marktplatz für den Energiehandel mit Sitz in Leipzig.
ETSO European Transmission System Operators, Verband der europäischen
Übertragungsnetzbetreiber.
ESS ETSO Scheduling System, standardisiertes, XML-basiertes Dateiformat
zum Austausch von Fahrplanmeldungen zwischen Eneriehändlern und
ÜNBs im europäischen Energieverbund.
Extreme Programming Flexible Vorgehensweise zur Softwaremodellierung,
die in kurzen Zyklen alle Entwicklungsschritte durchläuft und dabei den
Programmcode sowie die sich im Zeitablauf ändernden Kundenwünsche
bei ständiger Reflexion in den Mittelpunkt stellt.
GUI Graphical User Interface, grafische Benutzeroberfläche, über die Menschen mit einem Programm interagieren können.
NUnit Framework zu Entwurf und Durchführung von Unit-Tests für alle .NETProgrammiersprachen.
Review Kontrolle des Ergebnis eines bearbeiteten Sprints durch eines oder
mehrere Mitglieder der Projektgruppe auf Erfüllung der im Springt gestellten Anforderungen
RPC Remote Procedure Call ist ein Netzwerkprotokoll, mit dem über das Netzwerk Funktionsaufrufe auf entfernten Rechnern durchgeführt werden.
225
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Scrum ist eine Sammlung von Arbeitstechniken, Strukturen, Rollen und Methoden für das Projektmanagement im Rahmen agiler Software-Entwicklung.
SOAP Simple Object Access Protocol ist ein Protokoll, mit dem Daten zwischen
Systemen ausgetauscht werden und mit dem RPC durchgeführt wird.
SVN Subversion, Programm zur Versionsverwaltung von Dateien, hauptsächlich Software-Quelltext.
UML Unified Modeling Language, standardisierte Sprache zur Modellierung
von Software und anderen Systemen.
ÜNB Übertragungsnetzbetreiber, Unternehmen, das für Organisation und Wartung des Stromleitungsnetzes in einer bestimmten Region zuständig ist.
V-Modell Das V-Modell ist ein spezielles Vorgehensmodell zur Softwareentwicklung. Das V-Modell ist einer von vielen Versuchen, in Deutschland
eine Richtlinie für die Entwicklung von IT-Systemen der öffentlichen Hand
einzuführen. In der Regel wird ein neues V-Modell nach einer Katastrophe
mit dem jeweils vorhergehenden V-Modell entwickelt. Das Bestreben ist,
ein auf die öffentliche Hand zugeschnittenes Prozessmodell als Richtlinie
einzuführen.
Wasserfallmodell Das Wasserfallmodell bezeichnet ein Vorgehensmodell in
der Softwareentwicklung, bei dem der Softwareentwicklungsprozesses in
Phasen organisiert wird. Dabei gehen die Phasenergebnisse wie bei einem
Wasserfall immer als bindende Vorgaben für die nächst tiefere Phase ein.
Wrapper-Klasse Klasse, die den Datenbankzugriff für einen bestimmten Objekttyp kapselt und dazu Methoden zum Einfügen, Bearbeiten, Löschen
und Auslesen von Objekten bereitstellt.
226
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
Literatur
[Adv]
Adventureworks cinema 1.0.
Online und herunterladbar unter
http://www.microsoft.com/germany/msdn/library/vs2005/samples/default.mspx?mfr=true.
[All]
Agile alliance. Online unter http://www.agilealliance.com/.
[BBa01] Kent Beck, Mike Beedle, and und andere. Manifesto for agile software
development. Online unter http://agilemanifesto.org/principles.html,
letzter Zugriff am 04.04.2006, 2001.
[Bun05] Bundesgesetzblatt.
Verordnung
über
den
zugang
zu
elektrizitätsversorgungsnetzen.
Online
unter
http://217.160.60.235/BGBL/bgbl1f/bgbl105s2243.pdf, letzter Zugriff
am 15.9.2005, 2005.
[dE01] Verband der Elektrizitätswirtschaft.
Begriffe im liberalisierten strommarkt.
Online unter http://www.vdnberlin.de/global/downloads/Service/BegriffeStrommarkt.PDF, letzter
Zugriff am 14.9.2005, 2001.
[EIC06] Eic-codes für vnb-bilanzkreise gemäß nvz. Online und herunterladbar
unter http://www.vdn-berlin.de/vnb eic.asp, 2006.
[FI]
Fraunhofer-Institut.
Projekt
fit
für
usability.
Online
unter
http://www.fit-fuerusability.de/tipps/software/information/uebersicht.html,
zuletzt
besucht am 19. September 2006.
[Fir]
Firefx
beta
2.
Online
http://www.dotnetfireball.net.
und
herunterladbar
unter
[For03] European Transmission System Operators Task Force. ETSO Scheduling System - Implementation Guide, 2 edition, April 2003.
[Fow05] Martin Fowler.
The new methodology.
Online unter
http://www.martinfowler.com/articles/newMethodology.html, letzter
Zugriff am 04.04.2006, 2005.
[Gro04] Agile Cologne Group.
Scrum.
Online unter http://agilecologne.de:8080/snipsnap-0.5.2a/space/Scrum, letzter Zugriff am
15.12.2005, 2004.
[kos]
Kostenkurve. Online unter http://de.wikipedia.org/wiki/Agile Softwareentwicklung,
letzter Zugriff am 04.04.2006.
[Las06] Energiedienst
ag,
lastprofile.
Online
und
herunterladbar
unter
http://www.energiedienstnetze.de/site/DE/netze/01-netznutzung/01 03lastprofile/Lastprofile Energiedienst AG/container lastprofile energiedienst AG.php,
2006.
[Mar02] Robert C. Martin. Agile processes. 2002.
227
EIS - Energie-Informationssystem
Projektgruppe Energie-Informationssyteme
[Nat05] National Oceanic and Atmospheric Administration. Wetterdaten der
noaa. Online unter http://www.nws.noaa.gov, letzter Zugriff am
15.10.2005, 2005.
[Nie]
Jakob Nielsen. 6 ways to fix a confused information architecture.
[Ope03] European Transmission System Operators. Etso scheduling system (ess) implementation guide. Online unter http://www.edi.etsonet.org/schedulev2r3/ess-guide-v2r3.zip, letzter Zugriff am 15.03.2006,
2003.
[Plu03] Plugin architecture using c sharp. 2003.
[Rec94] Ingo Rechenberg. Evolutionsstrategie ’94. Frommann Holzboog, 1994.
[SB06] Florian Sarodnick and Henning Brau. Methoden der Usability Evaluation. Huber, 2006.
[Sch05] Ken Schwaber. Scrum - it´s about common sense. Online unter
http://www.controlchaos.com, letzter Zugriff am 13.12.2005, 2005.
[SOA03] Soap version 1.2, part 1: Messaging framework. Online und herunterladbar unter http://www.w3.org/TR/2003/REC-soap12-part120030624/, 2003.
[Sut05] Jeff
Sutherland.
Scrumlog.
http://jeffsutherland.com/scrum, letzter
2005.
Zugriff
Online
unter
am 13.12.2005,
[Usa97] DIN EN ISO 9421. Ergonomische Anforderungen für Bürotätigkeiten
mit Bildschirmgeräten. Deutsche Fassung EN ISO 9421. Beuth Verlag
Berlin, 1997.
[Usa99] DIN EN ISO 13407. Benutzer-orientierte Gestaltung interaktiver System. Deutsche Fassung EN ISO 13407. Beuth Verlag Berlin, 1999.
[Usa03] DIN EN ISO 14915. Software Ergonomie für MultimediaBenutzungsschnittstellen. Deutsche Fassung EN ISO 14915. Beuth
Verlag Berlin, 2003.
[Zed]
Zed
graph
5.x.
Online
http://zedgraph.org/wiki/index.php.
228
und
herunterladbar
unter
Herunterladen