2010-05-28 3 views
8

Ich führe eine ~ 300K LOC C# Legacy-Thick-Client-Anwendung mit einer Windows.Forms-Schnittstelle. Die App ist voller kleiner Fehler und Macken. Zum Beispiel habe ich kürzlich einen Fehler entdeckt, bei dem Benutzer, wenn sie Zellen in einem DataViewGrid bearbeiten und Tabulatoren (nicht klicken) und eine bestimmte Zelle ausgewählt lassen, die Ausnahme "Objektreferenz nicht auf Instanz eines Objekts setzen" erhält . Ich entdecke (oder erhalte einen Fehlerbericht) über so etwas Neues über jede Woche oder zwei. Ich hatte genug und dachte darüber nach, eine Art Fuzz-Test auf der Anwendung zu versuchen, um unentdeckte Probleme herauszufinden.Gibt es gute Tools oder Tipps zum Testen von Windows Forms-Anwendungen?

Wenn ich meine Fuzz-Tests selbst mache, würde ich davon ausgehen, dass ich zumindest in der Lage sein muss, Testsätze zu generieren, die Teile meiner App (Hauptfenster, FormX, FormY, FormZ, ...) unabhängig voneinander ausführen und versuche, Ereignisse in sie zu injizieren.

Ich habe versucht, nach geeigneten Tools dafür zu suchen, aber bis jetzt haben sich für Win Forms nichts einfallen lassen. (Es scheint jedoch keinen Mangel an Fuzz-Test-Tools für Web-Apps zu geben).

Irgendwelche hilfreiche Ideen?

Antwort

6

Ich mag immer die Idee des Gremlins-Testwerkzeugs, das auf Palm-Handhelds verwendet wird. Es erzeugte zufällige Antippen-Ereignisse, um Fehler bei der UI-Programmierung zu beseitigen. Sie könnten dasselbe in Ihrer App tun, indem Sie Millionen von Maus-Down- und Up-Events an zufälligen Orten generieren. Sie müssen PostMessage() aufrufen und Control.GetChildAtPoint() verwenden, um das Fensterhandle für die WM_LBUTTONDOWN/UP-Nachrichten zu generieren. Application.DoEvents() in Ihrer Testschleife, um die Ereignishandler zur Ausführung zu bringen.

+0

Das klingt nach einem guten Start. Ich fand diesen MSDN-Artikel, der eine Menge guter Informationen zu diesem Ansatz zu haben scheint: http://msdn.microsoft.com/en-us/magazine/cc163738.aspx –

+0

Ich denke, ich werde stattdessen mit diesem Ansatz gehen von einem der obskuren Fuzz-Test-Tools, die ich in meiner Suche gefunden habe. Wenn ich meinen eigenen Ansatz durch die Simulation solcher Ereignisse durchführe, könnte ich dies in mein bestehendes NUnit-Testframework integrieren. –

4

einige der Suche um das Netz, fand ich zwei Links mit nützlichen Tools und Informationen zu Fuzz-Prüfung WinForms-Anwendungen:

  • Monkey Fuzz Testing - Ein Alpha-Status-Tool auf Codeplex, die ziemlich nahe zu sein scheint, was Ich will. Von der Website: "MonkeyFuzz sendet in erster Linie zufällige Tastatur- und Mausereignisse an ein Programm, aber es kann die Aktionen aufzeichnen. Dadurch können sie für Regressionstests wiedergezeigt werden." Ich kann es ausprobieren und meine Ergebnisse melden.
  • A Paper on Random Testing von der University of Wisconsin CS-Abteilung. Dies ist 2000-2002 datiert, aber scheint einige gute Informationen zu enthalten, und links to tools sie in ihrer Studie verwendet. Allerdings scheinen die Tools mindestens 10 Jahre veraltet zu sein.
+0

https://github.com/SJMakin/FuzzWinForms –