Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Основы разработки программ на языке С++ для систем информационной безопасности

Покупка
Основная коллекция
Артикул: 756653.01.99
Доступ онлайн
197 ₽
В корзину
Изложены необходимые для освоения курса сведения - краткий конспект лекций, методические указания к выполнению лабораторных работ, индивидуального задания, а также образцы тестовых вопросов. Направление подготовки 120700 «Защита информации».
Беляков, С. Л. Основы разработки программ на языке C++ для систем информационной безопасности : учебное пособие / С. Л. Беляков, А. В. Боженюк, М. В. Петряева ; Южный федеральный университет. - Ростов-на-Дону ; Таганрог : Издательство Южного федерального университета, 2020. - 152 с. - ISBN 978-5-9275-3521-7. - Текст : электронный. - URL: https://znanium.com/catalog/product/1308353 (дата обращения: 25.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего образования «ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»


                  Инженерно-технологическая академия




С. Л. БЕЛЯКОВ
                А. В. БОЖЕНЮК
                М. В. ПЕТРЯЕВА




ОСНОВЫ РАЗРАБОТКИ ПРОГРАММ НА ЯЗЫКЕ С++ ДЛЯ СИСТЕМ ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ



Учебное пособие















Ростов-на-Дону - Таганрог
Издательство Южного федерального университета 2020

      УДК 004.438:004.056 (075.8)
      ББК 32.973-018.1я73
            Б448
Печатается по решению кафедры информационно-аналитических систем безопасности Института компьютерных технологий и информационной безопасности Южного федерального университета (протокол № 5 от 20 февраля 2020 г.)


            Рецензенты:


доктор технических наук, профессор, заведующий кафедрой информатики Таганрогского института имени А. П. Чехова (филиал) «Ростовского государственного Экономического университета (РИНХ)» Я. Е. Ромм кандидат технических наук, доцент кафедры систем автоматического управления РСУ ЮФУ О. В. Косенко


            Беляков, С. Л.


      Б448     Основы разработки программ на языке С++ для систем информа           ционной безопасности : учебное пособие / С. Л. Беляков, А. В. Боже-нюк, М. В. Петряева ; Южный федеральный университет. - Ростов-на-Дону ; Таганрог : Издательство Южного федерального университета, 2020. - 152 с.
                ISBN 978-5-9275-3521-7
                Изложены необходимые для освоения курса сведения - краткий конспект лекций, методические указания к выполнению лабораторных работ, индивидуального задания, а Иакже образцы тестовых вопросов. Направление подготовки 120700 «Защита информации».

                                                 УДК 004.438:004.056 (075.8)
                                                       ББК 32.973-018.1я73 ISBN 978-5-9275-3521-7


                                         © Южный федеральный университет, 2020
                                         © Беляков С. Л., Боженюк А. В.,
                                           Петряева М. В., 2020
                                         © Оформление. Макет. Издательство.
                                           Южного федерального университета, 2020

                СОДЕРЖАНИЕ





    ВВЕДЕНИЕ............................................. 5
    1. КАЧЕСТВО ПРОГРАММ................................. 7
     1.1. Правильность программы......................... 7
     1.2. Надёжность программы........................... 9
     1.3. Время получения результата.................... 10
     1.4. Используемые ресурсы.......................... 10
     1.5. Защита........................................ 11
    2. ОСНОВНЫЕ ЭТАПЫ РАЗРАБОТКИ ПРОГРАММ............... 13
    3. АЛГОРИТМИЗАЦИЯ................................... 17
    4. ИСПОЛНЕНИЕ ПРОГРАММ.............................. 22
    5. СТРУКТУРА ПРОГРАММЫ  НА C++...................... 24
     5.1. Поточный ввод-вывод в C++..................... 27
     5.2. Вывод информации.............................. 28
     5.3. Ввод информации............................... 28
     5.4. Ввод символьных строк......................... 28
     5.5. Манипуляторы потока........................... 28
    6. ПЕРЕМЕННЫЕ ПРОГРАММЫ И ОБЛАСТИ ИХ ДЕЙСТВИЯ 32
    7. ТИПЫ ДАННЫХ...................................... 34
     7.1. Символьный тип................................ 35
     7.2. Числовые типы................................. 37
     7.3. Преобразование типов данных в С++............. 41
     7.4. Неявное преобразование типа................... 41
     7.5. Числовое расширение........................... 42
     7.6. Числовая конверсия............................ 42
     7.7. Обработка арифметических выражений............ 42
     7.8. Приоритет типов операндов..................... 43
     7.9. Явное преобразование типов данных............. 43
    8. ПОРАЗРЯДНАЯ ОБРАБОТКА ДАННЫХ..................... 46
     8.1. Шифрование матриц............................. 48
     8.2. Шифр Вернама.................................. 49

3

Содержание

      9. УКАЗАТЕЛИ................................... 50
      10. СИМВОЛЬНЫЕ МАССИВЫ И СТРОКИ................ 53
      11. ПЕРЕДАЧА ПАРАМЕТРОВ ФУНКЦИЯМ............... 57
      12. СТРУКТУРЫ И ОБЪЕДИНЕНИЯ.................... 61
      13. КЛАССЫ..................................... 64
      14. ВВОД И ВЫВОД ИНФОРМАЦИИ В ФАЙЛЫ............ 71
      15. КЛАССЫ СТРОК И СТРОКОВЫХ ПОТОКОВ........... 77
       15.1. Конструкторы строк...................... 79
       15.2. Арифметические операторы................ 80
       15.3. Потоки ввода (istream) ................. 81
      16. ДАТА И ВРЕМЯ В ПРОГРАММАХ НА С++........... 84
      17. ОБРАБОТКА ОШИБОК И ИСКЛЮЧЕНИЙ.............. 88
      18. ДИНАМИЧЕСКОЕ ВЫДЕЛЕНИЕ ПАМЯТИ.............. 94
      19. ТЕСТИРОВАНИЕ ПРОГРАММНОГО КОДА............. 98
      ЛАБОРАТОРНЫЕ РАБОТЫ........................... 102
       Лабораторная работа № 1 ..................... 102
       Лабораторная работа № 2...................... 105
       Лабораторная работа № 3 ..................... 108
       Лабораторная работа № 4...................... 109
       Лабораторная работа № 5...................... 111
      ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ........................ 114
       Общие требования к разработке................ 114
       Представление результата выполнения индивидуального задания.......................................... 121
      ПРИМЕРЫ ТЕСТОВЫХ ВОПРОСОВ..................... 124
      ЗАКЛЮЧЕНИЕ.................................... 150
      СПИСОК ЛИТЕРАТУРЫ............................. 151

ВВЕДЕНИЕ

         Программы определяют поведение и свойства любых информационных систем. От того, насколько эффективно работает программное обеспечение, зависит безопасность всякой системы, использующей компьютер. Поэтому важно представлять базовые механизмы, которые определяют свойства разрабатываемых программ. Эти свойства зависят от многих факторов, начиная от используемого языка программирования, набора технологических приемов программирования, и заканчивая уровнем организации команды программистов, реализующей проект. Данное учебное пособие предназначено для освоения современных принципов программирования, используя для этого язык С++. Это объясняется следующим.
         Язык С++ впитал в себя многие особенности современных языков программирования, позволяющие использовать его в чрезвычайно разнообразных областях. Такими областями являются встроенные системы управления оборудованием, системы телекоммуникаций, мобильные устройства, клиенты и серверы Интернет, информационные системы в экономике и бизнесе. Языковые возможности С++ таковы, что позволяют создавать программы как низкого, так и высокого уровня. Под низким уровнем понимают реализацию алгоритмов системного уровня, которые не зависят от прикладных задач. Примером подобного программирования могут быть алгоритмы шифрования, контроля доступа к информационным ресурсам. Под высоким уровнем программирования понимают реализацию задач специфического характера. Например, систем электронной коммерции в Интернет. Компоненты систем такого типа представляют на страницах Интернет товары и услуги, осуществляют рекламные функции, выполняют электронные платежи.
         Технологии разработки программ на С++ поддерживаются программными инструментами, разработанными для разных операционных систем. Практически любая современная операционная система имеет компилятор для языков С или С++. Многие из операционных систем поставляются в виде исходных текстов, написанных на этих языках.
         Методика оценки популярности базируется на статистике поисковых запросов к наиболее популярным поисковым системам Google, Yahoo,

5

Введение

      Bing, Amazon. Приведенные данные показывают, что «верхняя» часть рейтинга занята разновидностями языка С.
            Рейтинг популярности языков программирования показывает, что языки С и С++ в течение многих лет входят в «десятку» наиболее популярных языков программирования. По данным компании TIOBE Software BV[1], в 2019 г. рейтинг языков выглядел следующим образом:
Таблица 1

Рейтинг языков программирования

Декабрь Декабрь       Язык        Рейтинг
 2019    2018   программирования         
   1       1          Java        17,253%
   2       2            C         16,086%
   3       3         Python       10,308%
   4       4           C++        6,196% 
   5       6           C#         4,801% 
   6       5    Visual Basic .NET 4,743% 
   7       7       JavaScript     2,090% 
   8       8           PHP        2,048% 
   9       9           SQL        1,843% 
  10      14          Swift       1,490% 
  11      17          Ruby        1,314% 

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

                1. КАЧЕСТВО ПРОГРАММ





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


            1.1. Правильность программы


         Правильной считается та программа, которая соответствует исходному заданию на разработку (спецификации, рис. 1).
         Степень соответствия может оцениваться как количественно, так и качественно. Количественная оценка может даваться в процентах. Например, правильная на 50 % программа соответствует только половине заданных требований. Легко видеть, что такой способ измерения правильности не дает полного представления о качестве программы. Может оказаться не выполненным настолько важное требование, что оцениваемая программа окажется совершенно бесполезной либо чрезвычайно опасной.
         Качественные оценки правильности - это выражения вида «соответствует», «почти соответствует», «слабо соответствует», «не соответствует» и т.д. Правила качественной оценки оказываются на практике достаточно сложными и зависят от ряда количественных оценок. Например, программа может классифицироваться как «слабо соответствующая» спецификации, если не выполнено хотя бы одно из важных требований либо не соблюдается достаточно много некоторых специальных ограничений.


7

1. Качество программ

Рис. 1. Соответствие программы требованиям

            Задача оценки степени соответствия спецификации трудоемка. Чтобы убедиться в правильности программы, разрабатывают тесты. Всякий тест включает в себя описание того, что нужно знать и сделать для заключения о правильности программы. Тест содержит:
           1.      описание состояния программы, в котором предполагается проверить то или иное требование спецификации;
           2.      указание входных данных или воздействий, которым подвергается программа или система в целом;
           3.      описание требуемого результата или поведения, которое должно наблюдаться в случае соответствия спецификации.
            Принципиальной трудностью проверки правильности является изменение спецификации в ходе разработки. На практике исходное задание перед началом разработки имеет ряд неопределенностей, которые уточняются по ходу работы. Такой процесс следует считать объективным ввиду сложности решаемых задач.
            Большинство разработчиков проводят неофициальное тестирование, когда пишут свои программы. После написания части кода (функции, класса или фрагмента кода) разработчик пишет некий код для проверки только что добавленной части, и, если тест пройден успешно, разработчик удаляет код этого теста.
            При тестировании стоит нацеливаться на 100%-ное покрытие кода, ветвлений и циклов. Термин «покрытие кода» относится к количеству исходного кода программы, который был задействован во время тестирования. Термин «покрытие ветвлений» относится к проценту ветвлений, которые были выполнены в каждом случае (положительном и отрицательном)

8

1.2. Надёжность программы

      отдельно. Покрытие циклов (неофициально называемый «тест 0, 1, 2») сообщает, что если у вас есть цикл в коде, то, чтобы убедиться в его работоспособности, нужно его выполнить 0, 1 и 2 раза. Если он работает корректно во второй итерации, то должен работать корректно и для всех последующих итераций (3, 4, 10, 100 и т.д.).
         Модульные тесты позволяют разработчикам и тест-инженерам быстро искать логические ошибки в методах классов для проектов на языках C#, Visual Basic и C++. С помощью окна Обозреватель тестов вы можете создавать и выполнять модульные тесты для C++ в программе Visual studio 2017 и в более поздних версиях.
         Общее число тестов зависит от масштаба разрабатываемой программы или системы. Затраты на тестирование могут составлять до 40 % от стоимости всего проекта.


            1.2. Надёжность программы


         Надёжность - это способность системы работать без сбоев и отказов в течение заданного интервала времени. Данное определение для технических систем дается ГОСТ [3]. Может показаться, что это определение не применимо к программам, поскольку программный код не подвержен действию факторов внешней среды. Однако это не так. Причиной ненадежности программ являются наличие в программном коде не выявленных ошибок. Если качественно изобразить поведение вероятности отказа программы (рис. 2), то оно дает практически наблюдаемую картину: чем дольше работает программа, тем вероятней появление сбоя или отказа из-за не выявленной ошибки.
         Количественно надежность характеризуют набором стандартных показателей. Трудность достоверного оценивания надежности программ в том, что ошибки проявляются на определенных сочетаниях входных данных, перебрать которые полностью абсолютно невозможно. Надежность оценивается путем тестирования. Поскольку исчерпывающее тестирование невозможно, на практике иногда придерживаются некоторых эмпирических правил оценки уровня надежности. Например, считается, что профессионально написанный программный код содержит не более 10-12 не выявленных ошибок на 1000 строк кода.


9

1. Качество программ

Рис. 2. Поведение вероятности отказа программы



            1.3. Время получения результата


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


            1.4. Используемые ресурсы


            Всякая программа использует оперативную память, специализированные процессоры, память внешних устройств, пропускную способность канала связи и сетевые серверы (рис. 3). Эти объекты относят к ресурсам.


10

1.5. Защита

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

Рис. 3. Программа и используемые ресурсы

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



            1.5. Защита


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


11

1. Качество программ

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


Рис. 4. Эффективность системы защиты

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

Доступ онлайн
197 ₽
В корзину