Автореферат (Метод обнаружения ошибок при работе с памятью на статическом этапе отладки программного обеспечения), страница 2
Описание файла
Файл "Автореферат" внутри архива находится в папке "Метод обнаружения ошибок при работе с памятью на статическом этапе отладки программного обеспечения". PDF-файл из архива "Метод обнаружения ошибок при работе с памятью на статическом этапе отладки программного обеспечения", который расположен в категории "". Всё это находится в предмете "технические науки" из Аспирантура и докторантура, которые можно найти в файловом архиве МАИ. Не смотря на прямую связь этого архива с МАИ, его также можно найти и в других разделах. , а ещё этот архив представляет собой кандидатскую диссертацию, поэтому ещё представлен в разделе всех диссертаций на соискание учёной степени кандидата технических наук.
Просмотр PDF-файла онлайн
Текст 2 страницы из PDF
Проектирование и изготовление 2011», «Взгляд в будущее2012», «Состояние, проблемы и перспективы создания корабельныхинформационно-управляющих комплексов 2012», «Корабельные системыуправления и обработки информации. Проектирование и изготовление 2012»,«Состояние, проблемы и перспективы создания корабельных информационноуправляющих комплексов 2013».ПубликацииПо результатам диссертационной работы опубликовано 12 статей, в том числе3 в изданиях, рекомендованных ВАК.Получено авторское Свидетельство о Государственной регистрациипрограммы для ЭВМ №2013616813.7Структура и объем работыДиссертационная работа состоит из введения, трех разделов, заключения,списка использованных источников.
Общий объем работы составляет 136 печатныхстраниц. Работа содержит 23 рисунка, 20 таблиц, список источников из 107наименований, 2 приложения.На защиту выносятся1)Методика обнаружения и локализации основных программных ошибокпри работе с памятью на статическом этапе отладке программного обеспечения,позволяющая повысить качество ПО и снизить трудозатраты на динамическомэтапе отладки путем переноса основной нагрузки на статический этап.2)Новый метод автоматизированного выявления программных ошибокпри работе с памятью, позволяющий существенно снизить временные затраты прианализе ПО. Метод имеет малую чувствительность к потоку данных (кромепеременных, являющихся указателями на выделенную память), не учитываетмежпоточное взаимодействие, не обрабатывает рекурсивные вызовы.3)Модель состояний объектов памяти и правила выявления ошибокработы с памятью.4)Классификация ошибок при работе с памятью, позволяющаясистематизировать исследуемую предметную область в соответствии сособенностями ПО.5)Структура программного средства автоматизированного обнаружения илокализации ошибок, связанных с некорректной работой с памятью в ПО,эффективность которого продемонстрирована как на ряде специально подобранныхмодельных примеров, так и на реальных проектах.6)Система из четырёх показателей качества и методика сравнения по этимпоказателям программно-инструментальных средств выявления ошибок работы спамятью на статическом этапе отладки.8СОДЕРЖАНИЕ РАБОТЫВо введении дана общая характеристика работы, раскрыта ее актуальность,сформулированы основные задачи и цель исследования, определены научнаяновизна и практическая значимость полученных результатов, а также основныеположения, выносимые на защиту.В первом разделе описаны источники и причины возникновения ошибок приработе с оперативной памятью и их классификация.
По данным компании Coverity,в программах на языке C, в среднем, содержится 0.25 нефункциональных ошибок на1000 строк исходного кода. Ошибки работы с оперативной памятью составляютсущественную долю среди всего спектра ошибок программного обеспечения иявляются особо критичными для систем реального времени, в то же время считается,что данный тип ошибок является одним из самых трудно обнаруживаемых.Перечень функций и операторов, осуществляющих работу с оперативнойпамятью ЭВМ (распределение и освобождение), рассматриваемый в данной работе,представлен в таблице 1.Таблица 1. Функции и операторы работы с памятью в языках C и C++НаименованиеТип работы с памятьюЯзыкфункции/операторапрограммированияmallocвыделениеС, С++freeосвобождениеС, С++callocвыделениеС, С++reallocвыделениеС, С++newвыделениеС++deleteосвобождениеС++new[]выделениеС++delete[]освобождениеС++fopenвыделение (ресурс)С, С++fcloseосвобождение (ресурс)С, С++popenвыделение (ресурс)С, С++pcloseосвобождение (ресурс)С, С++asprintfвыделениеС, С++vasprintfвыделениеС, С++Большие проекты ПО насчитывают сотни и тысячи вызовов функцийраспределения и освобождения памяти.В настоящее время известны следующие способы предотвращения ошибокпри работе с памятью:1) Отказ от динамической памяти.
Например, FORTRAN-77 полностьюотказывается от применения механизмов динамического распределения памяти, чтоисключает подобные ошибки, но существенно ограничивает функциональностьпрограмм.92) Перезапуск программы. В случаях, когда устранение утечки памяти непредставляется возможным, например, при использовании кода, поставляемого ввиде программных модулей и изготовленного сторонними разработчиками,применяется способ игнорирования утечек памяти. Код, подверженный утечкам,размещается в отдельной программе, а эта программа с нужной периодичностьюперезапускается. Завершение и новый запуск программы выполняются внешнейпрограммой, которая также подаёт входные данные и забирает результаты.Поскольку при завершении программы вся память, затребованная ей уоперационной системы, возвращается операционной системе, такой метод непозволяет утечкам приобрести катастрофический характер.
Однако данный подходнеприменим к системам, предназначенным для длительной работы без перезагрузок.3) Владеющие указатели позволяют согласовать время жизни объекта иуказателя на этот объект. Тем не менее, использование владеющих указателей непомогает в случае циклических ссылок между объектами.4) Специальные инструментальные средства, предназначенные для отладкииспользования памяти, обнаружения утечек памяти, а также профилирования.5) Сборка мусора.
Некоторые языки программирования (например, Java,Оберон, языки платформы .NET) предоставляют средства, позволяющиеавтоматически освобождать неиспользуемую память. Сборщики мусора решаюттакже и проблему циклических ссылок, но сборка мусора является ресурсоёмкойоперацией.
В результате использование подобных средств снижаетсябыстродействие системы.Анализ современных средств контроля памяти показывает, что они находятсяна достаточно высоком уровне и позволяют находить основные ошибки при работес памятью в приложении. Однако указанные средства не позволяют охватить весьспектр ошибок при работе с памятью, возникает большое количество ложныхсрабатываний, кроме того данные средства имеют излишне длительное для поискауказанного рода ошибок время работы.Наиболее перспективным методом обнаружения ОРП представляетсястатический анализ.Статический анализ основан на исходном коде программного обеспечения. Поэтой причине, первым этапом выполнения статического анализа являетсяпостроение модели по исходному коду программы.
На следующем этапепроисходит применение собственно алгоритмов статического анализа с цельюаппроксимировать состояния программы во всех точках. Алгоритмы, используясемантику конструкций языка (а точнее – модели программы), вычисляютвозможные значения всех объектов программы. На последнем этапе рассчитанныесостояния используются алгоритмами обнаружения ошибок для выявления илокализации имеющихся в программе ошибок.К существующим алгоритмам статического анализа относятся: анализ потокауправления, абстрактная интерпретация, анализ значений, включающий в себяинтервальный анализ и анализ указателей; анализ зависимостей программы;10обнаружение дефектов; анализ сложных программ, включающий в себя: анализ фифункций, анализ циклов и межпроцедурный анализ.В настоящее время широко распространено программно-инструментальноесредство (ПИС) Cppcheck – инструмент для статического анализа кода, написанногона языках программирования C и C++.
Он служит для обнаружения ошибок ипотенциальных уязвимостей, которые не обнаруживаются компилятором.Основные проблемы при анализе исходного кода данным средствомвозникают с проектами большого объема, время анализа которых может бытьнеоправданно большим.Второй раздел посвящен разработке методики обнаружения программныхошибок при работе с памятью.Предлагается классификация ошибок при работе с памятью, котораяподразумевает разделение основных ОРП на 5 категорий:1.Повторное выделение ресурса без его предварительного освобождения(ошибка 1 вида).Данная ошибка возникает в случае, когда программист динамически выделяетсегмент памяти, сохраняя адрес выделенного участка памяти в переменную, ужеявляющуюся указателем на динамически выделенный участок памяти.2.Потеря последней ссылки на ресурс (ошибка 2 вида).Данная ошибка возникает при динамическом выделении памяти, когда непроизводится сохранение адреса выделяемого участка памяти или не производитсяосвобождения более не используемого локального ресурса перед выходом изфункции.3.Освобождение ресурса до его выделения (ошибка 3 вида).Данная ошибка происходит при освобождении ресурса (памяти), который небыл предварительно выделен с помощью соответствующего вызова функциидинамического выделения ресурсов.4.Повторное освобождение ресурса (ошибка 4 вида).Данная ошибка связана с вызовом функции освобождения для ресурса(сегмента памяти), который уже прошел процедуру освобождения, но не был послеэтого снова выделен.5.Освобождениересурсафункцией,непредназначеннойдляосвобождения этого типа ресурсов (ошибка 5 вида).К данной категории относятся ошибки, связанные с несоответствиемиспользования функций распределения и освобождения памяти.