swe, Softwarekonstruktion
Modul swe
Modul swe
-
- 1 / 82
-
Cartes-fiches
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{...}