Журнал "Программная инженерия"
Теоретический и прикладной научно-технический журнал
ISSN 2220-3397
Номер 4 2023 год
Компиляторы языков программирования — сложнейшие программные системы, от качества которых напрямую зависит качество создаваемых с их помощью программ. Поэтому предъявляются повышенные требования к таким характеристикам качества, как функциональная пригодность, надежность, производительность, безопасность и т. д. Для обеспечения качества используются различные средства: пользовательское и ручное тестирование, средства для автоматического поиска ошибок. При этом очень часто возникают ситуации, когда одна и та же ошибка обнаруживается многократно, а тестовые примеры, на которых она проявляется, друг на друга совсем не похожи. Такие тестовые примеры называют дубликатами, их определение — актуальная и острая проблема, так как их ручной поиск требует больших человеческих ресурсов. Алгоритмы автоматического поиска дубликатов помогли бы значительно упростить процесс поддержки компилятора. Основная идея представленного в статье подхода для поиска дубликатов заключается в том, что причины возникновения одинаковых ошибок находятся в одном и том же месте исходного кода компилятора. Для поиска этого места используется метод генерации программ-свидетелей. Он состоит в том, что для каждой тестовой программы, содержащей ошибку, происходит генерация похожих программ, которые ее не содержат. После этого вычисляются метрики, основанные на покрытии исходного кода компилятора, и формируется список файлов, которые потенциально содержат причину неисправности компилятора. Если эти списки для двух тестовых программ похожи с точки зрения метрики близости, то тестовые программы считаются дубликатами. Предлагаемый подход был разработан и реализован для компилятора языка программирования Kotlin. Тестирование показало применимость предлагаемого подхода для решения задачи поиска дубликатов ошибок компиляторов языков программирования.