Применение классических подходов статического анализа к поиску ошибок в программах на языке Python - Курсовая работа

бесплатно 0
4.5 178
Реализации статического анализа программ на языке Python. Особенность инструментов динамического синтеза кода программного продукта. Внутрипроцедурный и межпроцедурный разбор для поиска дефектов. Условия формирования предупреждений о наличии ошибок.

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
В работе рассмотрены подходы, использующиеся в статическом анализе для поиска ошибок в программах на языке Python. Тестирование ПО позволяет проверить программы на соответствия требованиям, выявить присутствие ошибок, улучшить качество кода или инспектировать код на соответствие спецификациям. Также статический анализ кода может быть рассмотрен как автоматизированный процесс инспектирования кода, однако в отличие от процесса инспектирования статический анализ может обладать следующими преимуществами: минимизация человеческого фактора на стадии анализа, снижение стоимости проверки за счет человеко-часов, упрощение просмотра больших участков кода. Следует отметить, что такие возможности как интегрированные среды разработки с навигацией по коду, автодополнением широко распространены для языков со статической типизацией, такие как C#, C , Java, но недоступны для языков с динамической типизацией, таких как Python, PHP, Perl, JAVASCRIPT. Для этой цели в данной работе рассматривается возможность адаптации техник статического анализа, использующихся для программ, написанных на языках со статической типизацией для анализа программ на языках с динамической типизацией.В данной главе приводится описание существующих техник статического анализа кода, рассматриваются виды дефектов и приводятся описания существующих решений статического анализа для языка Python.Традиционные фазы разбора исходного кода: анализу кода предшествует синтаксический разбор, используемый после лексического разбора, группирующего лексемы и строящий токены, передаваемые синтаксическому анализатору (Рисунок 1)[1]. В настоящей работе реализованный модуль выполняет анализ по MIR (Medium Level Intermediate Representation). Но для более сложных видов дефектов необходимо выявить дополнительную информацию в ходе исполнения кода, для этого моделируется поток данных и формируется граф потока управления. Граф потока управления (control flow graph-CFG) применяется для формирования путей выполнения программы, определяет последовательность анализа, для выполнения потока управления используется классический подход обхода графа в глубину и принцип доминаторов, или подходы, основывающиеся на концепции сводимости, предоставляющие иерархическое представление (Рисунок 4)[14]. Например, большинство машинно-независимых оптимизаций основано на анализе потока данных, такие как анализ достигающих переменных, предоставляющий информацию о том, где в программе может быть определена каждая переменная, анализ активных переменных, предоставляющий информацию о том где в программе может использоваться каждая переменная или анализ доступных выражений, основное применение, которого - поиск глобальных общих подвыражений.В настоящее время существует много решений статического анализа для языков со статической типизацией, самые популярные типы ошибок в этих языках выявлены и находятся в свободном доступе в виде документаций к этим решениям. В этой ситуации, возможно, рассмотреть сопоставление видов ошибок для языков со статической типизацией в контексте языков с динамической типизацией или попробовать выявить самостоятельные дефекты.Как было упомянуто ранее Python язык с динамической типизацией, такой вид типизации усложняет процесс статического анализа кода. Под поддержкой не обязательно подразумевается выявление дефектов, в некоторых реализациях инструменты статического анализа помогают со стилевыми конструкциями, отступами и т.д. Как и во многих языках программирования у языка Python есть свой стандарт оформления кода, некоторый ‘Style Guide for Python Code’, этот стандарт был создан в 2001 году и размещен на официальной странице предложений по улучшению языка Python (Python Enhancement Proposals index 8 - PEP8)[11]. Pychecker похож на Pylint за исключением того, что Pychecker не поддерживает проверки оформления стиля кода, к тому же Pychecker содержит малую часть поддержки PEP8, включающие в себя ограничения на длину строки, пробелы, отступы и т.д Инструмент реализован на Java, во многом выбор языка реализации связан с поддержкой общих форматов данных решений JETBRAINS, также это связано с тем, что построение AST средствами Python зависит от версии интерпретатора.В главе представлены подходы и алгоритмы, используемые в программной реализации.Для реализации потоков управления по такому представлению необходим алгоритм обхода графа, учитывающий последовательность исполнения конструкций языка. Принцип алгоритма основан на обходе потомков узла в графе перед посещением любого из соседних узлов, не являющимися его потомками. Цифры, выделенные на представлении DFS на графе (Рисунок 8) обозначают номер при последовательности обхода графа и называются глубиной узла. Алгоритм обхода в глубину не обязательно предоставляет единственный путь обхода графа, но это не влияет на исполнение анализа, важно, что анализ происходит последовательно от узлов к предкам вглубь.

План
Оглавление

Введение

Глава 1. Статический анализ языка программирования Python

1.1 Инструменты статического анализа кода

1.2 Дефекты в коде программ на языке Python

1.3 Реализации статического анализа программ на языке Python

Глава 2. Внутрипроцедурный и межпроцедурный анализ для поиска дефектов

2.1 Абстракция потока данных

2.2 Аннотации (резюме)

2.3 Граф вызовов

Глава 3. Реализация решения

3.1 Инструменты разработки

3.2 Анализ потока данных

3.3 Модули реализации

Глава 4. Полученные результаты

4.1 Примеры найденных предупреждений

Заключение

Список использованных источников

Приложения

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?