Donnerstag, 16. Dezember 2010

Software Testing und Qualitätssicherung


Download Folien
hier

Inhalt
  • Grundlagen Software Qualitätssicherung
  • Komponententests
  • Integrationstests
  • Systemtests

Lernziele (Fragen zur Vorlesung)
  • Was sind Qualitätskriterien guter Software?
  • Was wird bei Reviews geprüft? Wer prüft?
  • Welche Review Verfahren kennen Sie?
  • Welche Integrationsstrategien kennen Sie?
  • Wie können Tests als Tabellen modelliert werden?
  • Was ist eine Action Test Tabelle?
  • Was wird beim Integrationstest getestet? Welche typischen Fehler sollen hier gefunden werden?
  • Welche Java Namenskonventionen kennen Sie?
  • Wann im Software Lebenszyklus sind Fehler besonders teuer?
  • Beschreiben Sie die Phasen in die ein Unit Tests aufgeteilt werden kann.
  • Was bezeichnet der Begriff Testabdeckung?
  • Warum ist eine vollständige Testabdeckung i.d.R. nicht möglich?
  • Wie kann ein Werkzeug wie CodeCover den Abdeckungsgrad bestimmen?

Literatur
  • Andreas Spillner - Basiswissen Softwaretest - 2005
  • xUnit Test Patterns: Refactoring Test Code - Gerard Meszaros 2007
  • Continuous Integration: Improving Software Quality and Reducing Risk - Paul M. Duvall, Steve Matyas, Andrew Glover - 2007

Links

Mittwoch, 15. Dezember 2010

Datenbankzugriff mit der Java Persistence API



Download Folien:
hier

Download Source Übungen:
  • JPA Basar Beispiel für Übungen als Rahmen - hier
  • Simple Task Verwaltung für alle die ihren Code nicht dabei haben - hier

Inhalt
  • Wiederholung Servlets und AJAX
  • Java Annotationen
  • Einführung in die Grundlagen der Java Persistence API

Lernziele (Fragen zur Vorlesung)
  • Was sind Annotationen?
  • Wozu können Annotationen genutzt werden?
  • Was versteht man unter einem POJO?
  • Was ist ein Marker-Interface?
  • Wozu sollte eine Klasse das Interface Serializable implementieren?
  • Was ist eine Entity?
  • Wie kann man mit JPA Objekte auf eine OR Datenbank abbilden?
  • Wozu wird die Schnittstelle Entity Manager in JPA genutzt?
  • Was versteht man unter einem DTO (Data Transfer Object) oder TO (Transfer Object)?
  • Wann spricht man von Detached Entities? Wozu kann man diese in JPA nutzen?
  • Was ist eine Transaktion?
  • Wie kann man in JPA Transaktionen steuern?
  • Wozu dient die Datei META-INF/persistence.xml?
  • Wie kann man Assoziation (Beziehungen 1..1, 1..* etc.) zwischen Objekten auf die Datenbank mit JPA abbilden?

Literatur
  • Patterns of Enterprise Application Architecture, Martin Fowler, 2002
  • Enterprise JavaBeans 3.1, Andrew Lee Rubinger, Bill Burke, 2010
  • Pro JPA 2: Mastering the Java Persistence API, Mike Keith  Merrick Schincariol, 2009

Links

Sonntag, 12. Dezember 2010

Nachtrag AJAX und JQuery

In der letzten Vorlesung haben wir AJAX kennengelernt. Mit AJAX kann der Client (die JavaScript Anwendung) asynchron Daten z.B. via XML oder JSON bei einem HTTP Server abfragen oder übertragen. In der Vorlesung haben wir gesehen das AJAX unterschiedlich in den Browser Implementierung realisiert worden ist. IE6 hat ein anderes AJAX Modell wie die Mozilla basierten Browser. Daher hatten wir den folgenden JavaScript Code für eine AJAX Aufruf mit einer Browserweiche geschrieben.

In der Praxis nutzt man meist ein JavaScript Frameworks oder APIs wie z.B. JQuery die die Unschönheiten der Browser Implementierung für DOM, AJAX etc. kapseln. Mit JQuery sieht der AJAX Aufruf von oben, wesentlich eleganter aus, hier der JQuery basierte Quelltext.

Links

Nachtrag HTTP Cookies und Session

In der letzten Vorlesung haben wir gelernt wie man im zustandlosen HTTP Protokoll einen Zustand auf dem Client (Webbrowser, z.B. Firefox) oder Server (z.B. Jetty oder Tomcat) speichern kann.

HTTP Cookie
Dazu haben wir HTTP Cookies betrachtet und wie man diese mit der Servlet API setzen und lesen kann. Das Cookie besteht aus einem Key und einem Value was jeweils Strings sein müssen. Ein Cookie wird als HTTP Header Attribut im Request und Repsonse übertragen. Der HTTP Server kann über ein HTTP Header im Response den Client auffordern, ein neues Cookie zu speichern. Dazu wird das Header Attribut Set-Cookie verwendet. Anschließend schickt der HTTP Client bei jedem HTTP Request an diesen Server (Domain) das Cookie. Es wird dazu im Request der Header Cookie vom Client gesetzt.

Beispiel Cookie lesen und schreiben
1.) Der HTTP Server fordert den Client auf das Cookie mit dem Namen sellerHistory zuspeichern.

2.) Bei jedem weiteren HTTP Request an diesen Server wird das Cookie vom Client gesetzt.

3.) Soll das Cookie einen neuen Wert bekommen, kann der Server im Response erneut den Client auffordern das Cookie mit dem Namen sellerHistory zu schreiben.

Anschließend schickt nun der HTTP Client immer den neuen Wert zum Server.

Beispiel Cookie lesen und schreiben mit der Java Servlet API
Hier der Java Quelltext zum setzen und lesen des Cookies vom Ablauf oben.

HTTP Session
Mit Cookies lassen sich Daten auf dem Client speichern. In vielen Anwendungsfällen möchte man aber die Daten nicht auf einem unbekannten HTTP Client (Browser) speichern. Dann muss der Zustand auf dem HTTP Server gespeichert werden. Dazu haben wir in der letzten Vorlesung das Konzept der HTTP Session kennengelernt. Damit ein Client einer Session auf dem Server zugeordnet werden kann, wird ein Session Cookie geschrieben. Ein Session Cookie ist ein Cookie mit einer ID. Über dieses Session Cookie (bzw. über die ID des Cookies) wird ein HTTP Client einer Sitzung zugeordnet die auf dem Server gespeichert wurde.

In der HTTP Session können über die Java Servlet API Key-Value Paare gespeichert werden. Da die Daten nicht auf den Client geschrieben werden, kann man beliebige Objekte die als serialsierbar markiert sind im Value speichern. Als Key muss ein String angegeben werden.

Beispiel
Wenn die History der von einem Client, angelegten Verkäufer nun nicht mehr auf dem Client gespeichert werden soll sondern auf dem Server, sieht der Java Quelltext wie folgt aus.

Donnerstag, 9. Dezember 2010

AJAX und Servlets


Download Folien:
hier

Download Source Übungen:
https://github.com/tux2323/software-technik-basar/tree/ajax-demo
oder als ZIP hier

Inhalt
  • Java Servlets Programmierung
  • HTTP Session und Cookies
  • AJAX
Lernziele (Fragen zur Vorlesung)
  • Beschreiben Sie den Servlet Life Cycle.
  • Wozu dienen die Methoden init() und destroy() in einem Servlet?
  • Was ist ein Cookie und wie setzt man es in einem Java Servlet?
  • Was ist eine HTTP Session?
  • Wie wird eine HTTP Session einem Nutzer zugeordnet?
  • Was ist der Unterschied zwischen der HTTP Session und einem Cookie?
  • Was ist AJAX? Welche Technologien setzt es ein?
  • Welche Vorteile hat eine AJAX-Anwendung? Welche Voraussetzungen benötigt AJAX? Welche Nachteile bringt es mit sich?
  • Welchen Vorteil hat das Nachrichtenformat JSON gegenüber XML?
  • Was ist ein WAR (Web Archive) und wie kann man ein WAR deployen?
Literatur
  • Ajax on Java, Steven Douglas Olson - 2007
Links

Sonntag, 5. Dezember 2010

Nachtrag zum HTTP Protokoll

In der letzen Vorlesung haben wir die Grundlagen des HTTP Protokolls kennengelernt. In diesem Blog Eintrag stelle ich Ihnen die Beispiele aus der letzten Vorlesung zum HTTP Protokoll nochmals knapp dar.  HTTP ist das Protokoll im Internet mit dem ein Web-Browser (z.B. Firefox) Daten von einem Webserver abfragt oder überträgt.


Die Abbildung oben zeigt die Grundsätzliche Funktionsweise des HTTP Protokolls. Der HTTP Client schickt einen sogenannten Request bestehenden aus einem Header und Body an den Server. Der HTTP Server beantwortet den Request mit einem Response. Der HTTP Respons bestehet wiederum aus einem Header und einem Body. Das HTTP Protokoll ist hierbei zustandslos.

Das HTTP Protokoll unterscheidet verschiedene Methoden, hier die wichtigsten:
  • GET zum anfordern einer Ressource vom Server. Beispielsweise Abfragen einer HTML Datei oder eines Videos.
  • POST mit dieser Methode kann man unbegrenzte, Mengen an Daten zum verarbeiten an einen HTTP Server schicken.
  • PUT dient dazu eine Ressource auf einen Webserver zu laden (anzulegen). 
  • DELETE löscht die angegebene Ressource auf dem Server.
  • TRACE liefert die Anfrage so zurück, wie sie empfangen wurde.
  • OPTIONS liefert eine Liste der vom Server unterstützen Methoden und Features.
Der Header einer HTTP Nachricht besteht aus Key-Value Paaren. Der erste Teil  im Header einer Nachricht vom Client gibt die verwendet HTTP Methode an z.B. GET oder POST, anschließend wird relative zum Server die Ressource angeben für die man den Request absetzen möchte z.B. / oder /index.html. In klassischen Internet-Anwendung spielen lediglich die Methoden GET und POST eine Rolle. Die andern Methoden wurden bisher kaum eingesetzt, erfahren aber gerade durch den REST Architekturstil eine Renaissance.

Je nach HTTP Methode schreibt das Protokoll eine Reihe an Header-Attributen vor. Beispielsweise muss der Server in der Response Nachricht einer GET Methode das Attribute Content-Length setzen damit der Client wissen kann wie lange er die Daten für den Body vom InputStream lesen muss. Das gleiche gilt logischer weise bei der Methode POST für den Client, bei dieser muss natürlich der Client die Content-Length der zu übertragenden Daten angeben.

Technisch betrachtet ist das Daten Format eines HTTP Request oder Response lediglich Text wobei natürlich die Daten im Body durchaus Binär sein können wie z.B. ein Video. Header und Body werden durch eine Leerzeile getrennt. Bei manchen Requests entfällt der Body bzw. ist der Body nicht erlaubt wie Beispielweise bei der Methode GET.

HTTP Nachrichten Beispiele
Das Listing unten zeigt einen einfachen HTTP GET Request.


Im folgenden Listing ist die Antwort des Webservers also die Response Nachricht auf den GET Request dargestellt.


Der Quelltext unten zeigt einen einfachen Java HTTP Client mit dem der GET Request von oben abgeschickt werden kann. In der Praxis nutz man natürlich fertig Bibliotheken die das HTTP Protokoll schon in einer Java API kapseln.


Das Listing unten zeigt einen einfachen HTTP POST Request, der wesentliche Unterschied zum GET von oben, bei einem POST besteht der Request aus einem Body und einem Header.


Im folgenden Listing ist die Antwort des Webservers auf den POST Request dargestellt, die Response besteht nur aus einem Header. Der Header enthält im location Attribute eine redirect URL auf die der Web-Browser in diesem Fall weitergeleitet werden sollen.


Der Quelltext unten zeigt einen einfachen Java Client mit dem der POST Request von oben abgeschickt werden kann.

Donnerstag, 2. Dezember 2010

HTTP und Java Servlets Programmierung

Download Folien
hier

Inhalt
  • HTTP
  • Einführung in Java Servlets Programmierung
Lernziele (Fragen zur Vorlesung)
  • Was ist ein RFC?
  • Welche RFCs kennen Sie?
  • Nennen Sie Charakteristiken von HTTP.
  • Was steht bei HTTP in der Request-/Responsezeile, im Header und im Body?
  • Wie unterscheiden sich GET und POST Requests?
  • Was ist ein Servlet?
  • Von welcher Klasse erbt Ihr Servlet?
  • Wie kann Ihr Servlet auf Requestparameter zugreifen?
  • Unter welcher URL ruft man im Browser ein Servlet auf?
  • Wie unterscheiden sich GET und POST Requests?
Literatur
  • Head First Servlets and JSP, Bryan Basham, Kathy Sierra, Bert Bates - 2008
  • Core Servlets and JavaServer Pages 2, Marty Hall, Larry Brown - 2005
Links