Irgendwie habe ich das Gefühl, dass unsere Kollegen Jungprogrammierer der Meinung sind, sie schreiben irgend einen Code und der funktioniert dann auch genau so, wie sie es sich gedacht haben. Und wenn dem nicht so ist (also fast immer), wird im Forum ein Thread aufgemacht.
Genau so denke ich, dass die (Un-)Kollegen Lehrer ihren Schülern genau dies beibringen, weil sie selber nicht über die erforderlichen Kenntnisse und Erfahrungen verfügen.
Deswegen möchte ich hier mal ein paar Worte zur erfolgreichen Programmentwicklung schreiben.
Das Programmbeispiel hane ich aus diesem Thread von @faxe1008: genommen, den Pfad der Ausgabedatei habe ich in das Verzeichnis "C:\Temp\" verlegt, der Rest des Programms ist hier nicht von Belang.
Ich unterstelle mal dem Programm, dass eine MessageBox kommen soll, wenn das Programm up to date ist.
Beispielcode
Beim Start mit F5 passiert nix, keine MessageBox, klar, die Woche ist noch nicht vorbei.
Aber testen wollen wir die Funktionalität doch.
Und Wie?
OK, kleiner Trick, wir testen nicht den Ablauf einer Woche, wir ersetzen die Testbedingung durch
Allerdings müssen wir das nach dem Test wieder rückgängig machen.
Beim Start mit F5 passiert nix, keine MessageBox.
Oft genug wird in die Form_Load ein Code reingeschrieben, und das Programm bricht nach einer Exception die Abarbeitung dieser Form_Load ab, meldet aber diese Exception nicht
Zunächst muss jedem Programmierer klar sein, dass er jede einzelne geschriebene Programmzeile auch testen muss! Und das funktioniert nicht einfach mit F5 und fertig, sondern man muss sich davon überzeugen, dass das Programm auch an dieser Zeile vorbei gekommen ist.
Das Studio ist ein mächtiges Entwicklungswerkzeug mit vielen Funktionen, die uns das Fehlerfinden erleichtern.
Der Haltepunkt: Mit F9 kann man im Code einen Haltepunkt festlegen, wo dann beim Debug-Lauf ein Break durchgeführt wird.
Haltepunkt auf die 1. ausführbare Zeile der Form_Load und dann Schritt für Schritt ausgeführt bis entweder die Prozedur ordnungsgemäß beendet oder bis bei einer Exception die Prozedur verlassen wurde.
In unserem Beispiel wird die Form_Load bereits in Zeile 6 beendet.
Jou. Hilfe oder Thread im Forum oder mal nachsehen, was in C:\Temp steht - gefunden.
Eine nicht vorhandene Datei kann ich nicht mit
Haltepunkt weg und wieder F5 - nix, keine MessageBox.
Also wieder einen Haltepunkt auf diese Zeile. Diesmal stept er weiter bis zur Zeile 10.
Da setzen wir nun den nächsten Haltepunkt hin.
Mit der Maus über der Variable
Klar. Ein Leerstring lässt sich nicht in ein DateTime konvertieren.
MSDN, Forum, Erleuchtung:
Nun kommt beimm Start mit F5 die lang ersehnte MessageBox.
Nun müssen wir die
Dabei fällt uns auf:
Nur, wenn das Datum genau vor einer Woche war, kommt die MessageBox. Hier müssen wir nun überlegen, was wir eigentlich wollen.
1. Wenn die Datei nicht vorhanden ist, ist das Programm neu oder nicht (Philosophie-Frage, wurde ein altes Programm kopiert)? Dies soll hier nicht von Belang sein.
2. Wenn ich 2 Wochen krank oder in Urlaub war, bekomme ich keine Meldung.
Es ist also notwendig, nicht auf einen Zeitpunkt, sondern auf einen Zeitraum zu testen.
Das Programm ist also up to date, wenn der Eintrag jünger als eine Woche ist. Das müssen wir nun programmieren:
Um dies zu testen, öffnen wir die Datei mit dem Notepad und schreiben mal ein jüngeres und mal ein älteres Datum rein, um uns davon zu überzeugen, dass die Logik funktioniert.
OK.
Nun kann das nächste Problem in Angriff genommen werden.
Genau so denke ich, dass die (Un-)Kollegen Lehrer ihren Schülern genau dies beibringen, weil sie selber nicht über die erforderlichen Kenntnisse und Erfahrungen verfügen.
Deswegen möchte ich hier mal ein paar Worte zur erfolgreichen Programmentwicklung schreiben.
Das Programmbeispiel hane ich aus diesem Thread von @faxe1008: genommen, den Pfad der Ausgabedatei habe ich in das Verzeichnis "C:\Temp\" verlegt, der Rest des Programms ist hier nicht von Belang.
Ich unterstelle mal dem Programm, dass eine MessageBox kommen soll, wenn das Programm up to date ist.
VB.NET-Quellcode
- Imports System.IO
- Public Class Form1
- Dim updated As Boolean
- Dim lastupdate As DateTime
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Dim str As New FileStream("C:\Temp\lastupdate.txt", FileMode.Open)
- Dim reader As New StreamReader(str)
- Dim laststring As String = reader.ReadLine
- lastupdate = CDate(laststring)
- str.Close()
- If lastupdate.AddDays(7).Date = DateTime.Now.Date Then
- updated = True
- MsgBox("funkt")
- End If
- End Sub
- End Class
Aber testen wollen wir die Funktionalität doch.
Und Wie?
OK, kleiner Trick, wir testen nicht den Ablauf einer Woche, wir ersetzen die Testbedingung durch
True
, da ist sie stets erfüllt:Allerdings müssen wir das nach dem Test wieder rückgängig machen.
Beim Start mit F5 passiert nix, keine MessageBox.
Oft genug wird in die Form_Load ein Code reingeschrieben, und das Programm bricht nach einer Exception die Abarbeitung dieser Form_Load ab, meldet aber diese Exception nicht
Zunächst muss jedem Programmierer klar sein, dass er jede einzelne geschriebene Programmzeile auch testen muss! Und das funktioniert nicht einfach mit F5 und fertig, sondern man muss sich davon überzeugen, dass das Programm auch an dieser Zeile vorbei gekommen ist.
Das Studio ist ein mächtiges Entwicklungswerkzeug mit vielen Funktionen, die uns das Fehlerfinden erleichtern.
Der Haltepunkt: Mit F9 kann man im Code einen Haltepunkt festlegen, wo dann beim Debug-Lauf ein Break durchgeführt wird.
Haltepunkt auf die 1. ausführbare Zeile der Form_Load und dann Schritt für Schritt ausgeführt bis entweder die Prozedur ordnungsgemäß beendet oder bis bei einer Exception die Prozedur verlassen wurde.
In unserem Beispiel wird die Form_Load bereits in Zeile 6 beendet.
Jou. Hilfe oder Thread im Forum oder mal nachsehen, was in C:\Temp steht - gefunden.
Eine nicht vorhandene Datei kann ich nicht mit
FileMode.Open
öffnen. Also:Haltepunkt weg und wieder F5 - nix, keine MessageBox.
Also wieder einen Haltepunkt auf diese Zeile. Diesmal stept er weiter bis zur Zeile 10.
Da setzen wir nun den nächsten Haltepunkt hin.
Mit der Maus über der Variable
laststring
wird uns deren Wert angezeigt. Klicken wir auf die Reißzwecke, wird diese Anzeige fixiert.Klar. Ein Leerstring lässt sich nicht in ein DateTime konvertieren.
MSDN, Forum, Erleuchtung:
Nun kommt beimm Start mit F5 die lang ersehnte MessageBox.
Nun müssen wir die
If True
-Bedingung wieder zurückeditieren.Dabei fällt uns auf:
Nur, wenn das Datum genau vor einer Woche war, kommt die MessageBox. Hier müssen wir nun überlegen, was wir eigentlich wollen.
1. Wenn die Datei nicht vorhanden ist, ist das Programm neu oder nicht (Philosophie-Frage, wurde ein altes Programm kopiert)? Dies soll hier nicht von Belang sein.
2. Wenn ich 2 Wochen krank oder in Urlaub war, bekomme ich keine Meldung.
Es ist also notwendig, nicht auf einen Zeitpunkt, sondern auf einen Zeitraum zu testen.
Das Programm ist also up to date, wenn der Eintrag jünger als eine Woche ist. Das müssen wir nun programmieren:
Um dies zu testen, öffnen wir die Datei mit dem Notepad und schreiben mal ein jüngeres und mal ein älteres Datum rein, um uns davon zu überzeugen, dass die Logik funktioniert.
OK.
Nun kann das nächste Problem in Angriff genommen werden.
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!