Оптимизация программного кода на основе конечных автоматов | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 11 мая, печатный экземпляр отправим 15 мая.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №45 (440) ноябрь 2022 г.

Дата публикации: 11.11.2022

Статья просмотрена: 32 раза

Библиографическое описание:

Степович-Цветкова, Г. С. Оптимизация программного кода на основе конечных автоматов / Г. С. Степович-Цветкова. — Текст : непосредственный // Молодой ученый. — 2022. — № 45 (440). — С. 16-18. — URL: https://moluch.ru/archive/440/96235/ (дата обращения: 03.05.2024).



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

Ключевые слова: оптимизация программного кода, конечный автомат, качество программ.

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

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

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

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

В качестве входной цепочки символов используется массив, в который помещается синтаксически правильный программный код на языке С++. Конечный автомат имеет четыре состояния (см. рис. 1).

Состояния конечного автомата: S — состояния автомата, t — входной текстовый символ, tb — символы '\r', '\n', '\t', ' ', e — входные символы

Рис. 1. Состояния конечного автомата: S — состояния автомата, t — входной текстовый символ, tb — символы '\r', '\n', '\t', ' ', e — входные символы

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

В состоянии S1 происходит считывание имени переменной. В данное состояние программа переходит из состояния S0 в случае предшествующего считывания имени типа данных. В состоянии S1 программа должна определить количество объявленных переменных и записать в массив переменных их имена.

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

В состояние S3 конечный автомат переходит из состояния S0, если необходимо обработать объявление функции. Как только встречается символ «{», программа запоминает индекс этого символа во входящей строке как начало тела функции. Затем автомат копирует из выходной строки имя функции в массив functions и переходит в состояние S0. Сохранить индекс начата тела функции необходимо для того, чтобы локализовать область видимости переменных.

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

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

Аналогично могут быть построены конечные автоматы для других возможных модификаций программ с целью оптимизации кода. Например, конечный автомат, реализующий поиск недостижимого кода должен отыскивать в программе условный оператор, оператор выбора вариант, циклы и операторы безусловной передачи управления и переходить в соответствующие состояния для анализа возможных исходов. Для применения арифметических преобразований, влекущих уменьшение количество производимых операций, конечный автомат должен отыскивать определенные выражения, например A*B+B*C, которое необходимо преобразовать к виду B*(A+C).

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

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

Литература:

1. Коваль В. В. Современные методы трансформации программ // Компьютерное моделирование. Вычислительные технологии. Ростов-на-Дону, 2003. С. 41–58.

2. Степович-Цветкова Г. С. Автоматизированное управление качеством программ на основе метода инспектирования кода // Электронные информационные системы. 2017. № 4 (15). С. 57–68.

3. Степович-Цветкова Г. С. Модель оценки качества компьютерных программ // Прикладные задачи математики: материалы XXV международной научно-технической конференции. Севастополь, 2017. С. 213–215.

4. Штейнберг Б. Я., Штейнберг О. Б. Преобразования программ— фундаментальная основа создания оптимизирующих распараллеливающих компиляторов // Программные системы: теория и приложения. 2021. Т. 12, № 1(48). С. 21–113.

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


Ключевые слова

оптимизация программного кода, конечный автомат, качество программ

Похожие статьи

Современные методы оптимизации программного кода

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

Расширенный конечный автомат для тестирования мобильных...

Проекты. Меню. Поиск.

Библиографическое описание: Кабылова, Д. А. Расширенный конечный автомат для

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

Методы тестирования программного обеспечения: РПК «Политехник», Волгоград 2006.

Структура программного кода и практическое использование...

ПЛК — это программно управляемый дискретный автомат, имеющий некоторое множество

Любой программный компонент обладает свойством инкапсуляции, т.е. работает как «черный ящик», скрывая детали своей реализации.

Библиотека Util.lib имеет открытый программный код.

(*функциональный блок для генерации некоторых периодических функций*).

Разработка системы автоматизированного тестирования

...studio [3], если приложение, а точнее программный код не содержит ошибок, приложение будет

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

Тестирование программного обеспечения — это процесс исследования. В это время появлялись первые инструменты для автоматизированного тестирования.

Принципы и правила проектирования пользовательского...

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

оптимизация операций; – устранение ошибок. В 1984 г. вышла в свет классическая книга по взаимодействию

Следует выбрать правильный тон в сообщениях и приглашениях.

Каждый программный продукт должен включать в себя функции отменить и повторить (UNDO/REDO).

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

Проекты. Меню. Поиск.

Качество программного обеспечения, дистанционное обновление, интеграция программных функций различных поставщиков, а главное

Несмотря на это, спрос на программное обеспечение для автомобилей постоянно увеличивается.

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

Составные модули и алгоритмы базовых функций контроллера...

Сначала конечный автомат записывает код команды 85h и адрес, а затем пишет 12 ECC байт во Flash. Когда все эти шаги будут завершены, конечный автомат записывает команду 10h во Flash. После tWB периода времени конечный автомат идентифицирует сигнал R_nB.

Анализ способов оптимизации программного кода...

Во время реализации в директивах OpenMP число потоков было задано вручную, равное количеству логических процессоров, ниже представлена таблица 4, в которой сравнивается время выполнения программного кода способами CPU и CPU_OpenMP.

Структуризация автоматизированных систем управления...

– Надежностью создаваемого программного обеспечения.

– Возможностью вторичного использования отработанных фрагментов кода

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

Загруженный код позволяет использовать широкий набор функций для быстрой и эффективной отладки приложения.

Похожие статьи

Современные методы оптимизации программного кода

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

Расширенный конечный автомат для тестирования мобильных...

Проекты. Меню. Поиск.

Библиографическое описание: Кабылова, Д. А. Расширенный конечный автомат для

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

Методы тестирования программного обеспечения: РПК «Политехник», Волгоград 2006.

Структура программного кода и практическое использование...

ПЛК — это программно управляемый дискретный автомат, имеющий некоторое множество

Любой программный компонент обладает свойством инкапсуляции, т.е. работает как «черный ящик», скрывая детали своей реализации.

Библиотека Util.lib имеет открытый программный код.

(*функциональный блок для генерации некоторых периодических функций*).

Разработка системы автоматизированного тестирования

...studio [3], если приложение, а точнее программный код не содержит ошибок, приложение будет

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

Тестирование программного обеспечения — это процесс исследования. В это время появлялись первые инструменты для автоматизированного тестирования.

Принципы и правила проектирования пользовательского...

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

оптимизация операций; – устранение ошибок. В 1984 г. вышла в свет классическая книга по взаимодействию

Следует выбрать правильный тон в сообщениях и приглашениях.

Каждый программный продукт должен включать в себя функции отменить и повторить (UNDO/REDO).

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

Проекты. Меню. Поиск.

Качество программного обеспечения, дистанционное обновление, интеграция программных функций различных поставщиков, а главное

Несмотря на это, спрос на программное обеспечение для автомобилей постоянно увеличивается.

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

Составные модули и алгоритмы базовых функций контроллера...

Сначала конечный автомат записывает код команды 85h и адрес, а затем пишет 12 ECC байт во Flash. Когда все эти шаги будут завершены, конечный автомат записывает команду 10h во Flash. После tWB периода времени конечный автомат идентифицирует сигнал R_nB.

Анализ способов оптимизации программного кода...

Во время реализации в директивах OpenMP число потоков было задано вручную, равное количеству логических процессоров, ниже представлена таблица 4, в которой сравнивается время выполнения программного кода способами CPU и CPU_OpenMP.

Структуризация автоматизированных систем управления...

– Надежностью создаваемого программного обеспечения.

– Возможностью вторичного использования отработанных фрагментов кода

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

Загруженный код позволяет использовать широкий набор функций для быстрой и эффективной отладки приложения.

Задать вопрос