Einführung Software Testing und Qualitätssicherung

3.665 Aufrufe

Veröffentlicht am

0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
3.665
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
709
Aktionen
Geteilt
0
Downloads
65
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Einführung Software Testing und Qualitätssicherung

  1. 1. Software Technik HTWG Konstanz Software Testing und Qualitätssicherung Christian Baranowski
  2. 2. WiederhlungJava Persistence API Data Disk
  3. 3. Requirement Analysis Wasserfallmodell System Design Coding Testing Delivery
  4. 4. Warum sollte eine Entity dieBasic 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. 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. 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. 7. Entity •Entity hat immer einen eindeutigen Schlüssel (ID) dieser identifiziert die Entität •Equals auf Basis der ID...
  8. 8. Entity Manager•API bietet alle Funktion für den Datenbankzugriff: •persist •remove •createQuery •merge •findXXX •....
  9. 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. 10. Detached Entities•Managed Entities werden vom Entity Manager gelöst wenn: •clear oder detach •mittels rollback •Entity Manager closed
  11. 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. 12. Was ist Software Qualität ?
  13. 13. Was ist Software Qualität ?Funktionalität - Software sollte die spezifizierten Use-Cases / Anforderungen implementieren.4+4=9
  14. 14. Was ist Software Qualität ?Benutzbarkeit vorgegebenen Use-Cases lassen sicheffektiv, effizient und zufriedenstellend bedienen.Benutzbarkeit betrifft nicht nur grafischeBenutzerschnittstellen z.B. auch APIs... Die Benutzbarkeit richtet sich nach dem Anwendungsfall...
  15. 15. Was ist Software Qualität ?Zuverlässigkeit wie verlässlich eine Anwendung in einemZeitintervall ihr Funktionalität erfüllt
  16. 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. 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. 18. Was ist Software Qualität ? Effizienz - Performance und verbrauchte Ressourcen
  19. 19. Was ist Software Qualität ? Funktionalität EffizienzWartbarkeit Zuverlässigkeit Portabilität Benutzbarkeit
  20. 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. 21. Wege zu guter Softwareanalytische QualitätssicherungMethoden die dazu dienen eine Anwendung strukturiert(analytisch) nach Fehlerwirkungen, Fehlerzuständen undFehlermaskierung zu untersuchen. Die Qualität wird gemessen.Anzahl der Fehlerwirkungen, Fehlerzuständen und konstruktiveFehlermaskierung 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. 22. Kosten zur Fehlerbehebung Kosten (€) Fehler frühzeitig in einem Projekt (Entwicklungsprozess) zu finden spart Geld !!! Anforderungsanalyse Systementwurf Umsetzung Integrationstest Systemtest Betrieb
  23. 23. Komponententests (Modultests) und Testabdeckung
  24. 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. 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. 26. JUnitpublic 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}
  27. 27. Test CoverageTestabdeckung
  28. 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. 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. 30. vollständige Testabdeckung„Eine vollständige Testabdeckung stellt eine Ausnahmedar, weil die Anzahl möglicher Testfälle sehr schnellungeheuer groß wird (durch kombinatorische Explosion).Ein vollständiger Funktionstest für eine einfacheFunktion, die zwei 16-Bit-Werte als Argument erhält,würde schon 2^(16+16), also ca. 4 Milliarden Testfällebedeuten, um die Spezifikation vollständig zu testen.“ - Wikipedia
  31. 31. Testabdeckung beimWhite-Box Testen
  32. 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; } }
  33. 33. Statement Coverage (Anweisungsüberdeckung)A && B true C true false
  34. 34. Statement Coverage (Anweisungsüberdeckung) 1.A && B true Erwartet A B C 1. true true true false C true false
  35. 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. 36. Statement Coverage (Anweisungsüberdeckung)100 % 1. A && B true Erwartet A B C 2. 1. true true true false3. C true 2. true false false true 3. false false false false false
  37. 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. 38. Statement Coverage (Anweisungsüberdeckung)100% 1. A && B || C true Erwartet A B C2. false 1. true false false true 2. false false false false
  39. 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. 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. 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. 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. 43. 100% Pfadabdeckung 100 % Pfadabdeckung wird in der Regel nicht erreicht (halting problem)
  44. 44. Testabdeckungautomatisiert bestimmen
  45. 45. Übung 1I• Erstellen Sie einen Unit Test für die JPA Implementierung zum speichern der Aufgabe• Messen Sie die Code Abdeckung in Eclipse
  46. 46. Statische TestverfahrenCode Reviews
  47. 47. Walkthrough• Autor stellt seinen Code Dokument vor.• Autor ist der Moderator• Vorteile: • Wenig Vorbereitungsaufwand • Prüfung findet durch spontane Fragen statt.
  48. 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. 49. Technisches Review• Autor nimmt am Review nicht teil• Gutachter stimmen ab• Prüfen gegen Spezifikation• Gutachter prüfen einzeln vorab
  50. 50. Informelles Review• Gutachter bekommt Dokument zum lesen und gibt schriftliche Rückmeldung
  51. 51. Zusammenfassung Reviews Grad der geringster höchsten mittel geringFormalisierung Autor Autor Gutachter einzelne Anwesend Gutachter Prüfer Moderator Gutachter Moderator Code CodeAnwendbarkeit Dokumente Dokumente Dokumente Dokumente LernenVorbereitung kaum Formale Prüfung Formale Prüfung kaum Walkthrough Inspektion Technisches Informelles Review Review
  52. 52. Statische TestverfahrenNamens Konventionen
  53. 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. 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. 55. Namens Konventionen• Konstantennamen • komplett in Großbuchstaben• Beispiele • LEFT, PI, BLOD
  56. 56. Integrationsstrategien Big-bang Test A Test B Test G Test Test C A- G Test F Test D Test E
  57. 57. Integrationsstrategien Bottom-up Test A- G Test Test B, E, F D, G Test C Test E Test F Test G
  58. 58. Integrationsstrategien Top-down Test A Test A, B, C, D Test A- G
  59. 59. Integrationsstrategien Backbone Integration
  60. 60. Integrationsstrategien Continuous Integration betrachten wir noch in einer der folgenden Vorlesung
  61. 61. Integrationstests
  62. 62. Test Charakterisierung•Was wird getestet ? (Testobjekt)•Wer testet? (Tester)•Welche Qualitätseigenschaft (ISO9126) wird geprüft?•Mit welchen Werkzeugen wird getestet?
  63. 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
  64. 64. Systemtests und Akzeptanztests
  65. 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 ...
  66. 66. funktionale Systemtest /Akzeptanztests mit FIT
  67. 67. Überblick FitFramework for Integrated Tests FIT wurde entwickelt von Ward Cunningham WIKI-Erfinder...
  68. 68. Motivation von Fit Tests• Automatisierung von Akzeptanztests mittels Tabellen.• Framework für Datengetriebene Tests – Data-Driven-Test (xUnit Test Patterns - Gerard Meszaros)
  69. 69. Testen mit Fit Tabellen Fit Tests für einen Beispiel Zinsrechner
  70. 70. Testen mit Fit Tabellen Fit Tests als Column Test Tabelle Betrag 10
  71. 71. Testen mit Fit Tabellen Fit Tests als Column Test Tabelle Betrag Zinssatz 10 2,5
  72. 72. Testen mit Fit Tabellen Fit Tests als Column Test Tabelle Betrag Zinssatz Laufzeit 10 2,5 2
  73. 73. Testen mit Fit Tabellen Fit Tests als Column Test Tabelle Betrag Zinssatz Laufzeit Summe 10 2,5 2 10,51
  74. 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. 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. 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. 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. 78. Testen mit Fit Tabellen Fit Test als Action Tabelle Anwendung Starten Eingaben Aktion - Zinsen Berechnen Prüfung
  79. 79. Fit Design drei Klassen Framework
  80. 80. Fit Tabellen und Applikationverknüpfen
  81. 81. Fit Tabellen und Applikationverknüpfen onlinerechner.ZinsenFixture Betrag Zinssatz Laufzeit Summe() 10 2,5 2 10,51 10 10 3 25,94 20 10 10 100000 ... ... ... ...
  82. 82. Fit Tabellen und Applikationverknüpfen Anbindung an SUT SUT
  83. 83. Fit Tabellen und Applikationverknü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. 84. Fit Tabellen und Applikationverknü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. 85. Fit Tabellen und Applikationverknüpfen
  86. 86. Fit Tabellen und Applikationverknü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. 87. OberflächentestsEinführung in Selenium Selenium Core Selenium Selenium RC IDE
  88. 88. Selenium Coream 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. 89. Selenium IDECapture & Replay Tests mit Selenium Action Tabelle
  90. 90. Selenium Remote ControlAnbindung Selenium in Java Code als Test Treiber Selenium Server Browser Firefox, IE Selenium Core JAVA, PHP... SUT HTTP Proxy Webapplikation

×