Модели и методы тестирования программных систем на основе алгебраического подхода тема диссертации и автореферата по ВАК РФ 05.13.01, кандидат наук Вигура, Антон Николаевич

  • Вигура, Антон Николаевич
  • кандидат науккандидат наук
  • 2013, Нижний Новгород
  • Специальность ВАК РФ05.13.01
  • Количество страниц 128
Вигура, Антон Николаевич. Модели и методы тестирования программных систем на основе алгебраического подхода: дис. кандидат наук: 05.13.01 - Системный анализ, управление и обработка информации (по отраслям). Нижний Новгород. 2013. 128 с.

Оглавление диссертации кандидат наук Вигура, Антон Николаевич

Введение

Глава 1. Обзор существующих ¡методов верификации программных систем и постановка задачи

1.1. Методы верификации программных систем

1.2. Тестирование программных систем

1.4. Уровни и методы тестирования

1.5. Состав систем автоматизации тестирования

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

1.7. Динамический анализ программ

1.8. Генерация тестовых воздействий

1.9. Символьное выполнение

1.11. Компьютерная алгебра и символьные алгоритмы

1.12. Выводы и постановка задачи

Глава 2. Базовая модель программной системы

2.1. Алгебраические выражения

2.2. Анализ выражений

2.3. Общие обозначения

2.4. Модель исполнителя

2.5. Модель программы

2.6. Построение базовой модели программы

2.7. Подстановка значений и конкретизация

2.8. Преобразования выражений

2.9. Выводы

Глава 3. Диагностическая модель программной системы

3.1. Граф-модель программы

3.2. Построение управляющего графа программы

3.3. Матричные и списковые представления графов

3.4. Структурные критерии полноты тестирования

3.5. Методы выбора тестовых воздействий

3.6. Динамическое символьное выполнение

3.7. Выбор тестовых путей

3.8. Выбор тестовых воздействий

3.9. Инструментирование

3.10. Выводы

Глава 4. Практическая реализация и вычислительные эксперименты

4.1. Реализация системы автоматизации тестирования

4.2. Практический пример модульного тестирования

4.3. Сравнительные эксперименты

4.3. Тесты производительности

4.4. Интерактивное дизайн-тестирование программной системы

4.5. Выводы

Заключение

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

Приложения

*

Рекомендованный список диссертаций по специальности «Системный анализ, управление и обработка информации (по отраслям)», 05.13.01 шифр ВАК

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

Введение

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

Наиболее значимыми с точки зрения трудоемкости этапами жизненного цикла современных программных систем являются этапы верификации и поддержки, в том числе локализации и исправления найденных дефектов. Таким образом, снижение затрат на этих этапах существенно влияет на итоговую стоимость программного продукта и поэтому несомненно является актуальной задачей. Поэтому вопросам верификации и контроля качества программных систем всегда уделялось должное внимание со стороны научного сообщества — им посвящено множество исследований как отечественных, так и зарубежных ученых — В.В. Линаева, П.П. Пархоменко, В.И. Сагунова, В.Ю. Борзова, G.J. Myers, C.V. Ramamoorthy, Е.М. Clarke и других.

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

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

существенно сложнее, чем в случае аппаратных средств. В настоящее время ведутся активные исследования в области совместного использования формальных методов верификации и динамической верификации. К такому синтетическому подходу относится динамическое символьное выполнение (в англоязычных источниках получившее название concolic testing), получившее должное освещение в работах Koushik Sen (утилита CUTE), ученых из группы Microsoft Research - P. Godefroid, M. Levin (система Microsoft SAGE) и многих других. Вместе с тем в данной области остается ряд нерешенных проблем, поэтому исследования в области формальной верификации (в том числе формальной динамической верификации), несомненно, являются актуальными.

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

Задачи работы

Для достижения поставленной цели требуется решение следующих задач:

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

2. разработка алгебраической (базовой) модели программной системы;

3. разработка методов и алгоритмов выбора множества тестовых воздействий с целыо достижения полного тестового покрытия;

4. программная реализация разработанных алгоритмов тестирования;

5. применение полученных результатов на практике.

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

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

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

Научная новизна работы состоит в следующем:

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

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

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

Практическая ценность работы

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

Реализация результатов работы

Разработанные алгоритмы применяются в производственном процессе ООО «МФИ Софт», что подтверждается актом о внедрении, также используются в учебном процессе при подготовке магистрантов направления «Информатика и вычислительная техника» по программе «Диагностические и информационно-поисковые системы» в Нижегородском государственном техническом университете им. P.E. Алексеева.

Разработанный программный комплекс зарегистрирован в Реестре программ для ЭВМ Федеральной службы по интеллектуальной собственности РФ (Роспатент).

Результаты работы использованы в госбюджетной НИР (Отчет по НИР «Диагностика технических и программных систем с использованием современных информационных технологий». Номер государственной регистрации 01.2009.00405 от 28.01.09 - Н. Новгород: НГТУ), выполненной в рамках НИОКР «Диагностические и информационно-поисковые системы» (Номер регистрации 01201252337, интернет-номер И111112195013, руководитель работы Ломакина Л.С.).

Апробация работы

Основные положения диссертации представлялись и докладывались на следующих научных конференциях:

• Международной научно-технической конференции «Информационные системы и технологии (ИСТ-2009, ИСТ-2010, ИСТ-2011, ИСТ-2013)» (Нижний Новгород).

• XV Международной открытой научной конференции «Современные проблемы информатизации» (Воронеж, 2010).

• IV Всероссийской научно-технической конференции «Прикладная информатика и математическое моделирование» (Москва, 2010).

• Нижегородской сессии молодых ученых (технические науки, 2011).

• Международной молодежной конференции «Будущее технической науки» г. Н.Новгород, 2011 г., 2013 г.

• X Международном симпозиуме «Интеллектуальные системы» ГЫТЕЬ8'2012, г. Вологда, 2012 г.

• XVII международной научно-практической конференции «Системный анализ в проектировании и управлении», г. Санкт-Петербург, 2013 г.

На защиту выносятся:

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

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

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

Публикации

По теме диссертационного исследования опубликовано 15 работ, в том числе 3 работы в рецензируемых научных изданиях, рекомендуемых ВАК, получено свидетельство о государственной регистрации программы для ЭВМ.

Структура и объем работы

Диссертация состоит из введения, четырех глав, заключения, библиографического списка и приложений. Общий объем работы 128 страниц текста, содержащего 19 рисунков и 3 таблицы. Список литературы содержит 102 наименования.

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

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

Известно, что более половины стоимости программного продукта приходится на его верификацию и поддержку [8]. Как следствие, основным способом контроля качества программных систем в настоящее время является тестирование — компромиссное решение в плане трудоемкости и эффективности нахождения дефектов, причем сложность современных программных систем приводит к необходимости декомпозиции программных систем и выполнения тестирования на различных уровнях (модульное, интеграционное, системное тестирование), а также к необходимости автоматизации этих видов тестирования с целью снижения затрат на верификацию.

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

тестового покрытия, а также проблемы, с которыми они сталкиваются при решении данных задач.

1.1. Методы верификации программных систем

Верификация — проверка соответствия результатов отдельных этапов разработки программной системы требованиям и ограничениям, сформулированным для них на предыдущих этапах. Верификация ПО - процесс обеспечения правильной реализации ПО, которое соответствует спецификациям, выполняется на протяжении всего жизненного цикла [4]. Верификация дает ответ на вопрос, правильно ли создана система.

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

Все разнообразие методов верификации можно разделить на следующие группы [4]:

1. экспертиза;

2. статические методы (поиск ошибок по шаблонам, проверка правил корректности);

3. формальные методы (например, методы автоматического доказательства теорем, проверка моделей, символьное выполнение);

4. динамические методы (тестирование, мониторинг и профилирование);

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

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

Достоинством таких методов является сравнительная простота: например, элементарный статический анализ присутствует в компиляторах. Например, статический анализатор Clang [9] позволяет обнаруживать, в частности, такие ошибки, как некорректную работу с указателями, с динамическим распределением памяти (утечки памяти и повторное освобождение).

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

Формальные методы позволяют проверить соответствие программы некоторой формальной спецификации. Достоинством является возможность находить сложные ошибки, недостатком — высокая трудоемкость. Формальные методы применимы только к тем свойствам, которые выражены формально в рамках некоторой математической модели, а также к тем артефактам, для которых можно построить адекватную формальную модель. Соответственно, для использования таких методов в проекте необходимо затратить значительные усилия на построение формальных моделей. К тому же, построить такие модели и провести их анализ могут только специалисты по формальным методам, которых не так много, и чьи услуги стоят достаточно дорого. Построение формальных моделей нельзя автоматизировать, для этого всегда необходим человек. Анализ их свойств в значительной мере может быть автоматизирован, и сейчас уже есть инструменты, способные анализировать формальные модели промышленного уровня сложности, однако чтобы эффективно пользоваться ими часто тоже требуется очень специфический набор навыков и знаний (в специфических разделах математической логики и алгебры). Тем не менее, в ряде областей, где последствия ошибки в системе могут оказаться чрезвычайно дорогими, формальные методы верификации активно используются в силу своей способности обнаруживать сложные ошибки, на практике не выявляемые экспертизой или тестированием [4].

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

Логико-алгсбраические модели (property-based models), они же — логические и алгебраические исчисления. При моделировании ПО модель такого типа описывает некоторый набор его свойств, быть может, изменяющийся со временем, но не дает точного представления о том, за счет чего изменяются эти свойства. Отличие между логическими и алгебраическими моделями довольно условно, но можно считать, что в первом случае основным объектом внимания являются утверждения (ложные или истинные), а во втором — выражения или термы, относящиеся к какому-то типу 4.

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

Исполнимые (операционные) модели характеризуются тем, что их можно каким-нибудь образом выполнить, чтобы проследить изменение свойств моделируемого ПО. Каждая исполнимая модель является, но сути, программой для некоторой виртуальной машины. К таким моделям относят, например, конечные автоматы [11], сети Петри.

Модели промежуточного тина обладают имеют черты как логико-алгебраических, так и исполнимых. К ним можно отнести логики Хоара [12],

программные логики, программные контракты.

Построение модели для использования формального метода верификации требует значительных усилий, связанных с тщательным анализом верифицируемой системы и поэтому требует определенной квалификации. Причем этот процесс нельзя полностью автоматизировать, хотя анализ свойств моделей может быть автоматизирован. С другой стороны, эффективность поиска ошибок формальными методами весьма высока, поэтому они применяются, когда ошибки в системе крайне нежелательны. Гораздо чаще формальные методы применяются для тестирования аппаратного обеспечения, т. к. цена ошибки здесь более высока. Например, после обнаружения известной ошибки в операции деления процессоров Pentium (которая приводила к существенной потере точности) компания Intel использует автоматическое доказательство теорем для проверки вычислительных устройств в своих процессорах.

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

К формальным методам верификации относят следующие:

1. Автоматическое доказательство теорем [13, 14] и основанное на нем доказательство корректности программ [15];

2. Проверка моделей (model checking) [3, 16, 17];

3. Символьное выполнение (symbolic execution) [18].

Зачастую данные методы используются совместно — например, символьное выполнение применимо для построения модели Крипке в рамках проверки моделей. Отметим, что методы формальной верификации широко используются в рамках разработки аппаратных средств (в частности,

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

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

• различные варианты тестирования [19] - анализ работы программной системы на определенном множестве тестовых воздействий;

• мониторинг - пассивный анализ работы программной системы в реальном окружении;

• профилирование [20] - выделение затратных по потреблению того или иного ресурса (времени, памяти) участков кода с цслыо их дальнейшей оптимизации.

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

Синтетические методы сочетают в себе подходы из методов предыдущих типов. К ним, относят, например, тестирование на основе моделей (model-based testing, МВТ) [21], сочетающее в себе динамический и формальный подход. Совместное применение таких подходов позволяет сохранить достоинства

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

1.2. Тестирование программных систем

Вообще, тестирование — это анализ поведения системы на входных данных из некоторого набора тестов. Для программ тестирование предполагает определение по одному или нескольким методам множества тестовых воздействий и выполнение программы с подачей тестовых воздействий на вход и анализом выходных данных и поведения программы (проверкой их корректности). Тестированию программ посвящены такие книги, как [19], [8], [22], [23] и другие.

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

При выполнении тестирования программных систем требуется решать следующие задачи:

1. определение множества тестовых воздействий;

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

3. проверка правильности получаемых выходных данных;

4. оценка полноты тестирования и качества программного продукта согласно заданным метрикам программного обеспечения [25,26].

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

• метрики сложности: размер в строках или блоках кода, цикломатическая сложность [28];

• метрики качества: тестовое покрытие кода (покрытие операторов, покрытие ветвей и т. п. - структурные метрики), тестовое покрытие требований, количество обнаруженных дефектов, плотность дефектов.

1.4. Уровни и методы тестирования

Целостное тестирование сложной программной системы в общем случае представляет собой нетривиальную задачу. С целью упрощения данного процесса на практике применяется иерархический подход [29] к тестированию:

• в программной системе выделяются уровни иерархии (модули, компоненты, подсистемы);

• на каждом уровне иерархии производится разбиение (декомпозиция) системы на элементы, при этом связи между элементами локализуются только на данном уровне иерархии (стратифицируются).

Иерархический подход и декомпозиция системы позволяют сократить временные затраты на тестирование за счет его распараллеливания [30]. На практике тестирование производится на следующих уровнях [22]:

I. Модульное тестирование [31], при котором тестируется минимально

возможный для тестирования компонент, например, отдельный класс или функция. Разбиение программной системы на модули может быть выполнено как вручную (что характерно при разработке системы с нуля с использованием подхода Test Driven Development [32]), так и автоматически на основе граф-модели программы [33].

2. Интеграционное тестирование, при котором тестируются интерфейсы между компонентами, подсистемами или системами.

3. Системное тестирование — тестируется интегрированная система на её соответствие требованиям.

• Альфа-тестирование — имитация реальной работы с системой штатными разработчиками (дизайн-тестированне) либо реальная работа с системой потенциальными пользователями/заказчиком. Чаще всего альфа-тестирование проводится на ранней стадии разработки продукта, но в некоторых случаях может применяться для законченного программного продукта в качестве внутреннего приёмочного тестирования. Иногда альфа-тестирование выполняется под отладчиком или с использованием окружения, которое помогает быстро выявлять найденные ошибки. Обнаруженные ошибки могут быть нереданы тестировщикам для дополнительного исследования в окружении, подобном тому, в котором будет использоваться ПО.

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

Существуют различные критерии выбора множества тестовых воздействий. Их можно разделить на две группы — функциональные и

структурные критерии [34]. Функциональные критерии не используют информацию о внутренней структуре программы; тесты выбираются, исходя из требований на программный продукт. В этом случае программа предстает в виде черного ящика, поэтому такого рода тестирование называют также тестированием «черного ящика» (black-box testing [35]). Структурные критерии, напротив, предполагают выбор тестов па основе структуры программы (тестирование «белого ящика» - white-box testing [36]).

1. Тестирование «черного ящика»:

• выбор тестовых воздействий производится на основе требований, предъявляемых к программной системе;

• внутренняя структура тестируемой системы не принимается во внимание;

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

• не гарантируется покрытие кода тестами;

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

2. Тестирование «белого ящика» :

• выбор тестовых воздействий на основе структуры тестируемой системы (граф-моделей);

• обычно выполняется на стороне команды разработки на ранних стадиях жизненного цикла (дизайн-тестирование, модульное тестирование);

• не гарантируется покрытие требований тестами;

• основные метрики — структурные (покрытие кода тестами — покрытие операторов, покрытие ветвей и другие).

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

Рис. 1. Зависимость стоимости исправления дефекта от времени его

существования

Как известно, стоимость исправления дефекта зависит от времени, прошедшего от времени его внесения до времени обнаружения [37], что наглядно изображено на рис. 1. Таким образом, одним из путей к решению данной задачи является обнаружение дефектов на ранних стадиях жизненного цикла программной системы (еще на стадии разработки), реализуемое с помощью:

Похожие диссертационные работы по специальности «Системный анализ, управление и обработка информации (по отраслям)», 05.13.01 шифр ВАК

Список литературы диссертационного исследования кандидат наук Вигура, Антон Николаевич, 2013 год

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

1: Пархоменко, П.П. Диагностирование программного обеспечения [Текст] / П.П. Пархоменко, П.А. Правильщиков // Автоматика и телемеханика. - 1980. -№4.-с. 117-141;

2: Пархоменко, П.П. Основы технической диагностики [Текст] / П.П.Пархоменко, Е.С. Согомонян. - М.: Энергоатомиздат, 1981. - 320 с; 3: Кларк, Э.М. Верификация моделей программ: Model Checking. Пер. с англ. [Текст] / Кларк Э.М., Грамберг О., Пелед Д. - под ред. Р. Смелянского. - М.: МЦНМО, 2002. - 416 е.: ил. - ISBN 5-94057-05402; 4: Кулямин, В.В. Методы верификации программного обеспечения / Всероссийский конкурсный отбор обзорно-аналитических статей по приоритетному направлению "Информационно-телекоммуникационные системы", 2008. - 117 с;

5: Ломакина Л.С., Уваров П.И., Волков В.Г. Надёжностный синтез контролепригодных систем [Текст] / Ломакина Л.С., Уваров П.И., Волков В.Г. // Журнал «Системы управления и информационные технологии». - Воронеж -2007.-№4(30)-с. 36-41;

6: Ломакина Л.С., Уваров П.И. Структурный синтез контролепригодных систем [Текст] / Ломакина Л.С., Уваров П.И. // Журнал «Системы управления и информационные технологии». - Воронеж - 2007.- №3(29) - с. 57-62; 7: Ломакина Л.С., Уваров П.И. Информационный синтез контролепригодных систем [Текст] / Ломакина Л.С., Уваров П.И. // Журнал «Системы управления и информационные технологии». - Воронеж - 2007 - №2(28) - с. 53-57; 8: Myers G.J. The Art of Software Testing, second edition / G.J. Myers. - Wiley, 2004. - 234 p. - ISBN 0-471 -46912-2;

9: Clang [Электронный ресурс]. - Режим доступа: http://clang.llvm.org/ (дата обращения: 20.05.2013);

10: Курганский, В.И. Алгебраические преобразования программ и

порождаемых ими отношений / В.И. Курганский // Журнал «Системы управления и информационные технологии». - Воронеж, 2006. -№3.1(25). - с. 139-144;

11: Ломакина JI.C., Малинин С.Н. Тестирование объектно-ориентированного программного обеспечения на основе моделирования конечными автоматами [Текст] / Ломакина Л.С., Малинин С.Н. // Журнал «Системы управления и информационные технологии». - Воронеж - 2010.- № 3(41) - С. 32-36; 12: Hoare C.A.R. An Axiomatic Basis for Computer Programming // Communications of the ACM. v. 12, - 1969, - №10;

13: Чень Ч., Ли P. Математическая логика и автоматическое доказательство теорем [Текст] / под ред. С.Ю. Маслова. - М.: Наука, Главная редакция физико-математической литературы, 1983. - 360 с, Математическая логика и автоматическое доказательство теорем, 1983;

14: Хоггер К. Введение в логическое программирование: пер. с англ. [Текст] / К. Хоггер. - М.: Мир, 1988. - 348 е., ил. - ISBN 5-03-000490-4; 15: Андерсон, Р. Доказательство правильности программ [Текст]/ Р.Андерсон; пер. с англ. - М. : Мир, 1982. - 168 с;

16: Katoen J.-P. Concepts, Algorithms, and Tools for Model Checking. Lehrstuhl für Informatik VII, Friedrich Alexander Universität Erlangen Nürnberg. Lecture Notes of the Course (Mechanised Validation of Parallel Systems) (course number 10359). Semester 1998/1999 [Текст];

17: Миронов A.M. Математическая теория программных систем. [Электронный ресурс]. — Режим доступа. — URL: http://intsys.msu.ru/staff/mironov/ (дата обращения: 02.03.2013);

18: Борзов Ю.В. Тестирование программ с использованием символического выполнения [Текст] / Ю.В. Борзов // Программирование, 1980. - №1. - с. 51-59; 19: Липаев В. В. Тестирование программ [Текст] / В.В. Липаев. - М.: Радио и связь, 1986 .-295 с;

20: Graham S.L, Kessler P.B, McKusick M.K. gprof: a Call Graph Execution Profiler

[Текст] // Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, SIGPLAN Notices, Vol. 17, No 6, pp. 120-126;

21: El-Far I.K., Whittaker J.A. Model-based Software Testing [Текст] // Encyclopedia on Software Engineering / edited by J.J. Marciniak. - Wiley, 2001; 22: Канер Сэм и др. Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений [Текст] / Сэм Канер, Джек Фолк, Енг Кек Нгуен. - К.: ДиаСофт, 2001. - 544 с; 23: Архангельский Б.В, Черняховский В.В. Поиск устойчивых ошибок в программах [Текст] / Б.В. Архангельский, В.В Черняховский. - М.: Радио и связь, 1989. - 240 с;

24: Вигура А.Н. Диагностика технических и программных систем с использованием современных информационных технологий [Текст] (научный руководитель Л.С. Ломакина) / А.Н. Вигура, А.С. Базин, В.П. Губернаторов и др. // Отчет по НИР No государственной регистрации 01.2009.00405 от 28.01.09 - Н. Новгород: НГТУ.- 127 с;

25: Капег С., Bond W.P. Software Engineering Metrics: What Do They Measure and How Do We Know? [Текст] // 10th International Software Metrics Symposium. -2004;

26: Miller J.C., Maloney C.J. Systematic mistake analysis of digital computer programs [Текст] // Communications of the ACM. - New York, NY, USA: ACM. - 6 (2): pp 58-63. - 1963;

27: Волков, В.Г. Автоматизированная система контроля и обеспечения надежности программных средств / В.Г. Волков // Математическое моделирование. Оптимальное управление: Вестник Нижегородского университета им. Н.И. Лобачевского. - 2009. - №5. - с. 173-175; 28: Дробушевич, Л.Ф. Метод оценки топологической сложности программ [Текст] / Л.Ф. Дробушевич // Управляющие системы и машины. - 1988. - № 4. -с. 69-74;

29: Ломакина Л.С., Волков В.Г. Модели и алгоритмы тестирования

программных средств на основе их стратифицированного описания [Текст] / Ломакина Л.С., Волков В.Г. // Журнал «Системы управления и информационные технологии». - Воронеж - 2010. - No 1(39) - с. 41-45; 30: Базии, А.С. Тестирование программных комплексов на основе принципа декомпозиции [Текст] / Базин А.С. // Журнал «Вестник Нижегородского государственного университета». - Нижний Новгород - 2011. -No4. - с. 185189;

31: IEEE Standard for Software Unit Testing (ANSI) [Текст]; 32: Beck, K. Test-Driven Development by Example. - Addison Wesley, 2003; 33: Ломакина Л.С., Базин, А.С. Иерархическая декомпозиция программных комплексов с цслыо их тестирования [Текст] / Ломакина Л.С, Базин А.С. // Журнал «Системы управления и информационные технологии». - Воронеж -2012. - No2.2(48) - с. 263-268;

34: Сапожников В.В., Сапожников Вл.В. Основы технической диагностики: учебное пособие для студентов вузов ж-д. транспорта [Текст] / В.В. Сапожников, Вл.В. Сапожников. - М.: Маршрут, 2004. - 318 с; 35: Beizer В. Black-box testing: techniques for functional testing of software and systems [Текст] / В.Beizer. - John Wiley & Sons, Inc. New York, NY, USA. - 1995. -294 p. - ISBN:0-471-12094-4;

36: Mohd, Ehmer Khan. Different Approaches to White Box Testing Technique for Finding Errors [Текст] // IJCSI International Journal of Computer Science Issues, Vol. 5, No 3, July 2011. - pp. 1-13;

37: Савкин В. Принципы управления качеством программ [Текст] / В. Савкин // Открытые системы. - 2008. - №6.- с.49-53. - С. 2008; 38: Miller, Edward and Howden, William E. Software Testing and Validation Techniques [Текст]. - Long Beach, CA: IEEE Computer Society Press, 1978 (first edition), pp. 16-19;

39: Gough B.J. An Introduction to GCC: For the GNU Compilers GCC and G++ [Текст] / B.J. Gough, R.M. Stallman. - Bristol, UK. - Network Theory Limited. -

2004;

40: Nethercote N., Seward J. Valgrind: a framework for heavyweight dynamic binary instrumentation [Текст] / N.Nethercote, J.Seward // Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation. ACM New York. pp. 89-100;

41: Вигура, A.H. Определение тестовых покрытий программ на основе динамической рекомпиляции [Текст] / А.Н. Вигура // Материалы XII Международной научно-технической конференции «Будущее технической науки», 24 мая 2013 г. - Н. Новгород: НГТУ, 2013. - с. 41 -42; 42: Ломакина J1.С., Волков В.Г. Синтез контролепригодных программ. Учебное пособие [Текст] / Л.С. Ломакина, В.Г. Волков, - Нижний Новгород: НГТУ им. Р.Е. Алексеева, 2012.-120 с;

43: Сагунов, В.И. Диагностирование кратных ошибок в программных модулях [Текст] / В.И. Сагунов // Программирование. - 1988, - №4.- с. 34-38; 44: Agrawal Н. Dominators, super blocks, and program coverage [Текст] / Hiralal Agrawal // Proceedings of the 21st ACM S1GPLAN-SIGACT symposium on Principles of programming languages. - ACM New York, NY, USA. - 1994. - pp. 2534;

45: Mustafa M. Tikir. Efficient instrumentation for code coverage testing [Текст] / Mustafa M. Tikir, Jeffrey K. I lollingsworth // Proceedings of the 2002 ACM SIGSOFT international symposium on Software testing and analysis. - ACM New York, NY, USA . - 2002. - pp. 86-96;

46: Вигура, A.H. Автотрассировка программ на основе динамической рекомпиляции [Текст] / А.Н. Вигура// Материалы Международной научно-технической конференции «Информационные системы и технологии (ИСТ-2013)», 19 апреля 2013 г. - Н. Новгород: НГТУ, 2013. - с. 16-17; 47: Ершов II.М, Построение графов вычислительных алгоритмов методом автотрассировки [Текст] / Н.М. Ершов // Программирование. - 2000. - №6. - с.8-16;

48: Дмитриев Д.В, Соколова Э.С. Построение автотрассировочного графа для тестирования вычислительных алгоритмов [Текст] / Э.С. Соколова. Д.В. Дмитриев // Системы управления и информационные технологии. - Воронеж. -2008. -№ 1 (31).-с. 47-51;

49: Atlassian Clover [Электронный ресурс]. - Режим доступа: https://www.atlassian.com/software/clovcr/overview (дата обращения: 05.05.2013); 50: Seward J. Valgrind 3.3 —Advanced Debugging and Profiling for GNU/Linux applications [Текст] / J.Seward, N. Nethercote, J. Weidendorfer - Network Theory Ltd. - March 2008. - 164 pages. - ISBN 0-9546120-5-1; 51: Microsoft Nirvana [Электронный ресурс]. - Режим доступа: http://www.microsoft.com/windows/cse/bit_projects.mspx (дата обращения: 05.05.2013);

52: Godefroid P. SAGE: Whitebox Fuzzing for Security Testing [Текст] / P. Godefroid, M.Y. Levin, D. Molnar. - Queue - Networks. Volume 10 Issue 1, January 2012. p. 20;

53: Qemu [Электронный ресурс]. - Режим доступа: http://wiki.qemu.org/Main_Page (дата обращения: 01.05.2013); 54: Brosgol, В.М. Non-intrusive code coverage for safety-critical software [Текст] / B.M. Brosgol // Embedded Computer Design. - OpenSystemsMedia. - November 11, 2011;

55: McMinn P. Search-based software test data generation: A survey [Текст] / P. McMinn // Software Testing, Verification and Reliability. - 2004, №14; 56: Hamlet R. Random Testing [Текст] / R. Hamlet // Encyclopedia of Software Engineering (1 ed.). - John Wiley and Sons. - 1994. - pp. 970-978. - ISBN 0471540021;

57: Offutt J. Generating Test Data From State-based specifications [Текст] / J. Offutt, S. Liu, A. Abdurazik, P. Ammann // The Journal of Software Testing, Verification and Reliability.-2003, №13;

58: Веденеев В.В. Автоматизация тестирования использования программных

интерфейсов приложений на основе моделирования конечными автоматами [Электронный ресурс] / В.В. Веденеев (руководитель А.А. Шалыто). - Режим доступа: http://is.ifnio.ru/testing/vedeneev/;

59: Поликарпова, Н. Автоматное программирование [Текст] / II.И. Поликарпова, А.А. Шалыто, - С-Пб.: Питер. - 2009. - 176 е.;

60: Ломакина Л.С., Малинин С.Н. Тестирование объектно-ориентированного программного обеспечения на основе моделирования конечными автоматами [Текст] / Ломакина Л.С., Малинин С.Н. // Журнал«Системы управления и информационные технологии». - Воронеж - 2010 - № 3(41) - с. 32-36.; 61: Bertolino A. Automatic generation of path covers based on the control flow analysis of computer programs [Текст] / A. Bertolino, M. Marn e // IEEE Transactions on Software Engineering, 20(12):885-899, 1994; 62: Gupta N. Generating test data for branch coverage [Текст] / N. Gupta, A. P. Mathur, M. L. Soffa // Proceedings of the 15th IEEE International Conference on AutomatedSoftware Engineering. IEEE Computer Society Press, 2000, September; 63: Вигура, A.M. Структурное тестирование программных систем на основе принципа минимального покрытия [Текст] / А.II. Вигура // Труды Нижегородского государственного технического университета им. Р.Е. Алексеева. Системы обработки информации и управления.. Том 74, выпуск 15. - Нижний Новгород - 2009. - с. 15-21;

64: Zhang J. Path-oriented test data generation using symbolic execution and constraint solving techniques [Текст] / J. Zhang, C. Xu, X.Wang // Proceedings of the Second International Conference on Software Engineering and Formal Methods, 2004;

65: Иыуду, К.А. Тестирование программы на основе минимального покрытия ее графа [Текст] / К.А. Иыуду, Н.М. Арипов // Управляющие системы и машины. 1985.-№4.-С. 69-71;

66: Вигура, А.Н. Структурное тестирование программных систем на основе принципа минимального покрытия [Текст] / А.Н. Вигура // Материалы

Международной научно - технической конференции «Информационные системы и технологии (ИСТ-2009)», 17 апреля 2009 г. - И. Новгород: НГТУ, 2009.-с. 259-261;

67: Korel В. Assertion-oriented automated test data generation [Текст] / В. Korel, A. M. Al-Yami // Proceedings of the 18th International Conferance on Software Engineer-ing (1CSE), pp. 71-80. IEEE, 1996;

68: Ammann P. Introduction to Software Testing [Текст] / P. Ammann, J. Offutt. -Cambridge University Press. - 2004. - ISBN 0-52188-038-1;

69: Ferguson R. The chaining approach for software test data generation [Текст] / R. Ferguson, B. Korel //ACM Transactions on Software Engineering and Methodology (TOSEM). - Volume 5 Issue 1, Jan. 1996. - pp. 63-86;

70: Sutton, M. Fuzzing: Brute Force Vulnerability Discovery [Текст] / Michael Sutton, Adam Greene, Pedram Amini. - Addison-Wesley, 2007. - ISBN 0-321-44611-9.-517 p.;

71: Buy U. Automated testing of classes [Текст] / U. Buy, A. Orso, and M. Pezz, e // In Proceedings of the International Symposium in Software Testing and Analysis (ISSTA '00). - pp. 39-48. - 2000;

72: Вигура, A.M. Автоматизация тестирования программного обеспечения на основе символьного выполнения [Текст] / А.Н. Вигура // Материалы 15-й Международной открытой научной конференции «Современные проблемы информатизации». - Воронеж: ВГТУ, 2010. - С. 414-418; 73: Вигура, А.Н. Разработка метода и алгоритма тестирования программных систем на основе алгебраического подхода [Текст] / А.Н. Вигура // Материалы Международной научно- технической конференции «Информационные системы и технологии (ИСТ-2010)», 17 апреля 2010 г. - Н. Новгород: НГТУ, 2010. - с. 298-299;

74: Barbuti R. Analyzing information flow properties in assembly code by abstract interpretation [Текст] / R. Barbuti, C. Bernardeschi, N. De Francesco // The Computer, v.47, - 2004, №1;

75: II.П. Вариовский, В.А. Захаров, Р.И. Подловченко, B.C. Щербина, Ы.Н. Кузюрии, А.В. Шокуров, О применении методов деобфускации программ для обнаружения сложных компьютерных вирусов [Текст] // Известия ТРТУ, №7, Таганрог, Изд-во ТРГУ 2006 г., с. 18-27;

76: Потапенко С.В. Методы прямого и обратного символьного моделирования систем, заданных базовыми протоколами [Текст] / С.В. Потапенко// Проблемы программирования, 2008. - №4, с. 39-45;

77: Бичевский, Я.Я. Развитие методов символического тестирования программ [Текст] / Я.Я. Бичевский, Ю.В. Борзов // Автоматика и телемеханика. -1982. -№8.-с. 93-102;

78: Gotlieb A. Automatic test data generation using constraint solving techniques [Текст] / A. Gotlieb, B. Botella, M. Rueher // Proceedings of the 1998 ACM SIGSOFT international symposium on Software testing and analysis, pages 53-62, 1998;

79: Щербина O.A. Удовлетворение ограничений и программирование в ограничениях [Текст] / О.А. Щербина // Интеллектуальные системы. 2011. 15 (N 1-4). с. 53-170;

80: Борзов, Ю.В. Система символического тестировании ПЛ/1 -программ [Текст] / Ю.В. Борзов, Г.Э. Дишлерс, И.Э. Медведис, Г.Б. Уртанс // Управляющие системы и машины. 1986. - №6.- с. 75-79;

81: Godefroid P. DART: Directed Automated Random Testing [Текст] / P. Godefroid, N. Klarlund, K. Sen // Proceedings of the ACM SIGPLAN 2005 Conference on Programming Language Design and Implementation. ACM Press, 2005, June; 82: Sen K. CUTE: Aconcolic unit testing engine for С [Текст] / К. Sen, D. Marinov, G. Agha // Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering. Volume 30 Issue 5, September 2005. pp. 263-272; 83: Burnim J. Heuristics for Scalable Dynamic Test Generation [Текст] / J. Burnim, K. Sen // Proceedings of the 23rd IEEE/ACM International Conference on Automated

Software Engineering. IEEE Computer Society Press, 2008. September. P. 443-446; 84: Ban дер Варден Б.Л. Алгебра. Определения, теоремы, формулы [Текст]. - М.: Мир, 1976.-623 с;

85: Бухбергер Б. Компьютерная алгебра: символьные и алгебраические вычисления [Текст] / под ред. Б.Бухбергера, Дж. Коллинза, Р. Лооса. - М.: Мир, 1986,-392 е., ил;

86: Тан К.Ш. Символьный С++: Введение в компьютерную алгебру с использованием объектно-ориентированного программирования: пер. со 2-го англ. изд. [Текст] / К.Ш. Тан, В.-Х. Стиб, Й. Харди - М.: Мир, 2001. - 622 с. ил. -ISBN 5-03-003355-6;

87: Вигура, А.Н. Автоматизация тестирования программного обеспечения на основе символьного выполнения [Текст] / А.Н. Вигура // Межвузовский сборник научных трудов IV всероссийской научно-технической конференции «Прикладная информатика и математическое моделирование», 19-20 мая 2010 г. - Москва: МГУП, 2010. - с. 121-127;

88: Вигура, А.Н. Анализ и тестирование программ на основе алгебраической модели [Текст] / А.Н. Вигура // Журнал «Вестник Нижегородского государственного университета». - Нижний Новгород - 2011. - № 5(1). - с. 189196;

89: Белоусов А.П., Ткачев С.Б. Дискретная математика: Учеб. для вузов [Текст] / Под ред. B.C. Зарубина, А.П. Крищенко. - 3-е изд., стереотип. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2004. - 744 с. - ISBN 5-7038-1769-2; 90: Ломакина Л.С., Вигура А.Н. Модели и методы тестирования программных систем на основе алгебраического подхода [Текст] / Л.С. Ломакина, А.Н. Вигура // Журнал «Системы управления и информационные технологии». - Воронеж, 2013.-№2.1(52).-с. 157-161;

91: Atomic operations - Википедия [Электронный ресурс]. - Режим доступа: http://en.wikipedia.org/wiki/Atomic_operation (дата обращения: 01.05.2013); 92: Евстигнеев В.А. Применение теории графов в программировании [Текст] /

под ред. А.П. Ершова . - М.: Наука. Главная редакция физико-математической литературы, 1985. - 352 с;

93: Вигура, А.Н. Генерация тестовых наборов для программ на основе заданных ограничений на входные данные [Текст] / А.Н. Вигура // Материалы XII Международной научно-технической конференции «Будущее технической науки», 24 мая 2011 г. - II. Новгород: НГТУ, 2011. - с. 44-45; 94: Гладков, Л. А. Генетические алгоритмы [Текст] / Л.А. Гладков, В.В. Курейчик, В.М. Курейчик; - М.:ФИЗМАТЛИТ, 2006;

95: Вигура, А.Н. Использование генетических алгоритмов для генерации тестов программ [Текст] / А.Н. Вигура // Материалы Международной научно-технической конференции «Информационные системы и технологии (ИСТ-2011)», 17 апреля 2011 г. - И. Новгород: НГТУ, 2011. - с. 319; 96: Вигура, А.Н. Автоматизация поиска тестов программ на основе генетического алгоритма [Текст] / А.Н. Вигура// Интеллектуальные системы: Труды Десятого международного симпозиума / под ред. К.А. Пупкова. - М.: РУСАКИ, 2012, с. 184-187;

97: Губернаторов, В.П. Модификация эволюционно-генетического алгоритма для построения оптимальных тестовых последовательностей [Текст] / В.П. Губернаторов // Вестник Нижегородского университета им. Н.И.Лобачевского, №3(1), 2013.-с. 179-183;

98: Ахо А. Компиляторы: принципы,.технологии и инструментарий, 2-е изд.: пер. с англ [Текст] / А. Ахо, М. Лам, Р. Сети, Д. Ульман. - М.: ООО "И.Д. Вильяме", 2011. - 1184 е.: ил. - ISBN 978-5-8459-1349-4; 99: Вигура, А.Н. Система семантического анализа текстов программ [Текст] / А.Н. Вигура// Материалы конференции «XVI Нижегородская сессия молодых ученых. Технические науки», 17 апреля 2011 г. - Н. Новгород: Гладкова O.A., 2011.-е. 173-176;

Международной научно-практической конференции «Системный анализ в проектировании и управлении», 1-3 июля 2013 г. - Санкт-Петербург: СПб. ГПУ, 2013.-с. 77-84;

101: Вигура, А.Н. Тестирование программных систем на основе динамического символьного выполнения [Текст] / А.Н. Вигура // Журнал «Научно-технический вестник Поволжья». - 2013. - №4. - с. 133-136;

102: Weicker R.P. Dhrystone: a synthetic systems programming benchmark [Текст] / Reinhold P. Weicker // Communications of the ACM. Volume 27 Issue 10, Oct 1984. - ACM New York, NY, USA. - 1984. - pp. 1013-1030;

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