Refactoring C# Legacy Code
|
|
- Fabian Wagner
- vor 5 Jahren
- Abrufe
Transkript
1 Refactoring C# Legacy Code Stefan
2 Houston, we ve had a problem.
3 Wandelbarkeit
4 Funktionale Anforderungen Investitionsschutz = Wandelbarkeit Nicht-funktionale Anforderungen
5 Das Problem besteht aus drei Teilen: Lesbarkeit/Verständlichkeit ist nicht gegeben Automatisierte Tests fehlen Komplexe Refactorings sind notwendig
6 Das Dilemma: Um Tests zu ergänzen, => muss refactored werden. Um zu refactoren, => müssen Tests ergänzt werden.
7 KISS - Keep It Simple Stupid Einfach in Bezug auf Schreiben / Erstellen? Lesen / Modifizieren!
8 Ein Sicherheitsnetz spannen: Versionskontrolle Continuous Integration Code Reviews Automatisierte Tests
9 Begründung für Refactorings: NICHT: Clean Code Developer, Prinzipien, Werte, Craftsmen, Sondern Kundennutzen: Neues Feature Bugfix
10 Es gibt zwei Arten von Refactorings: einfache und komplexe.
11 Einfache Refactorings Vollständig werkzeuggestützt durchführbar Rename Extract Method Introduce Variable Introduce Parameter etc.
12 Komplexe Refactorings Nicht mehr ausschließlich werkzeuggestützt durchführbar
13 Einfache Refactorings Lesbarkeit herstellen. Erkenntnisse über den Code im Code sichern.
14 public double Endpreis(int anzahl, double netto) { } return (anzahl * netto) * 1.19; Introduce Variable public double Endpreis(int anzahl, double netto) { var nettopreis = anzahl * netto; return nettopreis * 1.19; } Introduce Variable public double Endpreis(int anzahl, double netto) { var nettopreis = anzahl * netto; var bruttopreis = nettopreis * 1.19; return bruttopreis; }
15 public double Endpreis(int anzahl, double netto) { var nettopreis = anzahl * netto; var bruttopreis = nettopreis * 1.19; return bruttopreis; } Nicht mehr nur toolgestützt! public double Endpreis(int anzahl, double netto) { const double mwst = 0.19; var nettopreis = anzahl * netto; var steuer = nettopreis * mwst; var bruttopreis = nettopreis + steuer; } return bruttopreis;
16 "a=1;b=2;c=3" => {{"a", "1"},{"b", "2"}, {"c", "3"}} public IDictionary<string, string> ToDictionary(string configuration) { return InsertIntoDictionary(SplitIntoKeyValuePairs( SplitIntoSettings(configuration))); }
17 public IDictionary<string, string> ToDictionary(string configuration) { return InsertIntoDictionary(SplitIntoKeyValuePairs( SplitIntoSettings(configuration))); } Introduce Variable public IDictionary<string, string> ToDictionary(string configuration) { var settings = SplitIntoSettings(configuration); var pairs = SplitIntoKeyValuePairs(settings); var result = InsertIntoDictionary(pairs); } return result;
18 public IDictionary<string, string> ToDictionary(string configuration) { // Split configuration into settings var settings = configuration.split(';'); // Split settings into key/value pairs var pairs = new List<KeyValuePair<string, string>>(); foreach (var setting in settings) { var keyandvalue = setting.split('='); pairs.add(new KeyValuePair<string, string>(keyandvalue[0], keyandvalue[1])); } // Insert pairs into dictionary var result = new Dictionary<string, string>(); foreach (var pair in pairs) { result.add(pair.key, pair.value); } Extract Method } return result;
19 public IDictionary<string, string> ToDictionary(string configuration) { var settings = SplitIntoSettings(configuration); var pairs = SplitIntoPairs(settings); var result = InsertIntoDictionary(pairs); return result; }
20 foreach (var setting in settings) { var key_and_value = setting.split('='); result.add(key_and_value[0], key_and_value[1]); } Extract Method foreach (var setting in settings) { } AddSettingToResult(setting, result); private static void AddSettingToResult(string setting, Dictionary<string, string> result) { var key_and_value = setting.split('='); result.add(key_and_value[0], key_and_value[1]); }
21 if (DateTime.Now >= weckzeit) { using (var soundplayer = new SoundPlayer(@"chimes.wav")) { soundplayer.play(); } timer.stopp(); Extract Method } if (WeckzeitErreicht()) { using (var soundplayer = new SoundPlayer(@"chimes.wav")) { soundplayer.play(); } timer.stopp(); } private bool WeckzeitErreicht() { } return DateTime.Now >= weckzeit;
22 if (WeckzeitErreicht()) { using (var soundplayer = new SoundPlayer(@"chimes.wav")) { soundplayer.play(); } timer.stopp(); } private bool WeckzeitErreicht() { return DateTime.Now >= weckzeit; Extract Method } if (WeckzeitErreicht()) { } Wecken();
23 public string Format(string vorname, string nachname, string strasse, string hn, string plz, string ort) { return $"{vorname} {nachname}, {strasse} {hn}, {plz} {ort}"; } public string Format(Adresse adresse, string vorname, string nachname) { return $"{vorname} {nachname}, {adresse.strasse} {adresse.hn}, {adresse.plz} {adresse.ort}"; } Extract Class from Parameters
24 public class Adresse { private string strasse; private string hn; private string plz; private string ort; public Adresse(string strasse, string hn, string plz, string ort) { this.strasse = strasse; this.hn = hn; this.plz = plz; this.ort = ort; } public string Strasse { get { return strasse; } }... }
25 public string[] CsvTabellieren(string[] csvzeilen) { _csvzeilen = csvzeilen; RecordsErstellen(); int[] breiten = SpaltenbreitenErmitteln(); TabelleErstellen(breiten); } return _tabelle; public string[] CsvTabellieren(string[] csvzeilen) { var records = RecordsErstellen(csvZeilen); int[] breiten = SpaltenbreitenErmitteln(records); var tabelle = TabelleErstellen(breiten, records); } return tabelle;
26 Automatisierte Tests ergänzen
27 Herausforderungen beim Ergänzen von Tests: Abhängigkeiten Aspekte nicht getrennt Ressourcenzugriffe Sichtbarkeit Globaler Zustand
28 Lösungen: Zunächst vermehrt Integrationstests, dann Refactoring und Unit Tests ergänzen. Mock Frameworks wie TypeMock Isolator oder Telerik JustMock einsetzen.
29 Viele Integrationstests Wenige Integrationstests Viele Unittests Wenige Unittests
30 using System.Collections.Generic; using System.IO; namespace ressourcen { public class CsvReader { public IEnumerable<string[]> Read(string filename) { var lines = File.ReadAllLines(filename); foreach (var line in lines) { var fields = line.split(';'); yield return fields; } } } } Integrierter Ressourcenzugriff
31 [Test, Isolated] public void Isolated_logic_test() { var sut = new CsvReader(); Isolate.WhenCalled(() => File.ReadAllLines("")).WillReturn(new[] { "a;b;c", "1;2;3" }); Verhalten der Attrappe beschreiben var records = sut.read("egal.csv").toarray(); } Assert.That(records[0], Is.EqualTo(new[] { "a", "b", "c" })); Assert.That(records[1], Is.EqualTo(new[] { "1", "2", "3" }));
32 public class PrivatesZeugs { private void SaveToDatabase(string data) { Console.WriteLine("Ressourcenzugriff..." + data); throw new Exception(); } } public void DoSomething() { Console.WriteLine("DoSomething..."); SaveToDatabase("daten daten daten..."); }
33 [TestFixture] public class PrivateMethoden { [Test] public void Private_Methode_nicht_ausführen() { var sut = new PrivatesZeugs(); Isolate.NonPublic.WhenCalled(sut, "SaveToDatabase").IgnoreCall(); } } sut.dosomething(); Verhalten der Attrappe beschreiben
34 Komplexe Refactorings Mikado Methode
35 Change
36 Change
37 Change
38 Change
39 Change
40 Change
41 Change
42 Change
43 Change
44 Hm ist das wirklich clever?
45 Change
46 Change Cha
47 Change Cha
48 B Change Cha
49 Revert! B Change Cha
50 B Change Cha
51 B C D Change Cha
52 Revert! B C D Change Cha
53 B C D Change Cha
54 B C D Change Cha
55 E B C D Change Cha
56 Revert! E B C D Change Cha
57 E B C D Change Cha
58 E B C D Change Cha
59 E B C F D Change Cha
60 Revert! E C B F D Change Cha
61 E B C F D Change Cha
62 E B C F D Change Cha
63 E A B C F D Change Cha
64 Revert! E C B A F D Change Cha
65 Change
66 Change
67 Change
68 Change
69 Change
70 Change
71 Change
72 Change
73 Change
74 Change
75 Change
76 Change
77 Change
78 Change
79 Hurra!
80 A B Change C D E F
81 A n a l y s e E C B A F R e f a c t o r i n g D Change
82 Start Das Mikado Ziel notieren Das Ziel bzw. die aktuelle Vorbedingung naiv implementieren Ergibt die Änderung Sinn? Ja Nein Gibt es ein Problem? Nein Commit der Änderungen in die Versionskontrolle Ja Nach Lösungen suchen Ist das Mikado Ziel erreicht? Nein Die Lösungen als Vorbedingungen im Mikado Graph notieren Fertig! Ja Verwerfen aller Änderungen mit Hilfe der Versionskontrolle Nächste Vorbedingung auswählen, um damit zu arbeiten
83 Änderung naiv ausführen. Herausfinden, was kaputt gegangen ist. Dies sind die Vorbedingungen für die Änderung. Visualisieren: zum Mikado Graph hinzufügen REVERT!!! Wiederholen, bis nichts mehr kaputt geht.
84 Demo
85 Uhrzeit wird fortlaufend angezeigt
86 Uhrzeit wird fortlaufend angezeigt Eigene Timerklasse erstellen
87 Uhrzeit wird fortlaufend angezeigt Eigene Timerklasse integrieren Eigene Timerklasse erstellen
88 Uhrzeit wird fortlaufend angezeigt Anzeigen der Uhrzeit auf eigenem Event Eigene Timerklasse integrieren Eigene Timerklasse erstellen
89 Uhrzeit wird fortlaufend angezeigt Anzeigen der Uhrzeit auf eigenem Event Anzeigen von Uhrzeit und REstzeit trennen Eigene Timerklasse integrieren Eigene Timerklasse erstellen
90 Unterziel A n a l y s e Unterziel Unterziel Unterziel Unterziel Unterziel Unterziel R e f a c t o r i n g Ziel
91 Vorteile der Mikado Methode Immer auslieferbar Nur auf dem Trunk, kein Branching Fokus auf das Ziel; nur das Nötigste tun Visualisierung
92 Fazit Einfache Refactorings: Lesbarkeit Automatisierte Tests: Korrektheit Komplexe Refactorings: Wandelbarkeit
93 Onlinekurs Automatisiertes Testen von.net Anwendungen zur Zeit kostenlos
94 Fragen?
95
Ich liebe Java && Ich liebe C# Rolf Borst
Ich liebe Java && Ich liebe C# Rolf Borst Java oder C#? Einführung public class Einfuehrung { private int gesamtzahl = 0; /* Ermittelt die Anzahl der geraden und durch drei teilbaren Zahlen */ public String
MehrCheatSheet Flow Design
heatsheet low Design Symbole unctional Units / unktionseinheiten unktionseinheit ist der Überbegriff für Methode, Klasse, ibliothek, etc. Eine unktionseinheit, die Domänenlogik enthält. Eine unktionseinheit,
MehrRefactoring von Legacy Systemen. Jochen Winzen jochen.winzen@andrena.de andrena objects ag
Refactoring von Legacy Systemen Jochen Winzen jochen.winzen@andrena.de andrena objects ag Was ist ein Legacy System Ein Legacy System hat folgenden Eigenschaften: + Besitzt die geforderte Funktionalität
MehrIT Basics 2 Handout u
IT Basics2Handout9.9.2008u.16.9.2008 FürdasErstellenvonobjektorientiertenProgrammenistesnebendemVerständnisder Objektorientierungauchnötig,einigegrundlegendeKonzeptederProgrammierungzuverstehen. DiesegrundlegendenKonzeptesindThemaderzweitenLehrveranstaltungundteilweiseauchder
MehrInformatik 2 für Regenerative Energien
Informatik 2 für Regenerative Energien Klausur vom 5. Juli 2013 Jörn Loviscach Versionsstand: 13. Juli 2013, 18:12 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
MehrNeue Features in C# 2.0
Neue Features in C# 2.0 (gekürzt) Generische Typen Iteratoren Vereinfachte Delegate-Erzeugung Anonyme Methoden Partielle Klassen Sonstiges University of Linz, Institute for System Software, 2004 published
MehrSystematisches Testen der Funktionalität von Softwaresystemen. 17. Juni 2015
Systematisches Testen der Funktionalität von Softwaresystemen 17. Juni 2015 Überblick Semantische Qualität von Software Teststrategien und prinzipien Testgetriebene Softwareentwicklung Welche Arten von
MehrÜbung 1 mit C# 6.0 MATTHIAS RONCORONI
Übung 1 mit C# 6.0 MATTHIAS RONCORONI Inhalt 2 1. Überblick über C# 2. Lösung der Übung 1 3. Code 4. Demo C# allgemein 3 aktuell: C# 6.0 mit.net-framework 4.6: Multiparadigmatisch (Strukturiert, Objektorientiert,
MehrThe Art of Unit Testing
The Art of Unit Testing 01.02.2011 Marco Heimeshoff Heimeshoff@gmx.de Übersicht Grundlagen des Unit Testing Test Driven Development Stubs & Mocks Behavior Driven Design The Art of Unit Testing Definition
MehrWann soll ich mocken? XP Days Germany David Völkel
Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 @davidvoelkel @softwerkskammer @codecentric TDD & Design SCHICHTEN TESTEN? INTEGRIERTER TEST Unittest MOCKING Mock Unittest MOCKING Mock Unittest
MehrM3 M4 M7 VORNAME: Gewinnt VERTIEFUNG:
NACHNAME: Vier SEMESTER: M5 M6 M3 M4 M7 VORNAME: Gewinnt VERTIEFUNG: FV IM VERWENDETE KLASSEN: Als Anlage erhalten Sie einen Ausdruck des vorab bekannt gemachten Quelltextes von verschiedenen Klassen.
MehrIterativ. Inkrementell
Iterativ Inkrementell Build Release Test Qualität Architektur & Documentation Distributed Version Control Continuous Integration TDD Design Agile Architektur Dependency Feature Branches Mocks
MehrInformatik II. Giuseppe Accaputo, Felix Friedrich, Patrick Gruntz, Tobias Klenze, Max Rossmannek, David Sidler, Thilo Weghorn FS 2017
1 Informatik II Übung 6 Giuseppe Accaputo, Felix Friedrich, Patrick Gruntz, Tobias Klenze, Max Rossmannek, David Sidler, Thilo Weghorn FS 2017 Heutiges Programm 2 1 Klassen - Technisch 2 Prediscussion
MehrRafał Wesołowski CLEAN CODE
Rafał Wesołowski CLEAN CODE Rafał Wesołowski Beruf: - ecommerce Software Engineer bei der Internetagentur NEXUS Netsoft GmbH - Ausbilder - PHP und JS Experte - Agile Design Pattern Enthusiast - Innovations
MehrTDD. 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:
MehrSchwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen
Schwerpunkte 10. Felder (Arrays) Teil 1 Java-Beispiele: Echo.java Primzahlen.java Monate.java Klassifikation von Typen in Programmiersprachen Array: einziger strukturierter Typ in Java Deklaration, Erzeugung
MehrBack to the Future Eine Zeitreise von C# 1.0 zu C# 7.0
Back to the Future Eine Zeitreise von C# 1.0 zu C# 7.0 About us David Tielke mail@david-tielke.de Twitter: @davidtielke Ing. Christian Giesswein, MSc. www.software.tirol christian@software.tirol Twitter:
MehrFortgeschrittenes 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
MehrProgrammieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden
Einleitende Bemerkungen Einleitende Bemerkungen Aspekte Aufbau von sinnvollen Klassenhierarchien Verwaltung von Objekten unterschiedlichen Typs Mitarbeiter Besonderheiten der Anwendung jeder Angehörige
MehrDesign for Testability in der Praxis Referent: David Völkel
Design for Testability in der Praxis Referent:DavidVölkel http://commons.wikimedia.org/wiki/file:pit_crew_hudson_valley.jpg http://commons.wikimedia.org/wiki/file:carservice.jpg DavidVölkel anti pattern
MehrDelegates. «Delegierter» Methoden Schablone Funktionszeiger. Dr. Beatrice Amrhein
Delegates «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen 2 Definition 3 Definition Ein Delegat
MehrKlausur Grundlagen der Programmierung
Klausur Grundlagen der Programmierung Aufgabenstellung: Martin Schultheiß Erreichte Punktzahl: von 60 Note: Allgemeine Hinweise: Schreiben Sie bitte Ihren Namen auf jedes der Blätter Zugelassene Hilfsmittel
MehrWarum? Wie? Algorithm Tests Diverses. Unit Tests. Datamining und Sequenzanalyse. Kai Dührkop, Markus Fleischauer
Unit Tests Datamining und Sequenzanalyse Kai Dührkop, Markus Fleischauer Warum? Code without tests is bad code. It doesn t matter how well written it is; it doesn t matter how pretty or object-oriented
MehrSOLID für.net und JavaScript
SOLID für.net und JavaScript www.binarygears.de Stefan Dirschnabel Twitter: @StefanDirschnab #dncgn SOFTWARE ENTWICKLUNG BERATUNG SCHULUNG 5 Prinzipien für das Design von Software Wartbarer Code Leicht
MehrImplementationsstand. Status. In Entwicklung (Version 0.3) Anhand der aktuellen Kundenprojekte weiterentwickelt Ausgelegt für Munjari
QuickInfo Quino Einleitung Quino wird ausgesprochen als kē- nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit.net Einfache Unterstützung von.net- und Dritthersteller- Komponentensammlungen Modulares
MehrII. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )
Technische Informatik für Ingenieure (TIfI) WS 2006/2007, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Rekursion Datenstrukturen Merge S ( split, s, merge ) Beispiel:
MehrMichael C. Feathers. Legacy Code. Effektives Arbeiten mit. Refactoring und Testen bestehender Software
Michael C. Feathers Effektives Arbeiten mit Legacy Code Refactoring und Testen bestehender Software Vorwort................................................... 13 Geleitwort.................................................
Mehrinitializer lists (nicht für Referenzen... unklar warum...)
initializer lists (nicht für Referenzen... unklar warum...) 1 class Y{ y ; Y &ref (y) ; // ok Y &ref {y ; // Fehler: g++, MS VS C++11 47 preventing narrowing int x = 7.3; // Ouch! void f(int); f(7.3);
MehrClient-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
MehrSoftware-Refactoring. 29. Mai 2013
Software-Refactoring 29. Mai 2013 Überblick Was ist Refactoring und wozu dient es? Welche Refactorings gibt es? Refactoring-Katalog: www.refactoring.com Wann, wo und wie führt man Refactorings durch? Wie
MehrWichtige Prinzipien von C#
Wichtige Prinzipien von C# Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Dokumentationskommentare 2. Gültigkeit (Scope) 3. namespace & using 4. Methodenüberladung 5. Wert- & Referenztyp 6. null
MehrKlausur: Informatik, am 11. Juli 2013 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:
Seite 1 von 10 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 6 Pkt.) a) Geben
MehrUnsere Webapplikation erweitern
Unsere Webapplikation erweitern Um mit Play zu arbeiten: 1. Starten Sie zunächst den MySQL-Server. Führen Sie dazu auf dem USB-Stick mysql_start.cmd aus. 2. Sie brauchen eine Windows-Kommandozeile: Starten
MehrVorbereitende Aufgaben
Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2018/19 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand Übungsblatt 4 Besprechung: 19. 23.11.2018 (KW 47) Vorbereitende
MehrKlausur Programmieren 2 WS 2017/18
Klausur Programmieren 2 WS 2017/18 Name Gruppe 1 Vorname Dauer 90 min Matrikelnummer Hilfsmittel keine Die Klausur ist mit 50 Punkten sicher bestanden. Hinweise: Formulieren Sie Ihre Lösungen auf dem Aufgabenblatt
Mehr14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch
Klassen (Java) vs. Records (Pascal) 14. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische Felder und Methoden, Datenkapselung Pascal RECORDs in Pascal sind reine
MehrInformatik 2 für Regenerative Energien
Informatik 2 für Regenerative Energien Klausur vom 15. Juli 2015 Jörn Loviscach Versionsstand: 15. Juli 2015, 09:50 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
MehrII. Vom Modell zum Programm 1. Klassen definieren
II. Vom Modell zum Programm 1. Klassen definieren Attribute Typ public, private oder protected static? Methoden Signatur static? Vererbung public oder private mehrfach? Konstruktoren und Destruktoren 1
Mehr12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell
Klassen - Technisch Eine Klasse ist eine Einheit mit einem Namen, die Daten und Funktionalität beinhaltet 12. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, Kapselung,
MehrKlausur Software-Entwicklung März 01
Aufgabe 1: minimaler Punktabstand ( 2+5 Punkte ) Matrikelnr : In einem Array punkte sind Koordinaten von Punkten gespeichert. Ergänzen Sie in der Klasse Punkt eine Klassen-Methode (=static Funktion) punktabstand,
MehrAbend 4 Übung : Erweitern von Klassen durch Vererbung
Abend 4 Übung : Erweitern von Klassen durch Vererbung Ziel, Inhalt Wir erweitern die Klassen, die wir zum Zeichnen mit TsuZeichnen verwenden. Dabei wenden wir die Vererbung an um die Klassen zu spezialisieren
MehrKlausur: Informatik, am 11. Juli 2013 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:
Seite 1 von 10 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 15 Pkt.) Was liefert
MehrBesonderheiten von C#
Besonderheiten von C# Wert- und Referenztypen int a, b; a = 3; b = a; a++; Debug.Assert( a==4 && b==3 &&!a.equals(b), "int ist doch kein Werttyp" ); RTyp ra, rb; ra = new RTyp(3); rb = ra; ra.inc(); Debug.Assert(
MehrLive Hacking. Durch Refactoring zu sauberem Code
Live Hacking Durch Refactoring zu sauberem Code Roland Mast Sybit GmbH Software-Entwickler roland.mast@sybit.de Roland Mast Sybit GmbH Software-Entwickler roland.mast@sybit.de 40 35 30 25 20 15 10 5 0
MehrKlausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:
Seite 1 von 10 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert
MehrErstellung eines mockbasierten Testframeworks für Saros. Philipp Cordes Masterarbeit
Erstellung eines mockbasierten Testframeworks für Saros Unit-Tests Integrationstests Akzeptanztests @Test public void test() { } assertequals(15, Math.multiply(3, 5)); über 80.000 Zeilen Code Know-how
MehrKurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1
Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7 Inhaltsverzeichnis RMI Projekt gettime 1 Schritt 1: Interface Klasse definieren 1 Schritt 2: Implementation Class definieren 2 Schritt 3: RMI Compiler erstellen
MehrProbeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
MehrInhaltsverzeichnis. Geleitwort Einleitung... 13
5 Geleitwort..................................................... 11 Einleitung..................................................... 13 1 Einführung.......................................................
Mehr14. Java Klassen. Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische Felder und Methoden, Datenkapselung
275 14. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische Felder und Methoden, Datenkapselung Klassen (Java) vs. Records (Pascal) 276 Pascal RECORDs in Pascal sind
MehrKlausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.
Seite 1 von 9 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert
MehrDesign for Testability in der Praxis David Völkel, codecentric AG
Design for Testability in der Praxis David Völkel, codecentric AG http://commons.wikimedia.org/wiki/file:pit_crew_hudson_valley.jpg http://commons.wikimedia.org/wiki/file:carservice.jpg David Völkel *
MehrGrundlagen der Informatik
Grundlagen der Informatik Klausur 1. August 2008 1. Dynamische Datenstrukturen und objektorientierte Programmierung (45 Punkte) Gegeben sei eine Datenstruktur mit folgendem Aufbau struct lelem { int w;
MehrPolymorphismus 44. Function.hpp. #include <string>
Polymorphismus 44 #include Function.hpp class Function { public: virtual ~Function() {}; virtual const std::string& get_name() const = 0; virtual double execute(double x) const = 0; }; // class
MehrObjektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein
Objektorientierung Klassen und Objekte Dr. Beatrice Amrhein Überblick Konzepte der Objektorientierten Programmierung Klassen und Objekte o Implementierung von Klassen o Verwendung von Objekten 2 Konzepte
MehrInoffizielle Lösung zur Informatik I Prüfung Frühlingssemester 2010 Freitag, 13. August May 23, 2011
Inoffizielle Lösung zur Informatik I Prüfung Frühlingssemester 2010 Freitag, 13. August 2010 May 23, 2011 Informatik I, FS 2010, 1. Vordiplom Aufgabe 3 double sqrt(double s) double x_old,x_new; x_n initalisieren
MehrJUnit. 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-)
MehrKlausur Programmieren 2 WS2016/17
Klausur Programmieren 2 WS2016/17 Name Gruppe 1 Vorname Dauer 90 min Matrikelnummer Hilfsmittel keine Die Klausur ist mit 50 Punkten sicher bestanden. Hinweise: Formulieren Sie Ihre Lösungen auf dem Aufgabenblatt
MehrAPI-Design. Do s and Don ts. Jochen Kraushaar
API-Design Do s and Don ts Jochen Kraushaar Von Kai Meißner, CC0 1.0, https://pixabay.com/photo-2063160/ Von German Lopez, CC0 1.0, https://pixabay.com/photo-2191229/ Wer hat bereits eine API entwickelt?
MehrVon der Aufgabe zum Code. Mario Bodemann
Von der Aufgabe zum Code Mario Bodemann 1 Agenda Wiederholung Aufgabenstellung Aufspalten der Aufgabe Vom Diagramm zum Code richtiges Programmieren Zusammenfassung 2 Agenda Wiederholung Aufgabenstellung
MehrSE2-6. Übung Johannes Bürdek
SE2-6. Übung 11.12.2014 Johannes Bürdek johannes.buerdek@es.tu-darmstadt.de Fragen und Support: se2@es.tu-darmstadt.de oder ins Forum: https://moodle.tu-darmstadt.de/mod/forum/view.php?id=56674 ES Real-Time
MehrCode verifizieren mittels
Code verifizieren mittels Unit- und Regressionstests Institut für Numerische Simulation, Universität Bonn Seminarreihe Technische Numerik Wozu sollen gut sein? Was für Testarten gibt es? Wie funktionieren
MehrInformatik 2 für Regenerative Energien
Informatik 2 für Regenerative Energien Klausur vom 13. April 2018 Jörn Loviscach Versionsstand: 13. April 2018, 10:54 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
MehrWeb-Testen mit JUnit und HttpUnit. Kai Schmitz-Hofbauer Lehrstuhl für Software-Technik Ruhr-Universität Bochum
1 Web-Testen mit JUnit und HttpUnit Kai Schmitz-Hofbauer Lehrstuhl für Software-Technik Ruhr-Universität Bochum 2 Inhalt Entwicklertests in der Praxis Unit-Testing JUnit HttpUnit Praktisches Beispiel Bewertung
MehrJUnit. Unit testing unter Java
JUnit Unit testing unter Java Was ist Junit? einfaches Framework zum Schreiben von wiederholbaren Tests Besonders geeignet für unit testing Erlaubt Hierarchie von Testsuites Schreiben eines Test Case 1.
MehrJava Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation
Java Tools JDK http://www.oracle.com/technetwork/java/javase/ Downloads IDEs Java SE 8 Java SE 8 Documentation Eclipse http://www.eclipse.org IntelliJ http://www.jetbrains.com/idea/ NetBeans https://netbeans.org/
MehrGrundlagen der Objektorientierten Programmierung Static
static - Komponenten Das Schlüsselwort static steht vor einer Klassenkomponente (Attribut oder Methode) und kennzeichnet diese als zur Klasse gehörig und nicht zu einem bestimmten Objekt. Was bedeutet
MehrEinstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form
MehrLösung der OOP-Prüfung WS12/13
2.1.2013 Lösung der OOP-Prüfung WS12/13 1. Aufgabe a) Da der Konstruktor im protected-bereich steht, können keine eigenständigen Objekte der Klasse angelegt werden. Durch den protected-konstruktor wird
MehrSwp08-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,
MehrKlausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: F Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.
Seite 1 von 9 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 15 Pkt.) Was liefert
MehrSoftware-Refactoring. 27. Mai 2015
Software-Refactoring 27. Mai 2015 Überblick Was ist Refactoring und wozu dient es? Welche Refactorings gibt es? Refactoring-Katalog: www.refactoring.com Wann, wo und wie führt man Refactorings durch? Wie
MehrKlassenvariablen, Klassenmethoden
Einstieg in die Informatik mit Java, Vorlesung vom 11.12.07 Übersicht 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion Klassenmethoden
MehrProperty Based Testing
Property Based Testing Nicolai Mainiero sidion Testen ist schwer Testen ist schwer Warum? Alle Pfade durch den Code aufzuzählen ist aufwendig. Selbst vermeintlich einfache Systeme können komplex sein.
MehrAllgemeine Hinweise:
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 11/12 Einführung in die Informatik I Probe-Klausur Prof. Dr. Helmut Seidl, M. Schwarz, A. Herz,
MehrErsetzbarkeit und Verhalten
Ersetzbarkeit und Verhalten U ist Untertyp von T, wenn eine Instanz von U überall verwendbar ist, wo eine Instanz von T erwartet wird Struktur der Typen für Ersetzbarkeit nicht ausreichend Beispiel: void
MehrImplementieren von Klassen
Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und
MehrLambda Expressions in Java 8
Sie sind da Lambda Expressions in Java 8 Rolf Borst Lambda Expressions sind cool Aus dem Internet Stimmt das? Das total uncoole Beispiel Person nachname : String vorname : String alter : int plz : String
MehrWPF Steuerelemente. Dr. Beatrice Amrhein
WPF Steuerelemente Listbox, ComboBox, ListView, Dr. Beatrice Amrhein Überblick Einführung Listen ComboBox Tabellen 2 Einf führung 3 Listen- und Tabellen-Elemente Listen und Tabellen-Elemente sind Steuerelemente,
MehrKlausur im WS 2003/04 : Informatik III
Dr.-Ing. Hartmut Helmke Fachhochschule Braunschweig/Wolfenbüttel Fachbereich Informatik Matrikelnummer: Punktzahl: Ergebnis: Freiversuch F1 F2 F3 Klausur im WS 2003/04 : Informatik III Hilfsmittel sind
MehrAngewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der
MehrThemen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente
Themen Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente Formatierte Eingabe mit cin Die Formatierung der Eingabe ist der Ausgabe sehr ähnlich: Die Flags werden
MehrZusammenfassung: Programmieren 2 (C#)
Zusammenfassung: Programmieren 2 (C#) Arrays Eindimensional int[] feld; feld = new int[2]; int[] feld2 = new int[3]; int[] feld3 = new int[] 1, 2, 3 ; //oder int[] feld4 = 1, 2, 3 ; int laenge = feld3.length;
MehrSoftwareentwicklung in der industriellen Praxis
Softwareentwicklung in der industriellen Praxis Quellcodezentrierte Softwarequalität in Individual- Softwareprojekten TU-Dresden Dresden, 25. November 2013 Seite 2 Vorstellung Ralph Engelmann developer
MehrInformatik 2 für Regenerative Energien
Informatik 2 für Regenerative Energien Klausur vom 4. Februar 2015 Jörn Loviscach Versionsstand: 4. Februar 2015, 09:14 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
MehrKlausur: Grundlagen der Informatik I, am 06. Februar 2009 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:
Seite 1 von 10 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 10 Pkt.) a) Wer
MehrInformatik II Übung 1
Übung 1 Florian Scheidegger florsche@student.ethz.ch Folien mit freundlicher Genehmigung adaptiert von Gábor Sörös gabor.soros@inf.ethz.ch Wer bin ich? Florian Scheidegger Student D-ITET (6 Semester) E-Mail:
MehrDer Beginn einer wunderbaren Freundschaft von Stefan Schnell
Der Beginn einer wunderbaren Freundschaft von Stefan Schnell Polyglottes programmieren, also programmieren in mehreren Sprachen, ist ein eher ungewöhnliches Szenario. Programmiersprachen bieten im Regelfall
MehrTipps und Hinweise zum Bezug der Beitragssatzdatei V5.0
Tipps und Hinweise zum Bezug der Beitragssatzdatei V5.0 Die Beitragssatzdatei in der Version 5.0 wird nur über https Download auf einer frei zugänglichen Webseite auf den folgenden Seiten bereitgestellt.
MehrInformatik II Übung 2. Gruppe 4. Lukas Burkhalter (Folien teils von Christian B. und Leyna S.)
Informatik II Übung 3 Gruppe 4 (Folien teils von Christian B. und Leyna S.) Lukas Burkhalter lubu@inf.ethz.ch Informatik II Übung 2 Lukas Burkhalter 14. März 2018 1 Ablauf der Übung Nachbesprechung der
MehrITG RKSVNet - Webservice Signierung von Belegen via Internet
ITG RKSVNet - Webservice Signierung von Belegen via Internet Dieser Signierdienst via Internet ist für Kassensoftwarehersteller gedacht, die Ihre Kassensoftware über das Internet Ihren Kunden zugänglich
MehrOOSE_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
MehrAufgaben Objektentwurf
Aufgaben Objektentwurf (Einschub zum 5. Tutorium) Tutorium 6 13. März 2009 Svetlana Matiouk, Uni Bonn Ferientutorien zur Vorlesung Softwaretechnologie WS 2008 6. Treffen, Aufgabe 1 Vorwärtsmodellierung
MehrGrundlagen von C# - 1
Grundlagen von C# - 1 Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Über diesen Kurs 2. Benötigte Software 3. Exkurs: Architektur von.net und C# 4. Erstes Programm: Hello World Grundlegende Eigenschaften
Mehrpue13 January 28, 2017
pue13 January 28, 2017 1 Aufgabe 1 (Klammern und Anweisungsblöcke) Wie Sie in der Vorlesung gelernt haben, werden Anweisungsblöcke in Java nicht durch Einrückung, sondern mithilfe von geschweiften Klammern
MehrProbeklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java im Wintersemester 2017/18
Probeklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java im Wintersemester 2017/18 Alexander Bazo Januar 2018 Allgemeine Hinweise 1. Die Bearbeitungszeit beträgt 60 Minuten.
MehrQ-Event «Spice up your Test!»
Testautomatisierung in der agilen Software Entwicklung Q-Event «Spice up your Test!» Einsatz und Nutzen von Testautomatisierung in agilen Software Projekten Urs Müller Senior Testautomation Engineer Agenda
MehrDoppelklick auf eine Klasse verzweigt in den Class Builder (Transaktion SE24).
Vererbungsübersicht Folgendes kleine Programm zeigt die Vererbungshierarchien von Klassen auf. Die Root- oder Super- Klasse wird auf der obersten Ebene angezeigt. Darunter werden die von ihr erbenden Klassen
Mehr