Zum Inhalt springen

  • Einträge
    72
  • Kommentare
    239
  • Aufrufe
    11.558

Modul: Softwaretechnik 1


kurtchen

497 Aufrufe

 Teilen

Softwaretechnik 1 ist das erste von insgesamt drei aufeinander aufbauenden Modulen. Ergänzt wird es um die Module "Softwaremanagement" und "Software testen". Diese fünf Module bilden den Studienbereich "Softwaretechnik" und sind für Studierenden im Studiengang "Web- und Medieninformatik" Pflicht. Studierende der Wirtschaftsinformatik müssen "Softwaretechnik 3" und "Software testen" nicht belegen. Für Studierende beider Studiengänge wird ein Vertiefungs-Modul "Softwaremanagement 2" angeboten.

 

Das Modul Softwaretechnik 1 basiert auf dem "Lehrbuch der Softwaretechnik" von Helmut Balzert. Zugeschickt bekommt man Band 1 "Basiskonzepte und Requirements Engineering". Beim Auspacken erlebt man die erste Überraschung. Es ist kein Buch vom W3L-Verlag sondern vom Spektrum Verlag. Die zweite Überraschung ist, dass es ein ziemlich dicker Wälzer von über 600 Seiten ist. Der didaktische Aufbau ist aber durchaus ähnlich, wie man das von der W3L gewohnt ist. Herr Balzert hat ja auch den Studiengang "Web- und Medieninformatik" der W3L aufgebaut. Man kommt mit dem Format gut zurecht. Außerdem ist wird dieses Lehrbuch nicht allein im Modul "Softwaretechnik 1" verwendet sondern auch in "Softwaretechnik 2". Dieses Modul behandelt die Kapitel I bis III. Man landet so bei einem üblichen Umfang von 430 Seiten.

 

Prinzipien und Werkzeuge

 

Die ersten 100 Seiten des Lehrbuches behandeln Basistechniken. Interessant ist vor allem das Kapitel "Prinzipien". Hier werden verschiedene Begriffe entwickelt, die im weiteren Verlauf des Kursmoduls von Bedeutung sind: Abstraktion, Strukturierung, Bindung und Kopplung, Hierarchisierung, Modularisierung, Geheimnisprinzip, Lokalität, Verbalisierung. Betrachtet werden außerdem die Abhängigkeiten zwischen diesen Prinzipien. Dieser Abschnitt des Kurses fühlte sich teilweise fast schon wie ein geisteswissenschaftliches Modul an. Man sollte beim Lesen regelmäßig innehalten und über die eingeführten Begriffe nachdenken, zum Beispiel darüber, was für Bezüge es zwischen Struktur und Hierarchie gibt und wie sich Hierarchien von Strukturen unterscheiden. Herr Balzert entwickelt die Begriffe sehr präzise, unterscheidet sehr genau. Diesen Teil des Kurses habe ich sehr geschätzt. Ich halte Begriffe für wichtig, weil man sie braucht, um sich mit anderen auszutauschen - sei es im direkten, kollegialen Dialog, sei es indirekt, indem man Bücher, Fachartikel oder Dokumentationen liest. Der Stoff dieses Kursabschnittes wurde allein durch Tests abgeprüft. Die waren gut gestellt und brachten einen noch einmal ins aktive Nachdenken über das Gelernte.

 

Ein weiterer größerer Abschnitt behandelte Werkzeuge in der Softwaretechnik. Die sind natürlich einen ständigen Wandel und auch gewissen Moden unterlegen, aber hier geht es darum, Werkzeuge hinsichtlich bestimmter Operationen zu klassifizieren: Editieren, Transformieren, Suchen, Visualisierung, Verbinden, Nachvollziehen, Verwalten von Versionen und Änderungen, Dokumentieren, Messen, Verfolgen und Überwachen, Prüfen, Kommunizieren. Für alle diese Funktionen werden auch konkrete Beispiele genannt. Den Abschluss bilden Kriterien für die Auswahl von Werkzeugen.

 

All dies war interessant aber auch ein wenig theoretisch. Das änderte sich mit dem Kapitel "Basistechniken". Dieses zerfällt in drei Teile: Statik, Dynamik, Logik.

Statik

 

Statik

 

Laut meinem Tutor ist das Kapitel Statik für die Praxis der meisten Entwickler am wichtigsten. Hier geht es um:
- Zusammenfassung von Funktionen
- Funktionsbäume
- Pakete
- Vererbung
- Assoziationen
- Multiplizitäten
- Aggregationen und Kompositionen
- Daten-Strukturen
- XML, DTD und XML-Schemata zur Beschreibung von Datenstrukturen
- Entity-Relationship-Modelle
- Schlüssel, Tabellen und Dateien
- Semantische Datenmodelle
- Unternehmensdatenmodelle
- Multidimensionale Datenstrukturen
- OLAP und Hyperwürfel

 

Zur Darstellung der statischen Beziehungen wird in erster Linie die UML verwendet. Man könnte sagen, dass Softwaretechnik 1 in weiten Teilen ein UML-Kurs ist. Dies gilt besonders für das Kapitel Statik. Aber auch andere Notationsformen wie ER-Diagramme mit verschiedenen Notationen für die Kardinalitäten werden behandelt. In diesem Teil des Kurses gibt es nun auch Einsendeaufgaben. Die bestehen in der Regel darin, dass man ein konkretes Szenario geschildert bekommt, in dem eine Software eingesetzt werden soll. Dazu soll nun ein Modell entwickelt werden, oft in UML.

 

Die Aufgaben in Softwaretechnik 1 fand ich oft schwieriger als in anderen Modulen der W3L. Der Abstraktionsgrad ist höher. Im Gegensatz zu Programmiermodulen kann man ein Modell nicht "laufen lassen" und dann erleben, was nicht funktionert. Natürlich würde man merken, dass ein Modell schlecht ist, wenn man anfinge, es in Code umzusetzen und dann auf Schwierigkeiten stieße. Aber genau das soll ja durch eine sinnvolle Modellierung verhindert werden. Hier habe ich selten die volle Punktzahl erzielt. Mit den oft sehr konkreten und detaillierten Rückmeldungen meines Tutors konnte ich meine Lösungen aber überarbeiten und verbessern. Oft habe ich überarbeitete Lösungen noch einmal eingeschickt, um zu hören, ob es so besser ist. Auf diesem Wege habe ich viel gelernt. (Auch wenn das natürlich an den erreichten Punkten nichts ändert.)

 

Dynamik

 

Dieses Kursabschnitt fand ich am schwierigsten. Auch Gesprächen mit Kommilitonen weiß ich, dass es anderen Studierenden ähnlich geht. Auch finden viele Studierende dieses Kapitel weniger praxisrelevant. Das kommt natürlich sehr darauf an, was für eine Art von Software man entwickeln möchte.

Während in Statik Beziehungen modelliert werden, die über die Laufzeit eines Programmes stabil bleiben, beschäftigt sich Dynamik mit Veränderungen über die Zeit, also mit Systemen in Bewegung. Hier geht es um Zustandsübergänge, Zustandsänderungen und die Ereignisse, die dazu führen. Das ist natürlich wesentlich komplexer und herausfordernder.

 

Es geht um:
- Kontrollstukturen
- Nebenläufigkeit
- Aktivitätsdiagramme
- Geschäftsprozesse und Use-Cases
- Zustandsautomaten: Mealy, Moore und Harel
- Petrinetze: Bedingungs-Ereignis-Netze, Stellen-Transitions-Netze, Hierarchische-Petrinetze, zeitbehaftete Petrinetze und stochastische Petrinetze
- Szenarien
- Sequenzdiagramme
- Kommunikationsdiagramme

 

Für die Einsendeaufgaben sollten hier Zustandsautomaten entworfen werden. Außerdem sollte ein Petri-Netz entworfen werden, dass ein bestimmtes Problem löst. Für letztes war eine Software empfohlen worden, Visual Objects Net++, die man sich gratis runterladen kann. Die lief leider auf meinem System ziemlich instabil und stürzte häufig ab, was mich viel Zeit gekostet hat. Man sieht dem Programm an, dass es ein paar Jahre auf dem Buckel hat. Hier hätte ich sicher die Möglichkeit gehabt, mich nach aktuelleren Alternativen umzusehen, aber die Arbeit an den Petri-Netzen machte mir nicht so viel Spaß und ich wollte lieber zügig mit dem Thema abschließen. Rückblickend betrachtet, wäre es besser gewesen, hier ein wenig mehr Zeit zu investieren. Mein Tutor hatte mich gewarnt, das Softwaretechnik 1 ein sehr anspruchsvoller Kurs sei, der von vielen Studierenden unterschätzt werde. Ich war hingegen froh, endlich zum dritten Abschnitt "Logik" weitergehen zu können.

 

Logik

 

Vom Kapitel "Logik" erwartete ich, dass es mich wieder mehr interessieren würde. Anfangs wurde ein knapper Überblick über Aussagenlogik, Prädikatenlogik und Temporallogik gegeben. Dann kamen Abschnitte mit klaren Softwarebezug.
- Constraints und die OCL in der UML
- Entscheidungstabellen und Entscheidungsbäume
- Erstellung, Darstellung und Optimierung von Entscheidungstabellen
- Entscheidungstabellen-Verbunde
- Regeln und regelbasierte Software
- Verkettung von Regeln, Lösungssuche, Tiefe-Zuerst-Suche, Breite-Zuerst-Suche, Heuristische Suche
- Geschäftsregeln

 

Als konkrete Realsierung von regelbasierter Software wird zum Beispiel die Sprache Prolog genannt, die für bestimmte Spezialanwendungen elegante Lösungen ermöglicht.

 

Für die Einsendeaufgaben sollte man wieder Klassendiagramme zeichnen, diesmal ergänzt um Informationen über Constraints, z.B. formuliert mit OCL. Außerdem sollte man verschiedene Entscheidungstabellen entwerfen. Dieser Kursteil hat mir wieder viel Spaß gemacht.

 

Online-Klausur

 

Den Online-Test habe ich ganz gut geschafft. Die Online-Klausur fand ich anspruchsvoll und habe auch ein paar dumme Fehler gemacht. Was mir entgegen kam: Es gab Aufgaben zu Petri-Netzen, aber hier ging es darum, die dynamische Entwicklung eines gegebenen Netzes nachzuvollziehen. Einzuschätzen, ob es zu Verklemmungen kommen kann. Das fiel mir relativ leicht. Es war gar nicht so schlecht, dass ich bei den Aufgaben zur Statik ein paar Fehler gemacht habe, weil ich so noch mal viele wertvolle Rückmeldungen von meinem Tutor bekommen habe und noch einmal gezielt ein paar Sachen wiederholt habe. So ging ich in die Präsenzklausur, auf die ich mich eigentlich ganz gut vorbereitet fühlte.

 

Die Präsenzklausur

 

Die Präsenzklausur hat mich dann leider ziemlich kalt erwischt. Ich fand sie viel schwieriger als die Online-Klausur. Vor allem hing ungefähr die Hälfte der Punkte an Stoff aus den Kapiteln zur Dynamik. Unter anderen sollte man ein Petri-Netz entwerfen, das ein konkretes Problem löst. Als Einsendeaufgabe mit genügend Zeit zur Verfügung hätte ich das vielleicht geschafft. Aber Zeit ist eine knappe Ressource, mit der man vor allem in dieser Klausur sehr taktisch umgehen muss. Ich habe noch kein Ergebnis, aber diesmal habe ich ein ziemlich schlechtes Gefühl.

 

Wie hätte ich mich rückblickend besser vorbereiten können? Was könnte ich anderen Studierenden dieses Moduls raten? Ich glaube, im allgemeinen ganz gut reflektieren zu können, wo meine Schwächen gelegen haben. Bei anderen Modulen habe ich auch immer wieder Tipps formuliert, worauf man bei der Prüfungsvorbereitung achten sollte. Bei diesem Modul bin ich erstmals ziemlich ratlos. Ich fand das Niveau im Vergleich zu anderen Modulen der W3L ziemlich hoch. Das liegt sicher auch ein Stück weit in der Natur der Sache. Softwaretechnik ist abstrakter als andere Module. Man hantiert mit Begriffen, Konzepten, Notationen, Modellen. Und man kann - anders als in der Programmierung - nicht mal schnell was ausprobieren und so Feedback vom System erhalten. Hier geht es darum, einen Sachverhalt genau zu analysieren, entscheidende Aspekte zu erkennen und die Beziehungen zwischen ihnen in einer geeigneten Form darzustellen. So schafft man die Blaupause für eine gute Implementierung, die auch wartbar und erweiterbar sein soll. Das ist schon eine anspruchsvolle Aufgabe.

 

Insbesondere bei den Petri-Netzen bin ich ratlos. Ich meine, sie verstanden zu haben. Wenn ich ein Petri-Netz vor mir sehe, einen Ausgangszustand bekomme, so kann ich nachvollziehen, was Schritt für Schritt passieren wird. (Oder passieren kann. Ihr Verhalten ist ja oft nicht-deterministisch.) Aber der Entwurf ist eine ganz andere Herausforderung. Das ist vielleicht ähnlich wie der Unterschied zwischen dem Nachvollziehen und dem Finden eines Beweises in der Mathematik. Vielleicht hätte mir hier ein wenig mehr Übungsmaterial gut getan. Es gab nur eine Einsendeaufgabe zu Petri-Netzen. Vielleicht würde ich mich aktiv nach mehr Übungsmöglichkeiten umsehen, wenn ich dieses Modul nochmals machen müsste.

 

Vielleicht merke ich bei diesem Modul auch, dass ich - im Gegensatz zu vielen meiner Kommilitonen - bislang nicht in einem IT-Beruf arbeite. Ich hatte den Eindruck, in der Klausur einfach nicht auf das Tempo zu kommen, dass ich gebraucht hätte, um die Aufgaben in der gegebenen Zeit zu schaffen. Das habe ich natürlich als Stress erlebt, habe nach schnellen Lösungen gesucht, bin oft den erstbesten Schritt auf die Lösung zugegangen, auch wenn es mich in die Sackgasse geführt hat. Ich hätte gründlicher über meine Entwürfe nachdenken müssen, bevor ich anfange, Teile meiner Diagramme zu zeichnen. Genau diese Zeit habe ich mir nicht genommen, weil ich - vielleicht zu unrecht - glaubte, sie nicht zu haben. Eine klare Antwort, wie ich es beim nächsten Mal besser machen könnte, habe ich noch nicht. Ich hoffe, dass ich außer der Note auch ein bisschen Feedback vom Tutor bekomme. Wenn sich dadurch neue Einsichten ergeben, möchte ich die hier noch nachreichen.

 

Fazit

 

Softwaretechnik 1 war insgesamt ein sehr interessantes Modul. Ich würde sagen, es geht in erster Linie darum, wie man komplexe Zusammenhänge und Prozesse auf wesentliche Aspekte zusammenfasst. Es geht darum, wie man etwas modelliert. Und darum, wie man Modelle mit einfachen graphischen Mitteln so darstellen kann, dass man sie anderen Menschen kommunizieren kann. Das halte ich allgemein für eine nützliche Fähigkeit. Ich glaube, dass viele Konzepte aus diesem Kurs einem sogar helfen könnten, auch in anderen Situationen als der Softwareentwicklung Probleme klarer zu sehen und zu beschreiben. Es geht um "Denkzeuge" und so etwas finde ich immer spannend. Auf das sehr gute Lehrbuch von Herr Balzert werde ich sicher auch in Zukunft immer wieder zurückkommen. Es ist sehr systematisch aufgebaut und eignet sich mit seinen vielen Checklisten sehr gut als Nachschlagewerk.

 

Insofern möchte ich hier ein positives Fazit ziehen. Auch wenn ich befürchte, dass ich mit meiner Leistung in diesem Modul nicht zufrieden sein werde.

 Teilen

3 Kommentare


Empfohlene Kommentare

Eigentlich müsste ich heute dringend für "Nicht-sequentielle Programmierung" lernen. Aber man muss sich auch Zeit nehmen, seine Erfolge zu feiern. Softwaretechnik 1 ist bestanden.

 

Und zwar sogar mit gar nicht so wenigen Punkten. Zusammen mit den Bonuspunkten ist es ein schönes Ergebnis geworden. Mit der Note bin zufrieden, mit meiner Leistung in der Klausur nicht. Ich war ganz schön unter Zeitdruck und bin einfach drauf los geprescht, um in der knappen Zeit irgendwie durchzukommen. Da hätte ich auch gut in der Sackgasse landen können. Ich würde sagen, es war schon eine gute Portion Glück dabei, dass der erste "Riecher" anscheinend doch oft richtig war.

 

Was soll's? Softwaretechnik 1 ist geschafft und sogar mit respektablem Ergebnis. Ich freu mich.

Link zu diesem Kommentar

Tipp für künftige Studierende in diesem Modul:

 

Ich habe lange darüber nachgedacht, was ich beim nächsten Mal besser machen würde, um in der Klausur nicht so unter Druck zu sein und meine Leistung besonnen erbringen zu können. Meine Achillesferse waren die Petri-Netze. Ich konnte sie gut nachvollziehen, aber sie aktiv entwerfen, um damit Probleme zu modellieren, da war ich einfach nicht routiniert genug.

 

Ein Problem ist, dass es dazu im Kurs nur eine Einsendeaufgabe gibt. Im Lehrbuch waren verschiedene Netze für archetypische Problemstellungen vorstellt. Die habe ich zur Vorbereitung alle abgezeichnet und mir vorgestellt, wie die Marken-Wanderung ablaufen würde.

 

Heute würde ich die wahrscheinlich in Visual Objekts Net++ nachbauen und noch mehr damit rumspielen, verschiedene Anfangsszenarien setzen, die Netze ein bisschen umbauen und schauen, was passiert. Das wäre ein möglicher Ansatz, um im AKTIVEN Umgang mit Petri-Netzen besser zu werden.

 

Außerdem würde ich versuchen, mir zusätzliches Übungsmaterial zum Thema zu besorgen. Sprich: Ich würde in die lokale Uni-Bibliothek fahren und nach Lehrbüchern suchen, die Übungsaufgaben zu Petri-Netzen enthalten. Solche, wo man wirklich etwas entwerfen soll, was ein Problem löst. Und dann würde ich viel mit Visual Objects Net++ rumspielen.

 

Ich hoffe, dass es künftigen Studierenden mit diesen Tipps möglich ist, ihre Abschlussklausur ein wenig gelassener anzugehen als ich.

Link zu diesem Kommentar
  • Community Manager
vor 18 Stunden, kurtchen sagte:

Eigentlich müsste ich heute dringend für "Nicht-sequentielle Programmierung" lernen. Aber man muss sich auch Zeit nehmen, seine Erfolge zu feiern. Softwaretechnik 1 ist bestanden.

 

Glückwunsch!

 

Ich finde es auch wichtig, Erfolge zu feiern, um die Motivation aufrecht  zu erhalten. 

Link zu diesem Kommentar

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden


×
×
  • Neu erstellen...