Какие-нибудь хорошие инструменты или советы для нечеткого тестирования приложений Windows форм?

Я поддерживаю унаследованное приложение толстого клиента на ~300K LOC C# с интерфейсом Windows.Forms. Приложение полно маленьких ошибок и причуд. Например, недавно я обнаружил ошибку, при которой, если пользователь изменяет и вкладывает (не щелкает) ячейки в DataViewGrid и оставляет выбранную ячейку выбранной, приложение получает исключение "Ссылка на объект не установлена ​​на экземпляр объекта"., Я обнаруживаю (или получаю сообщение об ошибке) что-то новое примерно каждую неделю или две. С меня хватит, и я думал о том, чтобы попробовать что-то вроде нечеткого тестирования приложения, чтобы попытаться найти неизвестные проблемы.

Если бы я проводил нечеткое тестирование самостоятельно, я бы предположил, что мне нужно, по крайней мере, иметь возможность создавать тестовые наборы, которые запускают части моего приложения (главное окно, FormX, FormY, FormZ, ...) и пытаются внедрить события в них.

Я пытался найти инструменты, подходящие для этого, но пока ничего не придумал для Win Forms. (Однако, похоже, нет недостатка в средствах нечеткого тестирования для веб-приложений).

Есть полезные идеи?

2 ответа

Решение

Мне всегда нравилась идея тестового инструмента Гремлинов, используемого на карманных компьютерах Palm. Он генерировал случайные события касания для устранения ошибок программирования пользовательского интерфейса. Вы можете сделать то же самое в своем приложении, генерируя миллионы событий нажатия мышью вверх и вниз в случайных местах. Вам потребуется P/Invoke PostMessage() и использовать Control.GetChildAtPoint() для генерации дескриптора окна для сообщений WM_LBUTTONDOWN/UP. Application.DoEvents() в вашем тестовом цикле, чтобы запустить обработчики событий.

В поисках по сети я нашел 2 ссылки с полезными инструментами и информацией о Fuzz-тестировании приложений WinForms:

  • Monkey Fuzz Testing - инструмент альфа-статуса в codeplex, который, кажется, очень близок к тому, что я хочу. С сайта: "MonkeyFuzz в первую очередь отправляет случайные события клавиатуры и мыши в программу, но может записывать действия по пути. Это позволяет воспроизводить их, что полезно для регрессионного тестирования)". Я могу попробовать и сообщить свои выводы.
  • Документ о случайном тестировании от факультета CS Университета Висконсина. Это датировано 2000-2002, но, похоже, содержит некоторую полезную информацию и ссылки на инструменты, которые они использовали в своем исследовании. Однако, похоже, что инструменты могут устареть как минимум на 10 лет.
Другие вопросы по тегам