Принципы безопасности программного обеспечения



Общая стратегия безопасности основывается на трех основных принципах:

1. конфиденциальность

2. целостность

3. доступность

Конфиденциальность

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

Целостность

Существует два основных критерия при определении понятия целостности:

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

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

Доступность

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

Виды уязвимостей

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

· XSS (Cross-Site Scripting) - это вид уязвимости программного обеспечения (Web приложений), при которой, на генерированной сервером странице, выполняются вредоносные скрипты, с целью атаки клиента.

· XSRF / CSRF (Request Forgery) - это вид уязвимости, позволяющий использовать недостатки HTTP протокола, при этом злоумышленники работают по следующей схеме: ссылка на вредоносный сайт установливается на странице, пользующейся доверием у пользователя, при переходе по вредоносной ссылке выполняется скрипт, сохраняющий личные данные пользователя (пароли, платежные данные и т.д.), либо отправляющий СПАМ сообщения от лица пользователя, либо изменяет доступ к учетной записи пользователя, для получения полного контроля над ней.

· Code injections (SQL, PHP, ASP и т.д.) - это вид уязвимости, при котором становится возможно осуществить запуск исполняемого кода с целью получения доступа к системным ресурсам, несанкционированного доступа к данным либо выведения системы из строя.

· Server-Side Includes (SSI) Injection - это вид уязвимости, использующий вставку серверных команд в HTML код или запуск их напрямую с сервера.

· Authorization Bypass - это вид уязвимости, при котором возможно получить несанкционированный доступ к учетной записи или документам другого пользователя


 

 

Инсталляционное тестирование

Цель работы

7.1.1 Научиться создавать инсталляционные файлы

Приборы и оборудование

7.2.1 Методические указания по выполнению практического занятия.

Порядок выполнения работы

7.3.1 Изучите необходимые теоретические сведения.

7.3.2 С помощью системы создания инсталляторов создайте из программы, созданной ранее, установочный файл.

7.3.3 Выполните тестирование удобства установки.

7.3.4 Выполните тестирование конфигурации оборудования.

7.3.5 Выполните тестирование восстановления.

7.3.6 Выполните тестирование удобства эксплуатации при помощи соседа.

7.3.7 Результаты выполнения практического задания запишите в отчет.

Контрольные вопросы

7.4.1  Что является целью тестирования программ?

7.4.2 Какие подходы к тестированию вы знаете? В чем они заключаются?

7.4.3 Обоснуйте необходимость создания инсталляторов программ.


 

 

Приложение Л

ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Системы для создания инсталляторов

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

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

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

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

- среда разработки, интерфейс, поддержка сценариев;

- работа с проектом, типы создаваемых пакетов, возможности импорта проектов из других сред разработки;

- пользовательские опции инсталлятора: поддержка языков, профилей и другие опции;

- поддержка расширений.

Свободные программы для создания инсталляторов:

- NSIS (Nullsoft Scriptable Install System) – один из самых популярных инсталляторов. Обладает богатыми возможностями, которые присутствуют в большинстве коммерческих продуктов. Позволяет устанавливать различные параметры сжатия при создании дистрибутива;

- IzPack – java инсталлятор. Это универсальный инсталлятор, способен создавать дистрибутивы для Unix, Linux, FreeBSD, Mac OS X и Windows 2000, XP. Позволяет создавать как обычные пакеты инсталляции, так и Web инсталляторы, которые подгружают необходимые файлы по мере необходимости. Данная возможность позволяет свести к минимуму количество загружаемых файлов в зависимости от требуемой конфигурации установки;

- Inno Setup –довольно популярный простой инталлятор. Содержит встроенный скриптовой язык;

- WiX (Windows Installer XML) – специализированный продукт от Microsoft для создания MSI и MSM инсталляционных пакетов.

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

- InstallShield – один из самых известных продуктов в ряду инсталляторов;

- WISE – простой в освоении с богатыми возможностями генератор инсталляторов;

- VISE - профессиональный инсталлятор для Windows, MacOS X и Macintosh;

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

- Advanced Installer – позволяет создавать инсталляторы для java приложений. Создает дополнительный исполняемый файл.

CreateInstall

Домашняя страница: http://www.createinstall.ru/

CreateInstall – инструментарий для создания установщиков. В его основу заложено две особенности – контроль над процессом установки и неограниченная расширяемость. Обе возможности реализованы благодаря языку программирования Gentee, применяемому для написания сценариев.

Интерфейс CreateInstall разбит на 3 вкладки – «Проект», «Скрипт установки» и «Скрипт деинсталляции». Первый раздел позволяет задать общие настройки инсталлятора: информация о продукте, поддерживаемые языки, пути, внешний вид. Дополнительно, инсталлятор можно защитить цифровой подписью и установить пароль.

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

Дополнением для CreateInstall служит утилита Quick CreateInstall (рисунок 1). Она значительно упрощает создание инсталлятора, предоставляя только базовые настройки проекта. Из Quick CreateInstall в дальнейшем проект можно импортировать в CreateInstall.

Рисунок 1 – Окно Quick CreateInstall

 

Код проекта не предназначен для самостоятельного редактирования, переноса в IDE-среду, экспорта. Хотя язык Gentee имеет отличный потенциал: как минимум, это переменные и функции, условные выражения и синтаксис, базирующийся на C, C++ и Java.

Существует 3 редакции программы – полная, light (простая) и бесплатная.

Интерфейс и справка доступны на русском языке.

Advanced Installer

Advanced Installer основывается на технологии Windows Inslaller, позволяя создавать msi-, exe- и других видов дистрибутивов. Этому способствует продуманный интерфейс и работа с проектами. В Advanced Installer можно обнаружить немало возможностей, которых нет в других подобных комплексах.

Рисунок 2 – Окно Advanced Installer

 

Примечательно, прежде всего, разнообразие проектов: сюда входят инсталляторы, Java-установщики, обновления, дополнения, модули слияния и другие. В разделе меню Installer собраны команды импорта проектов из Visual Studio, RAD Studio, Real Studio, Visual Basic. Здесь раскрывается потенциал Advanced Installer во взаимодействии с IDE-средами.

Для каждого из выбранных типов проекта предусмотрен детальный мастер настройки. Есть общие шаблоны – Simple, Enterprise, Architect или Professional. Большая часть проектов доступна только для определенных типов лицензии, общедоступные проекты обозначены как None в графе License Required.

Как уже сказано, при создании проекта можно воспользоваться пошаговым мастером, где, в частности, доступен выбор способа распространения пакета, языков локализации, настройка пользовательского интерфейса, ввод текста лицензии и другие опции. Advanced Installer позволяет выбрать вариант распространения программы – оставить данные без компрессии, разделить на CAB-архивы, сохранить в MSI и др., добавить цифровую подпись, потребовать ввод серийного номера и т. д.

Главное окно Advanced Installer (редактор проекта), в простом режиме отображения (Simple), содержит несколько секций:

- Product Information (Информация о продукте) – ввод сведений о продукте, параметры установки.

- Requirements (Требования) – указание аппаратных и системных требований, зависимостей ПО. Также имеется возможность создания пользовательских условий.

- Resources (Ресурсы) – редактор ресурсов (файлов и ключей реестра).

- Deployment (Развертывание) – выбор типа распространения продукта. Это может быть MSI, EXE или веб-инсталлятор. Для MSI, EXE ресурсы можно поместить отдельно от инсталлятора.

- System Changes – переменные среды.

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

Для выполнения более сложных задач позволяется использовать пользовательские действия, EXE, DLL или скрипты, написанные на C, C++, VBS или JS. Для создания сценариев предусмотрен удобный редактор.

Однако следует отметить, что в режиме Simple доступна лишь малая часть разделов. Работая с Advanced Installer в ознакомительном режиме, есть смысл зайти в настройки и переключиться в другой режим работы с проектом. После этих действий становятся доступны новые подразделы редактора.

 


 

Создание Unit тестов

Цель работы

8.1.1 Научиться осуществлять Unit тестирование.

Приборы и оборудование

8.2.1 ПЭВМ типа IBM PC.

8.2.2 Методические указания по выполнению практического занятия.

Порядок выполнения работы

8.3.1 Изучите необходимые теоретические сведения.

8.3.2 Рассмотрим простой пример создания unit-тестов. Для этого создадим консольное приложение Calc, которое умеет делить и суммировать числа.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Calc

{

class Program

{

   static void Main(string[] args)

   {

   }

}

}

Добавляем класс, в котором будут производиться математические операции.

using System;

namespace Calc

{

/// <summary>

/// Выполнение простых математических действий над числами

/// </summary>

public class Calculator

{

   /// <summary>

   /// Получаем результат операции деления (n1 / n2)

   /// </summary>

   /// <param name="n1">Первое число</param>

   /// <param name="n2">Второе число</param>

   /// <returns>Результат</returns>

   public double Div(double n1, double n2)

   {

       // Проверка деления на "0"

       if (n2 == 0.0D)

           throw new DivideByZeroException();

       return n1 / n2;

   }

 

   /// <summary>

   /// Получаем результат сложения чисел и их увеличения на единицу

   /// </summary>

   /// <param name="n1"></param>

   /// <param name="n2"></param>

   /// <returns></returns>

   public double AddWithInc(double n1, double n2)

   {

       return n1 + n2 + 1;

   }

}

}

Так, в методе Div производится операция деления числа n1 на число n2. Если передаваемое число n2 будет равняться нулю, то такая ситуация приведет к исключению. Для этого знаменатель этой операции проверяется на равенство нулю.

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

На следующем шаге добавим в решение проект модульного теста (.NET Framework).

Рисунок 1 - Добавляем в решение проект

Рисунок 2 - Выбираем Проект модульного теста (.NET Framework)

Пустой проект unit-тестов:

using System;

using Microsoft.VisualStudio.TestTools.UnitTesting;

 

namespace CalcTests

{

[TestClass]

public class UnitTest1

{

   [TestMethod]

   public void TestMethod1()

   {

   }

}

}

Переименуем наш проект: «SimpleCalculatorTests». Добавляем ссылку на проект Calc.

Рисунок 3 - Добавляем ссылку на проект

Рисунок 4 - Выбираем наш основной проект

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

Добавляем для проверки метод AddWithInc.

 

/// <summary>

/// Тест проверки метода AddWithInc

/// </summary>

[TestMethod]

public void AddWithInc_2Plus3Inc1_Returned6()

{

// arrange

var calc = new Calculator();

double arg1 = 2;

double arg2 = 3;

double expected = 6;

// act

double result = calc.AddWithInc(arg1, arg2);

// assert           

Assert.AreEqual(expected, result);

}

В тесте создаются 3 переменные — это аргументы, передаваемые в метод AddWithInc, и ожидаемый результат, возвращаемый этим методом. Результат выполнения метода будет записан в переменную result.

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

Следующим тестом мы будем проверять метод Div

[TestMethod]

public void Div_4Div2_Returned2()

{

// arrange

var calc = new Calculator();

double arg1 = 4;

double arg2 = 2;

double expected = 2;

// act

double result = calc.Div(arg1, arg2);

// assert           

Assert.AreEqual(expected, result);

}

Аналогичным образом создаются два аргумента и ожидаемый результат выполнения метода Div. Если результат деления 4/2 в методе равен 2, то тест считается пройдённым. В противном случае — не пройденным.

Следующий тест будет проверять операцию деления на нуль в методе Div.

[TestMethod]

[ExpectedException(typeof(DivideByZeroException),

"Oh my god, we can't divison on zero")]

public void Div_4Div0_ZeroDivException()

{

// arrange

var calc = new Calculator();

double arg1 = 4;

double arg2 = 0;

// act

double result = calc.Div(arg1, arg2);

// assert           

}

Тест будет считаться пройденным в случае возникновения исключения DivideByZeroException — деление на нуль. В отличии от двух предыдущих тестов, в этом тесте нет оператора Assert. Здесь обработка ожидаемого результата производится с помощью атрибута «ExpectedException».

Если аргумент 2 равен нулю, то в методе Divвозникнет исключение — деление на нуль. В таком случае тест считается пройденным. В случае, когда аргумент 2 будет отличен от нуля, тест считается проваленным.

Для запуска теста необходимо открыть окно Test Explorer. Для этого нажмите Test -> Windows -> Test Explorer (Ctrl+, T). В появившемся окне можно увидеть 3 добавленных теста:

Рисунок 5 - Открываем обозреватель тестов

Для запуска всех тестов нажмите Test -> Run -> All tests (Ctrl+, A).

Рисунок 6 - Выполняем все тесты

Если тесты выполнятся успешно, в окне Test Explorer отобразятся зеленые пиктограммы, обозначающие успешность выполнения.

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

Контрольные вопросы

8.4.1 Что такое Unit тестирование?


 

Приложение М

ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Модульное тестирование (Unit Testing) - это тип тестирования программного обеспечения, при котором тестируются отдельные модули или компоненты программного обеспечения. Его цель заключается в том, чтобы проверить, что каждая единица программного кода работает должным образом. Данный вид тестирование выполняется разработчиками на этапе кодирования приложения. Модульные тесты изолируют часть кода и проверяют его работоспособность. Единицей для измерения может служить отдельная функция, метод, процедура, модуль или объект.

В моделях разработки SDLC, STLC, V Model модульное тестирование - это первый уровень тестирования, выполняемый перед интеграционным тестированием.

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


Дата добавления: 2021-02-10; просмотров: 246; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!