Мы тестировали очень крупное «коробочное» десктопное приложение, с необъятным количеством строк кода на C++ под Windows.
В один прекрасный день, после трех сотого авто-теста, на сохранении пользовательского профиля, приложение просто крэшелось, иногда оставляя за собой дамп-файл крэша, а иногда и нет.
Интересно, что воспроизводилась ошибка только при прогоне авто-тестов, а руками ни один из самых крутых мануальщиков воспроизвести не мог.
Программисты, читая дамп файлы, не могли ничего понять:
крэш возникал при попытке чтения из ячейки памяти… которая не принадлежала приложению… из кода… который не могли найти в самом приложении.
В итоге, все дружно заявили: «Это все ваша автоматизация виновата», но баг решили держать открытым.
Заставили ещё гонять тесты на специальной, Debug версии… но как мы не старались, в Debug-билде ошибки не было.
Так продлилось ещё некоторое время, пока на стадии бета-тестирования, один из пользователей не сообщил о такой же проблеме при сохранении пользователя.
Тогда, программисты взяли тот же бил от пользователя… и написав API тест, который в цикле 500 раз сохранял пользователя, все таки воспроизвели проблему.
Собрали Debug версию того же билда. Прогнали тот-же тест… и…
не воспроизвели.
А причиной проблемы было ПО, защищающее приложение от копирования – Armadillo.
После сборки, приложение патчилось этим ПО.
Ошибка возникала в Armadillo, и он (оно) заодно и крэшал наше приложение.
Хорошо, что ошибку удалось исправить в момент беты.
Отозвать диски с релизом и простой полок в магазине обошёлся бы дорого.
С того времени, крэшам и непонятным ошибкам, которые иногда находила автоматизация, начали чуть-чуть больше прислушиваться.