Refactoring Unit-Tests
|
|
|
- Anton Sternberg
- vor 10 Jahren
- Abrufe
Transkript
1 def = '' [email protected] assert_equal ["is invalid", "can't = 'dhjxfgjdxfj' [email protected] assert_equal = 'dhjx@fgjdxfj' [email protected] assert_equal = '[email protected]' [email protected] assert_equal = = '[email protected]' Refactoring Unit-Tests Dipl.-Inf. (FH) Marco Emrich Nov 2013 #XDDE13
2 Realer Code webmasters.de 2005
3 def = = '' [email protected] assert_equal ["is too short (minimum is 5 characters)", "has invalid characters", "can't = = 'testtest' [email protected] assert_equal "doesn't = = 'testtest' [email protected] assert_equal ["is too short (minimum is 5 characters)", "has invalid characters", "doesn't match confirmation", "can't = = '' [email protected] assert_equal "doesn't = = 'test' [email protected] assert_equal "is too short (minimum is = = 'testet'
4 def = = '' [email protected] assert_equal ["is too short (minimum is 5 characters)", "has invalid characters", "can't = = 'testtest' [email protected] assert_equal "doesn't = = 'testtest' [email protected] assert_equal ["is too short (minimum is 5 characters)", "has invalid characters", "doesn't match confirmation", "can't be = = '' [email protected] assert_equal "doesn't = = 'test' [email protected] assert_equal "is too short (minimum is = = 'testet'
5 Es gibt noch Hoffnung
6 Test Refactoring
7 Beispiel
8 Seminar-Shop
9 Seminar-Shop
10
11 Specs Seminare haben Name und Nettopreis Ruby Java
12 Specs Seminare haben Name und Nettopreis Seminare berechnen Ihren Bruttopreis - außer, sie sind steuerbefreit Ruby Java
13 Marketing-Abteilung
14 3-Buchstaben Rabatt
15 Specs Seminare haben Name und Nettopreis Seminare berechnen Ihren Bruttopreis - außer, sie sind steuerbefreit 3-Buchstaben-Seminare* bekommen 5% Rabatt Ruby Java
16 class Seminar TAX_RATE = 1.19 THREE_LETTER_DISCOUNT_RATE = 5 attr_writer :net_price, :tax_free, :name def discount_rate discount_granted?? THREE_LETTER_DISCOUNT_RATE : 0 def initialize(name, @tax_free = name, net_price, tax_free def gross_price net_price * tax_rate def - discount def 1 : TAX_RATE / 100 def * discount_rate / 100 def < 3
17 class Seminar TAX_RATE = 1.19 THREE_LETTER_DISCOUNT_RATE = 5 attr_writer :net_price, :tax_free, :name def discount_rate discount_granted?? THREE_LETTER_DISCOUNT_RATE : 0 def initialize(name, @tax_free = name, net_price, tax_free def gross_price net_price * tax_rate def - discount def 1 : TAX_RATE / 100 def * discount_rate / 100 def < 3
18 class SeminarTest < Test::Unit::TestCase def test_seminar_should_calculate_correct_gross_prices seminar = Seminar.new('OOP', 500, false) assert_equal , seminar.gross_price seminar.net_price = 300 assert_equal , seminar.gross_price seminar.tax_free = true assert_equal 285, seminar.gross_price seminar.name = 'Objekt-Orientierte Programmierung' assert_equal 300, seminar.gross_price
19 class SeminarTest < Test::Unit::TestCase def test_seminar_should_calculate_correct_gross_prices seminar = Seminar.new('OOP', 500, false) assert_equal , seminar.gross_price seminar.net_price = 300 assert_equal , seminar.gross_price seminar.tax_free = true assert_equal 285, seminar.gross_price Failure: <565.25> expected but was <5.95>. seminar.name = 'Objekt-Orientierte Programmierung' assert_equal 300, seminar.gross_price
20 3 Minuten
21 Fehler gefunden?
22 2 Fehler gefunden?
23 3 Fehler gefunden?
24 Alternative Test-Suite: 9 Testfälle
25 def test_seminar_should_have_the_german_mwst_tax_rate_if_it_is_not_tax_free seminar = create_seminar(tax_free: false) assert_equal Seminar::TAX_RATE, seminar.tax_rate Failure: <1.19> expected but was <0.0119>. def test_discount_granted_should_return_true_if_name_consists_of_3_letters seminar = create_seminar(name: 'OOP') # 3 Buchstaben assert seminar.discount_granted? Failure: <false> is not true.
26 3 Minuten
27 Fehler gefunden?
28 2 Fehler gefunden?
29 3 Fehler gefunden?
30 class Seminar TAX_RATE = 1.19 THREE_LETTER_DISCOUNT_RATE = 5 attr_writer :net_price, :tax_free, :name def discount_rate discount_granted?? THREE_LETTER_DISCOUNT_RATE : 0 def initialize(name, @tax_free = name, net_price, tax_free def gross_price net_price * tax_rate def - discount def 1 : TAX_RATE / 100 def * discount_rate / 100 def < 3
31 class Seminar TAX_RATE = 1.19 THREE_LETTER_DISCOUNT_RATE = 5 attr_writer :net_price, :tax_free, :name def discount_rate discount_granted?? THREE_LETTER_DISCOUNT_RATE : 0 def initialize(name, @tax_free = name, net_price, tax_free def gross_price net_price * tax_rate def - discount def 1 : TAX_RATE def * discount_rate / 100 def <= 3
32 Vergleich der Testsuites
33 Qualitätskriterien für Testfälle
34 Qualitätskriterien guter Testfälle hohe Lesbarkeit, leicht zu verstehen Tests sind schwierig zu testen als Dokumentation der Anforderungen verwbar => BDD: Specs
35 Qualitätskriterien guter Testfälle hohe Lesbarkeit, leicht zu verstehen hohe Ausführungsgeschwindigkeit Häufige Ausführung
36 Qualitätskriterien guter Testfälle hohe Lesbarkeit, leicht zu verstehen hohe Ausführungsgeschwindigkeit geringer Wartungsaufwand möglichst Redundanzfrei: DRY geringer Test-Overlap geringe Kopplung an den Produktivcode
37 Qualitätskriterien guter Testfälle hohe Lesbarkeit, leicht zu verstehen hohe Ausführungsgeschwindigkeit geringer Wartungsaufwand gute Defekt-Lokalisierung Rainsberger: Jede Testmethode prüft genau eine interessantes Verhaltensweise
38 Qualitätskriterien guter Testfälle Lesbar Schnell Wartbar gute Defekt-Lokalisierung
39 Qualitätskriterien guter Testfälle manchmal Widersprüchliche Anforderungen
40 Qualitätskriterien guter Testfälle Optimaler Kompromiss?
41 Kent Beck TDD
42 BDD Meet BDD (Dan North oder King Image) Dan North
43 TDD/BDD führen zu guten Tests!
44 TDD/BDD führen zu guten Tests! (nicht unbedingt automatisch)
45 Verbesserungen möglich!
46 Legacy Test Suites
47 Testcode muss gewartet werden
48 Test Refactoring
49 Beispiel
50 class SeminarTest < Test::Unit::TestCase def test_seminar_should_calculate_correct_gross_prices seminar = Seminar.new('OOP', 500, false) assert_equal , seminar.gross_price seminar.net_price = 300 assert_equal , seminar.gross_price seminar.tax_free = true assert_equal 285, seminar.gross_price seminar.name = 'Objekt-Orientierte Programmierung' assert_equal 300, seminar.gross_price
51 class SeminarTest < Test::Unit::TestCase def test_seminar_should_calculate_correct_gross_prices seminar = Seminar.new('OOP', 500, false) assert_equal , seminar.gross_price seminar.net_price = 300 assert_equal , seminar.gross_price seminar.tax_free = true assert_equal 285, seminar.gross_price seminar.name = 'Objekt-Orientierte Programmierung' assert_equal 300, seminar.gross_price Remove Redudant Tests (gleiche Äquivalenzklasse)
52 class SeminarTest < Test::Unit::TestCase def test_seminar_should_calculate_correct_gross_prices seminar = Seminar.new('OOP', 500, false) assert_equal , seminar.gross_price seminar.net_price = 300 assert_equal , seminar.gross_price seminar.tax_free = true assert_equal 475, seminar.gross_price seminar.name = 'Objekt-Orientierte Programmierung' assert_equal 500, seminar.gross_price Remove Redudant Tests
53 class SeminarTest < Test::Unit::TestCase def test_seminar_should_calculate_correct_gross_prices seminar = Seminar.new('OOP', 500, false) assert_equal , seminar.gross_price seminar.tax_free = true assert_equal 475, seminar.gross_price seminar.name = 'Objekt-Orientierte Programmierung' assert_equal 500, seminar.gross_price
54 class SeminarTest < Test::Unit::TestCase def test_seminar_should_calculate_correct_gross_prices seminar = Seminar.new('Objekt-Orientierte Programmierung', 500, true) assert_equal 500, seminar.gross_price seminar.name = 'OOP' assert_equal 475, seminar.gross_price seminar.tax_free = false assert_equal , seminar.gross_price Use neutral fixture (Build up!)
55 class SeminarTest < Test::Unit::TestCase def test_a_tax_free_seminar_should_return_a_gross_price_without_tax seminar = Seminar.new('Objekt-Orientierte Programmierung', 500, true) assert_equal 500, seminar.gross_price def test_a_not_tax_free_seminar_should_return_gross_price_with_correct_tax seminar = Seminar.new('Objekt-Orientierte Programmierung', 500, false) assert_equal 595, seminar.gross_price def test_a_3letter_seminar_should_return_a_gross_price_with_discount seminar = Seminar.new('OOP', 500, true) assert_equal 475, seminar.gross_price Split test methods Fresh fixture Arrange Act Assert: AAA-Pattern
56 class SeminarTest < Test::Unit::TestCase def test_a_tax_free_seminar_should_return_a_gross_price_without_tax seminar = Seminar.new('Objekt-Orientierte Programmierung', 500, true) assert_equal 500, seminar.gross_price def test_a_not_tax_free_seminar_should_return_gross_price_with_correct_tax seminar = Seminar.new('Objekt-Orientierte Programmierung', 500, false) assert_equal 595, seminar.gross_price def test_a_3letter_seminar_should_return_a_gross_price_with_discount seminar = Seminar.new('OOP', 500, true) assert_equal 475, seminar.gross_price Use test data factories
57 Test data factories Ruby-Frameworks Factory-Girl Machinist Java-Frameworks Patterns Usurper PojoBuilder Object Mothers Test Data Builders Example Factories
58 class SeminarTest < Test::Unit::TestCase def create_seminar(args = {}) new_args = { :name => 'Object Oriented Programming', :net_price => 500, :tax_free => true }.merge(args) Defaults (neutral Fixture) Seminar.new(new_args[:name], new_args[:net_price], new_args[:tax_free]) Use factories
59 class SeminarTest < Test::Unit::TestCase def test_a_tax_free_seminar_should_return_a_gross_price_without_tax seminar = Seminar.new('Objekt-Orientierte Programmierung', 500, true) seminar = create_seminar(tax_free: true) assert_equal 500, seminar.gross_price def test_a_not_tax_free_seminar_should_return_gross_price_with_correct_tax seminar = Seminar.new('Objekt-Orientierte Programmierung', 500, false) seminar = create_seminar(tax_free: false) assert_equal 595, seminar.gross_price def test_a_3letter_seminar_should_return_a_gross_price_with_discount seminar = Seminar.new('OOP', 500, true) seminar = create_seminar(name: 'OOP') assert_equal 475, seminar.gross_price Use factories
60 class SeminarTest < Test::Unit::TestCase def test_a_tax_free_seminar_should_return_a_gross_price_without_tax seminar = create_seminar(tax_free: true) assert_equal 500, seminar.gross_price def test_a_not_tax_free_seminar_should_return_gross_price_with_correct_tax seminar = create_seminar(tax_free: false) assert_equal 595, seminar.gross_price def test_a_3letter_seminar_should_return_a_gross_price_with_discount seminar = create_seminar(name: 'OOP') assert_equal 475, seminar.gross_price Use factories
61 class SeminarTest < Test::Unit::TestCase def test_a_tax_free_seminar_should_return_a_gross_price_without_tax seminar = create_seminar(tax_free: true) assert_equal seminar.net_price, seminar.gross_price 500 def test_a_not_tax_free_seminar_should_return_gross_price_with_correct_tax seminar = create_seminar(tax_free: false) assert_equal seminar.net_price * Seminar::TAX_RATE, seminar.gross_price 500 def test_a_3letter_seminar_should_return_a_gross_price_with_discount seminar = create_seminar(name: 'OOP', net_price: 500) assert_equal 500 * 0.95, seminar.gross_price Use factories
62 class SeminarTest < Test::Unit::TestCase def test_a_tax_free_seminar_should_return_a_gross_price_without_tax seminar = create_seminar(tax_free: true) assert_equal seminar.net_price, seminar.gross_price def test_a_not_tax_free_seminar_should_return_gross_price_with_correct_tax seminar = create_seminar(tax_free: false) assert_equal seminar.net_price * Seminar::TAX_RATE, seminar.gross_price def test_a_3letter_seminar_should_return_a_gross_price_with_discount seminar = create_seminar(name: 'OOP', net_price: 500) assert_equal 500 * 0.95, seminar.gross_price add missing test
63 class SeminarTest < Test::Unit::TestCase def test_a_tax_free_seminar_should_return_a_gross_price_without_tax seminar = create_seminar(tax_free: true) assert_equal seminar.net_price, seminar.gross_price def test_a_not_tax_free_seminar_should_return_gross_price_with_correct_tax seminar = create_seminar(tax_free: false) assert_equal seminar.net_price * Seminar::TAX_RATE, seminar.gross_price def test_a_3letter_seminar_should_return_a_gross_price_with_discount seminar = create_seminar(name: 'OOP', net_price: 500) assert_equal 500 * 0.95, seminar.gross_price def test_a_more_letters_seminar_should_return_a_net_price_without_discount seminar = create_seminar(name: 'Object O. Programming', net_price: 500) assert_equal 500, seminar.gross_price add missing test
64 Discount def test_a_3letter_seminar_should_return_a_gross_price_with_discount seminar = create_seminar(name: 'OOP') assert_equal 500 * 0.95, seminar.gross_price def test_a_more_letters_seminar_should_return_a_net_price_without_discount seminar = create_seminar(name: 'Object Oriented Programming') assert_equal 500, seminar.gross_price class Seminar def gross_price net_price * tax_rate def - discount Isolate def * discount_rate / 100
65 Discount def test_a_3letter_seminar_should_return_a_gross_price_with_discount seminar = create_seminar(name: 'OOP') assert_equal 500 * 0.95, seminar.net_price.gross_price def test_a_more_letters_seminar_should_return_a_net_price_without_discount seminar = create_seminar(name: 'Object Oriented Programming') assert_equal 500, seminar.net_price.gross_price class Seminar def gross_price net_price * tax_rate def - discount Isolate def * discount_rate / 100
66 Tax def test_a_tax_free_seminar_should_return_a_gross_price_without_tax seminar = create_seminar(tax_free: true) assert_equal seminar.net_price, seminar.gross_price def test_a_not_tax_free_seminar_should_return_gross_price_with_correct_tax seminar = create_seminar(tax_free: false) assert_equal seminar.net_price * Seminar::TAX_RATE, seminar.gross_price class Seminar def gross_price net_price * tax_rate Isolate def 1 : TAX_RATE / 100
67 Tax def test_a_tax_free_seminar_should_have_a_tax_rate_of_1 seminar = create_seminar(tax_free: true) assert_equal seminar.net_price, seminar.gross_price assert_equal 1, seminar.tax_rate def test_a_not_tax_free_seminar_should_have_the_correct_tax_rate seminar = create_seminar(tax_free: false) assert_equal seminar.net_price * Seminar::TAX_RATE, seminar.gross_price assert_equal Seminar::TAX_RATE, seminar.tax_rate class Seminar def gross_price net_price * tax_rate Isolate def 1 : TAX_RATE / 100
68 Tax def test_a_tax_free_seminar_should_have_a_tax_rate_of_1 seminar = create_seminar(tax_free: true) assert_equal 1, seminar.tax_rate def test_a_not_tax_free_seminar_should_have_the_correct_tax_rate seminar = create_seminar(tax_free: false) assert_equal Seminar::TAX_RATE, seminar.tax_rate class Seminar def gross_price net_price * tax_rate Isolate def 1 : TAX_RATE / 100
69 Tax def test_a_tax_free_seminar_should_have_a_tax_rate_of_1 seminar = create_seminar(tax_free: true) assert_equal 1, seminar.tax_rate def test_a_not_tax_free_seminar_should_have_the_correct_tax_rate seminar = create_seminar(tax_free: false) assert_equal Seminar::TAX_RATE, seminar.tax_rate class Seminar def gross_price net_price * tax_rate Lost Coverage def 1 : TAX_RATE / 100
70 Tax def test_a_tax_free_seminar_should_have_a_tax_rate_of_1 seminar = create_seminar(tax_free: true) assert_equal 1, seminar.tax_rate def test_a_not_tax_free_seminar_should_have_the_correct_tax_rate seminar = create_seminar(tax_free: false) assert_equal Seminar::TAX_RATE, seminar.tax_rate def test_seminar_should_use_tax_rate_to_calculate_gross_price class Seminar def gross_price net_price * tax_rate Lost Coverage def 1 : TAX_RATE / 100 def - discount
71 Tax def test_a_tax_free_seminar_should_have_a_tax_rate_of_1 seminar = create_seminar(tax_free: true) assert_equal 1, seminar.tax_rate def test_a_not_tax_free_seminar_should_have_the_correct_tax_rate seminar = create_seminar(tax_free: false) assert_equal Seminar::TAX_RATE, seminar.tax_rate def test_seminar_should_use_tax_rate_to_calculate_gross_price seminar = create_seminar(tax_free: false) assert_equal?, seminar.gross_price Isolate Use Stubs class Seminar def gross_price net_price * tax_rate def 1 : TAX_RATE / 100 def - discount
72 Tax def test_a_tax_free_seminar_should_have_a_tax_rate_of_1 seminar = create_seminar(tax_free: true) assert_equal 1, seminar.tax_rate def test_a_not_tax_free_seminar_should_have_the_correct_tax_rate seminar = create_seminar(tax_free: false) assert_equal Seminar::TAX_RATE, seminar.tax_rate def test_seminar_should_use_tax_rate_to_calculate_gross_price seminar = create_seminar(tax_free: false) seminar.stubs(net_price: 100) seminar.stubs(tax_rate: 1.5) assert_equal 150, seminar.gross_price class Seminar def gross_price net_price * tax_rate Isolate Use Stubs def 1 : TAX_RATE / 100 def - discount
73 Mocks & Stubs Ruby Rspec-Mocks Mocha FlexMock Java EasyMock Mockito Jmockit JavaScript SinonJS Jasmine Spies
74 BDD-Frameworks Ruby RSpec Shoulda Java JDave Jnario ScalaTest JavaScript Jasmine Mocha more readable!
75
76 Github: XING:
77 Hands-On 1)Paare bilden 2)Sprache wählen: Ruby, Java oder JavaScript 3)Code auschecken git clone 4)Loslegen :)
Effektiver Einsatz von Code-Reviews
Effektiver Einsatz von Code-Reviews Version: 1.4 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de [email protected] 18. Java Forum Stuttgart 2015 Ihr Sprecher Thorsten Maier Trainer,
Unit Testing, SUnit & You
HUMBOLDT-UNIVERSITÄT ZU BERLIN MENSCH-TECHNIK-INTERAKTION ARBEITSGRUPPE SOFTWARETECHNIK (INSTITUT FÜR INFORMATIK) ARBEITSGRUPPE INGENEURPSYCHOLOGIE (INSTITUT FÜR PSYCHOLOGIE) Unit Testing, SUnit & You
Software - Testung ETIS SS05
Software - Testung ETIS SS05 Gliederung Motivation Was ist gute Software? Vorurteile gegenüber Testen Testen (Guidelines + Prinzipien) Testarten Unit Tests Automatisierte Tests Anforderungen an Testframeworks
Fortgeschrittenes Programmieren mit Java. Test Driven Development
Fortgeschrittenes Programmieren mit Java Test Driven Development Test getriebene Programmierung Benedikt Boeck Hochschule für Angewandte Wissenschaften Hamburg 6. November 2009 B. Boeck (HAW Hamburg) Test
Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java
Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Klassenentwurf Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? 1.0 Zentrale Konzepte
Testen und Testautomatisierung in agilen Projekten
Testen und Testautomatisierung in agilen Projekten DR. WILHELM HUMMER [email protected] COPYRIGHT 2011, TECHTALK - WWW.TECHTALK.AT Wie es zu diesem Vortrag kam COPYRIGHT 2011, TECHTALK - WWW.TECHTALK.AT Testen
Mocha. Ein Ruby Mocking und Stubbing Framework. von Thilo Utke. Werd ich drüber reden Erst was zu mit.
Mocha Ein Ruby Mocking und Stubbing Framework von Thilo Utke Werd ich drüber reden Erst was zu mit. - 4 Jahre Software Entwicklung - 3 Jahre.Net - 1 Jahr Ruby/Rails - 1 Jahr Selbständig -
Testen im Software- Entwicklungsprozess
Technologie-Event 2006 Testen im Software- Entwicklungsprozess W.Lukas, INGTES AG Was nicht getestet wurde, funktioniert nicht. -- R.Güdel (ca. 1998) Seite 2 Was sollen wir tun? Anomalien & Defekte von
Effizientes und effektives Testen von Embedded SW mit Google Test. Michael Bernhard
Effizientes und effektives Testen von Embedded SW mit Google Test Michael Bernhard 1 Agenda Warum testen? Wie testen? Google Test und Google Mock Toolintegration Schlussfolgerung 2 Die Norm fordert es
Das Test-Framework JUnit ETIS SS04
Das Test-Framework JUnit ETIS SS04 Gliederung Motivation TestFirst Grundlagen Assert TestCase Lebenszyklus TestCase UML-Diagramm TestCase TestSuite Zusammenfassung 2 Motivation (I) Kostspielige Folgen
Unit Tests mit Junit 4. Dario Borchers
Unit Tests mit Junit 4 Dario Borchers Agenda Warum testgetriebene Entwicklung von Software? - Motivation Was ist testgetriebene Entwicklung? - Prozess der testgetriebenen Entwicklung - Arten von Tests
Test-driven development JUnit-Test. Lars Varain
Test-driven development JUnit-Test Lars Varain Inhalt Test-driven Development (TDD) Junit4 Beispiel Inhalt Test-driven Development (TTD) Warum TDD? Zyklus Ausnahmebehandlung Junit4 Beispiel Inhalt Test-driven
JUnit - Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1
JUnit - Test Driven Development Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1 Gliederung 1.Einleitung 1.1 Geschichte 1.2 Was sind Unit-Tests? 1.3 Failures/Errors 1.4 Ziele und Nutzen
Iterativ. Inkrementell
Iterativ Inkrementell Build Release Test Qualität Architektur & Documentation Distributed Version Control Continuous Integration TDD Design Agile Architektur Dependency Feature Branches Mocks
Test-Driven Design: Ein einfaches Beispiel
Test-Driven Design: Ein einfaches Beispiel Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS 06 2 Ziele Veranschaulichung der Technik des Test-Driven Design am Beispiel eines Programms
JUnit. HierarchicalContextRunner. Mehr Struktur. TDD. Clean Code. Verantwortung. Skills. Namics. Stefan Bechtold. Principal Software Engineer.
JUnit. HierarchicalContextRunner. Mehr Struktur. TDD. Clean Code. Verantwortung. Skills. Stefan Bechtold. Principal Software Engineer. 16. Oktober 2014 Aus dem Alltag eines Entwicklers Ein typischer (Unit-)
SEP 114. Design by Contract
Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit
Programmierprojekt. Anne0e Bieniusa Sommersemester 2014
Programmierprojekt Anne0e Bieniusa Sommersemester 2014 Phasen der So;ware- Entwicklung Planungsphase DefiniConsphase Entwurfsphase ImplemenCerungsphase Testphase Wasserfall- Modell Einführungs- und Wartungsphase
Software-Engineering Software-Management
Software-Engineering Software-Management 12.3 Unit-Tests mit JUnit - Wissen, was der Sourcecode macht! Lösung Prof. Dr. Rolf Dornberger Software-Engineering: 12.3 Unit-Tests mit JUnit 30.04.2006 1 12.3
The Art of Unit Testing
The Art of Unit Testing 01.02.2011 Marco Heimeshoff [email protected] Übersicht Grundlagen des Unit Testing Test Driven Development Stubs & Mocks Behavior Driven Design The Art of Unit Testing Definition
Unit Testing mit JUnit. Dr. Andreas Schroeder
Unit Testing mit JUnit Dr. Andreas Schroeder Überblick Was dieses Video behandelt Warum Testen? Was sind Unit Tests? Der Teufelskreis des Nicht-Testens JUnit Unit Test Vorteile Test-Inspiration Wann aufhören?
Software Engineering in der Praxis
Software Engineering in der Praxis Praktische Übungen Dirk Wischermann Marc Spisländer Lehrstuhl für Software Engineering Friedrich-Alexander-Universität Erlangen-Nürnberg 18. Dezember 2006 Inhalt Nachlese
Einführung in die Informatik
Einführung in die Informatik Einleitung Organisatorisches, Motivation, Herangehensweise Wolfram Burgard 1.1 Vorlesung Zeit und Ort: Dienstags 10:00-12:00 Uhr Donnerstags 10:00-12:00 Uhr Gebäude 101 HS
Markus Wichmann. Testen von Java Code mit. JUnit
Markus Wichmann Testen von Java Code mit JUnit Demotivation... Am Anfang war der Zeitdruck... Hilfe, ich habe doch keine Zeit zum Testen! Ich schreibe einfach keine Tests, dadurch werde ich schneller fertig
Agiles Testen. Gedankensammlung. 17. November 2013 - Patrick Koglin
Agiles Testen Gedankensammlung 17. November 2013 - Patrick Koglin Inhalt Reflektion: Agilität notwendig? Wo? Eigenschaften agiler Entwicklung Quality is everyone s responsibility Qualität möglich machen
Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2
Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2 von Christoph Knabe http://public.beuth-hochschule.de/~knabe/ Ch. Knabe: Operationalisierbare Qualitätskriterien
JGiven: Ein entwicklerfreundliches BDD-Framework für Java
JGiven: Ein entwicklerfreundliches BDD-Framework für Java Dr. Jan Schäfer 27. November 2015 Warum BDD? Typischer JUnit-Test @ T e s t p u b l i c v o i d s h o u l d I n s e r t P e t I n t o D a t a b
Testen mit JUnit. Motivation
Test First Design for Test in Eclipse (eigentlich: ) zu einer Klasse Beispiel zur Demonstration Ergänzungen Test First "Immer dann, wenn Du in Versuchung kommst, etwas wie eine print- Anweisung oder einen
TDD. mit JUnit & Mockito. Tobias Trelle, codecentric
TDD mit JUnit & Mockito Tobias Trelle, codecentric AG @tobiastrelle 1 Tobias Trelle Software Architekt @ codecentric AG Twitter: @tobiastrelle Slideshare: http://de.slideshare.net/tobiastrelle/ GitHub:
Programmieren was ist das genau?
Programmieren was ist das genau? Programmieren heisst Computerprogramme herstellen (von griechisch programma für Vorschrift). Ein Computerprogramm ist Teil der Software eines Computers. Als Software bezeichnet
Algorithmen und Programmieren II Einführung in Python
Algorithmen und Programmieren II Einführung in Python SS 2012 Prof. Dr. Margarita Esponda 1 Was ist Python? eine Skript-Sprache Anfang der 90er Jahre entwickelt. Erfinder: Guido van Rossum an der Universität
Unit Tests. Programmiermethodik. Eva Zangerle Universität Innsbruck
Unit Tests Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle
Client-Server-Beziehungen
Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server
SEMINAR Modifikation für die Nutzung des Community Builders
20.04.2010 SEMINAR Modifikation für die Nutzung des Community Builders Step by Step Anleitung ecktion SEMINAR Modifikation für die Nutzung des Community Builders Step by Step Anleitung Bevor Sie loslegen
Programmieren I. Übersicht. Vorlesung 12. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011
Programmieren I Martin Schultheiß Hochschule Darmstadt Wintersemester 2010/2011 1 2 Übersicht Testen ist eine der wichtigsten, aber auch eine der Zeitaufwändigsten Arbeitsschritte der Softwareentwicklung.
Qualität von Software - Prof. Schlingloff, Lackner - SS2013 DYNAMISCHER TEST. Whitebox Testen mit JUnit
1 DYNAMISCHER TEST Whitebox Testen mit JUnit Übersicht 2 1. Grundlagen des Unittests 1. Units 2. Unit Testing 2. Testverfahren 1. Blackbox 2. Whitebox 3. Unit Testing mit Eclipse 4. Besprechung der Übungsaufgabe
arboro Netto Report für Shopware 4.2.x Version 1.0.1
arboro Netto Report für Shopware 4.2.x Version 1.0.1 Inhaltsverzeichnis 1 Installation... 2 1.1 Über den Community Store... 2 1.2 Upload des Plug-Ins von unserer Homepage... 2 2 Konfiguration... 4 2.1
Einfaches Testen von Webapplikationen mit
Einfaches Testen von Webapplikationen mit SimpleTest Dipl.Ing.(FH) K. H. Marbaise Agenda Unit Tests/Web-Tests Durchführung von Web-Tests HTML Elemente Ergebnisdarstellung Gruppierung Grenzen von SimpleTest
Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (oop) OBJEKTE - KLASSEN
Grundzüge der Programmierung Konzepte der objektorientierten Programmierung (oop) OBJEKTE - KLASSEN Inhalt dieser Einheit JAVA ist objektorientiert! Grundbegriffe der objektorientierten Programmierung:
Security Patterns. Benny Clauss. Sicherheit in der Softwareentwicklung WS 07/08
Security Patterns Benny Clauss Sicherheit in der Softwareentwicklung WS 07/08 Gliederung Pattern Was ist das? Warum Security Pattern? Security Pattern Aufbau Security Pattern Alternative Beispiel Patternsysteme
Testen und Debuggen von Webanwendungen
Testen und Debuggen von Webanwendungen Leif Singer [email protected] Seminar Aktuelle Software-Engineering-Praktiken für das World Wide Web 16.06.2010 Übersicht Grundlagen Usability-Tests
Verzahnung von Detailspezifikationen mit automatisierbaren Testfällen
Verzahnung von Detailspezifikationen mit automatisierbaren Testfällen DR. WILHELM FAUMA München, 14.03.2012 COPYRIGHT 2012, TECHTALK - WWW.TECHTALK.AT TechTalk auf einen Blick Agile Software Entwicklung
Programmiertechnik II
Modultests Ziele Überprüfung der Korrektheit eines Moduls Korrektheit: Übereinstimmung mit (informaler) Spezifikation Modul: kleine testbare Einheit (Funktion, Klasse) Engl.: unit test White box testing
Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept
Testkonzept 1.Einführung Um die Zuverläsigkeit und die Qualität der Software und des gesamten Systems zu verbessern, sind Tests durchzuführen. Die Testreihe läst sich in drei Stufen einteilen, nülich Komponententest,
Objektorientierte Programmierung OOP
Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Ronja Düffel WS2012/13 08. Oktober 2013 Objektorientierte Programmierung OOP Objektorientierte Programmierung Objektorientierte
Testen mit JUnit. Martin Wirsing. Ziele. in Zusammenarbeit mit Michael Barth, Philipp Meier und Gefei Zhang
Testen mit JUnit Martin Wirsing in Zusammenarbeit mit Michael Barth, Philipp Meier und Gefei Zhang 12/04 2 Ziele Lernen Unit Tests zu schreiben Lernen mit Unit-Testen mit JUnit durchzuführen 3 Testen Da
Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Modulare Programmierung
Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005 Modulare Programmierung Test Driven Development Refactoring Modular programmierung der
Spock und Geb: Übersichtlich und nachvollziehbar Testen für alle!
Spock und Geb: Übersichtlich und nachvollziehbar Testen für alle! Entwicklertag Karlsruhe, 20.05.2015 Ralf D. Müller, Freelancer Tobias Kraft, exensio GmbH Meine Software wird durch automatisierte Tests
Die Invaliden-Versicherung ändert sich
Die Invaliden-Versicherung ändert sich 1 Erklärung Die Invaliden-Versicherung ist für invalide Personen. Invalid bedeutet: Eine Person kann einige Sachen nicht machen. Wegen einer Krankheit. Wegen einem
Einführung in die Informatik
Einführung in die Informatik Einleitung Organisatorisches, Motivation, Herangehensweise Wolfram Burgard Cyrill Stachniss 0.1 Vorlesung Zeit und Ort: Mo 16.00 18.00 Uhr Gebäude 101, HS 00-026 Informationen
Schritt-für-Schritt-Anleitung So verschlüsseln Sie Ihr E-Mail-Konto in der E-Mail Software 6.0
Schritt-für-Schritt-Anleitung So verschlüsseln Sie Ihr E-Mail-Konto in der E-Mail Software 6.0 Hinweis: Bitte nehmen Sie sich kurz Zeit, um die Einstellungen in Ruhe an Ihrem PC durchzuführen. Drucken
U08 Entwurfsmuster (II)
U08 Entwurfsmuster (II) Inhalt der Übung Diskussion und Implementierung von Entwurfsmustern Übungsaufgaben Aufgabe 1 (Queue) Gegeben ist das folgende Analysemodell einer Warteschlange (Queue): Eine Warteschlange
Test Driven Development
Test Driven Development Definition & Motivation [~15min] Demo [~10min] Stubs & Mocks [~15min] Übliche Fehler [~5min] Folie 1 TDD [Kent Beck] Schreibe keine Zeile Code ohne einen fehlschlagenden (roten)
Innovation in der Raubtierdressur Neue Wege in der Risikominierung Wolfgang Platz, Founder & CPO
Innovation in der Raubtierdressur Neue Wege in der Risikominierung Wolfgang Platz, Founder & CPO Copyright 2014, Tricentis GmbH. All Rights Reserved. 1 Target Applications Reporting & Dashboard Optimize
OOSE_02E Testen mit BlueJ/JUnit 4
OOSE_02E Testen mit BlueJ/JUnit 4 Lehrstuhl Softwaretechnologie, Dr. Birgit Demuth Sommersemester 2018 Vorgehen beim Unit-Test allgemein 1. Testfälle ausdenken / Testfalltabellen erstellen 2. Testfälle
Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)
Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen
Einführung in Eclipse und Java
Universität Bayreuth Lehrstuhl für Angewandte Informatik IV Datenbanken und Informationssysteme Prof. Dr.-Ing. Jablonski Einführung in Eclipse und Java Dipl.Inf. Manuel Götz Lehrstuhl für Angewandte Informatik
Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch
Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen Alexander Schunk Henry Trobisch Inhalt 1. Vergleich der Unit-Tests... 2 2. Vergleich der Codeabdeckungs-Tests... 2 3. Vergleich
Testen von graphischen Benutzeroberflächen. 26. Juni 2013
Testen von graphischen Benutzeroberflächen 26. Juni 2013 Überblick Testarten Methoden-, Klassen-, Komponenten-, Systemtests Motivation für automatisches Testen von graphischen Benutzeroberflächen Entwicklungsprinzipien
Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X
Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X SwissMacMeeting #1 26. Juni 2004 Messeturm Basel http://mac.naepflin.com Was ist das Ziel dieses Kurses? Starthilfe Einblick in die Möglichkeiten,
Kurzanleitung JUnit. 1 Grundlagen. 1.1 Begriffsdefinitionen. 1.2 Empfehlungen
JUnit ist ein Testframework zum Testen von Java-Code. Es eignet sich besonders gut zum automatisierten Testen und ist ein wichtiges Hilfsmittel des Extreme Programmings, bei dem der Test-First-Ansatz angewendet
07. November, Zürich-Oerlikon
07. November, Zürich-Oerlikon Automatisierte Spezifikationstests in agilen Projekten mit SpecFlow Christian Hassa (@chrishassa) Gaspar Nagy (@gasparnagy) TechTalk Software AG Willkommen! Scrum 2007 2008
Reinigen der Druckköpfe
Wenn es zu Streifenbildung kommt oder Probleme mit der Druckqualität auftreten, prüfen Sie zunächst, ob die Druckköpfe richtig im Druckwagen positioniert sind. 1 3 Drücken Sie Menü>, bis Druckkopf aust.
Softwareentwicklungsprozess im Praktikum. 23. April 2015
Softwareentwicklungsprozess im Praktikum 23. April 2015 Agile Softwareentwicklung Eine agile Methodik stellt die beteiligten Menschen in den Mittelpunkt und versucht die Kommunikation und Zusammenarbeit
Objektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
Java Schulung. Objektorientierte Programmierung in Java Teil IV: Testen mit JUnit. Prof. Dr. Nikolaus Wulff
Java Schulung Objektorientierte Programmierung in Java Teil IV: Testen mit JUnit Prof. Dr. Nikolaus Wulff JUnit JUnit ist das Opensource Testframework. Es existieren Portierungen für fast alle objektorientierten
LIFEWAVE S WAVE-BONUS: ECHTE VERDOPPLUNG. ECHTE ERGEBNISSE.
LIFEWAVE S WAVE-BONUS: ECHTE VERDOPPLUNG. ECHTE ERGEBNISSE. Wave-Bonus Der neue LifeWave-Wave-Bonus ist eine revolutionäre Ergänzung zum LifeWave-Vergütungsplan, der besonders dafür entwickelt wurde, um
OOSE4 Testen mit BlueJ/JUnit 4
OOSE4 Testen mit BlueJ/JUnit 4 Lehrstuhl Softwaretechnologie, Dr. Birgit Demuth Sommersemester 2016 Vorgehen beim Unit-Test allgemein 1. Testfälle ausdenken / Testfalltabellen erstellen 2. Testfälle nach
Hilfe zur ekim. Inhalt:
Hilfe zur ekim 1 Hilfe zur ekim Inhalt: 1 Benutzerkonten und rechte... 2 1.1 Hauptkonto (Unternehmer bzw. Lehrer)... 2 1.2 Benutzer (Mitarbeiter bzw. Schüler)... 3 2 Präsentationsmodus... 4 3 Warenkorb...
Kapitel 1: Einführung. Was ist Informatik? Begriff und Grundprobleme der Informatik. Abschnitt 1.1 in Küchlin/Weber: Einführung in die Informatik
Was ist Informatik? Begriff und Grundprobleme der Informatik Abschnitt 1.1 in Küchlin/Weber: Einführung in die Informatik Was ist Informatik? Informatik = computer science? Nach R. Manthey, Vorlesung Informatik
Die Welt der SW-Qualität Ein Streifzug in 30 Minuten! Johannes Bergsmann Eigentümer
Die Welt der SW-Qualität Ein Streifzug in 30 Minuten! Johannes Bergsmann Eigentümer Inhalt Top Themen Requirements Testen Testautomatisierung Change-Management Risiko-Management Agile Methoden Traceability
Algorithmen mit Python
Algorithmen mit Python Vorbesprechung zum Proseminar im Sommersemester 2009 http://www.python.org 1 Sie lernen in DAP Java und C/C++: 80% Syntax, 20% Algorithmen-Design Idee Schon ein einfaches Hello World
Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...
PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:
Probeklausur. Lenz Belzner. January 26, 2015. Lenz Belzner Probeklausur January 26, 2015 1 / 16
Probeklausur Lenz Belzner January 26, 2015 Lenz Belzner Probeklausur January 26, 2015 1 / 16 Definieren Sie Software Engineering in Abgrenzung zu Individual Programming. Ingenieursdisziplin professionelle
Kommt Clean Code in Studium und Ausbildung zu kurz?
Kommt Clean Code in Studium und Ausbildung zu kurz? Björn Kimminich https://twitter.com/bkimminich https://linkedin.com/in/bkimminich http://gplus.to/bkimminich https://www.xing.com/profile/bjoern_kimminich
Unit-Test Theorie und Praxis. Stephan Seefeld, INGTES AG
Unit-Test Theorie und Praxis Stephan Seefeld, INGTES AG Inhalt Was sind Unit-Test? NUnit für.net Demo Seite 2 Quellen Für diesen Vortrag verwendete Quellen: dotnet User Group Berlin Brandenburg http://www.dotnet-berlinbrandenburg.de/
Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung
Grundlagen der Programmierung Prof. H. Mössenböck 14. Schrittweise Verfeinerung Entwurfsmethode für Algorithmen Wie kommt man von der Aufgabenstellung zum Programm? Beispiel geg.: Text aus Wörtern ges.:
JUnit. Software-Tests
JUnit Software-Tests Übersicht Einleitung JUnit Jia Li Grundlegendes Diana Howey Hendrik Kohrs Praktische Einbindung Benjamin Koch Zili Ye Einleitung in allgemeines Testen Automatische Tests Testen ist
Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version: 1.0 09.06.2009
Testen von Software Systemen Übung 02 SS 2009 Version: 1.0 09.06.2009 Komponententest Kunde: Dr. Reinhold Plösch Dr. Johannes Sametinger Kundenreferenz: 259.019 Team 19 Mitarbeiter: Christian Märzinger
Lösungen zum Test objektorientierter Software
Lösungen zum Test objektorientierter Software Pieter van den Hombergh Fontys Hogeschool voor Techniek en Logistiek Software Engineering 14. März 2013 HOM/FHTeL Lösungen zum Test objektorientierter Software
Whitebox-Tests: Allgemeines
-Tests: Allgemeines Andere Bezeichnungen Logic driven, Strukturelles Der Tester entwickelt Testfälle aus einer Betrachtung der Ablauflogik des Programms unter Berücksichtigung der Spezifikation Intuitiv
Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ
IBBB 2010 Workshop 6 Einführung in die objektorientierte Programmierung Dozenten: J. Penon, J. Frank, A. Schindler Teil: Java mit BlueJ Dozent: A. Schindler Einf. i. d. OOP - Java u. BlueJ / A. Schindler
Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6
Gudrun Fischer Sascha Kriewel [email protected] Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in
Klicken Sie auf Weiter und es erscheint folgender Dialog
Datenimport Hier wird der Import von Excel-Daten in das Programm Videka TS beschrieben. Der Import mit den Programmen Aring s AdressMogul und Aring s promptbill läuft genauso ab, wie hier beschrieben.
Schritt-für-Schritt-Anleitung So verschlüsseln Sie Ihr E-Mail-Konto in Apple Mail
Schritt-für-Schritt-Anleitung So verschlüsseln Sie Ihr E-Mail-Konto in Apple Mail Hinweis: Bitte nehmen Sie sich kurz Zeit, um die Einstellungen in Ruhe an Ihrem Computer durchzuführen. Drucken Sie dieses
Free your work. Free your work. Wir wollen Ihnen die Freiheit geben, sich auf Ihr Geschäft zu konzentrieren.
Free your work. Free your work. Wir wollen Ihnen die Freiheit geben, sich auf Ihr Geschäft zu konzentrieren. 1 Automatische Verifikation von Anforderungen Dr. Guido Dischinger [email protected]
Versionsverwaltung für die KU Betriebssysteme. Eine Einführung
Versionsverwaltung für die KU Betriebssysteme Eine Einführung 1 1 Versionsverwaltung? Wozu? Nachvollziehbarkeit Wer hat was wann geändert Wiederherstellbarkeit kaputteditiert Wartbarkeit Verschiedene Versionen
Individuelle Erweiterung des generierten Codes. 16. Januar 2013
Individuelle Erweiterung des generierten Codes 16. Januar 2013 Überblick Welche Möglichkeiten zur individuellen Erweiterung von generiertem Code gibt es? Innerhalb eines Moduls (Klasse) Auf Modulebene
Assertions (Zusicherungen)
April 10, 2005 Oberseminar Software-Entwicklung Inhalt 1. Einführung (Motivation, Tony Hoare, Programmverifikation) 2. Design by Contract (Idee, Eiffel) 3. Praxis: Programming by Contract for Python 4.
Entwicklung des Dentalmarktes in 2010 und Papier versus Plastik.
Sehr geehrter Teilnehmer, hier lesen Sie die Ergebnisse aus unserer Umfrage: Entwicklung des Dentalmarktes in 2010 und Papier versus Plastik. Für die zahlreiche Teilnahme an dieser Umfrage bedanken wir
Dokumentation für das Spiel Pong
Dokumentation für das Spiel Pong BwInf - Turnierserver Didaktik der nformatik BWINF KI Wettbewerbs-Plattform Stand: 02.09.2014 Grundlagen In diesem KI-Turnier programmiert ihr einen Schläger für das Retro-Spiel
