Какие-нибудь хорошие инструменты или советы для нечеткого тестирования приложений 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 лет.