• Keine Ergebnisse gefunden

Programmierprojekt   Anne0e  Bieniusa  Sommersemester  2014

N/A
N/A
Protected

Academic year: 2022

Aktie "Programmierprojekt   Anne0e  Bieniusa  Sommersemester  2014"

Copied!
22
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Programmierprojekt  

Anne0e  Bieniusa  

Sommersemester  2014  

(2)

Phasen  der  So;ware-­‐Entwicklung  

Planungsphase  

DefiniConsphase   Entwurfsphase  

ImplemenCerungsphase   Testphase  

Einführungs-­‐  und  Wartungsphase  

„Wasserfall-­‐Modell“  

(3)

EvoluConäre  Modelle  

•  Stufenweise,  allmähliche  Entwicklung  

•  Produktkern  basiert  auf  den  Muss-­‐

Anforderungen  

•  Weitere  Entwicklung/Anforderungen  sind  

gesteuert  durch  Erfahrungen  mit  dem  Produkt  

•  Gefahr:  Systemarchitektur  muss  für  spätere   Anpassungen  vollständig  überarbeitet  werden  

(4)

Inkrementelle  Modelle  

•  Zu  Beginn  werden  alle  Anforderungen   vollständig  erhoben  

•  Anforderungen  werden  dann  schri0weise   implemenCert  

•  Mehr  Zeitaufwand  am  Anfang  

•  Gefahr:  Anforderungen  werden  übersehen  

(5)

Agile  So;ware  Entwicklung  

•  Flexibler  und  schlanker  Prozess  

•  Agiles  Manifest:  

1. Menschen  und  Interak1onen  sind  wichCger  als   Prozesse  und  Werkzeuge.  

2. Funk1onierende  So7ware  ist  wichCger  als   umfassende  DokumentaCon.  

3. Zusammenarbeit  mit  dem  Kunden  ist  wichCger  als   die  ursprünglich  formulierten  

Leistungsbeschreibungen.  

4. Eingehen  auf  Veränderungen  ist  wichCger  als   Festhalten  an  einem  Plan.  

(6)

Agile  Methodik  und  Prinzipien    

•  Story  cards  /  User  stories  

•  Pair  programming  

•  Testgetriebene  Entwicklung  

•  SelbstorganisaCon  und  -­‐reflexion  des  Teams  

•  Fokus  auf  funkConierenden  Code  

•  Regelmäßige  und  häufige  Releases  

(7)

Versionsmanagement  

•  Gemeinsames  Arbeiten  am  gleichen  Code   erfordert  KoordinaCon  

•  Programmierer  stellen  ihren  Kollegen  ihren   Code  zur  Verfügung  

•  Hinzufügen  von  neuer  FunkConalität  

•  BeseiCgung  von  Fehlern  

•  Markieren  von  stabile  Versionen  und  Releases    

 

(8)

Begriffe  

•  Ein  Repository  ist  ein  Verzeichnis  zur  Verwaltung   von  digitalisierten  Daten  (z.B.  Dokumente,  

Quellcode)  

•  Durch  ein  Commit  werden  Änderungen  in  das   Versionsverwaltungssystem  eingespielt  

•  Ein  Branch  ist  die  Abspaltung  einer  Version,  so   dass  unterschiedliche  Versionen  parallel  

weiterentwickelt  werden  können  

•  Mi0els  Merge  können  Änderungen  von  einem   Branch  auch  wieder  in  einen  anderen  einfließen  

(9)

Git  und  Github  

•  Git  ist  ein  dezentrales  System  zur   Versionsverwaltung  

– Jeder  Kollaborateur  hat  seine  eigene  Kopie  

– Änderungen  erfolgen  zunächst  lokal  (auch  ohne   Netzwerkzugriff)  

– Später  werden  sie  an  einen  Server  übermi0elt  und   so  für  die  anderen  zugänglich  

•  Github  ist  ein  webbasierter  HosCng-­‐Dienst  für   Git-­‐Projekte    

(10)

Typischer  Workflow  in  Git  

•  Erstellen  eines  Branches  

•  Lokale  Commits  auf  dem  Branch  

•  Zwischendurch  Transfer  der  Änderungen  mit  Push   und  Pull  

•  Erstellen  eines  Pull  Requests  für  Merge  mit  dem   Master-­‐Branch  

•  Merge  mit  Master-­‐Branch  

Zum  Nachlesen:  h0ps://guides.github.com/acCviCes/hello-­‐world/  

(11)

Testen  

•  Kernfrage:  Erfüllt  die  So;ware  ihre   Anforderungen  /  SpezifikaCon?  

•  FunkConale  Anforderungen  

– Korrekte  Ergebnisse  bei  Berechnungen  

•  Nicht-­‐funkConale  Anforderungen  

– Laufzeit  von  Algorithmen,  Look-­‐and-­‐feel  der  GUI,   Skalierbarkeit  von  Servern,  Latenzzeiten  ...  

(12)

Testen  

•  „Ein  Test  [...]  ist  der  überprüJare  und  jederzeit   wiederholbare  Nachweis  der  Korrektheit  eines  

So;warebausteines  relaCv  zu  vorher  festgelegten   Anforderungen“  (Denert,  1991)    

•  WichCger  Baustein  der  Qualitätssicherung  in  der   So;ware-­‐Entwicklung  

•  „Program  tesCng  can  be  used  to  show  the   presence  of  bugs,  but  never  show  their  

absence!“(Edsger  W.  Dijkstra)  

(13)

Klassifizierung  nach  Umfang  

•  Unit-­‐Tests  (Komponententests)  für  einzelne   Komponenten  der  So;ware  

•  Integra1onstets  für  die  Zusammenarbeit  von   Komponenten  

•  Systemtest  für  die  IntegraCon  in  die   Anwendungsplaporm  

•  Abnahmetests  für  die  InterakCon  mit  dem   Benutzer  /  Kunden  

(14)

Klassifizierung  von  InformaConsstand    

•  White-­‐Box-­‐Tests  inspizieren  auch  den  inneren   Auqau  einer  Komponente,  häufig  vom  

Entwickler  durchgeführt  

•  Black-­‐Box-­‐Tests  agieren  mit  einer  

wohldefinierten  Schni0stelle,  ohne  Kenntnis   über  den  tatsächlichen  Auqau  einer  

Komponente,  häufig  von  unabhängigen   Instanzen  auf  Basis  der  DokumentaCon   durchgeführt  

(15)

Methodik  

•  Ziel:  Möglichst  hohe  Abdeckung  des  Java-­‐Codes   durch  Tesrälle  

–  Möglichst  jede  Methode  einer  Klasse  sollte  getestet   werden    

–  Jede  Methode  sollte  mit  verschiedenen  Parametern   getestet  werden  

–  Randfälle  sind  wichCg!  

•  [  Randomisierte  Tests  erzeugen  zufällige  Tesrälle   -­‐>  verringert  die  Chance,  dass  der  Programmierer   Randfälle  übersehen  hat  ]  

 

(16)

Junit4  

•  Framework  zum  Unit-­‐TesCng  von  Java-­‐Klassen  

•  Einfache  Möglichkeit  Tests  zu  spezifizieren   und  diese  automaCsiert  auszuführen  

•  Reihenfolge  der  Ausführung  ist  nicht  spezifiert  

•  Tesrälle  müssen  daher  unabhängig  von   einander  sein  

(17)

Auqau  eines  Tests  

•  Bei  Hinzufügen  eines  neuen  JUnit4-­‐  Tests  wird  folgender  Stub   erzeugt  (und  das  Junit4  Package  zum  Build-­‐Pfad  hinzugefügt):  

   

import  sta1c  org.junit.Assert.*;  

import  org.junit.Test;  

 

public  class  ProjektTest  {        @Test    

         public  void  test()  {  

                 fail("Not  yet  implemented");  

         }   }  

(18)

AsserCons  -­‐  Booleans  

•  Asserts  testen,  ob  eine  Bedinung  erfüllt  ist,  andernfalls  wird  der  Test  nicht   bestanden  

•  Um  den  Fehler  zu  beschreiben,  kann  man  einen  kurze  Erklärung  hinzufügen    

@Test  

   public  void  testAssertFalse()  {  

       org.junit.Assert.assertFalse("failure  -­‐  should  be  false",  false);  

   }    

@Test  

   public  void  testAssertTrue()  {  

       org.junit.Assert.assertTrue("failure  -­‐  should  be  true",  true);  

   }      

(19)

AsserCons  -­‐  Objekte  

@Test  

   public  void  testAssertNotNull()  {  

       org.junit.Assert.assertNotNull("should  not  be  null",  new  Object());  

   }    

   @Test  

   public  void  testAssertNull()  {  

       org.junit.Assert.assertNull("should  be  null",  null);  

   }    

@Test  

   public  void  testAssertNotSame()  {  

       org.junit.Assert.assertNotSame("should  not  be  same  Object",  new  Object(),  new  Object());  

   }  

   @Test  

   public  void  testAssertSame()  {  

       Integer  aNumber  =  Integer.valueOf(768);  

       org.junit.Assert.assertSame("should  be  same",  aNumber,  aNumber);  

   }    

(20)

AsserCons  -­‐  Equals  

@Test  

   public  void  testAssertArrayEquals()  {          byte[]  expected  =  "trial".getBytes();  

       byte[]  actual  =  "trial".getBytes();  

       org.junit.Assert.assertArrayEquals("failure  -­‐  byte  arrays  not  same",  expected,  actual);  

   }    

   @Test  

   public  void  testAssertEquals()  {  

       org.junit.Assert.assertEquals("failure  -­‐  strings  are  not  equal",  "text",  "text");  

   }                      

(21)

Testen  von  ExcepCons  

       

@Test(expected=  IndexOutOfBoundsExcepCon.class)            public  void  empty()  {    

                 new  ArrayList<Object>().get(0);    

       }  

(22)

Test  fixtures  

import  org.junit.*;    

public  class  TestFoobar  {          @BeforeClass  

       public  sta1c  void  setUpClass()  throws  ExcepCon  {                  //  wird  zu  Beginn  einmal  ausgeführt                

       }  

       @Before  

       public  void  setUp()  throws  ExcepCon  {                  //  wird  vor  jedem  Test  ausgeführt          }  

       @Test  

       public  void  test1()  {                  //  ein  Test  

       }  

@A;er  

       public  void  tearDown()  throws  ExcepCon  {                  //  wird  nach  jedem  Test  ausgeführt                }  

       @A;erClass  

       public  sta1c  void  tearDownClass()  throws  ExcepCon  {                  //  wird  ganz  am  Schluss  einmal  ausgeführt    

       }   }  

•  Manchmal  ist  es  sinnvoll,   dass  sich  mehrere  

Tesrälle  eine  

Testumgebung  teilen    

•  Um  die  Unabhängigkeit   zu  gewährleisten,  muss   vor/nach  dem  Test  die   Umgebung  

wiederhergestellt  werden   (setUp  /  tearDown)  

Referenzen

ÄHNLICHE DOKUMENTE

(2 Punkte) (b) ¨ Andern Sie direkt im Aufgabentext die Methode insert() so, dass kein Wert mehr- fach im Heap gespeichert wird. Sie k¨onnen dazu die Methode find()

Benutzer aktiviert die Anzeige erledigter Items Alle Items, auch die erledigten, werden angezeigt Erledigte Items sind farblich markiert..

Web-Anwendungen laufen auf Servern und kommunizieren mit dem Browser des Benutzers Austausch von Informationen zwischen Benutzern möglich.. Server speichert Informationen zur

(Tipp:

[r]

Laden Sie den Quellcode (als m-file oder Excel-File abgespeichert) versehen mit Namen und Matrikelnummer im StudIP hoch!. Die abzugebende Datei muss folgenden

Laden Sie den Quellcode (als m-file oder Excel-File abgespeichert) versehen mit Namen und Matrikelnummer im StudIP hoch!. Die abzugebende Datei muss folgenden

” Eine Call-Option ist das Recht (aber nicht die Pflicht), eine Aktie S in einem zuk¨ unftigen Zeitpunkt T zu einem vertraglich festgelegten Kurs K (Strike) kaufen zu d¨ urfen.“.