Komplexität bei der Softwareentwicklung

Softwareentwicklung kann eher einfach oder eher komplex sein. Auch hierfür gibt es verschiedene Kriterien. Dazu gehören die Aspekte:


  • Performance/Schnelligkeit
  • Laufzeit des Programms
  • Wartbarkeit
  • Teamgröße
  • Erforderliche Fachkenntnisse
  • Sicherheit/Qualitätsstandard
  • Kommunikationsprobleme

Prinzipien der Softwareentwicklung mit Java

Es gibt 8 Prinzipien der Softwareentwicklung. Diese sind:


  1. Abstraktion: Diese wird zB durch die Objektorientierung verwirklicht
  2. Strukturierung
  3. Modularisierung
  4. Kapselung: Sichtbarkeiten wie private und public
  5. Separation of Concerns: Zum Beispiel bei den Klassen in Java, die alle eine eigene Aufgabe haben
  6. Gründlichkeit/Formalität
  7. Inkrementalität
  8. Änderbarkeit: Möglich durch die Klassenstruktur in Java

Mögliche Fehlerquellen bei der Softwareentwicklung

Um Fehler bei der Entwicklung von Software zu verhindern, macht es Sinn, sich bereits im Vorfeld über die relevanten Fehlerquellen bewusst zu sein. Diese sind im Allgemeinen:


  • Testfehler (zu wenige Tests oder falsche Tests oder sogar gar keine Tests oder welche zum falschen Zeitpunkt)
  • Programmierfehler
  • Anforderungsprofilfehler
  • Kein Abfangen von Fehlbedienungen

Grundstruktur beim Beweis von Listenfunktionen in Scheme

Die Korrektheit einer Funktion, die auf Listen basiert, wird mithilfe von Induktion bewiesen. Zunächst wird gezeigt, dass die Funktion korrekt arbeitet, wenn die Liste leer ist (Induktionsanfang). Dann wird die Gültigkeit der Funktion angenommen für eine Liste, die n-1 Elemente besitzt. Damit soll gezeigt werden, dass sie auch dann gilt, wenn sie für eine Liste mit n Elementen angewendet wird, die dadurch zustandekommt, dass an die Liste aus der Induktionsvoraussetzung vorne ein Element angehängt wird (Induktionsschritt). Hierfür wird die Induktionsvoraussetzung verwendet.

In Scheme zwei Listen aneinanderhängen

In Scheme zwei Listen  aneinanderzuhängen ist relativ einfach. Wenn die erste Liste leer ist, muss die zweite ausgegeben werden. Wenn sie nicht leer ist, wird mit dem Listenkonstruktor eine neue Liste gebaut, die als erstes Element das erste Element der ersten Liste bekommt und als Body den erneuten Funktionsaufruf für den Rest der ersten Liste und die zweite Liste. So entsteht eine Kette von Listenkonstruktoren in der Reihenfolge der Elemente der ersten Liste. Das letzte Element ist hier dann immer die zweite Liste, bei der die Reihenfolge der Elemente auf diese Weise ebenfalls erhalten bleibt.

Wenn die Funktion mehrmals aufgerufen wird, können so auch mehrere Listen aneinandergehängt werden.

Das Array als abstrakter Datentyp in Scheme

Wenn ein Array als abstrakter Datentyp in Scheme implementiert werden soll, muss dieses zunächst als Datentyp festgehalten werden. Da seine Inhalte flexibel sein sollen, sollte die Definition array-of sein und mit einem lambda-Aufruf ermöglicht werden, den genauen Typ in der späteren Funktionssignatur festzulegen. Definiert wird das Array als Funktion, die ein natural auf den eingegebenen Wert abbildet.

Anschließend wird das emptyarray festgelegt. Dieses gibt auf eine Eingabe nichts aus. Vielmehr wird eine Fehlermeldung aufgerufen (mit violation).

Wenn einem Index im Array ein Wert zugeordnet werden soll, bedeutet dass, das dieser Wert beim Aufruf des Arrays mit diesem Index ausgegeben werden soll (erkennt man an der Signatur). Also muss beim Aufrufen der Einfügefunktion ebenfalls wieder eine Funktion aufgerufen werden, die einen Index erwartet. Wenn dieser mit dem gespeicherten Index übereinstimmt, wird der Wert ausgegeben. Wenn nicht, dann wird das zur Speicherung des Wertes verwendete Array mit dem neu eingegebenen Wert aufgerufen (er wird also weitergereicht).

Die Auslesefunktion schließlich bekommt ein Array und einen Wert für den Index und ruft dieses Array mit dem Wert auf.

Wie auch sonst sollte es Testfälle geben. Ein neues Array wird gebaut mit einem emptyarray als Ausgangspunkt und beliebig vielen Aufrufen von putindex. Getindex nimmt im Testfall dann dieses definitierte Array.

Bei den Funktionen sollten Kommentare und Signaturen nicht vergessen werden.


Ziel des Blogs

Ich möchte diesen Blog als lernbegleitende Wiederholungshilfe nutzen. Deshalb werden hier Artikel auftauchen, die sich mit dem Stoff beschäftigen, mit dem ich mich grade beschäftige. :-)