GradeBook Abschlussbericht

Werbung
Master Thesis Nummer MAS-07-02.16
GradeBook
Abschlussbericht
Abstract:
GradeBook ist eine Webapplikation mit Datenbankanbindung in der Lernende aus dem Berufsbildungscenter Gewerbeschul- und Modulnoten eigenständig erfassen und verwalten
können. Berufsbildner können die von ihren Lernenden eingegebenen Noten überwachen
und mittels Newsletters werden weitere Ausbildungsverantwortliche monatlich über die Notenstände informiert. Berichte als PDF, Statistikmöglichkeiten und Alarmierungsmöglichkeiten runden den Produktumfang ab. Vorliegendes Dokument beinhaltet den Abschlussbericht
mit den Inhalten Analyse, Design und Implementierung zur Master Thesis MT-07-02.16
Schlüsselwörter: Webanwendung, Notenverwaltung, Datenbank, PHP, MySQL
Student
Remo Seiler, Husmattstrasse 1, 3123 Belp,
Telefon: P: 031 859 21 09, G: 031 999 21 63, M: 078 627 99 22
[email protected]
Klasse, Datum
MAS-07-02, 18. Februar 2010
Dokumentversion
V 1.0.0
Betreuer
Experte
Patrick Aebi
Ascom (Schweiz) AG
Bahnhöheweg 70
3018 Bern
G: 031 999 31 39
Matthias Stalder
Ascom (Schweiz) AG
Bahnhöheweg 70
3018 Bern
G: 031 999 41 31
[email protected]
[email protected]
André-Claude Godet
Softwareschule Schweiz
Wankdorffeldstrasse 102
3014 Bern
033 335 06 06
[email protected]
Änderungskontrolle
Revision
Datum
Autor
Änderungen
0.10
01.12.2009
Remo Seiler
Entwurf, Dokumentstruktur
0.20
10.12.2009
Remo Seiler
Grobdesign dokumentiert
0.30
21.12.2009
Remo Seiler
Detaildesign dokumentiert
0.40
18.01.2010
Remo Seiler
Analysen und Designs überarbeitet
0.50
21.01.2010
Remo Seiler
Implementierungsdetails dokumentiert
0.60
31.01.2010
Remo Seiler
Modul-Tests dokumentiert
0.70
04.02.2010
Remo Seiler
Abnahmetests dokumentiert
0.80
10.02.2010
Remo Seiler
Einleitende und ausleitende Kapitel
0.81
10.02.2010
Remo Seiler
Erste Korrekturversion
0.82
14.02.2010
Remo Seiler
Korrigierte Version bereit zur Prüfung
0.90
17.02.2010
Remo Seiler
Geprüfte Version
1.00
18.02.2010
Remo Seiler
Abgabeversion
Remo Seiler, MAS-07-02
Seite 2 von 124
Zusammenfassung (Management Summary)
Das Berufsbildungscenter der Ascom (Schweiz) AG in Bern bildet jährlich über 100 Lernende
für mehr als 40 Partnerfirmen in verschiedenen Berufen aus. Während der Grundausbildung
im Berufsbildungscenter und während der weiteren Ausbildung in ihren Lehrbetrieben, besuchen die Lernenden jeweils während zwei Tagen die Berufsfachschule. Die Erfassung und
Überwachung von Beurteilungen, welche die Lernenden von verschiedenen Institutionen
erhalten ist ein wichtiges Werkzeug um die Lernzielerreichung und die Leistungstendenzen
dieser Lernenden zu beurteilen. Um diesen Geschäftsprozess professionell und automatisiert umzusetzen, soll ein neues webbasiertes Werkzeug eingeführt werden: die Webapplikation GradeBook. Im Unterschied zu bestehenden Softwareprodukten, dient GradeBook als
Notenverwaltung für die Lernenden selbst und nicht für Lehrpersonen bietet aber umfangreiche Überwachungsfunktionen für Berufsbildner und weitere Ausbildungsverantwortliche.
Das Ziel dieser Master Thesis ist es nun, das Softwareprodukt GradeBook Release 1 zu realisieren. Dazu muss vorerst eine umfangreiche Vorstudie gemacht werden, um die Anforderungen an das Produkt festzulegen. Anschliessend wird die Softwarearchitektur analysiert,
ein Design erstellt und eine lauffähige Software programmiert und dokumentiert. Umfangreiche Tests und die Integration der Software auf dem Zielsystem (dem Webserver des Berufsbildungscenters) stellen schliesslich die reibungslose Einführung der Software ab August
2010 sicher. GradeBook wird den Lernenden die Möglichkeit bieten alle ihre Beurteilungen
(Noten) online zu erfassen. Zudem können die Berufsbildner des Berufsbildungscenters die
Noten einsehen, überwachen und bei Bedarf auf Ausrutscher und negative Tendenzen reagieren. Dank einer umfangreichen Newsletter-Funktionalität können auch Verantwortliche
aus den Lehrbetrieben an der Überwachung teilnehmen, erhalten monatlich einen NotenNewsletter ihrer Lernenden und haben so stets alle benötigten Leistungsausweise zur Hand.
GradeBook ist also ein Werkzeug um deutlich schneller und effizienter auf Probleme der
Lernenden reagieren zu können, nicht erst bei der halbjährlichen Zeugnisvergabe.
Als Ergebnis liegen nun die komplette Anforderungsspezifikation, der Projektabschlussbericht und eine lauffähige Softwarelösung vor. Alle Ziele, welche für die Einführung des Produktes ab August 2010 notwendig sind konnten komplett umgesetzt werden. In einer ersten
Testphase mit realen Benutzern wird GradeBook Release 1 nun ab März 2010 einem intensiven Praxistest unterzogen und das Nachfolgeprojekt GradeBook Release 2 gestartet, das
mit vielen zusätzlichen Funktionen aufwarten wird.
Der Autor stützt sich einerseits auf neuste Fachliteratur zu Webdesign und den verwendeten
Technologien und andererseits auf intensive Internet-Recherchen zum Thema. Die Erfahrungen aus den Ausbildungen zum Dipl.El.Ing.FH und zum MAS IT trugen ebenso zum Projekterfolg bei wie die vielen kleineren Softwareprojekte die in der Firma und in der Softwareschule bereits umgesetzt werden konnten. Ausserdem wurden verschiedene Fachleute für
Entscheidungsprozesse mit einbezogen und die Bedürfnisse an das Produkt vorgängig mit
vielen Stakeholdern analysiert.
Die geforderten Ziele wurden erreicht und das Produkt ist für die weitere Verwendung bereit.
Trotzdem sind noch einige Verbesserungen möglich und auch Ergänzungen sind geplant.
Während der Arbeit sind verschiedene nützliche Ideen aufgetaucht, die im Nachfolgeprojekt
GradeBook Release 2 umgesetzt werden.
Remo Seiler, MAS-07-02
Seite 3 von 124
Inhaltsverzeichnis
1 EINLEITUNG ................................................................................................................... 7
1.1
1.2
1.3
1.4
1.5
1.6
Umfeld und Ausgangslage ....................................................................................... 7
Zweck des Dokuments............................................................................................. 7
Lesehilfe .................................................................................................................. 8
Leserkreis ................................................................................................................ 8
Referenzen .............................................................................................................. 9
Definitionen, Akronyme, Abkürzungen ..................................................................... 9
2 ARCHITEKTUR UND DESIGN .......................................................................................10
2.1 Übersicht ................................................................................................................10
2.1.1 Schichtenmodell und Entwurfsmuster ......................................................... 10
2.1.2 Framework .................................................................................................. 11
2.2 Grobanalyse ...........................................................................................................14
2.2.1 Anwendungsfall-Übersicht .......................................................................... 14
2.2.2 Paketdiagramm........................................................................................... 16
2.2.3 Architektur .................................................................................................. 17
2.2.4 Sicherheitsaspekte ..................................................................................... 18
2.3 Statische Analyse ...................................................................................................20
2.3.1 Namen und Konventionen........................................................................... 20
2.3.2 Controller Designklassen ............................................................................ 22
2.3.3 Model Designklassen .................................................................................. 34
2.3.4 View............................................................................................................ 37
2.4 Dynamische Analyse ..............................................................................................44
2.4.1 Login (alle Benutzer) ................................................................................... 44
2.4.2 Semesterübersicht (Lernender) .................................................................. 45
2.4.3 Semester bearbeiten (Lernender) ............................................................... 46
2.4.4 Note eingeben oder bearbeiten (Lernender) ............................................... 48
2.4.5 Monatsabschluss und Noten-Newsletter (Lernender).................................. 51
2.4.6 Details Lernender anzeigen (Berufsbildner) ................................................ 53
2.4.7 Newsletter beantragen (beliebige Person) .................................................. 54
2.5 Datenbank ..............................................................................................................55
2.5.1 Geschäftsdatenmodell ................................................................................ 55
2.5.2 Relationen-Modell (ERM) ............................................................................ 57
3 IMPLEMENTIERUNG .....................................................................................................60
3.1 Tools.......................................................................................................................60
3.1.1 Enterprise Architect..................................................................................... 60
3.1.2 Notepad ++ ................................................................................................. 60
3.1.3 XAMPP ....................................................................................................... 60
3.1.4 MySQL Workbench ..................................................................................... 60
3.1.5 WinSCP ...................................................................................................... 61
3.1.6 Web Developer ........................................................................................... 61
3.1.7 Weitere ....................................................................................................... 61
3.2 Installation GradeBook............................................................................................61
3.2.1 Lokal ........................................................................................................... 61
Remo Seiler, MAS-07-02
Seite 4 von 124
3.2.2 Zielsystem .................................................................................................. 63
3.3 Dokumentation Source-Code ..................................................................................64
4 TEST ..............................................................................................................................65
4.1 Testkonzepte ..........................................................................................................65
4.2 Testumgebung, Voraussetzungen ..........................................................................66
4.2.1 Testaufbau.................................................................................................. 66
4.2.2 Entwicklungssystem.................................................................................... 67
4.2.3 Zielsystem .................................................................................................. 67
4.3 Datenbank ..............................................................................................................68
4.3.1 Testdaten.................................................................................................... 68
4.3.2 Testabfragen............................................................................................... 68
4.4 Unit-Tests der Models .............................................................................................71
4.4.1 Testframework Toast .................................................................................. 71
4.4.2 Installation des Testframeworks Toast ........................................................ 72
4.4.3 Implementierung der Unit-Test-Klassen ...................................................... 72
4.4.4 Testablauf ................................................................................................... 73
4.4.5 Resultate und Auswertung .......................................................................... 74
4.5 Manuelle Tests .......................................................................................................75
4.5.1 Benutzeroberfläche, Layout, Navigation...................................................... 75
4.5.2 Eingabeformulare ....................................................................................... 77
4.6 Abnahmetests.........................................................................................................86
4.6.1 Testablauf ................................................................................................... 86
4.6.2 Benutzer Lernender .................................................................................... 87
4.6.3 Benutzer Berufsbildner ............................................................................... 91
4.6.4 Benutzer Newsletter-Empfänger oder beliebige Person .............................. 96
4.6.5 Authentifizieren (über ADS) ........................................................................ 98
5 RESULTATE ..................................................................................................................99
5.1
5.2
5.3
5.4
5.5
5.6
5.7
Konventionen..........................................................................................................99
Zielerreichung funktionale Anforderungen Lernender .............................................99
Zielerreichung funktionale Anforderungen Benutzer .............................................101
Zielerreichung funktionale Anforderungen Newsletter-Empfänger ........................101
Zielerreichung funktionale Anforderungen mehrere Benutzergruppen ..................102
Zielerreichung funktionale Anforderungen System ................................................102
Zielerreichung nicht funktionale Anforderungen ....................................................103
6 AUSBLICK ...................................................................................................................104
6.1 Offene Punkte.......................................................................................................104
6.2 Verbesserungsmöglichkeiten ................................................................................104
6.3 Erweiterungsvorschläge........................................................................................105
6.3.1 Checkliste und Change Management ........................................................105
6.4 Nachfolgeprojekt (GradeBook Release 2) .............................................................108
6.4.1 Betatest-Phase ..........................................................................................108
6.4.2 Termine .....................................................................................................108
7 AUSWERTUNGEN, ERFAHRUNGEN, FAZIT .............................................................110
Remo Seiler, MAS-07-02
Seite 5 von 124
7.1
7.2
7.3
7.4
7.5
Resultate ..............................................................................................................110
Auswertung der Zeitaufwände und Termine..........................................................110
Projektverlauf und Erfahrungen ............................................................................113
Schlussbetrachtung, Fazit .....................................................................................115
Danksagung .........................................................................................................115
A TERMINPLAN ..............................................................................................................116
B GLOSSAR FACHBEGRIFFE .......................................................................................117
C GLOSSAR INFORMATIKBEGRIFFE ...........................................................................119
D ABKÜRZUNGEN UND AKRONYME............................................................................120
E ABBILDUNGSVERZEICHNIS ......................................................................................121
F TABELLENVERZEICHNIS ...........................................................................................122
G QUELLEN.....................................................................................................................123
Remo Seiler, MAS-07-02
Seite 6 von 124
1
Einleitung
1.1
Umfeld und Ausgangslage
Das Berufsbildungscenter der Ascom (Schweiz) AG führt Basisausbildungen für mehr als 40
Partnerfirmen durch. Jährlich absolvieren somit mehr als 100 Lernende aus fünf verschiedenen Berufen ihre Grundausbildung im Berufsbildungscenter.
Die Lernenden erhalten während ihrer Lehrzeit in der betrieblichen Ausbildung, in der Gewerbeschule und an Prüfungen von verschiedenen Instanzen, Beurteilungen in Form von
Noten. Diese Noten müssen die Lernenden sammeln und den Berufsbildnern, Betreuern und
Coachs der Lehrbetriebe und des Berufsbildungscenters in regelmässigen Zeitabständen
melden.
Die Möglichkeit die Noten der Lernenden nicht nur bei Zeugnisvergabe, sondern auch
während des Semesters kontrollieren zu können, ist für Berufsbildner und weitere
Verantwortliche ein wichtiges Instrument zur Überprüfung der Lernzielerreichung.
Somit kann zum Beispiel frühzeitig auf Negativtendenzen bei Schulnoten reagiert und es
können entsprechende Gegenmassnahmen eingeleitet werden.
Zu bemerken gilt es, dass die Lernenden ihre Noten selbständig verwalten sollen. Die Berufsbildner müssen die durch den Lernenden erfassten Noten einsehen und darauf reagieren
können. Die Erfassung der Noten erfolgt in erster Linie auf Vertrauensbasis kann aber nach
der Zeugnisvergabe nachträglich auch kontrolliert werden.
Quelle der Abschnitte in diesem Kapitel [dok1 & dok2].
1.2
Zweck des Dokuments
Im Rahmen der Master Thesis MT-07-02.16 wurde das Projekt GradeBook Release 1 realisiert. Der vorliegende Abschlussbericht beschreibt die verschiedenen Projektphasen und
deren Resultate exklusive der Sourcecode-Dokumentation. Das Dokument beinhaltet also
die Analyse- und Design-Resultate, Informationen zur Implementierung, Testkonzept, Testresultate und Beschreibungen zum Projektablauf (Termine, Zielerreichung, persönliche Erfahrungen des Autors, etc.).
Für die Master Thesis MT-07-02.16 wurde ein Pflichtenheft erstellt (siehe [dok1]), welches
die Zielsetzung der Projektarbeit festlegt. Anschliessend wurde eine ausführliche Anforderungsspezifikation (siehe [dok2]) erstellt in welcher die Anforderungen an das Endprodukt
GradeBook Release 1 und 2 analysiert und spezifiziert wurden. Diese beiden Dokumente
bilden die Grundlage für das vorliegende Dokument und die gesamte projektarbeit.
Der Abschlussbericht beinhaltet, im Gegensatz zu den beiden vorangehenden Dokumenten
ausschliesslich die im Release 1 der Software implementierten Teile. Für Informationen zu
GradeBook Release 2 wird auf das Anschluss-Projekt und dessen Dokumentation verwiesen.
Hinweis: Einzelne wichtige Abschnitte des Abschlussberichtes werden, trotz der Gefahr mögliche Inkonsistenzen zu erzeugen, redundant aus der Anforderungsspezifikation [dok2] oder
dem Pflichtenheft [dok1] übernommen. Dies um die Verständlichkeit der Inhalte auch für Leser die die vorangehenden Dokumente nicht zur Hand haben zu erhöhen. Wörtliche Zitate
werden mit entsprechenden Quellen-Angaben versehen.
Remo Seiler, MAS-07-02
Seite 7 von 124
1.3
Lesehilfe
Das vorliegende Dokument orientiert sich an diversen Richtlinien für technische Berichte.
Zum einen Sind dies die Normen DIN1421 („Gliederung und Benummerung in Texten, Abschnitte, Absätze, Aufzählungen“) und ISO 5966 („Documentation – Presentation of scientific
and technical reports“) und zum anderen firmeninterne Richtlinien (siehe [dok3]). Bei Differenzen werden firmeninterne Richtlinien priorisiert. Einige Details wurden aus Gründen der
Übersichtlichkeit nicht komplett Normgetreu gestaltet. So sind zum Beispiel mehr als 3 Gliederungsebenen in der Kapitelstruktur vorgesehen, im Inhaltsverzeichnis werden aber nur
deren 3 aufgeführt. Zudem beginnen im Inhaltsverzeichnis nicht alle Abschnitte auf derselben Fluchtlinie, da dies deutlich umständlicher zu lesen ist, als die gewählte Form. Die meisten anderen Inhalte wie zum Beispiel das Management Summary, die Dokumentstruktur, die
Layout-Aspekte, etc. wurden aber gemäss den Richtlinien (siehe oben) umgesetzt.
Die gewählte Dokument- und Kapitelstruktur ist folgendermassen aufgebaut:
Im Kapitel 1 sind Beschreibungen zum Dokument, zur Ausgangslage und Umfeld des
Projektes und zu weiteren einführenden Teilen zu finden.
Im Kapitel 2 werden mithilfe von UML-Graphiken und verschiedenen anderen Darstellungsarten die Analyse- und Design-Resultate dokumentiert. Dieses Kapitel dient als
Grundlage für die Implementierung der Software.
Im Kapitel 3 sind einige wichtige Details der Implementierung beschrieben. Die Dokumentation des Programmcodes und weiterer Implementierungs-Details sind aber in
der Doxygen-Code-Dokumentation zu finden.
Im Kapitel 4 werden alle Testkonzepte und Resultate der manuellen und automatisierten Software-Tests dokumentiert.
Im Kapitel 5 folgt die Überprüfung der erreichten Ziele die für die Master Thesis MT07-02.16 gesetzt wurden.
Im Kapitel 6 wird das weitere Vorgehen im Gesamtprojekt GradeBook (Release 1 und
2) definiert. Es werden offene Punkte diskutiert und das Change Management während der Master Thesis beschrieben (inkl. Checkliste der offenen Punkte).
Im Kapitel 7 erfolgt die Schlussbetrachtung und Auswertung zum Projekt GradeBook
resp. der Master Thesis. Auswertungen des Projektablaufes, der Termine sind ebenso
enthalten wie persönliche Erfahrungen, Danksagung und das Fazit des Autors.
1.4
Leserkreis
Der Abschlussbericht hat grundsätzlich zwei Zielgruppen. Einerseits dokumentiert er die Arbeits-Methodik und Resultate der Master Thesis MT-07-02.16 und richtet sich somit an den
Betreuer und Auftraggeber (Ascom, Leiter Berufsbildung Informatik, P. Aebi) und an den Experten (Softwareschule Schweiz, A.C. Godet) dieser Arbeit.
Andererseits richtet sich das Dokument an den oder die Entwickler des Release 2 von GradeBook und soll ihnen das Einarbeiten in die Softwarearchitektur ermöglichen. Diesen Zweck
kann der Abschlussbericht aber nur in Kombination mit den weiteren, während der Master
Thesis erstellten, Dokumente wie der Anforderungsspezifikation und der SourcecodeDokumentation erfüllen.
Remo Seiler, MAS-07-02
Seite 8 von 124
Für weitere interessierte Leser werden Grundkenntnisse im Software-Engineering, in Webdesign mit PHP, verteilten Applikationen, Datenbanken und verschiedenen weiteren Themen
der Informatik vorausgesetzt.
1.5
Referenzen
Für den Inhalt des vorliegenden Abschlussberichts sind verschiedene weitere Dokumente
von Bedeutung. Die Dokumente werden jeweils mit einem entsprechenden Quellenverweis
in eckigen Klammern referenziert. Die Quellen sind im Anhang G zu finden.
1.6
Definitionen, Akronyme, Abkürzungen
Die in diesem Dokument verwendeten Fach- und Spezialausdrücke sind im Glossar in den
Anhängen B und C erläutert. Die verwendeten Abkürzungen und Akronyme sind im Abkürzungsverzeichnis in Anhang D spezifiziert.
Remo Seiler, MAS-07-02
Seite 9 von 124
2
Architektur und Design
2.1
Übersicht
2.1.1
Schichtenmodell und Entwurfsmuster
Die Webapplikation GradeBook soll wie in der Anforderungsspezifikation festgelegt, nur mit
der Programmiersprache PHP und mit Darstellungssprachen wie HTML, CSS, etc. umgesetzt werden. Die Sprache PHP ist grundsätzlich eine Skriptsprache, welche dazu dient den
statischen HTML-Seiten serverseitig Funktionalität zur Verfügung zu stellen. Seit PHP 4.3
unterstützt die Sprache nun aber auch objekteorientierte Ansätze und ermöglicht so komplexe Webapplikationen strukturierter und als ausgewachsene Enterprise Applications zu entwickeln.
Als besonders geeignet erscheint der Ansatz, die zu lösenden Probleme in mehrere Schichten (englisch Tiers) aufzuteilen. Für das geplante interaktive System soll als Architekturmuster das Model View Controller – Konzept (bekannt auch als Entwurfsmuster in nicht verteilten
Systemen) herangezogen werden.
2.1.1.1 Model View Control
Das MVC-Konzept wurde ursprünglich für Benutzeroberflächen in SmallTalk beschrieben.
Heute wird es in vielen komplexen Softwaresystemen für den Grobentwurf verwendet und
hat auch in der Webentwicklung einen grossen verbreitungsgrad erreicht. Abbildung 1 zeigt
das grundsätzliche ereignisorientierte MVC-Konzept für eine nicht verteilte Applikation.
System
View
(Präsentation)
Model
(Daten)
Control
(Steuerung)
Benutzer
Abbildung 1: MVC-Entwurfsmuster
In einer Webapplikation ist ein Beobachter-Ansatz für die Model-View-Assoziation nicht sinnvoll umsetzbar, da nur der Benutzer Ereignisse auslösen kann. Für GradeBook muss also
ein Ansatz gewählt werden, bei dem der Controller die Vermittlerrolle übernimmt. Das angepasste MVC-Entwurfsmuster, das für GradeBook zum Einsatz kommen soll, ist in Abbildung
2 dargestellt.
Remo Seiler, MAS-07-02
Seite 10 von 124
Server
Client
View
(Präsentation)
HTTP_Response
Model
(Daten)
Browser
Control
(Steuerung)
HTTP_Request
Benutzer
Abbildung 2: Angepasstes MVC-Entwurfsmuster
Da das beschriebene MVC-Konzept für Entwicklungen von Webapplikationen weit verbreitet
ist, existieren zahlreiche entsprechende Frameworks. Viele davon sind als Open sourceVarianten erhältlich. Die meisten neueren PHP-Frameworks, setzen mehr oder weniger genau das in Abbildung 2 gezeigte Konzept um und bieten ausserdem häufig noch viele zusätzliche Funktionalitäten.
Für die Implementierung von GradeBook sind vor allem die Geschäftslogik und die strukturierte und verständliche Umsetzung der Applikation von zentraler Bedeutung. Unter anderem
aus diesen Gründen wurde in Absprache mit dem Auftraggeber beschlossen, ein möglichst
einfaches aber robustes Open source-Framework für die Implementierung zu evaluieren und
zu verwenden. Das Framework muss kostenlos erhältlich und einfach zu erlernen sein (auch
für Lernende Informatik) und soll die Möglichkeiten der objektorientierten PHPProgrammierung nutzen. Grundsätzliche Sicherheitsmechanismen und eine einfache Möglichkeit eigene Libraries und Erweiterungen zu erstellen müssen vorhanden sein. Genauere
Beschreibungen zu dem gewählten Framework finden sich im nachfolgenden Kapitel 2.1.2.
2.1.2
Framework
2.1.2.1 Evaluation
Wie in Kapitel 2.1.1.1 beschrieben, werden an das zu evaluierende Framework verschiedene
grundsätzliche Anforderungen gestellt. Um aus der Fülle aller verfügbaren Open-SourceFrameworks eines auszuwählen wurde deshalb vorerst eine Vorauswahl getroffen und für
diese eine Nutzwertanalyse erstellt. Für die nähere Betrachtung wurden die nachfolgend
aufgelisteten Frameworks ausgewählt:
CakePHP [net1]
Zend [net2]
Fusebox [net3]
CodeIgniter [net4]
Symfonie [net5]
Kohana [net6]
Diese Auswahl wurde aufgrund ausgiebiger Internet-Recherchen getroffen. Letztere haben
gezeigt, dass die genannten Frameworks am weitesten verbreitet sind und die grössten
Communities aufweisen. In Tabelle 1 werden die Frameworks nun miteinander verglichen.
Die Kriterien für den Vergleich sind gemäss ihrer Priorität gewichtet. Die einzelnen FrameRemo Seiler, MAS-07-02
Seite 11 von 124
works erhalten für diese Kriterien eine Bewertung mit einer Note von 1-6. Die Bewertung
erhebt nicht Anspruch auf absolute Korrektheit, stellt aber den aktuellen Stand der Recherchen (Dezember 2009) durch den Autor dieses Dokuments dar. Die Internet-Quellen für Informationen und Bewertungen sind im Quellennachweis Anhang G aufgeführt.
Varianten
Kriterien
Gewicht CakePHP
Note
Zend
Fusebox
CodeIgniter
N x G Note N x G Note N x G Note
N xG
Symfonie
Kohana
Note N x G Note N x G
Einfachheit / Lernkurve
30
4
120
4
120
5
150
6
180
3
90
5
150
Flexibilität / Erweiterbarkeit
15
6
90
5
75
6
90
6
90
6
90
6
90
MVC-Umsetzung
15
6
90
6
90
6
90
6
90
6
90
6
90
Libraries
15
6
90
6
90
5
75
5
75
5
75
6
90
Voraussetzungen, Kompatibilität (PHP4/5)
5
6
30
4
20
6
30
6
30
5
25
5
25
Installation
5
6
30
4
20
6
30
6
30
5
25
6
30
Dokumentation
5
4
20
6
30
4
20
6
30
6
30
3
15
Community
5
5
25
5
25
4
20
6
30
5
25
4
20
Verbreitungsgrad
5
6
30
6
30
4
20
5.5
27.5
6
30
4
Total
100
Normierter Nutzwert in %:
20
525
500
525
582.5
480
530
87.50%
83.33%
87.50%
97.08%
80.00%
88.33%
Tabelle 1: Vergleich und Nutzwertanalyse Framework
Die Analyse in Tabelle 1 zeigt, dass das PHP-Framework CodeIgniter die Anforderungen für
das Produkt GradeBook mit 97% am besten erfüllt. Das wichtigste Kriterium, die Einfachheit
wird durch den sehr verständlichen und kompakten Aufbau des Frameworks am besten erfüllt. Dieses Kriterium ist zentral, weil auch Lernende der Informatik, in nützlicher Frist und
ohne sehr grosse Vorkenntnisse die Möglichkeit haben müssen sich in das Framework einzuarbeiten. Trotz seinem kompakten Aufbau bietet CodeIgniter aber eine Fülle von Libraries,
die mit Ausnahme einer Autorisierungs-Library alle Bedürfnisse für GradeBook abdecken. Es
ist ausserdem sehr flexibel für Erweiterungen (siehe auch Kapitel 2.1.2.2) und hat eine äusserst aktive Community. Die konsequente Umsetzung des MVC-Entwurfsmusters, die Kompatibilität auch mit PHP4 (und nicht ausschliesslich PHP5) und die sehr einfache Installation
auf dem Zielsystem sind weitere Vorteile. Obschon das Framework (noch) nicht den Verbreitungsgrad von CakePHP, Zend oder Symfonie erreicht hat, ist eine starke Zunahme dahingehend sehr wahrscheinlich. Zu guter Letzt ist auch die Dokumentation der neusten Version
des Frameworks (aktuelle Version Dezember 2009: 1.72) sehr ausführlich und verständlich
gehalten, was Kriterium 1 ebenfalls unterstreicht.
Stärkster Konkurrent für CodeIgniter ist das relativ neue Framework Kohana, das auf CodeIgniter aufbaut und einige Bereiche verbessert und erweitert (Session, zusätzliche Libraries, etc.). Kohana hat aber den Nachteil, dass die Dokumentation momentan noch sehr
spärlich, der Verbreitungsgrad klein, und die Community erst im Entstehen ist. Somit ist es
nicht gerade einfach zu erlernen und kann so auch im wichtigsten Punkt nicht überzeugen.
Falls Kohana entsprechende Fortschritte machen sollte, wäre eine Portierung von GradeBook auf dieses Framework dank dem sehr ähnlichen Aufbau aber mit vertretbarem Aufwand möglich.
Die restlichen Konkurrenten haben alle den Nachteil, dass Sie für den vorgesehenen Verwendungszweck stark Überdimensioniert sind und somit bei verschiedenen Kriterien schwächeln.
Fazit: Die Wahl fällt aus oben genannten Gründen auf das Framework CodeIgniter.
Remo Seiler, MAS-07-02
Seite 12 von 124
2.1.2.2 Beschreibung Framework CodeIgniter
Wie in Kapitel 2.1.2.1 bereits erwähnt ist das Framework CodeIgniter einfach aufgebaut. In
der Abbildung 3 ist dieser Aufbau schematisch dargestellt.
Abbildung 3: Aufbau Framework CodeIgniter, Quelle [net4]
Sämtliche Benutzeranfragen (HTTP Requests) werden an den Front-Controller (index.php)
des Frameworks gerichtet. Dieser ist für das Routing der Anfrage zum benötigten Controller
resp. zur benötigten Controller-Methode verantwortlich. Ausserdem besteht die Möglichkeit
die Sicherheits-Konzepte des Frameworks automatisch zu verwenden. Dies sind zum Beispiel eine XSS-Filterung aller übertragenen Daten (siehe auch Kapitel 2.2.4) zur Verhinderung von Cross-Site-Scripting oder automatisches Escaping von SQL-Abfragen zur Verhinderung von SQL-Injections.
Die an den Benutzer gesendeten Webseiten sind in den View-Files abgelegt. Diese beinhalten ausschliesslich den HTML-Code und binden die Style-Sheets für die Layout- und Darstellungsinformationen ein. Eine Template-Funktionalität ist grundsätzlich nicht gegeben, es
können aber mehrere View-Files kombiniert und somit die Redundanz verringert werden1.
CodeIgniter bietet auch die Möglichkeit eines Seiten-Cachs um häufig verwendete statische
Inhalte zwischen zu speichern und somit die Performanz zu steigern. Aufgrund der vielen
dynamischen Inhalte auf den GradeBook-Webseiten wird darauf aber verzichtet.
Die Application-Controller sind die eigentliche Schnittstelle zwischen der Datenschicht (Models) und der Präsentationsschicht (Benutzer/Browser). Sie sind verantwortlich für das Abfragen der Informationen von den Models, das Aufbereiten dieser Daten und deren Integration in die View-Files. Die Controller-Methoden laden also nach ihrem Aufruf die aufbereiteten
Daten zusammen mit einem View-File und senden das Resultat zurück an den Browser.
Die Application-Controller können nicht nur auf Models, sondern auch auf Libraries, Helpers
(nicht OOP-konforme einfache PHP-Methoden), Plugins und weitere Scripts von CodeIgniter
zugreifen. Das Erstellen eigener solcher Zusatzmodule ist vom Handling her trivial. Die eigentliche Flexibilität von CodeIgniter zeichnet sich aber dadurch aus, dass für Erweiterung
oder Anpassung bestehender Module die Kernfunktionalität nicht verändert werden muss.
Das Framework bietet dazu einfache Möglichkeiten mittels entsprechender Namenskonventionen. Somit ist gewährleistet, dass die Software ohne Komplikationen auf zukünftige Versionen von CodeIgniter portiert werden kann.
1
Eine effizientere Methode würde hier eine Template-Library bieten, mit der zum Beispiel Master-Templates für
das grundsätzliche Webseitenlayout verwendet werden können. CodeIgniter bietet in der Standardinstallation
zwar keine solche an, verschiedene open source Template-Libraries stehen aber zur Verfügung.
Remo Seiler, MAS-07-02
Seite 13 von 124
Zu guter Letzt bietet das Framework mit den Model-Klassen eine ausgereifte Schnittstelle zu
den Daten. Umfangreiche Datenbank-Libraries bieten nicht nur Treiber zu verschiedenen
Datenbanksystemen sondern auch Sicherheits-Mechanismen, Active-Record-Klassen, etc.
2.2
Grobanalyse
2.2.1
Anwendungsfall-Übersicht
Sämtliche Anwendungsfälle für die Webapplikation GradeBook sind in der Anforderungsspezifikation [dok2] ausführlich beschrieben. Die nachfolgenden Abbildungen sollen aber einen
Überblick über die implementierten und in vorliegendem Abschlussbericht analysierten Anwendungsfälle ermöglichen um somit das Verständnis der Berichtsinhalte zu erhöhen. Die
Anwendungsfälle werden nicht weiter kommentiert. Interessierte Leser konsultieren bitte
[dok2].
Die grau hinterlegten Elemente stellen jeweils SOLL- oder KANN-Anwendungsfälle für die
Implementierung im Rahmen der Master Thesis dar. Da sie aber ebenfalls ganz oder Teilweise implementiert wurden, mussten sie in der Analyse und im Design ebenfalls mit einbezogen werden.
Abbildung 4: Anwendungsfälle Lernender
Remo Seiler, MAS-07-02
Seite 14 von 124
Abbildung 5: Anwendungsfälle Berufsbildner
uc UC_Mehrere Benutzer
Anwendungsfälle Mehrere Benutzer
Def. Berufsbildner
Berufsbildner
MUC.01: Authentifizieren
(über ADS)
Lerne nder
New sletter -Empfänger
NUC.01 :
New sletter-Abonnement
beantragen
beliebige Person
Abbildung 6: Anwendungsfälle mehrere Benutzer
Remo Seiler, MAS-07-02
Seite 15 von 124
2.2.2
Paketdiagramm
Das Paketdiagramm in Abbildung 7 zeigt alle in der Webapplikation GradeBook verwendeten
Pakete. Im Paket CodeIgniter sind alle vom Framework zur Verfügung gestellten Basisklassen, Libraries, Helpers, Plugins, Konfigurationsfiles und Datenbank-Treiber enthalten. Die
einzelnen Module werden hier nicht einzeln aufgeführt um die Übersichtlichkeit nicht zu gefährden. Eingesetzt werden aber vor allem die Basisklassen der Controller und der Models
und verschiedene Libraries und Helpers. Als Datenbanktreiber kommt nur der MySQLTreiber zum Einsatz.
Das Paket GradeBook zeigt die Aufteilung aller im Rahmen der Entwicklung zum Release 1
zu erstellenden PHP-Klassen (Controller, Models und Libraries), Helpers sowie View-,
Template- und Layoutfiles (CSS). Die Assoziationen zwischen den GradeBook-Internen Paketen sind ersichtlich, diejenigen zu den Paketen des Frameworks und den open source
Libraries werden hier nicht explizit dargestellt.
Die Vier in GradeBook verwendeten open source Produkte sind dem entsprechenden Paket
zugeteilt. Letzteres ist unterteilt in CodeIgniter-Libraries welche ohne weitere Anpassungen
integriert werden können und PHP-Libraries, die für den Einsatz mit CodeIgniter leicht angepasst oder erweitert werden (oder schlicht als Basisklasse für eigene CodeIgniter-Libraries
verwendet werden).
Abbildung 7: Paketdiagramm GradeBook
Remo Seiler, MAS-07-02
Seite 16 von 124
2.2.3
Architektur
Das gewählte MVC-Konzept beschreibt prinzipiell nicht ein gängiges Schichtenmodell. Dies
weil beispielsweise sowohl Model, als auch Controller Teile der Geschäftslogik-Schicht implementieren. Die Grenze zwischen diesen beiden Teilen ist also grundsätzlich etwas unscharf und muss hier klarer definiert werden. Die Präsentationsschicht kann hingegen klar
dem View-Teil des MVC-Konzepts zugeordnet werden und die Schnittstelle zu den unteren
Schichten bieten ausschliesslich die Controller.
Die Abbildung 8 zeigt die einzelnen Elemente von GradeBook, ihre Zuordnung zu den MVCTeilen und wie sie in den einzelnen Schichten positioniert sind.
View
login_view
confirm_fach_entfernen_view
confirm_note_loeschen_view
monatsabschluss_info_view
monatsabschluss_view
note_eingeben_view
noten_uebersicht_view
sem_bearbeiten_view
sem_uebersicht_view
confirm_nla_ablehnen_view
confirm_nla_loeschen_view
confirm_nle_loeschen_view
lernende_bearbeiten_view
lernende_uebersicht_view
lernender_details_view
nla_detail_view
nla_hinzufuegen_view
nla_uebersicht_view
nle_bearbeiten_view
nle_uebersicht_view
nl_auswahl_view
nl_bestaetigung_view
nl_emaileingabe_view
nl_registrierung_view
email_newsletter_view
email_ablehnung_nla_view
email_anfrage_nla_view
menu_lernender_view
menu_berufsbildner_view
template
login.css
layout.css
template_nl
nlAbonnement.css
tabellen.css, email.css
Control
Login
Lernender
Model
M_login
M_benutzer
M_lernender
M_semester
M_fach
M_note
M_berufsbildner
Berufsbildner
NewsletterAnfrage
M_newsletter
M_email
RDBMS
MySQL 5.x - Datenbank mit InnoDB-Tabellen
Abbildung 8: Architektur GradeBook
Die nachfolgende Auflistung verdeutlicht die Aufgaben der einzelnen MVC-Teile:
Model: Die Models sind ausschliesslich zuständig für die Datenbankabfragen im
RDBMS. Einzelne oder verknüpfte Tabellen werden gelesen und die Daten teilweise
umgeformt oder berechnet und anschliessend als PHP-Arrays an den aufrufenden
Controller zurückgegeben.
Control: In den Controllern werden die Daten von den Models gelesen und aufbereitet. Die Umsetzung der Daten in eine HTML-konforme Form geschieht also hier und
nicht wie auch häufig anzutreffen in den Models.
Remo Seiler, MAS-07-02
Seite 17 von 124
View: Beinhaltet alle darstellungsrelevanten Inhalte in XHTML formatiert mit CSS.
Die View-Files beinhalten weitestgehend keine Anwendungslogik und somit auch
keinen PHP-Code. Einzige Ausnahme sind, die dynamisch von den Controllern generierten und an die Views übergebenen Daten, die mittels PHP-echo-Befehlen ausgegeben werden.
2.2.4
Sicherheitsaspekte
Mit GradeBook werden bezüglich des Datenschutzes, sehr sensible Daten erfasst und verarbeitet. Die Notendaten der Lernenden dürfen in keiner Weise für nicht autorisierte Personen sichtbar werden. Diesem Umstand muss bei der Entwicklung und Analyse grosse Bedeutung zugemessen werden, insbesondere da es sich hier um eine Webapplikation handelt
die vom Internet aus zugänglich ist. Ein weiterer Aspekt für ein gutes Sicherheitskonzept ist,
dass die Hauptbenutzer der Software technisch versierte Jugendliche mit zum Teil hohem
Informatik-Wissen sind1. Das Framework CodeIgniter bietet für viele Sicherheitsprobleme
bereits ausgereifte Lösungen an, diese müssen konsequent eingesetzt werden. Andere Sicherheitsprobleme sind teilweise durch administrative Massnahmen zu beheben. Nachfolgend werden die wichtigsten Sicherheitsrisiken und Massnahmen dagegen aufgezeigt.
Veröffentlichung des
Source-Codes
Cross-Site Scripting
(XSS)
SQL Injection
Fehlermeldungen
Verzeichniszugriff
Öffentlicher Programmcode bietet potenziellen Angreiffern die
Möglichkeit auch die kleinsten Sicherheitslücken aufzuspüren
und auszunutzen. Da GradeBook im Rahmen einer Master
Thesis an der SWS umgesetzt wird, muss sichergestellt werden, dass kein Programmcode auf deren Webseite veröffentlicht wird.
Eine der häufigsten und einfachsten Angriffsstrategien ist das
Attackieren von Eingabeformularen (z.B. das LoginFormular). Sämtliche Formulareingaben müssen vor deren
Verarbeitung im Skript entsprechend gefiltert und geprüft
werden. Diese Aufgabe übernimmt zu grossen Teilen die
XSS-Filter-Funktionalität von CodeIgniter.
Um die Möglichkeit auszuschliessen, dass Angreifer SQLQueries durch entsprechende Eingaben in Formularfeldern
verändern können, werden sämtliche solche Eingaben mit
den CodeIgniter-Escape-Methoden gereinigt. Das bedeutet
alle Datenbankzugriffe werden ausschliesslich mit der CIDatenbank-Library vollzogen.
Es sollen, durch entsprechende Codierung, möglichst keine
PHP- oder MySQL-Fehlermeldungen direkt an den Browser
gesendet werden und somit einem potentiellen Angreifer
nützliche Hinweise liefern. Die Fehlermeldungen werden,
soweit möglich, durch entsprechende Codierung abgefangen.
Der Verzeichnis-Zugriff auf die Applikationsverzeichnisse wird
eingeschränkt. Um zu verhindern, dass Inhalte eines Verzeichnisses an den Browser gesendet werden, wird zudem in
jedem Verzeichnis eine index.htm-Datei mit einer Fehlermeldung abgelegt.
1
Den Benutzern wird zwar nicht unterstellt böswillige Angriffe umsetzen zu wollen aber das Austesten
von Grenzen und Möglichkeiten gehören bei vielen Personen dieser Altersgruppe zum normalen Verhaltensmuster, was Erfahrungen zeigen.
Remo Seiler, MAS-07-02
Seite 18 von 124
Session-Hacking
Damit ein Benutzer nicht ohne weiteres seine Session-Daten
verändern und somit Zugriff auf geschützte Bereiche der
Software erhält, werden die Daten nicht in einem Cookie
sondern serverseitig in der Datenbank gespeichert. Lediglich
die Session-ID ist Client-Seitig im Cookie abgelegt und wird
jeweils mit der DB-Seitigen Session-ID validiert (kann also
nicht verändert werden).
Session-Hijacking
Damit eine aktive Session nicht durch einen Angreifer „entführt“ werden kann, muss sichergestellt werden, dass der
Client nicht ausspioniert wird. Die Sicherste und zugleich einfachste Gegenmassnahme ist das Verschlüsseln aller Daten
über eine HTTPS-Verbindung. Es werden also nicht nur Login- und persönliche Daten, sondern alle Datenübertragungen
über HTTPS stattfinden. Zudem müssen die Sessions über
ein genügend kurzes Timeout verfügen (falls kein „sauberes“
Logout stattfindet -> dabei werden sie umgehend gelöscht)
um nicht von einem anderen Benutzer auf demselben Computer missbraucht werden zu können.
Datei- und URL-Namen
Es muss für alle Dateinamen ein sinnvoller Kompromiss zwischen lesbaren und für Hacker einladenden Namen gefunden
werden.
BruteForce-Attacken
Um BruteForce-Attacken auf die Benutzer-Accounts zu verhindern (oder zumindest erschweren) wird in GradeBook Release 2 ein Timeout nach drei erfolglosen Login-Versuchen
vorgesehen (siehe auch Checkliste in Kapitel 6.3.1).
Fremde Seiteninhalte
Es werden keinerlei fremde Inhalte wie Werbung, Banner,
etc. auf den Webseiten eingesetzt. So wird verhindert, dass
ein Benutzer von solchen Fremd-Applikationen getäuscht
werden kann oder dass diese Applikationen unerwünschten
Skript-Code ausführen können.
Spamschutz
Um zu verhindern, dass zum Beispiel Bots das Registrierungsformular für Newsletter-Empfänger missbrauchen können (z.B. für das füllen der Datenbank mit Spaminhalten oder
Dummy-Usern um diese zu überlasten) wird das entsprechende Formular mit einer nicht automatisiert lesbaren Sicherheitsabfrage (Captcha-Graphik) versehen.
Serverseitige Sicherheit
Einige wichtige Sicherheitsaspekte auf dem Webserver kann
der Entwickler nicht selbst konfigurieren. Beispielsweise
müssen in der Datenbank die Zugriffsrechte klar geregelt sein
(keine passwortlosen root- oder test-Benutzer etc.). Ein anderer Aspekt sind PHP-Sicherheitslücken (werden auf dem Server vom Suhosin-Patch geschlossen) oder andere Angriffsmöglichkeiten der Infrastruktur. Für die Sicherheit der Serverumgebung ist der entsprechende Webserver-Verantwortliche
zuständig.
Weitere Sicherheitsaspekte, wie zum Beispiel das verwenden sicherer Passwörter für Ihre
ADS-Accounts, werden in der Ausbildung im Berufsbildungscenter thematisiert und sind in
Informatik-Richtlinien festgehalten. Die Sicherung der Datenbestände erfolgt mit automatischen Backups aller Datenbanken des Webservers und ist bereits in Betrieb.
Remo Seiler, MAS-07-02
Seite 19 von 124
2.3
Statische Analyse
In diesem Kapitel wird das statische Design der Software GradeBook dokumentiert. Die zu
entwickelnde PHP-Applikation ist zwar objektorientiert, sie weist aber eine grundsätzlich andere Struktur als eine normale (nicht verteilte) objektorientierte Software auf. Letzteres vor
allem aufgrund der transaktionsorientierten Arbeitsweise und der Tatsache, dass mit einem
MVC-PHP-Framework gearbeitet wird.
Für das Design der Applikation kann nur eine Teilmenge der Verfügbaren UML-Werkzeuge
sinnvoll eingesetzt werden. So kann zum Beispiel die statische Struktur der Applikation gut
mit Klassendiagrammen dargestellt werden hingegen sind zum Beispiel Objektdiagramme
für die Darstellung einzelner Szenarien wenig sinnvoll. Dies, weil die einzelnen Objekte praktisch keine Attribute aufweisen und die Datenhaltung ausschliesslich persistent in der Serverdatenbank und in Sessions geschieht. Auch sind die Assoziationen zwischen einzelnen
Objekten trivial, da beispielsweise alle benötigten Models bei jedem HTTP-Request neu geladen werden und jeweils nur einmal vorhanden sind.
Die für das statische Design verwendeten UML-Diagramme beschränken sich also auf Klassen- und Zustandsdiagramme. Für dynamische Betrachtungen des Systems wurden vor allem Sequenzdiagramme verwendet, in welchen die Kommunikation zwischen Objekten (und
auch Benutzer) verdeutlicht wird. Die Erstellung der Sequenzdiagramme war sehr hilfreich
für die Überprüfung der gewählten Software-Strukturen und führte zu etlichen Korrekturen in
diesem Bereich. So konnten Strukturelle Probleme grösstenteils bereits während der DesignPhase gelöst werden und die Codierung wurde entsprechend vereinfacht.
Die folgenden Unterkapitel dokumentieren die Designphase beginnend mit der Festlegung
der Namenskonventionen. Letztere existieren beim Auftraggeber nicht in geeigneter Form,
da das Hauptgeschäft des Berufsbildungscenters nicht die Softwareentwicklung, sondern die
Ausbildung darstellt.
2.3.1
Namen und Konventionen
Als erste Konvention lässt sich definieren, dass alle verwendeten Bezeichner in GradeBook
(Klassen, Methoden, Variablen, Files) in deutscher Sprache gehalten werden sollen. Dies
weil für die Software viele Bezeichner sinnvoll sind, die in der englischen Sprache keine oder
sinngemäss nur ungenügend übereinstimmende Äquivalente besitzen (z.B. Lernender, Berufsbildner, Note, etc.).
Ausnahmen: Für einige Namen ist es trotzdem sinnvoll englische Bezeichner zu verwenden.
So werden zum Beispiel in den Modelklassen die meisten Methoden mit kurzen, aussagekräftigen, englischen Präfixen versehen (get, add, …). Um die Präfixe entsprechend von
den rein deutschen Bezeichnungen auch optisch zu unterscheiden, werden die englischen
Teile nicht mit CamelCaps sondern mit einem Underscore von den deutschen Teilen getrennt (z.B. get_Daten()).
2.3.1.1 Vorgaben durch CodeIgniter
Das gewählte PHP-Framework CodeIgniter definiert bereits einen Satz von Namenskonventionen, die zwingend eingehalten werden müssen. Die folgende Auflistung beinhaltet die
wichtigsten dieser Konventionen:
Klassennamen von Controller und Models beginnen mit einem Grossbuchstaben, die
restlichen Buchstaben werden kleingeschrieben. Die Klassen werden in Dateien mit
Remo Seiler, MAS-07-02
Seite 20 von 124
identischem Namen aber mit kleinem Anfangsbuchstaben abgelegt (z.B.: Klasse
Lernender in Datei lernender.php).
Die Namen von Library-Klassen beginnen mit Grossbuchstaben und die Namen deren Dateien ebenfalls (im Gegensatz zu den Controller- und Model-Dateien). Die Namen der Library-Klassen dürfen zudem weitere Grossbuchstaben enthalten (ermöglicht für diese die CamelCaps-Schreibweise)
Helpers (Dateien mit einzelnen PHP-Hilfsfunktionen) sind keine Klassen. Für die Helpers ist aber der Dateiname vorgeschrieben. Damit CodeIgniter diese identifizieren
kann müssen die Dateien mit dem Präfix _helper enden (z.B. table_helper.php)
Private Methoden sind in Controllern aufgrund des Framework-Aufbaus nicht möglich.
Wenn eine Methode aber nur Controller-intern verwendet werden soll, kann ihr ein
Underscore vorangestellt werden (z.B. _foo()). Eine solche Methode kann nicht über
die URL aufgerufen werden, wie die restlichen Controller-Methoden.
Im Unterschied zu anderen Frameworks, definiert CodeIgniter nur die oben genannten Namensvorschriften. Damit ein einheitlicher Programmcode erstellt werden kann, werden weitere Konventionen in den folgenden Kapiteln definiert.
2.3.1.2 Klassen
Controller-Klasse
Controller-Klassen werden in GradeBook entsprechend ihrer Aufgabe und
ohne Prä- oder Postfix-Elemente benannt.
Beispiel: class Lernender {…}
Model-Klasse
Model-Klassen müssten aufgrund Ihrer Aufgabe häufig die gleichen Namen besitzen wie Controller-Klassen, was sie theoretisch auch dürften.
Da dies aber zu Verwirrungen führen könnte, werden sämtliche Models
mit einem Präfix m_ versehen.
Beispiel: class M_lernender {…}
Library-Klasse
Libraries werden gemäss Ihrer Aufgabe bezeichnet und beginnen mit
einem Grossbuchstaben. Zusammengesetzte Wörter für die Namen werden in CamelCaps-Schreibweise definiert.
Beispiel: class Bericht {…}
2.3.1.3 Methoden
Methodennamen werden in CamelCaps-Schreibweise (d.h. mit Binnenmajuskeln) und kleinen Anfangsbuchstaben verfasst. Diese Schreibweise ist weit verbreitet und ergibt eine sehr
gute Lesbarkeit. Wie bereits erwähnt, werden aber Wortteile in englischer Sprache, die als
Präfixe verwendet werden, mit einem Underscore von den Restlichen Wörtern getrennt.
Beispiele:
function get_AktuellesSemester($idLernender) {}
function newsletterAnfrageAblehnen() {}
2.3.1.4 Variablennamen
Variablennamen werden ebenfalls in CamelCaps-Schreibweise verfasst und beginnen mit
einem kleinen Anfangsbuchstaben.
Beispiel: $listeNlEmpfaenger
Remo Seiler, MAS-07-02
Seite 21 von 124
2.3.2
Controller Designklassen
Das Klassendiagramm in Abbildung 9 zeigt die vier erstellten Controller-Klassen und deren
Assoziationen zu der erstellten Library Bericht und den Libraries- und Basisklassen des CodeIgniter-Frameworks. Ausserdem ist die Vererbungshierarchie ersichtlich, welche durch die
Framework-Struktur zwingend vorgegeben ist. Zu den Framework-Klassen und der verwendeten open source Library sind nur wenn nötig die Attribute und Methoden eingeblendet.
Weitere Informationen zu diesen finden sich im CodeIgniter-Usermanual [net4] oder im Manual zur TCPDF-Library [net10].
Die Beschreibungen der einzelnen Klassen und Methoden folgen in den nachfolgenden Unterkapiteln.
class Klassendiagramm
«CodeIgniter»
Controller
«GBController»
New slette rAnfrage
«GBController»
Login
-
_TestOhneLdap: var = false
_TestNurAktive: var = false
_TestPasswort: var = false
+
+
+
+
Login()
index()
authentifizieren()
check_user(str)
verwendet
verwendet
0..*
1
1
«CILibrary»
CI_Se ssion
1
+
+
+
+
+
0..* +
+
+
+
+
+
+
+
NewsletterAnfrage()
index()
emailEingabe()
emailEingabeBestaetigen()
registrierung()
registrierungBestaetigen()
_check_select(str)
_check_captcha(captcha)
_check_email_exist(email)
auswahlLernende()
auswahlLernendeBestaetigen()
_check_session(str)
bestaetigungAnzeigen()
1
verwendet
verwendet
0..*
«GBController»
Berufsbildner
0..*
«GBController»
Lerne nder
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lernender()
index()
semesterUebersicht(semNummer)
semesterBearbeiten()
faecherBearbeiten()
notenUebersicht(fachNummer)
noteBearbeiten(notenNummer)
noteEingeben(edit)
noteVerarbeiten()
notePruefen(strNote)
noteLoeschen(notenNummer)
noteLoeschenBestaetigen()
monatsabschluss()
monatsabschlussBestaetigen()
berichtErstellen()
«GBLibrary»
Beri cht
verwendet
0..*
1
#
#
_CI: var
_idLernender: var
+
+
+
+
+
#
#
Bericht()
Header()
Footer()
generieren(idLernender, open, path, filename)
loeschen(file)
_initBericht()
_tabelleGenerieren(header, data, totwidth, colw,
colalign, headerw, sfontc, sfonth)
_lernenderInfosGenerieren(lernender)
_uebersichtSemesterGenerieren()
_uebersichtAlleFaecherGenerieren()
#
#
#
«OSLibrary»
TCPDF
+
+
verwendet
1
1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Berufsbildner()
index()
lernendeUebersicht()
zuteilungLernende()
zuteilungLernendeVerarbeiten()
lernenderDetails(idLernender, semNummer)
nlAbonnementHinzufuegen(idLernender)
nlAbonnementHinzufuegenBestaetigen()
nlAbonnementLoeschen(idLernender, idNLE)
nlAbonnementLoeschenBestaetigen()
newsletterAnfragen()
newsletterAnfrageDetails(idNLE)
newsletterAnfrageBestaetigen()
newsletterAnfrageAblehnen()
newsletterEmpfaengerUebersicht()
newsletterEmpfaengerBearbeiten(idNLE)
newsletterEmpfaengerSpeichern()
_check_select(str)
_check_email_exist(email)
newsletterEmpfaengerLoeschen(idNLE)
newsletterEmpfaengerLoeschenBestaetigen()
statistikErstellen()
berichtErstellen(idLernender)
Header()
Footer()
Abbildung 9: Systemklassendiagramm Controller
2.3.2.1 Controller Login
Die Controller-Klasse Login ist zuständig für die Steuerung der gesamten Login- Funktionalität. Sie wird bei einem Aufruf der Webseite GradeBook vom CI-Front- Controller (index.php)
als erstes instanziiert und Übermittelt an den aufrufenden Browser die login_viewKomponente (Login-Screen). Ausserdem ist die Klasse nach erfolgreichem Login eines Benutzers verantwortlich für das erzeugen der Session und für das Routing zum entsprechenden Benutzer-Controller oder zum NewsletterAnfrage-Controller.
Die Klasse erbt von der abstrakten Klasse Controller des CodeIgniter-Frameworks.
Remo Seiler, MAS-07-02
Seite 22 von 124
class Klassendiagramm
«GBController»
Login
-
_TestOhneLdap: var = false
_TestNurAktive: var = false
_TestPasswort: var = false
+
+
+
+
Login()
index()
authentifizieren()
check_user(str)
Abbildung 10: Klasse Login
Damit die Controller-Klasse Login auch auf einem lokalen Entwicklungssystem (ohne ADSZugriff über LDAP und somit ohne ADS-Authentifizierung) betrieben und getestet werden
kann, sind spezielle Testattribute definiert. Die Nachfolgende Auflistung zeigt deren Verwendungszweck:
private $_TestOhneLdap
(true/false)
Deaktiviert sämtlich ADS-Zugriffe über LDAP. Setzt voraus, dass ein
Testpasswort gesetzt wird um sich mit den vorhandenen Benutzern
einzuloggen.
private $_TestNurAktive
(true/false)
Deaktiviert die Abfrage von Benutzerdaten im ADS und deren Aktualisierung in der GradeBook-Datenbank. Wenn _TestOhneLdap = false wird
aber die Authentifizierung über ADS gemacht.
private $_TestPasswort
(false/Testpasswort)
Falls != false wird anstelle des ADS-Passworts das Benutzers das hier
angegebene verwendet (Vorsicht unsicher!). Wird in der Testphase
verwendet um reale ADS-Benutzer ohne deren Passwort oder alle lokal
bereits erfassten Benutzer zu verwenden.
In Tabelle 2 sind die Attribute der Controller-Klasse Login beschrieben.
Methode
Beschreibung
Login()
Konstruktor der Klasse. Ruft den Konstruktor der Basisklasse auf, lädt
verschiedene benötigte Models und Libraries.
index()
Wird vom CI-Front-Controller standardmässig aufgerufen, falls keine andere Methode spezifiziert wird. index() lädt die Login-View-Komponente
und sendet diese an den Browser zurück.
authentifizieren()
Wird ausgeführt, sobald der Login-Button gedrückt wird. Validiert die Eingabedaten (korrekte und vollständige Angaben, LDAP-Verifizierung von
user und password, xss-Filter, ...) und gibt im Fehlerfall eine Fehlermeldung aus. Bei erfolgreichem Login werden die Benutzerdaten (von ADS)
in der Datenbank aktualisiert, eine Session erzeugt, und je nach Benutzer
zum zuständigen Controller umgeleitet.
check_user()
Callback-Funktion für die CI-FormValidation-Library. Überprüft den Benutzernamen und das Passwort (über LDAP im ADS).
Parameter:
$str
Der zu validierende Wert
Tabelle 2: Methoden der Klasse Login
2.3.2.2 Controller Lernender
Die Controller-Klasse Lernender ist für die Steuerung der gesamten Funktionalität, die dem
Lernenden zur Verfügung steht verantwortlich. Von Ihr werden alle Views des Lernenden
erzeugt, geladen und an den Browser gesendet. Die Klasse übernimmt die Navigation auf
den Webseiten des Lernenden und lädt die benötigten Models für das auslesen, verändern
und löschen von Daten.
Remo Seiler, MAS-07-02
Seite 23 von 124
class Klassendiagramm
Die Klasse erbt von der abstrakten
Klasse Controller des CodeIgniter-Frameworks.
«GBController»
Lerne nder
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lernender()
index()
semesterUebersicht(semNummer)
semesterBearbeiten()
faecherBearbeiten()
notenUebersicht(fachNummer)
noteBearbeiten(notenNummer)
noteEingeben(edit)
noteVerarbeiten()
notePruefen(strNote)
noteLoeschen(notenNummer)
noteLoeschenBestaetigen()
monatsabschluss()
monatsabschlussBestaetigen()
berichtErstellen()
Abbildung 11: Klasse Lernender
Methode
Beschreibung
Lernender()
Konstruktor der Controller-Klasse Lernender Ruft den Konstruktor der
Basisklasse auf und lädt alle benötigten Models. Da Objekte der Klasse
Lernender bei jedem Seitenaufruf neu erzeugt werden (->und somit der
Konstruktor jedes Mal abgearbeitet), wird hier auch überprüft ob der aufrufende Browser die nötige Berechtigung verfügt (mittels Session-Daten).
index()
Die Methode index() wird vom CI-Front-Controller standardmässig aufgerufen, falls der Controller Lernender geladen wird ohne eine Methode
anzugeben. index() ruft die Methode semesterUebersicht() für das aktuelle Semester des Lernenden auf.
semesterUebersicht()
Die Methode lädt die benötigten Models für die Abfrage aller Daten eines
Semesters, lädt das entsprechende View-File
(lernender /
sem_uebersicht_view.php) mit den erhaltenen Daten und sendet es an
den Browser.
Parameter:
$semNummer
Anzuzeigendes Semester (Semesternummer von 18). Wird der Wert 0 übergeben und wurde zuvor noch
kein Semester ausgewählt, wird das aktuelle Semester des Lernenden ermittelt und angezeigt.
semesterBearbeiten()
Die Methode lädt das View-File sem_bearbeiten_view.php mit einem Bearbeitungsformular für das Semester (Fächer hinzufügen oder löschen)
und sendet dieses an den Browser.
faecherBearbeiten()
Wird aufgerufen, wenn in der sem_bearbeiten_view.php der Button ">"
(hinzufügen) oder "<" (entfernen) geklickt wird. Liest aus den SessionDaten das angezeigte Semester und die id des Lernenden und aus den
Post-Daten die gewählten Fächer aus. Die Fächer werden entsprechend
dem Semester hinzugefügt oder von ihm entfernt. Vor dem entfernen, wird
eine Bestätigung vom Benutzer abgefragt. Anschliessend wird wieder das
View-File lernender/sem_bearbeiten_view.php geladen und an den Browser gesendet.
notenUebersicht()
Wird aufgerufen, wenn in der Semesterübersicht auf ein Fach geklickt
wird. Lädt aus den Session-Daten die Fächer-IDs zur Fachliste (semUebersicht) und ermittelt gemäss der übergebenen Fachnummer die id des
anzuzeigenden Fachs. Anschliessend werden mit den entsprechenden
Models die Noten zum gewählten Fach aus der Datenbank gelesen, eine
Tabelle erzeugt, das View-File noten_uebersicht_view.php geladen, mit
Remo Seiler, MAS-07-02
Seite 24 von 124
der Notenübersicht ergänzt und an den Browser gesendet.
Parameter:
$fachNummer
noteBearbeiten()
Wird aufgerufen, falls in der Notenübersicht auf ein Bearbeitungssymbol
einer spezifischen Note geklickt wird. Die Methode ermittelt aus der Notennummer der Übersichtsliste die Identifikationsnummer der Note und
ruft im Erfolgsfall die Methode noteEingeben() auf.
Parameter:
$notenNummer
noteEingeben()
Die Nummer der angeklickten Note (aus Sicherheitsgründen wird hier nicht die Identifikationsnummer
übergeben.). Default = 0.
Callback-Funktion für die CI-FormValidation-Library. Prüft ob im übergebenen String ein gültiger Notenwert zwischen 1-6 und mit max. 2 Kommastellen und enthalten ist.
Parameter:
$strNote
noteLoeschen()
Gibt an ob eine neue Note erstellt (false) oder eine
bestehende editiert (true) werden soll. Default=false
Wird aufgerufen, falls in der Notenübersicht auf ein Bearbeitungssymbol
einer spezifischen Note geklickt wird. Die Methode ermittelt aus der Notennummer der Übersichtsliste die Identifikationsnummer der Note und
ruft im Erfolgsfall die Methode noteEingeben() auf.
Parameter:
$notenNummer
notePruefen()
Die Nummer der angeklickten Note (aus Sicherheitsgründen wird hier nicht die Identifikationsnummer übergeben). Default = 0.
Wird aufgerufen, falls in der Notenübersicht auf den Button "Note hinzufügen" oder auf ein Bearbeitungssymbol einer spezifischen Note geklickt
wird (letzteres via noteBearbeiten()). Die Methode lädt anschliessend das
View-File lernender/note_eingeben_view.php mit einem entsprechenden
Eingabeformular (wenn nötig ausgefüllt mit den vorh. Notenwerten) und
sendet es an den Browser.
Parameter:
$edit
noteVerarbeiten()
Nummer des Fachs auf der Liste in der Semesterübersicht. Aus Sicherheitsgründen wird hier nicht die
Fach-id übergeben -> diese werden in den SessionDaten (Serverseitig) zwischengespeichert.
Der zu validierende Wert als String
Wird aufgerufen, falls in der Notenübersicht auf ein Lösch-Symbol einer
Note geklickt wird. Speichert die id der zu löschenden Note in den Session-Daten, lädt das View-File confirm_note_loeschen_view.php (Bestätigung des Löschvorgangs) und sendet dieses an den Browser.
Parameter:
$notenNummer
Die Nummer (Notenübersicht) der zu löschenden
Note.
noteLoeschenBestaetigen()
Wird aufgerufen, wenn im View-File confirm_note_loeschen_view.php
einer der Buttons geklickt wurde. Falls der Bestätigen-Button geklickt wurde, wird die gewählte Note mittels des entsprechenden Models gelöscht.
monatsabschluss()
Wird aufgerufen, falls der Monatsabschluss-Infobalken angezeigt wird und
der Benutzer auf den Button "Monat abschliessen klickt". Generiert eine
Tabelle mit den Newsletter-Empfängern des Lernenden, lädt das View-
Remo Seiler, MAS-07-02
Seite 25 von 124
File monatsabschluss_view.php und sendet dieses an den Browser.
monatsabschlussBestaetigen()
Wird aufgerufen wenn im Monatsabschlussformular ein Button gedrückt
wird. Die Methode ist zuständig für die Validierung und Speicherung des
Monatsabschlusses (mittels Model m_lernender) und die Generierung und
Versendung der Notennewsletter (mittels Model m_email).
berichtErstellen()
Erzeugt mithilfe der Library Bericht einen Bericht im PDF-Format und
sendet diesen zum Download an den Browser.
Tabelle 3: Methoden der Klasse Lernender
2.3.2.3 Controller Berufsbildner
Die Controller-Klasse Berufsbildner ist für die Steuerung der gesamten Funktionalität, die
dem Berufsbildner zur Verfügung steht verantwortlich. Von Ihr werden alle Views des Berufsbildners erzeugt, geladen und an den Browser gesendet. Die Klasse übernimmt die Navigation auf den Webseiten des Berufsbildners und lädt die benötigten Models für das auslesen, verändern und löschen von Daten. Die Berufsbildner-Klasse verwendet ausserdem verschiedene Libraries und greift auch auf die Models für die Lernenden-Daten (Noten, Zuteilungen, Benutzerdaten, etc.) zu. Die Klasse erbt von der abstrakten Klasse Controller des
CodeIgniter-Frameworks. class Klassendiagramm
«GBController»
Berufsbildner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Berufsbildner()
index()
lernendeUebersicht()
zuteilungLernende()
zuteilungLernendeVerarbeiten()
lernenderDetails(idLernender, semNummer)
nlAbonnementHinzufuegen(idLernender)
nlAbonnementHinzufuegenBestaetigen()
nlAbonnementLoeschen(idLernender, idNLE)
nlAbonnementLoeschenBestaetigen()
newsletterAnfragen()
newsletterAnfrageDetails(idNLE)
newsletterAnfrageBestaetigen()
newsletterAnfrageAblehnen()
newsletterEmpfaengerUebersicht()
newsletterEmpfaengerBearbeiten(idNLE)
newsletterEmpfaengerSpeichern()
_check_select(str)
_check_email_exist(email)
newsletterEmpfaengerLoeschen(idNLE)
newsletterEmpfaengerLoeschenBestaetigen()
statistikErstellen()
berichtErstellen(idLernender)
Abbildung 12: Klasse Berufsbildner
Methode
Beschreibung
Berufsbildner()
Konstruktor der Controller-Klasse Berufsbildner Ruft den Konstruktor
der Basisklasse auf und lädt alle benötigten Models. Da Objekte der
Klasse Lernender bei jedem Seitenaufruf neu erzeugt werden (->und
somit der Konstruktor jedes Mal abgearbeitet), wird hier auch überprüft ob der aufrufende Browser die nötige Berechtigung verfügt (mittels Session-Daten).
index()
Die Methode index() wird vom CI-Front-Controller standardmässig
aufgerufen, falls der Controller Berufsbildner geladen wird ohne eine
Methode anzugeben. index() leitet den Browser zur uebersichtLernende um.
Remo Seiler, MAS-07-02
Seite 26 von 124
lernendeUebersicht()
Generiert die Tabelle mit den Lernenden die dem Berufsbildner zugeteilt sind, lädt das View-File lernende_uebersicht_view.php und
sendet das File mit den Daten an den Browser.
zuteilungLernende()
Lädt das View-File lernende_bearbeiten_view.php mit einem Bearbeitungsformular für die zugeteilten Lernenden des Berufsbildners
(Lernende hinzufügen oder entfernen) und sendet dieses an den
Browser.
zuteilungLernendeVerarbeiten()
Wird aufgerufen, wenn im View-File lernende_bearbeiten_view.php
der Button ">" (hinzufügen) oder "<" (entfernen) geklickt wird. Liest
aus den Post-Daten die gewählten Lernenden aus und fügt diese
hinzu oder entfernt sie je nach Wahl durch den Berufsbildner. Anschliessend wird wieder auf "lernendeBearbeiten" umgeleitet (HTTP
redirect).
lernenderDetails()
Wird aufgerufen, wenn in der Lernenden-Übersicht auf den Namen
eines Lernenden geklickt wird. Die Methode erzeugt Tabellen mit der
Semesterübersicht, den Newsletter-Empfängern und den persönlichen Daten des Lernenden. Anschliessend wird das View-File lernender_details_view.php geladen und an den Browser gesendet.
Parameter:
nlAbonnementHinzufuegen()
$idLernender
Die Identifikationsnummer des Lernenden
$semNummer
Die Nummer des Semesters (1-8) das angezeigt
werden soll. Wenn der Wert 0 übergeben wird,
wird das aktuelle Semester des Lernenden ermittelt und angezeigt.
Generiert eine Liste mit allen Newsletter-Empfängern die dem Lernenden noch nicht zugeteilt sind und generiert eine Tabelle mit Auswahlmöglichkeiten.
Lädt
anschliessend
das
View-File
nla_hinzufuegen_view.php und sendet es an den Browser.
Parameter:
$idLernender
Die Identifikationsnummer des Lernenden
nlAbonnementHinzufuegenBestaetigen()
Validiert das Auswahlformular für Newsletter-Empfänger. Im Erfolgsfall werden für die gewählten Newsletter-Empfänger mittels Model
m_newsletter neue Newsletter-Abonnemente erzeugt und die Newsletter-Anfragen aus der Datenbank gelöscht. Anschliessend wird
wieder zur Detailansicht Lernender umgeleitet (HTTP redirect).
nlAbonnementLoeschen()
Lädt das View-File confirm_nla_loeschen_view.php und sendet das
Bestätigungsformular für das Löschen eines NewsletterAbonnements an den Browser.
Parameter:
$idLernender
Die Identifikationsnummer des Lernenden
$idNLE
Die Identifikationsnummer des NewsletterEmpfängers
nlAbonnementLoeschenBestaetigen()
Wird aufgerufen, wenn im View-File confirm_nle_loeschen_view.php
einer der Buttons geklickt wurde. Falls der Bestätigen-Button geklickt
wurde, wird der Newsletter-Empfänger mithilfe des entsprechenden
Models gelöscht.
newsletterAnfragen()
Falls für die zugeteilten Lernenden des Berufsbildners NewsletterAnfragen vorhanden sind, generiert die Methode eine Übersichtstabelle mit allen offenen Newsletter-Anfragen und pro Newsletter-
Remo Seiler, MAS-07-02
Seite 27 von 124
Empfänger eine Navigationsmöglichkeit um auf die detaillierte Ansicht zu gelangen. Anschliessend lädt die Methode das View-File
nla_uebersicht_view.php und sendet dieses an den Browser.
newsletterAnfrageDetails()
Generiert Tabellen für die Detailansicht eines NewsletterAntragstellers mit folgenden Informationen: Persönliche Angaben
Newsletter-Empfänger (NLE) und eine Tabelle mit allen Lernenden
des Berufsbildners für die eine Anfrage vom NLE offen ist mit Auswahlmöglichkeit für die Bestätigung oder Ablehnung der Anfragen.
Anschliessend wird das View-File nla_detail_view.php geladen, mit
den Daten versehen und an den Browser gesendet.
Parameter:
$idNLE
Identifikationsnummer des Newsletter-Empfängers
newsletterAnfrageBestaetigen()
Wird aufgerufen, wenn auf der Newsletter-Anfrage-Detailansicht
Anfragen ausgewählt und das Formular durch klicken eines Button
abgesendet wurde. Falls die ausgewählten Anfragen bestätigt wurden, werden die entsprechenden Newsletter-Abonnemente mittels
Model m_newsletter erzeugt, die Anfragen gelöscht und wieder auf
newsletterAnfrageDetails() umgeleitet. Falls die ausgewählten Anfragen
abgelehnt
wurden,
wird
das
View-File
confirm_nla_ablehnen_view.php mit einem Bestätigungsformular geladen und an den Browser gesendet.
newsletterAnfrageAblehnen()
Wird aufgerufen, wenn auf dem Anfrage-Bestätigungsformular ein
Button geklickt wurde. Falls der Bestätigen-Button betätigt wurde,
werden die Newsletter-Anfragen mittels Model m_newsletter gelöscht und mittels Model m_email ein entsprechendes Mail an den
Antragsteller gesendet. Anschliessend wird auf die NewsletterAnfrage- Detailansicht umgeleitet (HTTP redirect).
newsletterEmpfaengerUebersicht()
Generiert eine Tabelle mit allen erfassten Newsletter-Empfängern
mit Bearbeitungs- und Lösch-Symbolen. Anschliessend lädt die Methode das View-File nle_uebersicht_view.php und sendet es mit den
Anzeigedaten an den Browser.
newsletterEmpfaengerBearbeiten()
Wird aufgerufen, wenn in der Übersicht Newsletter-Empfänger auf
einen Bearbeiten-Button oder den Button "Newsletter-Empfänger
erfassen" geklickt wird. Lädt das View-File nle_earbeiten_view.php
mit einem Formular für die Eingabe der Daten und sendet dieses an
den Browser.
Parameter:
$idNLE
Identifikationsnummer des Newsletter-Empfängers
newsletterEmpfaengerSpeichern ()
Die Methode ist zuständig für die Validierung und Speicherung der
eingegebenen Daten zum Newsletter-Empfänger (mittels entsprechendem Model). Die Formular- Daten werden zuvor geprüft (Daten
vorhanden, korrekt, Längen, etc.) und gefiltert (xss, trim). Im Fehlerfall wird eine Meldung ausgegeben und das View-File für das Formular neu geladen, ansonsten werden die Daten gespeichert und per
HTTP redirect wieder auf die Übersicht umgeleitet.
_check_select()
Callback-Funktion für die CI-FormValidation-Library. Überprüft ob
aus dem Dropdown-Menu (HTML-select) eine Auswahl getroffen
wurde.
Parameter:
$str
Remo Seiler, MAS-07-02
Enthält die Auswahl als String.
Seite 28 von 124
_check_email_exist()
Callback-Funktion für die CI-FormValidation-Library. Überprüft ob für
die eingegebene Email-Adresse bereits ein anderer NewsletterEmpfänger registriert ist.
Parameter:
$email
newsletterEmpfaengerLoeschen()
Enthält die eingegebene Email-Adresse als String
Wird aufgerufen, wenn in der Newsletter-Empfänger-Übersicht auf
ein Löschen- Symbol geklickt wird. Lädt das View-File confirm_nle_loeschen_view.php (Bestätigung des Löschvorgangs) und
sendet dieses an den Browser.
Parameter:
$idNLE
Identifikationsnummer des Newsletter-Empfängers
newsletterEmpfaengerLoeschenBestaetigen()
Wird aufgerufen, wenn im Bestätigungsformular für das Löschen
eines Newsletter-Empfängers ein Button betätigt wird. Falls der
Löschvorgang bestätigt wurde, wird der Newsletter-Empfänger mittels Model M_newsletter gelöscht.
statistikErstellen()
Wird in GradeBook Release 2 umgesetzt.
berichtErstellen()
Erstellt mittels Library Bericht zum Lernenden dessen Identifikationsnummer übergeben wird einen Bericht als PDF-File und sendet diesen zum Download an den Browser.
Parameter:
$idLernender
Identifikationsnummer des Lernenden
Tabelle 4: Methoden der Klasse Berufsbildner
2.3.2.4 Controller NewsletterAnfrage
Die Controller-Klasse Newsletter-Anfrage ist für die Steuerung der Funktionalitäten für die
Newsletter-Anfragen verantwortlich. Sie wird instantziert, sobald auf der Login-Seite (siehe
Kapitel 2.3.2.1) auf den Link „Newsletter beantragen“ geklickt wird. sie beinhaltet die Controller-Elemente für die Abfrage und Überprüfung der Email-Adresse des Antragstellers, allfällige Registrierung eines neuen Newsletter-Empfängers, Auswahl von Lernenden für Newsletter-Anfragen durch einen bestehenden Newsletter-Empfänger und versenden von AnfrageMails an die entsprechenden Berufsbildner.
Die Klasse erbt von der abstrakten
Controller des CodeIgniter-Frameworks.
class Klasse
Klassendiagramm
«GBController»
New slette rAnfrage
+
+
+
+
+
+
+
+
+
+
+
+
+
NewsletterAnfrage()
index()
emailEingabe()
emailEingabeBestaetigen()
registrierung()
registrierungBestaetigen()
_check_select(str)
_check_captcha(captcha)
_check_email_exist(email)
auswahlLernende()
auswahlLernendeBestaetigen()
_check_session(str)
bestaetigungAnzeigen()
Abbildung 13: Klasse NewsletterAnfrage
Remo Seiler, MAS-07-02
Seite 29 von 124
Methode
Beschreibung
NewsletterAnfrage()
Konstruktor der Klasse NewsletterAnfrage. Ruft den Basisklassenkonstruktor auf und initialisiert das Template für die Anzeige.
index()
Die Methode index() wird vom CI-Front-Controller standardmässig
aufgerufen, falls der Controller NewsletterAnfrage geladen wird ohne
eine Methode anzugeben. index() ruft lediglich die Methode emailEingabe() auf.
emailEingabe()
Wird aufgerufen sobald jemand auf den Link Newsletter beantragen
auf der GradeBook-Login-Seite klickt. Die Methode lädt ein Formular
zur Email-Eingabe und zeigt dieses an.
emailEingabeBestaetigen()
Wird aufgerufen wenn im Email-Eingabeformular auf einen Button
geklickt wird. Validiert die eingegebene Email-Adresse, prüft ob bereits
ein NL-Empfänger mit dieser Adresse vorhanden ist und leitet entsprechend auf das Lernende- Auswählen-Formular oder auf das Registrierungsformular um. Falls die eingegebene Email-Adresse ungültig ist, wird das Formular mit einer Fehlermeldung erneut ausgegeben.
registrierung()
Lädt das View-File nl_registrierung_view.php mit dem Registrierungsformular, erzeugt eine Captcha-Grafik, speichert die Captcha-Daten in
der Session-Tabelle und sendet das View-File an den Browser.
registrierungBestaetigen()
Wird aufgerufen, wenn auf "Senden" oder "Abbrechen" im Registrierungsformular geklickt wird. Validiert die Formulardaten (Korrekte Werte, alle zwingenden Felder vorhanden, Captcha-Zeichen korrekt, xssFilter, ...) und lädt im Fehlerfall das entsprechende View neu, ergänzt
es mit einer Fehlermeldung und sendet dieses erneut an den Browser.
Falls alle Eingaben korrekt sind wird ein neuer Newsletter-Empfänger
mit den Registrierungsdaten erfasst und in der Datenbank abgelegt.
Anschliessend wird das View-File für die Lernenden-Auswahl geladen
und an den Browsergesendet.
_check_select()
Callback-Funktion für die CI-FormValidation-Library. Überprüft ob aus
dem Dropdown-Menu (HTML-select) eine Auswahl getroffen wurde.
Parameter:
$str
_check_captcha()
Enthält die Auswahl als String.
Callback-Funktion für die CI-FormValidation-Library. Überprüft ob die
übergebenen Captcha-Zeichen mit der erzeugten Grafik übereinstimmen.
Parameter:
$captcha
_check_email_exist()
Enthält die eingegebenen Zeichen als String.
Callback-Funktion für die CI-FormValidation-Library. Überprüft ob für
die eingegebene Email-Adresse bereits ein Newsletter-Empfänger
registriert ist.
Parameter:
$email
Enthält die Eingegebene Email-Adresse als String
auswahlLernende()
Generiert eine Tabelle mit allen Lernenden des Berufsbildungscenters
mit Checkbox-Auswahlmöglichkeiten. Lädt anschliessend das ViewFile nl_auswahl_view.php, ergänzt diese mit der Tabelle und weiteren
Informationen und sendet sie an den aufrufenden Browser.
auswahlLernendeBestaetigen()
Wird aufgerufen falls im Lernenden-Auswahl-Formular auf Newsletter
beantragen oder abbrechen geklickt wird. Validiert die eingaben und
Remo Seiler, MAS-07-02
Seite 30 von 124
speichert im Erfolgsfall für jeden Ausgewählten Lernenden eine Newsletter-Anfrage (->m_newsletter). Anschliessend wird zur bestaetigungAnzeigen()-Methode umgeleitet (HTTP-redirect).
_check_session()
Callback-Funktion für die CI-FormValidation-Library. Überprüft ob die
Session noch aktiv oder bereits abgelaufen ist.
bestaetigungAnzeigen()
Generiert eine Liste mit allen ausgewählten Lernenden, lädt das ViewFile nl_bestaetigung_view.php mit dem entsprechenden Bestätigungstext und sendet diese an den Browser.
Tabelle 5: Methoden der Klasse Newsletter-Anfrage
2.3.2.5 Library Bericht
Die Library-Klasse Bericht dient dazu Berichte eines Lernenden als PDF-File zu erstellen.
Die Berichte beinhalten die aktuelle Semesterübersicht und die Übersicht über alle Semester
mit allen Fächern und dazu eingegebenen Noten des Lernenden. Die Berichte können entweder direkt an den Browser gesendet oder als File auf dem Server abgelegt werden um sie
als Email-Anhang verwenden zu können. Die Klasse erbt von der Klasse TCPDF aus der
open source-Library tcppdf [net10]. Letzteres, damit die Funktionalität für das schreiben in
PDF-Files direkt zur Verfügung steht und weil die Header- und Footer-Methoden der Basisklasse überschrieben werden müssen um eigene Kopf- und Fusszeilen im PDF-Dokument
erzeugen zu können.
class Klassendiagramm
«OSLibrary»
TCPDF
+
+
Header()
Footer()
«GBLibrary»
Beri cht
#
#
_CI: var
_idLernender: var
+
+
+
+
+
#
#
#
#
#
Bericht()
Header()
Footer()
generieren(idLernender, open, path, filename)
loeschen(file)
_initBericht()
_tabelleGenerieren(header, data, totwidth, colw, colalign, headerw, sfontc, sfonth)
_lernenderInfosGenerieren(lernender)
_uebersichtSemesterGenerieren()
_uebersichtAlleFaecherGenerieren()
Abbildung 14: Library Bericht mit Basisklasse (tcpdf-Library)
Methode
Beschreibung
Bericht()
Konstruktor der Library-Klasse Bericht. Ruft den Konstruktor der Basisklasse TCPDF mit den benötigten Übergabeparametern auf und lädt alle
für die Berichterzeugung benötigten Models.
Header()
Methode zur Erzeugung der Kopfzeile (Überschriebene Methode der
Basisklasse TCPDF)
Footer()
Methode zur Erzeugung der Fusszeile (Überschriebene Methode der
Remo Seiler, MAS-07-02
Seite 31 von 124
Basisklasse TCPDF)
generieren()
loeschen()
Generiert einen Bericht als PDF-File und ruft dazu die verschiedenen
Hilfs- Methoden auf.
Parameter:
$idLernender
Die Identifikationsnummer des Lernenden
$open
Definiert ob das PDF-File an den Browser gesendet (true) oder auf dem Server gespeichert (false)
werden soll. Default = true
$path
Definiert den relativen Pfad (relativ zum index.php
-root-Verzeichnis) für das File falls es auf dem
Server gespeichert werden soll. Default='berichte/'
$filename
Definiert den Dateinamen falls ein anderer als der
automatisch generierte ('{datum}_Bericht_{name
lernender}.pdf') gewünscht wird (null = automatisch). Default=null.
Löscht das durch den Parameter $file definierte File vom Server. Dient
dazu einen generierten Bericht nach dem Versenden per Mail wieder
vom Server zu löschen.
Parameter:
$file
Zu löschende Datei mit relativem Pfad zum zum
index.php-root-Verzeichnis und komplettem Dateinamen
_initBericht()
Initialisiert ein PDF-File mit allen benötigten Einstellungen (Papierformat,
Ausrichtung, Ränder, Dokumentinformationen, etc.) zum erstellen eines
Berichts.
_tabelleGenerieren()
Generiert eine Tabelle abhängig von den übergebenen Parametern und
von den darzustellenden Zelleninhalten. Die Tabelle wird mit der Multicell-Methode aus der Basisklasse aufgebaut. Die Methode kann universell eingesetzt werden und wird für das Erzeugen beider Tabellenarten
(Semesterübersicht und Gesamtübersicht) verwendet.
Parameter:
Remo Seiler, MAS-07-02
$header
Array aus Strings mit den Inhalten der TabellenHeader-Zeile.
$data
Array aus Arrays mit den Inhalten aller Zeilen. Pro
Zeile ist ein Array enthalten, in dem für jede Spalte ein String mit dem Zelleninhalt enthalten ist.
$totwidth
Gesamte Tabellenbreite in [mm]. Aus ihr werden
die Spaltenbreiten berechnet, da diese relativ (als
Faktor) übergeben werden. Wenn der Wert 0
übergeben wird, gilt die gesamte Seitenbreite
(ohne Ränder) als Tabellenbreite.
$colw
Array aus Doubles welche die Spaltenbreiten
definieren. Werte sind als Faktoren zu verstehen
(zwischen 0-1) die Mit der gesamtbreite/Anzahl
Spalten verrechnet werden. Die Summe der Faktoren sollte sinnvollerweise 1 ergeben.
$colalign
Array aus Strings mit den Ausrichtungs-Symbolen
(Buchstaben L, R, C) für jede einzelne Spalte.
Siehe dazu auch Multicell-Methode der Klasse
TCPDF.
Seite 32 von 124
_lernenderInfosGenerieren()
$headerw
Array aus Doubles welche die Spaltenbreiten der
Header-Zeile definieren. Werte sind als Faktoren
zu verstehen (zwischen 0-1) die mit der gesamtbreite/Anzahl Spalten verrechnet werden. Die
Summe der Faktoren sollte sinnvollerweise 1
ergeben. Falls headerw = null wird die gleiche
Breite wie bei den Datenzeilen angenommen
(Default)
$sfontc
Schriftgösse für Datenzeilen. Default=9
$sfonth
Schriftgrösse für Header-Zeile. Default=7
Der Methode werden die Daten eines Lernenden in einem Array übergeben und sie generiert daraus den PDF-Teil mit den persönlichen Informationen zum Lernenden.
Parameter:
$lernender
Array mit Daten des Lernenden (siehe
m_lernender ->get_LernenderInfos() )
_uebersichtSemesterGenerieren()
Liest mittels der entsprechenden Models die Semester, Fach und Notendaten des Lernenden aus der Datenbank, generiert daraus eine Tabelle mit der Semesterübersicht (aktuelles Semester) und fügt diese im
PDF-File ein.
_uebersichtAlleFaecherGenerieren()
Liest mittels der entsprechenden Models die Semester, Fach und Notendaten des Lernenden aus der Datenbank, generiert daraus Tabellen
mit den Gesamtübersichten (alle Semester, alle Fächer und alle Noten)
und fügt diese im PDF-File ein.
Tabelle 6: Methoden der Klasse Newsletter-Anfrage
2.3.2.6 CodeIgniter-Klassen
class Klassendiagr...
«CodeIgniter»
Controller
Die Klasse Controller ist die Basisklasse für alle GradeBook-Controllerklassen. Sie wird vom
CodeIgniter-Framework (siehe Kapitel 2.1.2.2) zur Verfügung gestellt und bietet verschiedene grundlegende Funktionalitäten, dieclass
vonKlassendiagr...
allen Controllern benötigt werden.
«CILibrary»
Sess ion
Die Session-Klasse ist eine CodeIgniter-Library die das gesamte Handling mit SessionDaten übernimmt. Sie arbeitet mit eigenen Methoden und nicht mit den nativen php-SessionFunktionen. Ein grosser Vorteil dieser Session-Klasse ist, dass Sie viele Funktionalitäten wie
zum Beispiel die Verschlüsselung von Cookie-Daten und das Ablegen der kompletten Session-Daten in einer Datenbank-Tabelle zur Verfügung stellt. So kann für die sensiblen Daten
die in der Session abgelegt werden grösstmögliche Sicherheit gewährleistet werden.
Remo Seiler, MAS-07-02
Seite 33 von 124
2.3.3
Model Designklassen
Im Klassendiagramm in Abbildung 15 sind die erstellten Model-Klassen und deren Assoziationen zu den verwendeten Libraries dargestellt. Wie
auch im Controller-Klassendiagramm (siehe Kapitel 2.3.2) werden hier nicht alle Attribute und Methoden dargestellt. Die Assoziationen der Models
zu den Controllern sind unter anderem in der Dynamischen Analyse genauer erläutert. Die Beschreibungen der einzelnen Klassen folgen in den
nachfolgenden
Unterkapiteln.
class Klassendiagramm Model
«OSLibrary»
Ldap
«GBModel»
M_new s letter
«GBModel»
M_benutzer
«GBModel»
M_login
verwendet
+
+
+
#
verwendet
1
+
#
0..* +
+
+
«GBModel»
M_berufs bildner
+
+
+
+
+
+
+
+
+
+
+
+
«GBModel»
M_e ma il
TCPDF
«GBLibrary»
Klassendiagram m Controller::
Beri cht
M_login()
authentifizierung(Benutzername, Passwort)
update_Benutzerdaten(Benutzername, newData)
get_BenutzerdatenLdap(Benutzername)
M_berufsbildner()
get_Lernende(idBerufsbildner, zugeteilt)
get_idBerufsbildner(Benutzername)
get_DatenBerufsbildner(idBerufsbildner)
add_Lernender(idBerufsbildner,
idLernender)
remove_Lernender(idBerufsbildner,
idLernender)
get_BerufsbildnerZuLernenden(lernende)
M_benutzer()
get_Benutzer(Benutzername)
get_idBerufsgruppe(Berufsgruppe)
get_loginStatus(idBenutzer, idBenutzergruppe)
logoff_Andere(idSession)
«Abstract / CI»
Model
M_email()
send_email(email, anhang)
send_nlaAblehnen(idNLE, idAnfragen)
send_notenNewsletter(idLernender, mAbschluss,
notenErhalten)
send_anfrageMails(berufsbildner, idNLE)
«GBModel»
M_lernender
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
M_newsletter()
add_nlAbonnement(idLernender, idNLE)
delete_nlAbonnement(idLernender, idNLE)
add_nlAnfrage(idLernender, idNLE, ipAdresse)
delete_nlAnfrage(idLernender, idNLE)
confirm_nlAnfrage(idAnfrage, confirm)
add_nlEmpfaenger(daten)
update_nlEmpfaenger(idNLE, data)
delete_nlEmpfaenger(idNLE)
get_nlAnfragen(idBerufsbildner, idNLE)
get_AnzahlNlAnfragen(idBerufsbildner)
get_idAnfrage(idLernender, idNLE)
get_nlAnfrage(idAnfrage)
get_nlEmpfaengerLernender(idLernender, zugeteilt)
get_AlleNlEmpfaenger()
get_LernendeNlEmpfaenger(idNLE)
get_nlEmpfaenger(idNLE)
get_idNLE(email)
«GBModel»
M_fach
M_lernender()
get_AktuellesSemester(idLernender)
get_AlleLernende()
get_Daten(idLernender)
get_idLernender(Benutzername)
get_Berufsgruppe(idLernender)
get_Monatsabschluss(idLernender)
set_Monatsabschluss(idLernender, notenErhalten)
«GBModel»
M_sem ester
+
+
+
+
+
M_semester()
get_Faecher(idSemester)
get_idSemester(idLernender, Nummer)
add_Fach(idSemester, idFach)
remove_Fach(idSemester, idFach)
+
+
+
+
+
+
+
M_fach()
get_alleFaecher(idBerufsgruppe,
idLernender)
get_alleFaecherLernender(idLernender)
get_Infos(idFach)
get_Noten(idSemester, idFach)
get_Durchschnitt(idSemester, idFach)
add_Neu(idLernender, fachName)
«GBModel»
M_note
+
+
+
+
+
+
+
M_note()
add_NeueNote(note, idSemester, idFach)
update_Note(idNote, note)
delete_Note(idNote)
get_Notengewichte()
get_Notentypen()
get_NotenDaten(idNote)
Abbildung 15: Systemklassendiagramm Models
Remo Seiler, MAS-07-02
Seite 34 von 124
2.3.3.1 Beschreibung der Klassen
Das Einsatzgebiet und der Zweck der einzelnen Model-Klassen und Libraries wird in der
nachfolgenden Tabelle 7 erläutert (mit Ausnahme der Library Bericht, siehe dazu Kapitel
2.3.2.5). Aufgrund der grösstenteils selbsterklärenden Namensgebung der einzelnen ModelMethoden, wird aber auf deren detaillierte Beschreibung verzichtet. Die Methoden werden im
Source-Code ausführlich kommentiert und können bei Bedarf dort genauer studiert werden.
Klasse
class
Klassendiagramm Model
«Abstract / CI»
Model
class Klassendiagramm Model
«GBModel»
M_login
+
+
+
#
M_login()
authentifizierung(Benutzername, Passwort)
update_Benutzerdaten(Benutzername, newData)
get_BenutzerdatenLdap(Benutzername)
class Klassendiagramm Model
«GBModel»
M_e ma il
+
#
+
+
M_email()
send_email(email, anhang)
send_nlaAblehnen(idNLE, idAnfragen)
send_notenNewsletter(idLernender, mAbschluss,
notenErhalten)
send_anfrageMails(berufsbildner,
idNLE)
class+ Klassendiagramm
Model
«GBModel»
M_berufs bildner
+
+
+
+
+
M_berufsbildner()
get_Lernende(idBerufsbildner, zugeteilt)
get_idBerufsbildner(Benutzername)
get_DatenBerufsbildner(idBerufsbildner)
add_Lernender(idBerufsbildner,
idLernender)
+ remove_Lernender(idBerufsbildner,
idLernender)
get_BerufsbildnerZuLernenden(lernende)
class+ Klassendiagramm
Model
«GBModel»
M_lernender
+ M_lernender()
+ get_AktuellesSemester(idLernender)
+ get_AlleLernende()
+ get_Daten(idLernender)
+ get_idLernender(Benutzername)
+ get_Berufsgruppe(idLernender)
+ get_Monatsabschluss(idLernender)
set_Monatsabschluss(idLernender,
notenErhalten)
class+ Klassendiagramm
Model
«GBModel»
M_sem ester
+
+
+
+
+
M_semester()
get_Faecher(idSemester)
get_idSemester(idLernender, Nummer)
add_Fach(idSemester, idFach)
remove_Fach(idSemester, idFach)
Remo Seiler, MAS-07-02
Beschreibung
Die Klasse Model ist die Basisklasse für alle GradeBook-Modelklassen. Sie wird vom CodeIgniterFramework (siehe Kapitel 2.1.2.2) zur Verfügung gestellt und bietet verschiedene grundlegende Funktionalitäten, die von allen Modeln benötigt werden.
Verantwortlich für den Zugriff über LDAPs (SSL) auf die
DomainController des BBCnet-ADS mittels der open source-Library adLDAP. Dies wird verwendet für die Authentifizierung von Benutzern und für das Auslesen der im ADS
für diese Benutzer erfassten Daten. Zudem werden diverse
Datenbankzugriffe realisiert um Benutzer erfassen und
deren Daten aktualisieren zu können.
Verantwortlich für die Generierung und Versendung aller
Email-Nachrichten aus GradeBook. Das Model verwendet
dazu die CodeIgniter-Library Email und versendet die
Nachrichten über den SMTP-Server des Berufsbildungscenters und mit dem Konto
[email protected]
Stellt Methoden für die Daten des Benutzers Berufsbildner
zur Verfügung. Mit dem Model können aus der GradeBookDatenbank Daten zu den Lernenden die dem Berufsbildner
zugeteilt sind oder Daten zum Berufsbildner selbst verarbeitet (gelesen oder verändert) werden.
Stellt Methoden für die Daten des Benutzers Lernender zur
Verfügung. Mit dem Model können aus der GradeBookDatenbank Daten zu den Lernenden, deren Semester,
Monatsabschlüsse etc. verarbeitet (gelesen oder verändert)
werden.
Stellt Methoden für die Daten der Semester zur Verfügung.
Mit dem Model können aus der GradeBook-Datenbank
Daten zu Semestern und zu Fächern die dem Semester
zugeteilt sind verarbeitet (gelesen oder verändert) werden.
Seite 35 von 124
class Klassendiagramm Model
«GBModel»
M_fach
+
+
M_fach()
get_alleFaecher(idBerufsgruppe,
idLernender)
+ get_alleFaecherLernender(idLernender)
+ get_Infos(idFach)
+ get_Noten(idSemester, idFach)
+ get_Durchschnitt(idSemester, idFach)
add_Neu(idLernender,
class+ Klassendiagramm
ModelfachName)
«GBModel»
M_note
+ M_note()
+ add_NeueNote(note, idSemester, idFach)
+ update_Note(idNote, note)
+ delete_Note(idNote)
+ get_Notengewichte()
+ get_Notentypen()
get_NotenDaten(idNote)
class+ Klassendiagramm
Model
«GBModel»
M_new s letter
+ M_newsletter()
+ add_nlAbonnement(idLernender, idNLE)
+ delete_nlAbonnement(idLernender, idNLE)
+ add_nlAnfrage(idLernender, idNLE, ipAdresse)
+ delete_nlAnfrage(idLernender, idNLE)
+ confirm_nlAnfrage(idAnfrage, confirm)
+ add_nlEmpfaenger(daten)
+ update_nlEmpfaenger(idNLE, data)
+ delete_nlEmpfaenger(idNLE)
+ get_nlAnfragen(idBerufsbildner, idNLE)
+ get_AnzahlNlAnfragen(idBerufsbildner)
+ get_idAnfrage(idLernender, idNLE)
+ get_nlAnfrage(idAnfrage)
+ get_nlEmpfaengerLernender(idLernender, zugeteilt)
+ get_AlleNlEmpfaenger()
+ get_LernendeNlEmpfaenger(idNLE)
+ get_nlEmpfaenger(idNLE)
get_idNLE(email) Model
class+ Klassendiagramm
«GBModel»
M_benutzer
+ M_benutzer()
+ get_Benutzer(Benutzername)
+ get_idBerufsgruppe(Berufsgruppe)
+ get_loginStatus(idBenutzer, idBenutzergruppe)
+ logoff_Andere(idSession)
class Klassendiagramm Model
«OSLibrary»
Ldap
Stellt Methoden für die Daten der Fächer zur Verfügung.
Mit dem Model können Daten aus der GradeBookDatenbank zu Fächern, zu Noten die spezifischen Fächern
(resp. FachSemester-Kombinationen) zugeteilt sind und zu
Durchschnitten derselben verarbeitet werden.
Stellt Methoden für die Verarbeitung von Notendaten zur
Verfügung. Mit ihr werden einzelne Noten gespeichert,
aktualisiert, gelöscht und auf die Noten-relevanten zusätzlichen Daten zugegriffen (Notentypen, Notengewichte,
Durchschnitte, ...).
Stellt Methoden für die Verarbeitung der Daten zu Newsletter-Empfängern, deren Newsletter-Abonnementen und
allfälliger Newsletter-Anfragen zur Verfügung.
Dient dazu die Datenbank-Tabelle Benutzer abzubilden
und die Identifikationsnummer einer Berufsgruppe aus der
Datenbank zu lesen. letzteres wird im Model M_login verwendet. Zudem stellt M_benutzer Möglichkeiten für die
Anmeldestatus-Überprüfung und das automatische abmelden von Benutzern (verhindern von MehrfachAnmeldungen am System) zur Verfügung.
Dient für alle LDAP Zugriffe auf die Domaincontroller des
BBCnet (über SSL).
Die Library Ldap entspricht der open source Library adLDAP wurde aber wegen CodeIgniter eigenen Namenskonventionen umbenannt. Ausserdem wurden die Konfigurationen für den Zugriff auf die Domaincontroller des BBCnet
direkt in der Library definiert und kleine Anpassungen für
den Einsatz in CodeIgniter vorgenommen.
Die Library adLDAP selbst wurde von Scott Barnett und
Richard Hyland geschrieben und unter der „GNU Lesser
General Public“ - Lizenz (Version 2.1) veröffentlicht. Alle
weiteren Informationen zu dieser Library sind unter [net11]
zu finden
Tabelle 7: Model-Klassen
Remo Seiler, MAS-07-02
Seite 36 von 124
2.3.4
View
Da die optische Gestaltung für eine Webapplikation von zentraler Bedeutung ist, muss dieser
bei der Analyse der Präsentationsschicht eine entsprechend hohe Beachtung geschenkt
werden. In der Anforderungsspezifikation wurde festgelegt, dass die Bedienung der Benutzerschnittstellen intuitiv sein muss und so einfach wie möglich gehalten werden soll. Diese
Bedingungen sprechen für einen simplen und allgemein bekannten Aufbau der Interfaces
und ein „Look & Feel“, dass dem Benutzer von Beginn weg vertraut ist. Im nachfolgenden
Kapitel wird beschrieben wie dieses Layout definiert ist.
2.3.4.1 Aufbau und Layout
Um das Layout und die Farbkonzepte mit den Stakeholdern diskutieren zu können, wurde
ein Prototyp für die Benutzerinterfaces des Berufsbildners und des Lernenden erstellt. Da
der Prototyp möglichst unabhängig zu einer späteren Implementierung sein soll, wurde er
nicht in einem Webdesign-Tool sondern der Einfachheit halber in MS Excel erstellt. Im Prototyp wurden die Farbzusammenstellungen, die Platzierung der Elemente und die wichtigsten
Masse (in Pixel) festgelegt (siehe Abbildung 16).
627 Pixel
128 Pixel
5 Pixel
33 Px
berfsbildungscenter.ch
GradeBook
Postion: link1 >> link2 >> link3
Navigation
Menupunkt1
Infobalken (eingeblendet z.B. wenn Monatsabschluss fällig)
Menupunkt2
min. 460 Pixel (abhängig vom Inhalt)
Menupunkt3
Titel des Seiteninhalts (z.B. Semester Nummer xy)
Logout
Seiteninhalt (z.B. Semester-Übersichts-Tabelle)
Abbildung 16: Prototyp Webseiten-Layout
Die Ausmasse des Benutzerinterfaces wurden so gewählt dass die Anzeige auch mit einer
kleinen Bildschirmauflösung von 800x600 Pixeln noch ohne horizontales Scrollen möglich ist
(für die gängigen Browser müssen auch der Fensterrand und die vertikalen Scroll-Balken mit
einkalkuliert werden).
Remo Seiler, MAS-07-02
Seite 37 von 124
Bei der Farbzusammenstellung für die Webseite wurde darauf geachtet ein möglichst einheitliches Konzept zu definieren, dass aus blau- und grau-Tönen besteht. Behilflich war dabei auch das Online-Tool „kuler“ von Adobe [net12]. Farblich etwas aus dem Rahmen fällt
der rote Hintergrund des Info-Balkens. Dies wurde aber bewusst so gewählt um eine gewisse Signalwirkung zu erzielen. Die gewählten Hintergrundfarben sind in Tabelle 8 mit den zugehörigen RGB-Werten (dezimal) aufgeführt.
Rot
Grün
Blau
Hintergrund Gesamtseite
49
49
49
Hintergrund Menu-Container
123
125
140
Hintergrund Menu-Spalte
79
129
189
Hintergrund Titel-Zeile
184
204
228
Hintergrund Inhalt
247
243
255
Hintergrund Info-Balken
255
0
0
Tabelle 8: Hintergrundfarben GradeBook
Gemäss dem CD des Berufsbildungscenters ist die Schriftart Arial für alle öffentlichen Auftritte Pflicht. Dementsprechend wurde diese Schriftart gewählt. Die einzelnen Schriftdekorationen und Schriftgrössen können hier noch nicht festgelegt werden, da sie stark vom einsatzort im Benutzerinterface abhängig sind. Die wichtigsten Schriftarten wurden aber bereits definiert und sind in Tabelle 9 ersichtlich.
Rot
Grün
Blau
Schriftfarbe dunkler Hintergrund
255
255
255
Schriftfarbe heller Hintergrund
0
0
0
Schriftfarbe Hyperlink
0
0
255
Schriftfarbe Hyperlink Hoover
0
153
153
Tabelle 9: Schriftfarben GradeBook
2.3.4.2 Layout mit Cascading Style Sheets
Das Gesamte Layout der Webseite soll mittels CSS aufgebaut werden und nicht mit blinden
Tabellen wie das früher üblich war oder wie dies häufig noch von Wysiwyg-Editoren umgesetzt wird. Ein CSS-Layout ist robuster, wartbarer, moderner und ermöglicht einfache Erweiterungen für andere Darstellungsarten wie zum Beispiel mobile Browser (für Mobiltelefone).
Die einzigen Bereiche, die der Einfachheit halber noch mit blinden Tabellen positioniert werden, sind Eingabe-Formulare.
Für die Verschiedenen Webseiten von GradeBook mit unterschiedlichen Layouts, müssen
nun also die folgenden Stylesheets erzeugt werden:
login.css für die Startseite
layout.css für die Benutzerinterfaces des Berufsbildners und des Lernenden
nlAbonnement.css für die Newsletter-Antrags-Seiten
email.css für Alle HTML-Email-Inhalte
Remo Seiler, MAS-07-02
Seite 38 von 124
Zudem wird noch ein Stylesheet tabellen.css erstellt, das für die Datentabellen in den
verschiedenen Benutzerinterfaces verantwortlich ist.
Am Beispiel der Benutzerinterfaces für Berufsbildner und Lernender soll nun der Prinzipielle
Aufbau des Layouts verdeutlicht werden (Stylesheet layout.css). Die grobe Struktur wird
mittels HTML-div-Container-Elementen realisiert. Da die einzelnen Struktur-Elemente nur
einmal pro Seite vorkommen, werden für die Identifikation die id- und nicht die KlassenAttribute verwendet. In Abbildung 17 sind die wichtigsten div-Container mit ihrer Position und
Bezeichnung dargestellt.
div id=logoleft
div id=logotop
berfsbildungscenter.ch
div id=topbar
div id=infobar
div id=content
div id=sidebar
div id=menucontainer
div id=container
Abbildung 17: Layout der Webseiten mittels HTML-div-Container
Ein Problem, dass das Layout mit Cascading Style Sheets mit sich bringt ist, dass die Unterschiedlichen Browser den CSS-Standard nicht alle komplett umsetzen oder unterschiedlich
interpretieren. Die Browser mit den grössten Differenzen zum Standard sind die Versionen
des MS Internet-Explorers bis und mit Version 7 (Version 8 ist besser geworden). Da diese
Browser gleichzeitig aber auch die am weitesten verbreiteten sind, muss bei der Codierung
der CSS-Files speziell darauf geachtet werden.
Erste Tests und umfangreiche Internet-Recherchen haben ausserdem ergeben, dass zwei
Div-Spalten die nebeneinander angeordnet werden (mittels float=left oder ähnlich) bei dynamischer Höhe (inhaltsabhängig) Probleme bereiten. Es ist leider mit dem aktuellen CSSStandard nicht möglich, für beide Spalten die gleiche Höhe zu erreichen wenn sich die Höhe
einer der beiden ändert (auch nicht wenn sie im gleichen Container untergebracht sind und
die Höhe als 100% angegeben wird). Um das geplante Layout trotzdem umsetzen zu könRemo Seiler, MAS-07-02
Seite 39 von 124
nen, wird ein einfacher Trick angewendet: Eine kleine Graphik (balken1.gif) welche die
gesamte Breite der beiden Spalten abdeckt, wird als Hintergrund des übergeordneten Containers verwendet und in diesem über die gesamte Höhe wiederholt. So entsteht der Eindruck von zwei Spalten und die Höhe der beiden echten Spalten spielt keine Rolle mehr (die
höhere der Beiden bestimmt die gesamte Höhe).
Für die Analyse und später auch für die Entwicklung der Stylesheets ist die Quelle [net13] als
Referenz sehr zu empfehlen. Viele Beispiele und Informationen finden sich auch unter
[net14].
2.3.4.3 Templates
Durch die Beschreibungen des vorangehenden Kapitels fällt auf, dass die Benutzerinterfaces
des Berufsbildners und des Lernenden vom Aufbau her identisch sind. Da für beide Benutzer
verschiedene Seiten vorgesehen sind, stellt sich die Frage, ob jeweils für jede Seite ein
View-File mit dem kompletten Strukturellen Inhalt notwendig ist.
Um dies zu optimieren und Redundanzen zu vermeiden wurde eine open source TemplateLibrary zu CodeIgniter evaluiert. Mit dieser können Master-Templates erstellt werden und für
die jeweiligen Bereiche einzelne View-Files.
Nachfolgend die beiden in GradeBook benötigten Templates:
template.php -> Master-Template für alle Seiten der Benutzer Berufsbildner und
Lernender.
template_nl.php -> Master-Template für alle Seiten im Zusammenhang mit dem
Newsletter-Anfrage-Vorgang
Für die Benutzer Lernender und Berufsbildner werden ausserdem die Menu-View-Files (menu_berufsbildner_view.php, menu_lernender_view.php) standardmässig in die Templates
geladen, da sie nicht dynamisch angepasst werden müssen.
2.3.4.4 Navigation und View-Files
In den Zustandsdiagrammen der nachfolgenden Kapitel wird analog zu den HMIBeschreibungen der Anforderungsspezifikation [dok2] die Navigation auf den Internetseiten
von GradeBook dargestellt. Die kleinen Änderungen zur ursprünglichen Spezifikation die sich
während der Designphase aufgedrängt haben, sind in den Diagrammen mit entsprechenden
Kommentaren versehen. Änderungen haben sich allgemein aber vor allem bei den Darstellungen von Fehlermeldungen in Formularen ergeben. Diese werden nicht wie ursprünglich
geplant auf einer jeweils neuen Seite dargestellt, sondern direkt im entsprechenden Formular
und zu den jeweiligen Feldern. Das Formular wird dazu jeweils mit den bereits eingegebenen
Daten neu geladen und ergänzt mit einer rot dargestellten Fehlermeldung.
Zu bemerken gilt auch, dass die dargestellten View-Files teilweise komplette HTML-Seiten
repräsentieren und teilweise nur Bereiche einer solchen, falls für die entsprechende Seite ein
Master-Template vorhanden ist (siehe auch Kapitel 2.3.4.3).
Das Laden und Übermitteln der View-Files zum aufrufenden Browser, übernehmen die dafür
verantwortlichen Controller-Methoden (siehe Kapitel 2.3.2). Letztere werden entweder durch
anklicken eines entsprechenden Links in der HTML-Seite aufgerufen oder durch einen vom
Server ausgelösten HTTP redirect (Umleitung via URL zu einer neuen Controller-Methode).
Remo Seiler, MAS-07-02
Seite 40 von 124
2.3.4.4.1 Navigation Login
Die Startseite mit dem Login-Formular (gelb hinterlegt) wird beim Aufruf von GradeBook als
erstes geladen. Von dieser Seite aus kann sich ein Benutzer mit Benutzername und Passwort einloggen und gelangt anschliessend je nach Benutzergruppe (Lernender oder Berufsbildner) auf die entsprechende Startseite seines GradeBook-Accounts.
Wenn eine beliebige Person einen Newsletter zu einem Lernenden abonnieren möchte, kann
sie dies ebenfalls von der Login-Seite aus tun, indem Sie den Link „Newsletter abonnieren“
wählt und dann durch den darauf folgenden Anfragevorgang navigiert.
Abbildung 18: Navigation Login und Newsletter-Abonnement anfragen
2.3.4.4.2 Navigation Lernender
Sobald sich ein Lernender eingeloggt hat, gelangt er zur Semesterübersicht, der Startseite
seines Accounts (gelb hinterlegt). Auf dieser Seite kann der Lernende zwischen den einzelnen Semestern vor- und zurück-navigieren, was ein erneutes Laden der Semesterübersicht
mit dem neu gewählten Semester zur Folge hat. Zudem kann der Lernende „Semester bearbeiten“ wählen um auf die Bearbeitungs-Seite des jeweils angezeigten Semesters zu gelangen und diesem dort Fächer hinzuzufügen oder solche zu entfernen.
Remo Seiler, MAS-07-02
Seite 41 von 124
Falls der Lernende in der Semesterübersicht auf den Namen eines Fachs klickt (diese sind
Navigations-Links) gelangt er in die Notenübersicht zum entsprechenden Fach, wo er Noten
eingeben, bearbeiten und entfernen kann.
Auf der Semesterübersichtsseite wird falls der aktuelle Monatsabschluss fällig ist ein rot hinterlegter Informations-Balken angezeigt (monatsabschluss_info_view.php). Durch klicken auf den Button „Monat abschliessen…“ in diesem Balken gelangt der Lernende auf das
entsprechende Monatsabschluss-Formular. Hinweis: Auf letzteres kann nur in diesem Zusammenhang navigiert werden.
Einen Bericht als PDF-File kann der Lernende erstellen, indem er auf den entsprechenden
Link im Navigationsmenu klickt. Der Bericht wird nicht wie in der Anforderungsspezifikation
[dok2] geplant in einem neuen Browserfenster geöffnet, sondern zum Download angeboten.
Dies ist sinnvoller, da dies für den Benutzer einfacher nachvollziehbar ist durch die mögliche
Auswahl von Speichern oder Öffnen. Klickt der Benutzer im Download-Fenster des Browsers
auf „Öffnen“, führt dies ausserdem zu einem vergleichbare Resultat wie das geforderte.
Abbildung 19: Navigation Benutzerinterface Lernender
2.3.4.4.3 Navigation Berufsbildner
Sobald sich ein Berufsbildner eingeloggt hat, gelangt er zu Übersicht über die ihm zugeteilten Lernenden. Auf dieser Seite hat der Berufsbildner die Möglichkeit „Meine Lernende Bearbeiten…“ zu wählen und gelangt so auf eine Bearbeitungsseite, auf der er sich Lernende
zuteilen oder bereits zugeteilte wieder entfernen kann. Eine kleine Änderung gegenüber der
Remo Seiler, MAS-07-02
Seite 42 von 124
Anforderungsspezifikation ist hier noch, dass die jeweiligen Änderungen nicht erst bei einer
Bestätigung gespeichert werden, sondern direkt nach jeder Zuteilung oder Entfernung. Dies
macht mehr Sinn, da mit einer Änderung ja keine Daten verloren gehen können (Die Lernenden können z.B. nach einem Entfernen ohne Datenverlust auch wieder hinzugefügt werden).
Falls der Berufsbildner in der Lernender-Übersicht auf den Namen eines Lernenden klickt,
gelangt er in die Detail-Ansicht dieses Lernenden. Auf dieser Seite kann er Detaillierte Informationen zum Lernenden abrufen (Semesterübersichten, persönliche Daten, Statusinformationen, …), einen Bericht zum Lernenden in PDF-Form erstellen oder die NewsletterAbonnemente des Lernenden verwalten.
Der Berufsbildner hat ausserdem die Möglichkeit im Navigationsmenu verschiedene Punkte
zu wählen. Mit „Newsletter-Anfragen“ gelangt er in die Übersicht aller offenen NewsletterAnfragen zu den ihm zugeteilten Lernenden. Mit „Newsletter-Empfänger“ gelangt er auf die
Übersicht über alle im System erfassten Newsletter-Empfänger und kann dort neue Empfänger erfassen und solche löschen oder bearbeiten.
Abbildung 20: Navigation Benutzerinterface Berufsbildner
Remo Seiler, MAS-07-02
Seite 43 von 124
2.4
Dynamische Analyse
Für die Interaktions-Analyse der Klassen-Struktur wurden verschiedene Sequenzdiagramme
erstellt. Sie dienen hauptsächlich dazu, die Interaktion zwischen Controller und Model darzustellen und verdeutlichen, welche Daten zu welchem Zeitpunkt ermittelt werden müssen. In
den Sequenzdiagrammen kommen auch einige deskriptive Stereotypen zum Einsatz um die
Spezialitäten einer Webapplikation zu verdeutlichen. So wurde zum Beispiel die Kommunikation zwischen Client (Benutzer, Lernender, Berufsbildner) und dem jeweiligen Controller auf
dem Server mit <<HTTP request>>, <<HTTP response>> und <<HTTP redirect>> genauer
spezifiziert. So kann verdeutlicht werden, wie die Interaktion mit dem System mittels HTTPProtokoll geschieht. Es gilt noch zu bemerken, dass die Rückgaben der einzelnen Methoden
der Übersicht halber auf den Antwort-Pfeilen dargestellt wurden und nicht bereits beim Methodenaufruf.
Die nachfolgenden Kapitel beinhalten die Sequenzdiagramme für die wichtigsten Abläufe in
GradeBook. Einige Diagramm mit ähnlicher Struktur werden der Übersichtlichkeit halber
nicht aufgeführt.
2.4.1
Login (alle Benutzer)
Das Sequenzdiagramm in Abbildung 21 zeigt den Ablauf des Authentifizierungsvorgangs
eines beliebigen Benutzers.
Abbildung 21: Sequenzdiagramm Login
Remo Seiler, MAS-07-02
Seite 44 von 124
2.4.2
Semesterübersicht (Lernender)
Sobald sich ein Lernender erfolgreich am System angemeldet hat, gelangt er zur Semesterübersicht. Diese kann aber auch im späteren Programmverlauf durch Auswahl der entsprechenden Links aufgerufen werden. Die Auswahl eines Semesters im Sequenzdiagramm
ebenfalls enthalten, dieser geschieht durch die Übergabe einer entsprechenden Semesternummer an die Methode semesterUebersicht(), was wiederum durch einen entsprechenden Link einer HTML-Seite realisiert wird. Falls eine ungültige Semesternummer (resp.
z.B. der Wert 0) übergeben wird, wird das aktuelle Semester des Lernenden ermittelt und
dieses ausgegeben.
Das Sequenzdiagramm in Abbildung 22 zeigt nun den chronologischen Ablauf für die Ermittlung aller für die Semesterübersicht benötigten Daten. Die Umsetzung der Daten in Entsprechende HTML-Tabellen wird hier nicht dargestellt. Letzteres geschieht aber ebenfalls in der
Methode semesterUebersicht():
Abbildung 22: Sequenzdiagramm Semesterübersicht (Lernender)
Remo Seiler, MAS-07-02
Seite 45 von 124
2.4.3
Semester bearbeiten (Lernender)
Der Lernende kann ein in der Semesterübersicht angezeigtes Semester bearbeiten. Dazu
klickt er auf den Button „Semester bearbeiten…“ was die Methode semesterBearbeiten() des
Controllers Lernender aufruft. Diese Methode ermittelt alle Daten für das Bearbeitungsformular, generiert dieses und sendet es an den Browser zurück. Für die Datenermittlung wird aus
Sicherheitsgründen nicht die Semester-ID oder Semester-Nummer an die Methode übergeben (via URL) sondern die entsprechenden Daten zuvor in den Session-Daten abgelegt. Zu
Beginn des in Abbildung 23 dargestellten Ablaufs wird dann die Semesternummer aus den
Session-Daten (der Datenbank) ausgelesen und anschliessend alle weiteren, notwenigen
Information.
Abbildung 23: Sequenzdiagramm Formular Semester bearbeiten laden
Nachdem das Bearbeitungsformular angezeigt wurde, kann der Lernende aus zwei Listen
ein oder mehrere Fächer auswählen und das Formular mittels der Buttons hinzufügen („>“)
oder entfernen („<“) absenden. Auch hier wurden aus Sicherheitsgründen keine Identifikationsnummern von Fächern in den Listen des HTML-Formulars abgelegt. Die Listen beinhalten Nummern, welche einer Fach-id entsprechen. Die Zuordnungen dieser Nummern ist in
den Session-Daten (also in der Datenbank) abgelegt und für den Benutzer nicht zugänglich.
Der Benutzer hat somit keine Möglichkeit, die Fach-IDs beliebig zu ändern, indem er beispielsweise die Formulardaten oder die URL ändert. So ist sichergestellt, dass dem Semester nur die Fächer hinzugefügt werden können, welche für den Lernenden vorgesehen sind
und nur solche entfernt werden können, die auch wirklich dem Semester zugeordnet sind.
Das Sequenzdiagramm in Abbildung 24 zeigt den Ablauf einer Bearbeitung (hinzufügen oder
löschen von Fächern).
Remo Seiler, MAS-07-02
Seite 46 von 124
Abbildung 24: Sequenzdiagramm Fächer hinzufügen/entfernen
Remo Seiler, MAS-07-02
Seite 47 von 124
2.4.4
Note eingeben oder bearbeiten (Lernender)
Die Eingabe oder Bearbeitung einer Note ist für den Benutzer Lernender einer der wichtigsten Abläufe. Grundsätzlich funktioniert der gesamte Ablauf ähnlich wie der Ablauf einer Semester-Bearbeitung. Nachdem ein Lernender in der Semesterübersicht ein Fach auswählt
(klicken auf den Fachnamen) wird vorerst eine Übersicht aller Noten zu einem gewählten
Fach angezeigt und aus dieser dann die Bearbeitung gestartet.
Für die Anzeige der Notenübersicht muss der Controllermethode notenUebersicht() das
Fach übergeben werden, zu welchem die Noten angezeigt werden sollen. Auch hier wurden
aus Sicherheitsgründen nur Fachnummern verwendet, die zuvor in der Semesterübersicht
definiert wurden und eine entsprechende Zuordnungstabelle in den Session-Daten aufweisen. Falls der Benutzer trotzdem versucht über die URL ein Fach auszuwählen, dass nicht
seinem Semester zugeteilt wurde, wird er wieder zur Semesterübersicht umgeleitet. Falls
des gültig ist, müssen alle Informationen zum Fach zu den erfassten Noten und zum Notenschnitt aus den Models gelesen werden. Anschliessend generiert die Methode notenUebersicht() die entsprechende View mit einer Notentabelle inkl. Bearbeitungs- und LöschSymbolen und sendet diese an den Browser zurück.
Der gesamte Ablauf ist in Abbildung 25 dargestellt.
Abbildung 25: Sequenzdiagramm Notenübersicht anzeigen
Remo Seiler, MAS-07-02
Seite 48 von 124
Wenn einem Benutzer die Notenübersicht angezeigt wird, kann er auf dieser eine neue Note
erfassen oder eine bereits bestehende bearbeiten. Da die Bearbeitung einer Note im selben
Formular erfolgt wie die Erfassung einer neuen, wird zuerst der Ablauf einer Bearbeitung
beschrieben.
Abbildung 26: Sequenzdiagramm Note bearbeiten
Wie im Sequenzdiagramm (Abbildung 26) ersichtlich, wird auch hier das Prinzip einer Notennummer mit zugehöriger Noten-id in den Session-Daten verwendet (siehe dazu auch Kapitel 2.4.3). Wenn eine gültige Note für die Bearbeitung ausgewählt wurde, werden die entsprechenden Notendaten aus dem Model M_note gelesen und in der Session Flash-Daten
zwischengespeichert. Flash-Daten sind Session-Daten, die nur für den nächsten Serveraufruf gültig sind und anschliessend automatisch gelöscht werden. Somit kann z.B. auch verhindert werden, dass eine Note ein zweites Mal gespeichert wird, falls mittels Zurück-Button
erneut auf das Noteneingabe-Formular navigiert wird.
Nachdem die alte Note in den Session-Daten abgelegt wurde, wird die Controllermethode
noteEingeben() aufgerufen. Letzteres ist auch der Fall, wenn auf der Notenübersicht der
Button „Note hinzufügen…“ gewählt wird.
Das Aufrufen der Controllermethode noteEingeben() führt zum Ablauf der im Sequenzdiagramm in Abbildung 27 dargestellt ist.
Hinweis: die Methode noteEingeben()wird bei jedem Absenden des Formulars in der Notenübersicht aufgerufen und dementsprechend auch wenn der Button „Zurück“ gewählt wird.
Deshalb ist diese Zurück-Funktion im nachfolgenden Sequenzdiagramm ebenfalls enthalten.
Im Sequenzdiagramm ist ersichtlich, dass zuerst überprüft wird, ob eine neue Note eingegeben oder eine alte bearbeitet werden soll. Definiert wird dies durch den Übergabeparameter
$edit. Wenn für Letzteren der Wert true übergeben wird, werden die Notendaten aus den
Session-Daten gelesen. Falls diese nicht vorhanden sein sollten (Fehlerhafter Aufruf des
Remo Seiler, MAS-07-02
Seite 49 von 124
Eingabeformulars, nicht erwünschte Aktualisierung durch den Browser oder ähnlich) erfolgt
aus Sicherheitsgründen eine Umleitung zurück zur Notenübersicht.
Nach der Prüfung und nach dem eventuellen Lesen der alten Notendaten aus der Session,
wird das Eingabeformular erzeugt. Dazu müssen vorerst die Informationen zum Benutzer
und zum Fach ermittelt (wiederum aus den Session-Daten) und anschliessend die Informationen zu Notentypen und zu Notengewichten aus der Datenbank gelesen werden. Die Notentypen und Notengewichte werden benötigt um die entsprechenden Auswahlfelder zu generieren und die Informationen zum Benutzer und zum Fach für die Erzeugung der Hinweise im
Formular („Geben Sie eine Note für das Fach X, Semester Y (Institut Z) ein:“).
Das Sequenzdiagramm in Abbildung 27 zeigt den beschriebenen Ablauf.
Abbildung 27: Sequenzdiagramm Formular Note eingeben
Remo Seiler, MAS-07-02
Seite 50 von 124
Nachdem das Notenformular generiert und angezeigt wurde, kann der Benutzer die Notendaten eingeben (resp. Ändern) und mit betätigen des „Speichern“-Buttons absenden. Nach
dem Absenden wird die Controllermethode noteVerarbeiten() aufgerufen welche die
eingegebenen Daten prüft und bei Gültigkeit mit dem Model M_note speichert. Falls die Notendaten nicht gültig sind, wird erneut die Methode noteEingeben() aufgerufen und das
Formular mit den bereits eingegebenen Daten und einer entsprechenden Fehlermeldung neu
angezeigt.
Ein Sequenzdiagramm dieses Vorgangs und des Vorgangs „Note löschen“ wird hier nicht
aufgeführt, weil die entsprechenden Abläufe relativ simpel sind und auch in der SourceCode-Dokumentation einfach nachvollziehbar sein sollten. Ausserdem soll der Umfang des
Abschlussberichtes nicht unnötig überladen werden.
2.4.5
Monatsabschluss und Noten-Newsletter (Lernender)
Jeder Lernende der GradeBook einsetzt, muss jeweils ende Monat einen Monatsabschluss
tätigen, mit dem er bestätigt, dass er alle Noten eingetragen hat oder im aktuellen Monat
keine Noten erhalten hat. Falls ein Monatsabschluss fällig ist, wird dies in der Semesterübersicht mit einem roten Info-Balken angezeigt. Die Anzeige dieses Balkens ist also Teil der
Semesterübersicht, weswegen im Sequenzdiagramm in Abbildung 28 auch auf diese verwiesen wird (Referenz Semesterübersicht).
Falls der Lernende in dem genannten Info-Balken den Button „Monat abschliessen“ betätigt,
wird der folgende Ablauf injiziert:
Abbildung 28: Sequenzdiagramm Formular Monatsabschluss
Es wird ein Formular für den Monatsabschluss erzeugt, für das verschiedene Daten wie zum
Beispiel die Newsletter-Empfänger des Lernenden benötigt werden (siehe Abbildung 28).
Remo Seiler, MAS-07-02
Seite 51 von 124
Wenn der Lernende das Formular absendet erfolgt der Ablauf wie er im Sequenzdiagramm
(Abbildung 29) dargestellt ist. Als erstes wird überprüft, ob der Monatsabschluss überhaupt
fällig ist (Sicherheitsmassnahme). Wenn dem so ist und im Formular eine Auswahl getroffen
wurde (Noten eingegeben/keine erhalten), wird der Monatsabschluss mit dem Model
M_lernender gesetzt (in der Datenbank gespeichert). Anschliessend werden zum Lernenden ein Bericht erzeugt (PDF-Datei), für alle seine Newsletter-Empfänger ein Email generiert
(mit dem Bericht als Anhang) und diese Mails versendet.
Wie der Controller Lernender und die verwendeten Models in diesem Ablauf interagieren, ist
im Sequenzdiagramm in Abbildung 29 dargestellt.
Abbildung 29: Sequenzdiagramm Monatsabschluss und Noten-Newsletter
Remo Seiler, MAS-07-02
Seite 52 von 124
2.4.6
Details Lernender anzeigen (Berufsbildner)
Da die Abläufe für den Benutzer Berufsbildner in vielen Bereichen denen des Lernenden
ähnlich sind (Beispiel Semester bearbeiten <-> Lernende Bearbeiten), wird an dieser Stelle
exemplarisch nur der Ablauf „Details Lernender anzeigen“ beschrieben.
Falls ein Berufsbildner in der Lernenden-Übersicht auf den Namen eines Lernenden klickt,
wird folgender Ablauf angestossen:
Abbildung 30: Sequenzdiagramm Details Lernender
Im Unterschied zu Lernenden wird der Benutzer Berufsbildner als geringeres Risiko für Angriffe betrachtet. Das führt dazu, dass einige Abläufe etwas vereinfacht werden könne, da
Identifikationsnummern (z.B. des Lernenden) direkt in den HTML-Formularen und Links festgelegt werden können. Somit entfällt das umständliche und Ressourcen-intensive Zwischenspeichern von Zuordnungstabellen in den Session-Daten.
Wie im Sequenzdiagramm dargestellt, werden für die Anzeige von Detailinformationen zu
einem lernenden viele unterschiedliche Informationen aus der Datenbank gelesen. Zu diesem Zweck werden verschiedene Models verwendet, die auch für die Controller des Lernenden zum Einsatz kommen. Zu bemerken gilt es hier noch, dass für die Abfragen im Zusammenhang mit der Semesterübersicht des Lernenden eine Untersequenz eingefügt wurde, da
dieser Ablauf demjenigen der Semesterübersicht entspricht (siehe dazu Kapitel 2.4.2).
Remo Seiler, MAS-07-02
Seite 53 von 124
2.4.7
Newsletter beantragen (beliebige Person)
Auch für das Beantragen eines Noten-Newsletter durch eine beliebige Person soll hier nur
exemplarisch ein Ablauf dargestellt werden.
Das Sequenzdiagramm in Abbildung 31 zeigt das Verhalten des Systems nachdem eine beliebige Person auf der GradeBook-Loginseite den Link „Newsletter abonnieren“ wählt. Wenn
die genannte Aktion stattfindet, wird die index()-Methode des Controllers NewsletterAnfrage aufgerufen. Diese ruft die Controller-Methode emailEingabe() auf welche ein entsprechendes Eingabeformular an den Browser sendet. Im dargestellten Ablauf ist zudem ersichtlich, wie die Arbeit mit einem Formular und das erneute Anzeigen desselben bei ungültigen
Eingaben funktioniert. Falls nämlich der Benutzer das Formular absendet, wird die Methode
emaileingabeBestaetigen() aufgerufen. Diese validiert die Eingaben und ruft im Fehlerfall erneut die Controllermethode emailEingabe() auf (es erfolgt also keine Umleitung
mit http redirect). Im Erfolgsfall wird geprüft ob der Newsletter-Empfänger bereits vorhanden
ist oder nicht und je nach dem auf das Registrierungsformular oder das Auswahlformular für
Lernende umgeleitet.
Abbildung 31: Sequenzdiagramm Email Eingabe
Remo Seiler, MAS-07-02
Seite 54 von 124
2.5
Datenbank
Zur Analyse der Datenbankstruktur wurden vorerst die Geschäftsdaten analysiert und sind
im entsprechenden Klassendiagramm (Geschäftsdatenmodell) in Kapitel 2.5.1 dokumentiert.
Die Abbildung der Klassen in die Tabellen resp. in das Relationen-Modell sind im Kapitel
2.5.2 zu finden. Die Analysierten Inhalte beziehen sich grösstenteils auf die für die Implementierung von GradeBook Release 1 notwendigen Datenstrukturen. Einige Details wurden
aber bereits im Datenbankschema vorgesehen obschon sie im Release 1 noch nicht zum
Einsatz kommen. Dies, weil der nachträgliche Einbau dieser Elemente unter Umständen
grössere strukturelle Änderungen der Datenbank nach sich ziehen würde und die spätere
Verwendung der Elemente bei der Programmierung an verschiedenen Stellen bereits beachtet werden muss.
2.5.1
Geschäftsdatenmodell
Das Geschäftsdatenmodell in Abbildung 32 zeigt welche Daten für die Applikation GradeBook verarbeitet werden müssen und wie sie zueinander in Beziehung stehen. Im Modell
werden zwei Stereotypen verwendet. Zum einen die business-Klassen, welche die zu speichernden Daten repräsentieren und zum anderen die „business constants“, die für Konstant
erfasste Daten wie Berufsgruppen oder Fächer stehen. Die „business constant“-Daten werden mittels Skripts oder DB-Tools direkt in die Datenbank geladen und können vom späteren
Benutzer nicht verändert werden. Falls in GradeBook Release 2 Benutzerinterfaces für die
Veränderung vorerst konstanter Daten erstellt werden (z.B. Fächer festlegen durch Berufsbildner) ändert sich das hier dargestellte Geschäftsdatenmodell dementsprechend.
class Business
«business»
New sletter -Empfänger
1
«business constant»
InstitutX, InstitutY, ...
macht
+
+
+
+
+
+
+
+
+
Email: TEXT
Name: TEXT
Vorname: TEXT
Firma: TEXT
Adresse: TEXT
TelefonG : TEXT
TelefonP : TEXT
TelefonM : TEXT
Bemerkung en: TEXT
«business»
Benutzer
hat
«business constant»
Benutze rgruppe
1
0..*
«business»
New sletter Abonnement
+
+
ipAdresse: TEXT
ZeitDatum: DATETIME
«business»
Institution
«business constant»
GruppeX, Gr uppeY, ...
0..*
«business»
New slette r-Anfrage
1
0..*
+
ZeitDatum: DATETIME
ist in
ist für
ist für
+
+
+
+
+
+
+
+
+
+
Benutzerna me: TEXT
Email-Adre sse: TEXT
Name: TEXT
Vorname: TEXT
Firma: TEXT
Adresse: TEXT
TelefonG : TEXT
TelefonP : TEXT
TelefonM : TEXT
LetzterLogin : DATETIME
ist ein
0..*
ist ein
gehört zu
1
0..*
0..*
«business»
Fa ch
«business»
Seme ster
hat
0..*
«business»
Lerne nder
hat
Semetsernummer: int 8
0..* -
1
0..* +
gehört zu
1
0..*
0..*
Note: DOUBLE
Gewicht: DOUBLE
Typ: TEXT
Erfassungszeitp unkt: DATETIME
ist ein
0..*
«business»
Note
+
+
+
-
0..*
macht
gehört zu
0..*
«business constant»
FachX, Fa chY, ...
0..*
Lehrstart: YEAR
1
«business»
Berufsbildner
ist zuge teilt zu
gehört zu
gehört zu
«business»
Monatsabschluss
+
+
+
+
«business»
DefaultBer ufsbildner
ZeitDatum: DATETIME
Monat: DATETIME
Jahr: DATETIME
NotenErhalte n: BOOLEAN
1
1
gehört zu
«business constant»
Inform atiker
1
«business»
Berufs gruppe
«business constant»
Elektr oniker
«business constant»
Kauffrau - Kaufmann
Abbildung 32: Geschäftsdatenmodell
Remo Seiler, MAS-07-02
Seite 55 von 124
Die meisten Tabellen der Datenbank enthalten Identifikationsnummern als Primärschlüssel,
diese sind im Geschäftsdatenmodell nicht dargestellt.
Alle in diesem Diagramm dargestellten „1 zu n“ - Assoziationen können ohne strukturelle
Anpassungen direkt auf Tabellen des Relationen-Modells abgebildet werden. Für die „n zu
m“-Assoziationen müssen hingegen Verknüpfungstabellen erstellt werden (um mindestens
die 3. Normalform zu erreichen).
An dieser Stelle sei bereits darauf hingewiesen, dass die Benutzer und die NewsletterEmpfänger grösstenteils identische Spalten aufweisen aber aus Performance- und Logikgründen (Applikationssicht) in der Datenbank separat gehalten werden.
Nachfolgend werden die einzelnen Klassen des Geschäftsdatenmodells kurz beschrieben:
Benutzer
Enthält alle persönlichen Informationen eines Benutzers die aus
dem ADS gelesen werden können. Einige Zusätzliche Inhalte
die nicht im ADS erfasst sind, sind ebenfalls enthalten und werden erst im Release 2 von GradeBook zum Einsatz kommen.
Datum und Zeit des letzten Logins eines Benutzers werden direkt beim Benutzer gespeichert.
Benutzergruppe
Beinhaltet die Benutzergruppe welche auch die grundsätzlichen
Benutzerrechte festlegt (Lernender, Berufsbildner, DefaultBerufsbildner, …).
Lernender
Der Lernende ist ein Benutzer. Zum Lernenden wird das Lehrstartjahr erfasst und eine Zuteilung zu seiner Berufsgruppe gespeichert. Der Lernende hat Semester mit Fächern und Noten
und macht Monatsabschlüsse.
Berufsbildner
Der Berufsbildner ist ebenfalls ein Benutzer. Ihm sind Lernende
zugeteilt und er selbst ist einer Berufsgruppe zugeteilt.
Default Berufsbildner
Der DefaultBerufsbildner ist ein spezieller Berufsbildner. Er hat
eine fixe Identifikationsnummer und ihm werden alle neu erfassten Lernenden standardmässig zugeteilt.
Berufsgruppe
Die Berufsgruppe beinhaltet die Konstanten für einzelne Berufe
(Elektroniker, Informatiker, Kauffrau-Kaufmann, evtl. weitere).
Newsletter-Empfänger
Enthält Daten zu einem Newsletter-Empfänger. Obschon die
Daten grösstenteils identisch zu den Benutzerdaten sind, ist aus
Applikationssicht effizienter den NL-Empfänger separat abzulegen. Ein Benutzer kann zwar auch ein NL-Empfänger werden,
ein NL-Empfänger ist aber nicht zwingend ein Benutzer des
Systems (er hat keinen ADS-Account).
Newsletter-Abonnement
Ist eine Zuteilung eines Newsletter-Empfängers zu einem Lernenden (Abonnement) und enthält auch den Erfassungszeitpunkt des Abonnements.
Newsletter-Anfrage
Ist eine Zuteilung eines Newsletter-Empfängers zu einem Lernenden (Anfrage) und enthält auch den Anfragezeitpunkt und
Remo Seiler, MAS-07-02
Seite 56 von 124
die IP-Adresse von der die Anfrage getätigt wurde.
Semester
Jeder Lernende hat 8 Semester mit einer entsprechenden Semesternummer zu welchen er Fächer hinzufügt.
Fach
Jedem Semester werden Fächer zugeordnet. Die Fächer sind
konstant in der Datenbank erfasst und sind einer Institution zugeordnet.
Institution
Die Institutionen sind die konstant erfassten notengebenden
Institutionen (BBC, BMS, GIBB, Prüfungen, etc.). Institutionen
können auch Lehrabschlussprüfungen sein (diese Noten sind
nicht eindeutig einer Institution zuzuweisen.)
Note
Eine Note ist jeweils einem Fach und einem Semester zugeordnet. Die Note enthält den Notenwert, das Notengewicht, den
Notentyp und den Erfassungszeitpunkt der Note.
Monatsabschluss
Beinhaltet die Informationen zu den getätigten Monatsabschlüssen (Der Monat und das Jahr, ob Noten eingegeben wurden
und den Zeitpunkt des Abschlusses)
2.5.2
Relationen-Modell (ERM)
Die Umsetzung des Geschäftsdatenmodells aus Kapitel 2.5.1 in das Relationen-Modell, wird
in diesem Kapitel beschrieben. Zu beachten ist dabei, dass verschiedene Verknüpfungstabellen notwendig sind um die einzelnen Assoziationen korrekt abzubilden. Zudem sind die
Relationen mit den Spalten für die Identifikationsnummern und die Fremdschlüssel ergänzt.
Einige der künstlichen Primärschlüssel (meist Identifikationsnummern) wurden ins Design
aufgenommen, obschon sie nichts mit der abstrakten Beschreibung der Anwendungsobjekte
zu tun haben. Dies dient einerseits dazu, die Schlüssellänge für Fremdschlüssel zu verringern und andererseits wird so sichergestellt, dass jede Relation (auch die Zuordnungstabellen) einen einzelnen und in keiner Weise von anderen Schlüsselkandidaten funktional abhängigen Primärschlüssel besitzen.
Die verwendeten Tabellen sind allesamt InnoDB-Tabellen, damit Constraints möglich werden
und somit die Kaskadierung von Löschvorgängen nicht in der Software gelöst werden muss.
Die Constraints wurden in diesem Sinne auch umgesetzt sind aber im Diagramm nicht speziell aufgeführt.
Die Datenbank ist mit einigen wenigen Ausnahmen in der 3. Normalform gehalten. Einzig bei
Benutzer und Newsletter-Empfänger wurden hier Ausnahmen gemacht. Beispielsweise
könnten die Adressinformationen noch in weitere Tabellen aufgespalten werden um eine
Redundanz komplett zu vermeiden, dies wurde aber zugunsten einer weniger starken Segmentierung der Datenbank nicht gemacht. Eine zu starke Segmentierung würde die Performance senken und die Applikation unnötig komplizieren.
Um den Zugriff durch die Applikation noch zu vereinfachen, könnten für verschiedene Abfragen Views erstellt werden. Views werden aber erst im 2. Release von GradeBook in Betracht
gezogen.
Ein weiterer Hinweis auf Release 2: Die Assoziation der Fach-Relation zu einem Lernenden
wird benötigt falls Lernende eigene Fächer erstellen können. Da dies noch nicht umgesetzt
Remo Seiler, MAS-07-02
Seite 57 von 124
wurde, fehlt die Assoziation im Diagramm, das entsprechende Attribut (idOwner) ist aber
bereits enthalten und wird auf den Standardwert -1 gesetzt (entspricht Besitzer = Alle). Das
Attribut Aktiv ist ebenfalls noch nicht in Verwendung wird aber für die spätere Aktivierung/Deaktivierung eines selbst erstellten Fachs dienen.
class GradeBook
Im Unterschied
zum Geschäftsdatenmodell wurden im Relationen-Modell das Notengwicht
SessionData
und
der Notentyp nun als eigene Relationen definiert. Das ermöglicht die statische Erfassung
«column»
*PK session_id: VARCHAR(40) = 0
dieser
als V ARCHAR(16)
Konstanten
und vermeidet Redundanz (Normalisierung). Ausserdem muss das
*
ip_address:
=0
*
user_agent: VARCHAR(50)
Notengesicht
nicht
nur als Wert, sondern auch als Text gespeichert werden können.
*
last_activity: INT(10)
=0
*
user_dat a: TEXT
Abbildung 33 zeigt das oben beschriebene Relationen-Modell.
Benutzer
New sletter Empfaenger
«column»
*PK idNLE: INTEGER
*
Email: VARCHAR(50)
*
Anrede: VARCHAR(10)
*
Name: VARCHAR(50)
*
Vorname: VARCHAR(50)
Firma: VARCHAR(50)
Strasse: VARCHAR(50)
PLZ: INTEGER
Ort: VARCHAR(50)
TelefonG: VARCHAR(20)
TelefonP: VARCHAR(20)
TelefonM: VARCHAR(20)
Bemerkung en: TEXT
1
«column»
*PK Benutzername: VARCHAR(50) 0..*
*FK idBenutzergru ppe: TINYINT
*
Email: VARCHAR(50)
*
Name: VARCHAR(50)
*
Vorname: VARCHAR(50)
Firma: VARCHAR(50)
Strasse: VARCHAR(50)
PLZ: INTEGER
Ort: VARCHAR(50)
TelefonG: VARCHAR(20)
1
TelefonP: VARCHAR(20)
TelefonM: VARCHAR(20)
*
LetzterLogin : TIMESTAMP
0..*
New slette rAnfrage
«column»
*PK idAnfrage: INTEGER
*FK idNLE: INTEGER
*FK idLernender: INTEGER
*
ipAdresse: VARCHAR(20)
*
zeitDatum: TIMESTAMP
0..*
1
Berufsbildner
«column»
0..*
0..* *PK idBerufsbildner: INTEGER
*FK Benutzername: VARCHAR(50)
*FK idBerufsgruppe: INTEGER
1
1
0..*
New sletter Abonnement
«column»
*PK idAbonnement: INTEGER
*FK idNLE: INTEGER
*FK idLernender: INTEGER
*
zeitDatum: TIMESTAMP
Benutze rgruppe
«column»
1 *PK idBenutzergru ppe: TINYINT
*
Name: VARCHAR(20)
1
0..*
0..*
Lerne nder
0..*
1
1
ZuteilungBe rufsbildner
«column»
1
*PK idLernender: INTEGER
*FK Benutzername: VARCHAR(50)
*FK idBerufsgruppe: INTEGER
*
Lehrstart: YEAR
1
0..*
«column»
*PK idZuteilungBL: INTEGER
*FK idBerufsbildner: INTEGER
*FK idLernender: INTEGER
0..*
8
Monatsabschluss
1
Seme ster
«column»
*PK idMonatsabschluss: INTEGER
0..*
*FK idLernender: INTEGER
*
Monat: TINYINT
*
Jahr: YEAR
*
NotenErhalten: BOOL
*
ZeitDatum: TIMESTAMP
Berufs gruppe
«column»
*PK idSemester: INTEGER
*FK idLernender: INTEGER
*
Semesternumm er: TINYINT
«column»
*PK idBerufsgruppe: INTEGER
Name: VARCHAR(20)
1
1
0..*
0..*
Fa ch
ZuteilungFa chSemester
«column»
*PK idZuteilungFS: INTEGER
*FK idSemester: INTEGER
*FK idFach: INTEGER
Note ntyp
«column»
*PK idNotentyp : TINYINT
*
Name: VARCHAR(20)
1
1
0..*
1
1
«column»
*PK idFach: INTEGER
*
Name: VARCHAR(200)
*FK idBerufsgruppe: INTEGER
*FK idInstitut: INTEGER
*
idOwner: INTEG ER = -1
*
Aktiv: BOOL = true
0..*
0..*
Note
0..*
Notengew icht
«column»
*PK idNotengewicht: TINYINT
*
Wert: DOUBLE
*
Name: VARCHAR(10)
1
«column»
0..* *PK idNote: INTEGER
*FK idZuteilungFS: INTEGER
*
Wert: DOUBLE
*FK idNotengewicht: TI NYINT = 1
*FK idNotent yp: TINYINT = 1
*
zeitDatum: TIMESTAMP
1
Institution
«column»
*PK idInstitut: INTEGER
*
Name: VARCHAR(20)
Abbildung 33: Relationen-Modell Datenbank
Zusätzlich zu den Geschäftsdaten, werden auch die Daten des Session-Handlings in der
Datenbank abgelegt. Dies weil aus Sicherheitsgründen keine Daten für die Steuerung der
Remo Seiler, MAS-07-02
Seite 58 von 124
Applikation und der Datenzugriffe in einem Cookie abgelegt werden sollen (siehe auch Kapitel 2.2.4).
CodeIgniter stellt wie in Kapitel 2.1.2.2 bereits erwähnt eine eigene Session-Library zur Verfügung. Diese setzt eine spezielle Datenbank-Tabelle voraus und legt auch deren Attribute
explizit fest. In Abbildung 34 ist diese Tabelle dargestellt und ersichtlich, dass diese keine
Assoziationen zu weiteren Tabellen aufweist. Die Serialisierung von Daten (z.B. Arrays) und
Speicherung dieser in der Tabelle, wird komplett von der Session-Library übernommen.
class GradeBook
SessionData
«column»
*PK session_id: VARCHAR(40) = 0
*
ip_address: V ARCHAR(16) = 0
*
user_agent: VARCHAR(50)
*
last_activity: INT(10) = 0
*
user_dat a: TEXT
Abbildung 34: Spezielle Tabelle für Session-Handling
In Release 2 von GradeBook sollen zu jedem Lernenden (und evtl. auch Berufsbildner) noch
die Klassenzugehörigkeit zu einer oder mehreren Klassen im BBC und in der Schule Gespeichert werden können. Dieser Sachverhalt wurde analysiert um sicherzustellen, dass mit
der geplanten Datenbankstruktur eine einfache Erweiterung für solche Informationen möglich
ist. Da die entsprechende Umsetzung in der aktuellen Softwareversion noch fehlen wird,
wurden auch die Datenbanktabellen noch nicht erstellt. Abbildung 35 zeigt aber wie die Klasseninformation mittels der Tabelle Klasse und zwei Zuordnungstabellen für den Lernenden in
GradeBook
2 gelöst wird.
dm ER-Diagramm Release
Klassenzuteilung
ER-Diagramm ::Lernender
ZuteilungKlasse
0..*
«column»
*PK idZuteilung KL: BIGINT
*FK idLernender: INTEGER
*FK idKlasse: INTEGER
0..*
«column»
*PK idLernender: INTEGER
1 *FK Benutzername: VARCHAR(50)
*FK idBerufsgruppe: INTEGER
*
Lehrstart: YEAR
0..*
1
1
Kla sse
«column»
1
*PK idKlasse: INTEGER
*
Bezeichnung: VARCHAR(50)
0..*
ZuteilungBerufsbildnerKlasse
«column»
*PK idZuteilungKB: INTEGER
*FK idBerufsbildner: INTEGER
*FK idKlasse: INTEGER
ER-Diagramm::Berufsbildner
«column»
*PK idBerufsbildner: INTEGER
*FK Benutzername: VARCHAR(50)
*FK idBerufsgruppe: INTEGER
Abbildung 35: Tabellen für die Speicherung von Klasseninformationen
Remo Seiler, MAS-07-02
Seite 59 von 124
3
Implementierung
Da die Implementierung der Software in Sourcecode-Dokumentation beschrieben ist, werden
in diesem Kapitel lediglich die Entwicklungs- und Dokumentations-Werkzeuge und die Installation der Anwendung auf dem Server beschrieben.
3.1
Tools
Für Analyse- und Design sowie Entwicklung der Applikation GradeBook kamen die in den
nachfolgenden Kapiteln beschriebenen Tools zum Einsatz.
3.1.1
Enterprise Architect
Mit dem Enterprise Architect Version 7.0.818 (EA) wurden sämtliche UML-Diagramme während der Analyse- und Design-Phase erstellt. Ausserdem wurde die automatische CodeErzeugung des Tools intensiv genutzt und in ihm das gesamte Projekt mit Ausnahme des
eigentlichen Source-Codes umgesetzt. Der erstellte Source-Code wurde aber jeweils wieder
mit dem EA synchronisiert und in diesem mit allen weiteren Informationen wie z.B. den Doxygen-Kommentaren ergänzt.
Aufgrund der vielfältigen Möglichkeiten des Tools konnte auch auf den Einsatz einer Umfangreichen IDE wie zum Beispiel Eclipse verzichtet werden. Letzteres führte zu einem deutlich geringeren Aufwand bei der Einarbeitung und Konfiguration von Tools, da nur die Spezialitäten eines solchen erarbeitet werden mussten.
(für Informationen und Download siehe [net18])
3.1.2
Notepad ++
Das Notepad ++ ist ein sehr einfacher aber trotzdem ausgereifter Sourcecode-Editor. Mit ihm
können Programme in zahlreichen Sprachen verfasst werden und er bietet dank der Möglichkeit viele zusätzliche Plugins (FTP-Synchronize, HTML-Tags, etc.) zu installieren alles
was für die Programmierung benötigt wurde. Der Editor ist ausserdem im Gegensatz zu
grossen Entwicklungsumgebungen sehr schnell geladen und bietet wenig „Stolpersteine“.
Einzige Nachteile, waren das Fehlen eines Projekt-Handlings (wurde aber vom EA ersetzt)
und der fehlende PHP-Debugger.
(für Informationen und Download siehe [net19])
3.1.3
XAMPP
Als lokaler Webserver wurde das Apache Friends XAMPP Basispaket Version 1.7.2 eingesetzt. Dank der einfachen und geführten Installation konnte so, innert kürzester Zeit eine
funktionierende Webserver-Umgebung mit Apache-Webserver, PHP, MySQL, OpenSSL etc.
installiert werden.
(für Informationen und Download siehe [net20])
3.1.4
MySQL Workbench
Im Paket MySQL Workbench Version 5.1.18a ist unter anderem der verwendete und sehr
praktische Query-Browser enthalten. Mit ihm wurden sämtliche Zugriffe (DDL und DML) auf
die Lokale Datenbank realisiert. So konnten die Tabellen erstellt, Testdaten-Skripte in diese
geladen, Abfragen entwickelt und Daten-Manipulationen durch GradeBook überprüft werden.
(für Informationen und Download siehe [net21])
Remo Seiler, MAS-07-02
Seite 60 von 124
3.1.5
WinSCP
WinSCP Version 4.2.5 ist ein open source SFTP und FTP - Client für Windows. Mit ihm wurde in der Firma und zu Hause auf den Linux-Webserver des Berufsbildungscenter zugegriffen. Sämtliche Datei-Uploads und Manipulationen konnten dank der Umfangreichen Funktionalität dieses Tools sehr effizient getätigt werden. Das Tool bietet beispielsweise die Möglichkeit der Verzeichnissynchronisation. Somit konnten Dateien auf dem Live-System direkt
mit dem Notepad++ geöffnet, bearbeitet und wieder gespeichert werden, was das Testen
von Inhalten die nur auf dem Live-System realisiert werden konnten enorm vereinfachte.
(für Informationen und Download siehe [net21])
3.1.6
Web Developer
Der Web Developer Version 1.1.8 ist ein Firefox-Plug-In und bietet eine Fülle von Werkzeugen für die Entwicklung von Webseiten. Beispielsweise können mit ihm CSS-Attribute zur
Laufzeit verändert werden und so das Layout sehr effizient optimiert werden. Zudem bietet er
viele Möglichkeiten für die Validierung von HTML, XHTML, CSS was intensiv genutzt wurde.
Alle Seiten von GradeBook sind in XHTML1.0 Strict codiert und wurden erfolgreich validiert.
3.1.7
Weitere
Zusätzlich zu den in vorangehenden Kapiteln beschriebenen wurden noch weitere Tools
verwendet, die aber keiner genaueren Beschreibung bedürfen oder nur selten eingesetzt
wurden. Die Tools sind in nachfolgender Auflistung zu sehen:
MS Office Word 2007 Professional
MS Office Excel 2007 Professional
MS Office Visio 2007 Professional
Adobe Photoshop CS2 (für Bildbearbeitungen)
Doxygen Version 1.6.2 (Siehe Kapitel 3.3)
PrintKey2000 Version 5.10 (für Screenshots)
Onlinetool Adobe Kuler (für Farbkonzepte) siehe [web12]
phpMyAdmin (für Datenbankzugriff auf dem Zielsystem)
3.2
Installation GradeBook
Die Installation der Applikation GradeBook setzt verschiedene Installierte und konfigurierte
Systeme voraus. In den folgenden Kapiteln folgt eine Installationsanleitung für ein lokales
Entwicklungssystem System mit Windows und für das Zielsystem (Webserver des Berufsbildungscenters.
3.2.1
Lokal
Um GradeBook auf einem lokalen Entwicklungssystem betreiben zu können sind folgende
Schritte notwendig:
1. Download und Installation einer Webserver- und Datenbankumgebung. Dazu kann
z.B. das XAMPP-Packet unter [net20] herunter geladen und installiert werden (Installationsanleitungen finden sich unter demselben Link).
2. Das Webroot-Verzeichnis htdocs im xampp-Verzeichnis beinhaltet nach der Installation die Konfigurations-Webseiten für den Webserver. Nachdem dieser konfiguriert
wurde, können alle Files aus dem htdocs-Verzeichnis gelöscht werden.
Remo Seiler, MAS-07-02
Seite 61 von 124
3. Download des PHP-Frameworks CodeIgniter (min. Version 1.7.2) unter [net4]. Das
entsprechende ZIP-File wird in das htdocs-Verzeichnis der XAMPP-Installation entpackt (htdocs). Das htdocs-Verzeichnis sollte nun folgendes enthalten:
4. Der Ordner user_guide kann gelöscht werden, er wird nicht benötigt (die aktuellen
Benutzermanuals sind auch online unter [net4] zu finden).
5. Die mitgelieferten Beispiel-Files löschen (system\application\controllers
\welcome.php und system\application\views\welcome_message.php).
6. Nun kann das Packet GradeBook.zip in das htdocs-Verzeichnis entpackt werden. Einige Config-Files der CodeIgniter-Installation werden dabei überschrieben, also bitte
eine allfällige Meldung bestätigen. Im Verzeichnis system\application\ müssten
nun in den entsprechenden Unterverzeichnissen (config, controllers, helpers, libraries, models und views) die GradeBook-Dateien abgelegt sein.
7. Als nächsten Schritt sollten Sie die Datenbank konfigurieren. Erstellen Sie vorerst die
MySQL-Datenbank „gradebook“ (via Eingabeaufforderung oder z.B. dem QueryBrowser), erstellen Sie einen Benutzer (sinnvollerweise mit Passwort) und geben Sie
diesem alle Rechte auf die Datenbank.
8. Erstellen Sie nun die Tabellen und laden Sie die Konstanten Daten und wenn benötigt auch die Testdaten in die Datenbank. Führen Sie dazu die Skripts GradeBook_DDL_V100.SQL, insert_constants.sql und insert_testdata.sql in
dieser Reihenfolge aus (das letzte Skript kann auch weggelassen werden, falls keine
Testdaten erwünscht sind).
9. Als nächstes werden die Konfigurationen für CodeIgniter definiert. Nehmen Sie in den
Files im Verzeichnis system\application\config folgende Einstellungen vor:
File
Array und Key
Änderung
config.php
$config['base_url']
database.php
$db['default']['username']
email.php
$db['default']['password']
Weitere nach Bedarf
$config['smtp_host']
Sinnvollerweise auf ihre IP-Adresse oder localhost
(ersteres ist zu bevorzugen)
Der definierte Benutzername für Ihre Datenbank
(falls nicht root).
Das zugehörige Passwort.
$config['smtp_user']
$config['smtp_pass']
$config['smtp_port']
Die Adresse ihres SMTP-Servers (z.B.
ssl://smtp.googlemail.com). Um Probleme mit Spam-Filtern zu
vermeiden empfiehlt sich nicht einen lokalen zu verwenden.
Ihr Benutzername auf dem SMTP-Server.
(z.B. [email protected])
Ihr Passwort zum SMTP-Account.
Der SMTP-Port z.B. 25
(ist auf 465 gestellt für Google-SMTP-Server mit SSL)
Weitere nach Bedarf
Tabelle 10: Konfiguration CodeIgniter für GradeBook
Remo Seiler, MAS-07-02
Seite 62 von 124
10. GradeBook ist nun konfiguriert und kann im Browser zum Beispiel über https://ihre-ipadresse aufgerufen werden
Hinweise:
Im Controller system\application\controllers\login.php können noch die Test-Variablen geändert werden (siehe auch Kapitel 2.3.2.1).
Es wurden mit mod_rewrite verschiedene Umleitungen realisiert (HTTPS, index.php wird
entfernt, …). Ihr Apache-Server muss dieses mod_rewrite unterstützen und OpenSSL oder
eine andere SSL-Unterstützung muss installiert sein. Ausserdem sollte für Unit-Tests die
cURL-Library installiert sein. Ob die nötigen Tools installiert und aktiviert sind, kann z.B. mit
php_info() überprüft werden. In der Standardinstallation von XAMPP sind alle benötigten
Tools vorhanden und aktiviert.
3.2.2
Zielsystem
Die Installation auf dem Zielsystem (dem Webserver des Berufsbildungscenters) läuft, mit
ein paar Ausnahmen, im gleichen Stil ab wie eine lokale Installation. Die 10 Installationsschritte der lokalen Installation entsprechen den nachfolgend aufgeführten Punkten. Diese
werden nur ergänzt oder korrigiert.
1. Auf dem Zielsystem ist der Webserver bereits installiert (Betriebssystem ist Linux, ->
Pfadangaben mit Slash anstatt Backslash).
2. Eigenes Webroot-Verzeichnis muss vorhanden sein. Das Verzeichnis auf dem Zielsystem ist /srv/web/gradebook/public/.
3. Entpacken in das Webroot-Verzeichnis auf dem Server.
4. Gleich wie in Kapitel 3.2.1.
5. Gleich wie in Kapitel 3.2.1.
6. Gleich wie in Kapitel 3.2.1 aber ins entsprechende Webroot-Verzeichnis (siehe auch
Punkt 2).
7. Gleich wie in Kapitel 3.2.1.
8. Gleich wie in Kapitel 3.2.1.
9. Die Konfigurationen auf dem Zielsystem sind wie folgt:
File
Array und Key
Änderung
config.php
database.php
$config['base_url']
$db['default']['username']
$db['default']['password']
$config['smtp_host']
$config['smtp_user']
$config['smtp_pass']
$config['smtp_port']
https://gradebook.cornet.ch/
gradebook
Das zugehörige Passwort.
10.10.10.6
gradebook
Das zugehörige Passwort.
25
email.php
10. Als nächstes müssen die Test-Variablen (siehe Kapitel 2.3.2.1) im Controller Login
konfiguriert werden um den Zugriff auf das ADS des Berufsbildungscenters zu aktivieren und die Authentifizierung einzuschalten (alle drei Variablen auf false).
11. Für den ADS-Zugriff müssen noch die LDAP-Parameter konfiguriert werden. Diese
sind in der Library system/application/libraries/Ldap.php zu finden. Für die Konfigurierung müssen folgende Variablen gesetzt werden: $_account_suffix, $_base_dn,
$_domain_controllers, $_ad_username, $_ad_password,
Remo Seiler, MAS-07-02
Seite 63 von 124
$_real_primarygroup, und $_use_ssl. Die einzelnen Werte werden hier aus Sicherheitsgründen nicht angegeben.
12. GradeBook ist nun konfiguriert und kann über die Adresse www.gradebook.cornet.ch
oder gradebook.cornet.ch aufgerufen werden (Umleitung auf HTTPS erfolgt automatisch).
3.3
Dokumentation Source-Code
Der Source Code von GradeBook wurde wie bereits verschiedentlich erwähnt ausschliesslich mit Doxygen-Kommentaren dokumentiert. Doxygen ist ein Source-Dokumentationstool,
mit dem Dokumentationen in HTML- oder Textformaten automatisch erzeugt werden können
(vergleichbar mit JavaDoc oder phpDoc). Das Tool stammt ursprünglich aus der C++-Welt,
es wird aber heute für verschiedenste weitere Sprachen, unter anderem auch für PHP eingesetzt.
Die Verwendeten Doxygen-Kommentare (Tags) im Source sind die folgenden:
Tag
@file
@brief
@author
@date
@version
@created
@updated
@class
@param
@return
@todo
Beschreibung
Dateinamen
Kurzbeschreibung (Dateien, Klassen, etc.)
Namen und Email des Autors
Erstelldatum (Dateien)
Version (Dateien, Klassen)
Erstelldatum (Klassen)
Änderungsdatum (Klassen)
Klassen-Beschreibung
Methoden-Parameter
Methoden Rückgabeparameter
Offene Punkte
Tabelle 11: Doxygen-Tags
Die Dokumentation wurde in HTML-Form erzeugt und kann über folgendes Index-File aufgerufen werden:
MT-07-02.16\Dokumente\Source\index.html
Die Source-Files selber sind in der Dokumentation ebenfalls integriert. Lediglich sicherheitsrelevante Daten wie Passwörter und Server-Adressen wurden aus dem Source entfernt.
Remo Seiler, MAS-07-02
Seite 64 von 124
4
Test
4.1
Testkonzepte
Um das SoftwareProdukt GradeBook adäquat Testen zu können bedarf es verschiedener
Testkonzepte. Grundsätzlich sollen diese Tests mit Ausnahme der Abnahmetests möglichst
viele Fehler in der Software aufdecken und nicht die Korrektheit der Software bestätigen. Um
das Ziel zu erreichen wurden folgende Tests geplant und durchgeführt:
Manuelles Testen der Datenbank-Struktur mittels einer angemessenen Menge von
Testdaten und Testabfragen (Test SQL-Queries) für alle Tabellen und sinnvollen
Verknüpfungen derselben.
Unit-Tests für die Modelklassen zum Test der Implementierung oben genannter Datenbankabfragen.
White-Box-Tests während der Entwicklung ohne entsprechende Dokumentation.
Diese Tests sind während der Entwicklung direkt in die Korrekturen und Optimierungen eingeflossen. Es stand leider kein brauchbarer Debugger zur Verfügung, da es
nicht viele PHP-Debugger gibt, die sich ohne Umstände in CodeIgniter integrieren
lassen und PHP-Debugging an sich eher ein umständliches Verfahren ist.
Manuelle Tests der Benutzeroberfläche als Gesamt-Integrationstests. Diese Tests
können nur schwer automatisiert werden, da hierfür eine Mocking-Umgebung notwendig wäre, die den Rahmen der Masterthesis sprengen würde.
Manuelle Tests der Eingabe-Formulare. Hierfür werden für die jeweiligen Formulare
Test-Äquivalenzklassen gebildet und diese Manuell abgearbeitet. Auch diese Tests
sind nicht ohne beträchtlichen Aufwand zu automatisieren.
Abnahmetests in Form von Testszenarien. Diese Tests wurden zu grossen Teilen
bereits in der Anforderungsspezifikation festgelegt und können leicht angepasst und
erweitert von dort übernommen werden.
Wie erwähnt sind die meisten aufgeführten Tests nicht oder nur sehr schwer zu automatisieren. Dies vor allem daher, weil die Software von sehr vielen Benutzeraktionen abhängt. Letztere könnten zwar mit Mocking-Objekten und automatisierten GUI-Test-Tools simuliert werden, was aber in einem Ein-Mann-Projekt aus verschiedenen Gründen nicht sinnvoll ist:
1. Tests sollten von einer unabhängigen Stelle (z.B. einem zweiten Entwicklungsteam)
entwickelt werden, um zu vermeiden, dass der Fokus auf der Beweisführung für die
Korrektheit der Software liegt.
2. Die allenfalls zu entwickelnden Mocking-Objekte währen zu Programmieren, was eine
zusätzliche Fehlerquelle darstellen würde und einen unverhältnismässigen Aufwand
zur Folge hätte.
3. Das Benutzerinterface sollte von einer unabhängigen Stelle auf Usability und ergonomische Aspekte getestet werden, da die Endbenutzer nicht die gleichen Voraussetzungen haben wie der Entwickler der Software. Letzterer kann somit nicht unvoreingenommen solche Tests durchführen.
Aus genannten Gründen wurden also alle Tests, ausser den Unit-Tests der Model-Klassen
manuell durchgeführt und sind in den Nachfolgenden Kapiteln beschrieben.
Remo Seiler, MAS-07-02
Seite 65 von 124
4.2
Testumgebung, Voraussetzungen
4.2.1
Testaufbau
Um die Softwaretests durchführen zu können muss mindestens eine Webserver-Umgebung,
ein MySQL-Datenbanksystem und die nötigen Client-Programme zur Verfügung stehen. In
Abbildung 36 ist der Testaufbau dargestellt, der für die kompletten Softwaretests notwendig
ist.
Abbildung 36: Testaufbau
Die Softwaretests wurden soweit möglich auf einem lokalen Entwicklungssystem und auch
auf dem Webserver des Berufsbildungscenters (Zielsystem) durchgeführt.
Sämtliche Tests die einen Domain-Controller des BBCnet voraussetzen (Login-Vorgang)
konnten ausschliesslich auf dem Zielsystem getestet werden. Die Email-Funktionalitäten
konnten zwar Lokal mit einem Privaten Email-Account (Gmail) teilweise überprüft werden,
die eigentlichen Tests wurden aber direkt auf dem Zielsystem mit Verbindung zum MailServer des BBCnet getätigt. Die blau hinterlegten Komponenten sind also auf dem Entwicklungssystem nur eingeschränkt oder gar nicht testbar.
Die gelb hinterlegten Komponenten stellen die Benutzer-Programme dar, welche bei beiden
Testarten auf die gleiche Weise eingesetzt werden. Mit diesen Programmen werden die Benutzerinteraktionen und der Mailversand getestet und überprüft.
Zur Überprüfung der Datenbank-Zugriffe, wird auf dem Entwicklungssystem der MySQLQuery-Browser eingesetzt. Für den Datenbank-Zugriff auf dem Zielsystem kommt phpMyAdmin zum Einsatz, mit welchem Datenbankeinträge komfortabel über ein Webinterface betrachtet und manipuliert werden können.
Remo Seiler, MAS-07-02
Seite 66 von 124
Das Deployment des Source Codes erfolgt auf dem lokalen System direkt aus der IDE, hier
Notepad++ (einfacher Source-Editor). Auf das Live-System werden die Daten mittels
WinSCP über FTP geladen.
4.2.2
Entwicklungssystem
Das Entwicklungssystem ist folgendermassen konfiguriert:
Betriebssystem: Windows XP SP3
Browser: MS Internet Explorer 8, Mozilla Firefox 3.5.7, Opera 9.8, Google Chrome
3.0.195.38, Safari 3.1.2
Apache Friends XAMPP (basic package) Version 1.7.2 mit
o
Webserver: Apache 2.2.12
o
Datenbank: MySQL 5.1.37
o
PHP 5.3.0
o
Perl 5.10.0
o
phpMyAdmin 3.2.0.1
o
OpenSSL 0.9.8k
o
…
IDE: Notepad++ 5.6.2
Mail-Client: MS Office Outlook 2007 SP2
4.2.3
Zielsystem
Die für GradeBook relevanten Parameter des Zielsystems sehen wie folgt aus:
Betriebssystem: Linux ubuntu 5.10
Webserver: Apache 2.2.8 (ubuntu) mit Suhosin Patch
PHP 5.2.4
OpenSSL 0.9.8g
Remo Seiler, MAS-07-02
Seite 67 von 124
4.3
Datenbank
Die in Kapitel 2.5 beschriebene Datenbankstruktur wurde mittels automatisch generierten
DDL-Skripten erzeugt und muss mit einer genügend grossen Menge Testdaten gefüllt werden um die Query-Tests durchführen zu können.
4.3.1
Testdaten
Folgende Skripts wurden erstellt um die Datenbank aufzusetzen:
Erstellt alle Tabellen, Schlüssel und Constraints. Löscht und Erstellt keine neue Datenbank, da dies auf dem Live-System aus
Berechtigungsgründen nicht möglich ist.
Fügt alle konstanten Daten in die entsprechenden Tabellen ein.
Diese Daten sind nicht nur Testdaten sondern bereits die momentan bekannten Daten für das Endsystem (Berufsgruppen,
Benutzergruppen, Fächer, Institutionen, Notentypen, Notengewichte und der Default-Berufsbildner).
Erstellt Testdaten zu allen Tabellen. Es wurden unter anderem
folgende Daten erfasst:
19 Benutzer, davon 13 Lernende und 6 Berufsbildner
17 Zuteilungen Lernender-Berufsbildner
6 Newsletter-Empfänger
17 Newsletter-Abonnemente und 11 Newsletter-Anfragen
32 Monatsabschlüsse
13x8 also 104 Semester für alle Test-Lernenden
104x6 also 624 Fach-Semester-Zuteilungen
5000 Noten
Die Testdaten wurden zum Teil willkürlich definiert, zufällig generiert (mit MS Excel) oder gemäss der grösstmöglichen Funktionsabdeckung festgelegt.
Die Benutzer entsprechen realen Benutzern die auch im ADS
des Berufsbildungscenters erfasst sind, wurden aber teilweise
mit imaginären Zusatzinformationen erweitert. Die verwendeten
Email-Adressen sind mit wenigen Ausnahmen abgeändert um
die Testdaten ohne Einschränkung auch für die Softwaretests
während der Entwicklungsphase verwenden zu können (ohne
die Benutzer mit Testmail-Spam zuzudecken).
Die Skripts sind in folgendem Verzeichnis (Abgabe-Paket Master Thesis) zu finden:
MT-07-02.16\Test\Datenbank\SQL_Scripts\
4.3.2
Testabfragen
Um die erstellte Datenbank zu testen wurde eine Fülle von Testabfragen erstellt, welche einen Grossteil aller auch später in den Models benötigten Abfragen umfasst und die Struktur
gut abbildet. Der Fokus der Testreihe liegt vor allem auf der Effizienz der Struktur und soll
sicher stellen, dass diese nicht durch einen zu hohen Normalisierungsgrad beeinträchtigt
wird.
Remo Seiler, MAS-07-02
Seite 68 von 124
Alle Tests wurden mit der Software MySQL Query Browser erstellt und ausgeführt. Die Resultate der Abfragen und weitere Informationen (z.B. Abfragezeiten) konnten ebenfalls im
Query Browser überprüft werden.
Die Testabfragen können später mehrheitlich unverändert für die Implementierung der Models eingesetzt werden.
Die Tabelle 12 zeigt eine Auflistung der erstellten Testabfragen und die Resultate der Tests.
Testnummer
Erwartete Rückgabedaten
TA_SQL_01
Alle Lernenden die dem Berufsbildner xy zugeteilt sind.
TA_SQL_02
Res. Tester /
Datum

RS/23.12.09
Alle Lernenden die nicht dem Berufsbildner xy zugeteilt sind
("except"-Workaround für MySQL)

RS/23.12.09
TA_SQL_03
Alle Lernenden die Fach 'Physik' in der GIBB besuchen mit
Benutzername, Semesternummer, Fachnamen und Institut

RS/23.12.09
TA_SQL_04
Alle Monatsabschlüsse mit Benutzer und Zeitpunkt

RS/23.12.09
TA_SQL_05
Berufsgruppe mit BG-id und BG-Namen eines Lernenden

RS/23.12.09
TA_SQL_06
Alle Fächer aller Lernenden mit Benutzername, Semesternummer, Fachnamen und Institut

RS/23.12.09
TA_SQL_07
Alle Fächer der Berufsgruppe ‚xy‘

RS/23.12.09
TA_SQL_08
Alle Fächer mit Berufsgruppe und Institut

RS/23.12.09
TA_SQL_09
Alle BMS-Fächer mit Berufsgruppe und Institut

RS/23.12.09
TA_SQL_10
Alle Fächer von 'xschlm' mit Benutzername, Semesternummer, Fachnamen und Institut

RS/23.12.09
TA_SQL_11
Semesternummer von Lernender 'nburkl' im Semester 4

RS/23.12.09
TA_SQL_12
Fachinfos von idFach

RS/23.12.09
TA_SQL_13
Alle Newsletter-Empfänger mit Abonnement eines Lernenden

RS/23.12.09
TA_SQL_14
Alle Lernende die entweder bereits einem NLE zugeteilt sind
oder für die eine NL-Anfrage zu einem bestimmten NLE existiert.

RS/23.12.09
TA_SQL_15
Alle Newsletter-Empfänger, die keine Abonnemente besitzen

RS/23.12.09
TA_SQL_16
Anzahl Newsletter-Anfragen zu einem Lernenden

RS/23.12.09
TA_SQL_17
Alle offenen Anfragen eines Newsletter-Empfängers mit Daten zu Lernenden

RS/23.12.09
TA_SQL_18
Liste mit allen offenen Anfragen von Newsletter-Empfänger
mit Daten zu Lernenden

RS/23.12.09
TA_SQL_19
Liste mit offenen Anfragen von Newsletter-Empfänger (Zuständigkeit eines Berufsbildners) mit Daten zu Lernenden

RS/23.12.09
TA_SQL_20
Alle Newsletter-Empfänger mit Anzahl offener NewsletterAnfragen

RS/23.12.09
TA_SQL_21
Alle Lernenden mit Anzahl Newsletter-Anfragen

RS/23.12.09
Remo Seiler, MAS-07-02
Seite 69 von 124
TA_SQL_22
Alle Lernenden eines Berufsbildners mit Daten und Anzahl
Newsletter-Anfragen

RS/23.12.09
TA_SQL_23
Alle Lernenden die nicht zu einem Berufsbildner gehören mit
Daten und Anzahl Newsletter-Anfragen

RS/23.12.09
TA_SQL_24
Alle Newsletter-Empfänger mit Anzahl Anfragen und Abonnemente

RS/23.12.09
TA_SQL_25
Anzahl Noten mit Wert 6 im gesamten Notenpool

RS/23.12.09
TA_SQL_26
Alle Noten aller Lernenden mit zusätzlichen Angaben aus
Benutzer

RS/23.12.09
TA_SQL_27
Alle Noten im Fach Chemie des Lernenden xschlm

RS/23.12.09
TA_SQL_28
Noten im Fach Chemie im Semester 5 des Lernenden nburkl

RS/23.12.09
TA_SQL_29
Noten eines Semesters in einem bestimmten Fach

RS/23.12.09
TA_SQL_30
Durchschnitt des Fachs Chemie im Semester 5 des Lernenden nburkl

RS/23.12.09
Tabelle 12: Testabfragen Datenbank
An dieser Stelle wird noch darauf hingewiesen, dass in MySQL kein except-Befehl für Abfragen existiert wie das in anderen RDBMS der Fall ist (z.B. Oracle). Dieser Befehl wäre aber in
verschiedenen Bereichen für Mengenoperationen notwendig gewesen um bei Verknüpfungen von Zuordnungstabellen (häufig notwendig für 3. Normalform) Schnittmengen ausschliessen zu können. Das Beispiel in Abbildung 37 verdeutlicht, wie diesem Problem mit
dem üblichen MySQL-Workaround mittels left-outer-Joins begegnet wurde. Ausserdem zeigt
das Beispiel auch wie komplexere Verknüpfungen (inkl. Ermittlung einer Anzahl Elemente)
mittels joins gelöst wurden.
Abbildung 37: Code-Snippet MySQL-Except-Workaround
Der Source-Code dieser und aller weiteren Abfragen ist in der entsprechenden MySQLQuery-Browser-Datei (Betrachtung mit Texteditor ebenfalls möglich) zu finden, unter:
MT-07-02.16\Test\Datenbank\SQL_Scripts\Testabfragen.qbquery
Remo Seiler, MAS-07-02
Seite 70 von 124
4.4
Unit-Tests der Models
Für Tests der eingesetzten Models und deren Methoden, wurden die in nachfolgenden Kapiteln erläuterten Unit-Tests programmiert. In einer Webapplikation können die Benutzerinterfaces und Benutzerinteraktionen nicht ohne weiteres mit solchen Tests automatisiert werden,
sie wurden deshalb ausschliesslich für die Model-Klassen implementiert.
Mit den Umgesetzten Unit-Tests können also die Model-Methoden getestet werden. Dies
ermöglicht im Hinblick auf die Entwicklung von GradeBook Release 2 eine effizientere Weiterentwicklung der Datenschicht. Sollten für das Release 2 Änderungen an Letzterer Vorgenommen werden müssen, können diese Änderungen automatisiert getestet und somit die
Qualität der im ersten Release umgesetzten Funktionalität sichergestellt werden (Regressionstests).
Die Implementierung dieser Tests wurde aus Effizienz-Gründen erst im Anschluss an die
eigentliche Software-Entwicklung realisiert. Es wurde nicht der Ansatz einer testgetriebenen
Entwicklung verfolgt.
4.4.1
Testframework Toast
Das CodeIgniter-Framework stellt zwar für Unit-Tests eine eigene Library zur Verfügung,
diese ist aber sehr rudimentär gehalten und bietet für den geplanten Einsatz eine zu geringe
Funktionalität. Grosse Testframeworks für PHP wie beispielsweise phpUnit [net7], haben den
Nachteil, dass sie nur umständlich in CodeIgniter integrierbar und zudem für den geplanten
Einsatz klar überdimensioniert sind. Dies würde ausserdem den Grundsatz verletzen, GradeBook und die eingesetzten Technologien so verständlich wie möglich zu halten (z.B. für
Lernende).
Aus diesen Gründen wurde die open source Unit-Test-Implementierung Toast [net8] evaluiert und eingesetzt.
Toast ist nicht als CodeIgniter-Library oder -Plugin implementiert und setzt auch nicht auf
weiteren Libraries wie z.B. phpUnit auf. Die Unit-Test-Funktionalität ist als einfacher CodeIgniter-Controller implementiert, was verschiedene Vorteile bringt:
Benötigt keine zusätzlichen Libraries oder Frameworks.
Keine Anpassung des CodeIgniter-Frameworks oder der Applikation nötig.
Benötigt keine weiteren Tools (wie z.B. das Kommandozeilenprogramm von phpUnit).
Der Testvorgang wird über die URL auf einem beliebigen Webbrowser gestartet.
Komplette CodeIgniter- und Applikations-Funktionalität steht uneingeschränkt zur
Verfügung.
Installation und Inbetriebnahme sind trivial. Toast kann einfach als weiterer Controller
im Webroot installiert/deinstalliert werden.
Die wenigen Nachteile die Toast mit sich bringt, sind für den geplanten Einsatz nicht von
zentraler Bedeutung (es fehlen beispielsweise Export-Möglichkeiten für die Testresultate).
Remo Seiler, MAS-07-02
Seite 71 von 124
4.4.2
Installation des Testframeworks Toast
Die Installation von Toast ist wie bereits erwähnt trivial. Eine ausführliche Anleitung dazu und
alle weiteren Informationen finden sich auf der Webseite des Entwicklers [net8]. An dieser
Stelle nur eine kurze Anleitung wie die Testumgebung für GradeBook installiert wird:
1. Download des Test-Frameworks von [net8].
2. Im CodeIgniter-Verzeichnis zwei neue Verzeichnisse erstellen:
a. /system/application/controller/test
b. /system/application/views/test
3. Die Files Toast.php und Toast_all.php ins erste Verzeichnis (a) kopieren
4. Die Files header.php, results.php und footer.php ins zweite Verzeichnis (b)
kopieren
5. Toast-Files anpassen für den BBCnet-Webserver: in den View-Files alle Short-tags
<? in <?php echo ändern.
Zum Testen der Installation kann noch das Beispiel example_tests.php ins erste Verzeichnis (a) kopiert und mittels Eingabe folgender URL aufgerufen werden:
http://{your server}/test/example_tests
Alle selbst erzeugten Test-Klassen werden ebenfalls in dem genannten Verzeichnis (a) gespeichert.
4.4.3
Implementierung der Unit-Test-Klassen
Das Vorgehen um mit Toast (siehe Kapitel 4.4.1) Unit-Tests umzusetzen ist denkbar einfach.
Es muss für jede zu testende Einheit (hier ausschliesslich die Model-Klassen) eine Klasse
angelegt werden, die von der Controller-Klasse Toast erbt. Damit Toast die Klassen später
finden kann, muss die Namenskonvention für die Dateinamen eingehalten werden, sprich
jeder Dateiname endet zwingend mit dem Postfix _tests. In der erstellten Testklasse kann
nun, wie in CodeIgniter üblich, im Konstruktor das benötigte Model (oder auch mehrere benötigte Models) geladen werden.
Für die eigentlichen Testmethoden gibt es eine zwingende Namenskonvention. Damit der
Basis-Controller Toast die Methoden finden kann, müssen sie mit einem Präfix test_ versehen werden. Sinnvollerweise werden die Methodennamen selbst, gemäss der zu testenden Model-Methode benannt. Ein Beispiel:
Die Testmethoden haben keine Übergabe- und Rückgabeparameter. Für den Test-Ablauf
werden dann die _assert-Methoden der Basis-Controller-Klasse aufgerufen. Diese produzieren die entsprechenden Browserausgaben mittels View-Files.
Ein weiteres sehr hilfreiches Werkzeug, das von Toast zur Verfügung gestellt wird, sind die
beiden speziellen Methoden _pre() und _post(). Diese werden in der Test-Klasse überschrieben und beim Testablauf vor und nach allen Testmethoden ausgeführt. Somit können
zum Beispiel vor den Tests „Dummy“-Daten in die Datenbank gespeichert und diese nach
Remo Seiler, MAS-07-02
Seite 72 von 124
den Tests wieder gelöscht werden1. Für die Unit-Tests der GradeBook-Models wurden diese
„Dummy“-Daten in entsprechenden privaten Attributen abgelegt und für die Tests verwendet
(siehe auch Klassendiagramm in Abbildung 38).
class UnitTests
«GBUnitTest»
M_benutzer_tests
«OSController»
Toast
-
benutzer
sessions
+
+
+
+
+
+
+
M_benutzer_tests()
_pre()
_post()
test_get_Benutzer()
test_get_idBerufsgruppe()
test_get_loginStatus()
test_logoff_Andere()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
«GBUnitTest»
M_berufsbil dner_tests
-
benutzer
berufsbildner
lern ende
nl e
nlAnf ragen
+
+
+
+
+
+
+
M_berufsbildner_tests()
_pre()
_post()
test_get_Lernende()
test_get_idBerufsbildner()
test_get_DatenBerufsbildner()
test_add_remove_Lernender()
«GBUnitTest»
M_lernender_tests
-
benutzer
lernender
+
+
+
+
+
+
+
+
+
M_lernender_tests()
_pre()
_post()
test_get_aktuellesSemester()
test_get_AlleLernende()
test_get_Daten()
test_get_idLernender()
test_get_Berufsgruppe()
test_get_set_Monatsabschluss()
«GBUnitTest»
M_semester_tests
-
benutzer
lernender
semester
zuteilungFS
+
+
+
+
+
+
M_semester_tests()
_pre()
_post()
test_get_Faecher()
test_get_idSemester()
test_add_remove_Fach()
«CodeIgniter»
Contr oller
Toast(name)
index()
show_results()
_show_all()
_show(method)
_run_all()
_run(method)
_get_test_methods()
_remap(method)
_pre()
_post()
_assert_true(assertion)
_assert_false(assertion)
_assert_equals(base, check)
_assert_not_equals(base, check)
_assert_equals_strict(base, check)
_assert_not_equals_strict(base, check)
_assert_empty(assertion)
_assert_not_empty(assertion)
«GBUnitTest»
M_fach_tests
+
+
+
+
+
+
+
+
benutzer
lernender
semester
faecher
zuteilungFS
not en
nGewi chte
nT yp
M_fach_tests()
_pre()
_post()
test_get_alleFaecher()
test_get_alleFaecherLernender()
test_get_Infos()
test_get_Noten()
test_get_Durchschnitt()
«OSController»
Toast_all
verwendet
+
+
+
+
+
«GBUnitTest»
M_note _tests
-
benutzer
lernender
semester
fach
not en
nGewi chte
nTypen
+
+
+
+
+
+
+
M_note_tests()
_pre()
_post()
test_add_update_delete_Note()
test_get_Notengewichte()
test_get_Notentypen()
test_get_NotenDaten()
Toast_all()
index()
_get_test_files()
_curl_get(urls)
_curl_get_multi(urls)
«GBUnitTest»
M_new sletter_tests
-
benutzer
berufsbildner
lern ende
nl e
nlAnf ragen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
M_newsletter_tests()
_pre()
_post()
test_add_delete_nlAbonnement()
test_add_delete_nlAnfrage()
test_confirm_nlAnfrage()
test_add_update_delete_nlEmpfaenger()
test_get_nlAnfragen()
test_get_AnzahlNlAnfragen()
test_get_idAnfrage()
test_get_nlAnfrage()
test_get_nlEmpfaengerLernender()
test_get_AlleNlEmpfaenger()
test_get_LernendeNlEmpfaenger()
test_get_nlEmpfaenger()
test_get_idNLE()
Abbildung 38: Klassendiagramm Unit-Tests
Da eine Beschreibung aller Testmethoden dank deren logischer Namensgebung überflüssig
erscheint, wird an dieser Stelle nur auf die Source-Dokumentation verwiesen wo kurze Beschreibungen und Kommentare die Umsetzung erläutern (siehe auch Kapitel 3.2).
Eine Bemerkung am Rande: einige Methoden (add-, update, und delete) wurden sinnvollerweise nicht einzeln sondern nur in Kombination getestet und weisen deshalb lediglich eine
gemeinsame Testmethode auf (siehe auch Abbildung 38).
4.4.4
Testablauf
Die Tests können nun einzeln, Modulweise oder alle miteinander gestartet werden wie nachfolgende Beispiele zeigen:
Einzeltest für get_nlAnfrage:
URL: http://server/test/m_newsletter_tests/get_nlAnfrage
1
Für die Tests wurden bewusst nicht die Testdaten der Datenbank (siehe Kapitel 4.3.1) verwendet,
damit die Unit-Tests auch im späteren Live-System uneingeschränkt eingesetzt werden können.
Remo Seiler, MAS-07-02
Seite 73 von 124
M_newsletter-Klasse komplett testen:
URL: http://server/test/m_newsletter_tests
Alle Tests ausführen: 1
URL: http://server/test/m_newsletter_tests/toast_all
4.4.5
Resultate und Auswertung
Die Unit-Tests wurden nach ihrer Entwicklung manuell getestet, indem in den jeweiligen Modelmethoden bewusst Fehler eingebaut wurden. Da aber die Unit-Test-Klassen ebenfalls
Source Code darstellen, kann mit diesen manuellen Tests nicht bewiesen und somit auch
nicht garantiert werden, dass sie selbst komplett Fehlerfrei sind. Dank sorgfältiger Überprüfungen ist aber eine genügend hohe Qualität gegeben.
Die Tests wurden gemäss dem definierten Testablauf (siehe Kapitel 4.4.4) durchgeführt und
sind für die aktuelle Version der Applikation GradeBook erfolgreich. Eine Auflistung der
knapp 40 erfolgreichen Tests macht hier wenig Sinn, es wird aber nachfolgend mittels zwei
Screenshots gezeigt wie die Resultate eines Testablaufs dargestellt werden und wie sie zu
interpretieren sind.
Links:
Rechts:
nicht erfolgreicher Test, in zwei Model-Methoden wurden Fehler eingebaut,
erfolgreicher Test, nach Korrektur der Fehler
Abbildung 39: Nicht erfolgreicher und erfolgreicher Unit-Test (Model Newsletter)
Alle Unit-Tests wurden auf dem lokalen Entwicklungssystem durchgeführt, sind aber auf dem
Webserver des Berufsbildungscenters ebenfalls installiert. Die Installation auf dem LiveSystem wird aber mit Start der Betatestphase Anfang März 2010 entfernt und nur bei Bedarf
wieder aufgeschaltet.
1
Damit dies funktioniert muss auf dem Webserver zwingend cURL [net9] installiert sein!
Remo Seiler, MAS-07-02
Seite 74 von 124
4.5
Manuelle Tests
In diesem Kapitel werden die manuell durchgeführten Tests zu allen Teilen, die Benutzerinteraktionen erfordern getestet. Einen wichtigen Bestandteil bilden hier die Tests der Eingabeformulare. Diese bieten ein relativ hohes Fehlerpotential, da das Benutzerverhalten für diese
Formulare sehr vielfältig und schwer voraussehbar ist. Deshalb müssen alle Formulare, mit
denen Daten für die Speicherung in der Datenbank eingegeben werden, intensiv auf Fehler
untersucht werden. In Kapitel 4.5.2 werden die durchgeführten Tests dokumentiert. Da die
nicht erfolgreichen Tests (resp. je nach Betrachtung die erfolgreichen) direkt in Korrekturen
und Optimierungen eingeflossen sind, und alle Korrekturen noch umgesetzt werden konnten,
sind keine Tests mehr als nicht erfolgreich gekennzeichnet.
4.5.1
Benutzeroberfläche, Layout, Navigation
Die Optik und das Layout einer Webanwendung sind sehr subjektive Eigenschaften des Produkts (oder anders formuliert Geschmackssache) und daher nur schwer für eine ganze Zielgruppe zu Testen. Getestet wurden diese Eigenschaften deshalb auch nur in direkter Zusammenarbeit mit den Stakeholdern. Die aktuelle Version der Applikation wurde den wichtigsten Stakeholdern vorgeführt und entspricht deren Erwartungen. Ausserdem konnte mit
dem Design-Verantwortlichen des Berufsbildungscenters (Marc Grimmbühler, Berufsbildner
Informatik, Projekte: z.B. [net15]) ein Walktrough der Webseiten durchgeführt und dabei viele
Nützliche Inputs eingeholt werden.
Sämtliche Webseiten wurden in XHTML1.0 Strict umgesetzt. Die Validierung aller Seiten
konnte mit dem Web Developer (Firefox Plugin, siehe Kapitel 3.1.6) realisiert werden. Sämtliche Seiten wurden auf Konformität überprüft und die doch recht vielen, aber meist kleineren
Fehler korrigiert (Tag schliessen vergessen bei <br/> oder <img…/>, Gross-/Kleinschreibung
missachtet, …). Alle Seiten entsprechen nun komplett dem XHTML 1.0 Strict Standard. Abbildung 40 zeigt exemplarisch eine entsprechende Ausgabe der XHTML1.0-Validierung für
das Login-Formular.
Abbildung 40: Validierung des XHTML1.0 Strict Standards
Die Stylesheets der Webseiten wurden, ebenfalls mit dem Web Developer bezüglich
CSS2.1-Konformität validiert und erfüllen alle diesen Standard. Aufgrund der Test-Resultate,
wird vom Web Developer Team empfohlen auf den Seiten folgende Qualitäts-Siegel zu platzieren um zu zeigen, dass interoperable Seiten erzeugt wurden.
Remo Seiler, MAS-07-02
Seite 75 von 124
Die beiden Graphiken werden voraussichtlich nach der Fertigstellung von GradeBook Release 2 auf der Webseite platziert. Sie dienen auch dafür, technisch versierten Benutzern
das Sicherheitsgefühl zu steigern, weil ihnen so gezeigt wird, dass die wichtigsten Standards
bezüglich Codierung eingehalten wurden.
Die Tests der Benutzeroberfläche wurden ansonsten hauptsächlich im Browser Microsoft
Internet Explorer 8 durchgeführt. Die Navigation auf den Webseiten, optische Aspekte und
die wichtigsten Formulare wurden mit reduziertem Test-Umfang zusätzlich auch mit folgenden Browsern geprüft:
Mozilla Firefox 3.5.7
Opera 9.8
Google Chrome 3.0.195.38
Safari 4 für Windows
Safari 4 für iPhone mit OS 3.x
Die Webseite wird mit all diesen Browsern problemlos dargestellt und ist ohne Einschränkungen zu bedienen. Einzig im Safari 4 für das iPhone ist die Darstellung der Auswahllisten
etwas unschön, da diese dort nicht als Listenfelder sonder als Auswahl-Rad ähnlich einer
Dropdown-Box dargestellt werden. Die Bedienung ist dadurch zwar nicht beeinträchtigt, aber
die Optik ist nicht optimal.
Für die Navigation auf den Webseiten wurde keine separate Test-Dokumentation erstellt. Die
Navigation wurde während der Entwicklungsphase implizit getestet und optimiert. Ausserdem ist diese bei allen nachfolgenden, manuellen Tests sowie bei den Abnahmetests eine
Grundvoraussetzung und wurde somit dort ebenfalls ausgiebig überprüft.
Remo Seiler, MAS-07-02
Seite 76 von 124
4.5.2
Eingabeformulare
Für die manuelle Prüfung der Eingabeformulare werden in den nachfolgenden Kapiteln entsprechende Testfälle definiert und in Tabellen aufgelistet. Zu den jeweiligen Testfällen ist das
Textfeld (Spalte „Feld“) mit den entsprechenden Eingaben (Spalte „Eingabedaten“) dargestellt und vermerkt ob es sich dabei um einen Normalfall (Spalte „N“) oder einen Fehlerfall
(Spalte „F“) handelt.
Hinweis: Für die Überprüfung der Formulare sind vor allem die Fehlerfälle interessant und
deshalb deutlich stärker vertreten als die Normalfälle.
In der Spalte „Resultat“ wird der Erfolg der Tests jeweils mit OK oder NOK dokumentiert und
bei Fehlschlägen ergänzend kommentiert.
Aufgrund der grossen Menge an möglichen Eingabedaten werden Test-Äquivalenzklassen
gebildet um möglichst eine surjektive Abbildung1 der Eingabedaten auf die Ausgaben
(hauptsächlich Fehlermeldungen) zu erreichen. Pro Äquivalenzklasse werden jeweils, je
nach Relevanz, ein oder mehrere Tests durchgeführt.
4.5.2.1 Login-Formular
Das Login-Formular (siehe Abbildung 41) besteht aus zwei Eingabefeldern und dem Button
Login. Die Felder erlauben eine maximale Eingabe von je 100 Zeichen und die Eingaben
werden unter anderem mit der CodeIgniter Formvalidation-Library geprüft. Fehlermeldungen
werden, wie in Abbildung 41 ersichtlich, direkt im Formular ausgegeben.
PW ungültig
Abbildung 41: Formular Login
In der Tabelle 13 sind die Tests für eine Auswahl von gültigen und ungültigen Eingaben in
dieses Formular dokumentiert. Die gültigen Passwörter für die im ADS erfassten Testbenutzer werden aus Sicherheitsgründen nicht abgebildet.
1
Surjektivität: definiert die Eigenschaft einer mathematischen Funktion und besagt für diese, dass jedes Element
der Zielmenge mindestens einmal als Funktionswert angenommen wird. Da Software im weitesten Sinne als
mathematische Funktion betrachtet werden kann (Eine Menge von Eingabedaten erzeugt eine Menge von Ausgabedaten) eignet sich der Begriff in diesem Sinne auch für Softwaretests.
Remo Seiler, MAS-07-02
Seite 77 von 124
Test-id
Feld
Eingabedaten
Bemerkung
N F Erwartetes Resultat
Resultat
Tester
TForm.01
Benutzername
Passwort
inf-aus-gb
korrektes Passwort
Benutzername und
Passwort korrekt
X
TForm.02
Benutzername
Passwort
INF-AUS-GB
korrektes Passwort
Benutzername ist nicht
Case-Sensitiv
X
TForm.03
Benutzername
Passwort
inf-aus
korrektes Passwort
Benutzername falsch
TForm.04
Benutzername
Passwort
inf-aus-gb
ungültiges Passwort
TForm.05
Benutzername
Passwort
TForm.06
Login erfolgreich, Weiterleitung an Startseite
OK
RS
01.02.2010
Login erfolgreich, Weiterleitung an Startseite
OK
RS
01.02.2010
X
Fehlermeldung:
Benutzername oder Passwort falsch!
OK
RS
01.02.2010
Benutzername korrekt,
Passwort falsch
X
Fehlermeldung:
Benutzername oder Passwort falsch!
OK
RS
01.02.2010
leer
korrektes Passwort
Benutzername fehlt
X
Fehlermeldung:
Das Feld "Benutzername" darf nicht leer sein!
OK
RS
01.02.2010
Benutzername
Passwort
inf-aus-gb
leer
Benutzername korrekt,
Passwort fehlt
X
Fehlermeldung:
Das Feld "Passwort" darf nicht leer sein!
OK
RS
01.02.2010
TForm.07
Benutzername
Passwort
leer
leer
Beide Eingaben fehlen
X
Fehlermeldungen:
Das Feld "Benutzername" darf nicht leer sein!
Das Feld "Passwort" darf nicht leer sein!
OK
RS
01.02.2010
TForm.08
Benutzername
Passwort
Überlanger Text
Überlanger Text
Eingabe von mehr als
100 Zeichen sollte nicht
möglich sein.
X
OK
RS
01.02.2010
Spezielle Sonderzeichen
im Passwort.
X
OK
RS
01.02.2010
TForm.09
Benutzername
Passwort
Inf-aus-gb
“ “) || 1==1
1.
2.
Begrenzung der Eingabe bei 100 Zeichen.
Fehlermeldung:
Benutzername oder Passwort falsch!
Fehlermeldung:
Benutzername oder Passwort falsch!
Datum
Tabelle 13: Test Login-Formular
Remo Seiler, MAS-07-02
Seite 78 von 124
4.5.2.2 Noteneingabe-Formular
Das wichtigste Formular in einer Notenverwaltung ist sicherlich dasjenige für die Eingabe
von Noten. Aus diesem Grund sollen für diese mehrere Tests pro Test-Äquivalenzklasse
durchgeführt werden um somit alle Grenzwerte, sowie weitere gültige und ungültige Werte zu
prüfen.
In Abbildung 41 ist ersichtlich, dass die Fehlermeldungen direkt im Formular ausgegeben
werden und die eingegebenen Daten dabei erhalten bleiben. Im Beispiel wird versucht den
ungültigen Wert 0 für eine Note zu definieren.
ungültig
Abbildung 42: Formular Noteneingabe
Bei allen Tests zum Eingabefeld „Note“ wird nach der Eingabe jeweils der Button speichern
betätigt und bei Erfolg das Resultat in der Datenbank überprüft (mittels MySQL-QueryBrowser oder phpMyAdmin). Für diese Tests sind die beiden Auswahlfelder „Gewicht“ und
„Notentyp“ nicht von Bedeutung.
Hinweis: Wenn zukünftig eine Option für die Eingabe einer Skala pro Note umgesetzt werden
soll (siehe Checkliste in Kapitel 6.3.1), werden die Tests dieses Kapitels obsolet und müssen
neu festgelegt werden.
Remo Seiler, MAS-07-02
Seite 79 von 124
Test-id
Feld
Eingabedaten
Bemerkung
N F
TForm.10
Note
-10
Ungültig negativ
X
TForm.11
Note
0
Ungültig 0
TForm.12
Note
0.99
Ungültig Grenzwert
TForm.13
Note
1
Gültig Grenzwert
TForm.14
Note
4
TForm.15
Note
TForm.16
Erwartetes Resultat
Resultat
Tester, Datum
Fehlermeldung: Eingegebener Notenwert ungültig!
OK
RS, 02.02.2010
X
Fehlermeldung: Eingegebener Notenwert ungültig!
OK
RS, 02.02.2010
X
Fehlermeldung: Eingegebener Notenwert ungültig!
OK
RS, 02.02.2010
X
Eingabe i.O., Note, Gewicht und Notentyp wird gespeichert
OK
RS, 02.02.2010
Gültig Normalwert
X
Eingabe i.O., Note, Gewicht und Notentyp wird gespeichert
OK
RS, 02.02.2010
6
Gültig Grenzwert
X
Eingabe i.O., Note, Gewicht und Notentyp wird gespeichert
OK
RS, 02.02.2010
Note
6.01
Ungültig Grenzwert
X
Fehlermeldung: Eingegebener Notenwert ungültig!
OK
RS, 02.02.2010
TForm.17
Note
10
Ungültig
X
Fehlermeldung: Eingegebener Notenwert ungültig!
OK
RS, 02.02.2010
TForm.18
Note
5.1
Gültig 1 Dezimalstelle
X
Eingabe i.O., Note, Gewicht und Notentyp wird gespeichert
OK
RS, 02.02.2010
TForm.19
Note
5.12
Gültig 2 Dezimalstellen
X
Eingabe i.O., Note, Gewicht und Notentyp wird gespeichert
OK
RS, 02.02.2010
TForm.20
Note
5.123
Ungültig 3 Dezimalst.
X
Fehlermeldung: Die Note darf maximal 2 Dezimalstellen haben!
OK
RS, 02.02.2010
TForm.21
Note
abc
Ungültig keine Zahlen
X
Fehlermeldung: Eingegebener Notenwert ungültig!
OK
RS, 02.02.2010
TForm.22
Note
leer
X
Fehlermeldung: Das Feld "Note" darf nicht leer sein!
OK
RS, 02.02.2010
TForm.23
Note
Gewicht
Notentyp
5.00
1/4
Einzelnote
Test der Auswahlfelder
(korrekte Speicherung
in DB)
X
Eingabe i.O., Note, Gewicht und Notentyp wird gespeichert
OK
RS, 02.02.2010
TForm.24
Note
Gewicht
Notentyp
5.00
10
Einzelnote
Test der Auswahlfelder
(korrekte Speicherung
in DB)
X
Eingabe i.O., Note, Gewicht und Notentyp wird gespeichert
OK
RS, 02.02.2010
TForm.25
Note
Gewicht
Notentyp
5.00
2
Prüfungsnote
Test der Auswahlfelder
(korrekte Speicherung
in DB)
X
Eingabe i.O., Note, Gewicht und Notentyp wird gespeichert
OK
RS, 02.02.2010
TForm.26
undef.
Button Abbrechen
Unabhängig von Eingabedaten
X
Es werden keine Daten gespeichert -> zurück zur Übersicht
OK
RS, 02.02.2010
Tabelle 14: Test Noteneingabe-Formular
Remo Seiler, MAS-07-02
Seite 80 von 124
4.5.2.3 Formulare Newsletter-Abonnement beantragen
Für die Anfrage eines Newsletters zu einem Lernenden sind zwei Formulare von Bedeutung.
Zum einen die Eingabe der Email-Adresse für die Abfrage ob der Newsletter-Empfänger bereits erfasst ist und falls nicht das Registrierungsformular für einen neuen Empfänger. Durch
Klicken auf den Link „Newsletter abonnieren“ gelangt man zum ersten der beiden Formulare.
Die Tests zu diesem sind in Tabelle 15 dokumentiert.
Da die Anforderung NUC.01 FA.03 (siehe [dok2]) umgesetzt wurde, muss zusätzlich Überprüft werden, ob die Syntax der Email-Adresse korrekt validiert wird. Die Fehlermeldungen
bei nicht korrektem Email-Format oder bei leerem Eingabefeld, werden direkt im Formular
ausgegeben (Das Formular wird neu geladen, behält aber die bereits eingegebenen Daten).
In Abbildung 43 ist dargestellt, wie eine solche Ausgabe für eine nicht korrekte Eingabe aussieht.
ungültig
Abbildung 43: Formular Email-Eingabe
Für die Format-Prüfung wurden nicht alle theoretisch möglichen Email-Adressen in Betracht
gezogen. Die speziellen aber gemäss Definition trotzdem gültigen Email-Adressen wie zum
Beispiel [email protected], test@localhost
oder „Satz
mit
leerschlag“@test.ch werden von GradeBook nicht als gültige Adresse akzeptiert. Da lokale
Adressen aber nicht akzeptiert werden müssen und andere sehr spezielle Formen bei den
meisten Mail-Anbietern und Mail-Servern von Firmen nicht verwendet werden ist dieser Umstand nicht von Belang. Alle gängigen Email-Adressen werden akzeptiert und korrekt geprüft.
Remo Seiler, MAS-07-02
Seite 81 von 124
Test-id
Feld
Eingabedaten
Bemerkung
N F
Erwartetes Resultat
Resultat
Tester, Datum
TForm.27
Email-Adresse
[email protected]
Gültige nicht registrierte
Adresse
X
Weiterleitung an Registrierungsformular
OK
RS, 02.02.2010
TForm.28
Email-Adresse
[email protected]
Gültige registrierte
Adresse
X
Weiterleitung zu Formular Auswahl Lernende
OK
RS, 02.02.2010
TForm.28
Email-Adresse
Test?test.ch
Ungültiges EmailFormat
X
Fehlermeldung:
Die eingegebene Email-Adresse hat kein gültiges Format!
OK
RS, 02.02.2010
TForm.30
Email-Adresse
test.ch
Ungültiges EmailFormat
X
Fehlermeldung:
Die eingegebene Email-Adresse hat kein gültiges Format!
OK
RS, 02.02.2010
TForm.31
Email-Adresse
test_äöü@test.ch
Ungültiges EmailFormat
X
Fehlermeldung:
Die eingegebene Email-Adresse hat kein gültiges Format!
OK
RS, 02.02.2010
TForm.32
Email-Adresse
Eingabe verschiedener
ungültiger Sonderzeichen
Gemäss RFC5322
X
Fehlermeldung:
Die eingegebene Email-Adresse hat kein gültiges Format!
OK
RS, 02.02.2010
TForm.33
Email-Adresse
leer
X
Fehlermeldung:
Das Feld "Email-Adresse" darf nicht leer sein!
OK
RS, 02.02.2010
TForm.34
Email-Adresse
Überlanger Text
Eingabe von mehr als
50 Zeichen sollte nicht
möglich sein.
X
Begrenzung der Eingabe bei 50 Zeichen.
Falls Eingabeformat Falsch: Fehlermeldung.
OK
RS, 02.02.2010
TForm.35
Email-Adresse
test@localhost
Ist zwar theoretisch
gültig soll aber nicht
akzeptiert werden
X
Fehlermeldung:
Die eingegebene Email-Adresse hat kein gültiges Format!
OK
RS, 02.02.2010
Tabelle 15: Test Email-Formular
Remo Seiler, MAS-07-02
Seite 82 von 124
4.5.2.4 Formulare Registrierung
Das Registrierungsformular für neue Newsletter-Empfänger ist das umfangreichste Eingabeformular in GradeBook, da hierfür alle persönlichen Daten des Newsletter-Empfängers erfasst werden müssen. In Abbildung 44 ist ersichtlich, dass auch bei diesem Formular alle
Fehlermeldungen direkt bei den entsprechenden Eingabefeldern angezeigt werden (Im Beispiel wurde der „Daten senden“-Button betätigt ohne Daten eingegeben zu haben).
Daten fehlen
Abbildung 44: Formular Registrierung
Um eine sinnvolle Menge und Aufteilung von möglichen Testdaten zu erhalten wird für die
Tests in Tabelle 16 jedes Eingabefeld einzeln, also unabhängig der Daten in den anderen
Feldern betrachtet. Effekte die im Zusammenhang mit mehreren Feldern stehen könnten
(solche sollten eigentlich nicht existieren), werden dementsprechend nicht geprüft.
Weitere Hinweise:
Die Email-Adresse wird automatisch vom vorangehenden Formular übernommen,
kann aber hier nochmals geändert werden. Sie muss aus diesem Grund erneut validiert werden, was zu weiteren Fehlermeldungen führen kann (z.B. Email bereits vergeben). Um die Tests nicht zu überladen, werden nur die, gegenüber dem EmailFormular, neuen Fehlerfälle getestet (keine Formatfehler).
Die Captcha-Graphik wird bei jedem Laden des Formulars neu generiert. Falls also
Fehler ausgegeben werden wird die zuvor angezeigte Graphik obsolet und die Zeichen müssen zwingend neu eingegeben werden (sie werden also auch nicht ins neue
Formular geladen).
Remo Seiler, MAS-07-02
Seite 83 von 124
Test-id
Feld
Eingabedaten
Bemerkung
N F
Erwartetes Resultat
TForm.36
Email
[email protected]
Gültige nicht registrierte
Adresse
X
TForm.37
Email
[email protected]
Gültige bereits registrierte
Adresse
TForm.38
Email
leer
Pflichtfeld
TForm.39
Anrede
Frau
Gültige Auswahl
TForm.40
Anrede
Bitte wählen
Auswahl fehlt
TForm.41
Name
Seiler
Gültige Eingabe
TForm.42
Name
Überlanger Text
Maximal 50 Zeichen
X
TForm.43
Name
leer
Pflichtfeld
X
TForm.44
Vorname
Remo
Gültige Eingabe
TForm.45
Vorname
Überlanger Text
Maximal 50 Zeichen
TForm.46
Vorname
Leer
Pflichtfeld
TForm.47
Firma
Ascom (Schweiz) AG
Gültige Eingabe
TForm.48
Firma
Überlanger Text
Maximal 50 Zeichen
TForm.49
Firma
Leer
Pflichtfeld
TForm.50
Strasse
Bahnhöheweg 70
Gültige Eingabe
TForm.51
Strasse
Überlanger Text
Maximal 50 Zeichen
X
TForm.52
Strasse
Leer
Pflichtfeld
X
TForm.53
PLZ
3018
Gültige Eingabe
TForm54
PLZ
123
Zu kleine Zahl
TForm.55
PLZ
abc
Ungültige Zahl
Remo Seiler, MAS-07-02
Resultat
Tester, Datum
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
X
Fehlermeldung:
Die eingegebene Email-Adresse ist bereits vergeben!
OK
RS, 02.02.2010
X
Fehlermeldung:
Das Feld "Email" darf nicht leer sein!
OK
RS, 02.02.2010
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
Fehlermeldung:
Bitte wählen Sie eine Anrede!
OK
RS, 02.02.2010
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
Begrenzung der Eingabe bei 50 Zeichen.
OK
RS, 02.02.2010
Fehlermeldung:
Das Feld "Name" darf nicht leer sein!
OK
RS, 02.02.2010
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
X
Begrenzung der Eingabe bei 50 Zeichen.
OK
RS, 02.02.2010
X
Fehlermeldung:
Das Feld "Vorname" darf nicht leer sein!
OK
RS, 02.02.2010
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
X
Begrenzung der Eingabe bei 50 Zeichen.
OK
RS, 02.02.2010
X
Fehlermeldung:
Das Feld "Firma" darf nicht leer sein!
OK
RS, 02.02.2010
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
Begrenzung der Eingabe bei 50 Zeichen.
OK
RS, 02.02.2010
Fehlermeldung:
Das Feld "Strasse" darf nicht leer sein!
OK
RS, 02.02.2010
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
X
Fehlermeldung:
Die Eingabe im Feld "PLZ" ist ungültig
OK
RS, 02.02.2010
X
Fehlermeldung:
Die Eingabe im Feld "PLZ" ist ungültig
OK
RS, 02.02.2010
X
X
X
X
X
X
Seite 84 von 124
TForm.56
PLZ
Mehr als 4 Zeichen
Nicht möglich
TForm.57
PLZ
Leer
Pflichtfeld
Begrenzung der Eingabe bei 4 Zeichen.
TForm.58
Ort
Bern
Gültige Eingabe
TForm.59
Ort
Leer
Pflichtfeld
TForm.60
Ort
Überlanger Text
Maximal 50 Zeichen
TForm.61
Telefon Geschäft
078 333 33 33
Gültige Eingabe
TForm.62
Telefon Geschäft
Leer
Pflichtfeld
TForm.63
Telefon Geschäft
Überlanger Text
Maximal 20 Zeichen
TForm.64
Telefon Privat
031 333 33 33
Gültige Eingabe
TForm.65
Telefon Privat
Leer
Kein Pflichtfeld
TForm.66
Telefon Privat
Überlanger Text
Maximal 20 Zeichen
TForm.67
Telefon Mobile
078 333 33 33
Gültige Eingabe
TForm.68
Telefon Mobile
Leer
Kein Pflichtfeld
TForm.69
Telefon Mobile
Überlanger Text
Maximal 20 Zeichen
TForm.70
Zeichen
Korrekte Zeichen
Wie in Graphik dargestellt
X
TForm.71
Zeichen
Korrekte Zeichen, in
Grossbuchstaben
Captcha-Algorithmus ist
nicht Case-sensitiv
X
TForm.72
Zeichen
Falsche Zeichen
Nicht wie in Graphik dargestellt
TForm.73
Zeichen
leer
TForm.74
Zeichen
TForm.75
TForm.76
X
X
Fehlermeldung:
Das Feld "PLZ" darf nicht leer sein!
OK
RS, 02.02.2010
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
X
Fehlermeldung:
Das Feld "Ort" darf nicht leer sein!
OK
RS, 02.02.2010
X
Begrenzung der Eingabe bei 50 Zeichen.
OK
RS, 02.02.2010
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
X
Fehlermeldung:
Das Feld "Telefon Geschäft" darf nicht leer sein!
OK
RS, 02.02.2010
X
Begrenzung der Eingabe bei 20 Zeichen.
OK
RS, 02.02.2010
X
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
X
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
Begrenzung der Eingabe bei 20 Zeichen.
OK
RS, 02.02.2010
X
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
X
Eingabe i.O., keine Fehlermeldung
Begrenzung der Eingabe bei 20 Zeichen.
OK
RS, 02.02.2010
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
Eingabe i.O., keine Fehlermeldung
OK
RS, 02.02.2010
X
Fehlermeldung:
Die eingegebene Zeichenfolge ist nicht korrekt!
OK
RS, 02.02.2010
Pflichtfeld
X
Fehlermeldung:
Das Feld "Zeichen" darf nicht leer sein!
OK
RS, 02.02.2010
Korrekte Eingabe
aber zu spät
Die Captcha-Graphiken
sind für max. 5min gültig.
X
Fehlermeldung:
Die eingegebene Zeichenfolge ist nicht korrekt!
OK
RS, 02.02.2010
Alle
Button Senden
Alle Felder enthalten gültige und korrekte Eingabedaten
X
Newsletter-Empfänger wird in Datenbank gespeichert, Weiterleitung zum Formular Auswahl Lernende.
OK
RS, 02.02.2010
Alle
Button Abbrechen
Feldinhalte egal
X
Newsletter-Empfänger wird nicht in Datenbank gespeichert, Weiterleitung zur Loginseite.
OK
RS, 02.02.2010
X
X
X
Tabelle 16: Test Registrierungsformular
Remo Seiler, MAS-07-02
Seite 85 von 124
4.6
Abnahmetests
In der Anforderungsspezifikation [dok2] wurden die Abnahmekriterien für das Projekt GradeBook festgelegt. Diese Abnahmekriterien mussten aufgrund des Projektverlaufs und der Tatsache, dass deutlich mehr Soll- und Kann-Ziele umgesetzt werden konnten als geplant ergänzt, überarbeitet und zusammengefasst werden. Dieses Kapitel umfasst nun die definitiven Abnahmetests.
Die Tests dieses Kapitels dienen dazu bei der Projektabnahme zu zeigen, dass die geforderten Funktionalitäten umgesetzt wurden. Die Tests dienen nicht mehr dazu Fehler zu finden
und umfassen dementsprechend nicht mehr alle möglichen Fehlerfälle, resp. die Fehlerfälle
wurden zum Teil stark zusammengefasst. Detailliertere Tests mit Test-Äquivalenzklassen für
die Fehlerfälle sind wie erwähnt in den vorangehenden Kapiteln (z.B. bei den Tests der Eingabe-Formulare) zu finden.
In den Tabellen der nachfolgenden Kapitel, sind jeweils die zugehörigen Anforderungen aus
[dok2] (Spalte AF), die neuen Test-Identifikationsnummern (Spalte TID) und die Testfälle aus
der Anforderungsspezifikation (Spalte SRS) dargestellt. Somit können die Überarbeitungen,
Zusammenfassungen und Änderungen nachvollzogen werden. Zu jedem Test werden auch
die entsprechende Ausgangslage, das auslösende Ereignis und die erwarteten Resultate
angegeben. In der Spalte Res wir das Resultat angegeben (OK oder Fehlergrad 1-3, siehe
auch [dok2]), letzteres erfolgt während der Abnahme durch den Betreuer und den Experten
der Master Thesis und wird anschliessend hier dokumentiert.
4.6.1
Testablauf
Die Abnahmetests können in der (durch den Tabellenaufbau) spezifizierten Reihenfolge
durchgeführt werden. Einzige Ausnahme bilden die Testfälle zum Login-Vorgang (Kapitel
4.6.5) die sinnvollerweise auch vorgezogen werden können. Die Resultate können grösstenteils direkt im Browser überprüft werden. In einigen Fällen muss der Zugriff auf die Datenbank oder der Zugriff auf ein Email-Konto eines Testbenutzers möglich sein, um die Resultate komplett verifizieren zu können.
Für die Tests stehen zwei spezielle Testbenutzer zur Verfügung die im ADS zu diesem
Zweck erfasst wurden (Passwort wird separat geliefert):
Testbenutzer Informatik-Berufsbildner (Benutzername = inf-aus-gb)
Testbenutzer Elektronik-Lernender (Benutzername = elo-stu-gb)
Die Testbenutzer bleiben bis zum Beginn der Betatest-Phase im ADS erhalten, anschliessend werden sie gelöscht. Für Tests mit mehreren Benutzern, stehen ebenfalls in diesem
Zeitrahmen die Benutzer aus den Testdaten (echte ADS-Benutzer) zur Verfügung. Für die
Verwendung letzterer muss aber eine Modifikation im Source-Code vorgenommen werden,
da die Passwörter nicht zugänglich sein dürfen. Die Modifikation wird vorgenommen indem
im Controller Login die Testvariablen (Kapitel 2.3.2.1) folgendermassen gesetzt werden.
private $_TestOhneLdap = false;
private $_TestNurAktive = false;
private $_TestPasswort = 'gb1234';
Die Benutzer können sich dann mit korrektem Benutzernamen und dem Testpasswort anmelden. Diese Funktion wird nach der Testphase aus dem Source-Code entfernt.
Remo Seiler, MAS-07-02
Seite 86 von 124
4.6.2
AF
Benutzer Lernender
TID
SRS
Ausgangslage, Beschreibung
Ereignis / Input
Erwartete Resultate
Res
Tester, Datum
OK
P. Aebi
16.02.10
Semesterübersicht anzeigen
LUC.01
FA.01-06
LUC.02
FA.03
LUC.03
FA.01
LUC.07
FA.01
LUC.01
FA.01-02
TA.01
T01
T04
T05
T09
T10
Dem aktuellen Semester sind
Fächer zugeordnet und in allen
Fächern sind Noten erfasst
Auswahl Semesterübersicht
(Navigation über Menu, Login, Positions-Navigation oder Zurück/BeendenButtons)
TA.02
T02
Dem aktuellen Semester sind
keine Fächer zugeordnet
Auswahl Semesterübersicht
(Navigation über Menu, Login oder
Positions-Navigation)
Anzeige einer entsprechenden Meldung
OK
P. Aebi
16.02.10
TA.03
T03
T06
In mindestens einem Fach sind
noch keine Noten erfasst.
Auswahl Semesterübersicht
(Navigation über Menu, Login oder
Positions-Navigation)
Anzeige der Semesterübersicht (wie zu T01). Das Fach ohne
Noten wird angezeigt, aber mit Leeren Spalten für Einzelnoten und
Durchschnitt.
OK
P. Aebi
16.02.10
TA.04
T08
Die Semesterübersicht zu Semester #3 wird angezeigt.
Auswahl des vorherigen Semesters #2
(klicken auf „<“ )
Anzeige der Semesterübersicht Semester #2 (siehe auch Resultat
T01).
OK
P. Aebi
16.02.10
Anzeige eines Bearbeitungsformulars für Semester #2.
In der Auswahlliste „Zur Auswahl stehen“ sind nur die Fächer
der eigenen Berufsgrupe angezeigt.
OK
P. Aebi
16.02.10
Anzeige Semesterübersicht
(Tabelle mit Fächern pro Zeile, Einzelnoten und Durchschnittsnoten).
Die Fachnamen werden als Link angezeigt.
Alle Noten mit Wert <4 werden in roter Farbe dargestellt.
GradeBook berechnet pro Fach die Durchschnittsnote und
zeigt diese in einer eigenen Spalte an.
Im Titel wird die Semesternummer angezeigt
Im Titel wird eine Navigationsmöglichkeit (Semester) angeboten
Unter der Fächer/Noten-Tabelle wird ein Button „Semester
bearbeiten…“ angezeigt.
Semester bearbeiten (Fächer hinzufügen und entfernen)
LUC.03
FA.01
TA.05
T11
Die Semesterübersicht zu Semester #2 wird angezeigt.
Button „Semester bearbeiten…“
LUC.03
FA.02
TA.06
T12
Das Bearbeitungsformular für
Semester #2 wird angezeigt.
Auswahl eines Fachs aus der Liste
„Zur Auswahl stehen“ und bestätigen
mit Button „>“ (hinzufügen)
Anzeige des Bearbeitungsformulars für Semester #2, in der Liste
„Bereits hinzugefügte Fächer“ ist das neue Fach enthalten.
OK
P. Aebi
16.02.10
LUC.03
FA.04
TA.07
T13
Das Bearbeitungsformular für
Semester #2 wird angezeigt.
Auswahl eines Fachs aus der Liste
“Bereits hinzugefügte Fächer“ und
bestätigen mit Button „<“ (entfernen)
Ein Bestätigungsformular für den Löschvorgang mit Hinweis auf
das allfällige Löschen aller Noten zu dem gewählten Fach wird
angezeigt.
OK
P. Aebi
16.02.10
TA.08
T14
Ein Bestätigungsformular für
das Entfernen des gewählten
Fachs wird angezeigt (Siehe
TA.07).
Bestätigung des Vorgangs durch klicken des Buttons „Entfernen“
OK
P. Aebi
16.02.10
Remo Seiler, MAS-07-02
Anzeige des Bearbeitungsformulars für Semester #2
In der Liste „Bereits hinzugefügte Fächer“ ist das entferne
Fach nicht mehr enthalten.
Alle erfassten Noten des entfernten Fachs sind aus der Datenbank gelöscht.
Seite 87 von 124
TA.09
T15
Ein Bestätigungsformular für
das Entfernen des gewählten
Fachs wird angezeigt (Siehe
TA.07).
Abbrechen des Vorgangs durch klicken
des Buttons „Abbrechen“
Anzeige des unveränderten Bearbeitungsformulars für Semester
#2.
OK
P. Aebi
16.02.10
Noten anzeigen und verwalten (hinzufügen, ändern, löschen) inkl. Fach auswählen
LUC.01
FA.08
LUC.04
FA.01
LUC.05
FA.01
LUC.06
FA.01
LUC.07
FA.02-03
TA.10
T07
T18
T26
T36
T41
T43
Die Semesterübersicht zu Semester #2 wird angezeigt.
Auswahl eines Fachs zu dem bereits
ein oder mehrere Noten erfasst wurden
durch klicken auf den Fachnamen
Anzeige Notenübersicht
In einer Tabelle werden pro Note der Wert, das Notengewicht,
der Notentyp und der Erfassungszeitpunkt angezeigt.
Pro Note wird ein Symbol „Bearbeiten“ angezeigt.
Pro Note wird ein Symbol „Löschen“ angezeigt.
Im Titel wird der Fachnamen, die Fachinstitution und die
Semesternummer angezeigt
Unter der Noten-Tabelle wird ein Button „Note hinzufügen…“
und ein Button „Zurück“ angezeigt.
OK
P. Aebi
16.02.10
TA.11
T27
T37
T42
Die Semesterübersicht zu Semester #2 wird angezeigt.
Auswahl eines Fachs zu dem noch
keine Noten erfasst wurden durch
klicken auf den Fachnamen
Anzeige Notenübersicht
Ein Hinweis, dass noch keine Noten erfasst wurden wird
angezeigt.
Im Titel wird der Fachnamen, die Fachinstitution und die
Semesternummer angezeigt
Unter dem Hinweis wird ein Button „Note hinzufügen…“ und ein
Button „Zurück“ angezeigt.
OK
P. Aebi
16.02.10
LUC.04
FA.01-02
TA.12
T19
Die Notenübersicht zum gewählten Fach wird angezeigt (siehe
TA.10)
Auswahl „Note hinzufügen…“
Anzeige Noten-Eingabeformular mit Eingabefeld, zwei Auswahlfeldern (Notengwicht und Notentyp) und zwei Buttons („Speichern“
und „Abbrechen“).
OK
P. Aebi
16.02.10
LUC.04
FA.02-05
TA.13
T19
T20
T24
Das Noten-Eingabeformular
zum gewählten Fach wird angezeigt (siehe TA.12).
Eingabe eines gültigen Notenwertes,
Auswahl eines Gewichts und eines
Notentyps. Bestätigen der Eingabe mit
Button „Speichern“
Die Note wird mit Wert, Notengewicht, Notentyp und Zeitstempel in der Datenbank gespeichert.
Die Notenübersicht zum gewählten Fach wird angezeigt (die
neue Note ist enthalten).
OK
P. Aebi
16.02.10
TA.14
T21
T22
T23
Das Noten-Eingabeformular
zum gewählten Fach wird angezeigt (siehe TA.12).
Eingabe eines ungültigen Notenwerts.
Bestätigen der Eingabe mit Button
„Speichern“
Das Noten-Eingabeformular wird mit einer Fehlermeldung
angezeigt.
Der bereits eingegebene Notenwert bleibt im Eingabefeld
erhalten.
OK
P. Aebi
16.02.10
LUC.04
FA.07
TA.15
T25
Das Noten-Eingabeformular
zum gewählten Fach wird angezeigt (siehe TA.12).
Eingabe eines gültigen Notenwertes,
Auswahl eines Gewichts und eines
Notentyps. Abbrechen der Eingabe mit
Button „Abbrechen“
Die Eingaben werden nicht in der Datenbank gespeichert.
Die unveränderte Notenübersicht zum gewählten Fach wird
angezeigt.
OK
P. Aebi
16.02.10
LUC.05
FA.01
TA.16
-
Die Notenübersicht zum gewählten Fach wird angezeigt (siehe
TA.10)
Auswahl „Note bearbeiten“ durch
klicken des entsprechenden Symbols
einer Note.
Noten-Eingabeformular wird angezeigt (siehe TA.12).
Das Eingabefeld beinhaltet den bereits erfassten Notenwert.
Die Auswahlfelder sind mit den Werten der bereits erfassten
Noten eingestellt.
OK
P. Aebi
16.02.10
Remo Seiler, MAS-07-02
Seite 88 von 124
TA.17
T28
T29
T33
T35
Eine Note wurde zum Bearbeiten ausgewählt. Das NotenEingabeformular zu der gewählten Note wird angezeigt (siehe
TA.12).
Änderung des Notenwerts auf einen
neuen gültigen Notenwert, Auswahl
eines neuen Notengewichts und eines
neuen Notentyps. Bestätigen der Eingabe mit Button „Speichern“
Die geänderte Note wird mit neuem Wert, neuem Notengewicht, neuem Notentyp und altem Zeitstempel in der Datenbank gespeichert.
Die Notenübersicht zum gewählten Fach wird angezeigt (Die
geänderte Note wird anstelle der alten angezeigt).
OK
P. Aebi
16.02.10
TA.18
T30
T31
T32
Eine Note wurde zum Bearbeiten ausgewählt. Das NotenEingabeformular zu der gewählten Note wird angezeigt (siehe
TA.12).
Änderung des Notenwerts auf einen
neuen ungültigen Notenwert, Auswahl
eines neuen Notengewichts und eines
neuen Notentyps. Bestätigen der Eingabe mit Button „Speichern“
Das Noten-Eingabeformular wird mit einer Fehlermeldung
angezeigt.
Der bereits geänderte Notenwert bleibt im Eingabefeld erhalten.
OK
P. Aebi
16.02.10
LUC.05
FA.06
TA.19
T34
Eine Note wurde zum Bearbeiten ausgewählt. Das NotenEingabeformular zu der gewählten Note wird angezeigt (siehe
TA.12).
Änderung des Notenwerts auf einen
neuen gültigen Notenwert, Auswahl
eines neuen Notengewichts und eines
neuen Notentyps. Abbrechen der
Eingabe mit Button „Abbrechen“
Die Eingaben werden nicht in der Datenbank gespeichert.
Die unveränderte Notenübersicht zum gewählten Fach wird
angezeigt.
OK
P. Aebi
16.02.10
LUC.06
FA.02
TA.20
T38
Die Notenübersicht zum gewählten Fach wird angezeigt (siehe
TA.10)
Auswahl „Note Löschen“ durch klicken
des entsprechenden Symbols einer
Note.
OK
P. Aebi
16.02.10
TA.21
T39
Ein Bestätigungsformular für
das Löschen einer Note wird
angezeigt (siehe TA.20).
Bestätigung des Vorgangs durch klicken des Buttons „Löschen“
Die Note wird aus der Datenbank gelöscht.
Die Notenübersicht zum gewählten Fach wird angezeigt (die
gelöschte Note ist nicht mehr enthalten).
OK
P. Aebi
16.02.10
TA.22
T40
Ein Bestätigungsformular für
das Löschen einer Note wird
angezeigt (siehe TA.20).
Abbrechen des Vorgangs durch klicken
des Buttons „Abbrechen“
Die Note wird nicht aus der Datenbank gelöscht.
Die unveränderte Notenübersicht zum gewählten Fach wird
angezeigt.
OK
P. Aebi
16.02.10
TA.23
T44
T45
Im Navigationsmenu wird ein
Link „Bericht erstellen“ angezeigt.
Mindestens eine Note ist erfasst
(impliziert, das mindestens ein
Fach einem Semester zugeteilt
wurde).
Auswahl „Bericht erstellen“ im Navigationsmenu.
GradeBook generiert einen Bericht als PDF-Datei.
Der Bericht wird zum Download angeboten.
Im Bericht sind die persönlichen Daten des Lernenden enthalten.
Im Bericht ist die Semesterübersicht des aktuellen Semesters
enthalten.
Im Bericht ist die Übersicht über alle Semester, alle Institutionen und alle Fächer enthalten.
OK
P. Aebi
16.02.10
TA.24
T46
Im Navigationsmenu wird ein
Link „Bericht erstellen“ angezeigt.
Es wurden noch keine Noten
erfasst aber bereits mindestens
ein Fach einem Semester zugeordnet.
Auswahl „Bericht erstellen“ im Navigationsmenu.
GradeBook generiert einen Bericht als PDF-Datei.
Der Bericht wird zum Download angeboten.
Im Bericht sind die persönlichen Daten des Lernenden enthalten.
Im Bericht ist die Semesterübersicht des aktuellen Semesters
mit dem Hinweis „Keine Daten vorhanden“ enthalten.
Im Bericht ist die leere Übersichtstabelle über alle Semester,
alle Institutionen und alle Fächer enthalten.
OK
P. Aebi
16.02.10
LUC.05
FA.02-05
LUC.05
FA.07
Ein Bestätigungsformular für den Löschvorgang wird angezeigt.
Bericht erstellen
LUC08
FA.01-02
Remo Seiler, MAS-07-02
Seite 89 von 124
TA.25
-
m Navigationsmenu wird ein
Link „Bericht erstellen“ angezeigt.
Es wurden noch keine Noten
erfasst und noch keinem Semester ein Fach zugeordnet.
Auswahl „Bericht erstellen“ im Navigationsmenu.
GradeBook generiert einen Bericht als PDF-Datei.
Der Bericht wird zum Download angeboten.
Im Bericht sind die persönlichen Daten des Lernenden enthalten.
Im Bericht ist die Semesterübersicht des aktuellen Semesters
mit dem Hinweis „Keine Daten vorhanden“ enthalten.
Die Übersicht über alle Semester ist im Bericht nicht enthalten.
OK
P. Aebi
16.02.10
Die Semesterübersicht wird angezeigt (siehe TA.01).
Ein Informationsbalken „Monatsabschluss ist in/seit X Tagen
fällig“ wird angezeigt.
Im Informationsbalken wird ein Button „Monat abschliessen…“
angezeigt.
OK
P. Aebi
16.02.10
Anzeige Formular Monatsabschluss.
Das Monatsabschluss-Formular mit Auswahlmöglichkeit für
„Alle Noten eingegeben“ und „Keine Noten erhalten“ wird angezeigt.
Im Formular werden alle Newsletter-Empfänger des Lernenden angezeigt.
Zwei Buttons („Monat abschliessen“ und „Abbrechen“) werden
angezeigt.
OK
P. Aebi
16.02.10
OK
P. Aebi
16.02.10
Monatsabschluss
LUC.09
FA.01
TA.26
T47
Das aktuelle Datum ist weniger
als 7 Tage vor dem Monatsende. Der Monatsabschluss wurde
noch nicht getätigt.
XODER
Das aktuelle Datum ist nicht
weniger als 7 Tage vor dem
Monatsende aber der letzte
Monatsabschluss wurde noch
nicht getätigt.
Anmeldung am System oder Auswahl
„Semesterübersicht“ im Navigationsmenu
LUC.09
FA.02-04
LUC.10
FA.01
TA.27
T48
T49
Der Informationsbalken für den
fälligen Monatsabschluss wird
angezeigt (siehe TA.26)
Auswahl „Monat abschliessen…“
TA.28
T50
Das Formular Monatsabschluss
wird angezeigt (siehe TA.27)
Auswahl ob „Noten eingetragen“ oder
„keine erhalten“ und Bestätigen mit
Button „Monat abschliessen“
TA.29
-
Das Formular Monatsabschluss
wird angezeigt (siehe TA.27)
Auswahl ob „Noten eingetragen“ oder
„keine erhalten“ und Abbrechen mit
Button „Abbrechen“
Die Semesterübersicht (inkl. dem Informationsbalken für den Monatsabschluss) wird angezeigt.
OK
P. Aebi
16.02.10
TA.30
-
Das Formular Monatsabschluss
wird angezeigt (siehe TA.27)
Auswahl fehlt und Bestätigen mit Button „Monat abschliessen…“
Das Formular Monatsabschluss wird mit einer Fehlermeldung
(„Bitte wählen Sie eine der Optionen...“) angezeigt.
OK
P. Aebi
16.02.10
GradeBook generiert einen Bericht für den Lernenden.
GradeBook generiert ein Newsletter-Mail mit dem Bericht als
Anhang und versendet dieses an alle Newsletter-Empfänger
des Lernenden.
Anzeige der Semesterübersicht, der Informationsbalken für
den Monatsabschluss wird nicht mehr angezeigt.
Tabelle 17: Abnahmetests zu Benutzer Lernender
Remo Seiler, MAS-07-02
Seite 90 von 124
4.6.3
AF
Benutzer Berufsbildner
TID
SRS
Ausgangslage, Beschreibung
Ereignis / Input
Erwartete Resultate
Res
Tester, Datum
OK
P. Aebi
16.02.10
Übersicht eigene Lernende anzeigen
BUC.01
FA.01-02
BUC.01
FA.05
TA.31
T51
T52
Dem Berufsbildner sind Lernende zugeteilt.
Auswahl „Meine Lernenden“
(Navigation über Menu, Login, Positions-Navigation oder Zurück/BeendenButtons)
TA.32
T53
Dem Berufsbildner sind keine
Lernenden zugeteilt.
Auswahl „Meine Lernenden“
(Navigation über Menu, Login, Positions-Navigation oder Zurück/BeendenButtons)
Anzeige einer entsprechenden Meldung.
OK
P. Aebi
16.02.10
Die Übersicht eigene Lernende
wird angezeigt (siehe TA.31).
Auswahl eines Lernenden durch klicken auf dessen Namen.
Der gewählte Lernende hat im aktuellen Semester mindestens eine Note
erfasst.
Zum gewählten Lernenden existiert
mindestens ein NewsletterAbonnement.
Anzeige Detailansicht Lernender. Die Anzeige beinhaltet:
Einen Button „Bericht erstellen“
Die Semesterübersicht des Lernenden (aktuelles Semester)
im gleichen Stiel wie bei TA.01. Im Titel der Semesterübersicht ist eine Navigationsmöglichkeit integriert.
Eine Tabelle mit allen Newsletter-Empfängern (Abonnemente) des Lernenden. Pro Zeile jeweils ein NewsletterEmpfänger mit Name, Firma und Email-Adresse und ein
Lösch-Symbol für diesen.
Unterhalb der NLE-Tabelle ein Button „Abonnement hinzufügen…“
Eine Tabelle mit detaillierten Informationen zum Lernenden
(Benutzername, Benutzergruppe, Berufsgruppe, Lehrstart,
letzter Login, Alarm-Status und Offene Newsletter-Anträge).
OK
P. Aebi
16.02.10
Die Übersicht eigene Lernende
wird angezeigt (siehe TA.31).
Auswahl eines Lernenden durch klicken auf dessen Namen.
Der gewählte Lernende hat im aktuellen Semester keine Noten erfasst und
zum Lernenden existiert kein Newsletter-Abonnement.
Anzeige Detailansicht Lernender wie in TA.33 aber statt Tabellen
für die Semesterübersicht und die Newsletter-Empfänger eine
Meldung (keine Daten vorhanden o.ä.) ausgegeben.
OK
P. Aebi
16.02.10
Anzeige Übersicht eigene Lernende (Tabelle mit Lernender
pro Zeile, Berufsgruppe, Lehrstart, Letzter Login, Alarme und
Offenen Newsletter-Anträgen).
Die Namen der Lernenden werden als Link angezeigt.
Unter der Lernenden-Tabelle wird ein Button „Meine Lernenden bearbeiten…“ angezeigt.
Details Lernender anzeigen
BUC.01
FA.03
BUC.02
FA.01
TA.33
TA.34
T54
T56
Remo Seiler, MAS-07-02
Seite 91 von 124
Liste eigene Lernende bearbeiten
BUC.01
FA.05
BUC.03
FA.06
BUC.03
FA.01-02
BUC.03
FA.04
(BUC.03
FA.05)
TA.35
T57
Die Übersicht eigene Lernende
wird angezeigt (siehe TA.31).
Es ist mindestens ein Lernender
in der GradeBook-Datenbank
erfasst.
Button „Meine Lernende bearbeiten…“
TA.36
T60
Die Übersicht eigene Lernende
wird angezeigt (siehe TA.31).
Es ist noch kein Lernender in
der GradeBook-Datenbank
erfasst.
Button „Meine Lernende bearbeiten…“
TA.37
T58
Das Bearbeitungsformular für
meine Lernende wird angezeigt
(siehe TA.35).
TA.38
-
TA.39
OK
P. Aebi
16.02.10
Anzeige des Bearbeitungsformulars für die Lernenden-Zuteilung
(siehe TA.35) aber mit zwei leeren Auswahllisten.
OK
P. Aebi
16.02.10
Auswahl einer oder mehrerer Lernende
aus der Liste „Alle Lernende“ und
bestätigen mit Button „>“ (hinzufügen)
Anzeige des Bearbeitungsformulars für die Lernenden-Zuteilung, in
der Liste „Ihre Lernende“ sind die neuen Lernenden enthalten (in
der Liste „Alle Lernenden“ nicht mehr).
Die neuen Zuteilungen sind in der Datenbank gespeichert.
OK
P. Aebi
16.02.10
Das Bearbeitungsformular für
meine Lernende wird angezeigt
(siehe TA.35).
Auswahl eines oder mehrerer Lernenden aus der Liste „Ihre Lernenden“
und bestätigen mit Button „<“ (entfernen)
Anzeige des Bearbeitungsformulars für die Lernenden-Zuteilung, in
der Liste „Ihre Lernende“ sind die entfernten Lernenden nicht mehr
enthalten (aber wieder in der Liste „Alle Lernenden“).
Die entsprechenden Zuteilungen sind aus der Datenbank gelöscht.
OK
P. Aebi
16.02.10
(T59)
Das Bearbeitungsformular für
meine Lernende wird angezeigt
(siehe TA.35).
Auswahl „Bearbeitung beenden“
Anzeige der Übersicht eigene Lernende (siehe TA.31). In der
Übersicht sind die neuen Lernenden vorhanden und die entfernten
nicht mehr.
OK
P. Aebi
16.02.10
T61
Die Detailansicht eines Lernenden wird angezeigt (siehe
TA.33)
Auswahl „Bericht erstellen“
GradeBook generiert zum Lernenden einen Bericht als PDF-Datei
und bietet ihn zum Download an (gleich wie in TA.23).
OK
P. Aebi
16.02.10
Anzeige der Übersicht über alle im System erfassten Newsletter-Empfänger in einer Tabelle.
In der Tabelle wird pro Zeile ein Newsletter-Empfänger angezeigt, mit Name, Firma, Email-Adresse, Anzahl NLAbonnemente, und Anzahl NL-Anfragen.
Pro Newsletter-Empfänger wird ein Symbol „Bearbeiten“ und
ein Symbol „Löschen“ angezeigt.
Unterhalb der Tabelle wird ein Button „Zurück“ und ein Button
„Newsletter-Empfänger erfassen…“ angezeigt.
OK
P. Aebi
16.02.10
Anzeige eines Bearbeitungsformulars für die LernendenZuteilung.
In der Auswahlliste „Alle Lernende“ sind alle in GradeBook
erfassten Lernenden, exklusive den bereits dem Berufsbildner
zugeteilten, sortiert nach Berufsgruppen/Namen aufgelistet.
In der Auswahlliste „Ihre Lernende“ Sind alle dem Berufsbildner zugeteilten Lernenden, sortiert nach Berufsgruppe und
Namen aufgelistet.
Ein Button „Bearbeitung beenden“ wird angezeigt.
Bericht erstellen
BUC.04
FA.01
TA.40
Newsletter-Empfänger verwalten
BUC.06
FA.01-06
TA.41
-
Die Übersicht eigene Lernende
oder eine beliebige andere Seite
des Berufsbildners wird angezeigt (siehe TA.31).
Remo Seiler, MAS-07-02
Auswahl „Newsletter-Empfänger“ im
Navigationsmenu
Seite 92 von 124
TA.42
-
Die Übersicht NewsletterEmpfänger wird angezeigt
(siehe TA.41)
Auswahl „NL-Empfänger löschen“
durch klicken des entsprechenden
Symbols eines NL-Empfängers.
TA.43
-
Ein Bestätigungsformular für
das Löschen eines NewsletterEmpfängers wird angezeigt
(siehe TA.42).
TA.44
-
TA.45
Ein Bestätigungsformular für den Löschvorgang wird angezeigt mit
Hinweisen auf die Konsequenzen eines Löschvorgangs (alle Abos,
Anfragen etc. werden gelöscht).
OK
P. Aebi
16.02.10
Bestätigung des Vorgangs durch klicken des Buttons „Löschen“
Der Newsletter-Empfänger, alle seine NewsletterAbonnemente und –Anfragen werden aus der Datenbank gelöscht.
Die Übersicht Newsletter-Empfänger wird angezeigt (der
gelöschte NL-Empfänger ist nicht mehr enthalten).
OK
P. Aebi
16.02.10
Ein Bestätigungsformular für
das Löschen eines NewsletterEmpfängers wird angezeigt
(siehe TA.42).
Abbrechen des Vorgangs durch klicken
des Buttons „Abbrechen“
Der Newsletter-Empfängerwird nicht aus der Datenbank
gelöscht.
Die unveränderte Übersicht Newsletter-Empfänger wird angezeigt.
OK
P. Aebi
16.02.10
-
Die Übersicht NewsletterEmpfänger wird angezeigt
(siehe TA.41)
Auswahl „Newsletter-Empfänger erfassen…“
Anzeige Eingabeformular für die Daten des NewsletterEmpfängers.
Das Formular beinhaltet Eingabefelder für Email, Anrede,
Name, Vorname, Firma, Strasse, PLZ, Ort, Telefon Geschäft,
Telefon Privat, Telefon Mobile und Bemerkungen.
Unterhalb des Formulars werden ein Button „Speichern“ und
ein Button „Abbrechen“ angezeigt.
Die Eingabefelder Email, Anrede, Name und Vorname sind
als Pflichtfelder markiert.
OK
P. Aebi
16.02.10
TA.46
-
Das Eingabeformular für die
Daten eines neuen NLEmpfängers wird angezeigt
(siehe TA.45).
Eingabe von gültigen Daten und bestätigen der Eingabe mit Button „Speichern“
Der NL-Empfänger wird mit allen eingegebenen Daten in der
Datenbank gespeichert.
Die Übersicht NL-Empfänger wird angezeigt (der neue Empfänger ist enthalten)
OK
P. Aebi
16.02.10
TA.47
-
Das Eingabeformular für die
Daten eines neuen NLEmpfängers wird angezeigt
(siehe TA.45).
Eingabe von ungültigen Daten und
bestätigen der Eingabe mit Button
„Speichern“. Ungültig heisst, es sind
nicht alle Pflichtfelder ausgefüllt, oder
das Format (z.B. Emailformat) in mindestens einem Feld ist falsch.
Das Eingabeformular wird mit einer oder mehreren Fehlermeldungen angezeigt.
Die bereits eingegebenen Daten bleiben erhalten.
OK
P. Aebi
16.02.10
TA.48
-
Das Eingabeformular für die
Daten eines neuen NLEmpfängers wird angezeigt
(siehe TA.45).
Eingabe von gültigen Daten und abbrechen der Eingabe mit Button „Abbrechen“
Die Eingaben werden nicht in der Datenbank gespeichert.
Die unveränderte Übersicht NL-Empfänger wird angezeigt.
OK
P. Aebi
16.02.10
TA.49
-
Die Übersicht NewsletterEmpfänger wird angezeigt
(siehe TA.41)
Auswahl „NL-Empfänger bearbeiten“
durch klicken des entsprechenden
Symbols eines NL-Empfängers.
Anzeige Eingabeformular für Daten NL-Empfänger (siehe
TA.45).
Die Eingabefelder beinhalteten die bereits erfassten Daten
des NL-Empfängers.
OK
P. Aebi
16.02.10
TA.50
-
Ein NL-Empfänger wurde zum
Bearbeiten ausgewählt. Das
Eingabeformular für die Daten
Gültige Änderung oder Ergänzung von
Daten des NL-Empfängers.
Bestätigen der Eingabe mit Button
Die neuen Daten des NL-Empfängers werden in der Datenbank gespeichert.
Die Übersicht NL-Empfänger wird angezeigt (die Daten des
OK
P. Aebi
16.02.10
Remo Seiler, MAS-07-02
Seite 93 von 124
des NL-Empfängers wird angezeigt (siehe TA.49).
„Speichern“
NL-Empfängers sind geändert.)
TA.51
-
Ein NL-Empfänger wurde zum
Bearbeiten ausgewählt. Das
Eingabeformular für die Daten
des NL-Empfängers wird angezeigt (siehe TA.49).
Ungültige Änderung oder Ergänzung
von Daten des NL-Empfängers.
Bestätigen der Eingabe mit Button
„Speichern“
Das Eingabeformular wird mit einer oder mehreren Fehlermeldungen angezeigt.
Die bereits eingegebenen Daten bleiben erhalten.
OK
P. Aebi
16.02.10
TA.52
-
Ein NL-Empfänger wurde zum
Bearbeiten ausgewählt. Das
Eingabeformular für die Daten
des NL-Empfängers wird angezeigt (siehe TA.49).
Gültige Änderung oder Ergänzung von
Daten des NL-Empfängers.
Abbrechen der Eingabe mit Button
„Abbrechen“
Die Änderungen oder Ergänzungen werden nicht in der Datenbank gespeichert.
Die unveränderte Übersicht NL-Empfänger wird angezeigt.
OK
P. Aebi
16.02.10
Newsletter-Abonnemente verwalten (hinzufügen oder löschen)
BUC.07
FA.01
TA.53
-
Die Detailansicht eines Lernenden wird angezeigt (siehe
TA.33)
Auswahl „Abonnement hinzufügen…“
Anzeige einer Tabelle mit allen erfassten NL-Empfängern, die
zum Lernenden noch kein NL-Abonnement besitzen.
Pro Tabellenzeile wird ein NL-Empfänger mit Name, Vorname, Firma und Email-Adresse angezeigt.
Pro NL-Empfänger wird eine Checkbox für dessen Auswahl
angezeigt.
OK
P. Aebi
16.02.10
BUC.07
FA.02
TA.54
-
Die Tabelle mit allen NLEmpfängern ohne NLAbonnement zum Lernenden
wird angezeigt (siehe TA.53).
Auswahl von ein oder mehreren NLEmpfängern durch aktivieren der entsprechenden Checkboxen.
Bestätigen der Auswahl durch klicken
des Button „Hinzufügen“
Die neuen Newsletter-Abonnemente werden in der Datenbank gespeichert.
Die Detailansicht des Lernenden wird angezeigt (in der Tabelle der Newsletter-Abonnemente sind die neuen Abonnemente
enthalten).
OK
P. Aebi
16.02.10
-
TA.55
-
Die Tabelle mit allen NLEmpfängern ohne NLAbonnement zum Lernenden
wird angezeigt (siehe TA.53).
Auswahl von ein oder mehreren NLEmpfängern durch aktivieren der entsprechenden Checkboxen.
Abbrechen des Vorgangs durch klicken
des Button „Abbrechen“
Es werden keine neuen Abonnemente gespeichert und die unveränderte Detailansicht des Lernenden wird wieder angezeigt.
OK
P. Aebi
16.02.10
BUC.07
FA.03
TA.56
T62
Die Detailansicht eines Lernenden wird angezeigt (siehe
TA.33)
Auswahl „NL-Abonnement löschen“
durch klicken des entsprechenden
Symbols eines NL-Empfängers.
Ein Bestätigungsformular für den Löschvorgang wird angezeigt.
OK
P. Aebi
16.02.10
BUC.07
FA.04
TA.57
T63
Ein Bestätigungsformular für
das Löschen eines NewsletterAbonnements wird angezeigt
(siehe TA.56).
Bestätigung des Vorgangs durch klicken des Buttons „Löschen“
Das Newsletter-Abonnement wird aus der Datenbank gelöscht.
Die Detailansicht Lernender wird angezeigt (das gelöschte
NL-Abonnement ist nicht mehr enthalten).
OK
P. Aebi
16.02.10
TA.58
T64
Ein Bestätigungsformular für
das Löschen eines NewsletterAbonnements wird angezeigt
(siehe TA.56).
Abbrechen des Vorgangs durch klicken
des Buttons „Abbrechen“
Das Newsletter-Abonnement wird nicht aus der Datenbank
gelöscht.
Die unveränderte Detailansicht Lernender wird angezeigt.
OK
P. Aebi
16.02.10
Remo Seiler, MAS-07-02
Seite 94 von 124
Newsletter-Antrag bestätigen
BUC.08
FA.01
BUC.08
FA.02-05
TA.59
T65
Es ist mindestens eine offene
NL-Anfrage zu Lernenden des
Berufsbildners vorhanden.
Im Navigationsmenu wird beim
Punkt „Newsletter-Anfragen“ die
Anzahl offener Anfragen angezeigt (in Klammern)
Auswahl „Newsletter-Anfragen“ im
Navigationsmenu.
TA.60
T66
Es sind keine offenen NLAnfragen zu Lernenden des
Berufsbildners vorhanden.
Auswahl „Newsletter-Anfragen“ im
Navigationsmenu.
TA.61
T67
Die Übersicht der offenen NLAnfragen wird angezeigt (siehe
TA.59)
TA.62
T68
(T69)
TA.63
TA.64
Anzeige einer Übersicht über alle offenen NL-Anfragen in
einer Tabelle.
Pro Tabellenzeile wird ein NL-Empfänger angezeigt der einen
oder mehrere Anträge gestellt hat.
Pro NL-Empfänger wird eine Liste mit Lernenden angezeigt
zu denen der NL-Empfänger eine NL-Anfrage gestellt hat mit
den zugehörigen Anfragezeiten.
Pro NL-Empfänger wird ein Button „Details…“ angezeigt.
Unter der Tabelle wird ein Button „Zurück zur Übersicht angezeigt“.
Anzeige einer entsprechenden Meldung.
OK
P. Aebi
16.02.10
OK
P. Aebi
16.02.10
Auswahl „Details…“ bei einem spezifischen NL-Empfänger
Detailanzeige zu der Anfrage / den Anfragen des gewählten NLEmpfängers mit folgenden Inhalten:
Persönliche Daten des Anfragestellers (NL-Empfänger)
Tabelle mit den einzelnen NL-Anfragen pro Zeile mit Namen
des Lernenden, Zeitpunkt der Anfragestellung, IP-Adresse
von der die Anfrage gestellt wurde und Checkboxen zur
Auswahl der einzelnen Anfragen
Unterhalb der Tabelle: Buttons „Auswahl bestätigen“, „Auswahl ablehnen“ und „Abbrechen“.
OK
P. Aebi
16.02.10
Detailanzeige der NL-Anfragen
eines NL-Empfängers wird
angezeigt (siehe TA.61)
Auswahl von ein oder mehreren Anfragen durch aktivieren der entsprechenden Checkboxen und bestätigen der
Anfragen durch klicken des Buttons
„Auswahl bestätigen“.
GradeBook löscht die Newsletter-Anfragen und speichert die
neuen Newsletter-Abonnemente in der Datenbank.
Anzeige der Übersicht über alle offenen NL-Anfragen (siehe
TA.65). Die bestätigten Anfragen werden nicht mehr angezeigt.
OK
P. Aebi
16.02.10
T70
Detailanzeige der NL-Anfragen
eines NL-Empfängers wird
angezeigt (siehe TA.61)
Auswahl von ein oder mehreren Anfragen durch aktivieren der entsprechenden Checkboxen und ablehnen der
Anfragen durch klicken des Buttons
„Auswahl ablehnen“.
OK
P. Aebi
16.02.10
T71
Ein Bestätigungsformular für
das Ablehnen einer NL-Anfrage
wird angezeigt.
Ablehnung bestätigen durch klicken
des Buttons „Bestätigen“
OK
P. Aebi
16.02.10
Remo Seiler, MAS-07-02
Ein Bestätigungsformular für das Ablehnen wird angezeigt.
GradeBook löscht die Newsletter-Anfragen aus der DB.
GradeBook generiert ein Informations-Mail zur Ablehnung
und versendet es an den NL-Empfänger.
Anzeige der Übersicht über alle offenen NL-Anfragen (siehe
TA.65). Die abgelehnten Anfragen werden nicht mehr angezeigt.
Seite 95 von 124
TA.65
T72
Ein Bestätigungsformular für
das Ablehnen einer NL-Anfrage
wird angezeigt.
Vorgang abbrechen durch klicken des
Buttons „Abbrechen“
GradeBook löscht die Newsletter-Anfragen aus der DB.
GradeBook generiert ein Informations-Mail zur Ablehnung
und versendet es an den NL-Empfänger.
Anzeige der Übersicht über alle offenen NL-Anfragen (siehe
TA.65). Die abgelehnten Anfragen werden nicht mehr angezeigt.
OK
P. Aebi
16.02.10
Tabelle 18: Abnahmetests zu Benutzer Berufsbildner
4.6.4
AF
Benutzer Newsletter-Empfänger oder beliebige Person
TID
SRS
Ausgangslage, Beschreibung
Ereignis / Input
Erwartete Resultate
Res
Tester, Datum
Newsletter-Abonnement beantragen
NUC.01
FA.01
TA.66
T73
Die GradeBook-Seite wurde
aufgerufen und die Login-Seite
wird angezeigt.
Auswahl „Newsletter beantragen“
Anzeige eines Formulars zur Eingabe der Email-Adresse mit einem
Button „Senden“ und einem Button „Abbrechen“.
OK
P. Aebi
16.02.10
NUC.01
FA.02-06
TA.67
-
Das Formular zur Eingabe der
Email-Adresse wird angezeigt.
Eingabe einer ungültigen EmailAdresse (Format).
Das Eingabeformular wird, ergänzt mit einer Fehlermeldung, erneut
angezeigt. Die bereits eingegebenen Daten bleiben erhalten.
OK
P. Aebi
16.02.10
TA.68
-
Das Formular zur Eingabe der
Email-Adresse wird angezeigt.
Eingabe einer gültigen Email-Adresse
und Auswahl „Abbrechen“.
Die Login-Seite wird angezeigt.
OK
P. Aebi
16.02.10
TA.69
T75
Das Formular zur Eingabe der
Email-Adresse wird angezeigt.
Eingabe einer gültigen Email-Adresse,
für die bereits ein NL-Empfänger erfasst ist und bestätigen durch klicken
auf den Button „Senden“.
Anzeige der Übersicht aller Lernenden in einer Tabelle.
Pro Tabellenzeile ist ein Lernender mit Name, Vorname,
Berufsgruppe, Lehrstart und Firma angezeigt.
Wenn zu einem Lernenden noch kein NL-Abonnement und
keine NL-Anfrage des NL-Empfängers existieren, wird eine
Checkbox für die Auswahl des Lernenden angezeigt.
Unterhalb der Tabelle befindet sich ein Button „Newsletter
beantragen…“ und ein Button „Abbrechen“.
OK
P. Aebi
16.02.10
TA.70
T74
Das Formular zur Eingabe der
Email-Adresse wird angezeigt.
Eingabe einer gültigen Email-Adresse,
für die noch kein NL-Empfänger erfasst
ist und bestätigen durch klicken auf den
Button „Senden“.
Anzeige Registrierungsformular für die persönlichen Daten.
Das Formular beinhaltet Eingabefelder für Email, Anrede,
Name, Vorname, Firma, Strasse, PLZ, Ort, Telefon Geschäft,
Telefon Privat und Telefon Mobile.
Im Eingabefeld Email ist die im vorherigen Formular eingegebene Email-Adresse bereits enthalten.
Das Formular beinhaltet eine automatisch generierte
Captcha-Graphik und ein Eingabefeld Zeichen für die Eingabe der Captcha-Zeichen.
Unterhalb des Formulars werden ein Button „Daten senden“
und ein Button „Abbrechen“ angezeigt.
Die Eingabefelder Email, Anrede, Name, Vorname, Firma,
Strasse, PLZ, Ort, Telefon Geschäft und Zeichen (Captcha)
sind als Pflichtfelder markiert.
OK
P. Aebi
16.02.10
Remo Seiler, MAS-07-02
Seite 96 von 124
NUC.01
FA.07-10
TA.71
T76
Das Registrierungsformular wird
angezeigt (siehe TA.70).
Eingabe gültiger Daten in allen Feldern
(alle Pflichtfelder sind ausgefüllt und
haben ein korrektes Format, die Captcha-Zeichen sind korrekt).
GradeBook speichert den neuen NL-Empfänger mit den
eingegebenen Daten in der Datenbank.
Anzeige der Übersicht aller Lernenden (siehe TA.69).
OK
P. Aebi
16.02.10
TA.72
T77
Das Registrierungsformular wird
angezeigt (siehe TA.70).
Eingabe von ungültigen Daten in ein
oder mehreren Felder, nicht alle Pflichtfelder sind ausgefüllt oder die CaptchaZeichen sind nicht korrekt.
Das Registrierungsformular wird mit einer oder mehreren
Fehlermeldungen erneut angezeigt.
Die bereits eingegebenen Daten bleiben mit Ausnahme der
Captcha-Zeichen erhalten.
Eine neue Captcha-Graphik wurde erzeugt und wird dargestellt.
OK
P. Aebi
16.02.10
TA.73
T78
Die Übersicht aller Lernenden
wird angezeigt (siehe TA.69).
Auswahl von einem oder mehreren
Lernenden und Bestätigen durch klicken des Buttons „Newsletter beantragen…“.
GradeBook speichert die NL-Anfragen in der Datenbank.
GradeBook generiert für jeden Berufsbildner der sich einen
oder mehrere der ausgewählten Lernenden zugeteilt hat ein
Anfrage-Mail und versendet dieses.
Anzeige einer Bestätigungsseite mit Informationen zu den
gemachten Anfragen und einem Button „OK“
OK
P. Aebi
16.02.10
TA.74
-
Die Übersicht aller Lernenden
wird angezeigt (siehe TA.69).
Keine Auswahl getroffen oder mehr als
20min inaktiv (Session abgelaufen) und
Bestätigen durch klicken des Buttons
„Newsletter beantragen…“.
OK
P. Aebi
16.02.10
Die Übersicht aller Lernenden wird mit einer Fehlermeldung erneut
ausgegeben. Wenn die Session abgelaufen ist, muss der Benutzer
den Vorgang abbrechen (Button „Abbrechen“) und neu beginnen.
Tabelle 19: Abnahmetests zu Benutzer Newsletter-Empfänger
Remo Seiler, MAS-07-02
Seite 97 von 124
4.6.5
AF
Authentifizieren (über ADS)
TID
SRS
Ausgangslage, Beschreibung
Ereignis / Input
Erwartete Resultate
Res
Tester, Datum
Newsletter-Abonnement beantragen
MUC.01
FA.01
TA.75
T80
-
Die GradeBook-Seite wird aufgerufen
(www.gradebook.cornet.ch oder gradebook.cornet.ch).
Umleitung auf https://gradebook.cornet.ch (mit mod_rewrite)
für SSL und einheitliche URL.
Anzeige des Login-Formulars mit Eingabefeldern für Benutzername und Passwort.
OK
P. Aebi
16.02.10
MUC.01
FA.02-04
MUC.01
Fa.06
TA.76
T84
Das Login-Formular wird angezeigt (siehe TA.76). Ein Lernender loggt sich zum ersten Mal
ein.
Eingabe eines gültigen ADSBenutzernamens und des gültigen
Passworts durch einen Lernenden.
GradeBook prüft Benutzernamen und Passwort.
GradeBook liest alle gespeicherten Benutzerdaten aus dem
ADS und erstellt einen neuen Benutzer in der GradeBookDatenbank.
Für den neuen Benutzer wird in der Datenbank ein Lernender
und 8 Semester angelegt und der Lernende dem DefaultBerufsbildner zugeteilt.
Anzeige der Startseite des Lernenden (Semesterübersicht).
OK
P. Aebi
16.02.10
TA.77
T81
T86
Das Login-Formular wird angezeigt (siehe TA.76). Ein Berufsbildner loggt sich zum ersten
Mal ein.
Eingabe eines gültigen ADSBenutzernamens und des gültigen
Passworts durch einen Berufsbildner.
GradeBook prüft Benutzernamen und Passwort.
GradeBook liest alle gespeicherten Benutzerdaten aus dem
ADS und erstellt einen neuen Benutzer in der GradeBookDatenbank.
Für den neuen Benutzer wird in der Datenbank ein Berufsbildner angelegt
Anzeige der Startseite des Berufsbildners (Übersicht eigene
Lernende).
OK
P. Aebi
16.02.10
TA.78
-
Das Login-Formular wird angezeigt (siehe TA.76). Ein bereits
erfasster Lernender loggt sich
ein.
Eingabe eines gültigen ADSBenutzernamens und des gültigen
Passworts durch einen Lernenden.
GradeBook prüft Benutzernamen und Passwort.
GradeBook liest alle gespeicherten Benutzerdaten aus dem
ADS und aktualisiert den vorhandenen Benutzer.
Anzeige der Startseite des Lernenden (Semesterübersicht).
OK
P. Aebi
16.02.10
TA.79
-
Das Login-Formular wird angezeigt (siehe TA.76). Ein bereits
erfasster Berufsbildner loggt
sich ein.
Eingabe eines gültigen ADSBenutzernamens und des gültigen
Passworts durch einen Berufsbildner.
GradeBook prüft Benutzernamen und Passwort.
GradeBook liest alle gespeicherten Benutzerdaten aus dem
ADS und aktualisiert den vorhandenen Benutzer.
Anzeige der Startseite des Lernenden (Semesterübersicht).
OK
P. Aebi
16.02.10
TA.80
T82
T83
Das Login-Formular wird angezeigt (siehe TA.76).
Eingabe eines ungültigen ADSBenutzernamens oder eines ungültigen
Passworts durch einen Lernenden.
Leere Felder sind ebenfalls ungültig.
Erneute Anzeige des Login-Formulars mit einer entsprechenden
Fehlermeldung. Die Eingaben für den Benutzernamen bleiben
erhalten.
OK
P. Aebi
16.02.10
TA.81
T85
T87
T88
Das Login-Formular wird angezeigt (siehe TA.76).
Eingabe eines ungültigen ADSBenutzernamens oder eines ungültigen
Passworts durch einen Berufsbildner.
Erneute Anzeige des Login-Formulars mit einer entsprechenden
Fehlermeldung. Die Eingaben für den Benutzernamen bleiben
erhalten.
OK
P. Aebi
16.02.10
Tabelle 20: Abnahmetests zum Login-Vorgang (Authentifizieren)
Remo Seiler, MAS-07-02
Seite 98 von 124
5
Resultate
Dieses Kapitel beinhaltet eine Übersicht der Ziele, die im Rahmen der Master Thesis erreichten werden konnten. Die implementierten Inhalte werden mit den spezifizierten Anforderungen aus [dok2] verglichen und Abweichungen kommentiert. An dieser Stelle werden also die
Anforderungen verifiziert. Die vom Student vor der Abnahme durchgeführten Abnahmetests
sind in die Erkenntnisse mit eingeflossen.
5.1
Konventionen
Wie erwähnt werden in den nachfolgenden Unterkapiteln alle in [dok2] spezifizierten Anforderungen der Prioritätsstufen A bis C in Tabellen aufgelistet und mit dem implementierten
Funktionsumfang verglichen. Die Anforderungen der Prioritätsstufe D werden mit wenigen
Ausnahmen nicht aufgeführt, da deren Umsetzung für GradeBook Release 1 nicht in Betracht gezogen wurde. Die Ausnahmen beziehen sich auf D-Anforderungen, die während der
Entwicklung trotzdem umgesetzt wurden, weil sie in der Umsetzung trivial oder eine logische
Konsequenz anderer implementierter Inhalte waren.
Die in den Tabellen-Spalte ‚R‘ zur Festlegung der Zielerreichung verwendeten Symbole sind
folgendermassen zu interpretieren:

Komplett gemäss Anforderung implementiert und getestet.

Komplett gemäss Anforderung implementiert und getestet. Anforderung wurde aber in Absprache mit dem Auftraggeber leicht angepasst
oder korrigiert aufgrund von Erkenntnissen während der Entwicklungsphase.
()
Teilweise implementiert oder aufgrund angepasster Anforderung nicht
mehr nötig.
X
Nicht implementiert, Implementierung wird Teil des Release 2.
Die Anforderungen sind mit der in [dok2] festgelegten Identifikations-Nummer aufgeführt.
Ausserdem ist zu jeder Anforderung eine Kurzbeschreibung vorhanden um eine bessere
Übersicht und weniger Nachschlageaufwand zu gewährleisten. Die Prioritäten in der Spalte
P entsprechen jenen die in [dok2] festgelegt wurden. Die MUSS-Ziele der Master-Thesis
(Priorität A) sind zudem grün hinterlegt. In der Spalte Bemerkungen sind Hinweise zu Änderungen von Anforderungen oder Änderungen verwendeter Begriffe vermerkt.
5.2
Zielerreichung funktionale Anforderungen Lernender
In Tabelle 25 ist ersichtlich, dass alle Anforderungen bezüglich des Benutzers Lernender mit
Prioritäten A und B und einige mit Priorität C erreicht werden konnten.
Anforderung
Kurzbeschreibung
P
R
LUC.01 FA.01
LUC.01 FA.02
LUC.01 FA.03
LUC.01 FA.04
LUC.01 FA.05
LUC.01 FA.06
LUC.01 FA.07
Semesterübersichts-Tabelle
Noch keine Fächer erfasst
Einzelnoten pro Fach anzeigen
Darstellung der Noten
Darstellung ungenügende Note
Durchschnitt anzeigen
Lehrjahresdurchschnitt
A
A
A
C
B
A
C

 Hinweis statt leere Tabelle

 Gewichtete Note wird unterstrichen


Remo Seiler, MAS-07-02
Bemerkung
X
Seite 99 von 124
LUC.01 FA.08
LUC.01 FA.09
LUC.02 FA.01
LUC.02 FA.02
LUC.02 FA.03
LUC.03 FA.01
LUC.03 FA.02
LUC.03 FA.03
LUC.03 FA.04
LUC.03 FA.06
LUC.04 FA.01
LUC.04 FA.02
LUC.04 FA.03
LUC.04 FA.04
LUC.04 FA.05
LUC.04 FA.07
LUC.05 FA.01
LUC.05 FA.02
LUC.05 FA.03
LUC.05 FA.04
LUC.05 FA.05
LUC.05 FA.06
LUC.05 FA.07
LUC.06 FA.01
LUC.06 FA.02
LUC.07 FA.01
LUC.07 FA.02
LUC.07 FA.03
LUC.08 FA.01
LUC.08 FA.02
LUC.08 FA.03
LUC.09 FA.01
LUC.09 FA.02
LUC.09 FA.03
LUC.09 FA.04
LUC.10 FA.01
LUC.10 FA.02
Fach auswählen
Ordnung der Fächer (alphab.)
Anderes Semester wählen
Neu gew. Semester anzeigen
Semesternummer anzeigen
Link Semester bearbeiten
Fächer dem Sem. hinzufügen
A
C
A
A
A
A






A

Nur Fächer der eigenen Berufsg.
Fächer aus Sem. Löschen
Eigene Fächer definieren
Notenübersicht Fach anzeigen
Note eingeben
Noteneingabe ungültig -> Fehler
Notengewicht eingeben
Notentyp eingeben
C
A
C
A
A
A
B


D

Symbol Note bearbeiten
Note ändern / bearbeiten
Noteneingabe (ändern) prüfen
Noteneingabe (ändern) ungültig
Notengewicht ändern
Notentyp ändern
Änderung abbrechen
Änderung speichern
Symbol Note löschen
Bestätigung abfragen & löschen
Fach auswählen
Notenübersicht Fach anzeigen
Fach in Notenübersicht anzeigen
Link Bericht erstellen
Bericht (PDF) erstellen und in
neuem Browserfenster öffnen
Übersicht NLE und BB in Bericht
Info-Anzeige Monatsabschluss
Monatsabschluss tätigen
Liste mit Newsletter-Empfängern
Noten-Newsletter versenden
Noten-Newsletter versenden
Newsletter-Abonnement künden
A
B
B
B
B
D
A
B
A
A
A
A
A
C














C

C
A
A
B
A
A
C
X
Button statt Link
Institution nicht im Fachnamen sondern in Tabelle (BG nicht nötig)
X




Notentyp definierbar wird aber noch
nicht verwendet.
Siehe LUC.04 FA.05
Alter Zeitstempel bleibt (sinnvoller)
Button-Namen angepasst
Bericht wird zum Download angeboten (nicht in Browser geöffnet)





X
Tabelle 21: Vergleich Anforderungen – Resultate, Benutzer Lernender
Remo Seiler, MAS-07-02
Seite 100 von 124
5.3
Zielerreichung funktionale Anforderungen Benutzer
Die Tabelle 22 zeigt, dass auch für den Benutzer Berufsbildner sämtliche Anforderungen der
Prioritätsstufe A und B und einige der Stufe C erreicht werden konnten. Die Ausnahme bilden hier lediglich die beiden Anforderungen BUC.03 FA.04 und 05 welche aufgrund einer
Änderung der Anforderungen nicht mehr notwendig sind und deshalb nicht implementiert
werden mussten. Für die Anforderung BUC.08 FA.03 und 04 wurde während der Entwicklungsphase eine sinnvollere Lösung als die in der Anforderungsspezifikation [dok2] spezifizierte gefunden und umgesetzt.
Anforderung
Kurzbeschreibung
P
R
Bemerkung
BUC.01 FA.01
BUC.01 FA.02
BUC.01 FA.03
BUC.01 FA.04
BUC.01 FA.05
BUC.02 FA.01
Übersicht eigene Lernende
Weitere Informationen in Übers.
Lernenden auswählen
Filtern und sortieren
Button Lernende bearbeiten
Detailansicht Lernender
Eigene Lernende hinzufügen oder
entfernen
Mehrere Lernende gleichz. Ausw.
Auswahllisten filtern und sortieren
Zuteilung bestätigen
A
C
A
C
A
A



Alarmstatus noch nicht implementiert
A

C
C
A
A
A
C
C
C
C
C
C
C
C
C
B
B
B
B

()
( )














B

B
B


BUC.03 FA.01
BUC.03 FA.02
BUC.03 FA.03
BUC.03 FA.04
BUC.03 FA.05
BUC.03 FA.06
BUC.04 FA.01
BUC.06 FA.01
BUC.06 FA.02
BUC.06 FA.03
BUC.06 FA.04
BUC.06 FA.05
BUC.06 FA.06
BUC.07 FA.01
BUC.07 FA.02
BUC.07 FA.03
BUC.07 FA.04
BUC.08 FA.01
BUC.08 FA.02
BUC.08 FA.03
BUC.08 FA.04
BUC.08 FA.05
Zuteilung abbrechen
In DB sind keine Lernende erfasst
Bericht zu Lernendem erstellen
Neuen NL-Empfänger erfassen
Daten NL-Empfänger bearbeiten
NL-Empfänger löschen
Minimale Daten eingeben
Alle Daten eingeben
Syntax der Email-Adresse prüfen
NL-Abonnement hinzufügen
NL-Empfänger auswählen
NL-Abonnement löschen
Bestätigung NL-Abo. löschen
NL-Anträge abfragen
NL-Antrag bestätigen / ablehnen
NL-Abonnement speichern
NL-Empfänger speichern
Bestätigung bei Ablehnung + Mail
X


X
Nicht nötig da direkt gespeichert wird
Nicht nötig da direkt gespeichert wird
Hinweis statt leere Tabelle
Status (gem. BUC.06 FA07) n.impl.
Linknamen angepasst
Sinnvolleres Handling umgesetzt
(siehe auch Kapitel 2.3.4.4.3)
Wird schon beim Beantragen gesp.
Tabelle 22: Vergleich Anforderungen – Resultate, Benutzer Berufsbildner
5.4
Zielerreichung funktionale Anforderungen Newsletter-Empfänger
Obschon in dieser Kategorie keine Anforderungen der Priorität A spezifiziert wurden, konnten mit zwei Ausnahmen alle komplett umgesetzt werden (siehe Tabelle 23). Die zwei genannten Ausnahmen sind ebenfalls bereits teilweise implementiert.
Remo Seiler, MAS-07-02
Seite 101 von 124
Anforderung
Kurzbeschreibung
P
R
NUC.01 FA.01
NUC.01 FA.02
NUC.01 FA.03
NUC.01 FA.04
NUC.01 FA.05
NUC.01 FA.06
NUC.01 FA.07
NUC.01 FA.08
NUC.01 FA.09
NUC.01 FA.10
Link Newsletter beantragen
Email eingeben
Email-Syntax prüfen
Prüfen ob Email bereits registriert
Registrierung neuer NL-Empf.
Auswahlliste Lernende anzeigen
Newsletter-Anfrage speichern
Anfrage-Mails versenden
Anfrage-Bestätigung anzeigen
Fehlermeldungen
B
B
C
B
B
B
B
C
B
B





( )



( )
Bemerkung
RFC2822 obsoleted by RFC5322
Filtern noch nicht umgesetzt
Teilweise umgesetzt
Tabelle 23: Vergleich Anforderungen – Resultate, Benutzer NL-Empfänger
5.5
Zielerreichung funktionale Anforderungen mehrere Benutzergruppen
Alle Anforderungen die im Zusammenhang mit dem Login-Vorgang stehen wurden mit Priorität A spezifiziert. Es konnten alle Anforderungen umgesetzt und getestet werden. Bei der
Anforderung MUC.01 FA.03 musste aber ein Detail wegelassen werden, da die dazu benötigten Informationen im ADS des Berufsbildungscenters nicht für alle ADS-Benutzer erfasst
sind. MUC.01 FA.06 ist hier als Teilweise umgesetzt dargestellt, da eine Ausgabe von Fehlermeldungen im Sinne der Spezifikation gemäss den Erkanntnissen aus der Entwicklungsphase wenig Sinn machen würde (dem Benutzer sollten nicht System-Fehlermeldungen
ausgegeben werden). Fehler werden zwar behandelt, aber ignoriert.
Anforderung
Kurzbeschreibung
P
R
MUC.01 FA.01
MUC.01 FA.02
Loginformular anzeigen
Benutzer und Passwort prüfen
Benutzerdaten im ADS abfragen
und in GradeBook-DB speichern
Benutzer-Startseite anzeigen
Fehlermeldungen
A
A


A

A

A
( )
MUC.01 FA.03
MUC.01 FA.04
MUC.01 FA.06
Bemerkung
Information zur BBC-Klasse wird
noch nicht gespeichert.
Fehler werden nicht direkt ausgegeben.
Tabelle 24: Vergleich Anforderungen – Resultate, mehrere Benutzergruppen
5.6
Zielerreichung funktionale Anforderungen System
Die Anforderungen im Zusammenhang mit den automatisch zu versenden Erinnerungs- und
Alarm-Mails wurden aus Zeitgründen weggelassen und sind Teil des Release 2 von GradeBook.
Anforderung
Kurzbeschreibung
P
R
SUC.02 FA.01
SUC.02 FA.02
SUC.02 FA.03
SUC.03 FA.01
SUC.04 FA.01
Zykl. Monatsabschlüsse prüfen
Erinnerungsmail versenden
Alarmmail versenden
Erinnerungsmail generieren
Alarmmail generieren
B
B
B
B
B
X
X
X
X
X
Bemerkung
Tabelle 25: Vergleich Anforderungen – Resultate, System
Remo Seiler, MAS-07-02
Seite 102 von 124
5.7
Zielerreichung nicht funktionale Anforderungen
Wie in Tabelle 26 ersichtlich konnten die nicht funktionalen Anforderungen mit einer Ausnahme komplett umgesetzt werden. Dazu gilt es aber zu bemerken, dass nicht alle dieser
Anforderungen während der Projektzeit überprüfbar waren (markiert mit --). Die einen werden während der Betatest-Phase überprüft (Performanz und Verfügbarkeit) und die anderen
sind administrative Anforderungen (Liefergegenstände) die erst nach Abschluss der Arbeit
bestätigt werden können.
Anforderung
NFA.01
NFA.02
NFA.03
NFA.04
NFA.05
NFA.06
NFA.07
NFA.08
NFA.10
Kurzbeschreibung
Benutzer nur einmal gleichzeitig
am System angemeldet
100 Benutzer gleichzeitig
90% in PHP, XHTML, CSS, JS
Einfachheit
LDAP über SSL
LDAP DMZ -> LAN
Lauffähig auf BBCnet-Webserver
Browser min. MS Internet Explorer 7.0 und Mozilla Firefox 3.0
Verfügbarkeit 90%
P
A
A
A
A
A
A
A
B
D
NFA.17
NFA.18
Alle Anforderungen Prio. A erfüllt
Lieferung lauffähige Software
A
A
NFA.19
Liefergegenstände
A
NFA.20
Daten für nicht autorisierte Personen unzugänglich
A
NFA.12
NFA.13
NFA.14
NFA.15
NFA.16

-





A
Zeitpunkt Erinnerungs- und
Alarmmails
Deutsche Sprache
Keine maschinellen Zugriffe auf
Formulare
Session läuft nach 20min ab
Navigationsmenu
Intuitive Bedienung
NFA.11
R
B
A
D
A
A
-X






--
Bemerkung
Umgesetzt, wird aber in R2 wohl
wieder entfernt, da Nutzen klein.
Nicht getestet
100% erreicht
Schwer zu testen
Getestet mit MS Internet Explorer 8,
Mozilla Firefox 3.5.7, Opera 9.8,
Google Chrome 3.0.195.38, Safari
3.1.2 und Safari für iPhone.
Nicht getestet
Noch nicht umgesetzt
Wurde beim Registrierungsformular
für NLE mit Captcha-Graphik gelöst
Navigationsmenu links statt rechts
Von 5 unabhängigen Test-Benutzern
bestätigt.
Liefergegenstände werden geliefert
Tabelle 26: Vergleich Anforderungen – Resultate, nicht funktionale Anforderungen
Remo Seiler, MAS-07-02
Seite 103 von 124
6
Ausblick
In diesem Kapitel werden die noch zu erledigenden Arbeiten und der weitere Verlauf des
Projekts GradeBook (inkl. Release2 und der geplanten Testphase) beschrieben.
6.1
Offene Punkte
Einige Punkte sind nach der Entwicklung und den Tests während der Master Thesis MT-0702.16 noch offen. Nachfolgende Auflistung zeigt diese administrativen und technischen Arbeiten:
Für den Default-Berufsbildner muss im ADS noch ein neuer Benutzer erfasst werden.
Die Testbenutzer (inf-aus-gb und elo-stu-gb) werden per 1. März 2010 entfernt.
Für den Email-Account [email protected] muss eine automatische
Antwort auf allfällige Mails, mittels entsprechender Regel erstellt werden. Evtl. werden
auch alle Mails auf diese Adresse geblockt, da sie ausschliesslich als Absender der
GradeBook-Emails gedacht ist. -> Wird mit dem Verantwortlichen des Mailservers
geklärt.
Um zu testen ob wirklich alle ADS-Benutzer korrekt in GradeBook erfasst werden
können, sollte dies vor der Einführung des Tools im August 2010 geprüft werden. Es
muss dazu ein temporärer Softwareteil im Login-Controller programmiert werden um
alle Benutzer des ADS zu ermitteln und diese automatisch einzuloggen. So kann
überprüft werden, ob alle Benutzer im ADS GradeBook-konform (sprich mit den minimal notwendigen Feldern) erfasst sind.
Es muss noch überprüft werden, wie sich das System verhält, wenn ein Passwort eines ADS-Benutzers abgelaufen oder der Benutzer deaktiviert ist. Vermutung: Authentifizierung schlägt fehl, es wird keine entsprechende Meldung ausgegeben. Da dies
abhängig von der verwendeten open source-Library ist, muss der Sachverhalt aber
zuerst überprüft werden.
Es muss geprüft werden, was mit den GradeBook-Cookies beim Client geschieht,
falls gleichzeitig und auf demselben Client eine andere Applikation auf dem Webserver gestartet wird, die ebenfalls mit Sessions arbeitet (z.B. die Intranet-Seite cornet.ch oder die Moodle-Applikationen).
Aus Sicherheitsgründen soll noch analysiert werden, ob eine Verschlüsselung des
GradeBook-Cookies, trotz der Tatsache, dass die Session-Daten in der Datenbank
abgelegt werden, notwendig ist. Das Cookie beinhaltet lediglich die Session-ID.
Sämtliche Texte die auf den Webseiten ausgegeben werden müssen noch einer orthographischen und sprachlichen Überprüfung unterzogen werden.
6.2
Verbesserungsmöglichkeiten
Während der Entwicklungsphase sind verschiedene Verbesserungs- und Optimierungsmöglichkeiten für die Applikation erkannt worden. Diese waren zwar für die Erreichung der spezifizierten Anforderungen nicht zwingend umzusetzen, sollen aber in Release 2 von GradeBook genauer analysiert und gegebenenfalls realisiert werden. Die nachfolgende Auflistung
zeigt die entsprechenden Erkenntnisse:
In der Semesterübersicht des Lernenden könnte die Tabelle auch auf mehrere Tabellen abhängig der Institutionen aufgeteilt werden um die Übersicht zu verbessern.
Remo Seiler, MAS-07-02
Seite 104 von 124
Die Erzeugung der Semesterübersichts-Tabelle sollte in eine eigene Methode (z.B. in
einem Helper oder in einem Model) ausgelagert werden, da sie an mehreren Stellen
benötigt wird.
Für die Erzeugung der Auswahllisten in der Semester-bearbeiten-Methode, könnte
eine Datenbankabfrage, anstelle der verschachtelten Foreach-Schleifen verwendet
werden um die Effizienz zu erhöhen.
Die genannten Auswahllisten müssen noch für lange Fächernamen optimiert werden.
Dazu wird ein horizontaler Scroll-Balken benötigt (existieren in HTML nicht).
Datenbankabfragen sollten allgemein noch bezüglich Geschwindigkeit, Wartbarkeit
und Ressourcenbedarf optimiert werden (z.B. durch Views)
Die Auswahllisten unter Semester bearbeiten (Lernender) und Meine Lernenden bearbeiten (Berufsbildner) könnten mittels Ajax-Funktionalitäten gelöst werden um die
Belastung von Server und Datenbank durch viele Zugriffe zu verringern.
Im Noteneingabeformular wäre eine Information bezüglich der Notentypen hilfreich
(z.B. als Hinweis).
Im Noteneingabeformular werden die Auswahlfelder für den Notentyp und das Notengewicht bei Fehlermeldungen auf den Standardwert zurückgesetzt -> korrigieren.
Beim Benutzerinterface des Berufsbildners, in der Übersicht der Newsletter-Anfragen
sollte der Details-Button beim Darüberfahren mit der Maus einen Hoover-Effekt aufweisen und den Maus-Cursor entsprechend verändern.
In den HTML-Inhalten der Emails werden teilweise Zeichen nicht korrekt dargestellt
(sie werden durch das Zeichen ‚=‘ ersetzt). Dieses Phänomen ist aber bisher nur beobachtet worden, wenn die Mails im Outlook oder im OWA des Berufsbildungscenters
betrachtet werden. Bei anderen Email-Diensten wie Googlemail, GMX, oder bei Betrachtung der Mails (von einem BBC-Mail-Account) auf dem iPhone, konnten keine
solchen Probleme festgestellt werden. Wo die Fehlerquelle liegt muss noch analysiert
werden.
6.3
Erweiterungsvorschläge
In der Anforderungsspezifikation [dok2] wurden die Ziele für GradeBook Release 1 und 2
festgelegt und soweit möglich „eingefroren“. Einige kleinere Anpassungen wurden trotzdem
Notwendig und sind unter anderem in Kapitel 5 beschrieben. Während der Projektzeit sind
aber diverse Änderungswünsche und zusätzliche Anforderungen seitens des Auftraggebers,
des Experten der Master Thesis und des Entwicklers aufgetaucht. Um das Projekt GradeBook Release 1 terminlich nicht zu gefährden wurden diese Änderungswünsche lediglich in
einer Checkliste erfasst und sind im nachfolgenden Unterkapitel Aufgelistet. Die bereits spezifizierten Erweiterungen (siehe [dok2]) werden nicht aufgeführt.
6.3.1
Checkliste und Change Management
Dieses Kapitel beinhaltet die Während der Projekt-Zeit erfassten Änderungswünsche/Vorschläge des Auftraggebers, des Experten der Master Thesis und des Entwicklers.
Die Inhalte der Checkliste sind als Ideen zu verstehen und müssen für GradeBook Release 2
noch genauer analysiert und ausformuliert werden.
Benutzer Lernender
Ein Lernender sollte einen getätigten Monatsabschluss rückgängig machen können
um ihm so die Möglichkeit zu bieten eine Fehleingabe im entsprechenden Formular
Remo Seiler, MAS-07-02
Seite 105 von 124
zu korrigieren. Dazu müsste aber der Zeitpunkt der Newsletter-Versendung ebenfalls
überdacht werden.
Der Lernende sollte die Möglichkeit haben auch ohne das Formular Monatsabschluss, die ihm zugeteilten Newsletter-Empfänger und auch seine Berufsbildner zu
betrachten (entsprechender Menüpunkt im Navigationsmenu).
Für Noten sollte sinnvollerweise eine Skala resp. eine Definition des Wertebereichs
eingeführt werden. So könnten nicht nur Noten im Bereich 1-6 erfasst werden, sondern auch z.B. Prozentangaben (0-100%) oder Grades (F-A).
Der Lernende sollte zu einer Note zusätzlich eine Bemerkung eingeben können. Diese Bemerkung würde dann in den Notenübersichten ebenfalls angezeigt.
Ein zusätzlicher Notentyp „Streichnote“ soll eingeführt werden. Mit diesem kann eine
Note als Streichnote markiert werden. Die Note bleibt dann zwar immer noch in der
Datenbank erfasst, wird aber für Durchschnittsberechnungen nicht mit einbezogen.
Der Notentyp „Prüfungsnote“ sollte pro Fach und Semester nur einmal möglich sein.
Für einen Lernenden sollten auch mehr oder weniger als 8 Semester definiert werden
können (Kauffrau-Kaufmann hat nur deren 6, Repetenten haben evtl. mehr als 8 Semester).
In einem Bericht sollten noch folgende zusätzliche Informationen enthalten sein:
o Liste mit allen Newsletter-Empfängern des Lernenden
o Liste mit allen zugeteilten Berufsbildnern des Lernenden
o Informationen zu speziellen Noten (Gewichtete Note, Prüfungsnote, …)
o Hyperlinks zu Webseiten und Email-Adressen
In der Semesterübersicht des Lernenden sollte zusätzlich zur umgesetzten Navigationsmöglichkeit (Semester vorwärts oder zurück) noch eine Combobox zur direkten
Auswahl eines Semesters ergänzt werden. Ausserdem sollte noch der GesamtDurchschnitt des Semesters und eine Legende für die Darstellung der Farben und
Schriftarten in der Tabelle (Ungültige, Notentypen- und Gewichte) angezeigt werden.
Der Noten-Newsletter sollte auch an den Lernenden selbst gesendet werden, damit
dieser eine Bestätigung des Monatsabschlusses für seine Ablage hat.
Benutzer Berufsbildner
Ein Interface zum verwalten der Fächer wäre sinnvoll (neue Fächer erfassen, Fächer
bearbeiten oder aktivieren/deaktivieren). Momentan geschieht dies direkt in der Datenbank.
Die Lernenden sollten Klassen (BBC und Gewerbeschule) zugeteilt werden können
und ein Berufsbildner sollte die Verantwortung einer solchen Klasse übernehmen
können.
Zu den Lernenden sollte eine Übersicht über alle seine Monatsabschlüsse, mit Zeitpunkten und vor allem den fehlenden Abschlüssen, abgefragt werden können.
Anstelle des Alarm-Status (oder evtl. auch zusätzlich) soll in der Übersicht der Lernenden der letzte Monatsabschluss angezeigt werden.
In der Detailansicht eines Lernenden sollte der Berufsbildner in der Semesterübersichts-Tabelle die einzelnen Fächer auswählen können um eine Notenübersicht zu
erhalten (wie dies der Lernende auch kann, aber ohne Noteneingabe-Möglichkeit).
Remo Seiler, MAS-07-02
Seite 106 von 124
Zusätzlich zu den in [dok2] spezifizierten Filter- und Sortiermöglichkeiten, werden
noch weitere benötigt: in den Übersichten der NL-Empfänger und -Anfragen, bei der
Tabelle NL-Empfänger hinzufügen, etc.
Bei der Ablehnung eines Newsletter-Antrags könnte die Möglichkeit eine Begründung
einzugeben ergänzt werden. Diese Begründung ist dann im entsprechenden Mail an
den Antragsteller enthalten.
In der Detail-Ansicht einer Newsletter-Anfrage sollten zum Antragsteller alle bereits
existierenden Newsletter-Abonnemente angezeigt werden. Dies beschleunigt unter
Umständen die Überprüfung, ob der Newsletter-Empfänger vertrauenswürdig ist oder
nicht.
Eine Möglichkeit für die Überprüfung ob ein Lernender wirklich alle Noten eingetragen
hat, wäre für den Berufsbildner hilfreich. Dies könnte beispielsweise mit einem Vergleich der Lernenden einer Klasse (sobald die Klassen umgesetzt sind) realisiert
werden.
Eine Login-Status-Anzeige für alle dem Berufsbildner zugeteilten Lernenden könnte
ergänz werden. Der Berufsbildner hätte so die Möglichkeit zu sehen, welche und wie
viele seiner Lernenden gerade online sind.
Newsletter-Empfänger
Für die Newsletter-Empfänger soll aus Sicherheits- und Datenschutzgründen ein eigenes Benutzer-Account-System (unabhängig vom ADS) umgesetzt werden. Die Registrierung eines NL-Empfängers könnte dann beispielsweise durch einen Berufsbildner bestätigt werden. Anschliessend kann sich ein NL-Empfänger einloggen um einen Newsletter für Lernende zu beantragen (dieser Punkt bleibt gleich).
Die Möglichkeit bei einem NL-Antrag eine Nachricht/Bemerkung an alle Berufsbildner
zu ergänzen wäre sinnvoll.
Allgemein
Falls das ADS-Passwort eines Benutzers abgelaufen ist, sollte GradeBook die Möglichkeit bieten dieses zu ändern (ähnlich wie dies im Outlook Web Access gelöst ist).
Da in GradeBook bereits eine umfangreiche LDAP-Library zum Einsatz kommt, könnte diese verwendet werden um Benutzerdaten im ADS zu ändern. GradeBook könnte
also dem Benutzer die Möglichkeit bieten, seine persönlichen Daten anzupassen und
diese so auch im ADS aktuell zu halten. Bis anhin müssen die Benutzerdaten vom
Sekretariat und dem ADS-Verantwortlichen aktualisiert werden, was einen unverhältnismässigen Aufwand darstellt. Zusätzlich könnten dann beim ersten Login, die im
ADS fehlenden Daten vom Benutzer angefordert werden. Die genannten Features
sind aber eigentlich nicht die Kernaufgabe des Tools und ob GradeBook der richtige
Ort für diese Funktionalität ist muss noch abgeklärt werden.
Es sollte ein Wartungsmodus für GradeBook umgesetzt werden. Im Wartungsmodus
werden alle Benutzer ausgeloggt und können sich nicht mehr einloggen (erhalten
aber eine entsprechende Meldung). So können gefahrlos Änderungen an der Software und der Datenbank vorgenommen werden.
Beim Login-Vorgang soll nach 3 erfolglosen Login-Versuchen eine Wartezeit für weitere Versuche definiert werden um das System vor BrutForce-Attacken zu schützen.
Remo Seiler, MAS-07-02
Seite 107 von 124
6.4
Nachfolgeprojekt (GradeBook Release 2)
Im Nachfolgeprojekt für GradeBook Release 2 sollen die wichtigsten der noch nicht realisierten Ziele umgesetzt werden. Dazu muss aber vorerst die Anforderungsspezifikation überarbeitet und mit den Erweiterungsvorschlägen ergänzt werden. Da diverse Erweiterungsvorschläge voraussichtlich eine höhere Priorität haben als die, für Release 2 spezifizierten Anforderungen (siehe auch [dok2]) muss auch die Priorisierung entsprechend überarbeitet werden.
Parallel zum Beginn des neuen Nachfolgeprojektes wird auch die Betatest-Phase anlaufen
(siehe Kapitel 6.4.1). Eine grobe Übersicht über die Terminplanung des Projektes ist in Kapitel 6.4.2 zu finden.
6.4.1
Betatest-Phase
Die Betatest-Phase startet direkt im Anschluss an die Master Thesis MT-07-02.16 in der ersten Woche März 2010. Für den Betatest sind vorerst zwei Gruppen von Benutzern vorgesehen. Die eine Gruppe besteht aus 7 Elektroniker-Lernenden im 2. Lehrjahr (momentan in der
erweiterten Ausbildung im BBC), welche per Anfang März bereits produktiv mit dem System
GradeBook arbeiten werden. Diese Lernenden werden ihre bisher geführten Notentabellen
(der ersten 3 Semester) übertragen und erfassen ab diesem Zeitpunkt alle ihre Noten in
GradeBook. Das bedeutet auch, dass mit dem Start der Testphase die Backups der Datenbank geführt werden müssen (findet bereits statt) und dass diese im Notfall auch zurückgespielt werden können. Die Elektroniker-Lernenden werden zu Beginn der Kalenderwoche 09,
2010 durch den Verantwortlichen R. Seiler eingeführt.
Die zweite Testgruppe besteht aus Informatik-Lernenden, die durch den Betreuer P. Aebi
bestimmt werden. Diese haben bis anhin nicht wie die Elektroniker eine Notentabelle geführt
und Monatlich an verantwortliche Personen gesendet. Die Notenerfassung fand auf eine andere Weise statt und die Lernenden sind als Testpersonen somit weniger vorbelastet. Die
Informatik-Lernenden werden zu Beginn der Kalenderwoche 09, 2010 durch den Verantwortlichen P. Aebi eingeführt.
Die Erkenntnisse der Betatest-Phase sollen direkt in Optimierungen und in die Analyse für
Release 2 einfliessen. Die Testbenutzer werden also aufgefordert, möglichst viele Rückmeldungen zu liefern. Sie sollen dementsprechend auch versuchen Fehler oder Sicherheitslücken durch intensives „ausprobieren“ aufzudecken.
6.4.2
Termine
Der Auftraggeber konnte von der Wichtigkeit der Wartungsphase überzeugt und die nötigen
Zeitaufwände konnten ihm entsprechend begründet werden. In Zusammenarbeit mit dem
direkten Vorgesetzten (2. Betreuer der Master Thesis, M. Stalder) wurden die Termine für die
Produkteinführung, die Wartung und das Nachfolgeprojet (resp. die Nachfolgeprojekte) grob
beschrieben und entsprechende Zeitbudgets festgelegt. Eine detaillierte Termin- und Ressourcenplanung wird erst zu Beginn des nächsten Projektes festgelegt.
In Tabelle 27 sind die grob geplanten Termine und Zeitspannen aufgeführt.
Remo Seiler, MAS-07-02
Seite 108 von 124
Beschreibung der Arbeiten
Zeitspanne / Termine
Verantwortlich
Start der Betatest-Phase, Einführung der Testgruppen,
Auswertungen/Optimierung
März-Juli 2010
R. Seiler,
P. Aebi
Analyse und Entwicklung GradeBook Release 2
März-Juli 2010
R. Seiler
Produkteinführung Berufsbildner Ascom/Post
März 2010
R. Seiler
(an KE-Sitzung)
Konzepte Produkteinführung, Wartung, Änderungsmanagement, Verantwortlichkeiten
Juli 2010
R. Seiler
Einführung Lernende 2. Lehrjahr (ELO)
(Einführung INF und KK wird noch abgeklärt)
Juni-Juli 2010
M. Stalder
Einführung Lernende 1. Lehrjahr (ELO/INF/KK)
August 2010
Bereichsleiter
Einführung Lernende 3./4.. Lehrjahr (ELO)
(Einführung INF und KK wird noch abgeklärt)
August-September 2010
Coachs
Einführung Kunden (inkl. Zukünftig NL-Empfänger)
August-September 2010
Coachs
Knowhow-Transfer (Technologie) für Berufsbildner
Informatik (M. Blumenthal)
März-Oktober 2010
R. Seiler
Wartungsphase Release 1 und 2
August-Dezember 2010
R. Seiler
Konzeptionierung, Planung, Analyse und Entwicklung
Release 3 (Weitere Zusatzmodule)
Januar-Juli 2011
R. Seiler,
P. Aebi,
M. Blumenthal
Tabelle 27: Termine Projekt GradeBook Release 2
Remo Seiler, MAS-07-02
Seite 109 von 124
7
Auswertungen, Erfahrungen, Fazit
7.1
Resultate
Die gesamthaft erreichten Resultate während der Master Thesis sind sehr erfreulich. Wie die
Tabelle 28 zeigt, konnten 100% der gesteckten MUSS-Ziele erreicht und somit eine funktionierende und produktiv einsetzbare Softwarelösung für den Auftraggeber erstellt werden.
Priorität
Anzahl AF total
Implementiert
Prozentsatz der Implementierung
A
38
38
100%
B
28
23
82%
C
24
18
75%
D
26
2
8%
Tabelle 28: Zusammenfassung der Resultate
Dank der Möglichkeit während der Winterferien viel Zeit in die Implementierung investieren
zu können, wurden auch viele der optionalen Ziele erreicht. So ist auch sichergestellt, dass
die Software bereits jetzt einen hohen Komfort bezüglich Bedienung bietet und die vorhandene Funktionalität die wichtigsten Bereiche abdeckt.
Alles in Allem bin ich wie auch der Auftraggeber und die verschiedenen Stakeholder mit dem
Resultat der Arbeit sehr zufrieden.
7.2
Auswertung der Zeitaufwände und Termine
In Anhang A ist der Terminplan mit den eingetragenen Ist-Zeiten aufgeführt. In diesem Kapitel sollen nun die Termine, Zeitaufwände und Verschiebungen derselben diskutiert werden.
Der gesamte Zeitaufwand für das Projekt GradeBook beträgt nun schliesslich über 540
Stunden, was einer Differenz von mehr als 160 Stunden auf die ursprünglich budgetierte
Projektzeit entspricht (oder etwas mehr als 140%). Die 380 veranschlagten Stunden hätten
aber ungefähr gereicht, wenn nicht viele zusätzliche Ziele mit tieferer Priorität umgesetzt
worden wären. So hätten bei der Implementierung beispielsweise rund 60 Stunden gespart
werden können, wenn nur die Anforderungen der Priorität A umgesetzt worden wären. Dies
hätte auch dazu geführt, dass sich der Aufwand für Analyse, Tests und Abschlussbericht um
viele Stunden reduziert hätte. Nach meinen Schätzungen, wäre der Gesamtzeitaufwand des
Projektes für die Umsetzung aller A-Ziele bei rund 400 Stunden gelegen.
Die einzelnen Projektphasen wurden bezüglich des prozentualen Anteils am Projekt recht
gut Geschätzt, wie Tabelle 29 zeigt. Die Prozentangaben beziehen sich jeweils auf die Totale Zeit (sowohl bei Soll- wie auch bei Ist-Zeiten).
Die grösste Abweichung weist das Requirements Engineering auf. Hier wurden 132.5 anstatt
82.5 Stunden benötigt, also genau 50 Stunden mehr als geplant. Das ergibt eine Abweichung von rund 60%. Der Zeitaufwand für Gespräche und vor allem für die Dokumentation
der Anforderungen wurde massiv unterschätzt. In einem nächsten Projekt könnten aber, gemäss Feedback des Experten, einige Optimierungen vorgenommen werden. So könnte beispielsweise der Detaillierungsgrad der Anwendungsfälle etwas reduziert und somit einige
Redundanzen vermieden werden. Das würde in dieser Phase wahrscheinlich rund 10-20%
Remo Seiler, MAS-07-02
Seite 110 von 124
Zeiteinsparung einbringen. Trotz dem bleibt eine recht grosse Abweichung, die aber, dank
der gemachten Erfahrungen, bei weiteren Projekten einkalkuliert werden kann.
Die nächste grössere Abweichung gab es in der Implementierungsphase. Dort wurde rund
das Doppelte der geplanten Zeit investiert. Wie aber bereits erwähnt lag dies vor allem an
den recht ambitiösen Zielen für die Umsetzung. So habe ich mir an dieser Stelle zwar viel
Aufwand eingehandelt, aber dafür ein ansprechendes und umfangreiches Resultat erzielt.
Die Zeitaufwände für den Abschlussbericht waren ebenfalls deutlich höher als in der Planung
vorgesehen. Dies vor allem deshalb, weil ich bei der Planung für den Abschlussbericht davon ausgegangen war, dass ich grosse Teile bereits während der Analyse und DesignPhase umsetzen werde. Dies habe ich zwar auch erreicht, aber die Aufwände für die Restlichen Inhalte, insbesondere auch die Dokumentierung der Tests war deutlich zeitintensiver
als gedacht.
Wie bereits erwähnt sind in der nachfolgenden Tabelle 29 alle Soll- und Ist-Zeiten, inklusive
den prozentualen Anteilen aufgeführt.
Projektphase / Arbeitsbereich
Soll
Ist
Soll
Ist
Projektmanagement
19
18
5.0%
3.3%
Reviews, Sitzungen
10.5
17.25
2.8%
3.2%
Pflichtenheft Masterthesis
22
21
5.8%
3.9%
Requirements Engineering
82.5
132.5
21.7%
24.4%
Analyse, Design (SW und DB)
66.5
73.5
17.5%
13.5%
65
120
17.1%
22.1%
54.5
64
14.3%
11.8%
Integration
16
0
4.2%
0.0%
Abnahmetests
8
8
2.1%
1.5%
Berichte, Dokumentation
22
77
5.8%
14.2%
Präsentation
14
12
3.7%
2.2%
Implementierung
Test
Tabelle 29: Übersicht Zeitaufwände
Um die Daten der Tabelle 29 noch etwas zu verdeutlichen, werden die Zeitaufwände im Balkendiagramm in Abbildung 45 einander gegenübergestellt.
Remo Seiler, MAS-07-02
Seite 111 von 124
Präsentation
Berichte, Dokumentation
Abnahmetests
Integration
Test
Implementierung
Analyse, Design (SW und DB)
Requirements Engineering
Pflichtenheft Masterthesis
Reviews, Sitzungen
Projektmanagement
Ist
Soll
0
20
40
60
80
100
120
140
Abbildung 45: Balkendiagramm Zeitaufwände
Um die Erfahrungen in diesem Projekt möglichst gewinnbringend in nachfolgenden Projekten
einsetzen zu können, wird hier die prozentuale Verteilung der einzelnen Aufwände noch etwas genauer betrachtet (siehe Abbildung 46).
Anteile der Projektphasen (ist-Aufwände)
2%
0%
2% 3% 3% 4%
14%
24%
12%
22%
14%
Projektmanagement
Reviews, Sitzungen
Pflichtenheft Masterthesis
Requirements Engineering
Analyse, Design (SW und DB)
Implementierung
Test
Integration
Abnahmetests
Berichte, Dokumentation
Präsentation
Abbildung 46: Prozentuale Verteilung der Zeitaufwände
Auffällig dabei ist, dass die Implementierung lediglich 22% ausmacht, obschon sie deutlich
aufwändiger war als geplant. Die gesamte Analyse-Phase, also Pflichtenheft, Requirements
Engineering und Analyse- und Design machen zusammen den Löwenanteil von 42% der
gesamten Projektzeit aus, wobei die RE-Phase mit 24% die aufwändigste des gesamten
Projektes war. Ebenfalls erstaunlich für mich war, dass die Testphase effektiv 12% der Zeitaufwände beträgt. Das der Bericht mit Rund 14% zu Buche schlägt hängt wohl auch etwas
mit dem speziellen Projektumfeld zusammen, resp. mit der Tatsache, dass es sich hier um
eine Abschlussarbeit eines Studiums handelt. Letzteres führte sicherlich zu einem etwas
erhöhten Aufwand für die Dokumentation, da in einem Kundenprojekt wohl einige allgemeine
Kapitel etwas knapper gehalten werden könnten. Alles in allem entspricht zwar die Aufwandsverteilung meines Projekts nicht exakt der Verteilung wie sie in der Literatur proklamiert wird, aber die Grössenordnungen gehen in diese Richtung.
Remo Seiler, MAS-07-02
Seite 112 von 124
7.3
Projektverlauf und Erfahrungen
Eingabe: Der Start der Diplomarbeit (Einreichung der Aufgabenstellung) war etwas holprig
und kann wohl nicht gerade als sehr erfolgreich bezeichnet werden. Die erste Projekteingabe
wurde abgelehnt, mit der Begründung „Umfang und Anspruch zu tief“. Dank der grossen Unterstützung in dieser Phase, durch den jetzigen Experten Herr Godet konnten die Probleme
aber relativ schnell erkannt und gelöst werden. Die Aufgabenstellung war aufgrund falscher
Annahmen meinerseits zu offen formuliert und deutete somit auf eine geplante Minimallösung hin, was so natürlich nicht gemeint war. Im zweiten Anlauf wurde die Aufgabenstellung
dann auch genehmigt und ich konnte mich an die Arbeit machen.
Pflichtenheft: Die erste, etwas überraschende Erkenntnis war, dass für die Arbeit zusätzlich
zur Anforderungsspezifikation auch ein Pflichtenheft notwendig war. Dies war zwar aufgrund
des grossen Requirements Engineering - Anteils des Projekts sehr sinnvoll, verzögerte aber
auch etwas den geplanten Projektstart. Nicht zuletzt wegen der bereits eingeleiteten Anforderungs-Analyse (eine frühere und ausführlichere Information seitens der SWS wäre diesbezüglich hilfreich). Es musste nun also ein Weg gefunden werden, die Ziele der Master Thesis
zu beschreiben, ohne der Anforderungsspezifikation zu stark vorzugreifen. Dies erwies sich
zwar als eine recht schwierige aber lösbare Aufgabe. Ein telefonisches Review mit dem Experten hat auch gezeigt, dass ein guter Mittelweg gefunden wurde.
Requirements Engineering: Nachdem die Ziele für das Projekt inklusive der SRS fest standen, startete die erste eigentliche Projektphase, das Requirements Engineering. Letzteres
war bereits deutlich intensiver als ich das erwartet habe. Die Zusammenarbeit mit den Stakeholdern erwiese sich zwar als äusserst interessant und informativ, sie war aber auch geprägt von sehr zeitaufwändigen Gesprächen und viel Dokumentationsarbeit. Die Dokumentation der Arbeiten (was schliesslich zu mehr als 110 Seiten SRS führte) wurde zu Beginn unterschätzt, was bereits in der Anfangsphase des Projekts terminliche Engpässe zur Folge
hatte. Die ausgiebigen Abklärungen zu den Anforderungen haben sich aber, wie sich später
zeigte, sehr positiv auf die nachfolgenden Projektteile ausgewirkt. So konnte beispielsweise
die Analyse und Designphase gradlinig und ohne unvorhergesehene „Stolpersteine“ durchlaufen werden.
Analyse- und Design: Was sich in der Analyse- und Designphase stark bemerkbar machte,
war das fehlende Knowhow zu Webtechnologien und den eingesetzten Werkzeugen. So
musste ich bereits hier einige Reservezeit einsetzen um die fehlenden Inhalte (oder zumindest deren Grundlagen) zu erarbeiten. Diese Reservezeit währe in einem Kundenprojekt
natürlich nicht zu verrechnen und ich habe sie somit auch nicht in die ZeitaufwandsRechnung mit einbezogen. Nichts desto trotz konnte ich die Analyse-Phase mit einer guten
Woche Verspätung abschliessen.
Implementierung: Nach knapp 230 Stunden Arbeit und noch keiner einzigen Zeile Source
Code (mit Ausnahme der paar einfachen Prototypen) kam nun der Teil den ich sehnlichst
erwartet hatte, die Implementierung. Diese Projektphase war sehr intensiv und spannend.
Nun zeigte sich, ob die Analysearbeiten gut gemacht worden waren. Dabei viel mir erneut
auf, wie wichtig die Rolle der ersten Projektphase war. Dank den ausführlich spezifizierten
Zielen, habe ich mich in keinerlei „Sackgassen“ programmiert und ich konnte mich voll und
ganz auf die Lösung der technischen Probleme fokussieren. Einziger Wehrmutstropfen, die
Softwareanalyse und das Design mussten nach der Codierung stark überarbeitet werden. Es
Remo Seiler, MAS-07-02
Seite 113 von 124
zeigte sich, dass sich aufgrund meiner, zu Beginn doch eher rudimentären Kenntnisse1, einige Fehlüberlegungen (technischer Natur) eingeschlichen haben.
Nach rund 120 Stunden musste ich dann schliesslich die Codierung weiterer Inhalte abbrechen, da ich bereits deutlich mehr Ziele als geplant umgesetzt habe. Letzteres machte sich
auch bemerkbar, durch den steigenden Aufwand für Analyse und Design bei jedem zusätzlich angestrebten Ziel. Zudem wurde mir auch der zusätzliche dokumentations-Aufwand bewusst, den ich mir mit jedem weiteren implementierten Detail aufhalsen würde.
Erfreuliches Zwischenfazit zu diesem Zeitpunkt: der Terminplan konnte wieder eingeholt
werden2.
Dokumentation: Nun folgte fürs erste wieder viel Dokumentationsarbeit. Einerseits mussten
die Analyse- und Design-Dokumente überarbeitet und andererseits der Source Code ausführlich dokumentiert (resp. kommentiert) werden. Kommentare wurden zwar bereits während der Programmierung ausführlich eingesetzt, die Doxygen-konformen Kommentare
mussten aber noch definiert werden. Hier halfen auch wieder die bereits geleisteten Arbeiten
in der Analysephase. In dieser wurden beispielsweise die meisten Klassen, Methoden und
Attribute beschrieben und die Texte konnten mit wenigen Änderungen übernommen werden.
Test: Nachdem die wichtigsten Dokumente überarbeitet waren, folgte die Testphase der
Software. Es zeigte sich in dieser, dass zwar die Anforderungen korrekt umgesetzt wurden,
aber es tauchten etliche kleinere und grössere Fehler auf (wer sucht der findet). Die Fehler
beschränkten sich aber ausschliesslich auf Programmierfehler oder nicht einhalten von
Standards. Die Korrektur dieser Fehler ging denn auch relativ schnell von statten (glücklicherweise). Erneut war ich heilfroh, frühzeitig die Anforderungen geprüft und diese genau
durchdacht zu haben. Nicht auszudenken, wie gross der Aufwand gewesen wäre, grundsätzliche Softwarestrukturen oder ganze Bereiche der Software anpassen zu müssen3. Ich bin
dementsprechend glücklich darüber, dass ich mich gezwungen habe, den grossen Anfangsaufwand zu betreiben und mir somit grössere Probleme in der Schlussphase erspart
habe.
Was ich aber hier noch anmerken muss, ist dass der grösste Aufwand in der Testphase die
Konzeptionierung und vor allem die Dokumentation dieser Tests war. Die Definition der
Tests werde ich bei einer nächsten Arbeit wohl in eine frühere Projektphase verlegen. Es hat
sich gezeigt, dass die Tests bereits während der Entwicklung sehr hilfreich gewesen wären
und dass mir das Prinzip des „testdriven development“ einiges an Ärger und vor allem doppelter Arbeit erspart hätte.
Abschluss: Nun ist die letzte Projektphase angebrochen und wie der geneigte Leser vermuten wird schreibe ich gerade die letzten Kapitel meines Abschlussberichts. Der grösste Teil
des Berichts steht und es fehlen lediglich das aktuelle Kapitel und einige Administrative Inhalte (Abkürzungsverzeichnisse, Glossar etc.). Alles in allem, bin ich mit dem gesamten Projektverlauf sehr zufrieden und freue mich auf die Abgabe der Arbeit nächste Woche und vor
allem auf den Einsatz der Entwickelten Software Anfang nächsten Monat.
1
Bezieht sich auf die Kenntnisse der eingesetzten Technologien wie Webdesign, PHP, ApacheWebserver, Session-Handling, etc.
2
Die Feiertage und Ferien fanden dafür dieses Jahr mehrheitlich ohne mich statt…
3
Inklusive dem ganzen Rattenschwanz den das hinter sich her ziehen würde wie: Erneute Analysen,
Designs, Codierungen, Dokumentationen und Tests mit eventuell nochmals Korrekturen…
Remo Seiler, MAS-07-02
Seite 114 von 124
7.4
Schlussbetrachtung, Fazit
Nach mehr als 250 produzierten A4-Seiten Dokumentation, mit mehr als 65‘000 geschriebenen Wörtern resp. fast einer halben Million geschriebener Zeichen und rund 10‘000 programmierten Codezeilen geht nun eine der intensivsten Zeiten meiner ganzen Ausbildungskarriere zu Ende. Die Master Thesis war eine spannende, sehr lehrreiche aber auch enorm
anstrengende und zeitintensive Arbeit. Obschon ich mir eigentlich vorgenommen hatte, meine Freunde und Bekannte während dieser Zeit nicht allzu stark zu vernachlässigen, ist mir
dies gegen Schluss nicht immer ganz gelungen. Die letzten Wochen waren gezeichnet von
wenig Schlaf und fehlender Freizeit. Die vielen Erfahrungen die ich gesammelt habe, die
neuen Technologien die ich mir aneignen konnte, die vielen guten Rückmeldungen der zukünftigen Benutzer und nicht zu Letzt das befriedigende Resultat der Arbeit endschädigen
mich aber für viele Entbehrungen der letzen Monate.
Ich freue mich nun auf eine erholsame Nach-Master-Thesis-Zeit!
7.5
Danksagung
An dieser Stelle möchte ich mich bei den Personen bedanken, die mich während des gesamten Studiums und während der Master Thesis unterstützt haben:
Patrick Aebi für seine kompetente Betreuung und die vielen Stunden die er für das
Lesen meiner Dokumente, für Reviews und Besprechungen eingesetzt hat.
André-Claude Godet für das aufgebrachte Interesse und die Unterstützung vor allem
in der Anfangsphase des Projektes.
Matthias Stalder für die Unterstützung aller meiner bisherigen Ausbildungen, die Hilfe
bei der Suche nach einem geeigneten Projekt für die Master Thesis, die Unterstützung bei der Projekteingabe beim Arbeitgeber und die vielen motivierenden Feedbacks während der gesamten Zeit.
Hanspeter Linder für die Möglichkeit die Arbeit für die Firma zu schreiben.
Den verschiedenen Stakeholdern für ihre gute Mitarbeit während des Requirement
Engineerings und die vielen guten Inputs.
Den Mittstudenten Christian und Patrick für die amüsanten Stunden neben der Ausbildung, die guten Gespräche, die gemeinsamen „Feierabendbiere“ und die Zusammenarbeit während des Studiums.
Und besonders grossen Dank gilt meiner Lebenspartnerin Seraina Brunner, die mich
während des gesamten Studiums und insbesondere während den letzten fünf Monaten stets motiviert, aufgemuntert, von Alltagssorgen entlastet und tatkräftig unterstützt
hat und zudem Verständnis dafür hatte das nur wenig gemeinsame Freizeit vorhanden war.
Remo Seiler, MAS-07-02
Seite 115 von 124
A
Terminplan
Remo Seiler, MAS-07-02
Seite 116 von 124
B
Glossar Fachbegriffe
Die in diesem und dem nachfolgenden Kapitel erklärten Begriffe wurden grösstenteils aus
der Anforderungsspezifikation [dok2] übernommen und lediglich mit ein paar zusätzlichen
Begriffen ergänzt.
Begriff
Erklärung
Ascom
Die Ascom Holding AG (oder Ascom (Schweiz) AG) ist
eine international tätige Unternehmensgruppe für Telekommunikation und Service aus der Schweiz. Die Ascom
führt ein Berufsbildungszentrum (siehe Berufsbildungscenter) für technische Berufe in Bern. Sie ist der indirekte Auftraggeber für das Produkt GradeBook.
Basisausbildung
Lernende der Berufe Elektronik, Informatik und Kauffrau/Kaufmann der Ascom und von über 40 Partnerfirmen
absolvieren eine Basisausbildung im Berufsbildungscenter. Diese Basisausbildung deckt die Grundlagen (theoretische und praktische) der betrieblichen Ausbildung der
Lernenden ab, parallel dazu besuchen diese 2 Tage pro
Woche die Gewerbeschule.
Bericht
Ein Bericht ist in GradeBook ein PDF-Dokument mit Noteninformationen, dass zu einem Lernenden erstellt wird
(durch ihn selber oder einen Berufsbildner). Der Bericht
dient als Besprechungsgrundlage für Gespräche zwischen
Lernendem und Berufsbildner und als Ablagedokument für
den Lernenden.
Berufsbildner
Ein Berufsbildner ist ein gemäss Berufsbildungsverordnung legitimierter Ausbildungsverantwortlicher. Er ist im
Betrieb unter anderem für die Ausbildung und Betreuung
der Lernenden Verantwortlich.
Berufsbildungscenter
Das Berufsbildungscenter ist ein Kompetenzzentrum für
die Berufsausbildung und wird geführt von den drei Firmen
Ascom, Login und Post. Die Ascom Berufsbildung bildet in
einem Ausbildungsverbund mit über 40 Partnerfirmen Lernende in den Berufen Elektroniker, Informatiker und Kauffrau/Kaufmann im Berufsbildungscenter aus.
Die nachfolgende Beschreibung der Dienstleistungen der
Ascom Berufsbildung ist der Internetseite des Berufsbildungscenters [net15] entnommen:
Das Berufsbildungscenter hat ein modernes und auf die
Ansprüche der Zukunft ausgerichtetes Ausbildungs- und
Förderungskonzept aufgebaut, mit dem jungen Menschen
heute die notwendigen Qualifikationen und Fähigkeiten für
morgen vermittelt werden.
Junior Enterprise, die Beratungs- und Dienstleistungsstelle
im Berufsbildungscenter, ermöglicht es KMU, Industrie-,
Kantons-, Bundes- und Dienstleistungsbetrieben unsere
Ausbildungsinfrastruktur und -kompetenz gemeinsam zu
nutzen. Neben der Beratung rund um die Ausbildung von
Remo Seiler, MAS-07-02
Seite 117 von 124
Lernenden verkauft Junior Enterprise insbesondere Ausbildungsleistungen wie: Basisausbildungen oder einzelne
Module daraus, überbetriebliche Kurse/ Einführungskurse,
Vertiefungsmodule und Prüfungsvorbereitungen. Sie können aber auch das gesamte Ausbildungsmanagement von
der Auswahl der Lernenden bis zum Abschluss der Lehre
oder Teile davon an Junior Enterprise übergeben bzw.
outsourcen
Die in vorliegendem Pflichtenheft beschriebene Master
Thesis wird im Auftrag des Berufsbildungscenters durchgeführt.
Koordinaten:
Ascom (Schweiz) AG
Berufsbildungscenter
Bahnhöheweg 70
3018 Bern
Telefon: 031 999 33 33
www.berufsbildungscenter.ch
Der Student R. Seiler ist Mitarbeiter der Ascom (Schweiz)
AG und im Berufsbildungscenter als Berufsbildner Elektronik angestellt.
Coach
Den Lernenden die in der Ascom Berufsbildung eine Basisausbildung besuchen und deren Firma ein OutsourcingVertrag für die Ausbildung mit der Ascom hat ist während
der gesamten Lehrzeit ein persönlicher Coach zugeteilt.
Der Coach ist ein Mitarbeiter des Berufsbildungscenters
und zuständig für Hilfestellungen bei Problemen aller Art
und den Aufbau der beruflichen Förderung der Lernenden.
Er hat unter anderem auch eine Kontrollfunktion und
überwacht die Lernzielerreichung in den verschiedenen
Bereichen der Ausbildung (z.B. in der Gewerbeschule)
Fach
Mit Fach ist ein Schulfach der Berufsschule (Gewerbeschule) oder ein Ausbildungsmodul im Berufsbildungscenter gemeint.
Gewerbeschulnoten
Noten welche Lernende in der Gewerbeschule die sie parallel zur betrieblichen Berufsausbildung besuchen erhalten (siehe dazu auch Modulnoten)
GradeBook
GradeBook ist der Name und Arbeitstitel der Notenverwaltungs-Webapplikation die während der Master Thesis MT07-02.16 erstellt wurde. Sie wurde im Auftrag des Berufsbildungscenters erarbeitet und ist in vorliegendem Abschlussbericht ausführlich beschrieben.
Lernende
Der / Die Lernende ist die Kurzform für Lernende Person
in der beruflichen Ausbildung (früher Lehrling). Gemäss
Berufsbildungsverordnung 2008 ist dieser Begriff zwingend zu verwenden, da er geschlechtsneutral ist. Auszubildende als alternative ist nicht sinnvoll, da dieser Begriff
in Deutschland verwendet wird und dort eine nicht ver-
Remo Seiler, MAS-07-02
Seite 118 von 124
gleichbare Art der beruflichen Ausbildung beschreibt.
Note
Mit Note ist allgemein eine Schulnote aus der Berufsschule oder eine Modulnote gemeint.
Partnerfirma
Partnerfirmen sind alle Firmen, die bei der Ascom Berufsbildung die Basisausbildung für ihre Lernenden durchführen lassen.
Release 1
Das Release 1 von GradeBook ist die Pilot-Software die
ab Anfang März 2010 von einer definierten Benutzergruppe zu Testzwecken bereits produktiv eingesetzt wird.
Release 2
Das Release 2 ist die definitive Webapplikation GradeBook die ab August 2010 von allen Benutzergruppen produktiv eingesetzt wird. Ab diesem Zeitpunkt beginnt die
Wartungsphase des Produktes GradeBook.
C
Glossar Informatikbegriffe
Begriff
Erklärung
Betaversion
Wird in diesem Dokument als Synonym für die PilotSoftware verwendet (siehe Begriff Pilot-Software).
Dropdown-Menu
Ist ein Element einer graphischen Benutzeroberfläche. Ein
Menu wird beim klicken auf das Element ausgefahren. Es
wird häufig auch synonym mit Dropdown-Liste verwendet.
Newsletter
Der Newsletter ist eine regelmässig versendete MailNachricht an eine definierte Anzahl Empfänger.
Normalform
Relationale Datenbanken lassen sich zur Vermeidung von
Redundanzen und aus Performance-Gründen normalisieren. Normalformen – es gibt deren 5 – sind Abstufungen
dieser Normalisierung.
PHPMyAdmin
Ist ein Tool zur manuellen Bearbeitung von Datenbanken
über ein Webinterface.
Requirements Engineering
Ist die Projektphase in der, in Zusammenarbeit mit den
Stakeholdern, die Anforderungen an das zu erstellende
Softwareprodukt gesucht, definiert und dokumentiert werden.
Reviews
Als Reviews werden Sitzungen bezeichnet, welche die
Validierung und Verifizierung von Dokumenten und Sourcecodes zum Ziel haben.
Stakeholder
Jemand, der direkt oder indirekt Einfluss auf die Anforderungen hat.
Webapplikation
Eine Applikation die auf einem Webserver läuft. Benutzerinteraktionen laufen ausschliesslich über ein Webinterface.
Webspace
Speicherplatz für Dateien auf einem Server auf welchen
über das Internet dauerhaft zugegriffen werden kann.
Remo Seiler, MAS-07-02
Seite 119 von 124
D
Abkürzungen und Akronyme
Abk.
Bedeutung
Abk.
Bedeutung
ADS
AF
AGB
BBC
BBCnet
BG
BMS
BUC
CAPTCHA
Active Directory Service
Anforderung
Allgemeine Geschäftsbedingungen
Berufsbildungscenter
Berufsbildungscenter-Intranet
Berufsgruppe
Berufsmaturitätsschule
UseCase Berufsbildner
Completely Automated Public Turing test to
tell Computers and Humans Apart
CD
Corporate Design
LDAPS
LUC
M
MAS
mm
MT
MUC
MVC
MySQL
N
NL
LDAP über SSL
UseCase Lernender
Model
Master of Advanced Studies
Millimeter
Master Thesis
UseCase mehre Benutzer
Model-View-Controller
MY Sequential Query Language
Normalfall
Newsletter
CI
CS2
CSS
CURL
DB
DDL
DIN
DML
DMZ
EA
ERM
evtl.
F
FA
FTP
GB
GIBB
Gmail
GNU
HMI
HTML
HTTPS
ID
IDE
InnoDB
INT
IP
ISO
KW
LAN
LDAP
Corporate Identity
Creative Suite (Adobe-Produktpacket)
Cascading Style Sheets
Client for URLs
Datenbank
Data Definition Language
Deutsche Industrie-Norm
Data Manipulation Language
DeMilitarized-Zone
Enterprise Architect
Entity-Relationship-Modell
Eventuell
Fehlerfall
Funktionale Anforderung
File Transfer Protocol
GradeBook
Gewerbliche Industrielle Berufsschule Bern
Google Mail
GNU's Not Unix, open source Lizenz
Human Machine Interface
HyperText Markup Language
HyperText Transfer Protocol Secure
Identifikationsnummer
Integrated Development Environment
Storage engine für MySQL
Integer
Internet Protocol
International Standards Organisation
Kalenderwoche
Local Area Network
Lightweight Directory Access Protocol
NLE
OOP
P
PDF
PHP
Px
R
RDBMS
Res
RS
SFTP
SMTP
SQL
SRS
srv
SSL
SW
SWS
T
TA
TForm
TID
UML
URL
UTF-8
VPN
Wysiwyg
XAMPP
XHTML
XSS
ZIP
Newsletter-Empfänger
Objektorientierte Programmierung
Priorität
Portable Document Format
Hypertext Preprozessor
Pixel
Resultat
Relational DataBase Management System
Resultat
Remo Seiler
Secure File Transfer Protocol
Simple Mail Transfer Protocol
Structured Query Language
Software Requirements Specification
Server
Secure Sockets Layer
Software
Software Schule Schweiz
Testfall
Test-Abfrage
Testfall Formular
Test-Identifikationsnummer
Unified Modeling Language
Uniform Resource Locator
8-bit Unicode Transformation Format
Virtual Private Network
What You See Is What You Get
?, Apache, MySQL, Perl, PHP
Extensible Hypertext Markup Language
Cross-Site Scripting
Komprimiertes File
Tabelle 30: Abkürzungen und Akronyme
Remo Seiler, MAS-07-02
Seite 120 von 124
E
Abbildungsverzeichnis
Abbildung 1: MVC-Entwurfsmuster .......................................................................................10
Abbildung 2: Angepasstes MVC-Entwurfsmuster ................................................................11
Abbildung 3: Aufbau Framework CodeIgniter, Quelle [net4] .................................................13
Abbildung 4: Anwendungsfälle Lernender ............................................................................14
Abbildung 5: Anwendungsfälle Berufsbildner ........................................................................15
Abbildung 6: Anwendungsfälle mehrere Benutzer ................................................................15
Abbildung 7: Paketdiagramm GradeBook .............................................................................16
Abbildung 8: Architektur GradeBook.....................................................................................17
Abbildung 9: Systemklassendiagramm Controller.................................................................22
Abbildung 10: Klasse Login ..................................................................................................23
Abbildung 11: Klasse Lernender ...........................................................................................24
Abbildung 12: Klasse Berufsbildner ......................................................................................26
Abbildung 13: Klasse NewsletterAnfrage ..............................................................................29
Abbildung 14: Library Bericht mit Basisklasse (tcpdf-Library) ...............................................31
Abbildung 15: Systemklassendiagramm Models...................................................................34
Abbildung 16: Prototyp Webseiten-Layout ............................................................................37
Abbildung 17: Layout der Webseiten mittels HTML-div-Container ........................................39
Abbildung 18: Navigation Login und Newsletter-Abonnement anfragen ...............................41
Abbildung 19: Navigation Benutzerinterface Lernender ........................................................42
Abbildung 20: Navigation Benutzerinterface Berufsbildner ...................................................43
Abbildung 21: Sequenzdiagramm Login ...............................................................................44
Abbildung 22: Sequenzdiagramm Semesterübersicht (Lernender) .......................................45
Abbildung 23: Sequenzdiagramm Formular Semester bearbeiten laden ..............................46
Abbildung 24: Sequenzdiagramm Fächer hinzufügen/entfernen ...........................................47
Abbildung 25: Sequenzdiagramm Notenübersicht anzeigen .................................................48
Abbildung 26: Sequenzdiagramm Note bearbeiten...............................................................49
Abbildung 27: Sequenzdiagramm Formular Note eingeben ..................................................50
Abbildung 28: Sequenzdiagramm Formular Monatsabschluss .............................................51
Abbildung 29: Sequenzdiagramm Monatsabschluss und Noten-Newsletter .........................52
Abbildung 30: Sequenzdiagramm Details Lernender ............................................................53
Abbildung 31: Sequenzdiagramm Email Eingabe .................................................................54
Abbildung 32: Geschäftsdatenmodell ...................................................................................55
Abbildung 33: Relationen-Modell Datenbank ........................................................................58
Abbildung 34: Spezielle Tabelle für Session-Handling ..........................................................59
Abbildung 35: Tabellen für die Speicherung von Klasseninformationen ................................59
Abbildung 36: Testaufbau .....................................................................................................66
Abbildung 37: Code-Snippet MySQL-Except-Workaround ....................................................70
Abbildung 38: Klassendiagramm Unit-Tests .........................................................................73
Abbildung 39: Nicht erfolgreicher und erfolgreicher Unit-Test (Model Newsletter) ................74
Abbildung 40: Validierung des XHTML1.0 Strict Standards ..................................................75
Abbildung 41: Formular Login...............................................................................................77
Abbildung 42: Formular Noteneingabe .................................................................................79
Abbildung 43: Formular Email-Eingabe ................................................................................81
Abbildung 44: Formular Registrierung ..................................................................................83
Remo Seiler, MAS-07-02
Seite 121 von 124
Abbildung 45: Balkendiagramm Zeitaufwände ....................................................................112
Abbildung 46: Prozentuale Verteilung der Zeitaufwände ....................................................112
F
Tabellenverzeichnis
Tabelle 1: Vergleich und Nutzwertanalyse Framework .........................................................12
Tabelle 2: Methoden der Klasse Login ................................................................................23
Tabelle 3: Methoden der Klasse Lernender ..........................................................................26
Tabelle 4: Methoden der Klasse Berufsbildner .....................................................................29
Tabelle 5: Methoden der Klasse Newsletter-Anfrage ............................................................31
Tabelle 6: Methoden der Klasse Newsletter-Anfrage ............................................................33
Tabelle 7: Model-Klassen .....................................................................................................36
Tabelle 8: Hintergrundfarben GradeBook .............................................................................38
Tabelle 9: Schriftfarben GradeBook......................................................................................38
Tabelle 10: Konfiguration CodeIgniter für GradeBook...........................................................62
Tabelle 11: Doxygen-Tags ...................................................................................................64
Tabelle 12: Testabfragen Datenbank ....................................................................................70
Tabelle 13: Test Login-Formular...........................................................................................78
Tabelle 14: Test Noteneingabe-Formular .............................................................................80
Tabelle 15: Test Email-Formular ..........................................................................................82
Tabelle 16: Test Registrierungsformular ...............................................................................85
Tabelle 17: Abnahmetests zu Benutzer Lernender ...............................................................90
Tabelle 18: Abnahmetests zu Benutzer Berufsbildner ..........................................................96
Tabelle 19: Abnahmetests zu Benutzer Newsletter-Empfänger ............................................97
Tabelle 20: Abnahmetests zum Login-Vorgang (Authentifizieren) ........................................98
Tabelle 21: Vergleich Anforderungen – Resultate, Benutzer Lernender .............................100
Tabelle 22: Vergleich Anforderungen – Resultate, Benutzer Berufsbildner .........................101
Tabelle 23: Vergleich Anforderungen – Resultate, Benutzer NL-Empfänger.......................102
Tabelle 24: Vergleich Anforderungen – Resultate, mehrere Benutzergruppen ...................102
Tabelle 25: Vergleich Anforderungen – Resultate, System .................................................102
Tabelle 26: Vergleich Anforderungen – Resultate, nicht funktionale Anforderungen ...........103
Tabelle 27: Termine Projekt GradeBook Release 2 ............................................................109
Tabelle 28: Zusammenfassung der Resultate ....................................................................110
Tabelle 29: Übersicht Zeitaufwände ...................................................................................111
Tabelle 30: Abkürzungen und Akronyme ............................................................................120
Remo Seiler, MAS-07-02
Seite 122 von 124
G
Quellen
Dokumente:
[dok1]
Ascom (Schweiz) AG, Remo Seiler, Berufsbildungscenter, Pflichtenheft Master Thesis MT-0702.16, 04.11.2009, MAS-07-02-16-spec.pdf
[dok2]
Ascom (Schweiz) AG, Remo Seiler, Berufsbildungscenter, Anforderungsspezifikation Master Thesis
MT-07-02.16, 27.11.2009, dok.nseire.20091011.113.Anforderungsspezifikation GradeBook.pdf
[dok3]
Ascom (Schweiz) AG, Matthias Stalder, Berufsbildungscenter, Leitfaden technischer Bericht,
15.02.2004, dok.nstalm.20041015.101.TechnischerBericht.pdf
[dok4]
Fachhochschule Pforzheim, Dipl.-Phys. Michael Bauer, Einführung Technische Berichte,
22.08.2002, Erstellung technischer Berichte.pdf
[dok5]
DIN1421, 1983, DK 001.816 : 655.535.56 : 001.4, DIN 1421.pdf
[dok6]
Softwareschule Schweiz, André-Claude Godet, OOSD Objekt-orientierter Software-Design mit
UML, Vorlesungsskript, Ausgabe 2007 / 2
[dok7]
Softwareschule Schweiz, Othmar Bürgi, Projekt-Management
Vorlesungsskript, 2008 Version 95
[dok8]
Softwareschule Schweiz, Othmar Bürgi, Systematisches Testen von Dokumenten, Vorlesungsskript, 2007 Version 2.0
[dok9]
Softwareschule Schweiz, Dr. Simon Moser, RDB-SQL Relationale Datenbanken „Datenmodellierung und SQL I“, Vorlesungsskript, Ausgabe Oktober 2007
von SW-Entwicklungs-Projekten,
Literatur:
[lit1]
Pearson Studium, Ian Sommerville, Software Engineering, 6. Auflage, ISBN-10: 3-8273-7001-9
[lit2]
vdf Hochschulverlag AG, Carl August Zehnder, Informatik-Projektentwicklung, 4. Auflage, 2003,
ISBN-10: 3-7281-2869-4
[lit3]
Oldenbourg Wissenschaftsverlag GmbH, Bernd Oestereich, Analyse und Design mit UML2.1, 8.
Auflage, 2006, ISBN1-10: 3-4865-7926-6
[lit4]
O’Reilly Verlag GmbH, Alan Beaulieu, Einführung in SQL, 1. Korr. Nachdruck 2007, ISBN-10: 38972-1443-1
[lit5]
Galileo Computing, Thomas Theis, Einstieg in PHP 5.3 & MySQL 5.1, 5. aktualisierte Auflage 2009,
ISBN-13: 978-3-8362-1427-8
[lit6]
Galileo Computing, Gunner Thies & Stefan Reimers, PHP 5.3 und MySQL 5.1 das umfassende
Handbuch, 2. Auflage 2009, ISBN-13: 987-3-8362-1377-6
Internet:
[net1]
www.cakephp.org, Dez. 2009, Webseite des PHP-Frameworks CakePHP
[net2]
www.framework.zend.com, Dez. 2009, Webseite des Zend-PHP-Frameworks
[net3]
www.fusebox.org, Dez. 2009, Webseite des PHP-Frameworks Fusebox
[net4]
www.codeigniter.com, Dez.09 - Feb.10, Webseite des eingesetzten PHP-Frameworks CodeIgniter
mit Usermanuals, Download etc.
[net5]
www.symfony-project.org, Dez.09, Webseite des PHP-Frameworks Symfonie
[net6]
www.kohanaphp.com, Dez.09, Webseite des PHP-Frameworks Kohana
[net7]
www.phpunit.de, Jan.09, Webseite mit Informationen zum UnitTest-Framework phpUnit.
[net8]
www.jensroland.com/projects/toast, Jan.09, Webseite der UnitTest-Library Toast
[net9]
www.curl.haxx.se, Feb.09, Webseite des CURL-Tools
Remo Seiler, MAS-07-02
Seite 123 von 124
[net10]
www.tcpdf.org, Dez.09-Jan.10, Webseite der eingesetzten PDF-Library für PHP
[net11]
www.adldap.sourceforge.net, Dez.09 – Jan.10, Webseite der Eingesetzten LDAP-Library adLDAP
[net12]
kuler.adobe.com, Dez.09-Jan.10, Onlinetool von Adobe für die Zusammenstallung von Farbdesigns.
[net13]
www.css4you.de, Dez.09-Feb.10, Sehr ausführliches und verständliches CSS-Manual in deutscher
Sprache, viele gute Beispiele
[net14]
www.dynamicdrive.com/style, Dez.09-Jan.10, viele gute CSS-Beispiele
[net15]
www.berufsbildungscenter.ch, Oktober 2009, Webseite des Berufsbildungscenters Ascom, Login,
Post in Bern
[net16]
www.homepage-total.de/php/sicherheit.php, Jan.10, viele nützliche Informationen zum Thema
Web-Sicherheit.
[net17]
www.webdesignblog.de/webdesign/, Jan.10, Verschiedene Artikel unter anderem zum Thema
Sicherheit
[net18]
www.sparxsystems.com, Nov.09-Feb.10, Webseite der Firma Sparx Systems, Anbieter des UMLTools Enterprise Archtitect
[net19]
www.notepad-plus.sourceforge.net, Nov.09, Download und Information zum open source-Tool
Notepad++
[net20]
www.apachefriends.org/xampp.html, Dez.09, Download und Information zum Webserver-Paket
XAMPP
[net21]
www.mysql.de/products/workbench, Nov.09, Download und Information zu MySQL Workbench
[net22]
www.winscp.net, Nov.09, Download und Information zum FTP-Client WinSCP
[net23]
addons.mozilla.org/en-US/firefox/addon/60, Dez.09, Download des Webdeveloper-Addons für
Firefox
[net24]
www.selfhtml.org, Nov.09-Feb.10, Sehr ausführliches und verständliches HTML-Manual
[net25]
www.ch.php.net/manual/de/index.php, Dez.09-Feb.10, umfangreiches PHP-Manual (auch in deutscher Sprache)
[net26]
www.web-toolbox.net/webtoolbox, Dez.09, viele hilfreiche Tipps und Beispiele zu Webdesign, CSS,
HTML etc. (Beispiele für CSS-Buttons wurden verwendet).
[net27]
www.somacon.com, Dez.09 verschiedene Inhalte zum Thema Webdesign
[net28]
openbook.galileocomputing.de/oo, Bernhard Lahres, Gregor Raýman, Galileo Computing, Praxisbuch Objektorientierung, ISBN 3-89842-624-6, als OpenBook
[net29]
www.doxygen.org, Jan.10, open source Tool Doxygen zur Dokumentierung von Source Code.
[net30]
v.hdm-stuttgart.de/~riekert/lehre/db-kelz/, Nov.09, Andreas Kelz, Relationale Datenbanken
[net31]
http://dev.mysql.com/doc/, Dez.09-Jan.10, Reference Manuals MySQL
[net32]
www.phpframeworks.com/index.php, Nov.09, Übersicht verschiedener PHP-Frameworks.
[net33]
www.de.wikipedia.org, Okt.09-Feb.10, Verschiedene Artikel zu den Themen Webdesign, Analyse,
Design, UML, Tools, Sicherheit, etc.
[net34]
www.google.ch, 1997-2010, no comment…
Remo Seiler, MAS-07-02
Seite 124 von 124
Herunterladen