SlideShare ist ein Scribd-Unternehmen logo
Software Technik
            HTWG Konstanz



             Software Testing und
               Qualitätssicherung



                            Christian Baranowski
Wiederhlung
Java Persistence API

         Data




         Disk
Requirement Analysis          Wasserfallmodell

              System Design



                          Coding



                                   Testing



                                             Delivery
Warum sollte eine Entity die
Basic Mappings                  Schnittstelle Serializable
                                implementieren?
  @Table(name = "Adr")
  @Entity
  public class Address implements Serializable {
      @Id
      @Column(name = "ADDRESS_ID")
      @GeneratedValue(strategy = GenerationType.SEQUENCE)
      private long id;
      @Basic
      private String city;
      @Basic
      private String country;
      @Basic
      private String province;
      @Basic
      @Column(name = "P_CODE")
      private String postalCode;
      @Basic
      private String street;
Assoziationen / Relationen
  @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true,
      fetch = FetchType.LAZY)
  @JoinColumn(name = "ADDR_ID")
  private Address address;

  @ManyToOne(fetch = FetchType.LAZY)
  private JobTitle jobTitle;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "MANAGER_ID")
  private Employee manager;

  @OneToMany(mappedBy = "manager")
  private List<Employee> managedEmployees =
     new ArrayList<Employee>();
Assoziationen / Relationen
  @OneToMany(mappedBy = "owner", cascade = CascadeType.ALL,
     orphanRemoval = true)
  private List<PhoneNumber> phoneNumbers = new
     ArrayList<PhoneNumber>();

  @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
  @JoinColumn(name="EMP_ID")
  private List<Degree> degrees = new ArrayList<Degree>();

  @ManyToMany
  @JoinTable(name = "PROJ_EMP",
    joinColumns = @JoinColumn(name = "EMP_ID"),
    inverseJoinColumns = @JoinColumn(name = "PROJ_ID"))
  private List<Project> projects = new ArrayList<Project>();
Entity
 •Entity hat immer einen eindeutigen Schlüssel (ID)
  dieser identifiziert die Entität
 •Equals auf Basis der ID...
Entity Manager
•API bietet alle Funktion für den Datenbankzugriff:
 •persist
 •remove
 •createQuery
 •merge
 •findXXX
 •....
Entity Manager
•Wenn die Objekte (Entity Klassen) auch als Daten
 Transfer Objekte genutzt werden sollen können
 sie vom Entity Manager gelöst werden man spricht
 von detached Entities!
Detached Entities
•Managed Entities werden vom Entity Manager
 gelöst wenn:
 •clear oder detach
 •mittels rollback
 •Entity Manager closed
Übungen I

•Erweitern Sie Ihre Aufgaben Verwaltung um eine
 Datenbank Anbindung mittels JPA

 •Schritt 1. Domain Modell markieren mit den JPA
  Annotationen für das OR Mapping...

 •Schritt II. Repository Funktionen zum speichern
  und laden einer Aufgabe umsetzen...
Was ist Software Qualität ?
Was ist Software Qualität ?

Funktionalität - Software sollte die spezifizierten Use-
Cases / Anforderungen implementieren.

4+4=9
Was ist Software Qualität ?
Benutzbarkeit vorgegebenen Use-Cases lassen sich
effektiv, effizient und zufriedenstellend bedienen.




Benutzbarkeit betrifft nicht nur grafische
Benutzerschnittstellen z.B. auch APIs...


                                      Die Benutzbarkeit richtet sich nach dem
                                      Anwendungsfall...
Was ist Software Qualität ?
Zuverlässigkeit wie verlässlich eine Anwendung in einem
Zeitintervall ihr Funktionalität erfüllt
Was ist Software Qualität ?
 Portabilität - der Grad der Plattformunabhängigkeit eines
 Computerprogramms


                     Portabilität - Die Anwendung läuft auf
                     Linux, MAC und auf Ihrem Android Mobil
                     Phone ...
Was ist Software Qualität ?
 Wartbarkeit - zeigt an, mit welcher Energie und welchem
 Erfolg Änderungen in einem Systemzusammenhang von
 Applikationen durchgeführt werden können.
Was ist Software Qualität ?

 Effizienz - Performance und verbrauchte Ressourcen
Was ist Software Qualität ?
                                    Funktionalität
              Effizienz




Wartbarkeit
                                                     Zuverlässigkeit




                     Portabilität   Benutzbarkeit
Was soll sichergestellt werden?
  Fehlerwirkung (Failure)
  Nach außen sichtbare Fehlverhalten



  Fehlerzustand (Bug)
  Zustand in der Anwendung der zu einer
  Fehlerwirkung führen kann.



  Fehlhandlung (Error, Misstake)
  Irrtum bei der Software-Entwicklung.


  Fehlermaskierung
  Wirkung eines Fehlers (Fehlerzustand) ist nach außen nicht sichtbar, weil er durch
  einen weiteren Fehler verborgen (überlagert / maskiert) wird.
Wege zu guter Software

analytische Qualitätssicherung
Methoden die dazu dienen eine Anwendung strukturiert
(analytisch) nach Fehlerwirkungen, Fehlerzuständen und
Fehlermaskierung zu untersuchen. Die Qualität wird gemessen.
Anzahl der Fehlerwirkungen, Fehlerzuständen und                      konstruktive
Fehlermaskierung bestimmt.
                                                               Qualitätssicherung


                                 Methoden die dazu dienen die Wahrscheinlichkeit für
                                 Fehlhandlungen zu minimieren. D.h. die Methoden führen dazu dass
                                 es zu einer geringeren Fehlerwahrscheinlichkeit im Projekt kommt.
Kosten zur Fehlerbehebung
  Kosten (€)



                Fehler frühzeitig in einem Projekt
                (Entwicklungsprozess) zu finden spart Geld !!!




  Anforderungsanalyse   Systementwurf   Umsetzung   Integrationstest   Systemtest   Betrieb
Komponententests (Modultests) und
        Testabdeckung
Komponententest Charakter
•Was wird getestet ? (Testobjekt)
 -Klasse / Komponente (mehre Klassen mit definierter Schnittstelle)
•Wer testet? (Tester)
 -Entwickler (White-Box / Gray-Box) / Tester (Black-Box)
•Welche Qualitätseigenschaft (ISO9126) wird geprüft?
 -Funktionalität, Robustheit, Effizienz
•Mit welchen Werkzeugen wird getestet?
 -xUnit Frameworks und Coverage Messung z.B. Cobertura, Emma
Test Design Pattern vier Phasen Test

                        Setup
        SUT in einen definierten Zustand bringen.

                      Exercise
        SUT aufrufen mit Test Parametern (Daten).


                        Verify
       Prüfen ob das SUT im erwarteten Zustand ist.


                      Teardown
            SUT und Testumgebung aufräumen.
JUnit
public class QuicksortTest {

! Quicksort<Integer> quicksortSUT;          Phase 1: Setup

!   @Before
!   public void setUp() {
!   ! quicksortSUT = new Quicksort<Integer>(new IntComperator());
!   }

!   @Test                                        Phase 2: Exercise
!   public void testSort() throws Exception {
!   ! quicksortSUT.sort(new Integer[] { 5, 8, 2, 4, 7 });
!   ! assertArrayEquals(new Integer[] { 2, 4, 5, 7, 8 }, values);
!   }
                              Phase 3: Verify
!   @After
!   public void tearDown() {
!   ! quicksortSUT = null;
!   }                            Phase 4: tearDown

}
Test Coverage
Testabdeckung
Testabdeckung

 „Als Testabdeckung bezeichnet man das Verhältnis an
 tatsächlich getroffenen Aussagen eines Tests gegenüber
 den theoretisch möglich treffbaren Aussagen bzw. der
 Menge der gewünschten treffbaren Aussagen.“
 - Wikipedia
Testabdeckung (100 %)
 public boolean aAndbOrC(boolean A, boolean B, boolean C) {
 ! return (A && B) || C;
 }


    Erwartet           A               B               C
      false          false           false           false
      true           false           false           true
      false          false           true            false
      true           false           true            true
      false          true            false           false
      true           true            false           true
      true           true            true            false
      true           true            true            true
vollständige Testabdeckung
„Eine vollständige Testabdeckung stellt eine Ausnahme
dar, weil die Anzahl möglicher Testfälle sehr schnell
ungeheuer groß wird (durch kombinatorische Explosion).
Ein vollständiger Funktionstest für eine einfache
Funktion, die zwei 16-Bit-Werte als Argument erhält,
würde schon 2^(16+16), also ca. 4 Milliarden Testfälle
bedeuten, um die Spezifikation vollständig zu testen.“
 - Wikipedia
Testabdeckung beim
White-Box Testen
Statement Coverage (Anweisungsüberdeckung)

	   public static boolean aAndBOrC(boolean A, boolean B, boolean C) {
	   	 if(A && B){
	   	 	 return true;
	   	 }
	   	 else if(C) {
	   	 	 return true;
	   	 }
	   	 else {
	   	 	 return false;
	   	 }
	   }
Statement Coverage (Anweisungsüberdeckung)


A && B          true



  C      true



 false
Statement Coverage (Anweisungsüberdeckung)

         1.
A && B               true        Erwartet    A      B      C

                            1.     true     true   true   false
  C           true



 false
Statement Coverage (Anweisungsüberdeckung)

              1.
A && B                    true        Erwartet    A       B       C

         2.                      1.     true     true    true    false
  C                true
                                 2.     true     false   false   true


 false
Statement Coverage (Anweisungsüberdeckung)
100 %
               1.
 A && B                    true
                                       Erwartet    A       B       C

          2.                      1.     true     true    true    false
3. C                true
                                  2.     true     false   false   true

                                  3.     false    false   false   false
  false
Statement Coverage (Anweisungsüberdeckung)


	   public static boolean aAndBOrC(boolean A, boolean B, boolean C) {
	   	 if(A && B || C){
	   	 	 return true;
	   	 }
	   	 else {
	   	 	 return false;
	   	 }
	   }
Statement Coverage (Anweisungsüberdeckung)
100%
               1.
 A && B || C        true        Erwartet    A       B       C

2.
     false
                           1.     true     false   false   true

                           2.     false    false   false   false
Statement Coverage (Anweisungsüberdeckung)

	   public static int sum(int values[], int offset){
	   	 int result = 0;
	   	 for (int value : values) {
	   	 	 if(offset > 0){
	   	 	 	 if(offset < value)
	   	 	 	 	 result += offset;
	   	 	 }
	   	 	 result += value;
	   	 }
	   	 return result;
	   }
Statement Coverage (Anweisungsüberdeckung)
100%
     result = 0




 for (value : values)


                                                  Erwartet values   offset
     offset > 0         offset < value


                                                     3       [2]      1
                               result += offset


  result += value




   return result
Statement Coverage (Anweisungsüberdeckung)
100 %
     result = 0




 for (value : values)


                                                  Erwartet values   offset
     offset > 0         offset < value


                                                     3       [2]      1
                               result += offset


  result += value




   return result
Branch Coverage 100 % (Zweigabdeckung)

      result = 0




  for (value : values)




      offset > 0         offset < value




                                result += offset   Erwartet values   offset

   result += value                                    3       [2]      1
                                                      2       [2]      0
    return result
                                                      2       [2]      2
100% Pfadabdeckung

            100 % Pfadabdeckung wird in der Regel nicht
            erreicht (halting problem)
Testabdeckung
automatisiert bestimmen
Übung 1I

• Erstellen
        Sie einen Unit Test für die JPA
 Implementierung zum speichern der Aufgabe

• Messen   Sie die Code Abdeckung in Eclipse
Statische Testverfahren
Code Reviews
Walkthrough
• Autor   stellt seinen Code Dokument vor.

• Autor   ist der Moderator

• Vorteile:

 • Wenig Vorbereitungsaufwand

 • Prüfung    findet durch spontane Fragen statt.
Inspektion
• Formalste   Form eines Review

 • oft   formale Vorprüfung

 • Gutachter   bekommen die Dokumente vorab

 • Gutachter   prüfen erst einzeln

 • Anschließende    Sitzung mit Autor, Gutachtern und
  Moderator
Technisches Review
• Autor nimmt am Review
 nicht teil

• Gutachter   stimmen ab

• Prüfen   gegen Spezifikation

• Gutachter   prüfen einzeln vorab
Informelles Review

• Gutachter   bekommt Dokument zum lesen und
 gibt schriftliche Rückmeldung
Zusammenfassung Reviews

  Grad der
                 geringster      höchsten          mittel         gering
Formalisierung
                                 Autor
                   Autor                         Gutachter       einzelne
  Anwesend                      Gutachter
                   Prüfer                        Moderator      Gutachter
                                Moderator
                   Code
                                                                  Code
Anwendbarkeit    Dokumente     Dokumente        Dokumente
                                                                Dokumente
                  Lernen

Vorbereitung       kaum       Formale Prüfung Formale Prüfung     kaum

             Walkthrough Inspektion Technisches Informelles
                                    Review      Review
Statische Testverfahren
Namens Konventionen
Namens Konventionen
•   Klassennamen
    • beginnt mit einem Großbuchstaben, danach in Kleinbuchstaben
      weiter
    • beginnt ein neuer wesentlicher Teil des Klassennamens, wird er
      mit einem Großbuchstaben verdeutlicht

•   Beispiele
    • Color, Button, TextField, String
Namens Konventionen
•   Methodennamen
    • beginnt mit einem Kleinbuchstaben, weiter klein geschrieben
    • beginnt ein neuer wesentlicher Teil wird er mit einem
      Großbuchstaben verdeutlicht

•   Beispiele
    • equals(), setColor(), drawOval()...
Namens Konventionen

•   Konstantennamen
    • komplett in Großbuchstaben


•   Beispiele
    • LEFT, PI, BLOD
Integrationsstrategien
                 Big-bang


               Test A        Test B

      Test G        Test              Test C
                    A- G
        Test F                 Test D
                    Test E
Integrationsstrategien
                     Bottom-up

                      Test
                      A- G


                      Test              Test
                     B, E, F            D, G


   Test C   Test E             Test F   Test G
Integrationsstrategien
             Top-down

                 Test
                  A


                  Test
               A, B, C, D


                 Test
                 A- G
Integrationsstrategien
 Backbone Integration
Integrationsstrategien
   Continuous Integration




       betrachten wir noch in einer der folgenden
       Vorlesung
Integrationstests
Test Charakterisierung
•Was wird getestet ? (Testobjekt)
•Wer testet? (Tester)
•Welche Qualitätseigenschaft (ISO9126) wird geprüft?
•Mit welchen Werkzeugen wird getestet?
Integrationstest Charakter
•Was wird getestet ? (Testobjekt)
 -Zusammenspiel von zwei oder mehrere Module.
 -Passen die Schnittstellen?
•Wer testet? (Tester)
 -Entwickler (White-Box / Gray-Box) / dezidierte Tester (Black-Box)
•Welche Qualitätseigenschaft (ISO9126) wird geprüft?
 -Robustheit, Portabilität,Funktionalität, Wartbarkeit, Effizienz
•Mit welchen Werkzeugen wird getestet?
 -JUnit, DBunit, Mocking Frameworks
Systemtests und Akzeptanztests
Systemtests Charakter
•Was wird getestet ? (Testobjekt)
 -komplettes System (vollständiger Integrationstest)
 -bis zur Systemgrenze
•Wer testet? (Tester)
 - dezidierte Tester (Black-Box)
•Welche Qualitätseigenschaft (ISO9126) wird geprüft?
 -Funktionalität, Effizienz, Benutzbarkeit, Robustheit, Portabilität
•Mit welchen Werkzeugen wird getestet?
 -JUnit, FIT, Selenium ... HP Test Runner, GUIdancer ...
funktionale Systemtest /
Akzeptanztests mit FIT
Überblick Fit
Framework for Integrated Tests


      FIT wurde entwickelt von Ward Cunningham
      WIKI-Erfinder...
Motivation von Fit Tests
• Automatisierung von Akzeptanztests mittels Tabellen.
• Framework für Datengetriebene Tests – Data-Driven-Test
  (xUnit Test Patterns - Gerard Meszaros)
Testen mit Fit Tabellen
 Fit Tests für einen Beispiel Zinsrechner
Testen mit Fit Tabellen
            Fit Tests als Column Test Tabelle


   Betrag
    10
Testen mit Fit Tabellen
             Fit Tests als Column Test Tabelle


    Betrag          Zinssatz
     10               2,5
Testen mit Fit Tabellen
            Fit Tests als Column Test Tabelle


   Betrag       Zinssatz    Laufzeit
    10            2,5          2
Testen mit Fit Tabellen
           Fit Tests als Column Test Tabelle


  Betrag    Zinssatz   Laufzeit   Summe
   10         2,5         2       10,51
Testen mit Fit Tabellen
                    Fit Tests als Column Test Tabelle
                                       Prüfung eines Ergebnis
      Eingehende - Werte


           Betrag    Zinssatz   Laufzeit   Summe()
Testfall    10         2,5         2         10,51
Testen mit Fit Tabellen
           Fit Tests als Column Test Tabelle

  Betrag    Zinssatz   Laufzeit   Summe()
   10         2,5         2        10,51
   10         10          3        25,94
   10         10         10       100000
    ...        ...        ...       ...

                                     Testfälle
Testen mit Fit Tabellen
         Fit Tests als Column Test Tabelle


                                 Rot = Fehler in der Anwendung




    Gelb =Ausnahme - Fehler im Test
                                       Grün = erfolgreicher Test
Testen mit Fit Tabellen
                Fit Test als Action Tabelle

     Befehle / Kommandos
               fit.Ac?onFixture Anbindung an die Applikation (Java)
               start       ZinsenAc(onFixture
               enter       Betrag               10        Argumente
               enter       Zinssatz             2,5
    Testfall
               enter       Laufzeit             2
               press       Submit
               check       Summe                10,51
                                      Objekt / Auswahl / Target
Testen mit Fit Tabellen
         Fit Test als Action Tabelle


                          Anwendung Starten

                          Eingaben


                          Aktion - Zinsen Berechnen

                          Prüfung
Fit Design
     drei Klassen Framework
Fit Tabellen und Applikation
verknüpfen
Fit Tabellen und Applikation
verknüpfen
    onlinerechner.ZinsenFixture
    Betrag     Zinssatz Laufzeit   Summe()
    10         2,5        2        10,51
    10         10         3        25,94
    20         10         10       100000
    ...        ...        ...      ...
Fit Tabellen und Applikation
verknüpfen

             Anbindung an SUT   SUT
Fit Tabellen und Applikation
verknüpfen
    public class ZinsenFixture extends ColumnFixture {   Basis Klasse
                                                         für
           private Zinsen zinsen = new Zinsen();         Fit Extension

           public double betrag;              SUT
           public double zinsatz;
           public double laufzeit;            Eingehende - Werte

           public double summe() {                 Prüfung - Ausgabe
                   zinsen.setBetrag(betrag);
                   zinsen.setLaufzeit(laufzeit);
                   zinsen.setZinssatz(zinsatz);        Anbindung
                   return zinsen.berechneZinsen();     an SUT
           }
    }
Fit Tabellen und Applikation
verknüpfen
    fit.Ac?onFixture        GOF - Dekorierer-Muster

    start       onlinerechner.ZinsenAc(onFixture
    enter       Betrag                          10
    enter       Zinssatz                        2,5
    enter       Laufzeit                        2
    press       berechneZinsen
    check       Summe                           10,51
Fit Tabellen und Applikation
verknüpfen
Fit Tabellen und Applikation
verknüpfen
    public class ZinsenActionFixture extends Fixture {
           Zinsen zinsen = new Zinsen();
           double summe;
           public void betrag(double betrag) {
                   zinsen.setBetrag(betrag);         Eingaben / Enter
           }
    …
           public void berechneZinsen() {          Aktion / Press
                   summe = zinsen.berechneZinsen();
           }
           public double summe() {
                   return summe;          Ausgabe Prüfung / Check
           }
    }
Oberflächentests
Einführung in Selenium
                Selenium Core




     Selenium                   Selenium RC
        IDE
Selenium Core
am Beispiel eines Zinsrechner

                                Action - Tabelle
 Selenium Befehl
 open                /JugsBase/zinsrechner.jsp     Argumente
 type                betrag                            20.0

 type                zinsatz                           22.0

 type                laufzeit                          100.0

 clickAndWait        submit

 assertTextPresent   8649939365.27	
  Euro

                                         Target
Selenium IDE
Capture & Replay Tests mit Selenium




            Action Tabelle
Selenium Remote Control
Anbindung Selenium in Java Code als Test Treiber


                   Selenium Server
                                        Browser
                                       Firefox, IE
                   Selenium Core
        JAVA,
        PHP...
                                         SUT
                     HTTP Proxy
                                     Webapplikation

Weitere ähnliche Inhalte

Was ist angesagt?

How to Backup to Google Drive with CloudBerry Backup
How to Backup to Google Drive with CloudBerry Backup How to Backup to Google Drive with CloudBerry Backup
How to Backup to Google Drive with CloudBerry Backup
Alexander Negrash
 
Network Programming in C#
Network Programming in C#Network Programming in C#
Network Programming in C#
jvinhit
 
Bài 4: Triển khai Active Directory: Quản trị nhóm - Giáo trình FPT
Bài 4: Triển khai Active Directory: Quản trị nhóm - Giáo trình FPTBài 4: Triển khai Active Directory: Quản trị nhóm - Giáo trình FPT
Bài 4: Triển khai Active Directory: Quản trị nhóm - Giáo trình FPT
MasterCode.vn
 
365 Teachings from the New Revelation for Yesterday, Today and Forever (part 2)
365 Teachings from the New Revelation for Yesterday, Today and Forever  (part 2)365 Teachings from the New Revelation for Yesterday, Today and Forever  (part 2)
365 Teachings from the New Revelation for Yesterday, Today and Forever (part 2)
Simona P
 
Virtual Box Presentation
Virtual Box Presentation Virtual Box Presentation
Virtual Box Presentation
Pete DuMelle
 
Server virtualization
Server virtualizationServer virtualization
Server virtualization
Kingston Smiler
 
Concepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupérationConcepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupération
Soukaina Boujadi
 
Luận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải Phòng
Luận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải PhòngLuận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải Phòng
Luận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải Phòng
Dịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
Design Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVMDesign Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVM
Mudasir Qazi
 
Extended Finite State Machine - EFSM
Extended Finite State Machine - EFSMExtended Finite State Machine - EFSM
Extended Finite State Machine - EFSM
Sun Technlogies
 
Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
Olivier Le Goaër
 
introduction to sql server by moamen hany
introduction to sql server by moamen hanyintroduction to sql server by moamen hany
introduction to sql server by moamen hany
Moamen Hany ELNASHAR
 
Toward Better Password Requirements
Toward Better Password RequirementsToward Better Password Requirements
Toward Better Password Requirements
Jim Fenton
 
La virtualisation
La virtualisationLa virtualisation
La virtualisation
Juvénal CHOKOGOUE
 
Cloud computing
Cloud computingCloud computing
Cloud computing
mourad50
 
Projet reseau-de-kherfallah-ipm-2010-2011
Projet reseau-de-kherfallah-ipm-2010-2011Projet reseau-de-kherfallah-ipm-2010-2011
Projet reseau-de-kherfallah-ipm-2010-2011
Boubaker KHERFALLAH
 
Лекція №1
Лекція №1Лекція №1
Лекція №1
Michael Attwood
 
Mvvm basics
Mvvm basicsMvvm basics
Mvvm basics
anusha kadimi
 
Course 102: Lecture 9: Input Output Internals
Course 102: Lecture 9: Input Output Internals Course 102: Lecture 9: Input Output Internals
Course 102: Lecture 9: Input Output Internals
Ahmed El-Arabawy
 
Hacking
HackingHacking

Was ist angesagt? (20)

How to Backup to Google Drive with CloudBerry Backup
How to Backup to Google Drive with CloudBerry Backup How to Backup to Google Drive with CloudBerry Backup
How to Backup to Google Drive with CloudBerry Backup
 
Network Programming in C#
Network Programming in C#Network Programming in C#
Network Programming in C#
 
Bài 4: Triển khai Active Directory: Quản trị nhóm - Giáo trình FPT
Bài 4: Triển khai Active Directory: Quản trị nhóm - Giáo trình FPTBài 4: Triển khai Active Directory: Quản trị nhóm - Giáo trình FPT
Bài 4: Triển khai Active Directory: Quản trị nhóm - Giáo trình FPT
 
365 Teachings from the New Revelation for Yesterday, Today and Forever (part 2)
365 Teachings from the New Revelation for Yesterday, Today and Forever  (part 2)365 Teachings from the New Revelation for Yesterday, Today and Forever  (part 2)
365 Teachings from the New Revelation for Yesterday, Today and Forever (part 2)
 
Virtual Box Presentation
Virtual Box Presentation Virtual Box Presentation
Virtual Box Presentation
 
Server virtualization
Server virtualizationServer virtualization
Server virtualization
 
Concepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupérationConcepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupération
 
Luận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải Phòng
Luận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải PhòngLuận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải Phòng
Luận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải Phòng
 
Design Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVMDesign Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVM
 
Extended Finite State Machine - EFSM
Extended Finite State Machine - EFSMExtended Finite State Machine - EFSM
Extended Finite State Machine - EFSM
 
Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
 
introduction to sql server by moamen hany
introduction to sql server by moamen hanyintroduction to sql server by moamen hany
introduction to sql server by moamen hany
 
Toward Better Password Requirements
Toward Better Password RequirementsToward Better Password Requirements
Toward Better Password Requirements
 
La virtualisation
La virtualisationLa virtualisation
La virtualisation
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 
Projet reseau-de-kherfallah-ipm-2010-2011
Projet reseau-de-kherfallah-ipm-2010-2011Projet reseau-de-kherfallah-ipm-2010-2011
Projet reseau-de-kherfallah-ipm-2010-2011
 
Лекція №1
Лекція №1Лекція №1
Лекція №1
 
Mvvm basics
Mvvm basicsMvvm basics
Mvvm basics
 
Course 102: Lecture 9: Input Output Internals
Course 102: Lecture 9: Input Output Internals Course 102: Lecture 9: Input Output Internals
Course 102: Lecture 9: Input Output Internals
 
Hacking
HackingHacking
Hacking
 

Andere mochten auch

Blattschmuck No.2 Laurustico
Blattschmuck   No.2  LaurusticoBlattschmuck   No.2  Laurustico
Blattschmuck No.2 Laurustico
Laurustico - Club für Gartenfreunde
 
Japanese Art After 1392 Ashley, Will, Megan
Japanese Art After 1392 Ashley, Will, MeganJapanese Art After 1392 Ashley, Will, Megan
Japanese Art After 1392 Ashley, Will, Megan
bassmanb
 
Garden Design in Public and Private Area Vikram Bhukkal (2011 A53BVI)
Garden Design in Public and Private Area Vikram Bhukkal (2011 A53BVI)Garden Design in Public and Private Area Vikram Bhukkal (2011 A53BVI)
Garden Design in Public and Private Area Vikram Bhukkal (2011 A53BVI)
AmitBarkodia
 
Japanese Zen Gardens and Tea Ceremony
Japanese Zen Gardens and Tea CeremonyJapanese Zen Gardens and Tea Ceremony
Japanese Zen Gardens and Tea Ceremony
TPHS Creative Curriculm for Children
 
Landscape architecture in lines alaa albarmawi
Landscape architecture in lines  alaa albarmawiLandscape architecture in lines  alaa albarmawi
Landscape architecture in lines alaa albarmawi
Alaa Albarmawi
 
010 intro to cert
010 intro to cert 010 intro to cert
010 intro to cert
Mary Palmer Dargan
 
REAL PARADISE GARDENS OF THE WORLD
REAL PARADISE GARDENS OF THE WORLDREAL PARADISE GARDENS OF THE WORLD
REAL PARADISE GARDENS OF THE WORLD
Tony Chacko
 
Week 8 landscape architecture
Week 8 landscape architectureWeek 8 landscape architecture
Week 8 landscape architecture
nurun2010
 
Versailles - The Garden, Paris
Versailles - The Garden, ParisVersailles - The Garden, Paris
Versailles - The Garden, Paris
Jerry Daperro
 
Japanese Landscape
Japanese Landscape Japanese Landscape
Japanese Landscape
Sai Yaswanth
 
Japanese Gardens Study
Japanese Gardens StudyJapanese Gardens Study
Japanese Gardens Study
Harpreet Oberoi
 
Italian garden
Italian  gardenItalian  garden
Italian garden
nijaardez
 
french gardens.(land scaping)
french gardens.(land scaping)french gardens.(land scaping)
french gardens.(land scaping)
Satish Badrinadh
 
the Italian garden
the Italian gardenthe Italian garden
the Italian garden
Sumit Ranjan
 
Types of gardens
Types of gardensTypes of gardens
Types of gardens
Shreya Singh
 
japanese landscape garden ARCHITECTURE
 japanese landscape garden ARCHITECTURE  japanese landscape garden ARCHITECTURE
japanese landscape garden ARCHITECTURE
Abhishek Singh
 
Audi – Die Modelle
Audi – Die ModelleAudi – Die Modelle
Audi – Die Modelle
guest8c3976
 
Landscaping Design
Landscaping DesignLandscaping Design
Landscaping Design
Yamini Soni
 
Vergabedokumentation und Vergabeakte
Vergabedokumentation und VergabeakteVergabedokumentation und Vergabeakte
Vergabedokumentation und Vergabeakte
Thomas Ferber
 
Landscape Design and Principles
Landscape Design and PrinciplesLandscape Design and Principles
Landscape Design and Principles
Catherine Patterson
 

Andere mochten auch (20)

Blattschmuck No.2 Laurustico
Blattschmuck   No.2  LaurusticoBlattschmuck   No.2  Laurustico
Blattschmuck No.2 Laurustico
 
Japanese Art After 1392 Ashley, Will, Megan
Japanese Art After 1392 Ashley, Will, MeganJapanese Art After 1392 Ashley, Will, Megan
Japanese Art After 1392 Ashley, Will, Megan
 
Garden Design in Public and Private Area Vikram Bhukkal (2011 A53BVI)
Garden Design in Public and Private Area Vikram Bhukkal (2011 A53BVI)Garden Design in Public and Private Area Vikram Bhukkal (2011 A53BVI)
Garden Design in Public and Private Area Vikram Bhukkal (2011 A53BVI)
 
Japanese Zen Gardens and Tea Ceremony
Japanese Zen Gardens and Tea CeremonyJapanese Zen Gardens and Tea Ceremony
Japanese Zen Gardens and Tea Ceremony
 
Landscape architecture in lines alaa albarmawi
Landscape architecture in lines  alaa albarmawiLandscape architecture in lines  alaa albarmawi
Landscape architecture in lines alaa albarmawi
 
010 intro to cert
010 intro to cert 010 intro to cert
010 intro to cert
 
REAL PARADISE GARDENS OF THE WORLD
REAL PARADISE GARDENS OF THE WORLDREAL PARADISE GARDENS OF THE WORLD
REAL PARADISE GARDENS OF THE WORLD
 
Week 8 landscape architecture
Week 8 landscape architectureWeek 8 landscape architecture
Week 8 landscape architecture
 
Versailles - The Garden, Paris
Versailles - The Garden, ParisVersailles - The Garden, Paris
Versailles - The Garden, Paris
 
Japanese Landscape
Japanese Landscape Japanese Landscape
Japanese Landscape
 
Japanese Gardens Study
Japanese Gardens StudyJapanese Gardens Study
Japanese Gardens Study
 
Italian garden
Italian  gardenItalian  garden
Italian garden
 
french gardens.(land scaping)
french gardens.(land scaping)french gardens.(land scaping)
french gardens.(land scaping)
 
the Italian garden
the Italian gardenthe Italian garden
the Italian garden
 
Types of gardens
Types of gardensTypes of gardens
Types of gardens
 
japanese landscape garden ARCHITECTURE
 japanese landscape garden ARCHITECTURE  japanese landscape garden ARCHITECTURE
japanese landscape garden ARCHITECTURE
 
Audi – Die Modelle
Audi – Die ModelleAudi – Die Modelle
Audi – Die Modelle
 
Landscaping Design
Landscaping DesignLandscaping Design
Landscaping Design
 
Vergabedokumentation und Vergabeakte
Vergabedokumentation und VergabeakteVergabedokumentation und Vergabeakte
Vergabedokumentation und Vergabeakte
 
Landscape Design and Principles
Landscape Design and PrinciplesLandscape Design and Principles
Landscape Design and Principles
 

Ähnlich wie Einführung Software Testing und Qualitätssicherung

Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!
gedoplan
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTdd
jlink
 
Testgetriebene Softwareentwicklung
Testgetriebene SoftwareentwicklungTestgetriebene Softwareentwicklung
Testgetriebene Softwareentwicklung
jlink
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
Sebastian Springer
 
Komponententests und Testabdeckung
Komponententests und TestabdeckungKomponententests und Testabdeckung
Komponententests und Testabdeckung
Christian Baranowski
 
MicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardMicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative Standard
OPEN KNOWLEDGE GmbH
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
Sebastian Springer
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101gueste4be40
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir sein
codepitbull
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
gedoplan
 
Unit testing mit Javascript
Unit testing mit JavascriptUnit testing mit Javascript
Unit testing mit Javascript
joergreichert
 
96% macoun 2013
96% macoun 201396% macoun 2013
96% macoun 2013Maxim Zaks
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Ralf Sigmund
 
Clean Test Code (Clean Code Days)
Clean Test Code (Clean Code Days)Clean Test Code (Clean Code Days)
Clean Test Code (Clean Code Days)
David Völkel
 
Java und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenJava und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzen
Andreas Schreiber
 
Real Life TDD
Real Life TDDReal Life TDD
Real Life TDD
Daniel Rosowski
 
Objektvalidierung mit dem Bean Validation Api
Objektvalidierung mit dem Bean Validation ApiObjektvalidierung mit dem Bean Validation Api
Objektvalidierung mit dem Bean Validation Api
gunnarmorling
 
Feige sein
Feige seinFeige sein
Feige sein
gedoplan
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?
QAware GmbH
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?
Josef Adersberger
 

Ähnlich wie Einführung Software Testing und Qualitätssicherung (20)

Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTdd
 
Testgetriebene Softwareentwicklung
Testgetriebene SoftwareentwicklungTestgetriebene Softwareentwicklung
Testgetriebene Softwareentwicklung
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Komponententests und Testabdeckung
Komponententests und TestabdeckungKomponententests und Testabdeckung
Komponententests und Testabdeckung
 
MicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardMicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative Standard
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir sein
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
 
Unit testing mit Javascript
Unit testing mit JavascriptUnit testing mit Javascript
Unit testing mit Javascript
 
96% macoun 2013
96% macoun 201396% macoun 2013
96% macoun 2013
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 
Clean Test Code (Clean Code Days)
Clean Test Code (Clean Code Days)Clean Test Code (Clean Code Days)
Clean Test Code (Clean Code Days)
 
Java und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenJava und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzen
 
Real Life TDD
Real Life TDDReal Life TDD
Real Life TDD
 
Objektvalidierung mit dem Bean Validation Api
Objektvalidierung mit dem Bean Validation ApiObjektvalidierung mit dem Bean Validation Api
Objektvalidierung mit dem Bean Validation Api
 
Feige sein
Feige seinFeige sein
Feige sein
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?
 

Mehr von Christian Baranowski

Microservices – die Architektur für Agile-Entwicklung?
Microservices – die Architektur für Agile-Entwicklung?Microservices – die Architektur für Agile-Entwicklung?
Microservices – die Architektur für Agile-Entwicklung?
Christian Baranowski
 
OSGi and Spring Data for simple (Web) Application Development
OSGi and Spring Data  for simple (Web) Application DevelopmentOSGi and Spring Data  for simple (Web) Application Development
OSGi and Spring Data for simple (Web) Application Development
Christian Baranowski
 
BDD - Behavior Driven Development Webapps mit Groovy Spock und Geb
BDD - Behavior Driven Development Webapps mit Groovy Spock und GebBDD - Behavior Driven Development Webapps mit Groovy Spock und Geb
BDD - Behavior Driven Development Webapps mit Groovy Spock und Geb
Christian Baranowski
 
Einführung in die Software-Qualitätssicherung
Einführung in die Software-QualitätssicherungEinführung in die Software-Qualitätssicherung
Einführung in die Software-QualitätssicherungChristian Baranowski
 
OSGi Web Development in Action
OSGi Web Development in ActionOSGi Web Development in Action
OSGi Web Development in Action
Christian Baranowski
 
Spock and Geb in Action
Spock and Geb in ActionSpock and Geb in Action
Spock and Geb in Action
Christian Baranowski
 
Continuous Delivery in Action
Continuous Delivery in ActionContinuous Delivery in Action
Continuous Delivery in Action
Christian Baranowski
 
Gradle and Continuous Delivery
Gradle and Continuous DeliveryGradle and Continuous Delivery
Gradle and Continuous Delivery
Christian Baranowski
 
Spock and Geb
Spock and GebSpock and Geb
Spock and Geb
Christian Baranowski
 
Semantic Versioning
Semantic VersioningSemantic Versioning
Semantic Versioning
Christian Baranowski
 
OSGi Community Updates 2012
OSGi Community Updates 2012OSGi Community Updates 2012
OSGi Community Updates 2012
Christian Baranowski
 
OSGi Mars World in Action
OSGi Mars World in ActionOSGi Mars World in Action
OSGi Mars World in Action
Christian Baranowski
 
Warum OSGi?
Warum OSGi?Warum OSGi?
Top10- Software Engineering Books
Top10- Software Engineering BooksTop10- Software Engineering Books
Top10- Software Engineering Books
Christian Baranowski
 
Domain Driven Design - 10min
Domain Driven Design - 10minDomain Driven Design - 10min
Domain Driven Design - 10min
Christian Baranowski
 
SDC - Einführung in Scala
SDC - Einführung in ScalaSDC - Einführung in Scala
SDC - Einführung in Scala
Christian Baranowski
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungChristian Baranowski
 
Software Testing und Qualitätssicherung
Software Testing und QualitätssicherungSoftware Testing und Qualitätssicherung
Software Testing und QualitätssicherungChristian Baranowski
 
Datenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiDatenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiChristian Baranowski
 

Mehr von Christian Baranowski (20)

Microservices – die Architektur für Agile-Entwicklung?
Microservices – die Architektur für Agile-Entwicklung?Microservices – die Architektur für Agile-Entwicklung?
Microservices – die Architektur für Agile-Entwicklung?
 
OSGi and Spring Data for simple (Web) Application Development
OSGi and Spring Data  for simple (Web) Application DevelopmentOSGi and Spring Data  for simple (Web) Application Development
OSGi and Spring Data for simple (Web) Application Development
 
BDD - Behavior Driven Development Webapps mit Groovy Spock und Geb
BDD - Behavior Driven Development Webapps mit Groovy Spock und GebBDD - Behavior Driven Development Webapps mit Groovy Spock und Geb
BDD - Behavior Driven Development Webapps mit Groovy Spock und Geb
 
Einführung in die Software-Qualitätssicherung
Einführung in die Software-QualitätssicherungEinführung in die Software-Qualitätssicherung
Einführung in die Software-Qualitätssicherung
 
OSGi Web Development in Action
OSGi Web Development in ActionOSGi Web Development in Action
OSGi Web Development in Action
 
Spock and Geb in Action
Spock and Geb in ActionSpock and Geb in Action
Spock and Geb in Action
 
Continuous Delivery in Action
Continuous Delivery in ActionContinuous Delivery in Action
Continuous Delivery in Action
 
Gradle and Continuous Delivery
Gradle and Continuous DeliveryGradle and Continuous Delivery
Gradle and Continuous Delivery
 
Spock and Geb
Spock and GebSpock and Geb
Spock and Geb
 
Semantic Versioning
Semantic VersioningSemantic Versioning
Semantic Versioning
 
OSGi Community Updates 2012
OSGi Community Updates 2012OSGi Community Updates 2012
OSGi Community Updates 2012
 
OSGi Mars World in Action
OSGi Mars World in ActionOSGi Mars World in Action
OSGi Mars World in Action
 
Warum OSGi?
Warum OSGi?Warum OSGi?
Warum OSGi?
 
Top10- Software Engineering Books
Top10- Software Engineering BooksTop10- Software Engineering Books
Top10- Software Engineering Books
 
Domain Driven Design - 10min
Domain Driven Design - 10minDomain Driven Design - 10min
Domain Driven Design - 10min
 
SDC - Einführung in Scala
SDC - Einführung in ScalaSDC - Einführung in Scala
SDC - Einführung in Scala
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
 
Software Testing und Qualitätssicherung
Software Testing und QualitätssicherungSoftware Testing und Qualitätssicherung
Software Testing und Qualitätssicherung
 
Datenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiDatenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence Api
 
Java Servlets und AJAX
Java Servlets und AJAX Java Servlets und AJAX
Java Servlets und AJAX
 

Einführung Software Testing und Qualitätssicherung

  • 1. Software Technik HTWG Konstanz Software Testing und Qualitätssicherung Christian Baranowski
  • 3. Requirement Analysis Wasserfallmodell System Design Coding Testing Delivery
  • 4. Warum sollte eine Entity die Basic Mappings Schnittstelle Serializable implementieren? @Table(name = "Adr") @Entity public class Address implements Serializable { @Id @Column(name = "ADDRESS_ID") @GeneratedValue(strategy = GenerationType.SEQUENCE) private long id; @Basic private String city; @Basic private String country; @Basic private String province; @Basic @Column(name = "P_CODE") private String postalCode; @Basic private String street;
  • 5. Assoziationen / Relationen @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) @JoinColumn(name = "ADDR_ID") private Address address; @ManyToOne(fetch = FetchType.LAZY) private JobTitle jobTitle; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "MANAGER_ID") private Employee manager; @OneToMany(mappedBy = "manager") private List<Employee> managedEmployees = new ArrayList<Employee>();
  • 6. Assoziationen / Relationen @OneToMany(mappedBy = "owner", cascade = CascadeType.ALL, orphanRemoval = true) private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>(); @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @JoinColumn(name="EMP_ID") private List<Degree> degrees = new ArrayList<Degree>(); @ManyToMany @JoinTable(name = "PROJ_EMP", joinColumns = @JoinColumn(name = "EMP_ID"), inverseJoinColumns = @JoinColumn(name = "PROJ_ID")) private List<Project> projects = new ArrayList<Project>();
  • 7. Entity •Entity hat immer einen eindeutigen Schlüssel (ID) dieser identifiziert die Entität •Equals auf Basis der ID...
  • 8. Entity Manager •API bietet alle Funktion für den Datenbankzugriff: •persist •remove •createQuery •merge •findXXX •....
  • 9. Entity Manager •Wenn die Objekte (Entity Klassen) auch als Daten Transfer Objekte genutzt werden sollen können sie vom Entity Manager gelöst werden man spricht von detached Entities!
  • 10. Detached Entities •Managed Entities werden vom Entity Manager gelöst wenn: •clear oder detach •mittels rollback •Entity Manager closed
  • 11. Übungen I •Erweitern Sie Ihre Aufgaben Verwaltung um eine Datenbank Anbindung mittels JPA •Schritt 1. Domain Modell markieren mit den JPA Annotationen für das OR Mapping... •Schritt II. Repository Funktionen zum speichern und laden einer Aufgabe umsetzen...
  • 12. Was ist Software Qualität ?
  • 13. Was ist Software Qualität ? Funktionalität - Software sollte die spezifizierten Use- Cases / Anforderungen implementieren. 4+4=9
  • 14. Was ist Software Qualität ? Benutzbarkeit vorgegebenen Use-Cases lassen sich effektiv, effizient und zufriedenstellend bedienen. Benutzbarkeit betrifft nicht nur grafische Benutzerschnittstellen z.B. auch APIs... Die Benutzbarkeit richtet sich nach dem Anwendungsfall...
  • 15. Was ist Software Qualität ? Zuverlässigkeit wie verlässlich eine Anwendung in einem Zeitintervall ihr Funktionalität erfüllt
  • 16. Was ist Software Qualität ? Portabilität - der Grad der Plattformunabhängigkeit eines Computerprogramms Portabilität - Die Anwendung läuft auf Linux, MAC und auf Ihrem Android Mobil Phone ...
  • 17. Was ist Software Qualität ? Wartbarkeit - zeigt an, mit welcher Energie und welchem Erfolg Änderungen in einem Systemzusammenhang von Applikationen durchgeführt werden können.
  • 18. Was ist Software Qualität ? Effizienz - Performance und verbrauchte Ressourcen
  • 19. Was ist Software Qualität ? Funktionalität Effizienz Wartbarkeit Zuverlässigkeit Portabilität Benutzbarkeit
  • 20. Was soll sichergestellt werden? Fehlerwirkung (Failure) Nach außen sichtbare Fehlverhalten Fehlerzustand (Bug) Zustand in der Anwendung der zu einer Fehlerwirkung führen kann. Fehlhandlung (Error, Misstake) Irrtum bei der Software-Entwicklung. Fehlermaskierung Wirkung eines Fehlers (Fehlerzustand) ist nach außen nicht sichtbar, weil er durch einen weiteren Fehler verborgen (überlagert / maskiert) wird.
  • 21. Wege zu guter Software analytische Qualitätssicherung Methoden die dazu dienen eine Anwendung strukturiert (analytisch) nach Fehlerwirkungen, Fehlerzuständen und Fehlermaskierung zu untersuchen. Die Qualität wird gemessen. Anzahl der Fehlerwirkungen, Fehlerzuständen und konstruktive Fehlermaskierung bestimmt. Qualitätssicherung Methoden die dazu dienen die Wahrscheinlichkeit für Fehlhandlungen zu minimieren. D.h. die Methoden führen dazu dass es zu einer geringeren Fehlerwahrscheinlichkeit im Projekt kommt.
  • 22. Kosten zur Fehlerbehebung Kosten (€) Fehler frühzeitig in einem Projekt (Entwicklungsprozess) zu finden spart Geld !!! Anforderungsanalyse Systementwurf Umsetzung Integrationstest Systemtest Betrieb
  • 24. Komponententest Charakter •Was wird getestet ? (Testobjekt) -Klasse / Komponente (mehre Klassen mit definierter Schnittstelle) •Wer testet? (Tester) -Entwickler (White-Box / Gray-Box) / Tester (Black-Box) •Welche Qualitätseigenschaft (ISO9126) wird geprüft? -Funktionalität, Robustheit, Effizienz •Mit welchen Werkzeugen wird getestet? -xUnit Frameworks und Coverage Messung z.B. Cobertura, Emma
  • 25. Test Design Pattern vier Phasen Test Setup SUT in einen definierten Zustand bringen. Exercise SUT aufrufen mit Test Parametern (Daten). Verify Prüfen ob das SUT im erwarteten Zustand ist. Teardown SUT und Testumgebung aufräumen.
  • 26. JUnit public class QuicksortTest { ! Quicksort<Integer> quicksortSUT; Phase 1: Setup ! @Before ! public void setUp() { ! ! quicksortSUT = new Quicksort<Integer>(new IntComperator()); ! } ! @Test Phase 2: Exercise ! public void testSort() throws Exception { ! ! quicksortSUT.sort(new Integer[] { 5, 8, 2, 4, 7 }); ! ! assertArrayEquals(new Integer[] { 2, 4, 5, 7, 8 }, values); ! } Phase 3: Verify ! @After ! public void tearDown() { ! ! quicksortSUT = null; ! } Phase 4: tearDown }
  • 28. Testabdeckung „Als Testabdeckung bezeichnet man das Verhältnis an tatsächlich getroffenen Aussagen eines Tests gegenüber den theoretisch möglich treffbaren Aussagen bzw. der Menge der gewünschten treffbaren Aussagen.“ - Wikipedia
  • 29. Testabdeckung (100 %) public boolean aAndbOrC(boolean A, boolean B, boolean C) { ! return (A && B) || C; } Erwartet A B C false false false false true false false true false false true false true false true true false true false false true true false true true true true false true true true true
  • 30. vollständige Testabdeckung „Eine vollständige Testabdeckung stellt eine Ausnahme dar, weil die Anzahl möglicher Testfälle sehr schnell ungeheuer groß wird (durch kombinatorische Explosion). Ein vollständiger Funktionstest für eine einfache Funktion, die zwei 16-Bit-Werte als Argument erhält, würde schon 2^(16+16), also ca. 4 Milliarden Testfälle bedeuten, um die Spezifikation vollständig zu testen.“ - Wikipedia
  • 32. Statement Coverage (Anweisungsüberdeckung) public static boolean aAndBOrC(boolean A, boolean B, boolean C) { if(A && B){ return true; } else if(C) { return true; } else { return false; } }
  • 34. Statement Coverage (Anweisungsüberdeckung) 1. A && B true Erwartet A B C 1. true true true false C true false
  • 35. Statement Coverage (Anweisungsüberdeckung) 1. A && B true Erwartet A B C 2. 1. true true true false C true 2. true false false true false
  • 36. Statement Coverage (Anweisungsüberdeckung) 100 % 1. A && B true Erwartet A B C 2. 1. true true true false 3. C true 2. true false false true 3. false false false false false
  • 37. Statement Coverage (Anweisungsüberdeckung) public static boolean aAndBOrC(boolean A, boolean B, boolean C) { if(A && B || C){ return true; } else { return false; } }
  • 38. Statement Coverage (Anweisungsüberdeckung) 100% 1. A && B || C true Erwartet A B C 2. false 1. true false false true 2. false false false false
  • 39. Statement Coverage (Anweisungsüberdeckung) public static int sum(int values[], int offset){ int result = 0; for (int value : values) { if(offset > 0){ if(offset < value) result += offset; } result += value; } return result; }
  • 40. Statement Coverage (Anweisungsüberdeckung) 100% result = 0 for (value : values) Erwartet values offset offset > 0 offset < value 3 [2] 1 result += offset result += value return result
  • 41. Statement Coverage (Anweisungsüberdeckung) 100 % result = 0 for (value : values) Erwartet values offset offset > 0 offset < value 3 [2] 1 result += offset result += value return result
  • 42. Branch Coverage 100 % (Zweigabdeckung) result = 0 for (value : values) offset > 0 offset < value result += offset Erwartet values offset result += value 3 [2] 1 2 [2] 0 return result 2 [2] 2
  • 43. 100% Pfadabdeckung 100 % Pfadabdeckung wird in der Regel nicht erreicht (halting problem)
  • 45. Übung 1I • Erstellen Sie einen Unit Test für die JPA Implementierung zum speichern der Aufgabe • Messen Sie die Code Abdeckung in Eclipse
  • 47. Walkthrough • Autor stellt seinen Code Dokument vor. • Autor ist der Moderator • Vorteile: • Wenig Vorbereitungsaufwand • Prüfung findet durch spontane Fragen statt.
  • 48. Inspektion • Formalste Form eines Review • oft formale Vorprüfung • Gutachter bekommen die Dokumente vorab • Gutachter prüfen erst einzeln • Anschließende Sitzung mit Autor, Gutachtern und Moderator
  • 49. Technisches Review • Autor nimmt am Review nicht teil • Gutachter stimmen ab • Prüfen gegen Spezifikation • Gutachter prüfen einzeln vorab
  • 50. Informelles Review • Gutachter bekommt Dokument zum lesen und gibt schriftliche Rückmeldung
  • 51. Zusammenfassung Reviews Grad der geringster höchsten mittel gering Formalisierung Autor Autor Gutachter einzelne Anwesend Gutachter Prüfer Moderator Gutachter Moderator Code Code Anwendbarkeit Dokumente Dokumente Dokumente Dokumente Lernen Vorbereitung kaum Formale Prüfung Formale Prüfung kaum Walkthrough Inspektion Technisches Informelles Review Review
  • 53. Namens Konventionen • Klassennamen • beginnt mit einem Großbuchstaben, danach in Kleinbuchstaben weiter • beginnt ein neuer wesentlicher Teil des Klassennamens, wird er mit einem Großbuchstaben verdeutlicht • Beispiele • Color, Button, TextField, String
  • 54. Namens Konventionen • Methodennamen • beginnt mit einem Kleinbuchstaben, weiter klein geschrieben • beginnt ein neuer wesentlicher Teil wird er mit einem Großbuchstaben verdeutlicht • Beispiele • equals(), setColor(), drawOval()...
  • 55. Namens Konventionen • Konstantennamen • komplett in Großbuchstaben • Beispiele • LEFT, PI, BLOD
  • 56. Integrationsstrategien Big-bang Test A Test B Test G Test Test C A- G Test F Test D Test E
  • 57. Integrationsstrategien Bottom-up Test A- G Test Test B, E, F D, G Test C Test E Test F Test G
  • 58. Integrationsstrategien Top-down Test A Test A, B, C, D Test A- G
  • 60. Integrationsstrategien Continuous Integration betrachten wir noch in einer der folgenden Vorlesung
  • 62. Test Charakterisierung •Was wird getestet ? (Testobjekt) •Wer testet? (Tester) •Welche Qualitätseigenschaft (ISO9126) wird geprüft? •Mit welchen Werkzeugen wird getestet?
  • 63. Integrationstest Charakter •Was wird getestet ? (Testobjekt) -Zusammenspiel von zwei oder mehrere Module. -Passen die Schnittstellen? •Wer testet? (Tester) -Entwickler (White-Box / Gray-Box) / dezidierte Tester (Black-Box) •Welche Qualitätseigenschaft (ISO9126) wird geprüft? -Robustheit, Portabilität,Funktionalität, Wartbarkeit, Effizienz •Mit welchen Werkzeugen wird getestet? -JUnit, DBunit, Mocking Frameworks
  • 65. Systemtests Charakter •Was wird getestet ? (Testobjekt) -komplettes System (vollständiger Integrationstest) -bis zur Systemgrenze •Wer testet? (Tester) - dezidierte Tester (Black-Box) •Welche Qualitätseigenschaft (ISO9126) wird geprüft? -Funktionalität, Effizienz, Benutzbarkeit, Robustheit, Portabilität •Mit welchen Werkzeugen wird getestet? -JUnit, FIT, Selenium ... HP Test Runner, GUIdancer ...
  • 67. Überblick Fit Framework for Integrated Tests FIT wurde entwickelt von Ward Cunningham WIKI-Erfinder...
  • 68. Motivation von Fit Tests • Automatisierung von Akzeptanztests mittels Tabellen. • Framework für Datengetriebene Tests – Data-Driven-Test (xUnit Test Patterns - Gerard Meszaros)
  • 69. Testen mit Fit Tabellen Fit Tests für einen Beispiel Zinsrechner
  • 70. Testen mit Fit Tabellen Fit Tests als Column Test Tabelle Betrag 10
  • 71. Testen mit Fit Tabellen Fit Tests als Column Test Tabelle Betrag Zinssatz 10 2,5
  • 72. Testen mit Fit Tabellen Fit Tests als Column Test Tabelle Betrag Zinssatz Laufzeit 10 2,5 2
  • 73. Testen mit Fit Tabellen Fit Tests als Column Test Tabelle Betrag Zinssatz Laufzeit Summe 10 2,5 2 10,51
  • 74. Testen mit Fit Tabellen Fit Tests als Column Test Tabelle Prüfung eines Ergebnis Eingehende - Werte Betrag Zinssatz Laufzeit Summe() Testfall 10 2,5 2 10,51
  • 75. Testen mit Fit Tabellen Fit Tests als Column Test Tabelle Betrag Zinssatz Laufzeit Summe() 10 2,5 2 10,51 10 10 3 25,94 10 10 10 100000 ... ... ... ... Testfälle
  • 76. Testen mit Fit Tabellen Fit Tests als Column Test Tabelle Rot = Fehler in der Anwendung Gelb =Ausnahme - Fehler im Test Grün = erfolgreicher Test
  • 77. Testen mit Fit Tabellen Fit Test als Action Tabelle Befehle / Kommandos fit.Ac?onFixture Anbindung an die Applikation (Java) start ZinsenAc(onFixture enter Betrag 10 Argumente enter Zinssatz 2,5 Testfall enter Laufzeit 2 press Submit check Summe 10,51 Objekt / Auswahl / Target
  • 78. Testen mit Fit Tabellen Fit Test als Action Tabelle Anwendung Starten Eingaben Aktion - Zinsen Berechnen Prüfung
  • 79. Fit Design drei Klassen Framework
  • 80. Fit Tabellen und Applikation verknüpfen
  • 81. Fit Tabellen und Applikation verknüpfen onlinerechner.ZinsenFixture Betrag Zinssatz Laufzeit Summe() 10 2,5 2 10,51 10 10 3 25,94 20 10 10 100000 ... ... ... ...
  • 82. Fit Tabellen und Applikation verknüpfen Anbindung an SUT SUT
  • 83. Fit Tabellen und Applikation verknüpfen public class ZinsenFixture extends ColumnFixture { Basis Klasse für private Zinsen zinsen = new Zinsen(); Fit Extension public double betrag; SUT public double zinsatz; public double laufzeit; Eingehende - Werte public double summe() { Prüfung - Ausgabe zinsen.setBetrag(betrag); zinsen.setLaufzeit(laufzeit); zinsen.setZinssatz(zinsatz); Anbindung return zinsen.berechneZinsen(); an SUT } }
  • 84. Fit Tabellen und Applikation verknüpfen fit.Ac?onFixture GOF - Dekorierer-Muster start onlinerechner.ZinsenAc(onFixture enter Betrag 10 enter Zinssatz 2,5 enter Laufzeit 2 press berechneZinsen check Summe 10,51
  • 85. Fit Tabellen und Applikation verknüpfen
  • 86. Fit Tabellen und Applikation verknüpfen public class ZinsenActionFixture extends Fixture { Zinsen zinsen = new Zinsen(); double summe; public void betrag(double betrag) { zinsen.setBetrag(betrag); Eingaben / Enter } … public void berechneZinsen() { Aktion / Press summe = zinsen.berechneZinsen(); } public double summe() { return summe; Ausgabe Prüfung / Check } }
  • 87. Oberflächentests Einführung in Selenium Selenium Core Selenium Selenium RC IDE
  • 88. Selenium Core am Beispiel eines Zinsrechner Action - Tabelle Selenium Befehl open /JugsBase/zinsrechner.jsp Argumente type betrag 20.0 type zinsatz 22.0 type laufzeit 100.0 clickAndWait submit assertTextPresent 8649939365.27  Euro Target
  • 89. Selenium IDE Capture & Replay Tests mit Selenium Action Tabelle
  • 90. Selenium Remote Control Anbindung Selenium in Java Code als Test Treiber Selenium Server Browser Firefox, IE Selenium Core JAVA, PHP... SUT HTTP Proxy Webapplikation