В Массачусетском технологическом институте разработали систему символьного выполнения программ, пользующихся готовыми библиотеками. При символьном выполнении выясняется, какие входные данные заставляют выполниться каждую из возможных ветвей кода; если программа пользуется функциями из внешних библиотек, количество вариантов ветвления возрастает настолько, что обходить их все становится непозволительно затратно. Чтобы избежать этого и упростить работу символьных анализаторов, для популярных библиотек вручную разрабатывают готовые модели, а это кропотливый и трудоемкий процесс.

Система из МТИ, получившая название Pasket, автоматически строит модели внешних библиотек. Как объясняют разработчики, помогает при этом то, что как они выяснили, взаимодействия между программой и библиотекой приблизительно отвечают одному из четырех распространенных шаблонов проектирования; анализируя след программы, Pasket выбирает наиболее подходящий шаблон.

По словам разработчиков, когда система сгенерировала модель библиотеки графических элементов Java Swing, для которой уже существует построенная за много лет вручную, синтезированная показала ряд недоработок в созданной людьми.

Поделитесь материалом с коллегами и друзьями