Lade Inhalt...

Software Engineering Konzepte in PHP: Eine Untersuchung

Diplomarbeit 2006 101 Seiten

Informatik - Angewandte Informatik

Leseprobe

Inhaltsverzeichnis

1 Einleitung
1.1 Ziel und Aufbau der Arbeit

2 Grundlagen
2.1 PHP
2.1.1 PHP Code in HTML einbetten
2.1.2 Variablen
2.1.3 Datentypen
2.1.4 Kontrollstrukturen
2.2 Software Engineering
2.2.1 Software Prozess Modelle
2.2.2 Analyse und Anforderungen
2.2.3 Entwurf
2.2.4 Implementierung
2.2.5 Validierung und Test
2.2.6 Inbetriebnahme und Wartung

3 Software Prozess Modelle
3.1 Das Wasserfallmodell
3.2 Evolutionäre Entwicklung
3.3 Wiederverwendungsorientierte Entwicklung
3.4 Das V-Modell
3.5 Software Prozess Modelle bezogen auf PHP Projekte

4 CASE-Tools
4.1 Versionskontrolle
4.1.1 Das Versionskontrollsystem CVS
4.1.2 Das Versionskontrollsystem Subversion
4.2 Testumgebung
4.2.1 Unit-Testing
4.2.2 Debugging
4.2.3 Lasttests
4.2.4 Profiling

5 IDEs für PHP Anwendungen
5.1 Eclipse
5.2 Zend Studio
5.3 Untersuchung von Eclipse und Zend Studio
5.3.1 Untersuchung von Eclipse
5.3.2 Untersuchung von Zend Studio
5.3.3 Vergleich von Eclipse und Zend Studio

6 Das neue Objektmodell von PHP 5
6.1 Vererbung, abstrakte Klassen und Interfaces
6.2 Kapselung
6.3 Polymorphismus
6.4 Hinweise auf Klassentypen
6.5 Kopier- und Referenzsemantik
6.6 Ausnahmebehandlung
6.7 Überladen mit __get, __set und __call
6.8 Übersicht

7 Beispielanwendung
7.1 Untersuchung eines Frameworks auf Nutzung von Software Engineering Konzepten
7.1.1 Prinzipien der Implementierung
7.1.2 Design Patterns
7.1.3 Komponenten
7.1.4 Schichtenarchitektur
7.2 Erstellung einer Beispielanwendung
7.2.1 Beschreibung der Anwendung
7.2.2 Software Prozess Modell
7.2.3 Anforderungen
7.2.4 Entwurf
7.2.5 Implementierung
7.2.6 Test
7.2.7 Inbetriebnahme
7.3 Bewertung
7.3.1 Anforderungen
7.3.2 Entwurf
7.3.3 Implementierung
7.3.4 Test
7.3.5 Inbetriebnahme
7.3.6 Architektur des Frameworks

8 Zusammenfassung und Ausblick
8.1 Zusammenfassung
8.2 Ausblick

Anhang

Abkürzungsverzeichnis

Glossar

Literaturverzeichnis

1 Einleitung

Das Internet ermöglicht Unternehmen und Institutionen, ihre Dienste und Informationen einer großen Internetnutzergemeinschaft online zur Verfügung zu stellen. Um ihre Dienste und Angebote besser verwalten zu können, benötigen sie eine auf einem Webserver laufende Anwendung, eine so genannte Webanwendung. Beispiele für Webanwendungen sind Online Shops, virtuelle Auktionshäuser oder Content Management Systeme. Es gibt Programmiersprachen, die sich für das Entwickeln von Webanwendungen bewährt haben und daher besonders eignen. Neben Java und ASP.net hat sich vor allem auch die Skriptsprache PHP in den letzen Jahren hervorgetan.

Gründe für die hohe Beliebtheit von PHP sind unter anderem, dass es einfach zu Erlernen ist (auch für Nicht-Informatiker). Desweiteren ist es einfach ein PHP Programm auszuführen, ohne hohen Konfigurationsaufwand, so dass schnell Erfolge erzielt werden können. Darüber hinaus sind Schnittstellen zu allen gängigen DBMS in die Programmiersprache integriert. Viele Webhosting Unternehmen bieten die nötige Umgebung (LAMP) zu erschwinglichen Preisen an, was PHP zu einer kostengünstigen Alternative zu anderen Technologien macht, vor allem für kleine und mittelgroße Unternehmen. Gründe, sich nicht für PHP zu entscheiden, sind ein nur rudimentäres Objektmodell und prozedurale Schnittstellen, die Veränderungen oder Erweiterungen an einer bestehenden Anwendung erschweren. Desweiteren haben sich einige Eigenschaften von PHP, die das Programmieren vereinfachen sollten, als sicherheitskritisch und portabilitätsmindernd herausgestellt. Diese Punkte wirken negativ auf die Qualität der Anwendung.

Um qualitativ hochwertige Software herzustellen, ist es während des Herstellungsprozesses notwendig, Prinzipien und Konzepte des Software Engineering umzusetzen. Das Software Engineering setzt sich mit allen Aspekten der Softwareherstellung auseinander. Es werden Theorien, Methoden und Werkzeuge verwendet, um Probleme innerhalb organisatorischer und finanzieller Beschränkungen zu lösen.

In der Version 5 verfügt PHP über ein überarbeitetes Objektmodell, mit dem objektorientierte Techniken und Prinzipien besser unterstützt werden. Desweiteren werden immer mehr Software Engineering Werkzeuge (CASE-Tools) angeboten, die den Software Herstellungsprozess unterstützen, ebenso wie Frameworks für Webanwendungen, die auf bewährten Konzepten anderer objektorientierter Programmiersprachen basieren.

1.1 Ziel und Aufbau der Arbeit

Diese Arbeit soll den Software Herstellungsprozess einer PHP Webanwendung, unter der Verwendung von Software Engineering Konzepten, untersuchen, dokumentieren und bewerten.

In Kapitel 2 wird zunächst die Programmiersprache PHP vorgestellt und anhand ihrer speziellen Eigenschaften, sowie anhand des Umgangs mit Variablen, Datentypen und Kontrollstrukturen erklärt. Desweiteren werden grundlegende Konzepte des Software Engineering erklärt.

In Kapitel 3 werden vier grundlegende Software Prozess Modelle beschrieben, die jeweils Repräsentanten einer spezifischen Vorgehensweise sind. Diese behandeln die wesentlichen Prozessabläufe Analyse, Entwurf, Implementierung, Test und Inbetriebnahme. Anschließend werden die beschriebenen Prozess Modelle auf PHP bezogen.

In Kapitel 4 werden CASE-Tools für die Versionskontrolle und für den Testprozess vorgestellt. Die CASE-Tools für den Testprozess beziehen sich auf Unit-Testing, Debugging, Lasttests und Profiling-Tests.

In Kapitel 5 werden die IDEs EasyEclipse for PHP und Zend Studio vorgestellt. Anhand einer kleinen Beispielanwendung wird untersucht, inwieweit sie sich für PHP Anwendungen eigenen. Anschließend wird bei beiden die Eignung bewertet und ein Fazit gezogen.

In Kapitel 6 wird das neue Objektmodel von PHP 5 vorgestellt. Anhand von Beispielen zu Polymorphismus, Kapselung, Vererbung, abstrakten Klassen und Interfaces, werden objektorientierte Techniken und Prinzipien erklärt. Es werden weitere Neuerungen vorgestellt und anschließend tabellarisch die Objektmodelle von PHP 5 und PHP 4 miteinander verglichen.

In Kapitel 7 werden die Konzepte des Software Engineering anhand einer Beispielanwendung umgesetzt. Es wird zunächst ein Framework für Webanwendungen auf Nutzung von Software Engineering Konzepten untersucht. Anschließend soll, anhand einer überschaubaren Beispielanwendung, exemplarisch die Konstruktion einer Webanwendung unter Verwendung von PHP 5, den vorgestellten CASE-Tools und Software Engineering Konzepten beschrieben und der Herstellungsprozess bewertet werden.

Zum Schluss wird ein Ausblick gegeben, wie ein sinnvolles Weiterführen dieser Arbeit aussehen könnte.

2 Grundlagen

Im Folgenden werden die Grundlagen zu PHP und Software Engineering erläutert.

2.1 PHP

PHP (ein rekursives Akronym für „PHP: Hypertext Preprocessor“) ist eine Skriptsprache, die hauptsächlich für Webanwendungen entwickelt wurde [Will2005].

Es gibt drei verschiedene Bereiche in denen PHP eingesetzt werden kann [php]:

- Der Einsatz von PHP zum Entwickeln von Webanwendungen.
- Der Einsatz von PHP mit einem Kommandozeileninterpreter.
- Der Einsatz von PHP zum Entwickeln von grafischen Benutzeroberflächen (GUI).

Das Haupteinsatzgebiet von PHP, auf das sich auch das Hauptaugenmerk dieser Arbeit richtet, ist das Entwickeln von Webanwendungen.

PHP Skripte werden serverseitig ausgeführt. Wenn ein Webbrowser Client eine Ressource über das HTTP-Protokoll von einem Webserver anfordert, die sich auf ein PHP Skript bezieht, wird die Anfrage an die Skript-Engine weitergeleitet. Die Skript-Engine führt den Code, den das PHP Skript enthält, aus. Das Ergebnis der Ausführung wird von der Skript-Engine an den Webserver zurückgegeben, der wiederum das Ergebnis an den Webbrowser Client zurückgibt [Will2005].

Mit PHP kann man nach dem Programmierparadigma der prozeduralen- oder der objektorientierten Programmierung programmieren. In dieser Arbeit wird das Programmierparadigma der objektorientierten Programmierung verwendet.

2.1.1 PHP Code in HTML einbetten

PHP Code wird in HTML Dokumenten eingebettet oder eingebunden. Beispiel 2.1 zeigt wie man PHP Code in ein HTML Dokument einbettet.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.1: Einbetten von PHP Code in HTML.

Der PHP Teil im Beispiel 2.1 ist der Folgende:

?php

print "hello world";

?

Ein PHP Codeblock hat einen Start-Tag ?php und einen End-Tag ?. Diese Tags sind nötig, damit die Skript-Engine beim Parsen des PHP Dokumentes erkennen kann, wo PHP Code anfängt und wo es endet. Es ist auch möglich, mehrere Codeblöcke in einem HTML Dokument zu plazieren [Gutm2005].

Die PHP Syntax ist der Syntax der Programmiersprachen C und Perl sehr ähnlich. Eine Anweisung wird mit einem Semikolon abgeschlossen. Zwischen dem Start- und End-Tag eines Codeblocks können mehrere Anweisungen stehen. Leerzeichen, Tabulatoren und Umbrüche haben keine Auswirkungen auf das Ausführen des Codes [Will2005].

In PHP ist es möglich auf drei verschiedene Weisen Kommentare zu schreiben [Gutm2005].

- Wie in der Programmiersprache C:
/* Ein mehrzeiliger
Kommentar
*/

- Wie in der Programmiersprache Java:
// Ein einzeiliger Kommentar

- Wie in der Programmiersprache Perl:
# Ein einzeiliger Kommentar

2.1.2 Variablen

Variablennamen in PHP fangen mit einem $ Zeichen an, gefolgt von einem Buchstaben (a-z, A-Z) oder Unterstrich (_) und werden dann von beliebig vielen alphanumerischen Zeichen und Unterstrichen ergänzt. Variablennamen unterscheiden zwischen Groß- und Kleinschreibung (siehe Beispiel 2.2).

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.2: Gültige und ungültige Variablennamen in PHP.

Variablen in PHP sind dynamisch typisiert. Sie müssen vor ihrer Benutzung weder deklariert, noch typisiert werden. Erst bei ihrer Benutzung, z.B. durch Wertzuweisung, wird ihr Typ implizit definiert (bzw. umdefiniert) und die Variable implizit deklariert [Will2005] (siehe Beispiel 2.3).

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.3: Wertzuweisung nicht deklarierter Variablen.

Der Typ einer Variablen wird durch ihren Wert bestimmt. Im obigen Beispiel 2.3 wird die Variable $strVar durch die Zuweisung der Zeichenkette “2“ zu einem String typisiert. Bei der arithmetischen Operation wird ihr Typ in einen numerischen Typ umgewandelt. Der Wert wird in die numerische Repräsentation des String Wertes “2“ umgewandelt.

In PHP ist es möglich, Variablen zur Laufzeit zu erstellen und dann auf diese zuzugreifen (siehe Beispiel 2.4).

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.4: Erstellen von Variablen zur Laufzeit.

Durch Voranstellen eines $ Zeichens vor einer Variablen, wird der Gesamtausdruck als neue Variable interpretiert. Beliebig viele Indirektionsebenen durch wiederholtes Voranstellen eines $ Zeichens sind möglich [Gutm2005].

2.1.3 Datentypen

In PHP gibt es die skalaren Datentypen Boolean, Float, Integer und String, und die zwei zusammengesetzten Datentypen Array und Object. Ferner gibt es noch die speziellen Datentypen Null und Resource [Gutm2005].

Eine Variable hat den Wert Null, wenn sie keinen Wert hat.

Boolean

Eine Boolean Variable kann nur zwei Werte annehmen, den Wert true oder false.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.6: Erstellen von Variablen vom Typ Boolean.

Integer

Eine Integer Variable kann nur vorzeichenbehaftete, ganzzahlige Werte annehmen. Die Werte können in dezimaler, hexadezimaler oder oktaler Schreibweise angegeben werden.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.7: Erstellen von Variablen vom Typ Integer.

Float

Eine Float Variable nimmt vorzeichenbehaftete Fließkommazahlen - Werte an. Die Werte können auch in Exponentialschreibweise angegeben werden.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.8: Erstellen von Variablen vom Typ Float.

String

Eine String Variable nimmt Zeichenketten als Wert an. Die Zeichenketten können alle beliebigen Zeichen enthalten. Zeichenketten müssen mit doppelten Anführungszeichen (") oder einfachen Anführungszeichen (') begrenzt werden.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.9: Erstellen von Variablen vom Typ String.

Zeichenketten mit doppelten Anführungszeichen haben die Besonderheit, dass Variablen innerhalb der Zeichenkette eingebettet werden können. Der Wert einer eingebetteten Variablen wird durch die entsprechende String - Repräsentation des Wertes umgewandelt.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.10: Einbetten von Variablen in Zeichenketten, begrenzt durch doppelte Anführungszeichen.

Wenn eine Zeichenkette ein doppeltes Anführungszeichen oder das Zeichen $ enthalten soll, muss ein Schrägstrich rückwärts vorangestellt werden. Doppelte Anführungszeichen innerhalb einer Zeichenkette werden sonst als Zeichenkettenbegrenzung interpretiert.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.11: Schützen von besonderen Zeichen durch Voranstellen eines Schrägstrich rückwärts - Zeichens.

Diese besondere Schreibweise gilt auch für die folgenden Zeichen [Gutm2005]:

Abbildung in dieser Leseprobe nicht enthalten

Tabelle 2.1: Zu schützende Zeichen bei Verwendung von Zeichenketten mit doppelten Anführungszeichen.

Für Strings mit einfachen Anführungszeichen gilt, dass Variablen nicht eingebettet werden können. Ebenfalls werden besondere Steuerzeichen wie \n für Zeilenumbruch nicht unterstützt. Lediglich einfache Anführungszeichen und Schrägstrich rückwärts müssen durch ein vorangestelltes Schrägstrich rückwärts geschützt werden (\' bzw. \\).

Eine weitere Möglichkeit Zeichenketten zu begrenzen, ist das Anwenden von Here-Dokumenten [Gutm2005]. Enthält eine Zeichenkette viele Anführungszeichen, so kann bei der Verwendung von Here-Dokumenten auf das Voranstellen eines Schrägstrich rückwärts (\)verzichtet werden.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.12: Eingrenzen einer Zeichenkette mit Here-Dokumenten.

Die vordere Abgrenzung des Textes beginnt mit , gefolgt von einer Zeichenkette, die nicht im Text enthalten sein darf. Die hintere Abgrenzung des Textes ist eine neue Zeile mit der Zeichenkette aus der vorderen Abgrenzung (ohne ), gefolgt von einem optionalen Semikolon (;) und einem notwendigen Zeilenumbruch. An dem Text vorgenommene Formatierungen durch Leerzeichen, Tabulatoren und Umbrüche werden übernommen. Schutzmechanismen durch Schrägstrich rückwärts (\) und Einbettungen von Variablen gelten genauso, wie bei Strings mit doppelten Anführungszeichen (mit Ausnahme von Anführungszeichen) [Gutm2005].

Array

Ein Array in PHP entspricht einer geordneten Menge an Elementen. Jedes Element in einem Array hat einen dazugehörigen Schlüssel, über den man auf das Element zugreift. Schlüssel können nicht negative Integer Zahlen oder String Zeichenketten sein. Dabei können in einem Array sowohl Integer Zahlen, als auch String Zeichenketten als Schlüssel verwendet werden. Werden bei der Erzeugung von einem Array keine Schlüssel angegeben, werden automatisch Schlüssel in Form von Integer Zahlen angelegt. Die Elemente in einem Array können jeden Datentyp annehmen, ob skalar oder zusammengesetzt. Ein Array wird mit dem Sprachkonstrukt array() erzeugt [Will2005].

Beispiel 2.13 zeigt, wie Arrays erzeugt werden können, ohne explizite Angabe eines Schlüssels und wie der Zugriff auf die Array Elemente erfolgt.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.13: Erzeugen von Arrays ohne explizite Angabe eines Schlüssels.

Beispiel 2.14 zeigt, wie Arrays mit expliziter Angabe eines Schlüssels erzeugt werden können und wie der Zugriff auf die Array Elemente erfolgt.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.14: Erzeugen von Arrays mit expliziter Angabe eines Schlüssels.

Object

Mit PHP kann man nach dem Programmierparadigma der objektorientierten Programmierung programmieren. Eine Variable des Typs Object ist eine Instanz einer konkreten Klasse oder ein Typ eines Interfaces. Beispiel 2.15 zeigt eine Klasse und das Zuweisen einer Instanz der Klasse an eine Variable.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.15: Die Klasse Person und ihre Instanziierung.

In Kapitel 6 wird das neue Objektmodel von PHP 5 genauer beschrieben.

Resource

Der Datentyp Resource entspricht einer PHP-Erweiterungsressource. Diese sind beispielsweise eine Datenbankabfrage, eine geöffnete Datei oder eine Datenbankverbindung (siehe Beispiel 2.16). Die Funktion mysql_connect() ist eine Funktion, die eine Verbindung zu einem MySQL RDBMS herstellt und eine Datenbankverbindung als Rückgabewert zurück gibt. Dieser Rückgabewert ist vom Typ Resource. Nur spezielle Funktionen können diesen Datentyp verarbeiten.

Abbildung in dieser Leseprobe nicht enthalten

2.1.4 Kontrollstrukturen

In PHP gibt es Kontrollstrukturen für bedingte Steuerungen und für Steuerungen von Schleifen.

Bedingte Steuerungen

Für bedingte Steuerungen können das if …else Sprachkonstrukt oder das switch Sprachkonstrukt verwendet werden. Die Syntax der Sprachkonstrukte basiert auf der Syntax der Programmiersprache C. Es ist jedoch auch eine alternative Schreibweise möglich (siehe Tabelle 2.2 [Gutm2005]).

Abbildung in dieser Leseprobe nicht enthalten

Tabelle 2.2: if…else – Anweisung.

Das folgende Beispiel zeigt die alternative Schreibweise der if…else –Anweisung.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.17: Alternative Schreibweise der if…else –Anweisung.

Steuerungen von Schleifen

Für Steuerungen von Schleifen gibt es die Sprachkonstrukte while, do…while, for und foreach. Die Syntax der Sprachkonstrukte basiert ebenfalls auf der Syntax der Programmiersprache C. Es ist jedoch auch eine alternative Schreibweise möglich [Gutm2005].

Das folgende Beispiel zeigt die alternative Schreibweise der while –Schleifensteuerung.

Abbildung in dieser Leseprobe nicht enthalten

Beispiel 2.18: Alternative Schreibweise der while –Schleifensteuerung.

2.2 Software Engineering

Software Engineering setzt sich mit allen Aspekten der Softwareherstellung auseinander und wird als technische Disziplin betrachtet.

Die Betrachtungsweise der technischen Disziplin begründet sich damit, dass bewusst Theorien, Methoden und Werkzeuge verwendet werden, um Probleme zu lösen. Dabei werden Lösungen innerhalb organisatorischer und finanzieller Beschränkungen gesucht.

Die Auseinandersetzung mit den Aspekten der Softwareherstellung begründet sich damit, dass unabhängig von den technischen Prozessen der Softwareentwicklung, auch Tätigkeiten wie Softwareprojektverwaltung und Entwicklung von Theorien, Methoden und Werkzeugen, die die Softwareherstellung unterstützen, betrachtet werden.

Um qualitativ hochwertige Software herzustellen, ist es wichtig systematisch und organisiert vorzugehen. Insbesondere geht es beim Software Engineering darum, für spezifische Problematiken, die passendste Vorgehens- und Arbeitsweise auszuwählen. Dabei kann sich zeigen, dass sich eine von bewährten Theorien, Methoden und Werkzeugen gelöstere Vorgehensweise unter bestimmten Umständen als besonders geeignet herausstellt [Somm2001].

2.2.1 Software Prozess Modelle

Jede Entwicklung von Software soll in einem geregelten organisatorischen Rahmen entstehen. Ein Software Prozess Modell beschreibt solch einen Rahmen als eine abstrakte Darstellung eines Softwareprozesses und strukturiert den Ablauf der Softwareentwicklung. Ein Software Prozess Modell ist eine nützliche Abstraktion, um verschiedene Ansätze und Arbeitsschritte der Softwareentwicklung zu erläutern. Ein Software Prozess Modell ist somit ein wesentliches Hilfsmittel, um qualitativ hochwertige Software zu entwickeln [Somm2001], [Balz2000], [Zuse2001].

Jedes Software Prozess Modell birgt auch Risiken. Daher ist es notwendig, zu jeder Zeit ein Maß an Objektivität beizubehalten. Das Hauptziel ist der Erfolg der Softwareentwicklung und nicht die konsequente Abarbeitung des Software Prozess Modells. In Kapitel 3 wird näher auf Software Prozess Modelle eingegangen.

2.2.2 Analyse und Anforderungen

Der Vorgang der Analyse dient zur Beschreibung der gewünschten Anforderungen an das Softwareprodukt. Anforderungen an das Softwareprodukt werden in funktionale und nicht funktionale Anforderungen unterteilt. In der Anforderungsanalyse sollen alle Anforderungen an das Softwareprodukt ermittelt werden. Die Anforderungsanalyse ist ein sich wiederholender Prozess, in dem die Anforderungen dokumentiert und Fragen geklärt werden. In der Anforderungsanalyse wird das Softwareprodukt von allen Projektbeteiligten beschrieben. Die Projektbeteiligten sind Endbenutzer, die das Softwareprodukt verwenden werden, sowie alle anderen Personen in der Organisation, die mit dem Softwareprodukt zu tun haben [Somm2001], [Zuse2001].

Laut [Somm2001] besteht die Anforderungsanalyse aus vier Phasen:

1. Die Durchführbarkeitsstudie, in der im Rahmen der finanziellen Möglichkeiten des Kunden abgeschätzt wird, ob die Bedürfnisse des Kunden mit Hilfe aktueller Software- und Hardwaretechnologien verwirklicht werden können.
2. Bestimmung und Analyse der Anforderungen, in der auf Erfahrungswerte bestehender Systeme zurückgegriffen wird, bzw. unterschiedliche Systemmodelle und Prototypen entwickelt werden, um dem Analytiker zu helfen, das zu spezifizierende System besser zu verstehen.
3. Spezifikation der Anforderungen, in der die gesammelten Informationen der Analyse, als Benutzer- und Systemanforderungen in dem Pflichtenheft notiert werden.
4. Validierung der Anforderungen, in der alle Anforderungen noch einmal darauf getestet werden, ob diese realistisch, konsistent und vollständig sind. Entdeckte Fehler werden im Anforderungsdokument berichtigt.

Aufgrund der unterschiedlichen Denkmuster aller Projektbeteiligten, kann sich die Kommunikation zwischen allen Parteien als sehr schwierig gestalten. Endbenutzer können in ihrem Fachbereich ein Fachvokabular benutzen, dessen Bedeutung sich nicht mit dem allgemeinen Verständnis des Softwareentwicklers deckt. Eine weitere Schwierigkeit in der Anforderungsanalyse ist die Unterscheidung zwischen dem was der Kunde wünscht, und dem was wer wirklich benötigt [Somm2001], [Zuse2001].

Die Tabelle 2.3 zeigt, welche Ergebnisse eine Anforderungsanalyse (laut [Zuse2001]) liefern sollte.

Abbildung in dieser Leseprobe nicht enthalten

Tabelle 2.3: Produkte der Anforderungsanalyse und deren Zweck [Zuse2001].

2.2.3 Entwurf

Der Vorgang des Entwerfens dient dazu, aus den gewonnenen Erkenntnissen der Anforderungsanalyse, eine softwaretechnische Lösung im Sinne einer Softwarearchitektur zu entwickeln. Die Softwarearchitektur soll alle Anforderungen (funktionale und nicht funktionale) an Produkt und Qualität erfüllen. Die Softwarearchitektur wiederum beschreibt ihrerseits die Struktur des Softwaresystems durch Aufteilung des Systems in miteinander arbeitende Subsysteme oder auch Systemkomponenten [Balz2000], [Somm2001].

Systemkomponenten beschreiben einen abgegrenzten Teil des Softwaresystems und dienen als Bausteine für die Struktur des Softwareprodukts. Bei einer Softwarearchitektur, die aus vielen Systemkomponenten besteht, ist eine stärkere Strukturierung sinnvoll. In [Balz2000] wird die Möglichkeit der Zuordnung der Systemkomponenten zu verschiedenen Schichten beschrieben, so dass eine Schichtenarchitektur entsteht. Systemkomponenten innerhalb einer Schicht können beliebig aufeinander zugreifen. Zwischen den Schichten gilt, dass Schichten einer höheren Abstraktionsebene auf darunter liegende Schichten zugreifen können, jedoch nicht von unten nach oben.

Laut [Balz2000] besitzt eine Schichtenarchitektur die folgenden Vorteile:

- Übersichtliche Strukturierung in Abstraktionsebenen oder virtuelle Maschinen.
- Keine zu starke Einschränkung des Entwerfers, da er neben einer strengen Hierarchie, noch eine liberale Strukturierungsmöglichkeit innerhalb der Schichten besitzt.
- Es werden die Wiederverwendbarkeit, die Änderbarkeit, die Wartbarkeit, die Portabilität und die Testbarkeit unterstützt.

Die Nachteile:

- Effizienzverlust, da alle Daten über verschiedene Schichten transportiert werden müssen.
- Eindeutig von einander abgrenzbare Abstraktionsschichten lassen sich nicht immer definieren.
- Innerhalb einer Schicht kann Chaos herrschen.

Um dem letzen Punkt der Nachteile entgegenwirken zu können und den letzten Punkt der Vorteile nutzen zu können, wird in [Zuse2001] auf die Wichtigkeit von geringer Koppelung und starker Kohäsion hingewiesen.

Mit Koppelung misst man den Grad der Abhängigkeit zwischen zwei gleichwertigen Elementen (z.B. Komponenten, Module oder Klassen). Diese Abhängigkeit entsteht durch Nutzung der Funktionalität eines anderen Elements. Die Abhängigkeit zwischen den Elementen erhöht sich, wenn Funktionalität nicht richtig zusammengefasst wird.

Mit Kohäsion misst man den inneren Zusammenhalt eines Elements. Bei einem Element, das zuviel Funktionalität bewerkstelligt, nimmt das Maß an Kohäsion ab. Ungenutzte Attribute und Methoden (die nur für Ausnahmefälle vorgesehen sind) sind Zeichen für geringe Kohäsion.

Werden diese Grundsätze außer acht gelassen, ergeben sich Probleme bei der Wartung des Systems. Komponenten können nicht ausgetauscht werden, aufgrund von hohen Abhängigkeiten und Rücksichtnahme auf Sonderfälle.

2.2.4 Implementierung

In [Balz2000] (Kapitel 4.2, Seite1066) werden vier Prinzipien, die bei der Implementierung eingehalten werden sollen, beschrieben. Diese sind:

- Das Prinzip der Verbalisierung.
- Das Prinzip der problemadäquaten Datentypen.
- Das Prinzip der Verfeinerung.
- Das Prinzip der integrierten Dokumentation.

Das Prinzip der Verbalisierung soll dazu dienen, die Ideen und Konzepte des Programmierers im Quelltext zu visualisieren und zu dokumentieren. Eine gute Verbalisierung kann z.B. durch aussagekräftige Namensgebung für Klassen, Attribute, Konstanten und Methoden und geeignete Kommentare erreicht werden. Die Lesbarkeit wird deutlich verbessert und das Programm wird änderungsfreundlicher.

Das Prinzip der problemadäquaten Datentypen soll dazu dienen, für jedes Problem, bezogen auf seine Daten, adäquate Datentypen zu wählen. Die Aufgabe besteht darin, das Angebot an Konzepten einer Programmiersprache optimal zur problemnahen Lösung zu verwenden. Können Daten durch skalare Basistypen modelliert werden, sollte der geeignete Basistyp ausgewählt werden. Komplexere Daten können auf zusammengesetzten Datenstrukturen (assoziative Listen, Strukturen, Klassen) abgebildet werden.

Das Prinzip der Verfeinerung dient dazu, ein Programm bzw. eine Operation durch Abstraktionsebenen zu strukturieren. Da die Implementierung einer Systemkomponente lokal überschaubar ist, ist die Einhaltung des Geheimnisprinzips zwischen Verfeinerungsebenen nicht erforderlich. Die bei der Konzeption eines Programms entstandenen Verfeinerungsebenen sollen sich im Programm widerspiegeln.

Das Prinzip der integrierten Dokumentation beschreibt die entwicklungsbegleitende Dokumentation des Quellcodes durch die folgenden Angaben:

- Kurzbeschreibung der Klasse durch einen aussagekräftigen Namen und Beschreibung der Klasse mit der Angabe, ob es sich um eine GUI-, Fachkonzept- oder Datenhaltungsklasse handelt.
- Angabe von Verwaltungsinformationen, wie z.B. Autor, Versionsnummer und Datum.
- Kommentierung des Quellcodes der Attribute und Methoden einer Klasse in maschinenlesbarer Form (z.B. von Programmen wie Javadoc und PHPdoc), durch die Verwendung bestimmter Befehle innerhalb eines Kommentars, so dass eine automatische Dokumentation in HTML-Format erstellt werden kann.

Dieses ermöglicht eine einfache Einarbeitung in die Anwendung bei Personalwechsel oder neuen Mitarbeitern und eine gute Wartbarkeit der Anwendung.

In [Zuse2001] wird auf die Wichtigkeit von Namenskonventionen und Codegestaltung hingewiesen. Bestimmte Namenskonventionen sollen eingehalten werden, um die Lesbarkeit des Quellcodes zu erhöhen. Diese Namenskonventionen sollen bei jedem wählbaren Namen (z.B. Klassen, Methoden, Attribute, Parameter) angewendet werden. Die Gestaltung des Quellcodes beschreibt, wie der Quellcode für eine bessere Lesbarkeit formatiert werden soll. Die Regeln für Namenskonventionen und Codegestaltung sollen während der Implementierungsphase durchgehend beibehalten werden.

2.2.5 Validierung und Test

Der Prozess der Validierung soll sicherstellen, dass das Softwareprodukt seine Spezifikation erfüllt. Dieses wird durch phasenübergreifende Überprüfungsprozesse, wie Inspektionen und Reviews, sichergestellt. Den Hauptteil der Validierung nimmt der Prozess des Testens ein. Der Vorgang des Testens überprüft das Ergebnis der Implementierung während und nach der Implementierungsphase. Der Prozess des Testens ist in verschiedene Phasen aufgeteilt. Zunächst werden Einzeltests angewendet, bei denen einzelne Komponenten auf ihre korrekte Funktionsweise getestet werden. Dann werden Modultests angewendet, bei denen voneinander abhängige Komponenten zu einem Modul zusammengefasst werden, so dass das Modul ohne die anderen Systemmodule getestet werden kann. Darauf folgen Subsystemtests, bei denen Module zu einem Subsystem zusammengefasst werden, so dass auf übereinstimmende Schnittstellen getestet werden kann. In der Phase der Systemtests, bei denen die Subsysteme zum System zusammengefasst werden, sollen Fehler gefunden werden, die durch Interaktionen zwischen den Subsystemen und durch Schnittstellenprobleme entstehen. Funktionale und nicht funktionale Anforderungen werden auf ihre korrekte Umsetzung geprüft. Der Abnahmetest erfolgt in der letzten Phase, bevor das System für den Betrieb freigegeben wird. Es wird, statt mit simulierten Daten, mit Daten, die der Kunde zur Verfügung stellt, getestet. Dabei können Fehler und Lücken in der Definition der Systemanforderung enthüllt werden, wenn die vom Kunden gestellten Daten das System stärker belasten, als die Testdaten [Somm2001].

In Kapitel 4.2 werden weitere Testmethoden vorgestellt.

2.2.6 Inbetriebnahme und Wartung

Im Prozess der Inbetriebnahme muss zunächst die Zielumgebung konfiguriert werden und gegebenenfalls bestehende Datenbestände in die Zielumgebung übernommen werden. Anschließend wird das fertige System auf der Zielumgebung installiert. Integrationstests sollen sicherstellen, dass das fertige System auf der Zielumgebung ohne Abweichungen von der Integrationsspezifikation abläuft. Ist dies der Fall, kann die Abnahme erfolgen. Die Abnahme kann auf Grundlage der festgelegten Anforderungen während der Analysephase erfolgen [Zuse2001].

Wartungsarbeiten werden sowohl an der Zielplattform, als auch am System vorgenommen. Diese erfolgen zum einen zyklisch bei Tätigkeiten, die in regelmäßigen Abständen durchgeführt werden müssen, oder adhoc bei einem Systemabsturz oder bei schweren Fehlern, die die Datensicherheit gefährden [Zuse2001].

Der Prozess der Wartung sollte sich nicht nur auf das Beheben von Fehlern und der Umsetzung von Änderungswünschen beschränken, sondern sollte auch zu strukturverbessernden Maßnahmen des Systems führen.

In [Somm2001] wird darauf hingewiesen, dass die Trennung von Softwareentwicklung und Softwarewartung immer unwichtiger wird, und dass es sinnvoller ist, Entwicklung und Wartung als einen kontinuierlichen Prozess zu betrachten. So kann sich die Software den veränderten Anforderungen und den Kundenbedürfnissen in einem evolutionären Prozess anpassen.

[...]

Details

Seiten
101
Erscheinungsform
Originalausgabe
Jahr
2006
ISBN (eBook)
9783836606554
Dateigröße
652 KB
Sprache
Deutsch
Katalognummer
v225436
Institution / Hochschule
Hochschule für Angewandte Wissenschaften Hamburg – Technik und Informatik
Note
2,0
Schlagworte
software engineering prozess modelle webanwendungs-framework konzepte

Autor

Teilen

Zurück

Titel: Software Engineering Konzepte in PHP: Eine Untersuchung