
Тестирование («черного ящика»)
Когда нас интересует то, как работает программа или её части предоставляет соответствующие выходные данные, то мы тестируем ее, используя подходящие выходные данные. Это называется тестированием «черного ящика», поскольку мы не обращаем внимание на то, что находится внутри программы.
Стратегия тестирования, называемая стратегией «черного ящика», это тестирование с управлением по данным или тестирование с управлением по вводу-выводу. При использовании этой стратегии программа рассматривается как черный ящик,(т.е. внутреннее содержание которой неизвестно). Тестовые данные используются только в соответствии с спецификацией программы(т.е. без учета знаний о её внутренней структуре).
Для обнаружения всех ошибок в программе необходимо выполнить исчерпывающее тестирование, то есть тестирование на всевозможных наборах. Для большинства программ такое невозможно, поэтому применяют разумное тестирование, при котором тестирование программ ограничивается небольшим подмножеством всевозможных наборов данных. При этом необходимо выбрать наиболее подходящие подмножества с наивысшей вероятностью обнаружения ошибок. При этом походе обнаружение всех ошибок в программе является критерием исчерпывающего (всестороннего, полного, законченного) входного тестирования. Последнее может быть достигнуто, если в качестве тестовых наборов использовать все возможные наборы входных данных. Следовательно, для исчерпывающего текста повторение входного теста невозможно. Это подтверждается двумя аргументами: во-первых, нельзя создать тест гарантирующий отсутствие ошибок; во-вторых, разработка таких тестов противоречит экономическим требованиям. Поскольку исчерпывающее тестирование исключается, нашей целью должна стать максимализация результативности капиталовложений в тестирование (максимализация числа ошибок, обнаруживаемых одним тестом). Для этого необходимо рассматривать внутреннюю структуру программы.
Тестирование «белого ящика»)
Второй подход использует стратегию «белого ящика», или стратегию тестирования, управляемую логикой программы, которая позволяет исследовать внутреннюю структуру программы. В этом случае тестировщик получает тестовые данные путем анализа только логики программы и стремится, чтобы каждая команда была выполнена хотя бы один раз.
Тестировщик должен добиться, чтобы каждая команда условного перехода выполнялась бы в каждом направлении хотя бы один раз. Цикл должен выполняться один раз, ни разу или максимальное количество раз. В программе из двух последовательных циклов, внутри каждого из которых включено разветвление на десять путей, имеется 1018 путей расчета. Причем выполнение всех путей расчета не гарантирует выполнение всех спецификаций. ( Для справки: возраст вселенной 1017 световых лет.)
Подразумевается, что программа проверена полностью, если с помощь тестов удается осуществить выполнение этой программы по всем возможным маршрутам ее потока(графа) передач управления. Это утверждение имеет два слабых пункта: во-первых, число не повторяющих друг друга маршрутов астрономическое; во-вторых, даже если каждый маршрут может быть проверен, сама программа может содержать ошибки(например, некоторые маршруты пропущены).
Поэтому реальным путем, который позволит создать стратегию, является сочетание тестирования программы несколькими методами.
Рассмотрим пример тестирования оператора
If A and B then…
При использовании разных критериев полноты тестирования.
При категории покрытия условий требовались бы два теста А=труе, В=фэлс и А=фэлс, В=труе.
Но в этом случае не выполняется Then –предложение оператора if.
ПРОЕКТИРОВАНИЕ ТЕСТОВ БОЛЬШИХ ПРОГРАММ
Проектирование тестов больших программ пока остается искусством и является наукой. Чтобы построить разумную стратегию тестирования, надо сочетать оба эти подхода и пользоваться математическими доказательствами.
Восходящее тестирование
Сначала автономно тестируются модули нижних уровней, которые не вызывают других модулей. При этом достигается такая же их высокая надежность, как и у встроенных в компилятор функций. Затем тестируются модули более высоких уровней вместе с уже проверенными модулями и т.д. по схеме иерархии.
При восходящем тестировании для каждого модуля необходима ведущая программа. Это монитор или драйвер, который подает тесты в соответствии со спецификациями тестов. Ряд фирм выпускает промышленные драйвера или мониторы тестов.
Нисходящее тестирование
При этом подходе изолированно тестируется головной модуль или группа модулей головного ядра. Программа собирается и тестируется сверху вниз. Недостающие модули заменяются заглушками
Заглушка – это макет модуля. Самая простая заглушка это подпрограмма или функция без действий. Более сложная заглушка может выводить сообщение о том, что отработал модуль.
Ещё более сложные заглушки могут выводить входную часть информацию в какой-нибудь файл отладки. Наконец, еще более сложные заглушки выдают на выход тестовую информацию, необходимую для проверки уже реализованных модулей.
Написание заглушек – «лишняя» работа, но требуется искусство проектировщика, чтобы максимальное количество заглушек были простыми, а тестирование уже собранной части программы было бы полным.
Достоинства нисходящего тестирования в том, что этот метод совершает тестирование модуля с тестированием сопряжений и частично тестирует функции модуля. Когда уже начинает работать ввод/вывод модуля, удобно готовить тесты.
Недостатки нисходящего тестирования в том, что модуль редко досконально тестируется сразу после его подключения. Для основательного тестирования требуются изощренные заглушки. Часто программисты откладывают тщательное тестирование и даже забывают о нем. Другой недостаток - желание начать программирование еще до конца проектирования. Если ядро уже запрограммировано, то возникает сопротивление всяким его изменениям, даже для улучшения структуры программы. В конечном итоге, именно рационализация структуры программы за счет проведения проектных итераций способствует достижению большей экономии, чем дает ранее программирование.
Модифицированный нисходящий метод. Согласно этому методу, каждый модуль автономно тестируется перед включением в программу, собираемую сверху вниз.
Метод большого скачка – каждый модуль тестируется автономно. По окончании автономного тестирования всех модулей, модули просто интегрируются в готовую программную систему. Как правило, это метод нежелателен. Однако если программа мала и хорошо спроектирована по сопряжениям, то метод большого скачка вполне приемлем.
Метод свитча представляет собой компромисс между нисходящим и восходящим подходам. По этому методу реализация и тестирование ведутся одновременно сверху и снизу и два этих процесса встречаются в заранее намеченной временной точке.
Модифицированный метод свитча: нижние модули тестируются строго снизу вверх, а модули верхних модулей сначала тестируются автономно, а затем собираются нисходящим методом.
Средства журнализации и восстановления баз данных ПОСЛЕ СБОЕВ
Действие закона № 24 от 20.02.1995 ФЗ
Преднамеренные и непреднамеренные угрозы
Предамеренные угрозы — действия человека, совершаемые умышленно, для дезорганизации работы системы, вывода системы из строя, для незаконного доступа в ситему(Физическое уничтожение системы, хищегие носителей информации, чтение остаточной информации из озу, несанкционированное копирование, перехват информации и вербовка персонала).
К основным непреднамеренным искусственным угрозам относятся: неумышленные действия , приводящие к чястичному или полному отказу системы, разрушению аппаратных, программных. Информационных ресурсов системы, неумышленная порча, удаление, искажение файлов с вазной инфорцией или программно. Нправомерное выключание оборудования или изменение режимов работы устройств и программ. Запуск технологичеких программ, способные при некомпитентном успользовании вызывать потерю работоспособности ситемы, зависание или зацикливания, осуществляющих необратимые изменения в системе(удаление, форматирование, реструктуризация носителей информации).
Нелегальное внедрение и использование неучтенных программ(игры, обучающие, тенологических, не являюищехся необхрдимиы для выполнения нарушителем своих служебных обязанностей) с последующим необоснованным доступам к ресарсом, заражение компьютерра вирусами, разглашение, передача или утрата атрибутов разграничения доступа(Пароли, ключи шифрования, идентификационных крточек). Проектирование архитектуры системы, разработка прикладных программ с возможностями, представляющими опасность для работоспособности системы и безопвсности информации. Игнорирование организационных ограничений, установленных правил при работе с ситемой. Вход в систему в обход средств защиты(згрузка посторонней ос со сменных магнитных носитей). Некомпитентное использование, настройка или неправомерное окличение средств защиты персонала службы безопасности. Пересылка данных данных по ошибочному адресу абонента. Неумышленное повреждение каналов связи.
Преднамеренные |
Непреднамеренные |
Взлом (несанкционированный доступ к информации) |
Ошибочно выполненные действия (Ой, что я нажала?) |
Кража оборудования. |
Пересылка данных по ошибочному адресу. |
Слив информации. Шпионаж. (Сноуден) |
Воздействие окружающией среды(Повышенная влажность) |
Разработка программ, представляеющие угрозу информации. (вирусы) |
Хакерские атаки |
Повреждение кналов связи. (срез кабелей граданами мира на бутылку) |
|
Нелегальное внедрение и использование. неучтенных программ (Игры) |
|
Форматирование |
|
Естественные |
Искусственные |
Влияние окружающией среды |
|
Основные преднамеренные искусственные угрозы:
Физическое разрушение системы
Отключение или вывод из строя подсистем обеспечения
Действия по дизорганизации функционирования системы
Внедрение агентов в число персонала системы
Вербовка
Применение подслушивающих утройст, фото и видеосъемка,
Перехват побочных электромагнитных устройств каналов связи
Хищение носителе информации
несанкционированное копирование носителей информации
Вскрытие шифров криптозащиты информации
Основные преднамеренные искусственные урозы:
Физическое разрушение ситемы. Вывод из строя всех или отдельных наиболее важных компонентов компьютерной системы(устройсв, носителей важной системной информции.
Отключение и вивод из строя подсистем функционирования вычислительных систем (отключение электропитания, охлпждение, повреждение линий каналов связи)
Действия по дизорганизации функционирования системы(Изменение режимов работы устройств или программ, забостовка и саботаж персонала, постоновка мощных активных радиопомех на частотах работы устройств системы)
Внедрение агентов в число персонала системы (в административную группу, отвечающую за безопасность)
Вербовка путем подкупо или шантажа персонал а или отдельных полдьзователей
Применение подслушивающих устройсв
Перехват побочных электромагнитных акустических и других излучений устройств, линий связи, а также наводок активных излучений на вспомогательные технические средства, непосредственно не учствующие в обработке информации.
Перехват данных, передававаемых по каналам связи и х анализ с целью выяснения протоколов обмена, правил вхождения в связь и авторизация пользователя.
Хиспользуя хищение носителей информации(стырить флэшку, кража микросхем памяти и магнитных дисков)
Несанкционированное копирование носителя информации
Хищиние производственных отходов
Чтение остаточной информации из ОЗУ и ВЗУ
Чтение информции из облостей ОЗУ, испольемых ОС, в том числе под системой защиты в асинхронном режиме, используя недостатки мультизадачных систем программировани
Незокнное получение поролей и других реквизитов разграничения доступа (агентурным путем, исползуя халатность пользователя, путем иммитации работы системы с последующей маскировкой под зарегистрированнго пользователя.
Несанкционированное ипользование терминалов, имеющих уникальные физические характеристики( номер рабочей станции, физический адрес, адрес ситемы связи, аппаратный блок кодирования)
Вскрытие шифров криптозащиты информации
Внедрение аппаратных спец вложений, программных закльадов и вирусов. Таких участков программ, которые не нужны для осуществления заявленных функции, но позволяющих преодолевать ситемы защиты.
Незаконное подключение к линиям связи с целью работы между строк с использованием пауз в действиях законного пользователя от его имени с последующим вводом ложных сообщений или модификацией передаваемых сообщений.
Незаконное подключение к линиям связи с целью прямой подмены законного пользователя путем его физичекого отключения входа в стсьему и успехной аутдентификации с последующим вводом дезинформации и навазыванием и ложных сообщений
Основные способы кодирования информации