Текст
                    
Е.А. Павлова Технологии разработки современных информационных систем на платформе Microsoft.NET Учебное пособие 4-е издание (электронное) Интернет-Университет Информационных Технологий www.intuit.ru Ай Пи Ар Медиа Москва 2024
УДК 004 ББК 32.97 Павлова, Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET : учебное пособие / Е.А. Павлова. — 4-е изд. (эл.) — Москва : Национальный Открытый Университет «ИНТУИТ» : Ай Пи Ар Медиа, 2024. — 128 с. — Текст : электронный. ISBN 978-5-4497-2463-2 В учебном пособии дается общее представление о некоторых современных подходах к разработке программных систем, современных информационных технологиях, используемых при создании различных приложений: windows-приложений с графическим интерфейсом пользователя, web-приложений и приложений для различных устройств, таких как встраиваемые системы, карманные компьютеры и SmartPhone, о платформах для разработки программ, использующих .NET, о мобильных устройствах, исполняемых на них операционных системах и особенностях разработки программ для таких устройств и технологиях защиты информации. Издание включает обзорные лекции, посвященные платформе Microsoft .NET, а также связанные с ней лекции по технологиям и программным системам. Предназначено для студентов, обучающихся по направлениям подготовки, связанным с информатикой и информационными технологиями, а также для всех, кто интересуется разработкой информационных систем. Учебное электронное издание Технический редактор Е.А. Семенова Обложка С.С. Сизиумова, Я.А. Кирсанов Подписано к использованию 10.10.2023. © ООО «ИНТУИТ.РУ», 2008–2016 © Павлова Е.А., 2008–2016 © Оформление электронного издания. ООО Компания «Ай Пи Ар Медиа», 2024
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Содержание 1. Платформа Microsoft .NET. Обзор архитектуры и 4 возможностей 11 2. Rotor и Mono 3. Phoenix 18 4. С# 3.0 30 5. Современные средства разработки Web-приложений. 39 ASP .NET 1.1 и 2.0 6. XML Web Services. Обзор технологии 50 7. Встраиваемые операционные системы. Область 59 применения и основы разработки 8. Разработка приложений для мобильных устройств: 65 Smartphones, Pocket PC 71 9. Технологии операционной системы Windows Vista 79 10. Новая файловая система WinFS 87 11. Современные технологии защиты информации 12. Доверительные вычисления 101 (Trustworthy computing) 13. Разработка информационных систем на основе 113 шаблонов 14. Современные технологии тестирования 120 3
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Платформа Microsoft .NET. Обзор архитектуры и возможностей Инициатива Microsoft .NET. Проблемы совместимости, надежности и повторного использования компонентов. .NET Framework. Общеязыковая исполняющая среда CLR. Псевдомашинный язык CIL (управляемый assembler). JIT-компилятор. Языки программирования. Сборки. Метаданные. Сборщик мусора. Библиотека классов .NET Framework Проблемы разработки современных информационных систем Проблемы интеграции Модулей, написанных на различных языках, использующих разный API (или версии API) или разный формат представления данных; Программ, разработанных для различных платформ, в рамках единого программного комплекса; Систем, использующих разные программные модели. Особенно часто возникают проблемы интеграции с унаследованным кодом (legacy). При решении задач интеграции возникают проблемы несовместимости. Проблемы переносимости Все чаще к программам предъявляются требования поддержки нескольких платформ (например, возможность работы с программой на платформе Windows и Mac OS). Проблемы версий 4
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Windows-разработчики знают о проблеме совместимости версий, известной под названием "ад DLL". Этот "ад" возникает, когда компоненты, устанавливаемые для нового приложения, заменяют компоненты старого приложения. В итоге старое приложение начинает работать неправильно или перестает работать. Управление ресурсами Одной из проблем программирования является управление и корректное освобождение ресурсов, файлов, памяти, пространства экрана, сетевых соединений, ресурсов баз данных и т. д. Некорректное управление этими ресурсами может привести к некорректному выполнению программы. Безопасность типов Когда упоминают проблему безопасности типов, имеют в виду некорректное обращение с типами данных: попытки обратиться к областям памяти за границей типа, попытки вызвать методы, отсутствующие у типа, или попытки вызвать метод, принимающий в качестве параметра тип А, и передать ему в качестве параметра объект типа В. Обработка сбоев При разработке Windows-приложений с использованием Win32 API некоторые функции возвращают исключения, другие — коды состояний, третьи — HRESULT. Таким образом, отсутствует согласованный механизм обработки сбоев и есть возможность игнорировать некоторые исключения, что делает код небезопасным. Эти и другие проблемы разработки информационных систем помогает решать платформа Microsoft .NET. Решение проблем разработки информационных систем 5
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET в .NET Один из способов решения проблемы неоднородности — разработка и поддержка стандартных программных интерфейсов, облегчающих задачу переноса приложений на серверы различных платформ. Однако приложения могут использовать базы данных, коммуникационные и другие сервисы, интерфейсы которых не являются компонентами языка или среды программирования. Другой способ, применяемый производителями для решения проблемы неоднородности, — поддержка стандартных протоколов. Системы, поддерживающие один и тот же протокол, могут взаимодействовать друг с другом, даже если они опираются на различные машинные архитектуры и операционные системы. Технология .NET представляет собой способ разработки и развертывания программного обеспечения, который с помощью таких широко используемых стандартов, как HTTP и XML, реализует взаимодействие программ и обеспечивает доступ через Internet к многочисленным программным сервисам. Технология включает .NET Framework — платформу для разработки и исполнения приложений, которая упрощает и ускоряет разработку, поддерживает полноценное объектно-ориентированное программирование для Web, устраняет многие типы наиболее распространенных программных ошибок, предоставляет общий API для всех языков. Что составляет Microsoft .NET .NET Framework — инфраструктура разработки приложений. Ее основные компоненты — общеязыковая исполняющая среда (Common Language Runtime) и библиотека классов .NET Framework Class Library. Общеязыковая исполняющая среда (Common Language Runtime) Common Language Runtime (CLR) — общеязыковая исполняющая среда, абстрагирующая сервисы операционной системы и исполняющая управляемые приложения, любое действие которых должно получить 6
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET разрешение со стороны CLR. Весь код для платформы .NET преобразуется CLR в промежуточный код на языке CIL. Поэтому разработчики могут легко интегрировать код, написанный для .NET на различных языках программирования. Все, что можно сделать на одном .NET-совместимом языке (за редким исключением), можно сделать на любом другом. Код на этих языках компилируется в код на одном языке — языке CIL. CLR расположена поверх операционной системы и предоставляет виртуальную среду для управляемых приложений. Код для платформы .NET либо исполняется CLR, либо получает разрешение на исполнение за ее пределами. Код для CLR представляет собой команды псевдомашинного языка Common Intermediate Language (CIL). Эти команды компилируются в машинный код соответствующего типа процессора по запросу (just-intime) в период выполнения. Обычно компиляция метода происходит один раз во время его первого вызова. Затем результат кэшируется в памяти, чтобы избежать задержек при повторных вызовах. JITкомпилятор выполняет оптимизацию кода специально для процессора, на котором исполняется этот код. Преобразуя команды CIL в команды процессора, JIT-компилятор выполняет верификацию кода на предмет безопасности типов. Практически невозможно выполнить команду, обращающуюся к области памяти, к которой у этой команды нет разрешения на доступ. В управляемом приложении устраняется проблема ошибочно инициализированных указателей, запрещается преобразовать тип в нечто, чем он не является, так как это нарушение безопасности типов. CLR не позволяет вызывать методы с разрушенным стековым фреймом. Ресурсы, выделяемые управляемым кодом, освобождаются сборщиком мусора. Иначе говоря, программист только выделяет память, но не освобождает ее — это делает CLR. Сборщик мусора отслеживает все ссылки на объекты, создаваемые программой, и уничтожает эти объекты, когда занимаемая ими память требуется где-то еще. Таким образом в приложениях с управляемым кодом разрешается проблема утечек памяти. 7
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Верификация кода также является основой способности CLR выполнять несколько приложений внутри одного процесса. Процесс разделяется на виртуальные отсеки — домены приложений (application domain). Таким образом повышается эффективность использования памяти, выделяемой процессам. Домены приложений не менее безопасны, чем процессы, так как их границы не могут быть нарушены управляемыми приложениями. .NET Framework Class library (FCL) В .NET включены сборки библиотеки классов .NET Framework Class library (FCL), содержащие определения нескольких тысяч типов, каждый из которых предоставляет некоторую функциональность. Наборы "родственных" типов собраны в отдельные пространства имен. Так, пространство имен System содержит базовый класс Object, из которого в конечном счете порождаются все остальные типы. Таким образом, всякая сущность в .NET является объектом со своими полями и методами. Кроме того, System содержит типы для целых чисел, символов, строк, обработки исключений, консольного ввода/вывода, группу типов для безопасного преобразования одних типов в другие, форматирования данных, генерации случайных чисел и выполнения математических операций. Типами из пространства имен System пользуются все приложения. Для изменения существующего FCL-типа можно создать свой собственный производный тип. Можно создавать свои собственные пространства имен. Все это будет четко соответствовать принципам, предлагаемым платформой .NET Приведем некоторые наиболее распространенные пространства имен и краткое описание содержащихся там типов. Основные пространства имен FCL Пространство имен Содержание Фундаментальные типы данных и System 8
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET System вспомогательные классы Хэш-таблицы, массивы переменной размерности и другие контейнеры System.Data Классы ADO .NET для доступа к данным System.Drawing Классы для вывода графики (GDI+) System.IO Классы файлового и потокового ввода/вывода Классы для работы с сетевыми протоколами, System.Net например с HTTP System.Reflection Классы для чтения и записи метаданных System.Runtime.Remoting Классы для распределенных приложений System.ServiceProcess Классы для создания служб Wndows System.Threading Классы для создания и управления потоками System.Web Классы для поддержки HTTP System.Web.Services Классы для разработки web-сервисов System.Collections System.Web.Services. System.Web.UI System.Web.UI. WebControls System.Wndows.Forms System.Xml Классы для разработки клиентов web-сервисов Protocols Основные классы, используемые ASP .NET Серверные элементы управления ASP .NET Классы для приложений с графическим интерфейсом пользователя Классы для чтения и ввода данных в формате XML Все управляемые приложения используют библиотеку классов FCL. Это упрощает интеграцию приложений и позволяет легче переносить приложения с одного языка на другой. Итоги Инфраструктура .NET Framework поддерживает разработку и исполнение различных приложений. .NET Framework ставит своей целью решение следующих задач: 9
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET предоставление объектно-ориентированной среды программирования; предоставление среды исполнения, решающей проблемы конфликта версий; предоставление среды безопасного исполнения кода (безопасность типов и другие особенности управляемого кода); предоставление среды исполнения, улучшающей производительность за счет управления памятью и кэширования результатов компиляции; улучшение интеграции и переносимости приложений за счет использования общего промежуточного языка и библиотеки типов. .NET Framework состоит из двух основных компонент: общеязыковой исполняющей среды (CLR) и библиотеки классов .NET Framework. 10
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Rotor и Mono Mono - открытая платформа для разработки кроссплатформенных (Linux, MAC, Windows) приложений на основе .NET Framework. Rotor реализация .NET с открытыми исходными тестами. Компоненты Rotor: компиляторы, CLI, системные и вспомогательные средства Mono Mono - платформа разработки с открытыми исходными кодами, основанная на Microsoft .NET Framework. Mono позволяет разработчикам, имеющим дело с платформами UNIX, Linux, FreeBSD, Mac OS X, Solaris и Windows, создавать и развертывать кроссплатформенные приложения стандарта .NET Проект Mono спонсируется компанией Novell. Mono включает в себя как средства разработки, так и инфраструктуру, необходимую для исполнения клиентских и серверных .NET-приложений. Mono позиционируется как "средство будущего для разработки Linux-приложений". Реализация .NET в Mono основана на стандартах ECMA и включает среди прочего компилятор C#, общеязыковую исполняющую среду (Common Language Runtime) и множество библиотек. Библиотеки представляют собой библиотеки Microsoft .NET (в том числе ADO .NET, System.Windows.Forms и ASP .NET), совместимые с конкретными платформами, собственные библиотеки Mono и библиотеки классов сторонних разработчиков. В состав Mono входит Gtk# - множество расширений .NET для инструментария Gtk+ и различные библиотеки GNOME. Эти библиотеки позволяют разрабатывать полноценные GNOME-приложения с использованием Mono. Кроме того, библиотеки поддерживают разработку пользовательских интерфейсов с использованием GLADE. Проект Mono также включает интегрированную среду разработки (IDE), визуальные средства отладки и редактирования. Компоненты Mono Mono состоит из трех групп компонент: 1) компоненты ядра; 2) стек 11
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET разработки для Mono/Linux/GNOME; и 3) стек компонент Microsoft. К компонентам ядра относятся компилятор C#, виртуальная машина и основные библиотеки классов. Эти компоненты основаны на стандартах Ecma-334 и Ecma-335. Таким образом, Mono предоставляет соответствующую стандартам бесплатную версию виртуальной машины общеязыковой среды (CLI) с открытым исходным кодом. Стек разработки для Mono/Linux/GNOME предоставляет инструменты для разработки приложений с использованием библиотек GNOME и других бесплатных библиотек с открытым исходным кодом. К ним относится: Gtk# для разработки графического интерфейса пользователя (GUI), библиотеки Mozilla для работы с системой рендеринга Gecko, библиотеки Unix, библиотеки для работы с базами данных, стек компонент безопасности и язык описания XML-схем RelaxNG. Gtk# позволяет приложениям Mono интегрироваться в GNOME подобно обычным Linux-приложениям. Библиотеки работы с базами данных позволяют соединяться с MySQL, SQLite, PostgreSQL, Firebird, Open Database Connectivity (ODBC), Microsoft SQL Server (MSSQL), Oracle, объектно-реляционными базами данных db4o и многими другими. Стек компонент Microsoft предоставляет средства переноса приложений для Windows .NET на Linux-платформу К этим компонентам относятся ADO .NET, ASP .NET, Windows.Forms и другие. Архитектура среды Mono 12
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Рис. 2.1. Общая структура Mono Библиотека классов Библиотека классов предоставляет самые разные возможности для разработки приложений. Большинство библиотек написано на C#, но могут быть использованы приложением на любом .NET-совместимом языке. Библиотеки классов содержат пространства имен логически связных классов. Библиотеки представляют собой сборки (assemblies). Сборки и пространства имен Пространства имен предоставляют механизм логического объединения близких по назначению классов в иерархическую структуру. Таким образом решается часть вопросов с совпадением имен классов 13
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET (например, может существовать два класса с именем Connector - один в пространстве имен для работы с сетями, а другой в пространстве имен для работы с базами данных). На вершине иерархии находятся несколько основных пространств имен - например, пространство имен Accessibility, Windows или System; эти пространства содержат вложенные подпространства - например, System содержит пространства System.IO, System.Net и другие. Можно создавать свои собственные пространства имен. Сборки представляют собой особые библиотеки классов. Сборка набор из одного или нескольких файлов с определениями типов и файлами ресурсов. Один из файлов сборки выбирают для хранения ее декларации. Декларация - это набор таблиц метаданных, которые содержат различную информацию о сборке, в том числе имена составляющих ее файлов, региональные стандарты сборки, версию, издателя сборки, общедоступные экспортируемые типы. Сборки позволяют упаковать типы, сделать их доступными, обеспечить безопасность и управление версиями. Сборка позволяет разграничить логическое и физическое понятие повторно используемых типов. Сборка может содержать типы, реализованные на различных языках программирования. Сборки - не особенность Mono, они являются частью инициативы .NET. Примерами сборок являются mscorlib.dll, System.dll, System.Data.dll и Accessibility.dll. Пространства имен могут быть реализованы в нескольких сборках, состоящих из нескольких файлов. Общеязыковая среда и общеязыковая спецификация Общеязыковая среда (The Common Language Infrastructure - CLI) реализована в виде исполняемого файла Mono. Среда используется для исполнения скомпилированных .NET-приложений. Общеязыковая среда определена в стандарте ECMA-335. Общеязыковая спецификация (The Common Language Specification - CLS) определена в главе 6 стандарта ECMA-335 и описывает интерфейсы CLI. Компилятор Mono генерирует образ, соответствующий CLS. Образ содержит код на промежуточном языке (the Common Intermediate Language). Исполняющая среда Mono исполняет этот образ. 14
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Just-in-time компиляция Just-in-time compilation (JIT) - компиляция по требованию. Такой вариант компиляции позволяет компилировать методы и другие элементы программы именно в тот момент, когда они вызываются приложением. Исполняющая среда Mono содержит just-in-time компилятор для следующих архитектур: x86, SPARC, PowerPC, ARM, S390 (32-битная и 64-битная версии), x86-64, IA64 и SPARC-64. Среда выполняет just-intime компиляцию в машинный код и кэширует этот код на время исполнения приложения. Также можно выполнить предварительную компиляцию и кэширование части кода до исполнения. Управляемый и неуправляемый коды Код .NET/Mono-приложения - управляемый. То есть он контролируется общеязыковой средой, проверяется на безопасность типов и потоков, пользуется возможностями сборщика мусора и так далее. Однако, приложения .NET/Mono могут использовать неуправляемый код с помощью библиотек System.Runtime.InteropServices. Необходимость использовать неуправляемый код возникает по разным причинам: желание вызывать унаследованный код, написанный без использования .NET, необходимость прямого обращения к памяти и т. д. Многие поставляемые с Mono компоненты используют неуправляемый код (например, так делают библиотеки Gtk#). Интегрированная среда разработки Mono (IDE) MonoDevelop представляет собой бесплатную среду, интегрирующуюся в GNOME. Эта среда разрабатывалась преимущественно для программирования на C# и других .NET-совместимых языках, таких как Nemerle, Boo и Java (посредством IKVM.NET). Среда разработки включает средства управления классами, встроенный Help, средства генерации кода, подсказки, Stetic (дизайнер пользовательских интерфейсов), поддержку проектов и встроенный отладчик. MonoDoc представляет собой браузер, позволяющий просматривать 15
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET документацию по API и различные примеры кода (samples). Браузер использует wiki-образный стиль управления документацией, так что разработчики могут дополнять и корректировать статьи. Проекты, основанные на Mono Существует множество проектов, расширяющих Mono: Cocoa# - обертки вокруг Mac OS X toolkit (Cocoa); Gecko# - средства встраивания машины рендеринга, используемой Mozilla (Gecko); Gtk# - C#-обертки библиотек Gtk+ и GNOME, написанных на C; Tao набор графических и игровых расширений. Вопросы лицензирования Компилятор C# Mono и инструментарий Mono предоставляются по лицензии GNU General Public License (GPL), библиотеки исполняющей среды - по лицензии GNU Lesser General Public License (LGPL), а библиотеки классов - по лицензии MIT. Таким образом, все компоненты Mono в той или иной степени являются бесплатными и предоставляют доступ к исходному коду. Разработчики, расширяющие Mono, должны подписать соглашение, позволяющее Novell изменить условия лицензирования этих расширений. Существует версия .NET, разработанная Microsoft для FreeBSD, Windows и Mac OS X. Эта версия называется Shared Source CLI (Rotor). Лицензия Rotor явно запрещает его использование в коммерческих целях. Rotor Первые версии Rotor появились в 2002 году. Rotor предоставляет бесплатную реализацию Microsoft Common Language Runtime с открытыми исходными текстами. Rotor включает исходные коды компиляторов C# и Jscript, ассемблера и дизассемблера Common Intermediate Language (CIL), отладчика, профайлера, линковщика и других инструментов общеязыковой исполняющей среды. Код Rotor можно использовать, модифицировать и распространять в некоммерческих 16
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET целях. Версия общеязыковой среды Rotor (Shared Source Common Language Infrastructure - SSCLI) позволяет разработчикам изучать детали реализации различных библиотек .NET, реализовывать свои собственные версии общеязыковой среды. Общеязыковая среда предоставляется предварительно сконфигурированной для работы на платформах Windows, FreeBSD (версия 4.7 и новее) и Mac OS X 10.2. Единственное, что может понадобиться настроить, - это PAL (Platform Abstraction Layer). Текущая версия общеязыковой среды - это SSCLI 2.0. Она содержит большинство классов .NET Framework 2.0. Итоги Если удается сделать приложение кросс-платформенным, это всегда приветствуется. Те, кто предпочитают по тем или иным причинам разрабатывать приложения для многих платформ и при этом знают о достоинствах Microsoft .NET, могут использовать Rotor и Mono для более быстрого написания и развертывания безопасных приложений для Linux, UNIX или Mac OS X. 17
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Phoenix Платформа Microsoft для построения компиляторов, средств анализа, оптимизации и верификации кода. Обзор составляющих Введение в компиляцию Компилятор - это программа, которая считывает текст на одном языке (исходном) и переводит (транслирует) его в эквивалентный текст на другом языке (целевом). Одним из важных моментов такого преобразования является сообщение пользователю о наличии ошибок в исходной программе. Концептуально компилятор работает пофазно, причем в процессе каждой фазы происходит преобразование исходной программы из одного представления в другое. На рис. 1 приведено типичное разбиение компилятора на фазы. Поясним фазы компиляции. Лексический анализ - анализ исходной программы, при котором поток символов исходной программы считывается слева направо и группируется в токены (token), представляющие собой последовательности символов с определенным совокупным значением. Синтаксический анализ - анализ, при котором символы или токены иерархически группируются во вложенные конструкции с совокупным значением. Токены исходной программы группируются в грамматически фразы, используемые компилятором для синтеза вывода. Обычно грамматические фразы исходной программы представляются в виде дерева. В процессе семантического анализа проверяется наличие семантических ошибок в исходной программе и накапливается информация о типах для следующей стадии - генерации кода. При таком анализе используются иерархические структуры, полученные во время синтаксического анализа для идентификации операторов и операндов выражений и инструкций. Важным аспектом семантического анализа является проверка типов, когда компилятор проверяет, что каждый оператор имеет операнды допустимого спецификациями языка типа. 18
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET После синтаксического и семантического анализа некоторые компиляторы генерируют явное промежуточное представление исходной программы, которое можно рассматривать как программу для абстрактной машины. Это представление должно легко создаваться и транслироваться в целевую программу. При оптимизации кода производятся попытки улучшить промежуточный код, чтобы получить более эффективный машинный код. Последняя фаза компиляции состоит в генерации целевого кода, обычно перемещаемого машинного кода или ассемблерного кода. Рис. 3.1. Фазы компилятора Компиляторы весьма разнообразны. Используются тысячи исходных языков, от традиционных языков высокого уровня (таких как С# или 19
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Pascal) до специализированных, возникающих во всех областях компьютерных приложений. Целевые языки не менее разнообразны: это могут быть другие языки программирования, различные машинные языки - от языков микропроцессоров до суперкомпьютеров. Иногда компиляторы классифицируют как однопроходные, многопроходные, исполняющие (load-and-go), отлаживающие, оптимизирующие - в зависимости от предназначения, принципов и технологий создания. Несмотря на разнообразие, основные задачи, выполняемые компиляторами, по сути одни и те же. Понимая эти задачи, можно создавать компиляторы для различных исходных языков и целевых машин с использованием одних и тех же базовых технологий. Основы Phoenix Phoenix - это инфраструктура для разработки компиляторов, средств анализа кода, его оптимизации и тестирования. Phoenix предоставляет множество строительных блоков, реализованных на основе промежуточного представления - Common Intermediate Representation (CIR), для создания перечисленных инструментальных средств. Phoenix может быть использован в задачах генерации кода для различных архитектур процессоров. Промежуточное Representation - IR) представление (Intermediate IR представляет собой строго типизированное линейное представление потока инструкций. IR представляет функции на нескольких уровнях абстракции: от высокого машинно-независимого (HIR) до низкого машинно-зависимого (LIR). Инфраструктура Phoenix использует промежуточное представление, чтобы представить поток функций в виде наборов операций передачи данных и/или управления. 20
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Инфраструктура хранит промежуточное представление функции в виде двусвязного списка инструкций. Каждая инструкция содержит оператор, список исходных и результирующих операндов. На основе промежуточного представления строятся все остальные представления кода - граф потока управления, синтаксические деревья и др. IR строго типизировано. Тип результата определяется операндом и типами входных операндов. Инфраструктура Phoenix предоставляет средства для проверки соответствия типов. Во время обработки HIR Phoenix предоставляет информацию о потоках данных в виде дерева выражений. В процессе обработки эти деревья преобразуются. То есть преобразование промежуточного представления кода выглядит как последовательность деревьев выражений. Код на языках высокого уровня (таких как C++, C# или J#) преобразуется в промежуточное представление при помощи компонент Phoenix. Инструментальные средства на основе Phoenix используют промежуточное представление. Таким образом, они могут обрабатывать код, изначально написанный на разных языках. Например, компоненты анализа, оптимизации или верификации, работающие с IR, могут быть повторно использованы в компиляторах различных языков высокого уровня. Промежуточное представление позволяет абстрагироваться конкретного типа процессора, что делает код переносимым. от Кроме того, применение промежуточного представления позволяет легче интегрировать код на разных языках. Фазы компиляции Phoenix представляет процесс работы с кодом (компиляции или анализа) в виде последовательности фаз. На каждой фазе выполняется группа действий, тесно связных между собой. Фазы хранятся в виде упорядоченного списка и выполняются одна за другой. При этом возможны ситуации межфазового взаимодействия, это требуется для выполнения действия перед началом одной из фаз или после ее 21
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET завершения. Средство, разрабатываемое на основе Phoenix, создает список фаз. Инфраструктура Phoenix и различные расширения (plug-in) могут изменять этот список. В Phoenix существует контейнер для списков фаз. Кроме списков фаз, он содержит список обработчиков окончания соответствующих фаз, список обработчиков, исполняемых перед началом фаз, и указатель на память, используемую объектом Lifetime. Все фазы и объекты, обрабатывающие завершение и начало фаз, получают память при помощи Lifetime. Сборки и модули Сборка является основной программной единицей Phoenix. Сборка содержит логически связанные модули и файлы ресурсов. Сборка является наименьшей единицей компиляции, которой может быть присвоена версия и к которой применяются механизмы защиты. Сборка может содержать управляемые и неуправляемые модули. В нее также могут входить файлы, написанные на разных языках программирования. Сборка всегда содержит манифест. Манифест - структура данных, содержащая имя сборки, номер версии, данные о региональной принадлежности, список файлов, формирующих сборку, а также общедоступные типы, реализованные в файлах сборки. Сборка позволяет разделить логическое и физическое понятия повторно используемого компонента с управляемыми версиями. Сборки содержат сведения о других сборках, на которые они ссылаются, включая номера версий. Это делает сборку самоописываемой. То есть общеязыковая исполняющая среда (CLR) знает о сборке все, что нужно для ее выполнения. Значит, развертывать сборки проще, чем неуправляемые компоненты. Помимо сборки существуют другие единицы компиляции. Инфраструктура Phoenix создает скомпилированные модули на разных фазах компиляции. В этих модулях содержатся код и структуры данных, 22
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET используемые при анализе кода. В таблице приведены описания модулей в иерархии модулей IR. Модуль IR Описание Содержит информацию, требуемую для компиляции FuncUnit одной функции Представляет коллекцию взаимосвязанных данных DataUnit (например, коллекция инициализированных переменных) ModuleUnit Содержит коллекцию функций Содержит результат компиляции в виде PE-образа PEModuleUnit (portable executable image), например в виде EXE или DLL AssemblyUnit Содержит скомпилированную сборку .NET Framework Представляет собой исполняемый образ, например EXE ProgramUnit или DLL Представляет собой единицу компиляции самого GlobalUnit верхнего уровня Система типов Система типов Phoenix служит основой для генерации кода, отслеживания указателей (pointer tracking), высокоуровневой оптимизации и отладки объектного кода. Компиляторы и другие средства, основанные на Phoenix, используют систему типов для проверки соответствия типов в промежуточном представлении кода. Система типов Phoenix предоставляет средства для создания правил проверки типов (контекст, ограничения и др.). Компилятор или другое средство может создать собственное множество типов и определить правила проверки. Система типов предоставляет высокоуровневые и машинно-зависимые типы данных. Управляемый и неуправляемый режимы компиляции 23
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Инфраструктура Phoenix поддерживает неуправляемый режимы. как управляемый, так и В управляемом режиме исходный код компилируется в сборки .NET Framework, содержащие код на промежуточном языке (Microsoft intermediate language - MSIL). При запуске такой код преобразуется по запросу (on demand) в машинный код и исполняется в рамках общеязыковой исполняющей среды (common language runtime).Преобразование по запросу, как правило, означает, что при первом вызове определенного участка кода (например, метода) этот код преобразуется из MSIL в машинный код, исполняется и кэшируется на случай повторного вызова. В неуправляемом режиме исходный код компилируется напрямую в машинный код. Выбор режима компиляции определяется множеством факторов. Управляемый код позволяет напрямую использовать инфраструктуру .NET Framework, автоматическое управление памятью, управление версиями и возможности защиты кода. Поскольку неуправляемый код не должен проходить проверку на безопасность типов и получать одобрение на каждое действие со стороны общеязыковой исполняющей среды .NET Framework, такой код может работать быстрее. Однако, в случае неуправляемого кода задачи управления памятью будет решать разрабатываемое на основе Phoenix инструментальное средство или программист. Компоненты Phoenix Компоненты преобразования кода Phoenix принимает на вход код на C/C++, бинарные файлы и код на нескольких промежуточных языках. При этом Phoenix преобразует код в код для различных архитектур аппаратного обеспечения. Таким образом, компоненты преобразования кода являются одной из основных частей Phoenix. Благодаря компонентам преобразования кода происходит отделение 24
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET машинно-зависимых задач компилятора, типа работы с регистрами. Компоненты преобразования кода используются для преобразования кода в LIR (low-level intermediate representation) и генерации кода. То есть компоненты делают машинно-зависимую функциональность компиляторов повторно используемой. Для преобразований между различными архитектурами аппаратного обеспечения или различными промежуточными представлениями кода используется специальный язык. Язык носит название Grand Unified Retargeting Language (GURL) и предназначен для решения следующих задач: генерация ассемблера и дизассемблирования; задачи фаз кодирования и раскодирования; задачи фазы выбора кода машинных команд; задачи фазы обработки инструкций; задачи, определяемые разработчиком средства на основе Phoenix. Компоненты обработки входных и выходных данных Эти компоненты обрабатывают промежуточный язык компилятора (Compiler Intermediate Language - CIL), PE-файлы (Microsoft Portable Executable), COFF-файлы (Microsoft Common Object File Format), файлы с кодом на промежуточном языке MSIL (Microsoft Intermediate Language), сборки и т. д. Средства управления Phoenix содержит средства управления поведением программы. Как правило, программист обращается к этим средствам, задавая параметры командной строки. Компилятор на основе Phoenix может добавлять свои средства управления для каждой фазы компиляции и связывать их с определенными параметрами командной строки. Многие компоненты Phoenix ассоциируются с соответствующими средствами управления. То есть при задании соответствующего параметра в командной строке, средство управления выступает как 25
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET прокси компонента Phoenix. Средство управления может подключить или выгрузить компонент, произвести предварительные действия (например, загрузку нужных библиотек в память) перед или по окончанию работы компонента. Кроме того, средства управления могут быть связаны с одной из фаз компиляции. Инфраструктура потоков данных Phoenix предоставляет инфраструктуру для анализа потоков данных и выполнения преобразований. Инфраструктура поддерживает прямой и обратный проходы для итеративного и неитеративного анализа. Сборщик мусора (Garbage Collector - GC) Инфраструктура Phoenix предоставляет общую среду для поддержки сбора мусора во время исполнения. Инфраструктура поддерживает: генерацию кода для GC; отслеживание и журналирование жизненного цикла локальных объектов. Сборщик мусора управляет выделением и освобождением памяти для всех управляемых программ. Всякий раз, когда управляемая программа создает объект, исполняющая среда выделяет для него память. Сборщик мусора может освободить любую область памяти, которая больше не используется ни одной из исполняемых программ. Сборщик мусора отслеживает жизненный цикл объектов и анализирует, какие объекты более не используются. Графы Многие технологии анализа кода основаны на использовании графов, отражающих определенные взаимосвязи. Например, графы потока управления представляют возможные последовательности выполнения инструкций. Инфраструктура Phoenix представляет набор расширяемых 26
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET классов, называемый пакетом графов. Эти классы представляют различные графы и типичные алгоритмы их применения. Пакет включает графы потока управления, графы наследования, графы взаимосвязи и графы вызовов. Все графы являются направленными мультиграфами. Коллекции Phoenix включает пространство имен Collections, содержащее такие структуры данных, как список, хэш-таблица и вектор. Для повышения производительности эти структуры рассматриваются с точки зрения полиморфизма на этапе компиляции. То есть приведение типов и выбор нужного метода для элемента коллекции может происходить на этапе компиляции. Таким образом можно исключить операции статического приведения типов, которые могли бы вызывать ошибки во время выполнения кода. Все структуры данных из пространства Collections поддерживают операции New(), Delete(), Insert(), Remove(), Iterate(), Count(), Push\Pop. Операция New создает коллекцию. Операция Delete удаляет коллекцию. Операция Insert добавляет элемент в коллекцию. Операция Remove удаляет элемент из коллекции. Операция Iterate позволяет переходить от одного элемента коллекции к следующему. Операция Count подсчитывает число элементов в коллекции. Операция Push добавляет элемент в начало или конец коллекции, а операция Pop выбирает элемент. При этом операция Push запрашивает новую память под коллекцию большего размера, копирует все элементы старой коллекции в новую область памяти и дописывает к ним новый элемент. Аналогично Pop удаляет элемент. Использование псевдонимов (Aliasing) Пакет использования псевдонимов отслеживает, как переменные ссылаются на области памяти и как эти связи меняются в результате выполнения инструкций программы. Технологии анализа и преобразования программ используют псевдонимы для определения влияния инструкции на переменные программы. Инструкции влияют 27
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET на переменные, либо напрямую ссылаясь на имя переменной, либо создавая ссылки, называемые также псевдонимами. Само понятие "псевдоним" означает ситуацию, когда две и более переменных ссылаются на одну область памяти. Lifetime (время жизни) Lifetime представляет собой объект, управляющий динамической памятью. Компилятор в процессе работы запрашивает динамическую память для хранения необходимых ему объектов. Когда объекты более не требуются, он освобождает память. Выделение памяти происходит в разные моменты времени, а освободить области памяти, выделенные в результате нескольких запросов, часто можно одновременно. Например, по окончании одной из фаз компиляции можно освободить всю память, которую запрашивал компилятор во время этой фазы. Объект Lifetime предоставляет такие и некоторые другие возможности. Обработка исключений Phoenix использует промежуточное представление для поддержки различных механизмов обработки исключений. Средства обработки исключений используются также для анализа и оптимизации. Расширения (plug-in) Под plug-in в Phoenix понимается программный модуль, написанный пользователем инструментального средства. К примеру, на основе Phoenix было разработано инструментальное средство для компиляции, после чего пользователь этого средства решил расширить его функциональность и создал plug-in. Plug-in исполняется компилятором на основе Phoenix. При этом расширяющий модуль имеет полный доступ к внутренним структурам данных компилятора. 28
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Модуль может добавлять новые фазы компиляции, давать команду пропустить или заменить обработчики существующих. Plug-in может добавлять дополнительный код в каждую компилируемую функцию (например для профилирования). Кроме того, он может сохранять промежуточное представление для компилируемой функции, например с целью последующего изучения ее модификаций при оптимизации. Таким образом, plug-in может журналировать деятельность компилятора и влиять на нее самым разным образом. Итоги Phoenix представляет собой инфраструктуру разработки различных средств анализа, оптимизации и тестирования программного кода. Phoenix предоставляет множество строительных блоков, реализованных на основе промежуточного представления - Common Intermediate Representation (CIR). Phoenix может быть использован в задачах генерации кода для различных архитектур процессоров. Строительные блоки Phoenix можно компоновать и модифицировать для построения инструментального средства, решающего конкретную прикладную задачу. 29
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET С# 3.0 Особенности: неявная типизация, расширяющие методы, инициализаторы и анонимные типы, интеграция способов представления данных, реализация возможностей XSD, XQuery, XSLT, XPath и других средств работы с языком представления данных XML Обзор C# 3.0 C# 3.0 ("C# Orcas") представляет собой расширение C# 2.0, разработанное для создания высокоуровневых библиотек классов с использованием подходов функционального программирования. C# 3.0 позволяет создавать API, поддерживающие запросы к реляционным базам данных и XML. C# 3.0 включает следующие расширения: Неявно типизированные локальные переменные.То есть тип локальной переменной может быть получен из выражения, инициализирующего эту переменную. Неявно типизированные массивы. Расширяющие методы.Они позволяют добавлять методы к уже существующим типам данных. Лямбда-выражения.В C# 3.0 представляют собой развитие анонимных методов. Инициализаторы объектов.Упрощают создание и инициализацию объектов. Анонимные типы.Типы-кортежи, которые определяются на основе инициализаторов объектов. Выражения, содержащие запросы.В C# добавлены выражения, аналогичные выражениям на языках запросов SQL и XQuery. Деревья выражений.Позволяют представить лямбда-выражения в виде данных. Спецификации C# 1.2 и 2.0 гораздо объемнее (более 100 стр.) по сравнению с C# 3.0, так как содержат описания основ языка, и доступны по ссылке ссылка: http://msdn.microsoft.com/vcsharp/language http://msdn.microsoft.com/vcsharp/language. Неявно типизированные локальные переменные 30
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET При объявлении неявно типизированной локальной переменной ее тип определяется из инициализирующего выражения. Например: var i = 5 var numbers = new int[] {1, 2, 3} Тип var не был определен в коде, при этом объявления эквивалентны следующему: int i = 5 int[] numbers = new int[] {1, 2, 3} Для неявно типизированных переменных существуют следующие ограничения: объявление переменной должно включать инициализатор; инициализатор должен быть выражением и не должен быть объектом или инициализатором коллекции. (Объект и коллекцию можно включить в выражение с new.) тип инициализирующего выражения на момент компиляции не может быть null-типом. Если объявление локальной переменной содержит несколько вложенных объявлений (например, при создании массива), все инициализаторы должны иметь один тип на момент компиляции. Примеры нарушения ограничений: var x; // Error, no initializer to infer type from var y = {1, 2, 3}; // Error, collection initializer not permitted var z = null; // Error, null type not permitted Если объявляется локальная переменная типа var, который был определен в коде, — используется определенный в коде тип и генерируется предупреждение (warning). Неявно типизированные локальные переменные можно использовать в конструкциях for и foreach. int[] numbers = { 1, 3, 5, 7, 9 } 31
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET foreach (var n in numbers) Console.WriteLine(n) Неявно типизированные массивы При объявлении неявно типизированного массива его тип определяется из инициализирующего выражения. В результате тип элемента массива должен быть таким, чтобы в него неявно могли быть преобразованы типы всех выражений, использованных для инициализации. Если такой тип не является null -типом, массив успешно создается, иначе происходит ошибка компиляции. Например: var a = new[] { 1, 10, 100, 1000 }; // int[] var d = new[] { 1, "one", 2, "two" }; // Error В последнем случае происходит ошибка компиляции, так как невозможно неявно преобразовать int в string и наоборот. Зачем нужна неявная типизация? Неявно типизированные переменные и массивы могут быть полезны начинающим программистам, так как еще сильнее снижают требования к начальному уровню подготовки. Можно просто писать код и создавать там переменные, не зная о типах практически ничего. Кроме того, возможности неявной типизации могут быть полезны программистам, работающим на языках типа php, где возможности неявного определения типа были заложены изначально. Они могут получить преимущества управляемого программирования, перейдя на C# и сохраняя при этом привычный стиль программирования. Однако возможности неявной типизации, без сомнения, могут служить источником дополнительных ошибок и делают код менее понятным. Расширяющие методы Расширяющие методы — это статические методы статического класса A, которые расширяют уже существующий класс B и могут быть вызваны 32
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET экземпляром класса B. Расширяющие методы содержат первым параметром переменную того типа, который данный метод расширяет. Перед типом стоит ключевое слово this. Например: Namespace Acme.Utilities { public static class Extensions { public static int ToInt32(this string s) { return Int32.Parse(s) } public static T[] Slice<T>(this T[] source, int index, int count) { if (index < 0 || count < 0 || source.Length - index < count) throw new ArgumentException() T[] result = new T[count] Array.Copy(source, index, result, 0, count) return result } } } Расширяющие методы работают как статические и при этом могут быть вызваны из экземпляров расширяемого класса. Необходимо только указать в директиве using пространство имен, содержащее расширяющий метод. Например: using Acme.Utilities string s = "1234" int i = s.ToInt32(); // То же, что Extensions.ToInt32(s) int[] digits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} int[] a = digits.Slice(4, 3); //То же,что Extensions.Slice(digits, 4, 3) Расширяющие методы, очевидно, полезны для добавления функциональности в сторонние классы. Однако они могут служить 33
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET источником путаницы и дополнительных ошибок. Кроме того, расширяющие методы труднее обнаружить (в описании расширяемого класса их нет). Расширения свойств, событий или операторов пока не поддерживаются. Возможно, они появятся в C# позднее. Лямбда-выражения C# 2.0 поддерживал анонимные методы, позволяющие писать блоки кода вместо параметров-делегатов. Анонимные методы предоставляют значительную часть возможностей для функционального программирования, но при этом обладают достаточно сложным синтаксисом. Лямбда-выражения предоставляют более краткий функциональный синтаксис написания анонимных методов. Инициализаторы объектов и коллекций При создании объекта можно использовать инициализатор объекта или коллекции. Тогда при создании объекта сначала вызывается конструктор с пустым списком параметров, а затем инициализируются члены, указанные в списке инициализатора объекта или коллекции. Инициализаторы объектов Инициализатор объекта содержит последовательность инициализаторов свойств или полей объекта, заключенную в фигурные скобки. При этом нельзя инициализировать свойство или поле более одного раза. Свойство типа-значения не может быть инициализировано в инициализаторе объекта. Пусть есть класс, описывающий точку: public class Point { int x, y; public int X { get { return x; } set { x = value; } } public int Y { get { return y; } set { y = value; } } } Пример инициализации экземпляра 34 класса точки с помощью
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET инициализатора объекта: var a = new Point { X = 0, Y = 1 } Это эквивалентно: var a = new Point(); a.X = 0 a.Y = 1 Инициализаторы коллекций Инициализатор коллекции аналогичен инициализатору объекта. Для устранения путаницы с инициализатором объекта инициализаторы элементов коллекции не могут содержать знака присваивания. Пример инициализации: List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } Объект-коллекция, созданный инициализатором коллекции, должен иметь тип, реализующий интерфейс System.Collections.Generic.ICollection<T> только для одного типа T. Более того, для каждого инициализатора элемента коллекции должно существовать неявное преобразование его типа к T, иначе происходит ошибка компиляции. Итак, инициализаторы объектов или коллекций сокращают количество кода, необходимого для создания объектов. Кроме того, при передаче объектов в качестве параметров метода не требуется писать код, создающий переменную, и затем передавать ее методу. Создание параметра и вызов метода можно объединить. Анонимные типы C# 3.0 позволяет использовать оператор new с анонимным инициализатором объекта. При этом создается объект анонимного типа. Анонимный тип — это класс без имени (имя генерируется компилятором автоматически и не может быть использовано в коде), унаследованный от object. Члены анонимного класса — последовательность свойств с доступом read/write, полученные из 35
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET списка инициализатора объекта. Если выражение, инициализирующее объект анонимного типа, имеет тип null, происходит ошибка компиляции. Если два инициализатора анонимных объектов содержат абсолютно одинаковые выражения инициализации (имена и порядок свойств), создаются объекты одного типа. Например: var p1 = new { Name = "Lawnmower", Price = 495.00 } var p2 = new { Name = "Shovel", Price = 26.95 } p1 = p2 Выражения, содержащие запросы С# 3.0 поддерживает синтаксис для создания запросов, аналогичных запросам на языках иерархических и реляционных баз данных (например, языки SQL и XQuery). Запрос начинается с from- и заканчивается select- или groupвыражением. За исходным from - выражением может идти 0 и более from- или where - выражений. Итоговое select - или group выражение задает форму результата в виде переменных для последующей итерации. Перед select или group может быть конструкция orderby, задающая порядок группирования результата. Into - выражение используется для создания подзапросов. Пример использования: using System using System.Query using System.Collections.Generic class app { static void Main() { string[] names = { "Burke", "Connor", "Frank" "Everett", "Albert", "George" "Harris", "David"} IEnumerable<string> expr = from s in names where s.Length == 5 orderby s select s.ToUpper() 36
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET foreach (string item in expr) Console.WriteLine(item) } } Деревья выражений Деревья выражений позволяют представить лямбда-выражения в виде структур данных, а не исполнимого кода. Лямбда-выражение, которое преобразуется в тип-делегат D, также может быть преобразовано в дерево выражений типа System.Query.Expression<D>. Преобразование лямбда-выражений в тип-делегат порождает исполнимый код, на который ссылается делегат. Преобразование лямбда-выражений в дерево выражений порождает код, создающий экземпляр дерева выражений. Деревья выражений представляют собой эффективное представление лямбда-выражений в памяти и делают структуру выражения более прозрачной. Пример выражения в виде кода и дерева выражений: Func<int,int> f = x => x + 1; // Code Expression<Func<int,int>> e = x => x + 1; // Data Делегат f ссылается на метод, возвращающий x+1, а дерево выражений e ссылается на структуру данных, описывающую выражение x+1. Итоги C# 3.0 представляет собой расширения C# 2.0. В него входят: неявно типизированные локальные переменные; неявно типизированные массивы; расширяющие методы; лямбда-выражения; анонимные типы; выражения, содержащие запросы; деревья выражений. Эти расширения позволяют быстрее осваивать C# тем, кто с ним не 37
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET работал ранее. Кроме того, C# 3.0 предоставляет специалистам, знакомым с массой тонкостей, еще более гибкие и мощные средства. Разумеется, став более гибким, C# требует от разработчиков большего внимания к использованию своих средств, чтобы не допустить ошибок. 38
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Современные средства разработки Web-приложений. ASP .NET 1.1 и 2.0 Основные особенности ASP .NET. Архитектура решения ASP .NET 2.0. Реализация AJAX в ASP .NET ASP .NET — инфраструктура разработки web-приложений. ASP .NET автоматизирует большую часть процесса разработки сложных webприложений, включая взаимодействие с web-сервером, начальную обработку запросов и генерацию результирующего HTML. Процесс разработки web-приложений становится похожим на разработку обычных Windows-приложений, где разработчик визуально располагает элементы управления на форме, задает их свойства и пишет обработчики событий. ASP .NET является частью .NET Framework. Таким образом, ASP .NETприложения могут использовать классы .NET Framework, возможности защищенного программирования и другие преимущества управляемого кода. По мере развития ASP .NET процесс разработки становится все более визуальным (работа с компонентами и мастерами). Код приложения может быть написан на любом языке, совместимом с общеязыковой исполняющей средой (common language runtime), — например, Microsoft Visual Basic, C#, JScript .NET или J#. Состав ASP .NET ASP .NET включает: среду создания и обработки страниц и компонент; компилятор ASP .NET; инфраструктуру безопасности; возможности управления состоянием; возможности настройки конфигурации приложения; мониторинг приложений; отладчик; среду создания и развертывания XML Web services; расширяемую среду хостинга и управления жизненным циклом web-приложений; 39
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET расширяемую среду проектирования интерфейса web-приложения. пользовательского Среда создания и обработки страниц и компонент Среда создания и обработки страниц и компонент ASP .NET — среда программирования, исполняемая на web-сервере для динамической генерации и отображения ASP .NET web-страниц. Страница ASP .NET может быть запрошена любым браузером или устройством, в ответ ASP .NET генерирует разметку (HTML). Как правило, можно отображать одну и ту же страницу в различных браузерах, так как ASP .NET генерирует разметку с учетом типа браузера, запрашивающего страницу. Разумеется, можно создать web-страницу ASP .NET Web, ориентированную на конкретный браузер. ASP .NET поддерживает компоненты для создания web-приложений для мобильных устройств (сотовых телефонов, КПК и других). Страницы ASP .NET являются объектно-ориентированными. При разработке страницы можно работать с HTML-элементами, используя свойства, методы и события. ASP .NET предлагает следующую модель разделения функциональности на серверную и клиентскую части: события, происходящие на клиентской стороне, обрабатываются исполняемым на сервере кодом. Кроме того, ASP .NET автоматически управляет состоянием страницы и компонент. Среда создания страниц и компонент позволяет создавать повторно используемые пользовательские элементы управления, инкапсулируя в них необходимый UI и функциональность. Кроме того, среда создания страниц и компонент ASP .NET предоставляет темы и скины для придания единообразного вида всему приложению, отдельным страницам или для настройки внешнего вида отдельных элементов управления. Скин — это описание внешнего вида элементов управления, относящихся к определенному классу (например, использовать зеленый шрифт для всех кнопок) или обладающих другим общим признаком. Тема — это набор скинов, применяемых как единое целое. Темы и скины описываются XML-файлами. Темы и скины можно применять как программно, так и с помощью визуального 40
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET редактора свойств. Существует возможность создавать собственные темы и скины. Можно также использовать эталонные страницы (master pages) — это web-страницы ASP .NET, содержащие элементы, которые должны появляться на каждой странице приложения (например, главное меню). Когда пользователь запрашивает страницу web-приложения, среда обработки страниц и компонент объединяет содержимое web-страницы с содержимым эталонной и возвращает результат. Компилятор ASP .NET Код ASP .NET является компилируемым, в нём используется строгая типизация, раннее связывание, оптимизации. После компиляции кода ASP .NET в промежуточный язык общеязыковая среда исполнения (common language runtime) компилирует его в машинный код, еще раз проводя оптимизацию с учетом конкретной архитектуры процессора. Компилятор ASP .NET компилирует все приложение, включая страницы и элементы управления, в сборку, которую может использовать среда хостинга ASP .NET для обработки запросов. Инфраструктура безопасности Инфраструктура безопасности ASP .NET дополняет средства безопасности .NET Framework. ASP .NET поддерживает аутентификацию и авторизацию. Поддерживается аутентификация на основе учетных записей Windows и форм (в том числе с применением ролей). Авторизация может происходить на основе групп Windows или ролей. Web-приложения выполняются в рамках процесса ASP .NET Можно применять NTFS Access Control Lists (ACLs), средства управления доступом СУБД для обеспечения безопасности ASP .NET-приложений. Управление состоянием 41
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET ASP .NET позволяет сохранять информацию между запросами страниц. (Это может быть полезно, например, для хранения списка товаров в корзине покупателя web-магазина. Покупатель при этом может читать обзоры, изучать ассортимент и время от времени возвращаться на страницу со списком содержимого корзины.) Можно хранить информацию, специфичную для всего приложения, страницы, пользователя, конкретной сессии. ASP .NET предоставляет средства удаленного управления состоянием. То есть можно централизованно управлять состоянием нескольких экземпляров web-страницы на одном сервере. Конфигурация ASP .NET-приложений ASP .NET-приложения используют систему управления конфигурацией. Можно управлять конфигурацией web-сервера, web-сайта или отдельного приложения. Конфигурация настраивается во время развертывания приложения и может быть изменена разработчиком в любой момент, как правило, не затрагивая работу web-сервера и не перекомпилируя web-приложение. Конфигурация ASP .NETприложений хранится в XML-файле, что упрощает редактирование настроек конфигурации. Мониторинг приложений ASP .NET предоставляет возможности мониторинга состояния приложения и его производительности. ASP .NET записывает в свой журнал (log) основные события, происходящие во время работы приложения, включая ошибки и условия их возникновения. Каждая запись содержит параметры, которые могут оказаться полезны для диагностики работы приложения. ASP .NET поддерживает два типа счетчиков производительности, доступных из приложения: группа системных счетчиков производительности ASP .NET. группа счетчиков производительности приложений ASP .NET 42
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Отладчик ASP .NET позволяет отлаживать приложения во время их исполнения, в том числе удаленно. Можно отлаживать управляемые и неуправляемые объекты, код на управляемых и скриптовых языках. Среда создания и обработки страниц ASP .NET предоставляет возможности пошаговой отладки web-приложений. Среда создания и развертывания XML Web Services ASP .NET поддерживает web-сервисы XML. Web-сервис XML — компонент, инкапсулирующий некоторую функциональность. Webсервисы позволяют приложениям получать данные посредством таких стандартов, как HTTP и XML. Web-сервисы XML не связаны ни с одной конкретной технологией, поэтому самые различные программы могут использовать функциональность web-сервиса. Подробнее web-сервисы будут рассмотрены в лекции 6. Расширяемая среда хостинга и управления жизненным циклом web-приложений Расширяемая среда хостинга ASP .NET управляет жизненным циклом приложений с момента первого обращения пользователя к ресурсу и до момента завершения работы приложения. Сама ASP .NET использует в качестве среды web-сервер (IIS), при этом предоставляя функции хостинга. ASP .NET позволяет обрабатывать события, происходящие в приложениях, и создавать собственные HTTP-обработчики и модули. Расширяемая среда проектирования пользовательского интерфейса web-приложения ASP .NET позволяет создавать собственные визуальные редакторы серверных элементов управления и интегрировать их в средства 43
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET разработки, например в Visual Studio. Визуальные редакторы позволяют разрабатывать пользовательские интерфейсы элементов управления и добавлять к элементам управления необходимые свойства и методы. Как работает ASP .NET приложение? Работа ASP .NET приложения начинается с того, что пользователь через браузер отправляет web-серверу запрос страницы (или другого ресурса) web-приложения. Web-сервером ASP .NET, как правило, является IIS (Internet Information Services). ASP .NET представляет собой ISAPIрасширение над IIS. Когда web-сервер получает запрос, он анализирует расширение имени запрашиваемого файла, определяет, которое ISAPIрасшире-ние должно его обрабатывать, и перенаправляет ему запрос. ASP .NET обрабатывает запросы файлов с расширениями .aspx, .ascx, .ashx и .asmx. ASP .NET получает первый запрос ресурса приложения, создает домен приложения с помощью класса ApplicationManager. Домены приложений позволяют запускать несколько изолированных приложений в рамках одного процесса. Внутри домена приложения создается экземпляр класса HostingEnvironment, который открывает доступ к информации о приложении (например, местонахождении его папок). Кроме того, ASP .NET компилирует часть приложения, содержащуюся в папке AppCode. 44
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Рис. 5.1. Процесс обработки запроса ASP.NET Затем ASP .NET создает объекты классов, ответственных за данный HTTP-запрос и ответ на него (HttpContext, HttpRequest и HttpResponse). HTTPRequest содержат всю информацию о запросе, включая информацию о браузере и генерируемые для него cookies. HTTPResponse содержит всю информацию об ответе на запрос, включая cookies и возвращаемый HTML. После инициализации этих объектов создается объект класса HTTPApplication, происходит настройка конфигурации web-приложения, вызывается метод Init. 45
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Рис. 5.2. Процесс обработки запроса ASP.NET (продолжение) Далее запрос обрабатывается каналом HTTPApplication. При этом происходит авторизация, кэширование данных запроса, выполнение необходимых методов классов приложения (например, обработка нажатия кнопки, проверка ввода), кэширование результата и возврат результата пользователю. Все эти этапы работы приложения скрыты от разработчика и выполняются автоматически. Разработчик же, как правило, создает код, который реализует логику, специфичную для данного приложения, — бизнес-логику и обработчики событий элементов управления (нажатие кнопок и т. д.). 46
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET ASP .NET Atlas и AJAX AJAX (сокращение от Asynchronous JavaScript and XML) — подход к разработке интерактивных web-приложений. Подход нацелен на создание страниц, лучше реагирующих на действия пользователя (в смысле производительности, учета предпочтений пользователя, истории его работы со страницей и т.д.), — это достигается посредством частого обмена небольшими порциями данных с серверной стороной. Особенно важной задачей считается предотвращение необходимости заново загружать всю страницу при частом изменении отдельных ее частей. Действительно, естественно обновлять именно эти области страницы. AJAX сам по себе не является технологией, этот термин обозначает использование нескольких технологий совместно. AJAX может представлять собой сочетание следующих технологий: XHTML (или HTML) и CSS — для разметки и применения стилей; DOM, доступ к которой осуществляется с помощью скриптового языка на клиентской стороне, такого как JavaScript или Jscript — для динамического отображения и взаимодействия с представленной информацией; объект XMLHttpRequest для асинхронного обмена данными с webсервером. В некоторых средах разработки, поддерживающих AJAX, используется объект IFrame; XML — в качестве формата передачи данных между сервером и клиентом. Могут также использоваться любые другие форматы — HTML, обычный текст, JSON и даже EBML. Передаваемые данные могут генерироваться динамически при помощи некоторого скрипта на серверной стороне. К преимуществам приложений, использующих AJAX, можно отнести более быструю работу страниц (за счет обновления отдельных частей), улучшенную реакцию на действия пользователя (большинство действий обрабатывается скриптами на клиентской стороне, которые время от 47
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET времени могут обмениваться с сервером небольшими порциями данных). К недостаткам AJAX обычно относят вопросы, связанные с кнопкой Back в браузере. В случае AJAX-приложения предыдущее состояние страницы, которое обычно хочет получить пользователь, нажимающий Back, может не соответствовать предыдущей загруженной статической странице, на которую перенаправит кнопка Back. Между двумя загрузками статических страниц могло произойти несколько обновлений отдельных частей страницы. Например, при пролистывании многостраничных результатов поиска — первые 10 результатов, 10-20, 20-30 — нажатие кнопки Back приведет к возврату на начальную страницу сервиса поиска, а не на страницу результатов 10-20, как, возможно, хотел пользователь. Разработчики используют различные механизмы решения этой проблемы. (IFrame и др.) Аналогичная проблема с закладками AJAX-страниц. Пользователь хотел бы добавить в bookmarks конкретное состояние страницы. Для решения проблемы используются дополнительные параметры в URL-адресах. Еще одним недостатком AJAX-страниц является их размер — за счет обилия клиентских скриптов страницы имеют больший размер по сравнению со статическими аналогами и требуют больше времени для начальной загрузки. Atlas (ASP .NET AJAX) — вариант подхода AJAX от Microsoft. ASP .NET AJAX позволяет выполнять значительную часть обработки webстраницы в браузере. ASP .NET AJAX интегрирует библиотеки клиентских скриптов ECMAScript (JavaScript) с платформой для разработки серверной стороны web-приложения (ASP .NET 2.0). ASP .NET AJAX позволяет вызывать функции web-приложения из клиентских скриптов. Итоги ASP .NET представляет собой среду разработки для Web, которая включает в себя различные сервисы и API, упрощающие разработку приложений. ASP .NET является частью .NET Framework, что позволяет использовать преимущества управляемых приложений и обращаться к 48
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET библиотеке классов .NET Framework. ASP .NET содержит: среду создания и обработки страниц и компонент; компилятор ASP .NET; инфраструктуру безопасности; возможности управления состоянием; возможности настройки конфигурации приложения; мониторинг приложений; отладчик; среду создания и развертывания XML Web services; расширяемую среду хостинга и управления жизненным циклом web-приложений; расширяемую среду проектирования пользовательского интерфейса web-приложения. 49
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET XML Web Services. Обзор технологии Области применения. Преимущества. Особенности разработки webсервисов для платформы .NET. Описание и обнаружение web-сервиса Что такое XML Web Service? По мере развития информационных технологий возникали разные подходы к написанию программ: модульное программирование, событийно-ориентированное программирование, компонентноориентированное программирование и проектирование. Логическим продолжением этих подходов стала сервисно-ориентированная разработка программного обеспечения. Применение сервисно-ориентированных подходов позволяет говорить о повторном использовании (reuse) на макро-уровне (уровне сервисов), в отличие от микро-уровня (уровня объектов). Сервисноориентированный подход предполагает использование простых и общепринятых стандартов, что позволяет самым разным приложениям использовать функциональность друг друга. Сервисы могут быть написаны с использованием самых разных языков программирования, на различных платформах. Кроме того, сервисы могут быть развернуты отдельно или в рамках программного комплекса в любой точке земного шара и будут таким образом предоставлять доступ к своей функциональности по сети. Назовем сервисом (service) ресурс, реализующий бизнес-функцию и обладающий следующими свойствами: является повторно используемым; определяется одним или несколькими явными технологическинезависимыми интерфейсами; слабо связан с другими подобными ресурсами и может быть вызван посредством коммуникационных протоколов, обеспечивающих возможность взаимодействия ресурсов между собой. Частным случаем сервиса является XML web-сервис. 50
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET XML Web-сервис - это особый тип web-приложения, который: развертывается на web-сервере; публикует web-методы, которые могут быть вызваны внешними клиентами; ожидает поступления HTTP-запросов, являющихся командами вызовов web-методов; исполняет web-методы и возвращает результаты. В отличие от традиционного web-приложения, у web-сервиса нет пользовательского интерфейса. Вместо этого у него есть программный интерфейс, то есть web-сервис предоставляет функции (web-методы), которые могут быть вызваны удаленно (например, по сети Internet). Web-сервис не предназначен для обслуживания конечных пользователей. Его задача - предоставление услуг другим приложениям, будь то web-приложения, приложения с графическим пользовательским интерфейсом или консольные приложения. Web-сервис может предоставлять в реальном времени информацию о курсах акций, проверять кредитные карты или сообщать прогноз погоды. Web-сервисы столь же разнообразны, как и обычные приложения. Web-сервисы - не собственность конкретной компании. Это промышленный стандарт на основе открытых протоколов (SOAP, HTTP и т. д.). Web-сервисы развертываются на различных платформах (в том числе на серверах под управлением Windows или UNIX). Web-сервисы можно разрабатывать с применением многих средств разработки (от текстового редактора до семейства Microsoft Visual Studio). Методы большинства web-сервисов вызываются HTTP-запросами, содержащими сообщения SOAP SOAP - это XML-язык (XML vocabulary) для вызова удаленных процедур по HTTP и другим протоколам (полное описание SOAP ссылка: http://www.w3.org/TR/SOAP http://www.w3.org/TR/SOAP). Место web-сервисов удаленного вызова среди 51 других технологий
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Существует немало протоколов и технологий удаленного вызова: Microsoft Distributed Component Object Model (DCOM), the Object Management Group's Common Object Request Broker Architecture (CORBA), Sun's Remote Method Invocation (RMI), .NET Remoting, XML Web Services. Все эти компонентно-ориентированные технологии (DCOM, CORBA и RMI) долгие годы успешно применялись в Intranet-приложениях. Они обеспечивают надежную, масштабируемую архитектуру. Однако при использовании этих технологий в Internet возникают две серьезные проблемы. Во-первых, они плохо взаимодействуют между собой. Все технологии оперируют объектами, но существенно отличаются деталями: управлением жизненным циклом, поддержкой конструкторов и степенью поддержки наследования. Второй, более важный аспект состоит в том, что ориентация на RPC-взаимодействия приводит к построению сильносвязных систем на основе явных вызовов методов объектов. В отличие от данных технологий, XML Web Services и .NET Remoting в полной мере реализуют объектно-ориентированный подход для webпрограммирования. XML Web Service - компонент, предоставляющий Internet-клиентам набор функций API или web-методов. XML входит в название, поскольку web-сервисы и их клиенты используют его для обмена данными. В основе web-сервисов лежат открытые стандарты, такие как HTTP, XML (Extensible Markup Language), SOAP (Simple Object Access Protocol - стандарт Intenet, описывающий, как приложения могут взаимодействовать, то есть вызывать методы друг друга, с помощью HTTP и других протоколов). Основная задача web-сервисов обеспечение межпрограммного взаимодействия. Многие работают на UNIX-серверах, при этом к ним обращаются Windows-клиенты. Данные, передаваемые web-сервисам, сериализуются в XML и передаются в SOAP-пакетах. Метаданные о содержимом таких сообщений хранятся в WSDL-контракте web-сервиса и схемах XSD. Главное преимущество такого подхода - читабельность метаданных. Разработчик может легко просмотреть все описание web-сервиса и даже создать собственный модуль, разбирающий SOAP-пакеты. .NET Remoting предоставляет инфраструктуру для распределенных 52
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET объектов. Она гораздо сложнее простой архитектуры web-сервисов, основанной на передаче сообщений. .NET Remoting включает передачу параметров по ссылке и значению, обратные вызовы, множественную активацию объектов и политики управления жизненным циклом. Чтобы использовать указанные возможности, клиентское приложение должно владеть всеми технологиями. Данные в .NET Remoting передаются в бинарном или SOAP-формате. Однако в любом случае метаданные о структуре переданной информации содержатся в общеязыковой исполняющей среде. Без общеязыковой исполняющей среды (CLR) клиентское приложение не сможет разобрать специфичные для .NET Remoting заголовки SOAP. То есть .NET Remoting предъявляет существенно более высокие требования по сравнению с webсервисами. Разработка web-сервисов на платформе .NET Есть много способов написания web-сервисов. Их можно разрабатывать вручную или с помощью SOAP-инструментов, предоставляемых Microsoft, IBM и др. Написание web-сервисов с помощью Microsoft.NET имеет два преимущества: .NET Framework существенно упрощает процесс разработки за счет предоставления библиотеки классов и автоматизации отдельных этапов разработки; Web-сервисы, написанные с помощью .NET Framework, - это управляемые приложения. То есть в таких приложениях не возникает проблем утечек памяти, неправильно инициализированных указателей и других типичных проблем программирования. Создание Разработаем простой web-сервис AdditionService, осуществляющий сложение двух чисел. У него будет всего один метод Add, принимающий в качестве параметра два целых числа и возвращающий также целое число. AdditionService демонстрирует несколько важных принципов программирования web-сервисов с помощью Microsoft .NET Framework. 53
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Web-сервисы реализуются как ASMX-файлы. ASMX - это особое расширение имени файла, зарегистрированное за ASP .NET (точнее, за HTTP-обработчиком ASP.NET) в главном файле конфигурации ASP .NET Machine.config. ASMX-файлы начинаются директивой @WebService. Эта директива должна содержать хотя бы атрибут Class, задающий класс, из которого состоит web-сервис. Классы web-сервисов могут иметь необязательные атрибуты WebService. В данном примере такой атрибут назначает имя web-сервиса и описание, которое отображается на HTMLстранице, когда пользователь вызывает в браузере AdditionService.asmx. Web-методы объявляются путем назначения открытым методам класса Web-сервиса атрибута WebMethod. Для вспомогательных методов, применяемых внутри него, но недоступных внешним клиентам, этот атрибут просто не указывается. HTTP, XML и SOAP "невидимы". Работу с XML-данными и сообщениями SOAP выполняет .NET Framework. AdditionService.asmx <%@ WebService language="C#" Class="AddService" %> using System using System.Web.Services [WebService (Name="Addition Web Service" Description="WebService for adding in class AddService { [WebMethod (Description="Computes the sum of two integers")] public int Add (int a, int b) { return a + b } } Несмотря на малые размеры, AdditionService.asmx полноценный web-сервис, если его установить на web-сервер с ASP.NET. Его методы вызываются с помощью SOAP, HTTP GET и HTTP POST, и он может возвращать результаты как SOAP-отклики или как простые XML-оболочки. 54
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Используя фоновый код, классы web-сервиса можно вынести из asmxфайлов в отдельные файлы. Web-сервисы поддерживают использование сложных типов данных в качестве входных или выходных параметров. Сложные типы данных поддерживаются, так как XML позволяет легко сериализовать большинство типов данных. Однако при автоматическом тестировании web-сервиса ASP .NET не генерирует тестовые страницы для методов, принимающих сложные типы данных. Это происходит потому, что нельзя передать сложные типы данных web-методу с помощью HTTP GET и POST. Web-сервисы позволяют вызывать свои методы асинхронно. Асинхронный вызов возвращает управление немедленно, независимо от того, сколько времени нужно web-сервису на обработку вызова. Асинхронные вызовы полезны в случае, если обработка вызова требует значительного времени. Приложение выполняет вызов, далее продолжает работать, не дожидаясь результата вызова, и позднее получает результаты асинхронного вызова. Получение результата происходит при повторном вызове web-метода в удобное приложению время либо с помощью подписки на уведомление об окончании обработки вызова web-сервисом (механизм делегатов). Web-сервисы можно создавать при помощи инструментальных средств, например, Microsoft Visual Studio 2005. Для создания web-сервисов там предусмотрен отдельный тип проекта ASP .NET Web Service. Visual Studio генерирует asmx-файл, файл с фоновым кодом для описания классов web-сервиса, файл конфигурации web-сервиса и т. д. При запуске проекта на исполнение происходит компиляция классов сервиса и открытие asmx-файла в окне браузера. Описание web-сервисов при помощи контрактов Для того чтобы другие разработчики могли использовать AdditionService, им нужно знать, какие методы он предоставляет, какие протоколы поддерживает, сигнатуры методов и адрес web-сервиса (URL). Вся эта и другая информация может быть описана на языке WSDL (Web Service Description language). 55
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET WSDL - это XML-язык, предложенный IBM, Microsoft и др. (описание стандарта языка можно посмотреть по адресу ссылка: http://www.w3.org/TR/wsdl - http://www.w3.org/TR/wsdl). WSDL, как правило, генерируется и разбирается автоматически различными средствами разработки, так что разработчикам нет необходимости самим читать XML. Инструментальные средства разбирают XML и генерируют на его основе класс-оболочку который содержит методы, идентичные методам web-сервиса. Клиентское приложение вызывает методы класса-оболочки. Класс-оболочка отправляет запросы webсервису, получает результат и возвращает его клиенту. То есть, публикуя web-сервис, нам также необходимо публиковать описывающий его контракт. Для получения контракта web-сервиса, созданного с помощью .NET Framework, достаточно ввести в адресной строке браузера URL web-сервиса и добавить строку запроса ?wsdl. Так выглядит контракт AdditionService: 56
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Обнаружение web-сервисов Каким образом AdditionService? другие разработчики узнают о существовании Во-первых, с помощью DISCO (сокращение от слова discovery) файлового механизма поиска локальных web-сервисов, то есть механизма получения списка доступных web-сервисов из DISCOфайлов, размещенных на web-серверах. Кроме того, DISCO-файлы содержат записи о расположении WSDL-контрактов имеющихся сервисов. DISCO-файл представляет собой XML-файл с записями. 57
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Также возможно использовать VSDISCO-файлы, которые аналогичны DISCO-файлам, но их содержимое есть результат динамического поиска web-сервисов в указанных каталогах и всех вложенных подкаталогах. ASP .NET отображает расширение имени файла .vsdisco на HTTP-обработчик, который отыскивает в данном каталоге и его подкаталогах asmx и disco и возвращает динамически генерируемый DISCO-документ. По соображениям безопасности динамический поиск в ряде версий .NET Framework отключен, но его можно включить, изменив записи файла Machine.config. А как же осуществляется поиск web-сервисов в глобальной сети? Для поиска web-сервисов в глобальной сети Microsoft, IBM и Ariba совместно разработали UDDI (Universal Description Discovery and Integration) - спецификацию построения распределенных баз данных, которая позволяет отыскивать web-сервисы. UDDI поддерживается сотнями компаний. UDDI-сайты сами являются web-сервисами. Каждый может опубликовать свой реестр на основе UDDI. Большинство разработчиков никогда не используют UDDI API напрямую. Вместо этого к реестрам UDDI обращаются инструментальные средства разработки. Они также генерируют классыоболочки обнаруженных и выбранных web-сервисов. Итоги XML Web-сервис является программным компонентом, предоставляющим функциональность, которую могут использовать самые разные системы, поддерживающие такие стандарты, как XML и HTTP Клиентами web-сервиса могут быть как локальные, так и удаленные приложения. Web-сервисы позволяют создавать структуры, позволяющие легче интегрировать различные системы на основе простых общепринятых стандартов. 58
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Встраиваемые операционные системы. применения и основы разработки Область Обзор встраиваемых ОС. Реальное и жесткое реальное время. Обзор Windows XP Embedded, Windows CE Embedded Встраиваемые системы Встраиваемая система - система специального назначения, в которой компьютер полностью инкапсулирован в основное устройство. В отличие от компьютера общего назначения (например, персонального компьютера), встраиваемая система предназначена для решения одной или нескольких заранее определенных задач в конкретной предметной области. Так как система создается для решения конкретных задач, оптимизацию можно проводить уже на этапе проектирования, уменьшая таким образом физические размеры системы и снижая ее стоимость. Производство встраиваемых систем может быть как серийным, так и штучным. Наладонные компьютеры (PDA) также обычно относят к встраиваемым устройствам ввиду аппаратных особенностей, хотя они могут решать довольно широкий круг задач. Граница встраиваемых решений становится все более неопределенной по мере появления новых типов устройств. Физически, к встраиваемым системам относится масса устройств - от MP3-плееров до больших стационарных систем, таких как "умные" светофоры или интеллектуальные датчики на электростанциях. Встраиваемая операционная система - это операционная система для встраиваемых систем. При создании таких систем особое внимание уделяют компактности и эффективности работы, отказываясь от большинства функций, предоставляемых операционными системами для обычных компьютеров. Такие действия оправданны, поскольку встраиваемые устройства решают одну или несколько конкретных задач и большая часть функциональности обычных ОС им просто не понадобится. Существует несколько десятков встраиваемых операционных систем, наиболее известными из которых являются: 59
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET NetBSD, Windows CE, Windows XP Embedded, Symbian OS. Реальное время Вычисления в реальном времени (Real-Time Computing - RTC) - это вычисления, удовлетворяющие ограничениям реального времени (RealTime Constraint); то есть интервал времени между событием и реакцией системы не превышает некоторого порогового значения. Соответственно системы, не относящиеся к системам реального времени (non-real-time system), не имеют ограничений на время отклика, даже если к ним предъявляются требования высокой производительности и быстрого отклика. Программное обеспечение реального времени обычно разрабатывается на основе операционных систем реального времени (real-time operating systems) с использованием синхронных языков программирования (synchronous programming languages). К системам реального времени часто относят системы, приложения которых считаются критически важными (mission critical). Пример компьютерной системы реального времени - противоблокировочная тормозная система автомобиля. В данном случае, ограничением реального времени является интервал, во время которого необходимо отпустить тормоза для предотвращения блокировки колес. Вычисления реального времени считаются выполненными неуспешно, если они не завершились в заданный интервал времени. Временной интервал определяется условиями конкретной задачи. Система должна завершать вычисления реального времени в течение заданного интервала вне зависимости от своей загруженности другими задачами. Жесткое и "мягкое" реальное время Систему считают системой реального времени, если корректность выполнения операции зависит не только от логической корректности 60
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET операции, но и от времени ее выполнения. Считается, что в случае систем жесткого реального времени ( hard или immediate real-time system) завершение операции по истечении заданного интервала времени (наступления "дедлайна") является бесполезным и в конечном счете может привести к критическому сбою всей системы. Системы мягкого реального времени ( soft real-time system) допускают задержки и предпринимают различные меры для реакции в заданный интервал, например, снижая качество возвращаемого ответа (пропуск кадров в видео). Как правило, системы жесткого реального времени взаимодействуют с оборудованием на низком уровне. Например, система управления двигателем автомобиля является системой жесткого реального времени, так как задержка реакции может привести к сбою в работе двигателя и его повреждению. Другими примерами встраиваемых систем жесткого реального времени являются различные медицинские системы (такие как электронный стимулятор сердца), системы управления подушками безопасности, промышленные роботы, системы управления атомными электростанциями. Системы жесткого реального времени используются, когда необходимо реагировать на события в течение строго заданного интервала времени. Обычно такие строгие требования предъявляются к системам, которые в случае задержки реакции могут привести к значительным потерям в том или ином виде, например к физическому повреждению окружения, угрозе жизни человека. Как происходит распределение системного времени в случае систем, предназначенных для решения более одной задачи? Как правило, время распределяется на основании приоритетов задач. Кроме того, существуют алгоритмы, отдающие предпочтение задачам, которым осталось меньше всего времени на выполнение (Earliest Deadline First). Такие алгоритмы подходят для систем, загруженных менее чем на 100%. К системам мягкого реального времени обычно относят те, что используются для решения задач совместного доступа и обеспечения множества связных систем актуальной информацией об изменениях. Примером системы мягкого реального времени может служить программное обеспечение, управляющее расписанием полетов 61
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET коммерческих авиалиний. Такая система может работать при задержках в несколько секунд. Было бы невозможно обеспечить коммерческие авиаперевозки, если бы вычисления в системе управления расписанием не выполнялись в режиме реального времени. Аудио-или видеосистемы реального времени также, как правило, являются системами мягкого реального времени. Нарушение ограничений реального времени выражается в потере качества, а система продолжает работать. Важно отметить, что разница между системами жесткого и мягкого реального времени не обязательно связана с количеством времени, доступным для решения задачи. Компьютер может перегреться, если процессор не начнет охлаждаться в течение 15 минут (жесткое реальное время). С другой стороны, сетевая карта может потерять данные в буфере, если их не прочтут в течение доли секунд, но эти данные можно переслать повторно, не затрагивая какую-либо критическую операцию. Скорее всего, пользователь вообще не заметит такой задержки. Windows Embedded Семейство встраиваемых Windows включают следующие операционные системы: Windows CE, Windows XP Embedded и Windows Embedded for Point of Service. Windows XP Embedded Windows XP Embedded (Xpe) - компонентная версия Microsoft Windows XP Professional. В основе ХРе - те же двоичные коды, что и у XP Pro, но XPe ориентирован на разработчиков для OEM, ISV и IHV, которым требуется полноценная поддержка Win32 API, но не нужны некоторые компоненты Professional. XPe запускает существующие Windowsприложения и драйверы устройств на устройствах с 32MB памяти Compact Flash, 32MB RAM и микропроцессором P-200. XPe не имеет отношения к Wndows CE. Они ориентированы на различные устройства и оба имеют свои преимущества и недостатки. Например, XPe не сможет работать на некоторых достаточно малых 62
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET объемах памяти, на которых работает CE. Однако CE не поддерживает полноценное Win32 API, которое поддерживает XPe (в CE есть аналог Win32 API). CE не сможет исполнять сотни уже разработанных драйверов и тысячи существующих приложений. К устройствам, на которые ориентирована XPe, можно отнести торговые и игровые автоматы, кассовые аппараты, промышленных роботов, тонких клиентов, компьютерные приставки, сетевые устройства хранения данных, таймеры, устройства навигации и т. д. Различные версии XPe могут быть развернуты на самых разных устройствах, за исключением полноценного ПК. XPe поддерживает все оборудование, поддерживаемое XP Pro. Его нельзя установить на обычный ПК ввиду лицензионных ограничений. Windows CE Windows CE (WinCE) - версия операционной системы Microsoft Wndows для сильно ограниченных по сравнению с обычными ПК компьютеров и встраиваемых систем. Ядро Wndows значительно отличается от ядра Wndows для обычного ПК и не является урезанной версией. Ядро Win CE поддерживает архитектуры, совместимые с Intel x86, MIPS, ARM и Hitachi SuperH. Windows CE специально оптимизирована для устройств, имеющих мало памяти - ядро Wndows CE требует для исполнения менее мегабайта памяти. Устройства часто конфигурируются без привлечения внешнего дискового устройства. Более того, можно настроить конфигурацию устройства так, чтобы получить изолированную от внешних пользователей систему (конечный пользователь не сможет расширять систему). Это можно сделать, записав образ ОС в ROM. Windows CE соответствует определению системы реального времени (в отличие от XPe) с детерминированной задержкой обработки прерываний. Win CE поддерживает 256 уровней приоритета и поддерживает наследование приоритетов. Основной единицей исполнения является поток. Это позволяет упростить решение вопросов наследования и улучшить время исполнения. 63
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET На основе Win CE было разработано множество платформ (наиболее распространенные на сегодняшний день - Mobile 2003, Mobile 5.0, Smartphone 2003) и множество промышленных устройств и встраиваемых систем. Значительная часть Windows CE поставляется с открытыми исходными кодами. В частности, Platform Builder (интегрированная среда создания образа ОС на основе Wndows CE) предлагает несколько компонент в форме исходных кодов. Итоги Для персональных компьютеров разработано огромное число информационных систем. Прочие устройства до сих пор испытывают недостаток различных программных средств. Разработка решений для встраиваемых систем или мобильных устройств требует учета ограниченности их возможностей по сравнению с персональными компьютерами. В то же время такие устройства представляют платформы для создания совершенно новых приложений и сервисов. Появление таких операционных систем, как Wndows CE и Wndows XP Embedded, существенно упрощает разработку встраиваемых систем. А возможность использования .NET Compact Framework упрощает создание прикладных программ и различных сервисов для устройств. 64
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Разработка приложений для мобильных устройств: Smartphones, Pocket PC Особенности мобильных устройств. Наиболее перспективные приложения. Особенности разработки приложений. .NET Compact Framework История проблемы Большинство разрабатываемых на сегодняшний день программ предназначены для универсальных персональных компьютеров (ПК). Немногие рабочие места, на которых можно было бы задействовать ПК, еще не оборудованы ими. Весь смысл ПК в том, что его универсальные аппаратные средства и операционная система с помощью различного прикладного ПО позволяют выполнять любые задачи - управлять личными финансами, скачивать учебные материалы или сочинять музыку. Именно потому, что ПК в состоянии решать все эти задачи, ни одну из них он не решает особенно хорошо. ПК нельзя оптимизировать под какую-то одну задачу - он должен быть пригоден и для остальных. Особым классом устройств являются мобильные вычислительные устройства, такие как Pocket PC, смартфоны или Tablet PC. Главное их преимущество состоит в возможности носить с собой устройство с немалой вычислительной мощностью. Все больше мобильных устройств оборудуется средствами доступа в Internet. Каждое устройство взаимодействует с Internet специфичным для себя образом. Этим устройствам тоже нужно ПО. Однако мобильность таких устройств требует разработки для них ПО иного типа. Наладонные ПК (они же Pocket PC в терминологии Microsoft). Большинство компаний - производителей самих устройств и операционных систем для них продвигают эти устройства в качестве универсальных вычислительных устройств, аналогичных ПК. Однако по распространенности наладонным компьютерам пока что еще далеко до обычных ПК или мобильных телефонов. Операционные системы Microsoft установлены примерно на трети этих компьютеров, на остальных работает в основном операционная система Palm OS компании PalmSource, Inc. На сегодняшний день лишь немногие 65
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET подтвердили собственными вложениями, что мобильность наладонных компьютеров стоит того, чтобы мириться с неудобством ввода текста, крошечным дисплеем и необходимостью носить с собой устройство, примерно в три раза превосходящее по размерам и весу мобильный телефон. (Информация устарела.) Наиболее перспективные приложения наладонных ПК Наладонные ПК удобно рассматривать как отдельный класс ПК - не урезанных, а просто мобильных. Медленное распространение наладонных компьютеров обусловлено фундаментальным непониманием их возможностей и преимуществ, а также потребностей реальных пользователей. Менее четверти обладателей ПК тратит время на то, чтобы ввести личный список дел в ПК. Еще меньше переносят этот список на мобильное устройство. Если перестать думать о наладонных ПК и смартфонах как об универсальных устройствах и задаться вопросом "Какие же реальные задачи можно решать с помощью этих устройств?", то минимум две такие задачи станут очевидны. Первая задача - ввод данных на мобильные устройства. Превосходным примером служит программа, победившая на соревнованиях Imagine Cup 2003, проводимых Microsoft среди студентов. Система позволяла вводить данные на двух языках и была предназначена для официантов ресторана, который принадлежал отцу автора программы. Шеф-повар этого этнического ресторана плохо говорил по-английски, а найти официанта со знанием вьетнамского языка в Охаме (штат Небраска) нелегко. Автор программы Ту Нгуена решил ввести меню в Pocket PC. Официанты записывают пожелания клиента, просто помечая поанглийски поля в меню КПК, и отправляют заказ на сервер по беспроводной сети. С помощью таблицы соответствия сервер переводил заказ на вьетнамский язык. Заказы поступали шеф-повару гораздо быстрее, так как официантам не нужно было ходить на кухню или стоять в очереди у одного окошка. Исчезли проблемы с задержками заказов и их неправильным пониманием. Официанты не используют Word и Excel, не работают со своим расписанием и даже не играют в "Шарики". Но эта небольшая простая система сократила время практически на всех этапах бизнес-процесса. Мобильные устройства отлично подходят для специализированных, а 66
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET не общих задач. Вторая задача - создание сервисов на основе системы глобального позиционирования. Речь идет о сервисах, настраивающихся в зависимости от текущего местонахождения мобильного пользователя. Большинство мобильных устройств сейчас поддерживают GPS (Global Positioning System). Кроме того, добавить в Pocket PC поддержку GPS довольно легко. Такие сервисы могут заниматься планированием маршрутов ("Где я и как мне попасть отсюда домой?"), поиском необходимых предприятий из сферы услуг ("Где найти ближайшую дежурную аптеку?"). Именно здесь и оказываются полезными смартфоны. Сотовый телефон сейчас есть практически у каждого взрослого и подростка в развитых странах, а также практически у каждого обеспеченного человека - в развивающихся. Не нужно пытаться убедить этих людей приобрести и носить с собой новый прибор. Они уже носят телефоны, так как считают, что базовые услуги сотовой связи полезны сами по себе. Если написать для мобильного телефона приложение-хит, они могут купить именно этот телефон, а не телефон конкурирующей компании. Мобильные устройства гораздо разнообразнее настольных ПК. При этом разработчикам часто удобно использовать общую модель программирования для различных типов устройств. Программирование настольного ПК от Dell аналогично программированию настольного ПК от Compaq или Sony А различия, которые все же есть, например разрешение экрана, можно определять динамически с помощью операционной системы. В мире компактных устройств желательно, чтобы программирование для устройств разных производителей было максимально сходно и чтобы одна и та же программа могла работать на максимальном количестве устройств. Существующие различия, такие как наличие встроенной фотокамеры или GPS, следовало бы определять независимыми от платформы способами. У всех компактных устройств довольно скудные ресурсы по сравнению с современными ПК. Так как чаще всего мобильное устройство обслуживает всего одного пользователя, масштабируемость не важна. Кроме того, в отличие от ПК, на мобильном устройстве обычно единовременно может выполняться только одно приложение. 67
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Мобильные устройства имеют фиксированное небольшое разрешение экрана. Например, 240х320 или 640х480 у Pocket PC, а у смартфона бывает еще меньше - 176х180. Тактовые частоты компактных устройств также невелики - около 500 МГц в современных моделях. Средства программирования должны генерировать эффективный код для работы на устройствах с ограниченными ресурсами. Microsoft .NET Compact Framework Microsoft довольно давно стремится на рынок компактных устройств. В области ОС у Microsoft есть два основных продукта: Windows XP Embedded и Windows CE. Довольно долгое время разработка для Wndows CE велась с помощью eMbedded Visual C++ и eMbedded Visual Basic. Чтобы упростить разработку, была создана .NET Compact Framework. Эта инфраструктура предоставляет возможности .NET (независимость от выбора языка программирования, сбор мусора, компиляцию по требованию и т. д.) для разработки приложений для компактных устройств. Разумеется, использование .NET Compact Framework на наладонных ПК и смартфонах в ряде случаев приводит к снижению производительности. Например, сборщик мусора по сравнению с простым диспетчером кучи требует больше памяти и процессорного времени. Таким образом, у разработчика есть выбор: создавать более медленно чуть более эффективный код или создавать чуть быстрее более безопасный. В целях повышения производительности .NET Compact Framework постоянно совершенствуется. Оптимизируются старые классы, добавляются новые. По сути, .NET Compact Framework является сокращенной версией .NET Framework. Какая же часть инфраструктуры поддерживается? Сухие цифры выглядят примерно так: Классы Методы Полная .NET Framework 18 700 80 000 Compact .NET Framework 4 700 13 000 На рисунке дано наглядное представление, какие классы присутствуют, 68
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET а какие были удалены. Основная идея - оставить классы, полезные для небольших, не требующих ресурсов клиентских приложений. Удалены все классы, применяемые на серверной стороне (System.Web.UI). Продвинутые возможности System.Drawing.Imaging тоже не нужны на дисплеях компактных устройств. Удалены многие средства программирования самого нижнего уровня (например, Remoting). InteropServices поддерживает только p/Invoke для прямого обращения к неуправляемым API, но не к COM. Почти весь Reflection остался. Оставшиеся классы максимально урезаны. Например, сборщик мусора для экономии памяти не поддерживает поколения объектов. System.GC.Collect не умеет собирать объекты заданного поколения. У некоторых методов нет перегруженных версий. Рис. 8.1. Общая структура .NET Compact Framework 69
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET В справочной системе есть фильтр, отображающий только классы Compact Framework. Кроме того, во всех описаниях классов MSDN члены классов, доступные в Compact Framework, особо помечены. Проекты .NET Compact Framework в Visual Studio выглядят почти как обычные проекты. Для отладки приложения в Visual Studio есть программные эмуляторы Pocket PC и смартфона. Разумеется, они работают примерно в 4-6 раз медленнее настоящих устройств. Visual Studio может генерировать cab-файл для установки приложения на Pocket PC. Итоги Для персональных компьютеров разработано огромное число информационных систем. Мобильные устройства до сих пор испытывают недостаток различных программных средств. Процесс разработки программ для мобильных устройств требует учета ограниченности их возможностей по сравнению с персональными компьютерами. В то же время мобильные устройства представляют платформы для создания совершенно новых приложений и сервисов, учитывающих мобильность, возможность рукописного и речевого вводов и другие особенности мобильных устройств. Также интересной является задача использования мобильных устройств в больших информационных системах. 70
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Технологии операционной системы Windows Vista Межпрограммное взаимодействие средствами Windows Communication Foundation. Создание пользовательских интерфейсов при помощи Windows Presentation Foundation. Приложения на основе бизнеспроцессов в Windows Workflow Foundation Операционная система Windows Vista включает в себя новые технологии для разработки программного обеспечения. К этим технологиям относятся: Технология межпрограммного взаимодействия Windows Communication Foundation. Технология для создания графических пользовательских интерфейсов Windows Presentation Foundation. Технология работы с бизнес-процессами Windows Workflow Foundation. Новые версии технологий для разработки на основе мобильных устройств. Технология CardSpace для работы с различными цифровыми идентификаторами. WCF, WPF, WF и CardSpace также входят в состав .NET Framework 3.0 и могут использоваться на предыдущих версиях Windows. В настоящей лекции речь пойдет о первых трех технологиях. Windows Communication Foundation Windows Communication Foundation - совокупность .NET-технологий для построения и исполнения взаимодействующих систем. WCF включает в себя исполняющую среду, набор утилит и библиотек для организации межпрограммного взаимодействия. WCF основана на сервисно-ориентированной идеологии построения информационных систем. Ориентация на сервисы выражается в том, что взаимодействие приложений представляется как взаимодействие сервиса и клиента. Приложение может предоставлять сервисы и использовать сервисы (быть клиентом). Сервис имеет один или 71
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET несколько выходов (endpoints). Выходы предоставляют доступ клиентам к одной или нескольким операциям сервиса. Операция сервиса - один из методов, реализованных в сервисе. Выходы могут принимать и отправлять сообщения. Выход инкапсулирует следующую информацию: адрес, куда клиент может отправлять сообщения (URI); описание механизма взаимодействия с выходом (binding). Включает тип транспортного протокола (TCP, HTTP), формат данных (текст, бинарный) и другие параметры; контракт (contract), описывающий операции, которые предоставляет выход сервиса. Взаимодействие клиента с сервисом, обладающим несколькими выходами, представлено на рис. 1. Рис. 9.1. Взаимодействие клиента и сервиса Ориентация на сервисы позволяет обеспечить слабую связность взаимодействующих приложений. Изменение реализации сервиса не затрагивает клиента. Клиент и сервис представляют собой отчуждаемые программные компоненты. Клиент и сервис могут размещаться на различных компьютерах, связанных по сети. Приложения WCF могут взаимодействовать с приложениями, реализованными при помощи других, ориентированных на сервисы 72
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET технологий. При этом приложения могут быть развернуты на различных платформах. Так, например, WCF-приложение, исполняемое в Windows, может взаимодействовать с J2EE-приложением, развернутым на Sun Station. WCF объединяет все предшествующие технологии межпрограммного взаимодействия, поддерживаемые Microsoft. WCF поддерживает: взаимодействие при помощи web-сервисов; взаимодействие с приложениями на основе .NET Remoting; возможности Enterprise Services (управление временем жизни объекта, распределенные транзакции и т. д.); очереди сообщений (возможности MSMQ); стандарты WS-* (расширения web-сервисов, касающиеся обеспечения безопасности). Поддержка предшествующих технологий позволяет взаимодействовать с существующими системами и развивать их. Windows Presentation Foundation Windows Presentation Foundation (WPF) представляет собой API, инфраструктуру и набор инструментальных средств для построения приложений, сочетающих в себе графический пользовательский интерфейс, возможности работы с документами и мультимедиа. WPF является развитием предыдущих технологий Microsoft для создания пользовательского интерфейса (Windows Forms, GDI+, Direct 3D, технологии, применяемые в Windows Media Player). WPF включает в себя большую часть возможностей предшествовавших технологий и добавляет новые средства для создания более сложных пользовательских интерфейсов. Создание WPF было обусловлено несколькими целями: предоставить возможности для создания более красивых, точнее отвечающих требованиям пользователей интерфейсов. Для этого объединить предыдущие технологии и добавить новые элементы управления и средства настройки внешнего вида приложения; 73
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET улучшить взаимодействие дизайнеров и разработчиков приложений. Для этого - предоставить им инструментальные средства, использующие общий формат для описания приложения (XAML); предоставить общую технологию для создания интерфейсов Windows-приложений и приложений, работающих в браузере. eXtensible Markup Language (XAML) WPF позволяет описывать пользовательский интерфейс при помощи языка XAML. Этот язык основан на XML. Пример описания интерфейса оконного приложения, содержащего одно окно и кнопку с надписью, приведен на рис. 2. <Window Xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <Button>Ура!</Button> </Window> Пример 9.2. WPF генерирует XAML на основе интерфейсов, созданных в инструментальных средствах (например, Visual Studio или Expression). И наоборот, по XAML-описанию генерируется интерфейс. Дизайнер или разработчик может вручную редактировать описание интерфейса в XAML или генерировать XAML-описание программно. Как и Wndows Forms, WPF позволяет создавать весь интерфейс программно, не применяя XAML. Одно и то же описание интерфейса в XAML может быть использовано и для создания приложения, работающего в браузере, и для Windowsприложения. WPF API поддерживает: элементы управления (кнопки, панели, элементы для навигации и т. д.). К множеству элементов Windows Forms добавлены новые элементы управления; средства связывания с данными. Источниками данных могут быть объекты; коллекции объектов; объекты, содержащие XML; 74
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET объекты ADO .NET и объекты, содержащие результаты вызова методов web-сервиса; поддерживаются ресурсы - различные объекты, которые могут быть использованы несколькими элементами управления (шрифты, текстуры фона и т.д.); WPF поддерживает стили, темы, шаблоны для элементов управления, шаблоны для источников данных; двумерные графические примитивы и эффекты (теоретикомножественные операции над изображениями, операции с использованием градиента и др.); трехмерные графические примитивы; средства для создания анимации. Анимировать можно практически любые свойства элементов управления; WPF упрощает внедрение аудио и видео в интерфейс приложения по сравнению с Wndows Forms; WPF предоставляет различные средства для работы с документами. В частности, возможно хранить любой документ в формате, основанном на XML. Кроме того, несколько документов могут быть представлены в виде одного упакованного документа. Широкие возможности WPF для работы с графикой ориентированы в первую очередь на создание пользовательских интерфейсов. Для двумерной и трехмерной графики, а также анимации дизайнерам попрежнему могут потребоваться дополнительные технологии и инструментальные средства. Windows Workflow Foundation Windows Workflow Foundation (WF) - это модель программирования и набор инструментальных средств для построения Workflowприложений для Wndows. Модель программирования предполагает разработку систем на основе бизнес-процессов. Под бизнес-процессом (Workflow) в WF понимается множество связанных между собой элементов, называемых действиями (Activities). Связанные между собой действия образуют модель процесса, происходящего в реальном мире (например в отделе, чью работу предполагается автоматизировать). Бизнес-процесс также описывает 75
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET порядок выполнения действий. Действия могут выполняться как людьми, так и различными программами. Ранее для бизнес-процессов, в которых участвуют только программные системы, использовался термин "оркестрирование" (Orchestration), а термин "бизнес-процесс" (Workflow) применялся к процессам, в которых участвуют люди. Развитие информационных систем и автоматизация самой разной деятельности привели к тому, что во многих процессах принимают участие как люди, так и программы. Поэтому термин бизнес-процесс используется для обоих типов процессов. Пример бизнес-процесса кредитования приведен на рис. 3. Рис. 9.3. Пример бизнес-процесса кредитования WF ставит своей целью предоставить единую технологию для разработки Workflow-систем для Wndows (ранее такие системы можно было создавать средствами BizTalk Server, Exchange Server и др.). 76
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Бизнес-процесс может быть создан декларативно в виде XAMLдокумента или программно при помощи WF API. Кроме того, в Visual Studio интегрируется графический инструментарий. Он позволяет описывать бизнес-процесс визуально, размещая различные виды деятельности и связывая их между собой. С деятельностью можно связать код на любом управляемом языке. Бизнес-процесс компилируется и затем исполняется внутри приложений. Приложение, исполняющее бизнес-процесс, может быть консольным, Windows-приложением, приложением в браузере или сервисом. WF предоставляет среду для исполнения бизнес-процессов. Среда предоставляет различные сервисы (например для слежения за состоянием приложения, управления транзакциями или взаимосвязи с другими приложениями). Еще одной целью WF является предоставление единого средства для описания процессов, в которых принимают участие люди, и процессов, использующих только программное обеспечение. Проблема создания единого интерфейса состоит в том, что: процессы, использующие только программы, более детерминированы в смысле последовательности действий. Процессы, в которых участвуют люди, часто более гибкие и изменчивые; программы часто обмениваются более структурированной информацией (например, XML), чем люди (например, письма в электронной почте). Для поддержки таких процессов WF имеет две модели бизнес-процесса: последовательные процессы и процессы на основе конечных автоматов. WF содержит различные типы деятельности: деятельность, связанная с событием, и деятельность, связанная с условием, или правилом. WF позволяет изменять бизнес-процесс во время исполнения. WF предоставляет API для создания транзакций, обработки ошибок и отката действий. WF позволяет создавать типы деятельности, специфичные 77
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET для предметной области. WF использует компонентный подход к разработке систем на основе бизнес-процессов. Каждое действие может быть выполнено при помощи компоненты или (в случае составного действия или других случаев вложенности) нескольких компонент. При этом часто существуют альтернативные компоненты. Поведение на каждом шаге может быть описано декларативно. Компоненты могут относиться к действиям из конкретной предметной области. Итоги Новые технологии, входящие в состав Windows Vista, унифицируют и расширяют возможности предшествующих технологий. При этом поддерживаются новые программные модели, ориентированные на сервисы и разработку на основе бизнес-процессов. Приложения реализуются на основе .NET Framework, что позволяет получить преимущества управляемого кода. Все больше элементов приложения описывается декларативно на XML-подобных языках. Описание генерируется инфраструктурой на основе моделей, созданных разработчиком в инструментарии с графическим интерфейсом. Новые технологии усиливают интеграцию между аналитиками, дизайнерами и разработчиками программного обеспечения. 78
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Новая файловая система WinFS Предпосылки появления системы. программирования WinFS. WinFS API Обзор архитектуры. Модель Предпосылки появления Проблема поиска среди большого объема данных Большинство людей использует персональный компьютер для общения (посредством электронной почты или систем мгновенного обмена сообщениями) и хранения личных данных (электронных писем, документов, изображений, музыки и видео). В течение последнего десятилетия размер жестких дисков увеличивался примерно на 70% ежегодно. Сейчас размеры дисков измеряются гигабайтами, в один компьютер устанавливается более одного диска. На компьютере содержатся сотни тысяч фалов и папок. Если забыть точное местоположение файла, то найти его нелегко. К сожалению, до сих пор не существует оптимального способа организации произвольных данных для последующего поиска нужной информации. Например, иерархическая структура папок плохо подходит в тех случаях, когда нужно классифицировать информацию разными способами. Пользователь ограничен в своих возможностях организовать свои данные удобным для себя способом. Во многих случаях было бы удобно устанавливать связи между данными. Скажем, связать фото с футбольного матча с местом его проведения, данными о тренере или игроках (URL-адресами сайта футбольного клуба, форума болельщиков, персональными страницами или адресами почты игроков), а затем найти это фото, выполнив поиск документов по следующим признакам: где есть упоминания о футболе; где есть упоминания о тренере, команде или игроках этой команды; относящихся к городу или стадиону, где проходил матч; созданных в 2007 году. 79
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Дублирование данных Еще одна проблема состоит в том, что одни и те же данные часто хранятся в нескольких местах в разных форматах. Разработчики тратят много времени и усилий на создание собственных уникальных представлений для хранения информации о людях, местах и событиях. Например, понятие "контакт" есть в Microsoft Office Outlook, Microsoft Windows Address Book, MSN Messenger, ICQ, различных программах для мобильных устройств. В каждом приложении понятие "контакт" определяется по-своему, соответственно, для хранения используется свое представление, что затрудняет интеграцию, совместное использование данных и их синхронизацию. Проблемы современного подхода к хранению данных Итак, какие же проблемы стали причиной появления новых подходов к хранению данных? Разработчики все время заново изобретают базовые абстракции данных. Разные приложения не могут легко использовать общие данные. Одна и та же информация хранится в нескольких местах. Пользователю приходится вводить одну и ту же информацию многократно. Отсутствует синхронизация между копиями одних и тех же данных. Отсутствуют уведомления об изменении данных. Что такое WinFS? WinFS - новая система хранения данных от Microsoft. Во-первых, WinFS позволяет классифицировать информацию несколькими способами и устанавливать связи между разными элементами данных. Во-вторых, WinFS предоставляет общий формат хранения ежедневно накапливаемой информации, в том числе изображений, сведений о людях и местах и др. В-третьих, WinFS способствует совместному 80
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET использованию информации приложениями от разных поставщиков. На данный момент WinFS существует в виде отдельного установочного пакета и может работать в рамках операционной системы Microsoft Windows XP и Windows Vista. Возможно, WinFS станет частью последующих операционных систем. Платформа хранения данных WinFS - платформа хранения данных, предназначенная для организации, поиска и совместного использования данных любой информации. Эта платформа представляет модель данных, с помощью которой можно определять и использовать сложные типы данных. WinFS содержит множество схем, описывающих реальные сущности (изображения, люди, места, события, сообщения и т. д.). Эти сущности могут быть довольно сложными, например, с человеком может быть связано несколько имен, адресов проживания и электронной почты, сведений о текущем местонахождении и т. д. Независимые разработчики могут вводить собственные типы данных, а также добавлять в WinFS новые схемы. База данных WinFS поддерживает ядро реляционной базы данных (SQL Server 2005), которое позволяет использовать реляционные запросы для поиска экземпляров хранимых типов. WinFS разрешает устанавливать произвольные взаимосвязи между элементами хранимой информации. Разработчики автоматически получают возможности поиска, репликации, защиты и установления взаимосвязей между данными созданных ими типов, а также между данными предопределенных в Wndows типов. Такая структура дает возможность вести поиск информации, задавая системе вопросы, а не запрашивая поиск по папкам. WinFS - не только реляционная база данных, она поддерживает и иерархическое хранилище. Она может возвращать данные как структурные типы и как объекты - типы плюс поведение. То есть WinFS 81
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET можно рассматривать как объектно-ориентированную базу данных. Файловая система Для традиционных данных вроде текстовых документов, аудиозаписей и видеоклипов WinFS - новая файловая система Wndows. Основные данные файла (файловый поток) хранятся в виде файла на томе NTFS. Однако при любом вызове API, изменяющем или добавляющем данные в файловый поток NTFS, WinFS извлекает из потока метаданные и сохраняет их в своем хранилище. Новые приложения могут хранить свои данные непосредственно в WinFS. Доступ к файловым потокам возможен через старый Wn32 API и новый WinFS API. Модель программирования WinFS Модель программирования WinFS поддерживает доступ к данным, управление данными, расширение классов данных WinFS, синхронизацию данных, уведомления об изменении данных и управление событиями по приоритетам. Средства доступа и управления данными позволяют создавать, получать, обновлять и удалять данные, хранящиеся в WinFS, а также использовать функциональность, специфичную для предметной области. Схемы WinFS можно расширять, добавляя пользовательские поля и типы в классы данных. Данные можно синхронизировать между хранилищами WinFS, а также между WinFS и другими системами хранения. На вершине иерархии модели данных WinFS находится служба WinFS, представляющая собой просто экземпляр WinFS. Уровень ниже в иерархии занимает том (volume). Том - самый большой автономный контейнер элементов. Каждый экземпляр WinFS состоит из одного или нескольких томов. Внутри тома хранятся элементы (items). Элемент в WinFS - новая единица целостности. Все операции производятся над элементами, а не над файлами. Система хранения содержит именно элементы. По сути, элемент является базовым типом системы хранения данных, он обладает набором атрибутов данных и реализует базовую 82
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET поддержку запросов. Рис. 10.1. Тома в файловой системе WinFS В WinFS выделяют особый тип элемента - папка. Папки бывают двух типов: контейнеры и виртуальные папки. Папка-контейнер - элемент, который содержит удерживающие ссылки (holding links) на другие элементы и моделирует знакомую нам концепцию каталога файловой системы. Элемент существует до тех пор, пока существует хотя бы одна удерживающая ссылка на него. То есть папка-контейнер физически содержит не сами элементы, а ссылки на них. Значит, элемент может одновременно находиться в нескольких папках. При этом не возникает проблем с синхронизацией копий элемента, расположенных в разных папках, так как все папки ссылаются на один и тот же элемент. Виртуальная папка - это динамический набор элементов. Она представляет собой именованное множество элементов. Множество элементов можно задать явным перечислением либо как результат запроса к WinFS. При добавлении в хранилище нового элемента, удовлетворяющего запросу, он будет автоматически включен в такую папку Виртуальная папка также называется элементом, содержащим набор неудерживающих ссылок (nonholding links). Виртуальная папка является аналогом представлений в базе данных (view). 83
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET WinFS также предоставляет встроенные элементы (embedded items). Встроенный элемент - особый вид связи внутри элемента (встроенная связь) для ссылки на другой элемент. Элемент, на который ссылается такая связь, обрабатывается только в контексте содержащего его элемента. Встроенные элементы могут оказаться полезны при моделировании ситуаций типа "в электронное письмо вложен документ Microsoft Word". Для классификации элементов в WinFS также поддерживаются категории. Каждому элементу можно назначить одну или несколько категорий. Можно выстроить иерархию категорий и использовать имя категории при поиске элементов. Итак, структуризация информации WinFS может быть осуществлена следующими способами: на основе иерархии папок; по типам (всякий элемент WinFS - объект определенного типа); по свойствам элементов (объекты могут обладать свойствами); по взаимосвязям; по категориям. WinFS API Для доступа к данным WinFS можно использовать три API: управляемый WinFS API строго типизированный, "высокоуровневый" интерфейс; ADO .NET - низкоуровневый интерфейс для работы с данными в формате XML или в виде таблиц и строк. Можно манипулировать данными с помощью T-SQL. Wn32-функции - предоставляют доступ к файлам и папкам WinFS. Для решения конкретной задачи можно применять сочетание этих трех способов. Управляемые классы WinFS находятся в пространстве имен System.Storage и во вложенных в него пространствах. Наиболее часто 84
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET используются классы пространства System.Storage.Core. Отметим ряд возможностей WinFS, используемый для любых классов данных. Асинхронность - выполнение асинхронных запросов с использованием стандартной модели асинхронного программирования .NET. Транзакции. Уведомления. Поддержка BLOB и потоков (streams). Курсоры и разбиение на страницы. Уведомления Многим приложениям важно отслеживать состояние своих данных и получать уведомления об изменении их состояния. Служба уведомлений WinFS поддерживает концепции долговременных и кратковременных подписок. Кратковременная подписка (short-term subscription) существует до тех пор, пока приложение ее не отменит либо пока приложение не завершится. Долговременная подписка (long-term subscription) сохраняется между перезапусками приложений. Наблюдатели (watchers) в WinFS API - это группа классов, позволяющих приложению избирательно получать уведомления об изменениях в хранилище WinFS, а также предоставляющих информацию о состоянии, которая может сохраняться приложением. Можно отслеживать состояние элементов, встроенных в них элементов, взаимосвязей между элементами. Итоги Важно понимать, что к хранению и поиску данных есть два принципиально разных подхода: 1. Хранить данные, не концентрируясь на механизмах группирования, связывания, структурирования и прочих аспектах хранения. При этом основные усилия разработчиков системы 85
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET хранения сосредоточены на создании разнообразных и эффективных алгоритмов поиска данных (примером такого подхода может служить Google Mail). Очевидно, при таком подходе существует опасение, что нетривиальный запрос будет обрабатываться в течение длительного времени и может вообще не вернуть релевантных данных. 2. Развивать многочисленные способы управления хранимыми данными (как делает, например, WinFS), облегчая таким образом поиск. Однако задача установления связей и группировки во многом ложится на разработчиков прикладного программного обеспечения и самих пользователей. Процесс организации своих собственных данных может оказаться трудоемким и неудобным. Оба подхода имеют свои преимущества и недостатки. Основной задачей разработчиков, выбравших второй подход, становится разработка алгоритмов, позволяющих автоматизировать хотя бы часть процесса организации данных (например, сопоставление информации о фото с информацией о том, что на нем изображено), и разработка прикладного программного обеспечения, упрощающего процесс организации данных пользователем. 86
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Современные технологии защиты информации Понятие об информационной безопасности. Доступность, целостность, конфиденциальность. Угрозы и одна из моделей их классификации. Методы защиты от угроз Понятие информационной безопасности Словосочетание "информационная безопасность" в разных контекстах может иметь различный смысл. В Доктрине информационной безопасности Российской Федерации термин "информационная безопасность" используется в широком смысле. Имеется в виду состояние защищенности национальных интересов в информационной сфере, определяемых совокупностью сбалансированных интересов личности, общества и государства. В Законе РФ "Об участии в международном информационном обмене" информационная безопасность определяется аналогичным образом как состояние защищенности информационной среды общества, обеспечивающее ее формирование, использование и развитие в интересах граждан, организаций, государства. Для разработчика программного обеспечения наиболее важны вопросы хранения, обработки и передачи информации вне зависимости от того, на каком языке (русском или каком-либо ином) она закодирована, кто или что является ее источником и какое психологическое воздействие она оказывает на людей. Поэтому термин "информационная безопасность" будет использоваться в узком смысле, так, как это принято, например, в англоязычной литературе. Под информационной безопасностью мы будем понимать защищенность информации и поддерживающей инфраструктуры от случайных или преднамеренных воздействий естественного или искусственного характера, которые могут нанести неприемлемый ущерб субъектам информационных отношений, в том числе владельцам и пользователям информации и поддерживающей инфраструктуры. (Чуть дальше поясним, что следует понимать под поддерживающей инфраструктурой.) 87
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Защита информации - это комплекс мероприятий, направленных на обеспечение информационной безопасности. Таким образом, правильный с методологической точки зрения подход к проблемам информационной безопасности начинается с выявления субъектов информационных отношений и интересов этих субъектов, связанных с использованием информационных систем (ИС). Угрозы информационной безопасности - это оборотная сторона использования информационных технологий. Согласно определению, информационная безопасность зависит не только от компьютеров, но и от поддерживающей инфраструктуры, к которой можно отнести системы электро-, водо- и теплоснабжения, кондиционеры, средства коммуникаций и, конечно, обслуживающий персонал. Эта инфраструктура имеет самостоятельную ценность, но нас будет интересовать лишь то, как она влияет на выполнение информационной системой предписанных ей функций. Обратим внимание, что в определении ИБ перед существительным "ущерб" стоит прилагательное "неприемлемый". Очевидно, застраховаться от всех видов ущерба невозможно, тем более невозможно сделать это экономически целесообразным способом, когда стоимость защитных средств и мероприятий не превышает размер ожидаемого ущерба. Значит, с чем-то приходится мириться, и защищаться следует только от того, с чем смириться никак нельзя. Иногда таким недопустимым ущербом является нанесение вреда здоровью людей или состоянию окружающей среды, но чаще порог неприемлемости имеет материальное (денежное) выражение, а целью защиты информации становится уменьшение размеров ущерба до допустимых значений. Основные безопасности составляющие информационной Спектр интересов субъектов, связанных с использованием информационных систем, можно разделить на следующие категории: обеспечение доступности, целостности и конфиденциальности информационных ресурсов и поддерживающей инфраструктуры. 88
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Доступность - это возможность за приемлемое время получить требуемую информационную услугу. Под целостностью подразумевается актуальность и непротиворечивость информации, ее защищенность от разрушения и несанкционированного изменения. Наконец, конфиденциальность - это защита от несанкционированного доступа к информации. Целостность можно подразделить на статическую (понимаемую как неизменность информационных объектов) и динамическую (относящуюся к корректному выполнению сложных действий (транзакций)). Средства контроля динамической целостности применяются, в частности, при анализе потока финансовых сообщений с целью выявления кражи, переупорядочения или дублирования отдельных сообщений. Целостность оказывается важнейшим аспектом ИБ в тех случаях, когда информация служит "руководством к действию". Рецептура лекарств, предписанные медицинские процедуры, набор и характеристики комплектующих изделий, ход технологического процесса - все это примеры информации, нарушение целостности которой может нанести вред здоровью людей. Значительный ущерб может нанести искажение официальной информации, будь то текст закона или страница Webсервера какой-либо правительственной организации. Классификация угроз Угроза - это потенциальная возможность определенным образом нарушить информационную безопасность. Попытка реализации угрозы называется атакой, а тот, кто предпринимает такую попытку, - злоумышленником. Потенциальные злоумышленники называются источниками угрозы. Чаще всего угроза является следствием наличия уязвимых мест в защите информационных систем (таких, например, как возможность доступа посторонних лиц к критически важному оборудованию или ошибки в программном обеспечении). 89
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Промежуток времени от момента, когда появляется возможность использовать слабое место, и до момента, когда пробел ликвидируется, называется окном опасности, ассоциированным с данным уязвимым местом. Пока существует окно опасности, возможны успешные атаки на ИС. Если речь идет об ошибках в ПО, то окно опасности "открывается" с появлением средств использования ошибки и ликвидируется при наложении заплат, ее исправляющих. Для большинства уязвимых мест окно опасности существует сравнительно долго (несколько дней, иногда - недель), поскольку за это время должны произойти следующие события: должно стать известно о средствах использования пробела в защите; должны быть выпущены соответствующие заплаты; заплаты должны быть установлены в защищаемой ИС. Мы уже указывали, что новые уязвимые места и средства их использования появляются постоянно; это значит, во-первых, что почти всегда существуют окна опасности, и, во-вторых, что отслеживание таких окон должно производиться постоянно, а выпуск и наложение заплат - как можно более оперативно. Отметим, что некоторые угрозы нельзя считать следствием каких-то ошибок или просчетов; они существуют в силу самой природы современных ИС. Например, угроза отключения электричества или выхода его параметров за допустимые границы существует в силу зависимости аппаратного обеспечения ИС от качественного электропитания. Рассмотрим наиболее распространенные угрозы, которым подвержены современные информационные системы. Иметь представление о возможных угрозах, а также об уязвимых местах, которые эти угрозы обычно эксплуатируют, необходимо для того, чтобы выбирать наиболее экономичные средства обеспечения безопасности. Слишком много мифов существует в сфере информационных технологий (вспомним все ту же "Проблему 2000"), поэтому незнание в данном случае ведет к 90
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET перерасходу средств и, что еще хуже, к концентрации ресурсов там, где они не особенно нужны, за счет ослабления действительно уязвимых направлений. Подчеркнем, что само понятие "угроза" в разных ситуациях зачастую трактуется по-разному. Например, для подчеркнуто открытой организации угроз конфиденциальности может просто не существовать - вся информация считается общедоступной; однако в большинстве случаев нелегальный доступ представляется серьезной опасностью. Иными словами, угрозы, как и все в ИБ, зависят от интересов субъектов информационных отношений (и от того, какой ущерб является для них неприемлемым). Угрозы можно классифицировать по нескольким критериям: по аспекту информационной безопасности (доступность, целостность, конфиденциальность), против которого угрозы направлены в первую очередь; по компонентам информационных систем, на которые угрозы нацелены (данные, программы, аппаратура, поддерживающая инфраструктура); по способу осуществления (случайные/преднамеренные действия природного/техногенного характера); по расположению источника угроз (внутри/вне рассматриваемой ИС). В качестве основного критерия мы будем использовать первый (по аспекту ИБ), привлекая при необходимости остальные. Наиболее распространенные угрозы доступности Самыми частыми и самыми опасными (с точки зрения размера ущерба) являются непреднамеренные ошибки штатных пользователей, операторов, системных администраторов и других лиц, обслуживающих информационные системы. Иногда такие ошибки и являются собственно угрозами (неправильно введенные данные или ошибка в программе, вызвавшая крах системы), 91
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET иногда они создают уязвимые места, которыми могут воспользоваться злоумышленники (таковы обычно ошибки администрирования). По некоторым данным, до 65% потерь - следствие непреднамеренных ошибок. Основной способ борьбы с непреднамеренными автоматизация и административный контроль. ошибками - Другие угрозы доступности классифицируем по компонентам ИС, на которые нацелены угрозы: отказ пользователей; внутренний отказ информационной системы; отказ поддерживающей инфраструктуры. Обычно применительно к пользователям рассматриваются следующие угрозы: нежелание работать с информационной системой (чаще всего проявляется при необходимости осваивать новые возможности и при расхождении между запросами пользователей и фактическими возможностями и техническими характеристиками); невозможность работать с системой в силу отсутствия соответствующей подготовки (недостаток общей компьютерной грамотности, неумение интерпретировать диагностические сообщения, неумение работать с документацией и т. п.); невозможность работать с системой в силу отсутствия технической поддержки (неполнота документации, недостаток справочной информации и т. п.). Основными источниками внутренних отказов являются: отступление (случайное или умышленное) от установленных правил эксплуатации; выход системы из штатного режима эксплуатации в силу случайных или преднамеренных действий пользователей или обслуживающего персонала (превышение расчетного числа запросов, чрезмерный объем обрабатываемой информации и т. 92
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET п.); ошибки при (пере)конфигурировании системы; отказы программного и аппаратного обеспечения; разрушение данных; разрушение или повреждение аппаратуры. По отношению к поддерживающей рассматриваются следующие угрозы: инфраструктуре обычно нарушение работы (случайное или умышленное) систем связи, электропитания, водои/или теплоснабжения, кондиционирования; разрушение или повреждение помещений; невозможность или нежелание обслуживающего персонала и/или пользователей выполнять свои обязанности (гражданские беспорядки, аварии на транспорте, террористический акт или его угроза, забастовка и т. п.). Основные угрозы целостности На втором месте по размерам ущерба (после непреднамеренных ошибок и упущений) стоят кражи и подлоги. По данным газеты USA Today, еще в 1992 году в результате подобных противоправных действий с использованием персональных компьютеров американским организациям был нанесен общий ущерб в размере 882 миллионов долларов. Можно предположить, что реальный ущерб был намного больше, поскольку многие организации по понятным причинам скрывают такие инциденты; не вызывает сомнений, что в наши дни ущерб от такого рода действий вырос многократно. В большинстве случаев виновниками оказывались штатные сотрудники организаций, хорошо знакомые с режимом работы и мерами защиты. Это еще раз подтверждает опасность внутренних угроз. Ранее мы проводили различие между статической и динамической целостностью. С целью нарушения статической целостности злоумышленник (как правило, штатный сотрудник) может: 93
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET ввести неверные данные; изменить данные. Иногда изменяются содержательные данные, иногда - служебная информация. Заголовки электронного письма могут быть подделаны; письмо в целом может быть фальсифицировано лицом, знающим пароль отправителя (мы приводили соответствующие примеры). Отметим, что последнее возможно даже тогда, когда целостность контролируется криптографическими средствами. Здесь имеет место взаимодействие разных аспектов информационной безопасности: если нарушена конфиденциальность, может пострадать целостность. Угрозой целостности является не только фальсификация или изменение данных, но и отказ от совершенных действий. Если нет средств обеспечить "неотказуемость", компьютерные данные не могут рассматриваться в качестве доказательства. Потенциально уязвимы с точки зрения нарушения целостности не только данные, но и программы. Угрозами динамической целостности являются нарушение атомарности транзакций, переупорядочение, кража, дублирование данных или внесение дополнительных сообщений (сетевых пакетов и т.п.). Соответствующие действия в сетевой среде называются активным прослушиванием. Основные угрозы конфиденциальности Конфиденциальную информацию можно разделить на предметную и служебную. Служебная информация (например, пароли пользователей) не относится к определенной предметной области, в информационной системе она играет техническую роль, но ее раскрытие особенно опасно, поскольку оно чревато получением несанкционированного доступа ко всей информации, в том числе предметной. Даже если информация хранится в компьютере или предназначена для компьютерного использования, угрозы ее конфиденциальности могут носить некомпьютерный и вообще нетехнический характер. Многим людям приходится выступать в качестве пользователей не 94
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET одной, а целого ряда систем (информационных сервисов). Если для доступа к таким системам используются многоразовые пароли или иная конфиденциальная информация, то наверняка эти данные будут храниться не только в голове, но и в записной книжке или на листках бумаги, которые пользователь часто оставляет на рабочем столе или теряет. И дело здесь не в неорганизованности людей, а в изначальной непригодности парольной схемы. Невозможно помнить много разных паролей; рекомендации по их регулярной (по возможности - частой) смене только усугубляют положение, заставляя применять несложные схемы чередования или вообще стараться свести дело к двум-трем легко запоминаемым (и столь же легко угадываемым) паролям. Описанный класс уязвимых мест можно назвать размещением конфиденциальных данных в среде, где им не обеспечена (и часто не может быть обеспечена) необходимая защита. Помимо паролей, хранящихся в записных книжках пользователей, в этот класс попадает передача конфиденциальных данных в открытом виде (в разговоре, в письме, по сети), которая делает возможным их перехват. Для атаки могут использоваться разные технические средства (подслушивание или прослушивание разговоров, пассивное прослушивание сети и т. п.), но идея одна - осуществить доступ к данным в тот момент, когда они наименее защищены. Угрозу перехвата данных следует принимать во внимание не только при начальном конфигурировании ИС, но и, что очень важно, при всех изменениях. Весьма опасной угрозой являются выставки, на которые многие организации отправляют оборудование из производственной сети со всеми хранящимися на них данными. Остаются прежними пароли, при удаленном доступе они продолжают передаваться в открытом виде. Еще один пример изменения: хранение данных на резервных носителях. Для защиты данных на основных носителях применяются развитые системы управления доступом; копии же нередко просто лежат в шкафах, и получить доступ к ним могут многие. Перехват данных - серьезная угроза, и если конфиденциальность действительно является критичной, а данные передаются по многим каналам, их защита может оказаться весьма сложной и дорогостоящей. 95
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Технические средства перехвата хорошо проработаны, доступны, просты в эксплуатации, а установить их, например, на кабельную сеть, может кто угодно, так что эта угроза существует не только для внешних, но и для внутренних коммуникаций. Кражи оборудования являются угрозой не только для резервных носителей, но и для компьютеров, особенно портативных. Часто ноутбуки оставляют без присмотра на работе или в автомобиле, иногда просто теряют. Опасной нетехнической угрозой конфиденциальности являются методы морально-психологического воздействия, такие как маскарад выполнение действий под видом лица, обладающего полномочиями для доступа к данным. К неприятным угрозам, от которых трудно защищаться, можно отнести злоупотребление полномочиями. На многих типах систем привилегированный пользователь (например системный администратор) способен прочитать любой (незашифрованный) файл, получить доступ к почте любого пользователя и т. д. Другой пример нанесение ущерба при сервисном обслуживании. Обычно сервисный инженер получает неограниченный доступ к оборудованию и имеет возможность действовать в обход программных защитных механизмов. Методы защиты Существующие методы и средства защиты информации компьютерных систем (КС) можно подразделить на четыре основные группы: методы и средства организационно-правовой защиты информации; методы и средства инженерно-технической защиты информации; криптографические методы и средства защиты информации; программно-аппаратные методы и средства защиты информации. Методы и средства организационно-правовой защиты информации 96
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET К методам и средствам организационной защиты информации относятся организационно-технические и организационно-правовые мероприятия, проводимые в процессе создания и эксплуатации КС для обеспечения защиты информации. Эти мероприятия должны проводиться при строительстве или ремонте помещений, в которых будет размещаться КС; проектировании системы, монтаже и наладке ее технических и программных средств; испытаниях и проверке работоспособности КС. На этом уровне защиты информации рассматриваются международные договоры, подзаконные акты государства, государственные стандарты и локальные нормативные акты конкретной организации. Методы и средства инженерно-технической защиты Под инженерно-техническими средствами защиты информации понимают физические объекты, механические, электрические и электронные устройства, элементы конструкции зданий, средства пожаротушения и другие средства, обеспечивающие: защиту территории и помещений КС от проникновения нарушителей; защиту аппаратных средств КС и носителей информации от хищения; предотвращение возможности удаленного (из-за пределов охраняемой территории) видеонаблюдения (подслушивания) за работой персонала и функционированием технических средств КС; предотвращение возможности перехвата ПЭМИН (побочных электромагнитных излучений и наводок), вызванных работающими техническими средствами КС и линиями передачи данных; организацию доступа в помещения КС сотрудников; контроль над режимом работы персонала КС; контроль над перемещением сотрудников КС в различных производственных зонах; противопожарную защиту помещений КС; минимизацию материального ущерба от потерь информации, 97
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET возникших в результате стихийных бедствий и техногенных аварий. Важнейшей составной частью инженерно-технических средств защиты информации являются технические средства охраны, которые образуют первый рубеж защиты КС и являются необходимым, но недостаточным условием сохранения конфиденциальности и целостности информации в КС. Криптографические методы защиты и шифрование Шифрование является основным средством обеспечения конфиденциальности. Так, в случае обеспечения конфиденциальности данных на локальном компьютере применяют шифрование этих данных, а в случае сетевого взаимодействия - шифрованные каналы передачи данных. Науку о защите информации с помощью шифрования называют криптографией (криптография в переводе означает загадочное письмо или тайнопись). Криптография применяется: для защиты конфиденциальности информации, передаваемой по открытым каналам связи; для аутентификации (подтверждении подлинности) передаваемой информации; для защиты конфиденциальной информации при ее хранении на открытых носителях; для обеспечения целостности информации (защите информации от внесения несанкционированных изменений) при ее передаче по открытым каналам связи или хранении на открытых носителях; для обеспечения неоспоримости передаваемой по сети информации (предотвращения возможного отрицания факта отправки сообщения); для защиты программного обеспечения и других информационных ресурсов от несанкционированного 98
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET использования и копирования. Программные и программно-аппаратные методы и средства обеспечения информационной безопасности К аппаратным средствам защиты информации относятся электронные и электронно-механические устройства, включаемые в состав технических средств КС и выполняющие (самостоятельно или в едином комплексе с программными средствами) некоторые функции обеспечения информационной безопасности. Критерием отнесения устройства к аппаратным, а не к инженерно-техническим средствам защиты является обязательное включение в состав технических средств КС. К основным аппаратным средствам защиты информации относятся: устройства для ввода идентифицирующей пользователя информации (магнитных и пластиковых карт, отпечатков пальцев и т. п.); устройства для шифрования информации; устройства для воспрепятствования несанкционированному включению рабочих станций и серверов (электронные замки и блокираторы). Примеры вспомогательных аппаратных средств защиты информации: устройства уничтожения информации на магнитных носителях; устройства сигнализации о попытках несанкционированных действий пользователей КС и др. Под программными средствами защиты информации понимают специальные программы, включаемые в состав программного обеспечения КС исключительно для выполнения защитных функций. К основным программным средствам защиты информации относятся: программы идентификации и аутентификации пользователей КС; программы разграничения доступа пользователей к ресурсам КС; 99
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET программы шифрования информации; программы защиты информационных ресурсов (системного и прикладного программного обеспечения, баз данных, компьютерных средств обучения и т. п.) от несанкционированного изменения, использования и копирования. Заметим, что под идентификацией, применительно к обеспечению информационной безопасности КС, понимают однозначное распознавание уникального имени субъекта КС. Аутентификация означает подтверждение того, что предъявленное имя соответствует данному субъекту (подтверждение подлинности субъекта). Примеры вспомогательных программных средств защиты информации: программы уничтожения остаточной информации (в блоках оперативной памяти, временных файлах и т. п.); программы аудита (ведения регистрационных журналов) событий, связанных с безопасностью КС, для обеспечения возможности восстановления и доказательства факта происшествия этих событий; программы имитации работы с нарушителем (отвлечения его на получение якобы конфиденциальной информации); программы тестового контроля защищенности КС и др. Итоги Поскольку потенциальные угрозы безопасности информации весьма многообразны, цели защиты информации могут быть достигнуты только путем создания комплексной системы защиты информации, под которой понимается совокупность методов и средств, объединенных единым целевым назначением и обеспечивающих необходимую эффективность защиты информации в КС. 100
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Доверительные вычисления (Trustworthy computing) История вопроса. Безопасность. Конфиденциальность. Надежность. Практика деловых отношений. Предполагаемая реализация. Возможные результаты Доверительные вычисления (Trusted Computing) - совокупность стандартов, разрабатываемых на их основе технологий, аппаратного и программного обеспечения для создания высокой степени безопасности. Безопасность гарантируется тем, что система допускает использование только сертифицированного аппаратного и программного обеспечения. Под сертификацией скрывается иерархия цифровых подписей; на их основании принимается решение, что и каким компонентам будет позволено. Криптографические процессоры проверяют подписи и контролируют сам центральный процессор. Trusted computing и trustworthy computing Различают понятия "trusted" и "trustworthy". NSA (Национальное агенство безопасности США) определяет trusted component как компонент, сбой в котором не влияет на безопасность всей системы, а trustworthy component - как компонент, в котором не произойдет сбой. С другой стороны, Министерство обороны США определяет trusted как нечто, чему мы вынуждены доверять за неимением выбора. Таким образом, термин trusted (доверенный) имеет довольно много значений. Приведем пример: наши соседи не могут разглашать информацию о состоянии нашего здоровья, просто потому, что ее у них нет. Таким образом, они не могут нарушить безопасность нашей медицинской информации. А вот наш лечащий врач имеет к ней доступ и может поделиться информацией. Мы выбрали себе того лечащего врача, которому доверяем, то есть пошли на компромисс. Если же лечащий врач - один в радиусе 100 км, то мы просто вынуждены ему доверять. Во всех трех случаях компонент является доверенным. В инициативе доверительных вычислений trusted computing означает, что данному вычислительному процессу может доверять производитель вычислительного устройства и разработчик программного обеспечения. Далее речь пойдет именно о trusted computing (доверительных 101
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET вычислениях). Создатели идеи доверительных вычислений Доверительные вычисления разрабатываются Trusted Computer Group (TCG, ранее TCPA). В совет директоров TCG входят ведущие производители программного и аппаратного обеспечения. Всего в TCG около сотни организаций-участников и несколько десятков спонсоров. TCG разрабатывает спецификации, определяющие доверительные вычисления в виде серии отраслевых стандартов. Члены TCG внедряют принципы доверительных вычислений в выпускаемое ими программное обеспечение и оборудование. История доверительных вычислений Теоретические основания TCPA заложены в труде В. Арбау, Д. Фар-бера и Дж. Смита "Защищенная и надежная архитектура начальной загрузки". Ключевая мысль о "базовом мониторе" для контроля всего доступа, впрочем, намного старше - она была высказана Джеймсом Андерсеном в 1972 г. в работе для Военно-воздушных сил Соединенных Штатов и с тех пор является основой при разработке военных систем безопасности. Авторы обращают внимание на то обстоятельство, что если безопасности программного обеспечения уделяется много внимания, то доверие к оборудованию подразумевается само собой. В их системе AEGIS базовая система ввода/вывода делится на две логические подсистемы: одна - это привычная BIOS, а другая отвечает за правильность контрольных сумм и цифровых подписей. Таким образом, после включения компьютера сначала на все возможные ошибки проверяется энергозависимая память, затем - платы расширения, загрузочный сектор, операционная система и т. д. AEGIS впервые предусматривает полную цепочку проверки - от включения компьютера до запуска приложения, не пропуская ни одного компонента оборудования. Такие "полные цепочки" на самом деле легко разрываются. Поэтому на случай ошибки авторы предусмотрели аварийную загрузку с одного или нескольких серверов. При возникновении проблем с оборудованием это не помогает, однако с подобной трудностью сталкивается каждый пользователь ПК в любом 102
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET случае. Кроме того, AEGIS может при поврежденном BIOS провести автоматическое восстановление с надежного сервера. Модель системы была основана на FreeBSD, а также на IPv6 для шифруемой загрузки. Относительно сертификации необходимых для цифровых подписей открытых ключей не дается никаких пояснений. Как можно прочитать во втором разделе, авторы допускают даже сеть доверия Web of Trust, известную по PGP/GnuPG. Основы доверительных вычислений Доверительные вычисления определяют пять ключевых элементов, которыми должна обладать полностью доверенная система. 1. 2. 3. 4. 5. Endorsement Key. Secure Input and Output. Memory curtaining / Protected execution. Sealed storage. Remote attestation. Подтверждающий ключ (Endorsement Key) Endorsement key - это пара 2048-битных RSA-ключей. Ключи генерируются производителем микросхемы на основе протокола, разработанного TCG. Закрытый ключ хранится в микросхеме. Микросхема проектируется таким образом, чтобы ключ нельзя было извлечь даже с помощью аппаратного анализа. Открытый ключ используется для подтверждения подлинности и шифрования данных, передаваемых микросхеме. Микросхемы называются доверенными модулями (Trusted Platform Module - TPM) или микросхемами Фрица (по имени американского сенатора, который активно работает над тем, чтобы внедрить такие микросхемы во все потребительское оборудование и установить штрафы за продажу несовместимых с ними устройств). Безопасный ввод/вывод 103
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Чтобы подтвердить, что используемое для ввода/вывода программное обеспечение действительно есть программное обеспечение, которое должно выполнять ввод/вывод, используются контрольные суммы. Таким образом можно выявить часть вредоносного программного обеспечения. Memory curtaining Для обеспечения повышенной надежности областей памяти, содержащих особо важные данные (например, криптографические ключи), эти области памяти изолируются. Даже операционная система может получить доступ только к некоторым областям изолированной памяти. Таким образом можно запретить части вредоносного программного обеспечения получить доступ к данным системными средствами. Sealed storage Можно зашифровать данные при помощи ключей устройств или программ, обрабатывающих эти данные. То есть получить доступ к этим данным сможет только эта копия программы в паре с именно этим экземпляром устройства (очевидно, можно потребовать наличия любого числа конкретных программ и устройств, а также типов программ или устройств). Таким образом можно, например, предотвратить прослушивание музыки на нелицензионном плеере. Remote attestation Аппаратное обеспечение может сообщать подтвержденную сертификатом информацию о том, какое программное обеспечение сейчас выполняется. Информация часто шифруется открытым ключом наблюдаемой программы или программы, запрашивающей информацию, то есть никто больше, включая пользователя компьютера, не сможет получить доступ к этой информации. Удаленное наблюдение позволит авторизованным организациям обнаруживать изменения, 104
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET происходящие на компьютере пользователя. Таким образом, например, компании-производители программного обеспечения смогут предотвратить изменения своего программного обеспечения с целью обойти его ограничения. Как происходит процесс загрузки Компьютер запускается с активированной микросхемой Фрица. Согласно спецификации TCG, сначала через Internet путем обращения к заслуживающему доверия координатору времени настраивается локальный таймер. После этого система проверяет BIOS и платы PCI, а в случае некоторых реализаций - даже клавиатуру. Сертифицированный интерфейс DMA призван воспрепятствовать несанкционированному доступу к памяти. Оборудование должно входить в список сертифицированного оборудования (Hardware Certification List, HCL). Еще один список - перечень аннулированных серийных номеров (Serial Number Revocation List, SRL): в первую очередь, он будет касаться приложений, но предположительно также и оборудования. Все, что перечислено в списке, блокируется. Согласно спецификации, оба списка при каждом запуске системы корректируются через Internet. Приложения, указанные в SRL, должны, по идее, блокироваться и в "добровольном" режиме. Также могут быть блокированы или удалены документы, входящие в перечень аннулированных документов (Document Revoсation List, DRL). Возможные применения доверительных вычислений Digital Rights Management (DRM) Считается, что идея доверительных вычислений возникла именно для защиты авторского права. Каким образом здесь используются доверительные вычисления? Например, загрузка файла с музыкой. С помощью удаленного наблюдения можно разрешить проигрывать данный файл только на той программе-плеере, которая не нарушает правила компании звукозаписи (считаем, что у компании звукозаписи есть список таких программ). 105
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Закрытое хранилище не позволит пользователю открыть этот файл с помощью другого плеера или другого компьютера. Музыка будет проигрываться в скрываемой памяти, что не позволит пользователю сделать нелегальную копию файла во время проигрывания. Безопасный ввод/вывод не позволит перехватить данные, передаваемые звуковой системе, и сделать таким способом нелегальную копию. Выявление мошенничества (cheating) в online-играх Часть игроков многопользовательских online-игр модифицируют свою копию игры с целью получения несправедливого преимущества в игре. С помощью удаленного наблюдения, безопасного ввода/вывода и сокрытия памяти серверы игры могут убедиться, что их игроки используют неизмененные копии игры. Защиты от кражи идентификатора Рассмотрим активно развивающееся в последние годы online банковское дело. При соединении пользователя с сервером банка можно использовать удаленное наблюдение. То есть страница сервера с полями для ввода данных будет отображена только в том случае, если сервер подтвердит, что он действительно является сервером этого online-банка. Далее введенные пользователем и зашифрованные номер счета и PIN передаются по сети. Защита от вирусов и шпионов (spyware) Рассмотрим такой пример: на некотором сайте можно скачать модифицированный клиент ICQ, содержащий код, который загружает на компьютер вирус или перехватывает и журналирует все события клавиатуры. Операционная система обнаружит отсутствие правильной цифровой подписи у измененного клиента ICQ и проинформирует пользователя. Тем самым вирусы или другое вредоносное ПО не смогут запуститься, 106
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET так как они не будут входить в число доверенных приложений, имеющих цифровую подпись или помеченных иным образом. Доверительные вычисления могут быть использованы разработчиками антивирусов для предотвращения повреждения вирусами их антивирусов. Защита биометрических аутентификационных данных Устройства биометрической аутентификации могут использовать доверительные вычисления для предотвращения установки шпионских программ. Для биометрических устройств особенно остро стоит вопрос кражи аутентификационных данных, так как в отличие от пароля они не могут быть изменены. Верификация computing удаленных вычислений для grid С помощью доверительных вычислений можно гарантировать, что результаты вычислений участников grid computing не поддельны и действительно соответствуют поставленной для данного компьютера задаче. Это позволит проводить вычисления с использованием большого числа компьютеров (например, для задач симуляции в метеорологии), не прибегая к дополнительным вычислениям для проверки подлинности данных. Спорные вопросы и доверительных вычислений Ограничение устройства возможные пользователя проблемы вычислительного Очевидно, что с внедрением технологии доверительных вычислений действия пользователей становятся все более ограниченными. 107
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Пользователи больше не могут заставить свой ПК выполнять любые функции. Некоторые авторы заключают, что такой ПК более не будет машиной Тьюринга. Любые сущности, созданные при участии доверительных вычислений (файлы, сборки, программные системы) остаются под контролем своих создателей. Например, пользователь приобретает лицензионный файл с песней. Фирма звукозаписи, с которой заключил договор исполнитель, может в любой момент изменить свои планы и распорядиться приобретенным файлом так, как захочет, - разрешить прослушивать бесплатно лишь дважды в месяц или вообще стереть его с компьютера пользователя без предупреждения. Технически это вполне возможно. В разделе спецификаций TCG, посвященном миграции, требуется, чтобы было невозможно переместить определенные типы файлов на компьютеры с другой моделью микросхемы, реализующей доверительные вычисления. Это может вызвать проблемы при переносе данных со старого ПК на новый, содержащий более новую модель микросхемы. Появляется возможность ограничивать пользователя не только на его локальном устройстве, но и в Internet. Доверенный браузер может запретить пользователю просматривать определенные страницы. Список таких страниц будет определять создатель браузера, а не пользователь. Точно так же создатели web-страниц могут разрабатывать их по той же схеме, чтобы они могли быть просмотрены только определенным браузером. Многих исследователей беспокоит будущее виртуальных машин. Смогут ли пользователи запускать на своих ПК эмуляторы других ПК? И будет ли в этом смысл? Ведь если часть ПО будет жестко связано с конкретными устройствами или типами устройств, его не удастся запустить в эмуляторе, моделирующем другое оборудование. Контроль пользователя вычислительного устройства Ряд авторов считает, что вся идея удаленного наблюдения представляет собой новый тип spyware и полностью раскрывает анонимность 108
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET пользователя в Internet. Действительно, конкретные копии ПО и оборудования связываются между собой, с разработанными на их основе документами и с пользователем - владельцем документов, ПО и оборудования. Удаленное наблюдение и контроль позволяют удалять или иным образом манипулировать любыми данными пользователя, находящимися под управлением доверенных программ и устройств. Таким образом, открываются новые возможности для нечестной конкуренции или политического противостояния. Кроме того, инициатива доверительных вычислений предполагает перечень аннулированных документов (Document Revoсation List, DRL), где указываются блокированные файлы. Предположительный случай применения мог бы выглядеть так: тот, кто живет в исламском государстве и хочет увидеть документ Word с изображением женщины без покрывала, не сможет открыть такой файл. Очевидно, этот список может применяться во всех других странах провайдерами и контролирующими органами самыми разными способами. Доверенные приложения могут изменять свою функциональность внезапно, или даже просто отказываться работать. Такие изменения или возможность изменений сложнее выявить, так как приложение размещено в закрытом хранилище и загружается в скрываемую память. Изменения в сфере конкуренции Доверительные вычисления позволяют производителям программного обеспечения и оборудования блокировать или просто удалять программы конкурентов, делать невозможным использование файлов своей программы в программе конкурента. Например, некоторый текстовый редактор может зашифровать созданный в нем документ своим ключом, так что текстовый редактор конкурента не сможет открыть файл. Компании-производители также получают новый способ усложнения миграции со своих продуктов на продукты (или оборудование) конкурентов. Стоимость такой миграции существенно возрастает. 109
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Предположим, компания-пользователь решит использовать текстовый редактор компании А вместо редактора компании В. Для этого ей надо будет, как и прежде, решать вопросы совместимости форматов, установки, обучения персонала. Кроме этого, компания должна будет конвертировать все свои документы. За 5 лет работы компания могла получить от своих клиентов тысячи документов, созданных в доверительном режиме. Компании придется получить согласие всех своих клиентов на конвертацию документов, так как именно клиенты являются их владельцами. Создание нового программного обеспечения или оборудования, работающего в режиме доверительных вычислений, потребует больше средств, так как новое приложение будет необходимо сертифицировать и зарегистрировать для запуска в доверительном режиме. Следовательно, крупные компании окажутся в еще более выигрышном положении по сравнению со start-up и разработчиками бесплатного программного обеспечения. Вопросы работоспособности Списки сертифицированного оборудования, аннулированных серийных номеров и запрещенных документов проверяются при помощи сети при загрузке компьютера. Как повлияет сбой сети на дальнейшую работу ПК? Как вообще повлияет сбой любой доверенной программы или устройства на работу пользователя? Ведь многие файлы окажутся заблокированными, их даже нельзя будет перенести на другой компьютер. Разработчики доверенных операционных систем вкладывают все функции в ядро операционной системы и априори принимают его заслуживающим доверия. Однако даже ядро в доверительном режиме можно заставить выполнять непредусмотренные действия посредством переполнения буфера. Доверительные вычисления используют ключ RSA длиной 2048 бит. И это, по сегодняшним меркам, очень надежное шифрование. Однако если 110
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET появятся мощные квантовые компьютеры, с помощью которых злоумышленникам удастся взломать мастер-ключ, система безопасности бесчисленных ПК окончательно и необратимо разрушится. Точно так же нельзя исключать, что будет найден новый гениальный алгоритм факторизации и вследствие этого RSA потеряет свою силу. Всегда рискованно доверять только одному-единственному компоненту. Спецификации TCG эволюционируют, возникают несовместимости версий. Это может привести к тому, что оборудование или ПО, которое является доверенным с точки зрения старой версии, окажется недопустимым в новой. Спецификации TCG призваны создать новые отраслевые стандарты доверительных вычислений. Реализации этих стандартов участниками TCG уже сейчас различаются и могут привести к проблемам несовместимости. Для пользователей, которые не хотят работать в доверительном режиме, пока что предусмотрена возможность запуска компьютера с отключенной микросхемой, реализующей доверительные вычисления. Однако в добровольном режиме (voluntary mode) не будет доступа к ключам или тем приложениям, которые работают только в доверительном режиме. Поставщик доверительного приложения может просто запретить это. При запуске "ненадежного кандидата" система останавливает все заслуживающие доверия приложения и обнуляет их память. Это представляется вполне целесообразным, поскольку доверенные вычисления не гарантируют защиту памяти оборудования (хотя такая возможность полезна, в том числе и для пользователя). Внедрения доверительных вычислений TCG планирует внедрение доверительных практически во все оборудование: клиентские ПК; периферийные устройства; серверы; устройства хранения данных; мобильные телефоны; сетевые устройства. 111 вычислений
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Некоторые компьютеры Apple с процессорами Intel включают микросхему доверительных вычислений. Начиная с 2004 года большинство производителей программного и аппаратного обеспечения разрабатывают системы, включающие микросхему доверенных вычислений, которая поддерживается BIOS. Ядро Linux начиная с версии 2.6.13 поддерживает концепцию доверительных вычислений. Существует несколько проектов, касающихся реализации доверительных вычислений на Linux. В январе 2005 года Gentoo Linux's объявили о намерении поддерживать доверительные вычисления вообще и микросхему доверенных вычислений, в частности. Элементы доверительных вычислений в той или иной форме присутствуют в версиях Microsoft Windows начиная с Windows XP. Итоги Концепция доверительных вычислений представляет собой совокупность стандартов, разрабатываемых на их основе технологий, аппаратного и программного обеспечения для создания высокой степени безопасности. Доверительные вычисления поддерживаются большинством ведущих производителей программного и аппаратного обеспечения. При этом концепция находится в стадии становления, оставляя нерешенными многие вопросы внедрения и применения. 112
Павлова Е.А. Разработка шаблонов Технологии разработки современных информационных систем на платформе Microsoft.NET информационных систем на основе Шаблоны на этапе анализа, построения архитектуры решений, кода, шаблоны тестов. Прото-шаблоны, анти-шаблоны. Генерирующие шаблоны, языки, каталоги и системы шаблонов Что такое шаблоны: история, назначения, определения Понятие шаблона пришло из работ архитектора Кристофера Александра (Christopher Alexander), написанных в конце 1970-х годов. В своих книгах он использовал понятие шаблона для описания вопросов планирования городов и проектирования архитектуры зданий. В конце 1980-х идею шаблонов начали применять при разработке программного обеспечения. С тех пор были выделены различные виды шаблонов, разработаны языки шаблонов и созданы многочисленные библиотеки, содержащие шаблоны для самых разных областей информационных технологий. Шаблоны упрощают повторное использование удачных проектных, архитектурных, аналитических и других решений. Представление проверенных временем методик в виде шаблонов облегчает доступ к ним со стороны разработчиков новых систем. С помощью шаблонов можно улучшить качество документации, кода и других артефактов, создаваемых при разработке систем. Шаблоны могут быть полезны для улучшения процесса разработки. Шаблоны описывают причины, почему система должна быть построена так, а не иначе. Существует несколько десятков определений шаблонов. Большинство из них отмечает, что шаблон является описанием удачного варианта решения определенной повторяющейся задачи в конкретном контексте. Приведем несколько определений шаблонов. Шаблон (по Кристоферу Александру) - правило из трех частей, выражающее связи между определенным контекстом, задачей и решением. Как часть мира, шаблон связывает контекст, систему сил, регулярно появляющуюся в этом контексте, и определенную 113
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET пространственную конфигурацию, позволяющую системе сил прийти в равновесие. Как элемент языка шаблон является инструкцией, описывающей повторное использование этой пространственной конфигурации для приведения системы сил в равновесие, когда это позволяет контекст. Шаблон - нечто, происходящее в реальном мире, и одновременно правило, описывающее, как и когда создавать это нечто. Это процесс и вещь, описание живой сущности и процесса, порождающего эту сущность. Классические книги по ИТ-шаблонам описывают шаблон как нечто, состоящее из четырех основных элементов: Имя. Сославшись на имя, можно сразу описать проблему, ее решения и последствия. Присваивание шаблонам имен позволяет проектировать на более высоком уровне абстракции. С помощью словаря шаблонов можно вести обсуждение с коллегами, упоминать шаблоны в документации, представлять тонкости системы. Задача. Описание того, когда следует применять шаблон. Формулируется задача и ее контекст. (Примером конкретной задачи может служить способ представления алгоритмов в виде объектов). Иногда в описание задачи входит перечень условий, при выполнении которых имеет смысл применять шаблон. Решение. Описание элементов решения (элементов проектирования, анализа, тестирования и др. - в зависимости от вида шаблона), отношений между ними, функций каждого элемента. При этом решение - не конкретный дизайн или реализация, так как шаблон применяется в самых разных контекстах. Просто дается абстрактное описание задачи и того, как она может быть решена с помощью некоего весьма общего сочетания элементов (в случае проектирования, например, это могут быть объекты и классы). Результаты. Результаты - это следствия применения шаблона и разного рода компромиссы. Хотя при описании решений о последствиях часто не упоминают, знать о них необходимо, чтобы можно было выбирать между различными вариантами и оценивать преимущества и недостатки конкретного шаблона. Иногда в результатах может быть описан выбор языка и реализации. В случае проектирования к результатам относят 114
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET влияние на степень гибкости, расширяемости и переносимости системы. Перечисление всех последствий помогает понять и оценить их роль. Прото-шаблоны Не всякое решение, алгоритм, лучшие практики или эвристики могут быть названы шаблоном. Один или несколько признаков шаблона могут отсутствовать. Даже если все признаки шаблона есть, но описанная проблема и/или решение не являются повторяющимися, предлагаемую идею нельзя назвать шаблоном. Существует мнение, что такой находящийся в разработке шаблон (прото-шаблон) должен быть применен по крайней мере трижды, просмотрен и одобрен значительным числом пользователей шаблонов. Краткое описание прото-шаблона называется patlet. Анти-шаблоны В то время как обычный шаблон описывает положительный опыт решения задачи, анти-шаблоны описывают отрицательный опыт. Антишаблоны появились в середине 1990-х и не так многочисленны, как обычные шаблоны. Под анти-шаблонами понимают: 1. шаблоны, описывающие плохое решение задачи, которое привело к печальным последствиям; 2. шаблоны, описывающие выход из этого печального состояния и переход к хорошему решению. Классификация шаблонов Шаблоны можно классифицировать по применимости на этапах жизненного цикла программной системы: Шаблоны анализа. Шаблоны проектирования. Шаблоны реализации. 115
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Шаблоны тестирования. Шаблоны анализа Шаблоны анализа - набор концепций для решения типичной задачи бизнес-моделирования. Такие шаблоны могут быть специфичны для конкретной предметной области или могут использоваться для решения задач из разных предметных областей. К шаблонам, специфичным для конкретной предметной области, относятся, например, шаблон "диагностика" или "лечение" из области медицины. Иногда предметные области бывают идентичны с точки зрения анализа и используют одни и те же шаблоны. Так, шаблон "диагностика" может быть применен в области финансового анализа. Шаблоны анализа имеют разную степень детализации. Среди шаблонов анализа иногда выделяют шаблоны бизнес-процессов. Шаблоны бизнес-процессов включают шаблоны последовательностей, параллельного исполнения, синхронизации и множественного выбора, шаблоны отката и другие. Шаблоны анализа иногда относят к шаблонам проектирования на концептуальном уровне. Шаблоны проектирования Шаблоны проектирования описывают периодически возникающую задачу проектирования информационной системы или ее составных частей, контекст задачи, принцип решения и положительный опыт решения, причем таким образом, что это решение может быть повторно использовано. Среди шаблонов проектирования иногда выделяют Архитектурные шаблоны Отражают фундаментальную структуру, схему информационной системы. Шаблоны описывают множество предопределенных 116
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET подсистем, их функции и правила организации взаимодействия между подсистемами. То есть архитектурные шаблоны решают задачи проектирования системы на самом верхнем уровне абстракции. Шаблоны логического проектирования Эти шаблоны касаются деталей проектирования подсистем, компонент информационной системы и отношений между ними. Шаблоны проектирования описывают часто повторяющиеся структуры взаимодействующих компонент, решающих типичную задачу проектирования в конкретном контексте. Именно в этом смысле чаще всего употребляется термин "шаблон проектирования". В случае объектно-ориентированного проектирования шаблоны могут оперировать понятиями классов и объектов. Такие шаблоны наиболее полно исследованы и организованы в обширные библиотеки. Идиомы (Idioms) Идиомой называют шаблон низкого уровня, специфичный для конкретного языка программирования. Идиома описывает вопрос реализации компонент или взаимосвязей между ними с использованием возможностей конкретного языка. Граница между идиомами и шаблонами реализации очень условна. Часто идиомы относят к шаблонам реализации. Шаблоны классифицируются не только по принадлежности к этапам жизненного цикла системы. Часто шаблоны классифицируются по типу решаемой задачи. Например, шаблоны организации распределенных вычислений, шаблоны пользовательского интерфейса, шаблоны данных, организационные шаблоны (описывают структуру проектной команды или организации в целом). Кроме того, выделяют шаблоны, относящиеся к конкретной парадигме программирования (объектноориентированные шаблоны) или концепции (шаблоны для сервисноориентированного подхода). Системы шаблонов 117
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Генерирующие шаблоны (generative patterns) Большинство шаблонов являются генерирующими. То есть они описывают, что необходимо предпринять для решения задачи, и как мы можем сгенерировать решения и сами шаблоны (вспомним, что шаблон - это и сущность и процесс). Более того, в некоторых случаях такие шаблоны утверждают, что их необходимо создать. Генерирующие шаблоны описывают, как создать нечто, и затем могут быть выделены в итоговой системе (например, в ее архитектуре или процессах). Негенерирующие шаблоны могут не содержать указаний о том, как создавать описываемые ими сущности. Генерирующие шаблоны являются основой и прообразом языков шаблонов. Языки шаблонов Набор шаблонов образует своеобразный словарь для обмена идеями, сочетания идей между собой и создания новых идей на основе предшествующих. Язык шаблонов включает в себя такой словарь (алфавит языка), набор правил образования новых шаблонов и правила преобразования шаблонов. Правила преобразования могут включать аксиомы и правила вывода. Таким образом, язык шаблонов представляет собой формальную систему. В частности, это означает, что все шаблоны, полученные в результате выводов в такой системе, действительно будут шаблонами (а не прото-шаблонами или чем-то еще). Иногда в языки шаблонов вводят как самостоятельную сущность ограничения. Каталоги и системы шаблонов Каталоги шаблонов (библиотеки) - наборы взаимосвязанных шаблонов (связи могут быть слабыми и неформальными). Обычно каталог шаблонов поддерживает классификацию шаблонов и перекрестные ссылки между ними. Существует множество каталогов шаблонов в сети, печатных изданиях и других источниках. 118
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Системы шаблонов представляют собой множество связных шаблонов, совместно решающих какую-либо задачу (например, задачу проектирования конкретного типа систем). Шаблоны в системе организованы в группы и подгруппы, отличаются уровнями детализации решаемых подзадач. Связи в системе имеют более тесный характер, чем в каталогах. Все шаблоны в системе единообразно описываются, причем особое внимание в описании уделяется вопросам отношений с другими шаблонами системы. Итоги В "хороших" проектах используется много шаблонов. Единое целое образуется в результате их согласованного взаимодействия. Применение шаблонов как повторное использование накопленного положительного опыта приносит очевидную пользу. Кроме того, изучение, классификация и выделение новых шаблонов (pattern mining), по мнению многих авторов, сами по себе являются интересными и перспективными задачами. 119
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Современные технологии тестирования Основные понятия тестирования. Фазы и этапы тестирования. Типы тестов. Разработка, управляемая тестами (Test Driven Development) Введение Тестирование является одним из наиболее устоявшихся способов обеспечения качества разработки программного обеспечения. С технической точки зрения тестирование заключается в выполнении приложения на некотором множестве исходных данных и сверке получаемых результатов с заранее известными (эталонными) с целью установить соответствие различных свойств и характеристик приложения заказанным свойствам. Как одна из основных фаз процесса разработки программного продукта (Дизайн приложения - Разработка кода - Тестирование), тестирование характеризуется достаточно большим вкладом в суммарную трудоемкость разработки продукта. Широко известна оценка распределения трудоемкости между фазами создания программного продукта: 40%-20%-40%. С точки зрения математики тестирование можно рассматривать как интерпретацию некоторой формулы и проверки ее истинности на некоторых множествах. Действительно, программу можно представить в виде формулы f = f1* f2* f3*... * fn, где f1, f 2, ... fn операторы языка программирования, а их суперпозиция - программа. Обосновать истинность такой формулы можно при помощи формального подхода - то есть выводить из исходных формул-аксиом с помощью формальных процедур (правил вывода) искомые формулы и утверждения (теоремы). Преимущество формального подхода заключается в том, что с его помощью удается избегать обращений к бесконечной области значений и на каждом шаге доказательства оперировать только конечным множеством символов. Однако зачастую построение формальной системы и формализация самой программы являются очень сложными процессами. Альтернативным подходом обоснования истинности может служить интерпретация. Интерпретационный подход применяется, 120 когда осуществляется
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET подстановка констант в формулы, а затем интерпретация формул как осмысленных утверждений в элементах множеств конкретных значений. Истинность интерпретируемых формул проверяется на конечных множествах возможных значений. Сложность подхода состоит в том, что часто число комбинаций значений очень велико и сами комбинации состоят из большого числа значений - а значит, обработка всех комбинаций потребует значительных ресурсов. Существуют различные методы, позволяющие уменьшить количество комбинаций, которые необходимо рассмотреть. Основная проблема тестирования - определение достаточности множества тестов для истинности вывода о правильности реализации программы, а также нахождения множества тестов, обладающих этим свойством. Статическое тестирование выявляет формальными методами анализа без выполнения тестируемой программы неверные конструкции или неверные отношения объектов программы (ошибки формального задания) с помощью специальных инструментов контроля кода CodeChecker. Динамическое тестирование (собственно тестирование) осуществляет выявление ошибок только на выполняющейся программе с помощью специальных инструментов автоматизации тестирования - Testbed или Testbench. Основы тестирования Классы критериев тестирования Структурные критерии используют информацию о структуре программы (критерии так называемого "белого ящика"), что предполагает знание исходного текста программы или спецификации программы в виде потокового графа управления. Структурные критерии базируются на основных элементах графа управления - операторах, ветвях и путях. Условие критерия тестирования команд (критерий С0) - набор тестов в совокупности должен обеспечить прохождение каждой 121
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET команды не менее одного раза. Условие критерия тестирования ветвей (критерий С1) - набор тестов в совокупности должен обеспечить прохождение каждой ветви не менее одного раза. Условие критерия тестирования путей (критерий С2) - набор тестов в совокупности должен обеспечить прохождение каждого пути не менее 1 раз. Функциональные критерии формулируются в описании требований к программному изделию (критерии так называемого "черного ящика") Они обеспечивают, прежде всего, контроль степени выполнения требований заказчика в программном продукте. Поскольку требования формулируются к продукту в целом, они отражают взаимодействие тестируемого приложения с окружением. Проблема функционального тестирования - это прежде всего трудоемкость; дело в том, что документы, фиксирующие требования к программному изделию, как правило, достаточно объемны, тем не менее соответствующая проверка должна быть всеобъемлющей. Выделяют следующие частные виды функциональных критериев: тестирование пунктов спецификации; тестирование классов входных данных; тестирование правил - набор тестов в совокупности должен обеспечить проверку каждого правила, если входные и выходные значения описываются набором правил некоторой грамматики; тестирование классов выходных данных; тестирование функций; комбинированные критерии для программ и спецификаций. Критерии стохастического тестирования формулируются в терминах проверки наличия заданных свойств у тестируемого приложения, средствами проверки некоторой статистической гипотезы. Применяется при тестировании сложных программных комплексов - когда набор детерминированных тестов (X, Y) имеет громадную мощность. Мутационные критерии ориентированы на проверку программного изделия на основе подхода Монте-Карло. 122 свойств
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Метод мутационного тестирования состоит в том, что в разрабатываемую программу P вносят мутации (мелкие ошибки), т.е. искусственно создают программы-мутанты P1, P2... . Затем программа P и ее мутанты тестируются на одном и том же наборе тестов (X, Y). Если на наборе (X, Y) подтверждается правильность программы P и, кроме того, выявляются все внесенные в программы-мутанты ошибки, то набор тестов (X, Y) соответствует мутационному критерию, а тестируемая программа объявляется правильной. Если некоторые мутанты не выявили всех мутаций, то надо расширять набор тестов (X, Y) и продолжать тестирование. Фазы тестирования При тестировании как правило выделяют три фазы: модульное, интеграционное и системное тестирование. Модульное тестирование - это тестирование программы на уровне отдельно взятых модулей, функций или классов. Цель модульного тестирования состоит в выявлении локализованных в модуле ошибок в реализации алгоритмов, а также в определении степени готовности системы к переходу на следующий уровень разработки и тестирования. Модульное тестирование проводится по принципу "белого ящика", то есть основывается на знании внутренней структуры программы, и часто включает те или иные методы анализа покрытия кода. Интеграционное тестирование - это тестирование части системы, состоящей из двух и более модулей. Основная задача интеграционного тестирования - поиск дефектов, связанных с ошибками в реализации и интерпретации интерфейсного взаимодействия между модулями. Основная разница между модульным и интеграционным тестированиями состоит в целях, то есть в типах обнаруживаемых дефектов, которые, в свою очередь, определяют стратегию выбора входных данных и методов анализа. Системное тестирование качественно отличается от интеграционного и модульного уровней. Оно рассматривает тестируемую систему в целом и оперирует на уровне пользовательских интерфейсов. Основная задача 123
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET системного тестирования состоит в выявлении дефектов, связанных с работой системы в целом, таких как неверное использование ресурсов системы, непредусмотренные комбинации данных пользовательского уровня, несовместимость с окружением, непредусмотренные сценарии использования, отсутствующая или неверная функциональность, неудобство в применении и тому подобное. Системное тестирование производится над проектом в целом с помощью метода "черного ящика". Структура программы не имеет никакого значения, для проверки доступны только входы и выходы, видимые пользователю. Тестированию подлежат коды и пользовательская документация. Кроме того, выделяют регрессионное тестирование - цикл тестирования, который производится при внесении изменений на фазе системного тестирования или сопровождения продукта. Главная проблема регрессионного тестирования - выбор между полным и частичным перетестированием и пополнением тестовых наборов. При частичном перетестировании контролируются только те части проекта, которые связаны с измененными компонентами. Этапы тестирования Каждая фаза тестирования включает в себя следующие этапы: 1. Определение целей (требований к тестированию), включающее следующую конкретизацию: какие части системы будут тестироваться, какие аспекты их работы будут выбраны для проверки, каково желаемое качество и т. п. 2. Планирование: создание графика (расписания) разработки тестов для каждой тестируемой подсистемы; оценка необходимых человеческих, программных и аппаратных ресурсов; разработка расписания тестовых циклов. Важно отметить, что расписание тестирования обязательно должно быть согласовано с расписанием разработки создаваемой системы. 3. Разработка тестов (тестового кода для тестируемой системы). 4. Выполнение тестов: реализация тестовых циклов. 5. Анализ результатов. 124
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Тестовый цикл - это цикл исполнения тестов, включающий фазы 4 и 5 тестового процесса. Тестовый цикл заключается в прогоне разработанных тестов на некотором однозначно определяемом срезе системы (состоянии кода разрабатываемой системы). Обычно такой срез системы называют build. Тестовый план - это документ, или набор документов, который содержит тестовые ресурсы, перечень функций и подсистем, подлежащих тестированию, тестовую стратегию, расписание тестовых циклов, фиксацию тестовой конфигурации (состава и конкретных параметров аппаратуры и программного окружения), определение списка тестовых метрик, которые на тестовом цикле необходимо собрать и проанализировать (например метрик, оценивающих степень покрытия тестами набора требований). Тесты разрабатывают на основе спецификаций как вручную, так и с помощью автоматизирующих средств. Помимо собственно кода, в понятие "тест" включается его общее описание и подробное описание шагов, выполняемых в данном тесте. Для оценки качества тестов используют различные метрики, связанные с количеством найденных дефектов, покрытием кода, функциональных требований, множества сценариев. Вся информация об обнаруженных в процессе тестирования дефектах (тип, условия обнаружения, причина, условия исправления, время, затраченное на исправление) заносятся в базу дефектов. Информация о тестовом плане, тестах и дефектах используется в конце каждого цикла тестирования для генерации тестового отчета и корректирования системы тестов для следующей итерации. Типы тестов В тестовом плане определяются и документируются различные типы тестов. Типы тестирования по виду подсистемы или продукта таковы: 125
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET 1. Тестирование основной функциональности, когда тестированию подвергается собственно система, являющаяся основным выпускаемым продуктом. 2. Тестирование инсталляции включает тестирование сценариев первичной инсталляции системы, сценариев повторной инсталляции (поверх уже существующей копии), тестирование деинсталляции, тестирование инсталляции в условиях наличия ошибок в инсталлируемом пакете, в окружении или в сценарии и т. п. 3. Тестирование пользовательской документации включает проверку полноты и понятности описания правил и особенностей использования продукта, наличие описания всех сценариев и функциональности, синтаксис и грамматику языка, работоспособность примеров и т. п. Типы тестирования по способу выбора входных значений: 1. Функциональное тестирование, при котором проверяется: покрытие функциональных требований; покрытие сценариев использования. 2. Стрессовое тестирование, при котором проверяются экстремальные режимы использования продукта. 3. Тестирование граничных значений. 4. Тестирование производительности. 5. Тестирование на соответствие стандартам. 6. Тестирование совместимости с другими программноаппаратными комплексами. 7. Тестирование работы с окружением. 8. Тестирование работы на конкретной платформе. Test Driven Development Рассмотрим подход к тестированию, несколько отличающийся от приведенного выше. Разработка через тестирование (Test Driven Development - TDD) - процесс разработки программного обеспечения, который предусматривает написание и автоматизацию модульных тестов еще до момента написания соответствующих классов или модулей. Это гарантирует, что все обязанности любого элемента 126
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET программного обеспечения определяются еще до того, как они будут закодированы. TDD задает следующий порядок этапов программирования: Красный - напишите небольшой тест, который не работает, а возможно, даже не компилируется. Зеленый - заставьте тест работать как можно быстрее, при этом не думайте о правильности дизайна и чистоте кода. Напишите ровно столько кода, чтобы тест сработал. Рефакторинг - удалите из написанного вами кода любое дублирование. Освоив TDD, разработчики обнаруживают, что они пишут значительно больше тестов, чем раньше, и двигаются вперед маленькими шагами, которые раньше могли показаться бессмысленными. После того, как программист заставил тест работать и может быть уверен, что эта часть функциональности покрыта, он заставляет работать второй тест, затем третий, четвертый и т. д. Чем сложнее проблема, стоящая перед программистом, тем меньшую область функциональности должен покрывать каждый тест. В итоге получается 100% покрытие кода модульными тестами, чего, как правило, невозможно добиться при классическом подходе к тестированию. Определенно существуют задачи, которые невозможно (по крайней мере на текущий момент) решить только при помощи тестов. В частности, TDD не позволяет механически продемонстрировать адекватность разработанного кода в области безопасности данных и взаимодействия между процессами. Безусловно, безопасность основана на коде, в котором не должно быть дефектов, однако она основана также на участии человека в процедурах защиты данных. Тонкие проблемы, возникающие в области взаимодействия между процессами, невозможно с уверенностью воспроизвести, просто запустив некоторый код. Итоги 127
Павлова Е.А. Технологии разработки современных информационных систем на платформе Microsoft.NET Чем активней разрабатываются новые информационные системы, усложняются архитектуры, развиваются новые технологии, тем важнее становится процесс тестирования. Появляется все больше сетевых приложений и приложений для мобильных устройств. Тестировать такие системы значительно сложнее, чем однопользовательские программы для домашних ПК. Для таких типов систем требуются эффективные алгоритмы автоматизации тестов. Кроме того, актуальна задача тестирования безопасности информационных систем во всех ее проявлениях. Индустрия видеоигр также нуждается в новых подходах к тестированию. Тестирование сопровождает практически весь процесс разработки, включая самые ранние стадии. До сих пор необходимо улучшение технологий тестирования спецификаций и требований. Актуальна задача разработки тестов, тестирующих процесс разработки, требования бизнеса и цели всей организации. Речь идет о разработке более эффективных тестов, покрывающих самые различные характеристики информационной системы. Кроме того, продолжаются исследования в области тестов, ориентированных на конкретную модель разработки (водопадную, спиральную) или на конкретную парадигму программирования. Например, для тестирования компонентно-ориентированных систем предлагается тестирование при помощи агентов. Для тестирования активных Java-апплетов предлагают использовать нейросети. Для тестирования агентов, существующих в web (роботы, пауки), предлагают использовать системы, основанные на знаниях. Таким образом, несмотря на значительную определенность процесса тестирования и полную автоматизацию многих его этапов, остается масса направлений для исследований и практической работы. 128