3 - J (mae)

3 - J (mae)

3 - J (mae)


Kartei Details

Karten 58
Sprache Deutsch
Kategorie Scherzfragen
Stufe Grundschule
Erstellt / Aktualisiert 04.01.2014 / 15.01.2014
Weblink
https://card2brain.ch/box/3_j_mae
Einbinden
<iframe src="https://card2brain.ch/box/3_j_mae/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Unit test (def)

Ein Unit Test ist ein Stück Code (meist eine Methode), das ein anderes Stück Code aufruft und anschließend die Richtigkeit einer oder mehrerer Annahmen überprüft. Falls sich die Annahmen als falsch erweisen, ist der Unit Test fehlgeschlagen.   

Eine Unit ist eine Methode oder Funktion.

SUT

SUT steht für »System Under Test«, manche Leute verwenden auch den Begriff CUT (»Class Under Test« oder »Code Under Test«). Wenn wir etwas testen, bezeichnen wir das, was wir testen, als das SUT.

Eigenschaften eines »guten« Unit Tests

Er sollte automatisiert und wiederholbar sein. 

Er sollte einfach zu implementieren sein. 

Einmal geschrieben, sollte er für die zukünftige Nutzung stehen bleiben. 

Jeder sollte in der Lage sein, den Test laufen zu lassen. 

Er sollte auf Knopfdruck ablaufen.

Er sollte schnell ablaufen.

=> Gute Tests können von jedem verwendet und ausgeführt werden

Integration Testing

Integration Testing bedeutet, dass zwei oder mehr voneinander abhängige Softwaremodule als eine Gruppe getestet werden.

Unit test vs intergration test

Ein Integration Test behandelt viele sich ergänzende Einheiten von Code, um zu untersuchen, ob die Software ein oder mehrere erwartete Resultate liefert, wohingegen ein Unit Test nur eine einzelne Einheit isoliert betrachtet.

Regression

Eine Regression ist ein Feature, das mal funktioniert hat, jetzt aber nicht mehr.

unit test (erweiterte def)

Ein Unit Test ist ein automatisiertes Stück Code, das eine zu testende Methode oder Klasse aufruft und dann einige Annahmen über das logische Verhalten dieser Methode oder Klasse prüft. Ein Unit Test wird fast immer mithilfe eines Unit Testing Frameworks erstellt. Er kann einfach geschrieben und schnell ausgeführt werden. Er ist vollständig automatisiert, vertrauenswürdig3, lesbar und wartbar.

Logischer Code

Logischer Code ist jegliches Stück Code, das irgendeine Art von Logik enthält, so klein es auch sein mag. Es ist Logischer Code, wenn er irgendetwas von dem folgenden enthält: eine if-Anweisung, eine Schleife, eine switch- oder case- Anweisung, Berechnungen oder irgendeine andere Art von entscheidungsfindendem Code.

TDD ablauf

1. Schreiben Sie einen Test, der fehlschlägt, um zu zeigen, dass im Endprodukt ein Stück Code oder eine Funktionalität fehlt.  

2. Lassen Sie den Test erfolgreich ablaufen, indem Sie Produktionscode schreiben, der die Anforderungen des Tests erfüllt.

3. Überarbeiten Sie Ihren Code (Refactoring).

TDD vorteile

hochwertigen Code, hochwertige Tests und ein besseres Design für meinen Code zu entwickeln

Refactoring

Refactoring bedeutet die Änderung eines Code-Stücks, ohne die Funktionalität zu ändern. z.B Klasse umbenennen

Softwarearchitektur (def.)

Lösungsbeschreibung für eine gegebene Anforderung

(Wie die Lösung aufgebaut/konstruiert ist)

3 Hauptblöcke der softwarearchitektur

Anforderungen (einführung, randbedingungen) => scope!

Strukturen (verschiedene sichten)

übergreifende Themen (technische konzepte, entwurfsentscheidungen, szenarien)

Bausteinsicht

packages

codestrukturen

schichten

namensräume

 

laufzeitsicht

szenairen (use cases, abläufe)

unter verwendung der bausteine aus der bausteinsicht (wie spielt alles zusammen)

zu jedem usecase ein baustein und umgekehrt...

 

verteilungssicht

was läuft wo

 

technische konzepte / entwurfsentscheidungen

persistierung, GUI, Fehlerbehandlungen, Sessionhandling, Frameworks, Protokolle..

welche technologien

=> klar dokumentieren für nachwelt!

whitebox

teilprobleme weiter aufgesplittet

UML

UML:= Ist eine "Sprache" für die Modellierung der Strukturen und des Verhaltens von Software- und anderen Systemen.  

Stereotyp

<<...>>

Ein Stereotyp ist eine Erweiterung vorhandener Modellelemente in UML. In der Praxis geben Stereotype vor allem die möglichen Verwendungszusammenhänge (Verwendungskontext) einer Klasse, einer Beziehung oder eines Paketes an

Classifier

Verallgemeinerung des Klassenkonzepts, nur in Metamodell verwendet

Ein Classifier innerhalb von UML ist ein abstraktes gedankliches Konstrukt, das Modellierer nie direkt in eines der Diagramme der UML einfügen. Als sogenannte abstrakte Metaklasse ist der Classifier vor allem nützlich für die Autoren der UML-Spezifikation und weniger für Anwender der UML.

Aggregation (weisse Raute)

Kann in mehreren Aggregatobjekten enthalten sein (kapitel in HTML dokument)

überlebt beim tod des ganzen

komposition (schwarze Raute)

selten

kann nur zu einem Aggregatobjekt gehören, dieses aber wechseln (Datei)

stirbt mit dem löschen des Ganzen

generalisierung

is a

erbt von

durchgezogene linie mit weissem dreiecks pfeil, nach oben

beziehung zwischen speziellem zu generellem Classifier

spezialisierung

beziehung von oben nach unten (keihn pfeil)

unteres objekt kann zusätzliche merkale haben zu den schon geerbten

Aktion:

Eine Aktion (action) steht für den Aufruf eines Verhaltens oder die Bearbeitung von Daten, die innerhalb einer Aktivität nicht weiter zerlegt wird. Die Aktion beschreibt einen Einzelschritt, der zur Realisierung des durch die Aktivität beschriebenen Verhaltens beiträgt.

Aktivität:

Die Summe aller Aktionen, einschließlich der Reihenfolge ihrer Ausführung und der zur Laufzeit erstellten und verwendeten Daten, realisiert die Aktivität.

Ziel

<Softwarearchitektur>

Die langfristige Wartbarkeit, die gute Verständlichkeit und die Möglichkeit auch nach Jahren den Überblick über die Strukturen und Zusammenhänge innerhalb ihres Systems noch zu wahren

was ist softwarearchitektur

beschreibt die Strukturen des Systems, dessen Bausteine, Schnittstellen und das zusammenspiel

angemessene architektur Eigenschaften

Eine angemessene, "saubere" Architektur bedeutet: 

relevant 

effizient

pflegbar 

sparsam 

verständlich und nachvollziehbar

korrekt und aktuell 

prüfbar 

akzeptiert bei Lesern   

ArchitektIn

Bindeglied zwischen Projektmanager, Requirements Engineers, Entwickler, Tester und Betreiber

Tätigkeiten des Architekten

Anforderungen und Randbedingungen klären

expliziten Architektur-Ziele dokumentieren

Strukturen entwerfen (Technologieentscheide, )

Technische Konzepte entwerfen (für Bausteine)

Architektur kommunizieren

Umsetzung begleiten

 

 

qualitätsziehle der architektur

Flexibilität, Erweiterbarkeit, Benutzerfreundlichkeit, Perfomance

fähigkeiten von Architekten

Entwerfen können

Entscheiden können

Vereinfachen können

Implementieren können

Dokumentieren können

Kommunizieren können

Schätzen und bewerten können

Balancieren können

Beraten können

Vermarkten können

Baustein

Programmierkonstrukte: Klassen, Module, Funktionen, Skripte, Programme

Pakete: Namensräume, Gruppierungen von Programmierkonstrukten

Konfiguration: bestimmen das Verhalten oder die Schnittstelle existierender Softwareteile z.B. Spring-Framework, Hibernate-Mapping, Stylesheets

Bibliotheken, Framworks, Standardsoftware: stellen "fertige" Lösungen dar, welche nicht selber entwickelt aber in eigne Software eingebunden oder müssen

eigenschaften von Bausteinen

Merke: Jeder Baustein verfügt über eine Schnittstelle und eine Reihe spezifischer Merkmale wie: Verantwortlichkeit, Variabilität, eventuell einen Verweis auf (von diesem Baustein erfüllten) Anforderungen, Ablageort etc. Kurz: Bausteine sind oft Blackboxen.

blackbox sicht (innenleben ist total verborgen)

Beschreibung von

Zweck und die Verantwortung

Funktionen und/oder Services

Ein- und ausgehende Schnittstellen

whitebox sicht 

zeigt innenleben (welches wiederum aus einer menge von kleineren blackboxes besteht)

Bausteinsicht:

zeigt die statische Struktur des Systems, Kernstück der Software-Architektur, erklärt aus welchen Bausteinen das System zusammengebaut ist und welcher Baustein fachliche oder technische Eigenschaften des Systems bereitstellen.

Verteilungssicht:

Verteilungssicht: zeigt die Verteilung von Systembestandteilen auf Hardware- und Softwareumgebungen => Knoten. Kurz: Klärt, welche Teile eines Systems auf welchen Rechnern, an welchem geografischen Standort auf welcher Umgebung ablaufen können. Zwingend für verteilte Systeme!