Software-Engineering Seminar, Summer 2016 AG Softech FB Informatik TU Kaiserslautern
Studenten Fragen: Studienfach? Software-Entwicklung 3 gehört? Erfahrungen in Programmierung mit Nebenläufigkeit? Zum Beispiel Threads in Java? Teilnehmer: Epiphane Olivier Mahop Ma Noubi-si Frikha Yassine Marcel Müller Natalie Renner Patric van Zwamen Software-Engineering Seminar, Summer 2016 2/ 16
Seminar Thema: Programmierung von nebenläufigen und verteilten Systemen Theoretische Konzepte und praktische Umsetzung in modernen Programmiersprachen. Software-Engineering Seminar, Summer 2016 3/ 16
Motivation: Rechenleistung nutzen Quelle: Herb Sutter: The Free Lunch Is Over (Dr. Dobb s Journal, March 2005) Software-Engineering Seminar, Summer 2016 4/ 16
Motivation: Verteilte Systeme Web-Anwendungen Verteilte Datenbanken und Rechenzentren Autos und Flugzeuge beinhalten mehrere Prozessoren Industrie 4.0, Internet of Things, Cyber-Physical Systems Software-Engineering Seminar, Summer 2016 5/ 16
Motivation: Reaktionszeit für Benutzer JButton btn = new JButton (" Speichern "); btn. addactionlistener ( e -> { savefiletodisk (); markfileassaved () ); Software-Engineering Seminar, Summer 2016 6/ 16
Probleme router. get ( / dashboard, function (req, res ) { Stats. getmemoryusage ( function ( err, memory ) { Stats. getcpuusage ( function (err, cpu ) { Stats. getuserretention ( function ( err, retention ) { res. render ( dashboard, { memory : memory, cpu : cpu, ) ) ) ) ) retention : retention Source: https://www.terlici.com/2015/10/28/solving-node-callback-hell-asyncjs.html Software-Engineering Seminar, Summer 2016 7/ 16
static class Account { int money = 0; Account ( int money ) { this. money = money ; void transfer ( Account from, Account to, int amount ) { if ( amount > 0 && from. money >= amount ) { from. money -= amount ; to. money += amount ; void test () throws InterruptedException { Account a = new Account (50) ; Account b = new Account (0) ; Thread t1 = new Thread (() -> transfer (a, b, 40) ); Thread t2 = new Thread (() -> transfer (a, b, 20) ); t1. start (); t2. start (); t1. join (); t2. join (); System. out. println (a. money + " " + b. money ); Software-Engineering Seminar, Summer 2016 8/ 16
static class Account { int money = 0; Account ( int money ) { this. money = money ; void transfer ( Account from, Account to, int amount ) { if ( amount > 0 && from. money >= amount ) { from. money -= amount ; to. money += amount ; void test () throws InterruptedException { Account a = new Account (50) ; Account b = new Account (0) ; Thread t1 = new Thread (() -> transfer (a, b, 40) ); Thread t2 = new Thread (() -> transfer (a, b, 20) ); t1. start (); t2. start (); t1. join (); t2. join (); System. out. println (a. money + " " + b. money ); 99904 mal 10 40, 95 mal 30 20, 1 mal 30 60 Software-Engineering Seminar, Summer 2016 8/ 16
synchronized void transfer ( Account from, Account to, int amount ) { if ( amount > 0 && from. money >= amount ) { from. money -= amount ; to. money += amount ; Software-Engineering Seminar, Summer 2016 9/ 16
void transfer ( Account from, Account to, int amount ) { synchronized ( from ) { synchronized ( to) { if ( amount > 0 && from. money >= amount ) { from. money -= amount ; to. money += amount ; Software-Engineering Seminar, Summer 2016 10/ 16
Themen 1 Communicating Sequential Processes (CSP) 2 Umsetzung von CSP in der Programmiersprache Go 3 Das Actor-Modell 4 Umsetzung des Actor-Modells in der Programmiersprache Erlang 5 Umsetzung des Actor-Modells in der Bibliothek Akka für die Programmiersprache Scala Software-Engineering Seminar, Summer 2016 11/ 16
Ziele des Seminars Vertiefung in ein spezielles Thema im Bereich Software-Engineering/Software-Technik Selbstständiges erlernen neuer Themen Verbessern von Präsentations-Fähigkeiten Software-Engineering Seminar, Summer 2016 12/ 16
Aufgaben Lesen und Verstehen des gegebenen Materials Suche nach zusätzlichen Materialien Seminar-Papier schreiben Sprache: Deutsch oder Englisch 5-10 Seiten, LNCS Template Thema verständlich für andere Studenten erklären Begutachten von 2 anderen Papieren Abschluss-Präsentationen 20-30 Minuten Präsentation Plus Fragen und Diskussion Software-Engineering Seminar, Summer 2016 13/ 16
How to fail a seminar? Plagiate Verspätete Abgaben Fehlen bei den Abschluss-Präsentationen Schlecht geschriebenes Papier Schlechte Präsentation Nicht-konstruktive Kritik an anderen Papieren Keine Absprache mit Betreuer Software-Engineering Seminar, Summer 2016 14/ 16
Zuweisung der Themen 1 Communicating Sequential Processes (CSP) Betreuer: Prof. Dr. Arnd Poetzsch-Heffter 2 Umsetzung von CSP in der Programmiersprache Go Betreuer: Peter Zeller 3 Das Actor-Modell Betreuer: Mathias Weber 4 Umsetzung des Actor-Modells in der Programmiersprache Erlang Betreuer: Mathias Weber 5 Umsetzung des Actor-Modells in der Bibliothek Akka für die Programmiersprache Scala Betreuer: Malte Brunnlieb Software-Engineering Seminar, Summer 2016 15/ 16
Nächste Schritte: Termin mit Betreuer machen Zeitplan erstellen Struktur/ Entwurf für das Papier Überschriften + 1-3 Sätze pro Abschnitt Grenzen abstecken (welche Grundlagen werden im Papier erklärt, welche vorausgesetzt?) Beispiele? Für praktische Themen: Sprache verwenden, Beispiel programmieren. Termine: bis 27. Mai: Struktur des Papiers an Betreuer senden 6. Juni: Austausch von Theorie- und Praxis-Studenten 20. Juni: Papier einreichen zur Begutachtung durch andere Studenten 30. Juni: Abgabe der Kritik zu den 2 begutachteten Papieren 14. Juli (15:30-18:00): Abschlusspräsentationen 22. Juli: Abgabe des verbesserten Papiers Software-Engineering Seminar, Summer 2016 16/ 16