Modul swe


Jasmin Lienhard
Diese Lernkarten behandeln fortgeschrittene Konzepte der Softwarekonstruktion auf Universitätsniveau, mit Fokus auf Metriken, Testmethoden und Codequalität. Sie decken Themen wie statische und dynamische Metriken, Unit-Testing-Praktiken, Test-First-Ansätze und Boundary-Value-Analysen ab. Entwickler und Ingenieure profitieren davon, um Softwarequalität zu messen, Fehler zu minimieren und effiziente Teststrategien zu entwickeln.
Karten
82
Lernende
1
Sprache
Deutsch
Kategorie
Informatik
Stufe
Universität
Erstellt / Aktualisiert
13.01.2014 / 10.03.2014

Lernkarten

Was ist Software Konstruktion?

...ist ein wesentlicher Akt des SWE: Die Konstruktion von funktionierender Software mit einer Kombination aus Coding, Validierung und Testing.

Low Level Softare Konstruktion.

Was ist das?

  • festlegen wie der Code getestet wird
  • Klassen und Routinen designen und schreiben
  • Unit Testing, Integreation Testing, Debugging (eigener Code)
  • Code säubern mit sorgfältiger Formatierung

Warum ist SW Konstruktion wichtig? (4 Punkte)

  • Konstruktionist ein grosser Part der SW Entwicklung
  • Konstruktion ist die zentrale Aktivität in Software Development
  • Ist Fokus auf die Konstruktion geleg,t kann Produktivität eines Programmiers steigern
  • der Code an sich ist of eine gute Beschreibung der SW

Qualität: (8 ilities Begriffe)

  • Reliability
  • Reusability
  • Extendibility
  • Understandability
  • Efficiency
  • Usability
  • Testability
  • Portability
  • Functionality

Reliability - Erklärung

Fähigkeit, fehlerfrei zu arbeiten

Reusability

Fähigkeit Teile der SW zur Lösung von anderen Softwareproblemen zu brauchen

Extendibility

Fähigkeit Erweiterunsänderungen leicht vorzunehmen

Understandability

Fähigkeit SW leicht zu verstehen, damit Änderungen vorgenommen werden können

Efficiency

Schnelligkeit und Kompaktheit der SW 

Usability

Bedienbarkeit der SW

Testability

Einfache Konstruktion und Durchführung der Test Cases

Portability

Einfache Transportierung von einer Umgebung in die andere

Herausforderung von SW Entwicklung (NO DETAILS)

  • Zuverlässigkeit (Korrektheit, Robustheit)
  • Wiederverwendbarkeit (Modifizierbarkeit, Erweiterbarkeit)
  • Funkionalität (Benutzerfreundlichkeit

 

Zuverlässigkeit (Korrektheit, Robustheit)
(Herausforderung von SW Entwicklung)

Es soll einfacher sein, SW zu erstellen, die korrekt funktioniert und einfacher zu garantieren was sie tut:

so oft wie möglich SW laufen lassen und testen!

Wiederverwendbarkeit (Modifitierbarkeit, Erweiterbarkeit)

(Herausforderung von SW Entwicklung)

Es soll weniger SW gebildert werden. SW sollte einfacher zu modifizieren sein.

So oft wie Redesign und Verbesserung von Source Code

Funktionalität (Benutzerfreundlichkeit)

(Herausforderung von SW Entwicklung)

Sicherstellen, dass die SW genau das tut, was der User will und das auf einfache Art und Weise:

so oft wie möglich so einfache wie mögliche SW bilden un dem User geben.

Ziel der Software Konstruktion

SW erstellen, welche die Qualitätsanforderungen befriedigt. SW die gut genug ist, sie muss nicht excellent sein!

Hauptaktvititäten der SW Konstruktion

  • Design
  • Coding
  • Debugging
  • Integration Testing
  • Developer Testing
  • Refactoring

Version Control

Client-Server File System

Typische Client Server Datei Systeme können nicht zum FileSharing verwendet werden.

Das Problem von File Sharing (2 Punkte)

  • zwei User kopieren das gleiche Dokument in Workspace
  • beide bearbeiten ihre Kopien

Lock-Modify-Unlock Lösung:

wird die Datei "gelockt", dann kopiert.

Während der Zeit kann niemand sonst auf das File zugreifen. Nach Bearbeitung wird die Datei releaset. Die anderen User können dann mit der aktuellsten Version arbeiten.

Copy-Modify-Merge Lösung

Alle User kopieren die gleiche Datei lokal in ihre Workspace und arbeiten gleichzeitig an ihrer lokalen Datei. Sobald ein User die Datei publizier hat, erhält jeder andere User einen out-of-date Fehler.

Nachdem die beiden Versionen "compared" wurde, wird auf dem Server eine neue, gemergte Datei kreiert. Die anderen User müssen nun noch ihre lokale Kopie aktualisieren.

Build Automation

Was ist Automatisierung?

Bilde die Komponente sobald der Knopf gedrückt wird

Build Automation

Warum wir uns darum kümmern sollten (häufige Probleme)

  • Entwickler können Applikationen nicht zuverlässig lokal bilden
  • Mangel an konsistenter Versionisierung
  • Unit Testing nicht konsitent
  • Abhängigkeit zwischen Komponenten ist nicht bekannt
  • Arbeit immer wieder zu machen ist langweilig

ANT

Was ist das?

ein Tool um den Buil-Prozess zu automatisieren. Es ist ein mächtigeres, erweiterbares und plattformunabhängiges "make".

Integration

Bedeutung:

verschiedene Module dazu bringen, zusammen zu arbeiten.

Integration in Stichworten

  • Modularisierung
    • ermöglicht Team-Entwicklung
    • macht komplexe Systeme managebar
  • Module müssen zusammenarbeiten
  • Integrierte Module müssen zuverlässig kompilieren "run" Tests bestehen

Fehlerhafte Integration (Anzeichen)

je schneller man Fehler entdeckt, desto einfacher sind sie zu beheben.

  • Integration Server build ist nicht erfolgreich
  • geteilte Komopnente funktioniert in einem System, aber nicht im anderen
  • Unit Tests und oder Code Quality failen

Anwendung von Continous Integration

(wie wirds gemacht?)

  • ein einziges Repository führen
  • automatisierter Build
  • alle committen täglich
  • build schnell halten
  • getestet wird in einem Clone der Produktionsumgebung
  • jeder soll einfach an die letzte Version kommen und sehen, WAS GEHT AB

Continous Integration:

Vorteile

  • Risiken reduziert
    • weniger Zeit für Behebung von Integrationsfehlern
    • weniger Zeit für Behebung von Fehlern im Code wegen keinem Version Control System
    • erhöhte Code Qualität

Continous Integration: Nachteile

  • schwierig in ein bestehendes System zu integrieren
  • db-basierte Systeme müssen geupdatet werden

Continous Integration Tool: Jenkins

  • CI Server
    • führt das Buildskript aus
  • Managment Konsole
  • Dashboard
  • Plug-Ins (Test Coverage, Unit Testing, Ant, etc.)

Unit Testing:

Regression Testing

  • sicherstellen, dass der regefactorete Code das Gleiche tut und ein Fehler nie mehr auftritt
  • bestehende Tests werden erneut durchgeführt um sicher zu gehen, dass keine neue Fehler integriert wurden und ein Fehler behoben wurde.

Was ist Testing?

Testing ist der Prozess, Software zu evaluieren um sicher zu gehen, dass er die Anforderungen des Kunden erfüllt. Es müssen also gut spezifizierte Anforderungen vorliegen.

Was macht Testing? (2 Punkte)

  • vergleicht aktuelle Resultate mit den zu erwarteten Resultaten
  • muss Resultate immer wieder zuverlässig und reproduzierbar erstellen

Test Objekte

  • Class under Test
  • Method under Test
  • Test Case (spezielle Daten, welche für Testen von Methoden von CUT ausgewählt wurden)
  • Test Suite (Set von Test Cases, welches ein Test Ziel abdeckt)
  • Test Fixure (konkrete Implementation um ein spezifisches Item inkl. seinem setup zu testen)

Unit Testing, was ist das?

muss an jeder Unit durchefüht werden. (Klassen) und werden isoliert durchgeführt. Resultate gegen zu erwartetnde Resultate testen.

Fähigkeiten Unit Test Frameworks (4 Punkte)

  • Test Sepzifikation
  • Test Implementation
  • Standardisierte Möglichkeit den Setup und Cleanup zu spezifizieren
  • Methoden anbieten, die die Auswahl individueller Tests zulassen

JUnit

was ist das?

wird in Java verwendet um Java Unit Testing durchzuführen.

Eine Testklasse ist zuständig eine Unit zu testen...

(4 Punkte)

  • Testklasse für einzelne Klasse zuständig
  • Testklasse = Java Klasse. inkl. Felder, Methoden, Konstruktoren, innere Klassen
  • Testklasse = im selben Package wie zu testende Klasse, kann auf default und protected Methoden zugegriffen werden.
  • Deklaration: public class XTest{...}

Lernen