У нас есть приложение с сотнями возможных действий пользователя, и мы думаем, как улучшить тестирование на утечку памяти.
В настоящее время это происходит следующим образом: при ручном тестировании программного обеспечения, если выясняется, что наше приложение потребляет слишком много памяти, мы используем инструмент памяти, находим причину и исправляем ее. Это довольно медленный и неэффективный процесс: проблемы обнаруживаются поздно и зависит от доброй воли одного разработчика.
Как мы можем это улучшить?
А какая платформа? Существуют инструменты статического анализа, инструменты профилирования памяти и другие доступные методы, но без каких-либо подробностей о вашей реализации трудно дать вам полезный ответ.





В моей компании мы запрограммировали бесконечный путь действий для нашего приложения. Сборщик мусора java должен очистить все неиспользуемые карты, список и что-то в этом роде. Итак, мы позволяем приложению начинать с бесконечного пути действий и смотреть, растет ли объем используемой памяти.
Чтобы проверить, какие поля не удаляются, вы можете использовать JProfiler для Java.
На каком языке?
Я бы использовал такой инструмент, как Valgrind, попытался бы полностью испытать программу и посмотреть, что она сообщает.
первая линия защиты:
вторая линия защиты:
Если вы работаете с неуправляемым языком (например, C / C++), вы можете эффективно обнаружить большую часть утечек памяти, взломав функции управления памятью. Например, вы можете отслеживать все выделения / освобождения памяти.
Мне кажется, что суть проблемы не столько в поиске утечек памяти, сколько в знании того, когда их проверять. Вы говорите, что у вас много действий пользователя, но не говорите, какие последовательности действий пользователя имеют значение. Если вы можете генерировать осмысленные последовательности случайным образом, я бы сильно поспорил в пользу случайного тестирования. На случайных тестах вы бы измерили
gcov или valgrind)valgrind)Под «охватом действий пользователя» я подразумеваю такие утверждения:
Если это не так, то вы можете спросить, для какой доли пар A и B это правда.
Если у вас достаточно циклов ЦП, вы, вероятно, также выиграете от запуска valgrind или другого инструмента проверки памяти либо перед каждой фиксацией в репозитории исходного кода, либо во время ночной сборки.
Автоматизируйте!
Замените новый и Удалить своими пользовательскими версиями и регистрируйте каждый акт распределения / освобождения.
Если говорить в целом (не о тестировании, а о том, чтобы бороться с проблемой в ее происхождении), то смарт-указатели помогают избежать этой проблемы. К счастью, стандарт C++ 11 предоставляет новые удобные классы интеллектуальных указателей (shared_ptr, unique_ptr).
На каком языке ты говоришь? Это язык со сборкой мусора, такой как Java или Perl, или язык без сборщика мусора, такой как C или C++?