Donnerstag, 17. Februar 2011

Klausur SOTE Punkteverteilung 2011

ich habe mich die letzte Nacht und heute Abend durch Ihre SOTE Klausuren gequält und bin nun soweit durch. Hier schon mal die Punkteverteilung, die Noten werde ich sobald wie möglich gemeinsam mit Sebastian Belle bestimmen. Ich hoffe dass dann spätestens am Montag auch Ihre Noten aushängen. Insgesamt sieht der SOTE Teil ganz ordentlich aus es haben alle mehr wie die Hälfte der Punkte erreicht dazu schon mal Herzlichen Glückwunsch



D.h. die BIT Studenten haben alle die Prüfung bestanden.

Bitte bewerten Sie auch mich, werden Sie ihren Ärger, Verbesserungsvorschläge und Kritik los. Ich freue mich sowohl über positives wie negatives Feedback, einfach den Online Fragebogen ausfüllen. Im Moment haben sieben Personen teilgenommen ist noch nicht wirklich repräsentativ.

SOTE Vorlesung bewerten

Mittwoch, 16. Februar 2011

Bewertung der Vorlesung SOTE im WS10/11

Ich bewerte Sie und Ich würde mich sehr freuen wenn auch Sie mich bewerten! Dazu habe ich eine kurze Frageliste erstellt und würde mich sehr über Ihre Bewertung freuen:

SOTE Vorlesung bewerten

Bitte bewerten Sie mich, werden Sie ihren Ärger, Verbesserungsvorschläge und Kritik los. Ich freue mich sowohl über positives wie negatives Feedback, einfach den Online Fragebogen ausfüllen.

Wenn einige von Ihnen teilnehmen werde ich die Ergebnisse hier auf dem Blog veröffentlichen.

Viele Grüße
Christian Baranowski

Mittwoch, 19. Januar 2011

SOTE Prüfung Termin und Raum

Die SOTE Prüfung findet gemeinsam mit OOP am Mittwoch 16.02 um 11:00 Uhr bis 13:00 Uhr im Raum F022/23 statt.

Vorbereitung auf die Prüfung ist nächste Woche am Freitag (28.01) um 14:00 Uhr.

Vorgehensmodelle und Agile Software Entwicklung


Download Folien
hier

Quelltext Beispiele und Rahmen für die Übungen
Inhalte
  • Vorgehensmodelle
    • V-Modell
    • V-Modell XT
    • XP
  • Agile Software Entwicklung
    • Refactoring
    • Test Driven Development
  • Einführung Java Server Faces
Lernziele
  • Erläutern Sie die Phasen des V-Modells. Wie unterscheidet es sich vom Wasserfallmodell? Wieviele Prozent der Projektzeit entfallen in etwa auf die Implementierung?
  • Was sind die Kerncharakteristiken agiler Prozesse?
  • Was versteht man unter dem Begriff Refactoring? 
  • Aus welchen Schritten besteht der Prozess für ein Refactoring?
  • Aus welchen Schritten besteht der Prozess zur Testgetriebene Entwicklung (Test Driven Development Prozess)?
  • Was versteht man unter Daten-Trasfer-Object? Welche Rolle spielen sie bei mehrschichtigen (Web-)Architekturen, welche Vorteile bieten sie?
Literatur
  • Test Driven Development: By Example - Kent Beck 2002
  • Refactoring: Improving the Design of Existing Code - Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts 1999
  • Agile Estimating and Planning - Mike Cohn 2005 
  • Extreme Programming Explained: Embrace Change - Kent Beck 2004
  • JavaServer Faces 2.0. The Complete Reference - Ed Burns, Neil Griffin 2010
Links

Dienstag, 11. Januar 2011

Software Testing


Download Folien
hier

Download Demo Source
Übung Komponententests - Quicksort Demo 
Übung Systemtest - Demo Code

Inhalt
  • White-Box Testen
  • Black-Box Testen
  • Komponententests
  • Integrationstests
  • Systemtests

Lernziele (Fragen zur Vorlesung)
  • Wann im Software Lebenszyklus sind Fehler besonders teuer?
  • Was versteht man unter Black-Box Testverfahren?
  • Welche Black-Box Methoden zur Testfallspezifikaton kennen Sie?
  • 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?
  • 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

Dienstag, 4. Januar 2011

Vorlesungstermine 2011

Ich wünsche Ihnen allen erstmal ein gutes und erfolgreiches Jahr 2011.

Hier die Übersicht der letzten Vorlesungstermine für SOTE in diesem Semester, zwei mal werden wir die Vorlesung am Mittwochabend abhalten. Um nicht mit der Projektsimulation von Herrn Prof. Dr. Martin zu kollidieren.

Mittwoch am 12.01.2011 im Raum F112 von 17:30 bis 20:45Uhr
Thema: Software Testing und Qualitätssicherung

Mittwoch am 19.01.2011 im Raum F112 von 17:30 bis 20:45Uhr
Thema: Vorgehensmodelle und Agile Software Entwicklung

Freitag am 28.01.2011 im Raum F113 von 14:00 bis 17:15Uhr
Thema: Prüfungsvorbereitung und Wiederholung

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

Sonntag, 21. November 2010

SOTE am Freitag 26.11. entfällt

Hallo zusammen,

wie in der letzten Vorlesung schon angekündigt, bin ich am Freitag den 26.11 verhindert daher ENTFÄLLT diesen Freitag (26.11) die Vorlesung. Wir holen den Termin im Januar nach.

Viele Grüße

Christian Baranowski

Donnerstag, 18. November 2010

Build Prozesse und Java Servlets


Download Folien


Download ANT Quelltext 
Inhalt
  • Wiederholung Trennung fachliche und technischer Architektur 
  • Wiederholung Configuration Management
  • Build Prozesse
  • Einführung in Java Servlets Programmierung

Lernziele (Fragen zur Vorlesung)
  • Wozu benötigt man einen automatisierten Build Prozess?Aus welchen Phasen besteht der allgemeinen Build Prozess?
  • Wie können die einzelnen Phasen des allgemeinen Build Prozess (Schritte) mit Apache ANT umgesetzt werden?
  • Warum sollten Unit-Tests im Build Prozess integriert sein?
  • 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?

ANT Sample Build.xml
Hier eine ANT Beispiel Build.xml für die Basar Web-Anwendung.



Literatur
  • Ant, The Definitive Guide, Steve Holzner - 2005
  • Head First Servlets and JSP, Bryan Basham, Kathy Sierra, Bert Bates - 2008
  • Core Servlets and JavaServer Pages 2, Marty Hall, Larry Brown - 2005
Links

    Mittwoch, 17. November 2010

    Build Prozesse und Configuration Management


    Download Folien
    hier


    Download Quelltext und Übungen
    Inhalt
    • Offene Themen zum Systementwurf
    • Einführung in Configuration Management mit Subversion (SVN)
    Lernziele (Fragen zur Vorlesung)
    • Welche Regeln muss man einhalten um Komponenten mit der eigentlichen fachlichen Logik von der verwendeten Technik (z.B. JDBC) zu trennen? 
    • In welche drei Bereiche sollte man ein SVN Repository für ein Projekt aufteilen?
    • Warum sollte man alle Projektartifakte (z.B. der Quelltext) immer unter Versionskontrolle stellen?
    • Was ist der semantische Unterschied zwischen einem Tag und einem Branch?
    • Gibt es in Subversion einen technischen Unterschied zwischen einem Branch und einem Tag?
    • Was ist eine Revision Nummer in Subversion?
    • Wie kann man die Revision Nummer für eine Datei oder einen Ordner abfragen in Subversion?
    • Wie können zwei Versionen einer Datei in Subversion verglichen werden?
    Subversion Cheat Sheet

    Checkout Projekt aus dem SVN-Repository 
    svn checkout https://sote2010.googlecode.com/svn/trunk/ sote2010

    Füge einen Ordner oder Dateien zur Versionskontrolle (SVN) hinzu
    svn add README
    svn add *

    Commit Changes in das SVN-Repository
    svn commit -m "Add a File README to the project."

    Get Changes from SVN-Repository
    svn update *
    svn update README

    Lokale Änderungen verwerfen
    svn revert

    Zeige den aktuellen Status der Änderungen an
    svn status

    Zeige die SVN Infos für eine Datei oder einen Ordner an (Revision, letzte Änderung im Repository am, usw.)
    svn info README
    svn info

    SVN Commit History
    svn log
    svn log README

    Vergleichen von zwei Revisionen einer Datei
    svn diff -r 5:6 README 

    Hilfe zu den SVN Commands
    svn help
    svn help merge
    svn help <command>

    Eine Datei markieren dass der Konflikt manuell behoben wurde (anschließend kann die Datei wird committed werden)
    svn resolved README

    Erstellen eines Branch oder Tag lokal (Subversion Kopie)
    svn copy team-baranowski tag01

    Erstellen eines Branch oder Tag remote (Subversion Kopie)
    svn copy https://sote2010.googlecode.com/svn/trunk https://sote2010.googlecode.com/svn/tags/0.0.1 -m "create tag with name 0.0.1"
    svn copy https://sote2010.googlecode.com/svn/trunk https://sote2010.googlecode.com/svn/branches/demobranch -m "create branch demobranch"

    Lokale Arbeitskopie auf einen Branch wechseln
    svn switch https://sote2010.googlecode.com/svn/branches/demobranch

    Subversion Branch in Trunk mergen
    svn merge https://sote2010.googlecode.com/svn/branches/demobranch

    Einen Order oder eine Datei aus dem SVN löschen
    svn del test-folder

    Aufräumen und Locks entfernen (Wenn gar nichts mehr geht!)
    svn cleanup
    svn update

    GIT Tutorial
    Hinweis: GIT haben wir leider in der Vorlesung aus Zeitgründen nicht mehr betrachtet. Wer sich aber für verteilte Versionskontrolle interessiert dem sei das folgende sehr gute GIT Einführungs-Video ans Herz gelegt. Das Thema GIT ist natürlich auch nicht Klausur relevant.



    Literatur
    • Version Control with Subversion, C. Michael Pilato, Ben Collins-Sussman , Brian W. Fitzpatrick - 2008 
    Links

    Musterlösung Domain Model Aufgabenverwaltung

    Hier eine Musterlösung für das Domain der Aufgabenverwaltung. Den Quelltext können all verwenden die in der Vorlesung "Domain Driven Design und Wiederholung" nicht anwesend waren.



    Quelltext Domain Model Aufgabenverwaltung:
    https://github.com/tux2323/software-technik-taskmanagement/tree/master/src/task/domain/

    Sonntag, 7. November 2010

    Domain Driven Design und Wiederholung

    Hinweis: Leider ist das Thema Build Prozesse und Configuration Management offen geblieben in der Vorlesung am 12.11.2010. Wir werden dieses Thema in Vorlesung am 18.11.2010 nachholen. Dadurch werden sich die Themeninhalte etwas verschieben. Im Moment liegen wir ca. eine Vorlesung hinter unserem ursprünglichen Plan.

    Download Folien
    hier


    Download Sample Domain Driven Design Code Basar
    https://github.com/tux2323/software-technik-basar/tree/master/src

    Inhalt
    • Wiederholung Anforderungsanalyse
    • Wiederholung Domain Driven Design
    • Abschluss Systementwurf und Design
    • Build Prozesse mit ANT

    Lernziele (Fragen zur Vorlesung)
    • In welche drei Schichten teilt man eine klassische Geschäftsanwendung auf? 
    • Welche fünf Begriffe des Domain Driven Design kennen Sie?
    • Wie beschreibt man einen Ablauf (Aufrufe) von Methoden mit der UML?  
    • Wodurch zeichnet sich eine Entity Classe

    Links und Literatur
    Für Literaturhinweise und Links siehe Blog-Einträge "Nachtrag Einführung in Domain Driven Design" und "Systementwurf mit UML und Einführung in Domain Driven Design".

      Montag, 1. November 2010

      Nachtrag Einführung in Domain Driven Design

      Ausgangssituation für das Design sind die erfassten Anwendungsfälle und das Fachmodell. Im Folgenden werde ich Ihnen knapp darlegen wie aus diesen beiden Modellen im ersten Schritt des Designs das Domain Modell mittels der Methoden Domain Driven Design erstellt werden kann als ein Schritt (Methode) für den Systementwurf.

      Die Anwendungsfälle haben wir werden der Anforderungsanalyse erfasst als UML Use-Case Diagramm und als Tabellen oder Prosatext im Pflichtenheft oder Gesamtspezifikation spezifiziert und beschrieben. Das Use-Case Diagramm unten gibt einen Überblick über die Anwendungsfälle der Basar Anwendung.


      Anschließend haben wir das Fachmodell werden der Anforderungsanalyse erfasst als UML Klassen Diagramm. Das Fachmodell beschreibt die fachlichen Klassen der Anwendung. Auf dem Modell operieren die erfassten Anwendungsfälle. Daher macht es Sinn das Modell aus dem Use-Case Diagramm abzuleiten. Das Klassen Diagramm unten gibt einen Überblick über die Klassen des Fachmodell der Basar Anwendung (Attribute sind im Modell nicht dargestellt).


      Im Rahmen der Spezifikation der Anwendungsbausteine im Systementwurf in der Bausteinsicht haben wir die Methode Domain Driven Design kennengelernt zur Spezifikation der Geschäftlogik einer Fachanwendung als Domain Modell. Die Methode Domain Driven Design beschrieben von Eric Evans im Buch "Domain Driven Design – Trackling Complexity in Heart of Software" beschriebt die folgenden Model Element Typen.

      Entities


      "Many objects are not fundamentally defined by their attributes, but rather by a thread of continuity and identity" – Eric Evans. Eine Klasse vom Typ Entity beschreibt also ein Objekt das eine Identität hat z.B. Kunden.

      Value Objects


      "Many objects have no conceptual identity. These objects describe some characteristic of a thing" – Eric Evans. Ein Klasse vom Typ Value Object beschreibt ein Objekt das keine Identität hat. Also ein Objekt das kein eindeutigen technischen oder fachlichen Schlüssel besetzt der die Objektidentität beschreibt. Vielmehr beschreibt der Wert der Attribute bzw. Attribut die Identität des Objekts. Beispiel ein Objekt vom Typ Farbe ist dann gleich (hat die selbe Objektidentität) wenn es die gleichen RGB Werte z.B. für Schwarz hat.

      Services

      "Sometimes, it just isn’t a thing." – Eric Evans. Klassen vom Typ Service beinhalten operation die nicht direkt einer Klassen vom Typ Value Object oder Entity zugeordnet werden können.

      Repositories

      Klassen vom Typ Repository beinhalten Methoden zum speichern, laden und suchen von Enties oder Value Objects aus einer Datenquelle z.B. Datenbank oder Dateisystem.

      Factories

      Klassen vom Typ Factory dien dazu Objekte zu erzeugen und eine Trennung von Schnittstellen und Konkreten Implementierung zu ermöglichen. D.h. eine Service Klasse sollte natürlich nicht abhängig von der Implementierung der Repositories Klassen sein.

      Domain Driven Design Beispiel

      Nach dem wir einige der Grundbegriffe des Domain Driven Design beschrieben haben, sehen Sie unten ein Klassendiagramm für das Domain Modell der Basar Anwendung erstellt nach den Ideen des Domain Driven Design.



      Da wir etwas in Verzug mit dem Stoff der Vorlesung sind, werden wir in der nächsten Vorlesung "Build Prozesse und Configuration Management" am 12.11.2010 das Thema Systementwurf und Domain Driven Design nochmals wiederholen und vertiefen.


      Literatur:
      • Domain-Driven Design - Eric J. Evans 2003 
      Links:

      Sonntag, 31. Oktober 2010

      Nachtrag JQuery Klickpilot Basar

      Nach dem es in der Vorlesung am Donnerstag noch einige Nachfragen zu JQuery gegeben hat. Habe ich nun in meinem Klickpilot die Verwaltung der Kunden von direkter DOM Manipulation auf JQuery umgestellt. Im Folgenden werde ich hier die wesentlichen Quelltext Abschnitte knapp darlegen. Die gesamte Demo können Sie via GitHub hier beziehen. JQuery ist nicht Klausur relevant, Sie müssen aber für die Klausur wissen wie man Elemente über den DOM abfragen, anlegen und wie man Event Handler registrieren kann, natürlich können Sie dies auch via JQuery Quellcode in der Klausur darlegen.

      Die Verwaltung der Basar-Kunden teilt sich in die zwei bekannten HTML Seiten auf Übersicht der Kunden als Tabelle und anlegen und bearbeiten von Kunden. Als erstes möchte ich Ihnen den JavaScript Code für die anlegen und bearbeiten Seite darstellen.



      Der Quelltext zeigt wie Sie mit JQuery Event Listener registrieren können am Beispiel des Click Handler. Weiter zeigt das Beispiel wie Sie mit JQuery über die Doller Funktion auf Elemente über die ID zugreifen können und wie man auf die Value Attribute auslesen kann.

      Auf der Kunden Übersichtsseite sollen alle Kunden in einer Tabelle angezeigt werden. Dazu muss via JavaScript der Inhalt des Klickpilotmodells als HTML Tabelle ausgegeben werden. Der Folgende Quelltext Abschnitt zeigt wie mit JQuery dynamisch HTML Elemente erzeugt werden können.



      Im Quelltext oben sehen Sie wie einfach HTML Elemente via JQuery in den DOM eingehängt werden können. Wenn Sie dies direkt auf dem DOM machen benötigen Sie einiges mehr an DOM Glue Code, schauen Sie sich dazu einfach das DOM basierte Kassen Beispiel an.

      Den Quelltext getestet habe ich in den folgenden Browsern: Firefox Version 3, Safari Version 5 und Google Chrome Version 7.

      Links:

      Donnerstag, 28. Oktober 2010

      Systementwurf mit UML und Einführung in Domain Driven Design

      Hinweis: Ein paar Themen und Übungen zum Systementwurf sind offen geblieben. Wir werden diese in der Vorlesung "Build Prozesse und Configuration Management" am 12.11.2010 nachholen.

      Folien
      Download
      Lernziele (Fragen zur Vorlesung)
      • Wie beschreibt man ein Geschäftsmodell bzw. Anwendungsmodell (Domainmodell) mit der UML?
      • Wie stellt man Klassen und Assoziationen mit der UML dar?
      • Wie sieht eine sehr grobe Gliederung für eine Gesamtspezifikation (Pflichtenheft) aus?
      • Nennen Sie die vier Architektursichten.
      • Welche UML-Diagramme setzt man zur Modellierung für welche Architektursicht ein?
      • Wie drückt man mit einem Komponentendiagramm aus, dass eine Komponente eine weitere enthält?
      • Wie kann man in UML darstellen, dass eine Klasse ein Interface implementiert?
      • Welche Elemente aus dem Domain Driven Design kennen Sie?
      • Wie beschreibt man einen Ablauf (Aufrufe) von Methoden mit der UML? 
      • Welche Regeln muss man einhalten um Komponenten mit der eigentlichen fachlichen Logik von der verwendeten Technik zu trennen?
      • Warum sollte man die Fachlogik von den verwendeten Techniken trennen?
      Literatur:
      • Domain-Driven Design - Eric J. Evans 2003
      • Effektive Software-Architekturen - Gernot Starke 2008
      • UML Distilled: A Brief Guide to the Standard Object Modeling Languange - Martin Fowler 2003
      Links:

      Mittwoch, 27. Oktober 2010

      Anforderungsanalsyse mit der UML


      Folien Download
      hier

      Lernziele (Fragen zur Vorlesung)
      • Weshalb kann/soll man nicht einfach die Anwender fragen, was sie sich wünschen?
      • Was sind die Ziele der Anforderungsanalsyse?
      • Was ist das Ergebnis der Anforderungsanalsyse?
      • Welche Anforderungstypen kennen Sie?
      • Beschreiben Sie einen einfachen Prozess zur Anforderungserfassung.
      • Was ist eine fachliche Komponente?
      • Wozu dienen fachliche Komponenten in der Anforderungsanalsyse?
      • Was ist die UML?
      • Beschreiben Sie wie man die UML nutzen kann zum ermitteln der Anwendungsfälle.
      • Wie beschreibt man Anwendungsfälle?
      • Was ist das zentralle Element bei der Anforderungsanalsyse und Anforderungserfassung?
      Literatur:
      • Die Kunst des IT-Projektmanagements, 2. Auflage - Scott Berkun 2009
        Kapitel Gute Spezifikationen schreiben
      • Requirements-Engineering und -Management: Professionelle, iterative Anforderungsanalyse für die Praxis. 5. Auflage - Chris Rupp 2009
      • Writing Effective Use Cases -  Alistair Cockburn 2000
      • UML Distilled: A Brief Guide to the Standard Object Modeling Languange - Martin Fowler 2003
      • UML 2 glasklar. Praxiswissen für die UML-Modellierung - Chris Rupp; Stefan Queins; Barbara Zengler 2007
      • Objektorientierte Softwareentwicklung. Analyse und Design mit UML 2.1 - Bernd Oestereich 2006
      UML Werkzeuge
      Links:

      Montag, 25. Oktober 2010

      Nachtrag Prototyping mit JavaScript - Column Layout mit DIV und CSS

      In der letzten Vorlesung wurde ich gefragt wie man mit CSS und DIVs ein Tabellen-Layout so bauen kann, dass die Spalten immer gleich hoch sind.

      Leider konnte ich in der SOTE Pause keine adäquate Lösung dem studierenden bieten für sein Problem, daher hier nun der Nachtrag. Das ganze kann durch geschachtelte DIVs gelöst werden hier der HTML und CSS Beispiel Quelltext.


      Den gesamten Quelltext finden Sie nun auch im Beispiel Code siehe ZIP Download Vorlesung Prototyping mit JavaScript.

      Links zum Thema:

      Donnerstag, 21. Oktober 2010

      Prototyping mit JavaScript

      Hinweis: Ein paar JavaScript Themen sind offen geblieben daher werden wir diese in der Vorlesung am 28.10. nachholen und dann das Thema abschließen.



      Folien und Beispiel JavaScript Code:
      hier
      oder via GIT über GitHUB
      http://github.com/tux2323/software-technik-javascript/

      Lernziele (Fragen zur Vorlesung) 
      • Wie und wo definiert man einen JavaScript-Dokument?
      • Wie ruft man eine Funktion auf? Beispielsweise dadurch, dass man auf etwas klickt...
      • Wie kann man JavaScript / HTML Code strukturieren und Prinzip Separation of Concerns (SoC) einhalten?
      • Wie definiert man ein Objekte? Wie arbeitet man damit?
      • Wie definiert man ein JSON Objekt?
      • Wie greift man auf HTML-Elemente zu?
      • Wie ändert man den Wert dieser HTML Elemente? Wie fügt man neue hinzu?
      • Wie serialisiert man JavaScript Objekt in JSON?
      • Wie kann man mit JavaScript Daten zwischen HTML Seiten übertragen? 

      Funktionen und funktionale Programmierung in JavaScript

      Wie wir in der Vorlesung gesehen haben sind in JavaScript Funktionen "first class Elemente" der Sprache. Dies bedeutet man kann Funktionen an allen Stellen im Quelltext deklarieren und man kann Funktionen wie Objekte als Parameter an Methoden übergeben. Man spricht von einer funktionalen Programmiersprache (bzw. Programmierstil), Java ist hingegen wie auch C++ ist eine imperative Sprache bzw. erlaubt einen imperativen Programmierstil. Am Beispiel der Event Registrierung wollen wir uns hier ein paar JavaScript Quelltext Beispiele ansehen wie und wo man Funktionen deklarieren und nutzen kann.

      Als erste ein einfaches Quelltext Beispiel für eine Funktion Deklaration und Aufruf.


      Soll der Text in einem DIV ausgeben werden muss man warten bis die Seite geladen ist und kann dann den Inhalt ausgeben. Dazu kann man auf dem window Objekt des Browsers der Property (Attribut) onload eine Funktion zuweisen, die dann aufgerufen wird wenn die Webseite fertig geladen wurde. Die erste Variante hierfür ist eine Funktion windowLoadListener zu definieren und dem Attribut zuzuweisen, hier der Quelltext.

      HTML Code für das Beispiel:


      JavaScript Code für das Beispiel:


      Eine schönere und etwas schlankere Variante ist die Deklaration der Funktion direkt dem Attribut window.onload zuzuweisen (inline), hier der Quelltext:


      Funktionen lassen sich in JavaScript beliebig Schachteln und natürlich kann man wie dem window.onload Attribut jeder Variablen eine Funktion zuweisen, hier ein kleines Beispiel:


      Funktionen sind in JavaScript das einzige Sprachelement das einen Scope hat. D.h. Variablen gelten (man hat nur Zugriff) nur innerhalb der Begin und Ende Klammern der Funktion. Daher sind Funktionen auch der einzige Weg in JavaScript Daten zu kapseln, hier ein Beispiel.


      Objekte in JavaScript
      In JavaScript kann man Objekte definieren. Ein Objekt entspricht im wesentlich einer Map, d.h. in einem Objekt können Key-Value Paare abgelegt werden, hier ein Beispiel:


      Document Object Model - DOM
      Über den DOM bietet der Browser via JavaScript einen Weg auf die HTML Seite zuzugreifen, dynamisch Elemente hinzuzufügen und Listener für Events auf Elementen zuregistrieren, hier ein Beispiel.


      JSON - JavaScript Object Notation
      Die JavaScript Object Notation, kurz JSON ist ein kompaktes Datenformat. JSON wurde von Douglas Crockford spezifiziert. JavaScript Objekte und JSON sind sehr ähnlich daher lassen sich JavaScript Objekte einfach in JSON speichern uns laden. JSON ist sogar gültiges JavaScript daher kann jedes gültige JSON-Dokument per eval() interpretiert werden. JSON wird i.d.R. in AJAX Requests als Datenformat genutzt in diesem Rahmen werden wir es auch noch mal genauer in der Vorlesung betrachten. Hier ein JSON Beispiel für das Kunden Objekt von oben.


      Im Firefox und auch in anderen Browser können JavaScript Objekte über das JSON Objekt gespeichert und geladen werden, hier ein Beispiel.


      Literatur
      • JavaScript: The Good Parts - Douglas Crockford 2008
      • Pro JavaScript Design Patterns - Ross Harmes 2007
      Links

      Dienstag, 12. Oktober 2010

      Prototyping mit HTML und CSS


      Beispiel HTML CSS Code und HTML/CSS Pattern Download
      hier als ZIP
      oder hier zum browsen:
      http://github.com/tux2323/software-technik-html/

      Folien Download
      hier als PDF

      HTML CSS Pattern - Box Model
      Hier zum vollständigen Quelltext mit CSS: hier


      HTML CSS Pattern - Column Layout
      Hier zum vollständigen Quelltext mit CSS: hier


      HTML CSS Pattern - Grid
      Hier zum vollständigen Quelltext mit CSS: hier


      Lernziele (Fragen zur Vorlesung)
      • In welche Typen von Elemente können Dokumente aufgeteilt werden? Oder aus welchen Bestandteilen bestehen Dokumente?
      • Wie sieht die Grundstruktur einer HTML-Seite aus?
      • Was ist der Unterschied zwischen HTML und XHTML? Nennen Sie ein paar Code Beispiele.
      • Was beschreibt das Element DOCTYPE in einer HTML Seite?
      • Wie kann das Encoding in einer XHTML Datei angegeben werden?
      • Wie deklariert man ungeordnete und geordnete Listen?
      • Wie legt man Tabellen in HTML an? Wie unterscheiden sich die beiden Tags <td> und <th> in ihrer Bedeutung?
      • Wie kann eine HTML Tabelle mit Kopf- und/oder Fußzeile anlegen?
      • Wie definiert man Links? 
      • Wie schreibt man ein Formular in HTML?
      • Wo und wie bindet man Stylesheets in eine HTML-Seite ein?
      • Wie lautet die Syntax für die Definition von Stylesheet-Angaben?   
      • Was besagt das Prinzip Separation of Concerns (SoC)?
      • Nennen Sie ein Beispiel wie das Prinzip SoC im Kontext HTML und CSS eingehalten werden kann.
      • Wie sieht der HTML Code für ein Column-Model mit drei Column aus?
      • Beschreiben Sie oder zeigen Sie mit HTML Code wie Elemente angeordnet werden können mit einem CSS Grid.

      Literatur
      • CSS and HTML Design Patterns - Michael Bowers - 2007 Apress

      Links CSS Frameworks

      Links HTML und CSS

      Links zu HTML5

      Video YUI 2: Grids CSS
      Sehr gutes Video gibt einen Überblick über dass CSS Framework von Yahoo. Vermittelt aber auch die Grundlegenden Konzepte hinter modernem Web-Design und den Layout Patterns die heute dazu genutzt werden.

      Dienstag, 28. September 2010

      Anforderungsanalyse - Grundlagen und Prototyping



      Folien Download
      hier
       
      Lernziele (Fragen zur Vorlesung)
      • Was ist Software Technik?
      • Aus welchen Phasen besteht das Wasserfallmodell?
      • Wie sollte ein Prozessschritt beschrieben werden?
      • In welche Teilaufgaben teilt sich die Anforderungsanalyse auf?
      • Nennen Sie eine Methode zur Anforderungsanalyse.
      • Was ist das Ergebnis der Anforderungsanalyse?
      • In welche Typen können Anforderungen aufgeteilt werden?
      Literatur
      • Chris Bernard, Dynamic Prototyping with SketchFlow in Expression Blend: Sketch Your Ideas...and Bring Them to Life!, 2010
      • Scott Berkun, Die Kunst des IT-Projektmanagements, 2. Auflage, 2009
      Werkzeuge für Wireframes

      Power Point Vorlage für Wireframes

      http://www.slideshare.net/graiz/wireframe-powerpoint-parts
      (Download mit slideshare account möglich)

        Links

            Sketch Your Idea 
            Sehr gutes Beispiel wie man Idee visuell kommuniziert.

            Samstag, 25. September 2010

            Blog zur Vorlesung Software Technik

            Herzlich Willkommen zur Vorlesung Software Technik . Hier auf diesem Blog finden Sie alle Informationen (Folien, Hinweise zu Bücher, Links, etc.) zu den SOTE Vorlesung des WS2010/11. Es wird zur jeder Vorlesung ein Blogeintrag geben über den ich Ihnen alle Unterlagen zur Vorlesung bereitstelle.

            Am besten Sie abonnieren einfach den RSS Feed dann bekommen Sie immer mit wenn es was neues rund um die SOTE Vorlesung gibt.

            Viele Grüße

            Christian Baranowski