#### Контекст
Symbolic execution является важной техникой для проверки программ, позволяющей изучать различные пути выполнения программы, используя символьные значения в качестве входных данных. Однако, эта техника сталкивается с ограничениями при столкновении с внешними функциями, такими как собственные методы или библиотеки, которые не входят в базовую программу. Традиционные методы прибегают к дополнительному контексту, дорогостоящим SMT-решателям или ручным вмешательствам, чтобы описать эти функции с помощью символьных макетов. Это создает проблемы в ситуациях, когда требуется автоматизированный подход для обхода этих ограничений. Мы предлагаем новую методику, которая автоматически генерирует символьные макеты для внешних функций во время символьного выполнения, используя генетическое программирование.
#### Метод
Метод AutoStub включает в себя несколько основных этапов. Когда символьный выполнятель сталкивается с внешней функцией, AutoStub начинает генерировать тренировочные данные, выполняя функцию на случайно сгенерированных входных значениях и записывая результаты. Затем, генетическое программирование использует эти данные для вывода выражений, которые приближаются к поведению функции. Эти выражения являются символьными макетами, которые могут быть использованы в символьном выполнении, не требуя дополнительных усилий от человека. Этот подход позволяет улучшить процесс тестирования, обойдя ограничения, связанные с внешними функциями.
#### Результаты
Мы провели ряд экспериментов, используя различные программные системы, чтобы оценить эффективность AutoStub. Наши результаты показали, что метод способен аппроксимировать внешние функции с точностью более 90% для 55% оценок, и может выявлять специфичные для языка функции, которые могут вызывать серьезные ошибки во время тестирования. Помимо этого, мы проверили, насколько эти символьные макеты позволяют расширить область программных путей для тестирования и повысить точность выявления ошибок.
#### Значимость
AutoStub может быть применен в различных сферах, где требуется автоматизированное тестирование программного обеспечения, включая безопасность, проверку соответствия стандартам и отладку. Основное преимущество заключается в том, что он упрощает процесс тестирования, уменьшая необходимость вручную создавать макеты, что может быть очень времязатратным и неточным. Этот подход также может обнаруживать скрытые ошибки и edge cases, которые в противном случае оставались бы незамеченными. Мы предлагаем, что развитие таких автоматизированных методов может привести к значительным улучшениям