Разработка алгоритмов и моделирование динамической типизации в программах для технических систем тема диссертации и автореферата по ВАК РФ 05.13.18, кандидат наук Старцев, Евгений Владимирович

  • Старцев, Евгений Владимирович
  • кандидат науккандидат наук
  • 2015, Челябинск
  • Специальность ВАК РФ05.13.18
  • Количество страниц 122
Старцев, Евгений Владимирович. Разработка алгоритмов и моделирование динамической типизации в программах для технических систем: дис. кандидат наук: 05.13.18 - Математическое моделирование, численные методы и комплексы программ. Челябинск. 2015. 122 с.

Оглавление диссертации кандидат наук Старцев, Евгений Владимирович

Оглавление

ВВЕДЕНИЕ

1 Применение промежуточных представлений в статическом анализе программ

1.1 Статический анализ

1.2 Промежуточные представления

1.3 Требования к промежуточному представлению

1.4 Используемые представления в существующих инструментах статического анализа и компиляции

1.4.1 Абстрактное синтаксическое дерево

1.4.2 GIMPLE

1.4.3 LLVMIR

1.4.4 SSA

1.4.5 Представления Bauhaus

1.4.6 Представление Malpas

1.5 Характеристика существующих промежуточных представлений в соответствии с требованиями

1.6 Разрабатываемое представление

1.7 Объектно-ориентированные языки программирования

1.8 Математическая модель классового представления

1.8.1 Связи наследования

1.8.2 Связи агрегации

1.9 Универсальное классовое представление

2 Особенности статического анализа динамических языков

2.1 Динамические языки программирования

2.2 Проблема извлечения классового представления в динамических языках

2.3 Существующие решения

2.3.1 Алгоритм Хиндли-Милнера

2.3.2 Алгоритм Декартова произведения

2.3.3 Заключение по существующим алгоритмам вывода типов

2.3.4 Существующие инструменты вывода типов для Python

2.3.5 Pylint

2.3.6 Pysonar

2.4 Предлагаемая методика вывода типов

2.5 Описание базовой модели типов

2.5.1 Характеристическая сигнатура

2.5.2 Предлагаемая модель типов в динамических языках программирования

2.6 Численная оценка результатов извлечения типов

2.7 Применение нечетких множеств

2.7.1 Ограничения базовой модели

2.7.2 Математическая модель типов в динамических языках программирования на основе нечетких множеств

2.7.3 Функция принадлежности «capacity»

2.7.4 Функция принадлежности «frequency»

2.7.5 Пример применения функций принадлежности алгоритмом вывода типов

2.8 Применение динамического анализа для проверки адекватности математической модели

2.8.1 Результаты для программы logilab

2.8.2 Результаты для программы pylint

2.8.3 Результаты для программы bazaar

2.8.4 Выводы

2.9 Результаты для различных значений порога

3 Разработанный комплекс программ для статического анализа

3.1 Обзор разработанных инструментов анализа

3.2 Обработка XML

3.3 Извлечение представлений UCR и UCFR для Python

3.4 Реализация методики вывода типов при генерации промежуточных представлений для языка Python

3.5 Связывание представлений

3.6 Инструменты визуального анализа

3.6.1 Визуальное представление диаграммы классов

3.7 Анализ иерархии наследования на предмет корректного выделения методов в суперклассах

3.8 Технология выполнения срезов представлений

3.8.1 Срез на основе одного представления

3.8.2 Срез на основе нескольких представлений

3.8.3 Реализованные срезы

3.8.4 Срез наследования представления UCR

3.8.5 Срез вызовов представления UCFR

3.8.6 Срез классов представления UCFR

3.8.7 Срез создаваемых объектов представления UCR

Заключение

Список сокращений и условных обозначений

Список литературы

Список иллюстративного материала

Приложения

Исходный код программного модуля для извлечения универсального " классового представления из исходного кода на языке программирования Python

Рекомендованный список диссертаций по специальности «Математическое моделирование, численные методы и комплексы программ», 05.13.18 шифр ВАК

Введение диссертации (часть автореферата) на тему «Разработка алгоритмов и моделирование динамической типизации в программах для технических систем»

ВВЕДЕНИЕ

Актуальность темы исследования

Значение программного обеспечения в наши дни достаточно велико. Объем существующего программного кода во всем мире превышает миллиарды строк. Это не только коммерческие разработки, исходный код которых - это закрытая собственность корпораций, но и программное обеспечение с открытым программным кодом(Ореп Source)[99]. Доступ к исходному коду таких программ может получить любой желающий. Сложно оценить объем кода в закрытых коммерческих разработках, но объем исходного кода ядра Linux[94] - одного из наиболее известных open-source продуктов превышал 12 миллионов строк уже в 2009 г., что говорит о гигантском объеме разработок. Исходный код крупных коммерческих разработок, таких как операционная система Windows[105] от Microsoft последних версий может содержать еще больший объем исходного кода.

В таких условиях хочется разрабатывать более качественное ПО в меньшие сроки, в частности с использованием существующего программного кода — дополняя и расширяя его функциональность. Многие современные программные комплексы (в особенности open-source) специально разработаны для использования в других проектах в виде библиотек, предоставляющих огромный объем функциональности. Кроме того такие большие объемы исходного кода требуют постоянной поддержки со стороны разработчика. В любых больших проектах могут иметься ошибки, которые требуют как можно более быстрого обнаружения и устранения, особенно в условиях использования данного кода, многими другими проектами. Простое тестирование и отладка программ уже не могут удовлетворить программиста при разработке крупного проекта, к примеру, для тестирования могут потребоваться тысячи и десятки тысяч сценариев исполнения программы.

Все большую значимость приобретает такая методика исследования программ как статический анализ. Статический анализ программ - это анализ программ без их исполнения, по исходному коду этих программ. С использованием статического анализа можно выполнять поиск определенного типа ошибок в исходном коде программ[28], выполнять реинжениринг и реверс-инжениринг программ[22] и выполнять верификацию программного обеспечения[88].

Статический анализ основывается на представлении исходного кода в виде некоторой модели - промежуточного представления, надо которым выполняется анализ. Практически все существующие статические анализаторы за редким исключением используют в анализе модель исходного кода, жестко привязанную к входному языку, что ограничивает их применение, потому что реализованный метод анализа неприменим к программам, написанным на других языках программирования. Например можно отметить инструменты cppcheck[41] или FindBugs[48], предназначенные для анализа программ на С++ и Java, соответственно. В таких условиях, методы анализа не могут быть использованы повторно, что затрудняет их развитие. По этой причине имеется множество инструментов статического анализа, решающих похожие задачи для разных языков программирования. В частности, существует немало инструментов поиска ошибок для разных языков программирования. Набор типовых ошибок, которые может находить каждый конкретный инструментарий, зачастую уникален. Многие типы ошибок характерны для конкретного языка, но также существует множество типовых ошибок, характерных для различных языков программирования, работу с которыми каждый инструмент реализует по своему (работа с не инициализированными данными, выход за границы массива и пр.). Как правило в роли анализируемой модели исходного кода

выступает абстрактное синтаксическое дерево[3]. Данное представление жестко привязано к грамматике языка, для которого оно строится, что и затрудняет применение алгоритмов анализа этого представления для других языков. Решением позволяющим преодолеть узкую ориентированность современных средств статического анализа может выступить использование универсальных представлений, т. е. представлений, поддерживающих более одного входного языка. Благодаря этому можно будет перенести акцент на реализацию более совершенных алгоритмов анализа, каждый из которых будет доступен сразу для группы входных языков, которые поддерживает универсальное промежуточное представление. Это одна из главных особенностей разработанных в рамках диссертационного исследования инструментов статического анализа, что определяет актуальность разрабатываемого комплекса программ.

Кроме того за время своего развития для таких популярных и имеющих длительную историю языков как С или С++ появилось немало инструментов статического анализа. Но с 90-х годов стали получать распространение динамические языки программирования[96], такие как Python[102] или Ruby[87]. Их основным отличием является то, что разработчику не требуется указывать типы данных переменных в исходном коде программ. Многие разработчики переходят на использование таких языков и количество программ написанных на этих языках стремительно растет[79] из-за простоты их использования. Динамическим языкам свойственно то, что типы объектов в программе не могут быть в явном виде извлечены из исходного текста программ, как в языках C/C++ или Java, они могут быть известны только на момент исполнения программы. Для разработчиков это предоставляет новые широкие возможности, недоступные в языках со статической типизацией. С другой стороны значительно затрудняется

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

Степень разработанности темы исследования

Область статического анализа берет свое начало с 70-х годов XX века, благодаря исследованиям Кусо на тему абстрактной интерпретации в статическом анализе[40] и систем верификации программ[39], а также Аллена - на тему анализа потока управления[32] и данных[33] в компиляции и статическом анализе. Одним из первых инструментов статического анализа является утилита lint[59] для статического анализа программ на языке С.

Использование статического анализа для поиска ошибок в исходном коде программ представляет большой пласт исследований. Одна из первых работ -исследование Венделя[103]. В этой области можно отметить работы Дамнса[43] и Остервейла[76][Ю4], Аветисяна[1][12][25], Ицыксона[13].

На основе статического анализа может быть выполнена верификация -доказательство корректности программы с той или иной точки зрения. Можно отметить работы Остервейла[72], Маджумдара[58], Чернова[8], Ицыксона[14]. В работе Бейера[4] затронут вопрос верификации исходного кода драйверов для операционной системы Linux, также с этой темой связаны работы Мутилина, Новикова, Хорошилова[19][20].

Вопросы реверс-инжинеринга и реинжинеринга затронуты в работах Кошке[62][61], Ицыксона[2][15].

Среди исследований, посвященных построению инструментов анализа для нескольких языков можно выделить работы Кошке[60] и Церански[44] -исследователей из проекта Bauhaus[35].

Область статического анализа программ на динамических языках программирования тесно связана с областью вывода типов в языках программирования, в которой можно отметить работы Хиндли[57], Милнера[69], Дамаса[42], Пальцсберга и Шварцбаха[78], Агесена[31] и Бронштейна[6].

Цели и задачи

Основной целью исследования является разработка комплекса программ для статического анализа исходных текстов на динамических языках программирования, поддерживающих объектно-ориентированную парадигму программирования с использованием нескольких универсальных промежуточных представлений.

Для достижения поставленной цели сформулированы следующие задачи исследования:

• Провести исследование области статического анализа исходных текстов на динамических языках программирования.

• Разработать требования к промежуточному представлению для задач извлечения информации об особенностях программ для дальнейшего исследования человеком.

• Разработать математическую модель промежуточного представления для статического анализа объектно-ориентированных языков с динамической типизацией.

• Разработать промежуточное представление на основе предложенных

требований и разработанной математической модели.

• Разработать математическую модель типов в языках с динамической типизацией.

• Разработать численные методы для проверки адекватности предложенной математической модели типов для языка программирования Python.

• Разработать программный комплекс для статического анализа, включающий в себя генераторы промежуточных представлений для языка программирования Python.

Научная новизна

1) Разработана математическая модель универсального классового промежуточного представления (UCR), позволяющая анализировать классы и связи между ними в объектно-ориентированных языках программирования.

2) Построена новая математическая модель типов данных - для типов, являющихся классами исследуемого проекта, написанного на языке динамического типа. Предложены численные методы формализующие вывод типов на основе данной модели.

3) Предложен численный метод проверки адекватности математической модели типов на основе данных натурного эксперимента.

4) Разработаны математические модели и предложены численные оценки, позволяющие дать характеристику исследуемым проектам на основе статического анализа с использованием универсальных промежуточных представлений.

Теоретическая и практическая значимость работы

1) Практическая реализация генерации универсального классового представления (UCR) и универсального представления потока управления(иСРЯ) из исходного кода на языке программирования Python.

2) Программная реализация алгоритма и численного метода вывода типов на основе предложенной математической модели.

3) Реализованы инструменты визуального анализа архитектуры наследования на основе универсального классового представления.

4) Программная реализация методики срезов представлений для универсального классового представления(иСЯ) и универсального представления потока управления(11СРК). Реализованы срезы UCR И UCFR (в том числе при совместном использовании представлений); срез представления UCR на основе отношений наследования; срез представления UCFR на основе связей вызовов между функциональными блоками; срез представления UCFR на основе критериев представления UCR (срез классов UCFR); срез представления UCR на основе критериев представления UCFR (срез создаваемых объектов UCR).

1) Реализован численный алгоритм проверки адекватности математической модели типов в динамических языках программирования на основе динамического анализа программ на языке программирования Python.

Методология и методы исследования

При решении задач использовался математический аппарат теории множеств и теории нечетких множеств. Основные результаты

диссертационной работы получены с использованием методов объектно-ориентированного анализа, проектирования и программирования.

Положения, выносимые на защиту

1) Разработана математическая модель - для описания программ, написанных на объектно-ориентированных языках программирования, и универсальное промежуточное представление на ее основе.

2) Разработана математическая модель типов, являющихся классами исследуемого проекта для языков с динамической типизацией. На основе данной модели реализована методика вывода типов для языка программирования Python.

3) Предложен численный алгоритм для вывода типов на основе предложенной модели с использованием нечетких множеств.

4) Предложен численный метод проверки адекватности модели типов на основе данных натурного эксперимента. Выполнена реализация такой проверки на основе вычислительного эксперимента с использованием динамического анализа для языка программирования Python.

5) Разработан программный комплекс для выполнения статического анализа, включающий в себя генераторы промежуточных представлений для языка Python, инструменты для выполнения срезов промежуточных представлений на основе нескольких критериев и средства визуализации результатов анализа.

Степень достоверности и апробация результатов

Обоснованность и достоверность полученных результатов обусловлена математической строгостью методов исследования и корректным использованием математического аппарата, адекватностью рассматриваемых моделей. Все полученные в данной работе результаты являются новыми.

Результаты диссертационной работы докладывались' и обсуждались на седьмой международной конференции «Свободное программное обеспечение в высшей школе» (Переславль-Залесский, 2012 г.); на семинаре научно-Практического Центра СКВ и ОПО ФГОУ ВПО «ЧелГУ» (Челябинск, 2012 г.); на второй международной научно-практической конференции «FOSS Lviv-2012» (Украина, Львов, 2012 г.); на восьмой международной конференции «Linux Vacation / Eastern Europe» (Беларусь, Гродно, 2012 г.); на восьмой конференции «Свободное программное обеспечение в высшей школе» (Переславль-Залесский, 2013 г.); на научно-практической конференции «Тверские интернет технологии» (Тверь, 2013 г.); на девятой конференции «Свободное программное обеспечение в высшей школе» (Переславль-Залесский, 2014 г.); па семинаре сектора визуализации ОСО ИММ УрО РАН (Екатеринбург, июнь и октябрь 2014 г.); на семинаре кафедры системного программирования ЮУрГУ (Челябинск, ноябрь, 2014); на семинаре кафедры компьютерной безопасности и прикладной алгебры ЧелГУ (Челябинск, декабрь, 2014); на научном семинаре по теории операторов и дифференциальным уравнениям под руководством профессора В.Е. Фёдорова на кафедре математического анализа ЧелГУ.

Все результаты получены лично автором. Из совместных публикаций в работу включены только результаты, которые получены лично соискателем. В работе [110] диссертанту принадлежат основные идеи и результаты. В статье [109]диссертантом написаны раздел «XML-форма классового представления» и последующие разделы. В статье [118] диссертантом написаны разделы «Инструменты C/C++» и «Инструменты Python». В статье [117] диссертантом написаны разделы посвященные классификации представлений по количеству входных языков раздел «Языки виртуальных машин или упрощенные версии других языков». В статье [108] диссертантом написан

разделы, посвященные построению срезов представления потока управления и построению срезов классового представления. В статье [107] диссертантом написан раздел «Получение промежуточных представлений». В тезисах докладов[116] диссертантом подготовлены материалы на с. 83, в тезисах докладов[115] - на с.54-55, в тезисах докладов[114] - на с. 48-49, в тезисах докладов[113] - на с. 38-39 и 40, в тезисах докладов[112] - на с. 167, в тезисах докладов[111] - на с.54-56.

Структура диссертации

Работа состоит из введения, трех глав, заключения и списка литературы. Работа содержит 125 страниц машинописного текста и библиографический список из 118 наименований.

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

Во второй главе затронуты особенности статического анализа динамических языков программирования. Дано определение динамическим языкам программирования, на которые ориентированы разрабатываемые инструменты анализа. Дается характеристика проблемы, связанной с отсутствием аннотаций типов в таких языках. Указывается на необходимость преодоления этой проблемы для извлечения связей агрегации для генерации универсального классового представления из исходных текстов на языках с

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

В третьей главе дается характеристика разработанному комплексу программ для статического анализа. Представлено описание средств получения промежуточных представлений для языка программирования Python, а также особенностей реализации вывода типов на основе предложенной ранее математической модели. Дается характеристика инструментария для получения визуального представления диаграммы классов из универсального классового представления программы. Представлен подход к статическому анализа на основе выполнения срезов промежуточных представлений исходного кода программ. Описаны разработанные инструменты выполнения срезов представлений: среза наследования представления UCR, срез вызовов представления UCFR, срез классов представления UCFR, срез создаваемых объектов представления UCR.

1 Применение промежуточных представлений в статическом

анализе программ

1.1 Статический анализ

Разработанный в рамках диссертационного исследования комплекс программ выполняет статический анализ. Статический анализ - это анализ программ по их исходному коду, без реального исполнения этих программ, в противоположность динамическому анализу[10](тестирование, отладка и пр.). Данная методика обладает большими преимуществами, т. к.:

• Такой анализ не требует наличия системы исполнения и подготовки сценариев исполнения. Это позволяет выполнять анализ для различных целевых архитектур и не сталкиваться с проблемами развертывания системы исполнения программ

• Позволяет анализировать проект целиком. При тестировании исполнения программ очень сложно покрыть тестами весь исходный код программы и проанализировать все участки кода программ

1.2 Промежуточные представления

Статический анализ, как правило, базируется на использовании некоторого представления, получаемого из исходного кода, над которым выполняется непосредственный анализ.

Промежуточное представление программы [92] - это набор машинных данных получаемый из исходного кода программы над которым выполняется непосредственный анализ. Как правило такое представление получается в результате синтаксического анализа[24]. Данный подход берет свое начало из

области компиляции[3], где извлечение представления из исходного кода является первым этапом, дальнейшие оптимизации и другие преобразования для генерации машинного кода выполняются над ним [16]. Подход к использованию промежуточных представлений отражен на рисунке 1. Как видно статический анализ отличается от компиляции только целями, с которыми обрабатывается промежуточное представление, полученное из исходного кода. В статическом анализе от данного представления напрямую зависит насколько эффективным будет анализ на его основе, т. к. после извлечения представления все манипуляции производятся над ним и повторных обращений к исходному коду не выполняется.

Исходный код программы на [ ЯП

Промежуточное представление

Компиляция оптимизация

кодогенерация

Статический анализ поиск ошибок

визуализация

Рисунок 1 - Применение промежуточных представлений в компиляции и статическом анализе

Очень важно выработать требования к представлению для дальнейшего анализа в соответствии с задачами. Основными направления являются задачи извлечения информации для дальнейшего анализа человеком. Целевыми

языками программирования являются языки с динамической типизацией, поддерживающие объектно-ориентированную парадигму, такие как Python, как уже было отмечено инструменты статического анализа для таких языков развиты слабо.

1.3 Требования к промежуточному представлению

1. Представление предназначено для анализа объектно-ориентированных языков программирования. Широко распространенные языки программирования с динамической типизацией, такие как Python и Ruby поддерживают данную парадигму программирования. Представление должно обеспечивать возможность анализа таких сущностей как классы и связи между ними без выполнения дополнительных преобразований представления.

2. Возможность использовать представление для описания программ на нескольких входных языках (универсальное представление). Представление должно обеспечивать возможность извлечения представления для нескольких языков программирования без изменения формата полученного представления. Как уже было указано современные инструменты анализа в основном ориентированы на конкретный язык, что затрудняет применение типовых методик анализа для нескольких входных языков.

3. Возможность сохранения представления в виде файла для дальнейшего анализа, без повторного извлечения представления из исходного кода. Генерация представления зачастую занимает много времени. Необходима возможность проводить анализ без затрат на генерацию представления. Кроме того это будет удобно при отсутствии доступа к исходному коду. Для анализа достаточно иметь лишь его

промежуточное представление, которое можно сохранить и передать.

4. Формат пригодный для восприятия человеком. Формат должен обеспечивать возможность ручной обработки - исследования представления человеком, без привлечения машинной обработки. В таких условиях некоторые простые цели анализа могут быть достигнуты вообще без разработки инструментов и реализации алгоритма машинного анализа.

5. Должна сохраняться связь с исходным текстом, для возможности навигации от сущностей представления к соответствующим участкам исходного кода. Основным результатом анализа должны быть предпосылки для внесения изменений в исходный код (устранение ошибок, рефакторинг и т. д.), в этих условиях навигация к исходному коду является обязательной.

6. Уникальная идентификация элементов представления. Это необходимо для избежания коллизий любого рода при анализе.

1.4 Используемые представления в существующих инструментах статического анализа и компиляции

Область статического анализа тесно переплетается с областью компиляции, поэтому важно отметить представления используемые в области компиляции, которые также получили распространение или могут быть применены при статическом анализе исходного кода программ. К таким представлениям относятся:

1. Абстрактное синтаксическое дерево[3]

2. GIMPLE[51]

3. LLVM IR[93]

4. SSA[45]

Среди современных статических анализаторов можно отметить несколько, использующих собственные промежуточные представления исходных текстов для анализа. Можно отметить следующие инструменты:

1. Bauhaus project[35] - совместная разработка университетов Штутгарта и Бремена(Германия). Проект занимается задачами реверс-инжиниринга.

2. Malpas[67] - коммерческая разработка для анализа и верификации программ.

1.4.1 Абстрактное синтаксическое дерево

Абстрактное синтаксическое дерево или AST (от англ. Abstract syntax tree) - это конечное, помеченное, ориентированное дерево, в котором внутренние вершины сопоставлены с (помечены) операторами языка программирования, а листья — с соответствующими операндами. Таким

образом листья являются пустыми операторами и представляют только переменные и константы. Большое количество инструментов статического анализа работает с абстрактными синтаксическими деревьями. В [73] представлен инструмент для анализа изменений в программе на языке С, на основе изменений абстрактных синтаксических деревьев. Также можно отметить работу [91], посвященную исследованию потока управления и потока данных в программах на основе анализа их абстрактных синтаксических деревьев.

Данное представление основывается на грамматике входного языка и, соответственно, привязано к конкретному языку программирования, для которого построено, AST одного и того же формата не может быть использовано для представления программ, написанных на разных языках программирования.

1.4.2 GIMPLE

Данное представление используется в наборе компиляторов GCC. После получения абстрактных синтаксических деревьев для каждого из входных языков формируется промежуточное представление, которое представляет из себя независимое от входного языка представление функций в виде деревьев. На его основе формируется трехадресное представление, разбиения всех выражений на составляющие выражения не более чем с 3 операндами. Там где необходимо при разбиении вводятся временные переменные для вычисления сложных выражений. Структуры потока управления (такие как условные операторы, циклы) приводятся к форме с использованием оператора безусловного перехода goto. Представление используется в инструментах анализа на базе GCC. Одно из интересных исследований в области статического анализа с использованием GIMPLE[55] затрагивает

Похожие диссертационные работы по специальности «Математическое моделирование, численные методы и комплексы программ», 05.13.18 шифр ВАК

Список литературы диссертационного исследования кандидат наук Старцев, Евгений Владимирович, 2015 год

Список литературы

1. Аветисян, А. Механизмы расширения системы статического анализа Svace детекторами новых видов уязвимостей и критических ошибок / А. Аветисян, А. Бородин // Труды ИСП РАН. - 2011. - Т. 21. - С. 39-54.

2. Ахин, М.Х. Слайсинг над деревьями: метод обнаружения разорванных и переплетенных клонов в исходном коде программного обеспечения / М.Х. Ахин, В.М. Ицыксон // Моделирование и анализ информационных систем. -2012. - Т. 19, № 6. - С. 69-78.

3. Ахо, А. Компиляторы. Принципы, технологии, инструменты, 2-е издание / А. Ахо, Р. Сети, Дж. Ульман. - М.: Изд-во «Вильяме», 2008. - 1185 с.

4. Бейер, Д. Верификация драйверов операционной системы Linux / Д. Бейер, А. Петренко // Труды ИСП РАН. - 2012. - Т. 23. - С. 405-412.

5. Беляев, М. А. Статический анализ с использованием систем типов и эффектов на основе LLVM / М. А. Беляев, В. А. Цесько // Моделирование, и анализ информационных, систем. - 2011. - Т. 18, № 4. - С. 45-55.

6. Бронштейн, И. Е. Вывод типов для языка Python / И. Е. Бронштейн // Труды ИСП РАН. -2013. - Т. 24. - С. 161-169.

7. Бронштейн, И. Е. Подход к обнаружению ошибок несоответствия типов в коде на динамических языках программирования / И. Е. Бронштейн // Труды ИСП РАН. - 2013. - Т. 25. - С. 67-84.

8. Бурякова, Н. А. Классификация частично формализованных и формальных моделей и методов верификации программного обеспечения / Н. А. Бурякова, А. В. Чернов // Инженерный вестник Дона. - 2010. - Т. 14, №4 . - С. 129-134.

9. Буч, Г. Язык UML Руководство пользователя / Г. Буч, Д. Рамбо, А. Джекобсон. - СпБ: Питер, 2004. - 432 с.

10. Вартанов, С. П. Динамический анализ программ с целью поиска ошибок и уязвимостей при помощий целенаправленной генерации входных данных /

С. П. Вартанов, А. Ю. Герасимов // Труды ИСП РАН. - 2014. - Т. 26, №1. -С. 375-394.

11. Гавриленко, С. Ю. Использование языка XML для промежуточного представления программы / С. Ю. Гавриленко // Вестник Национального технического университета Харьковский политехнический институт. Серия: Информатика и моделирование. - 2008. - № 24. - С. 19-24.

12. Использование статического анализа для поиска уязвимостей и критических ошибок в исходном коде программы / А. Аветисян, А. Белеванцев, А. Бородин и др. // Труды ИСП РАН. - 2011. - Т. 21. - С. 23-38.

13. Исследование систем автоматизации обнаружения дефектов в исходном коде программного обеспечения. / В. М. Ицыксон, М. Ю. Моисеев, В. А. Цесько и др. // Научно-технические ведомости СПбГПУ. Информатика. Телекоммуникации. Управление. - 2008. - №5 (65). - С. 119-127.

14. Исследование средств построения моделей исходного кода программ на языках С и С++. / В. М. Ицыксон, М. И. Глухих, А. В. Зозуля и др. // Научно-технические ведомости СПбГПУ. Информатика. Телекоммуникации. Управление.-2009.- №1 (72).-С. 122-130.

15. Ицыксон, В. М. Автоматизация реинжиниринга программного обеспечения при портировании на новые библиотеки с помощью частичных спецификаций / В. М. Ицыксон // Информационно-управляющие системы. -2012.-№2.-С. 31-38.

16. Кравченко, П. О возможностях применения системного программного обеспечения LLVM для научных и прикладных исследований в области информационной безопасности / П. Кравченко, В. Хашковский // Известия Южного федерального университета. Технические науки. - 2012. - Т. 129, № 4. - С.70-73.

17. Кузнецов, М. А. Машинное представление иерархических структур на основе XML и DOM / М. А. Кузнецов // Известия Волгоградского

государственного университета. - 2007. - №1. - С. 97-100.

18. Малинин, С. Н. Тестирование объектно-ориентированных программ моделированием конечными автоматами / С. Н. Малинин // Известия высших учебных заведений. Поволжский регион. Технические науки. - 2009. - №2. -С.63-70.

19. Мутилин, В. С. Архитектура Linux Driver Vérification / В. С. Мутилин, Е. М. Новиков, А. В. Страх // Труды ИСП РАН. - 2011. - Т. 20. - С. 163-187.

20. Обзор инструментов статической верификации Си программ в применении к драйверам устройств операционной системы Linux / M. У. Мандрыкин, В. С. Мутилин, Е. М. Новиков и др. // Труды ИСП РАН. -2012.-Т.22.-С. 293-326.

21. Объектно-ориентированный анализ и проектирование с примерами приложений Объектно-ориентированный анализ и проектирование с примерами приложений, 3-е издание / Г. Буч, Р. Максимчук, М. Энгл и др.. -М.: Вильяме , 2008. - 720 с.

22. Романов, В. Использование шаблонов пакетов для анализа архитектуры программной системы / В. Романов // International Journal of Open Information Technologies. - 2014. - T. 2, № 4 . - C. 18-24.

23. Романов, В. Моделирование свободно-распространяемого программного обеспечения с помощью языка UML / В. Романов // International Journal of Open Information Technologies. - 2013. - T. 1, № 7. - С. 11-15.

24. Русских, И. В. Инкрементальный синтаксический анализ в средах разработки и текстовых редакторах / И. В. Русских // Вестник Нижегородского университета им. Н.И. Лобачевского. - 2007. - №1. -С. 189-196.

25. Тихонов, А. Ю. Комбинированный (статический и динамический) анализ бинарного кода / А. Ю. Тихонов, А. И. Аветисян // Труды ИСП РАН. — 2012. — Т. 22.-С. 131-150.

26. Фаулер, М. Рефакторинг. Улучшение существующего кода / М. Фаулер. -СПб.: Символ-Плюс, 2003. - 268 с.

27. Шилдт, Г. Полный справочник по Java / Г. Шилдт. - М.: "Вильяме", 2009. -1040 с.

28. A few billion lines of code later: using static analysis to find bugs in the real world / A. Bessey, K. Block, B. Chelf and oth. // Communications of the ACM. -2010. - V. 53 № 2. - P. 66-75.

29. A verifiable SSA program representation for aggressive compiler optimization/ V. Menon, N. Glew, B. Murphy and oth. // POPL '06 Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages. -2006.-P. 397-408.

30. Ada Resource Association - News and resource for the Ada programming language^eKTpoHHbm ресурс]. - Режим доступа: http://www.adaic.org/.

31. Agesen, О. The Cartesian product algorithm. Simple and precise type inference of parametric polymorphism/ O.Agesen // ECOOP '95 Proceedings of the 9th European Conference on Object-Oriented Programming. - London, 1995. - P. 2-26

32. Allen, F. Control flow analysis / F. Allen // ACM SIGPLAN Notices -Proceedings of a symposium on Compiler optimization. - 1970. - V. 5, № 7. -P. 1 —19.

33. Allen, F. E. A program data flow analysis procedure / F. E. Allen, J. Cocke // Communications of the ACM. - 1976. - V. 19, № 3. - P. 137.

34. Apple - OS X Yosemite - Обзор[Электронный ресурс]. - Режим доступа: https://www.apple.com/ru/osx/.

35. Bauhaus - Software architecture, software reengineering andprogram understanding^eicrpoHHbm ресурс]. - Режим доступа: http://www.bauhaus-stuttgart.de/bauhaus/index-english.html.

36. Вагааг[Электронный ресурс]. — Режим доступа: http://bazaar.canonical.com/en/.

37. Bdb — Debugger framework — Python v2.7.3 documentation^eicrpoHHbm ресурс]. - Режим доступа: http://d0cs.pyth0n.0rg/2/library/bdb.html.

38. Chugh, R. Nested refinements: a logic for duck typing/ R. Chugh, P. M. Rondon, R. Jhala // POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages. - New York, 2012.-P. 231-244.

39. Cousot, P. Systematic design of program analysis frameworks / P. Cousot, R. Cousot // POPL '79 Proceedings of the 6th ACM SIGACT-SIGPLAN symposium on Principles of programming languages. - New York, 1979. - P. 269-282.

40. Cousot, P. Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints / P. Cousot, R. Cousot // ProceedingPOPL 11 Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages. -New York, 1977. - P. 238-252.

41. Cppcheck - A tool for static C/C++ code analysisl^neKTpoHHbii! ресурс]. -Режим доступа: http://cppcheck.sourceforge.net/.

42: Damas, L. Type Assignment in Programming Languages. PhD thesis, University of Edinburgh, 1985.

43. Damns, D. Orion: high-precision methods for static error analysis of с and c++ programs / D. Damns, K. Namjoshi // FMCO'05 Proceedings of the 4th international conference on Formal Methods for Components and Objects. -Amsterdam, 2005.-P. 138-160.

44. Data Exchange in Bauhaus Data Exchange in Bauhaus/ J.Czeranski, T.Eisenbarth, R. Koschke and oth. // WCRE '00 Proceedings of the Seventh Working Conference on Reverse Engineering (WCRE'OO). - Washington, 2000. -P. 293.

45. Efficiently computing static single assignment form and the control dependence graph / R. Cytron, J. Ferrante, В. Rosen and oth. // ACM Transactions on Programming Languages and Systems (TOPLAS). - 1991. - V. 13 № 4. -

P. 451-490.

46. exbluesbreaker/csu-code-analysis • ОкНиЬ[Электронный ресурс]. - Режим доступа: https://github.com/exbluesbreaker/csu-code-analysis.

47. Extensible Markup Language (ХМЬ)[Электронный ресурс]. - Режим доступа: http://www.w3.org/XML/.

48. FindBugs - Find Bugs in Java Рп^гапирлектронный ресурс]. - Режим доступа: http://findbugs.sourceforge.net/.

49. Flesca, S. On the minimization of XPath queries / S. Flesca, F. Furfaro, E. Masciari // Journal of the ACM (JACM). - 2008. - V. 55 № 1. - Article No. 2.

50. Fröhlich, J. H. Interactive Analysis of Object Architectures / J. H. Fröhlich, Т. Stranzinger // TOOLS '97 Proceedings of the Technology of Object-Oriented Languages and Systems - Tools-25. - Washington, 1997. - P. 252.

51. GIMPLE - GNU Compiler Collection (GCC) Internals[3neKTpoHHbm ресурс]. - Режим доступа: https://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html.

52. Girard, J. A Metric-Based Approach to Detect Abstract Data Types and State Encapsulations / J. Girard, R. Koshke, G. Shied // Automated Software Engineering. - 1999. - V. 6 № 4. - P. 357-386.

53. Graph-based mining of multiple object usage patterns / Т. T. Nguen, H. A. Nguen, N. H. Pham and oth. // ESEC/FSE '09 Proceedings of the the 7th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering. - New York, 2009. -P. 383-392.

54. Graphviz - Graph Visualization Software[3neKTponnbHi ресурс]. - Режим доступа: http://www.graphviz.org/.

55. Grosu, R. Open-Source Model Checking / R. Grosu, X. Huang, S. Jain, S. Smolka // Electronic Notes in Theoretical Computer Science (ENTCS). - 2006. -V. 144 №3.-P. 27-44.

56. Heim, M. Exploring Indiana Highways / M Heim. - Exploring America's

Highway, 2007.-P. 68.

57. Hindley, R. The Principal Type-Scheme of an Object in Combinatory Logic / R. Hindley // Transactions of the American Mathematical Society. - 1969. - V. 146.-P. 29-60.

58. Jhala, R. Software model checking / R. Jhala, R. Majumdar // ACM Computing Surveys (CSUR).-2009.-V.41 № 4.-Article No. 21.

59. Johnson, S. Lint, а С program checker / S. Johnson // Computer Science Technical Report, Bell Laboratories. - 1977. -№65.

60. Koschke, R. An intermediate representation for integrating reverse engineering analyses / R. Koschke, J. Girard, M. Wurthner // Proceedings of the Working Conference on Reverse Engineering. - Washington, 1998. - P. 241-250.

61. Koshke, R. On Dynamic Feature Location / R. Koshke, J. Quante // International Conference on Automated Software Engineering, ACM Press. - New York, 2005.-P. 86-95.

62. Koshke, R. Hierarchical Reflexion Models/ R. Koshke, D. Simon // WCRE '03 Proceedings of the 10th Working Conference on Reverse Engineering. -Washington, 2003. - P. 36.

63. Lattner, C. LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation / C. Lattner, V. Adve // CGO '04 Proceedings of the international symposium on Code generation and optimization: feedback-directed and runtime optimization. - Washington, 2004. - P. 75.

64. Linden, T. The use of abstract data types to simplify program modifications / T. Linden // Proceedings of the 1976 conference on Data : Abstraction, definition and structure.-New York, 1976.-P. 12-23.

65. logilab-astng (Python Abstract Syntax Tree New Generation) (Logilab.org) [Электронный ресурс]. - Режим доступа: http://www.logilab.org/856.

66. lxml - Processing XML and HTML with РуЙюп[Электронньш ресурс]. -Режим доступа: http://lxml.de/.

67. MALPAS[Электронный ресурс]. - Режим доступа: http://malpas-global.com/.

68. Meyers, С. Programming with Standard ML / С. Meyers , С. Clack, E. Poon. -Prentice Hall, 1993. - P. 297.

69. Milner, R. A Theory of Type Polymorphism in Programming / R. Milner // Journal of Computer and System Science (JCSS). - 1978. -№ 17. - P. 348-374.

70. Mishra, D. Object-Oriented Inheritance Metrics in the Context of Cognitive Complexity / D. Mishra, A. Mishra // Fundamenta Informaticae - Knowledge Technology.-201 l.-V. Ill № 1.-P.91-117.

71. Morrison, R. An ad hoc approach to the implementation of polymorphism / R. Morrison, A. Dearie, R.C.H. Connor // ACM Transactions on Programming Languages and Systems (TOPLAS). - 1991. -V. 13 № 3. - P. 342-371.

72. Naumovich, G. Verification of communication protocols using data flow analysis / G. Naumovich, L. Clarke, L. Osterweil // ACM SIGSOFT Software Engineering Notes. - 1996. -V. 21, № 6. - P. 93-105.

73. Neamtiu, I. Understanding source code evolution using abstract syntax tree matching/ I. Neamtiu, J. Foster, M. Hicks // MSR '05 Proceedings of the 2005 international workshop on Mining software repositories. - New York, 2005. -P. 1-5.

74. Numpy - Numpy [Электронный ресурс]. - Режим доступа: http://www.numpy.org/.

75. Opdyke, W.F. Creating abstract superclasses by refactoring / W.F. Opdyke, R.E. Johnson // CSC '93 Proceedings of the 1993 ACM conference on Computer science. - New York, 1993. - P. 66-73.

76. Osterweil, L. Some experience with DAVE: a Fortran program analyzer / L. Osterweil, L. Fosdick // AFIPS '76 Proceedings of the June 7-10, 1976, national computer conference and exposition. - New York, 1976. - P. 909-915.

77. Ottenstein, K. The program dependence web: a representation supporting

control-, data-, and demand-driven interpretation of imperative languages / K. Ottenstein, R. Ballance, A. MacCabe // PLDI '90 Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation. - New York, 1990. - P. 257-271.

78. Palsberg, J. Object-Oriented Type Inference / J. Palsberg, M. Schwartzbach // OOPSLA '91 Conference proceedings on Object-oriented programming systems, languages, and applications. - New York, 1991. - P. 146-161.

79. Paulson, L.D. Developers shift to dynamic programming languages / L.D. Paulson // IEEE Computer. - 2007. - V. 40, № 2. - P. 12-15.

80. Pierik, C. Controlling object allocation using creation guards / C. Pierik, D. Clarke, F. de Boer // FM'05 Proceedings of the 2005 international conference on Formal Methods. - Berlin, 2005. - P. 59-74.

81. pydot - Python interface to Graphviz's Dot language.[Электронный ресурс]. -Режим доступа: http://code.google.eom/p/pydot/.

82. Pylint - code analysis for РуШоп[Электронный ресурс]. - Режим доступа: http://www.pylint.org/.

83. Pyreverse : UML Diagrams for РуШоп[Электронный ресурс]. - Режим доступа: http://www.logilab.org/blogentry/6883.

84. РуSonar: a type inferencer and indexer for Ру^оп[Электронный ресурс]. -Режим доступа: http://yinwang0.wordpress.com/2010/09/12/pysonar/.

85. Raza, A. Bauhaus: a tool suite for program analysis and reverse engineering / A. Raza, G. Vogel, E. Plodereder // Ada-Europe'06 Proceedings of the 11th Ada-Europe international conference on Reliable Software Technologies. - Berlin, 2006.- P. 71-82.

86. Riesco, M. Using Graphviz as a Low-cost Option to Facilitate the Understanding of Unix Process System Calls / M. Riesco, M. Fondon, D. Alvarez // Electronic Notes in Theoretical Computer Science (ENTCS). - 2009. — V. 224.-P. 89-95.

87. Ruby Programming Language^eKTpoHHbift ресурс]. - Режим доступа: https://vAvw.ruby-lang.org/en/.

88. Sabouri, H. Reducing the verification cost of evolving product families using static analysis techniques / H. Sabouri, R. Khosravi // Science of Computer Programming. - 2014. -V. 83. - P. 35-55.

89. Salib, M. Starkiller: a static type inferencer and compiler for Python / M. Salib // The Master of Engineering degree thesis. Massachusetts Institute of Technology. - 2004.

90. Sharl, N. Object-oriented encapsulation for dynamically typed languages / N. Sharl, A. Black, S. Ducasse // OOPSLA '04 Proceedings of the 19th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications. - New York, 2004. - P. 130-149.

91. Soderberg, A. Extensible intraprocedural flow analysis at the abstract syntax tree level / A. Soderberg, G. Hedin, E. Magnusson, T. Ekman // Science of Computer Programming. - 2013. - V.78, Ks 10. - P. 1809-1827.

92. Stanier, J. Intermediate representations in imperative compilers: A survey / J. Stanier, D. Watson // ACM Computing Surveys (CSUR). - 2013. - V. 45 № 3. -Article No. 26.

93. The Architecture of Open Source Applications: ЬЬУМ[Электронный ресурс]. - Режим доступа: http://www.aosabook.org/en/llvm.html.

94. The Linux Kernel Archives[3neKTpoHHbm ресурс]. - Режим доступа: https://www.kernel.org/.

95. The Web framework for perfectionists with deadlines | Djangoj^eKTpoHHbm ресурс]. - Режим доступа: https://www.djangoproject.com/.

96. ПОВЕ Software: The Coding Standards Company [Электронный ресурс]. -Режим доступа: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html.

97. Twisted^eicrpoHHbm ресурс]. - Режим доступа:

https://twistedmatrix.com/trac/.

98. User's Guide - MALPAS introductory guide^eicrpoHHbm ресурс]. - Режим доступа: http://malpas-global.com/wp-content/uploads/download/MALPAS %20introductory%20guide.pdf.

99. Vainio, N. Free Software Philosophy and Open Source / N.Vainio, T. Vaden // International Journal of Open Source Software and Processes. - 2012. - V. 4 № 4. -P. 56-66.

100. W3C XML Schema Definition Language (XSD) 1.1 [Электронный ресурс].

- Режим доступа: www.w3.org/TR/xmlschemal 1-1.

101. Webb, J. MALPAS—an automatic static analysis tool for software validation and verification / J. Webb // Edited papers presented at the 1st International Conference on Reliability and robustness of engineering software. - Amsterdam, 1987.-P. 67-75.

102. Welcome to РуШоп.о^[Электронный ресурс]. - Режим доступа: https://www.python.org/.

103. Wendel, I. FORTRAN error detection through static analysis / I. Wendel, R. Kleir // ACM SIGSOFT Software Engineering Notes. - 1977. - V. 2, № 3. -P. 22-28.

104. Wilson, C. Omega A Data Flow Analysis Tool for the С Programming Language / C. Wilson, L. Osterweil // IEEE Transactions on Software Engineering

- Special issue on COMPSAC 1982 and 1983. - 1985. - V. 11, № 9. - P. 832-838.

105. Windows - Microsoft Windows^eicrpoHHbm ресурс]. - Режим доступа: http://windows.microsoft.com/en-us/windows/home.

106. Xpath 8уп1ах[Электронный ресурс]. - Режим доступа: http://www.w3schools.com/xpath/xpath_syntax.asp.

Публикации автора диссертации в журналах, входящих в Перечень ведущих периодических изданий

107. Зубов, М.В. Математическое моделирование универсальных многоуровневых промежуточных представлений для статического анализа исходного кода / М.В. Зубов, Е.В. Старцев, А.Н. Пустыпш // Доклады ТУ СУР. —2014. - №3 (33). - С.94-99.

108. Зубов, М.В. Численное моделирование анализа исходного кода с использованием промежуточных представлений / М.В. Зубов, А.Н. Пустыгин, Е.В. Старцев // Веста. Астрахан. гос. ун-та. Сер.: Управление, вычислительная техника и информатика. - 2014. - № 1. - С. 66-74.

109. Зубов, М.В. Применение универсальных промежуточных представлений для статического анализа исходного программного кода / М.В. Зубов, А.Н. Пустыгин, Е.В. Старцев // Доклады ТУ СУР. - 2013. - № 1 (27). - С. 64-68.

110. Зубов, М.В. Получение типов данных в языках с динамической типизацией для статического анализа исходного кода с помощью универсального классового представления / М.В. Зубов, А.Н. Пустыгин, Е.В Старцев // Вестн. Астрахан. гос. ун-та. Сер.: Управление, вычислительная техника и информатика. - 2013. - № 2. - С. 66-74.

Другие публикации автора

111. Зубов, М.В. Получение типов данных в динамических языках при статическом анализе / М.В. Зубов, А.Н. Пустыгин, Е.В. Старцев // Тверские интернет-технологии: сб. трудов науч.-пр. конф. - Тверь, 2013. - С. 53-57.

112. Зубов, М.В. Статический анализ ПО с помощью его промежуточных представлений и технологий с открытым исходным кодом / М.В. Зубов, А.Н. Пустыгин, Е.В. Старцев // Материалы Второй научно-практической конференции FOSS LVIV.- Львов, 2012. - С. 165-168.

113. Зубов, М.В. Подходы к статическому анализу открытого исходного кода /

M.B. Зубов, A.H. Пустыгин, E.B. Старцев // Сб. материалов Восьмой междуиар. конф. разработчиков и пользователей свободного программного обеспечения Linux Vacation / Eastern Europe. - Брест,2012. - С. 36-40.

114. Зубов, M.B. Построение универсального представления графа потока управления для статического анализа исходного кода / М.В. Зубов, А.Н. Пустыгин, Е.В. Старцев // СПО в высшей школе: тез. докл. Девятой конф. -Переславль, 2014. - С. 46-51.

115. Зубов, М.В. Выделение типов в универсальном классовом представлении для статическогого анализа исходного кода / М.В. Зубов, А.Н. Пустыгин, Е.В. Старцев // СПО в высшей школе: тез. докл. Восьмой конф. - Переславль, 2013.- С. 53-58.

116. Зубов, М.В. Прототипы построителей промежуточных представлений исходных текстов программ, основанные на компиляторах с открытым исходным кодом / М.В. Зубов, А.Н. Пустыгин, Е.В. Старцев // СПО в высшей школе: тез. докл. Седьмой конф. - Переславль, 2012. - С. 82-86.

117. Зубов, М.В. Краткий анализ и исследование промежуточных представлений исходного текста программ / М.В. Зубов, А.Н. Пустыгин, Е.В. Старцев // Суперкомпьютерные технологии и открытое программное обеспечение. — 2013. - С. 45-53.

118. Зубов, М.В. Сравнительный анализ существующих инструментов исследования программ по исходному коду / М.В. Зубов, А.Н. Пустыгин, Е.В. Старцев // Суперкомпьютерные технологии и открытое программное обеспечение. - 2013. - С. 37-44.

Список иллюстративного материала

Рисунок 1 - Применение промежуточных представлений в компиляции и статическом анализе с. 17

Рисунок 2 - Графическое представление модели универсального классового представления для 3 классов с. 30

Рисунок 3 - Набор правил вывода типов по алгоритму Хиндли-Милнера

с. 37

Рисунок 4 - Архитектура разработанных инструментов проверки адекватности математической модели типов с. 64

Рисунок 5 - Алгоритм формирования отношения в ходе проверки адекватности математической модели типов с. 66

Рисунок 6 - График зависимости результатов динамического анализа от порога с. 70

Рисунок 7 - Архитектура разработанных инструментов генерации представления для языка Python с. 75

Рисунок 8 - Пример визуального представления диаграммы классов с. 81

Рисунок 9 - Использование срезов представлений в статическом анализе

с. 85

Рисунок 10 - Последовательное выполнение срезов представлений с. 86 Рисунок 11 - График размера компоненты наследования с. 90 Рисунок 12 - График величины inner с. 92 Рисунок 13 - График величины instances с. 95

Обратите внимание, представленные выше научные тексты размещены для ознакомления и получены посредством распознавания оригинальных текстов диссертаций (OCR). В связи с чем, в них могут содержаться ошибки, связанные с несовершенством алгоритмов распознавания. В PDF файлах диссертаций и авторефератов, которые мы доставляем, подобных ошибок нет.