Modulnummer

404

Letzte Aktualisierung
5. Mrz. 2020
Vorgaben
ICT-Modulidentifikation
ICT-LBV Modul 404-6
Modulbezeichnung

Objektbasiert programmieren nach Vorgabe (Version WPS)

Fachliteratur
Powershell
Sprache C

Modul 403
Leistungsbeurteilung zum Ausprobieren
1. Leistungsbeurteilung OpenBook 18'

Inhalt

1. Einleitung
1.1 Unterrichtsmaterial
1.2 Übersicht über die Handlungskompetenzen

2. Powershell - Praxis
2.1 Vergleich Cmd-Tool ↔ CmdLet
2.2 Aufgaben zu CmdLet
2.3 Aufgaben zu Pipeline
2.4 Funktion: Zahl quadrieren
2.5 Stringoperationen
2.6 Datum und Zeit
2.7 Arbeiten mit Verzeichnissen und Dateien
2.8 Verzeichnis erstellen
2.9 Datei auswählen und kopieren
2.10 Laufende Prozesse zählen
2.11 Höchste Prozesszeit anzeigen
2.12 Eventlog anzeigen
2.13 Programmieraufgabe Dateiarchiv
2.14 Programmieraufgabe Prozessverwaltung
2.15 Programmieraufgabe Lokalen Benutzer mit Angaben aus einer EXCEL-Datei erstellen

3. SW Testen
3.1 Aufgaben zu Testen

4. Summary

1. Einleitung

1.1 Unterrichtsmaterial

1.2 Übersicht über die Handlungskompetenzen

Diese Übersicht soll zeigen, was in den 40 Lektionen in M404 gelernt werden soll. Voraussetzung ist der erfolgreiche Abschluss von M403.

Powershell Konsole, Cmdlets

WPS-Konsole / Cmdlets / Aliasing / Piping Zugriff auf Cmdlets (Method / Property): Prozesse / Service / Ordner und Dateien (abs./rel. Pfade) Anwendungen
  • Was sind Cmdlets? Wie werden Cmdlets ausgeführt? Was unterscheidet Cmdlets von CMD-Tools?
  • Wie formatiert WPS seine Standardausgabe? (Unterschied zu Piping?)
  • Wie lassen sich die verschiedenen Parameter von Get-Help anwenden?
  • Wie lässt sich das Help-System updaten?
  • Wie werden Anwendungsbeispiele (examples) eines gesuchten Cmdlets angezeigt?
  • Welche Aliase sind standardmässig aktiviert? Nutzen?
  • Wie erstelle ich ein eigenes Alias?
  • Wie funktioniert das Piping? Welche Elemente werden weitergereicht?
  • Die 4 Objektarten (Process, Service, Ordner und Dateien) können angezeigt werden.
  • Anzeigen von sinnvollen Eigenschaften dieser vier Objektarten.
  • Verändern je einer möglichen Eigenschaft von Dateien und Ordner.
  • Anwenden der wichtigsten Methoden dieser vier Objektarten.
  • Die praktische Anwendung von verschiedenen Cmdlets in WPS-Skripts demonstriert.

Objekte (Method/Property) / Abstraktion

Verwendungszweck von Objekten (Eigenschaften, Methoden) / Eigenschaften von Objekten auslesen/verändern/Methoden ausführen / Objekte in Variablen abspeichern. Textbasierte Benutzerschnittstelle (Menüsteuerung) / Benutzereingabe und Verarbeitung von Text, Datum/Zeit, Zahlen etc. (String- , Zeit-/Datumsmanipulation, Mathefunktionen) Implementation eigener Abstraktionen (Funktion).
  • Objektorientiertes (OOP) versus prozedurales Programmieren.
  • Was ist ein Objekt / Eigenschaft / Methode?
  • Ein- Auslesen von Objekt-Eigenschaften.
  • Methoden eines Objektes ausführen.
  • Objekt in Variablen speichern und darauf zugreifen. (Variablen-Datentyp/Methoden/Eigenschaften)
  • Benutzerschnittstelle (TUI/Aufbau/Ablauf)
  • Robuste Benutzereingabe (Fehleingaben)
  • Verschiedene Datenarten (Text, Zeit/Datum, Zahl, etc.), entsprechende Methoden (String-,Zeit-/Datumsmanipulationen, Mathebibliothek)
  • Methodenaufruf mit falschen Eingabeparametern.
  • Implementation von Aufgabenstellungen mit Abstraktionen (Funktion)
  • Programme/Anwendungen laufen im «happy path» fehlerfrei.

Ablaufstruktur objektbasiert implementieren

Methoden von Standardobjekten / Formatierte Anzeige von Daten (Datum, Währung, ..) / Berechnungen mit Bibliotheksfunktionen (z.B. Mathematik-Bibliothek) / Iteration über Objekte (z.B. Foreach) / Formatierte Ausgabe von Objektsammlungen via CmdLets, z.B. format-list) Interaktive Ein-/Ausgabe, strukturierter Programmaufbau / Robuste Benutzereingabe / Objekte: → initialisieren → speichern → weiterverwenden. Code-Guidelines / Inline-Kommentare / Programmheader
  • WPS-Standardobjekte (z.B. String-Objekt)
  • Verwendung der Standardmethoden (z.B. String-Manipulation)
  • Daten(-typen) korrekt formatiert und angezeigt (z.B. Wochentag eines Datums)
  • Standard-Methoden und Funktionen der Mathe-Bibliothek
  • Iteration über eine Objektsammlung.
  • Strukturierter Programmaufbau
  • Validierte Benutzereingaben, robuste Benutzereingabe, Fehlermeldungen, Programmausstieg, Laufzeitfehler
  • Deklarierte und initialisierte Objekte.
  • Guidelines: Umsetzen von Implementierungs- und Formatierungsvorgaben

Software Testen

Whitebox-Test / Blackbox-Tests Funktionstest / Systemtest / Testspezifikation / Testprotokoll mit Testgruppen und Testfällen / Positiv-/Negativtestfälle / Aequivalenzklassen)
  • Statisches versus dynamisches Testverfahren
  • Whitebox versus Blackbox-Tests
  • Testspezifikation / Testdefinition / Testverfahren / Testbeschrieb
  • Testabdeckung / Testgruppen / Aequivalenzklassen → Testspezifikation & Testprotokoll
  • Testabschluss (Sign off): Angaben / Ergebnisse
  • Testspezifikation → klare Beschreibung des Testverfahrens mit gültige und ungültige Testdaten/Testwerten/Grenzwerten
  • Testdurchführung und Protokollierung durch Drittperson.

2. Powershell - Praxis

2.1 Vergleich Cmd-Tool ↔ CmdLet

  • Öffnen sie die Windows-Eingabeaufforderung (cmd)
  • Öffnen sie die Windows-Powershell

Führen sie die folgenden Befehle jeweils in beiden Fenstern aus und notieren sie sich tabellarisch, was dabei passiert und wo die Unterschiede liegen!

cd ..
cd ~
echo %cd%
Get-Location
Set-Location ~

dir /?
dir
Get-Help Get-Childitem
Get-Childitem .

mkdir .\test
cacls /?
cacls .
Get-Help Get-Acl
Get-Acl . | fl

echo HALLO
write-host HALLO

2.2 Aufgaben zu CmdLet

Führen sie die folgenden Befehle aus und notieren sie sich, was dabei passiert!

WhoAmI                                                # Wer ist eigentlich eingeloggt? Interessant bezüglich Berechtigungen
get-process | get-member                              # Zeigt Eigenschaften und Methoden vom CmdLet "get-process" an
                                                      # Schon vergessen, was get-process ist? Dann: get-help Get-Process
													  
# Soeben haben sie die Pipeline "|" benutzt, Was macht die eigentlich?

# Nun mal völlig ins Blaue hinaus den folgenden Befehl ausführen:
get-process notepad | get-member                      # Methoden, Eigenschaften und Aliase von "notepad.exe" anzeigen
# Das ging aber schief! Warum wohl? Der Prozess "notepad.exe" wurde noch gar nicht gestartet. Holen wird dies nun nach:

# Wir starten nun "notepad.exe" (gleiches Verfahren für jeden beliebig anderen Prozess)
start-process notepad.exe                             # Programm "notepad.exe" starten

get-process notepad | get-member                      # Alles (Methoden, Eigenschaften, Aliase) von "notepad.exe" anzeigen
get-process note* | get-member -membertype Properties # Nur die Eigenschaften anzeigen (Tipp: * → Wildcard!)
                                                      # "-membertype AliasProperty" würden nur die Aliase angezeigt
get-process note* | get-member -membertype Method     # Nur die Methoden anzeigen

# Nun werden wir uns Eigenschaften des Prozessobjekts anzeigen lassen
(get-process notepad).starttime                       # Startzeit von "notepad.exe" anzeigen
                                                      # starttime ist eine Eigenschaft des Prozess-Objekts "notepad"
# Nun werden wir versuchen, die Startzeit von "notepad.exe" zu überschreiben. Wird uns das gelingen?
(get-process note*).StartTime = get-date              # get-date liefert ihnen übrigens das aktuelle Datum
                                                      # Hat es funktioniert? Wenn nein, warum nicht?
													  
# Schlussendlich versuchen wir, Methoden des Prozessobjekts aufzurufen
get-process notepad.getType                           # Funktioniert nicht, weil die Klammern um "get-process notepad" fehlen
(get-process notepad).getType                         # Funktioniert nicht, weil die Klammern nach "getType" fehlen
(get-process notepad).getType()                       # Schon besser! (get-process notepad) präsentiert das Prozessobjekt
(get-process notepad).tostring()                      # Zeigt Standard-Infotext
(get-process notepad).kill()                          # Prozess "notepad.exe" beenden

Get-Process | Foreach-Object {                        # Alle Prozesse anzeigen, die "win" im Namen haben
  if ($_.ProcessName –like  "*win*")                  # Achtung, funktioniert so nicht: $_.ProcessName –eq  "*win*"
  {
    $_.ProcessName
  }
}

# Alles klar? Dann versuchen sie das Ganze an anderen Prozessen aus, wie z.B. winword.exe, ncpa.cpl, calc.exe usw.
# Starten sie z.B. "calc.exe" und finden sie heraus, wo auf dem Harddisk diese Applikation gespeichert ist. Tipp: path

2.3 Aufgaben zu Pipeline

Eine Pipeline verknüpft Befehle ohne Umweg über Variablen miteinander. Das Ergebnis eines Befehls wird also direkt an den nächsten Befehl weitergereicht. Solche Befehlsketten kann man sich als Fabrikfliessband vorstellen. Rohdaten werden von verschiedenen Prozessen bearbeitet und am Ende erhält man das fertige Produkt. (EVA-Prinzip)

Durch Pipelines werden Objekte von Prozess zu Prozess weitergereicht. Erst der letzte Prozess in der Verarbeitungskette wandelt das Objekt in für den Benutzer lesbaren Text um. Vielfach repräsentiert sogar ein einzelner Befehl eine interne Verarbeitungskette
wie zum Beispiel: "Get-Help" → "Get-Help | Out-Default" (Out-Default ruft intern Format-Table und danach Out-Host auf)

Führen sie die folgenden Befehle aus und notieren sie sich, was dabei passiert!

# Sortieren und Gruppieren
Get-Service | Sort-Object Status                                      # Dienste nach Status sortieren
Get-ChildItem | Sort-Object Extension                                 # Dateien nach Typ sortieren
Get-Service | Group-Object Status                                     # Dienste nach Status gruppieren

# Ergebnisse filtern
Get-Service | Select-Object Status, Name                              # Zeigt nur die verlangten Werte
Get-Service | Foreach-Object { if ($_.Status –eq  "Running") {$_ }}   # Alle laufenden Services anzeigen
Get-Service | Where-Object { $_.Status –eq "Running" }                # Ebenfalls alle laufenden Services anzeigen

# Nun fragen wir uns, ob die beiden letzen Befehle Foreach-Object... und Where-Object... wirklich dasselbe machen.
# Da die ausgegebenen Listen lang und umständlich zum vergleichen sind, müssen wir uns etwas einfallen lassen:
# Wir speicher den Output mit einem Redirect ">" in eine Datei:
Get-Service | Foreach-Object { if ($_.Status –eq  "Running") {$_ }} > outputA.txt
Get-Service | Where-Object { $_.Status –eq "Running" } > outputB.txt

# Ob nun beide Dateien wie vermutet gleichen Inhalts sind, überprüfen wir wiederum automatisiert.
# Dabei stehen viele Varianten zur Verfügung:
# Get-FileHash um nur die Gliechheit zu verifizieren...
((Get-FileHash ".\outputA.txt").hash) -eq ((Get-FileHash ".\outputB.txt").hash)
# oder mit compare, um auch die konkreten Unterschiede zu erfahren...
compare (Get-Content ".\outputA.txt") (Get-Content ".\outputB.txt")

# Nun, waren beide Dateien identisch? Fügen sie der zweiten Datei an erster Stelle ein "Hello World!" ein
# und führen sie compare... erneut aus.

# Zum Schluss noch der folgende Hinweis:
# >  bedeutet Umleitung des Ausgabetext in eine Datei (Bestehender Inhalt wird überschrieben)
# >> bedeutet Append den Ausgabetext in eine Datei (Ausgabetext wird dem bestehende Text angehängt)
echo abc > meinText.txt                               # Identisch ist: echo abc | Out-File meinText.txt  
echo def >> meinText.txt

# Ergebisse formatieren und in lesbaren Text umwandeln
dir | Format-Table *                                  # Alle Eigenschaften der Dateien anzeigen
dir | Format-Table Mode, Name                         # Nur Mode und Name als Tabelle anzeigen
dir | Format-List Mode, Name                          # Nur Mode und Name als Liste anzeigen

# Ergebnisse sortieren
Get-Service | Out-file dienste.txt                    # Liste in Datei dienste.txt speichern
Get-Service | Out-Printer                             # Liste an Standard-Drucker senden
Get-Childitem | Export-Csv test.csv                   # Kommaseparierte Liste in test.csv speichern
Get-Process | ConvertTo-HTML | Out-File ausgabe.htm   # Ausgabe als HTML-Datei formatiert

2.4 Funktion: Zahl quadrieren

Um das Wesen von Objekt-Methoden zu verstehen, muss zuerst die Abstraktion bzw. Funktion im prozeduralen Programmierparadigma klar sein. Dazu nun eine entsprechende Übung:
Es soll eine eigene Funktion erstellt werden. Diese Funktion soll eine Zahl quadrieren und als Funktionsrückgabewert an den Aufrufer, in diesem Falls das Hauptprogramm, zurückgegeben werden.

2.5 Stringoperationen

Erstellen sie die folgende Powershell-Skripte:

  1. Lesen sie eine Textzeile ein und geben sie anschliessnd die letzten drei Buchstaben des eingegebenen Textes wieder aus.
  2. Machen sie aus dem String: [string]$myStr = "meinText.txt" den folgenden String: meinText.bck.
  3. Gegeben sei:
    [string]$myStr = ""
    $myStr = read-host "Text eingeben, in der Art textteil1.textteil2"
    Ersetzen sie nun den Teil nach dem Punkt durch "xxx". Beachten sie, dass nach dem Punkt nicht unbedingt 3 Zeichen folgen müssen wie bei der vorangegangenen Aufgabe.

2.6 Datum und Zeit

Diese Aufgabe handelt von den Standardobjekten wie DateTime (DateTime-Methoden und DateTime-Funktionen). (Theorie zu DateTime finden sie hier.)
Berechnen sie, wievielmal mal sie noch schlafen müssen, bis das nächste Mal der Osterhase kommt. (Sonntagsarbeit!)

2.7 Arbeiten mit Verzeichnissen und Dateien

(Sie müssen kein Powershell-Skript erstellen, sondern nur die Befehle in der Powershell-Konsole anwenden!)
Im Fachbeitrag zu Powershell finden sie entsprechende Powershell-Programmbeispiele.
Öffnen sie die Powershell und bearbeiten sie die folgenden Aufgaben. Verwenden sie vorzugsweise cmdlet's oder Objekt-Methoden. Versuchen sie, wo nicht ausdrücklich verlangt, auf cmd-Tools zu verzichten. Protokollieren sie ihre Arbeit in ihrem ePortfolio.

  1. Wechseln sie mit einem dafür geeigneten cmd-Tool in ihr HomeVerzeichnis und danach in .\Desktop
  2. Erstellen sie darin mit einem dafür geeigneten cmd-Tool ein Unterverzeichnis .\Test
  3. Wechseln sie mit einem dafür geeigneten cmd-Tool in das neu erstellte Verzeichnis .\Test
    ... Ab jetzt möglichst nur noch cmdlet's oder Objekt-Methoden verwenden!
  4. Setzen sie den Arbeitspfad (aktueller Pfad) auf ihr aktuelles Arbeitsverzeichnis. (Tipp: CurrentDirectory)
  5. Kreieren sie ein Unterverzeichnis mit dem Namen "Backup"
  6. Kreieren sie folgende Dateien:
    "a.txt" mit dem Inhalt "Hello World"
    "b.txt" mit dem Inhalt "Felix Muster is watching you"
  7. Erstellen sie im Verzeichnis "Backup" ein Backup von ihrer bestehenden Datei "a.txt". Nennen sie diese Backup-Datei dann a.bck (Tipp: .CopyTo(..))
  8. Listen sie das aktuelle und alle Unterverzeichnisse in die Datei "c.txt"
  9. Verschieben sie die Datei "c.txt" in das Verzeichnis .\Backup
  10. Erstellen sie eine Liste mit allen Prozessen, die das Pattern "win" in Namen tragen. Diese Datei soll d.txt heissen.
  11. Löschen sie die Datei "d.txt"
  12. Verschieben sie alle im aktuellen Verzeichnis verbliebenen Text-Dateien in das Verzeichnis .\Backup. (Tipp: Move-Item))

2.8 Verzeichnis erstellen

Mit diesem Script soll ein Verzeichnis erstellt werden, sofern es nicht bereits existiert:

  • Eingabe mit folgendem Begleittext "Bitte Verzeichnisname eingeben"
  • Ausgabe, falls Verzeichnis noch nicht existiert: "Das Verzeichnis xxx wurde erstellt"
  • Sonst Ausgabe "Das Verzeichnis xxx existiert bereits"

2.9 Datei auswählen und kopieren

Nun sollen sie die in den vorangegangenen Aufgaben erlernten CmdLets in ein Skript einbauen. Erstellen sie den Powershell-Skript für die folgende Aufgabe:

  • Anzeige aller Dateien (keine Verzeichnisse) im aktuellen Verzeichnis
  • Auswahl des Filenamens, von dem eine Kopie erstellt werden soll.
  • Überprüfung, ob der angegebene Dateiname existiert, sonst Fehlermeldung und erneute Abfrage.
  • Bei erfolgreichem Kopieren: Erfolgsmeldung an den Benutzer mit Angabe des Filenamens der Kopie.
  • Wiederholung des ganzen Vorgangs für die Erstellung einer weiteren Kopie oder Abbruch (Programm verlassen)

2.10 Laufende Prozesse zählen

Es sollen mit diesem Skript alle auf dem PC laufenden Prozesse zusammengezählt und das Resultat in der folgenden Art ausgegeben werden: "Aktuell sind xxx Prozesse am laufen"
Tipp: Siehe Beispiele in der vorangegangenen Übung zu CmdLet. (Get-Process)

2.11 Höchste Prozesszeit anzeigen

Ausgehend von der vorangegangenen Aufgabe soll nun der Prozess mit der grössten TotalProcessorTime angezeigt werden.
Hinweis: Probieren sie die ProzessObjekt-Property TotalProcessorTime zuerst aus. Sie werden sehen, dass verschiedene Zeitangaben erscheinen. Welche ist für diese Aufgabe am sinnvollsten? Aufruf: TotalProcessorTime.yyyyyyy

2.12 Eventlog anzeigen

Um zu zeigen, dass Powershell fü Systemtechniker wirklich hilfreich sein kann, lesen wir nun das SYSTEM-Eventlog aus:

  • Angezeigt werden soll: LogName=System und EntryType=Error
  • Eingabe: Startdatum, ab welchem die Einträge gezeigt werden
  • Eingabe: Enddatum, bis zu welchem die Einträge gezeigt werden
  • Tipp: Get-EventLog. Start- und Enddatumseingabe sind eine kleine Knacknuss ;-)

2.13 Programmieraufgabe Dateiarchiv

Erstellen sie ein Powershell-Skript für die folgende Aufgabe: (Tipp: Fachbeitrag zu Powershell → Mit Dateien arbeiten → Eingabe der Pfadnamen...)

Variante-1

  • Der Benutzer gibt den Namen einer Datei an, die archiviert werden soll.
  • Das Programm prüft, ob die Datei existiert. Wenn Nein wird eine Fehlermeldung ausgegeben und das Programm beendet.
  • Der Benutzer gibt das Zielverzeichnis an, in das die Datei archiviert werden soll.
  • Das Programm prüft, ob das Zielverzeichnis existiert. Wenn Nein wird eine Fehlermeldung ausgegeben und das Programm beendet.
  • Das Programm prüft das Archivbit der Datei. Wenn es gesetzt ist, wird der Kopiervorgang ausgelöst und eine Vollzugsmeldung ausgelöst.  Falls das Archivbit nicht gesetzt ist, gibt das Programm die Meldung aus, dass die Datei nicht archiviert werden muss.

Testen sie ihr Programm gründlich. Spielen alle möglichen Fälle durch, auch den Fall "ArchivBit gesetzt" und "Archivbit nicht gesetzt".

Variante-2

  • Sie möchten ein komplettes Verzeichnis (keine Unterverzeichnisse) archivieren.
  • Der Benutzer gibt das Quellverzeichnis an.
  • Der Benutzer gibt das Zielverzeichnis an.
  • Falls das Zielverzeichnis nicht existiert, muss es zuerst erstellt werden.
  • Es werden alle Files vom Quellverzeichnis ins Zielverzeichnis kopiert.
  • Zusatzaufgabe1: Setzen sie das Archiv-Attribut der Originaldateien auf "Datei gesichert". (Tipp: Get-ItemProperty und Set-ItemProperty)
  • Zusatzaufgabe2: Archivieren sie nur die Dateien, wo das Archiv-Attribut gesetzt ist. Also nur diejenigen Dateien, die schon einmal archiviert und seither nicht angerührt worden sind.

2.14 Programmieraufgabe Prozessverwaltung

Erstellen sie ein Skript für die Prozessverwaltung. Die folgenden Aktionen sollen über ein Benutzermenü angeboten werden:

  • Anzeige aller laufenden Prozesse
  • Suche nach bestimmten Prozessen
  • Statusanzeige bzw. auf Wunsch Anzeige weiterer Eigenschaften eines bestimmten Prozesses
  • Anzeige des gesamten RAM-Verbrauchs aller Prozesse
  • Anzeige der CPU-Auslastung
  • Zusatzaufgabe: Logfile über RAM-Verbrauch und CPU-Auslastung erstellen

2.15 Programmieraufgabe Lokalen Benutzer mit Angaben aus einer EXCEL-Datei erstellen

Vorarbeiten:

  • Erstellen sie eine EXCEL-Datei mit dem Namen "Benutzer.xlsx".
  • Tragen sie in Tabelle1 Feld A1 den Namen "FelixMuster" ein.
  • Tragen sie in Tabelle1 Feld A2 das Passwort "geheim" ein.
  • Benennen sie die Tabelle anstatt wie bisher "Tabelle1" neu "Benutzer"

Teilaufgabe 1:

  • Erstellen sie einen Powershell-Skript, der die beiden Felder A1 und A2 aus der Tabelle "Benutzer.xlsx" ausliest und mit write-host anzeigt.

Teilaufgabe 2:

  • Erstellen sie einen Powershell-Skript, der aus den Angaben in Tabelle "Benutzer.xlsx" einen lokalen Windows-User erstellt.

Prüfen sie ihr Programm gründlich.


3. SW Testen

Ob HW, SW, Server-Installationen oder gar Haus- oder Brückenbau: Das Testen der Lieferung ist eine Arbeit, die ein hohes Mass an Konzentration, Aufmerksamkeit und Zuverlässigkeit verlangt.
Die Testfälle müssen vollständig, eindeutig und für einen Dritten zu 100% nachvollziehbar sein.

Beispiel:

Softwarelieferung SuperCalc V1.64
Testfall-1:  INPUT       1. Zahl = 11
             INPUT       2. Zahl = 2
             INPUT       Operationszeichen +
             OUTPUT-Soll Resultat=13
             OUTPUT-Ist  Resultat=9
             OK/NOK      NOK (Test nicht bestanden)
			 
So nicht:    INPUT       Zwei schöne, fette, positive Zahlen
             INPUT       Ein gültiges Operationszeichen dessen Funktion ich auch verstehe
             OUTPUT-Soll Das richtige Resultat, so hoffe ich
             OUTPUT-IST  Auch das richtige Resultat, so nehme ich an
             OK/NOK      Dann doch lieber OK und hey Alter, für Dich immer wieder gerne ;-)

3.1 Aufgaben zu Testen

A: Studium der Unterlagen

  • Lesen sie die Spezifikationen des zu testenden Programms BMI-Rechner. Studieren sie sich auch das beiliegende BMI_Funktionsmodell.
  • Suchen sie alle Funktionen (Funktionsüberdeckung)
  • Suchen sie nach den benötigten Eingabedaten und…
    bestimmen sie daraus die zu erwartenden Ausgabedaten (Eingabeüberdeckung) und bestimmen sie daraus die geeigneten Grenzwerte (Extremwerteingaben, Falscheingaben).
  • Suchen sie alle Ausgabedaten (Ausgabedaten)

(Theorie zu Kriterien für die Auswahl der Testfälle)

Wir werden für die SW-Lieferung BMI-Rechner (BMIV1_4.ps1) einen SW-Abnahmetest in Form eines Blackbox-Tests durchführen:

B: Engineeringarbeiten

Benutzen sie für die folgenden Arbeiten die beiliegende Vorlage "Testprotokoll.docx"

  • Erstellen sie eine Testbeschreibung
  • Erstellen sie die entsprechenden Testgruppen: BMI-Wert, Klassifizierung m, Klassifizierung w, Untergewicht bis Massive Adipositas etc.
  • Daraus stellen sie die einzelnen Testfälle und vermerken darin, welche Funktion bzw. Ausgabedaten sie testen. Beschreiben sie für die Testfälle das nötige Setup (Startbedingungen) für die Testgruppe.

C: Testarbeiten

  • Testen sie nun die SW-Lieferung BMI_V1_4.ps1 gemäss ihrer zuvor erstellten Testbeschreibung/Protokoll
    (BMI_V1_4.ps1 wurde temporär auf BMI_V1_4.txt umbenannt)
  • Ergänzen sie ihr Testprotokoll mit ihren Testresultaten.
  • Vergessen sie nicht den Testbericht am Ende des Testprotokolls auszufüllen und zu unterschreiben.
  • Geben sie das komplett ausgefüllte Testprotokoll termingerecht über Teams zur Beurteilung ab.

Die Ressourcen:

4. Summary

Wenn Sie alle bisherigen Aufgaben gelöst haben, sollten Sie nun in der Lage sein, mit Powershell...

  • ...verschiedene nützliche CMD-Lets auszuführen und Ausgabe in Dateien umzuleiten...
  • ...Aufgaben in eigenen Funktionen zusammenzufassen...
  • ...Mathematikfunktionen und Stringmanipulationen auszuführen...
  • ...Datum und Uhrzeit in Abläufe einzubeziehen...
  • ...laufende Prozesse zu untersuchen (z.B. Prozesslaufzeit)...
  • ...Eventlogs auszulesen...
  • ...Dateien und Verzeichnisse zu erstellen, archivieren und zu löschen...
  • ...lokale Benutzer einzurichten...
  • ...Excel-Dateien zu lesen und zu schreiben...
  • ...eine robuste Benutzereingabe zu erstellen...
  • ...sauber strukturierte, lesbare und styleguideskonforme (Datentypen, Namenskonzepte, Zeileneinrückung, Kommentare etc.) Skripte zu erstellen und dabei das formelle Testen nicht zu vergessen.

Wenn Sie Powershell-Experte werden wollen, bleiben Sie dran! Wir haben bisher erst ein bisschen an der "Oberfläche gekrazt" ;-)
Falls Sie die obigen Minimalziele noch nicht erreicht haben, wiederholen sie die Übungen, ändern oder ergänzen sie diese oder fragen sie beim Dozenten nach weiteren Aufgaben nach. An der Schule wird es weitere Module geben, die auf ihr jetzige Wissen aufbauen.

Halt, einen hab ich noch: Da wäre noch diese Zusatzaufgabe:

Bis jetzt haben wir immer textbasierte Benutzerschnittstellen erstellt. Das geht aber auch grafisch! (Soll in diesem Kurs aber nur "optional" sein)
(Hier finden sie eine Anleitung dazu!)
Erstellen sie einen Rechner mit robuster grafischer Eingabe, wo sie einen Winkel (Dezimalzahl) im Gradmass eingeben und davon den Sinuswert (Dezimalzahl) berechnen. Nutzen Sie die entspprechende Library.
(Beachten sie, dass bei der Sinusfunktion der Winkel im Bogenmass eingegebn wird. Dabei gilt: 360° entsprechen 2π. Der Sinus ist definiert von -∞ bis + ∞)


Leistungsbeurteilung zum Ausprobieren
Übung-1
Übung-2
Übung-3