SWT

Aus THM-Wiki
Wechseln zu: Navigation, Suche
Kurs
Kursname Softwaretechnik
Kurstyp Vorlesung
Dozent Klaus Quibeldey-Cirkel
Semester WS 10/11
Studiengang Bachelor


Intro

Aus der englischen Wikipedia zum Begriff Software Engineering:

Software engineering (SE) is a profession dedicated to designing, implementing, and modifying software so that it is of higher quality, more affordable, maintainable, and faster to build.

The term software engineering first appeared in the 1968 NATO Software Engineering Conference, and was meant to provoke thought regarding the perceived "software crisis" at the time. Since the field is still relatively young compared to its sister fields of engineering, there is still much debate around what software engineering actually is, and if it conforms to the classical definition of engineering.

Some people argue that development of computer software is more art than science, and that attempting to impose engineering disciplines over a type of art is an exercise in futility because what represents good practice in the creation of software is not even defined. [...]

The IEEE Computer Society's Software Engineering Body of Knowledge defines "software engineering" as the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software.

Die Vorlesung "Softwaretechnik" wird die enzyklopädische Bestimmung der Disziplin Software-Engineering aufgreifen und praxisnah vertiefen.

Rückblickend auf mehr als 10 Jahre Lehr-Erfahrung im Fach "Softwaretechnik" werde ich den Kurs diesmal anders halten als bisher, siehe die folgende Mindmap:

Orga

<mm>flash|notitle|500px|parameters startCollapsedToLevel=3</mm>


Die nicht Google-öffentliche Kommunikation unter den Teilnehmern und der Kursleitung sowie die Gruppen- und Teamorganisation passiert auf der TH-Lernplattform eStudy im Kurs SWT.

Alle Teilnehmerinnen und Teilnehmer des Kurses sind eingeladen, aktiv diesen Wiki-Artikel über SWT mitzugestalten und zu rezensieren. Im Sinne des Mitmach-Webs 2.0 können Sie nach Anmeldung mit Ihrer TH-Kennung oben rechts jeden Text (auch diesen) ändern. Google-öffentliche Fragen zur Vorlesung stellen Sie bitte auf der Diskussionsseite.

Ihre Tutoren im Kurs sind:

  • Christoph Thelen (Übungen, begleitendes Masterprojekt)
  • Julian Hochstetter (SVN, Trac, Hudson)
  • Marc Kowal (eStudy, Testumgebung)

Sie Sind jederzeit über die Lernplattform erreichbar.

Lernziele

Was sollen Sie am Ende des dritten Semesters Ihres Informatikstudiums kennen, verstehen, anwenden, analysieren, synthetisieren und beurteilen können? Eine gute Modulbeschreibung (Bloomsche Taxonomie) gibt die Antwort, siehe hier: CS1008. Ich konkretisiere die Lernziele für SWT in diesem Semester wie folgt:

(wird in der ersten Vorlesung besprochen und dann hier nachgetragen)

  1. Kennen/Wissen
  2. Verstehen
  3. Anwenden
  4. Analysieren
  5. Synthetisieren
  6. Beurteilen

Übungsthemen

  1. SVN und Trac: Warum verwendet man Versionierungstools? Welche Tools gibt es? Wie funktionieren sie? Wie sieht der Einsatz von Subversion im eStudy-Projekt aus? Benutzerverwaltung über Trac. Was ist Trac? Wie wird es in eStudy verwendet? Was sind Tickets? Was ist das "Trac Social Network"?
  2. Softwaremetriken: Wozu braucht man Metriken? Welche Metriken gibt es und welche sind wichtig? Wie erstellt man seine eigenen Metriken mit PHPUnit? Visualisierung der Metriken im Hudson. Was ist Hudson? Beispielmetriken des eStudy- und Dotplot-Projekts.
  3. Testgetriebene Entwicklung: Was ist die Philosophie? Welche Testarten gibt es und wo setzt man welche ein? Auf welche Schwierigkeiten wird man stoßen? Wie schreibe ich einen Unit-Tests? Worauf muss ich beim Schreiben achten?
  4. Continuous Integration: Was ist CI und warum sollte man es einsetzen? Was lässt sich alles automatisieren? Sollte man alles automatisieren? Typische Abläufe beim Einsatz von Continuous Integration. Eine Stufe weiter: Continuous Deployment / Delivery.
  5. Testbarkeit: Was macht Code schwer zu testen? Wie sollte man seine Anwendung strukturieren? Welche Entwurfsmuster sind hilfreich? Welche Entwurfsmuster sind zu vermeiden? Was gilt es sonst zu beachten?
  6. Arbeiten mit "Legacy Code": Definition und wie geht man damit um? Warum ist eine Neuentwicklung keine Lösung (alleine die Projektkosten von eStudy machen es deutlich)? Ansätze, um Legacy Code zu verstehen. Gemeinschaftsübung am Beamer: Bei einer bestehenden eStudy-Klasse die Testbarkeit erhöhen.
  7. GUI- und Akzeptanz-Tests: Wo liegt der Unterschied? Gibt es außerdem einen Unterschied zum Begriff "Funktionaler Test"? Wie geht man bei diesen beiden Testarten vor? Welche Werkzeuge gibt es? Wo liegen die Probleme?
  8. Präsentation der Hausübungen

Hausübungen

  1. Literatur: Google Books zum Literaturmodul hinzufügen: Eingestellte Bücher sollen bei Google Books durchgeblättert werden können. --Jbrg39
  2. Social Graph: Betrachtet man ein Profil eines Benutzers, wird angezeigt, über wen man diesen Benutzer kennt (in Bezug auf die Buddyliste). --Tlbl01 --ABo36
  3. Logs: Bessere eStudy-Fehlerlogs: Mehr Informationen bei einer Warning oder einer Notice sammeln und diese Informationen besser darstellen.
  4. Mitglieder Instant: Neben dem Dropdownfeld zur Autovervollständigung wird die Mitgliederliste sofort nach der Eingabe aktualisiert.
  5. Crop-Tool: Das angestaubte Crop-Tool des FotoForums soll modernisiert werden. --Mbdr17 --Dkrn42
  6. Upload von Dateien: Oberfläche vereinfachen und Optionen nur anbieten, wenn sie notwendig sind. --Ohbr23 --Asnl78
  7. News: Mehrere Einträge der gleichen Kategorie auf der Newsseite zusammenfassen: Zum Beispiel nicht jedes einzelne neue Kursmitglied anzeigen, wenn es >3 neue Mitglieder sind.--Hg13748
  8. Profil: Oberfläche vereinfachen, Ansichten entfernen und/oder umgestalten. --Jgks79 --Mtwl78
  9. Foren/Alben: Oberfläche beim Erstellen von Foren/Alben vereinfachen und Rechtevergabe überprüfen.
  10. Aushang: Lesen einer Mitteilung erhöht die Anzahl der Lesebestätigungen.
  11. Nachrichten: Konversationen als Thread darstellen.--Tkrs28 --Cbkr48
  12. Termine: Übersicht erhöhen und Dialogfelder überarbeiten. --Heln15 --Amkr88
  13. FotoForum: Taggen von beliebigen Bildbereichen, welche für eine Zitatantwort direkt übernommen werden können.--shng88 --bgrm12

Das Fundament der objektorientierten Softwaretechnik

OOAD-Konzepte

Objekt vs. Klasse vs. Typ vs. Schnittstelle

Tripel des Objekts: Struktur • Verhalten • Zusicherungen

Polymorphie: Klassen- vs. Schnittstellenvererbung

OOAD-Methoden

Abstraktion: Klassifikation • Generalisierung • Komposition

Leitlinien: Die Magische 7 • Die Architektur des Komplexen • Modularisierung

Klassenfindung: Domänen-Analyse • Use-Case-Analyse

Werkzeuge der Softwaretechnik

Reverse Engineering

Metriken und deren Berechnung

Versionsmanagement

Continuous Integration Server

Refactoring

Test-Framework xUnit

Programmieren im Team

Agile Vorgehensmodelle

eXtreme Programming

Scrum

Zusammenarbeit in virtuellen Teams

Arbeiten auf Kollaborationsplattformen

Entwurfsmuster der Softwaretechnik

Prozessmuster

Analysemuster

GRASP

GoF-Muster

Folien und sonstige Materialien zur Veranstaltung

  1. Einführung in die Veranstaltung

Klaus Quibeldey-Cirkel 09:30, 28. Okt. 2010 (CEST)