Спецификация требований
2.1. Первичный список требований (функциональные и ограничения)
В качестве внешнего формата заказчик определил каталог на сервере LDAP.
В соответствии с изложенным выше, формально выделяется следующая
функциональность Nest-LDAP:
- Построение структуры SAN во внутреннем формате
- Преобразование и запись структуры SAN в виде дерева на сервере LDAP
- Чтение и обратное преобразование из дерева LDAP во внутренний формат
Для чтения и записи LDAP дерева, поставлены следующие условия:
- необходимо организовать поэлементное чтение из LDAP дерева и
поэлементную запись в LDAP дерево
- чтение из дерева LDAP производить по необходимости
- при повторном запросе одного и того же объекта не должен
производиться его повторный поиск в LDAP дереве и не должна
создаваться копия искомого объекта - в таком
случае необходимо возвращать лишь ссылку на требуемый
объект
(это можно организовать с помощью WeakHashMap)
- необходимо организовать интерфейс к языку запросов LDAP
- необходимо завести журнал изменений в LDAP, в котором будут
отражаться время изменения каждого поля каждого объекта, а
также само изменение, или хотя бы информация о проведенной
опреации (ее тип, например),для этого создать отдельную
ветку
в LDAP
- необходимо создать интерфейс, с помощью которого можно будет
получать журнал всех событий, которые происходили с данным
объектом (формат журнала будет предоставлен позже)
Заказчиком была определена следующая объектная модель SAN-струкутуры, в соответствии с которой следует определить в рамках проекта внутренний формат представления сети:
Эта объектная модель представляет собой совокупность моделей административной,
пространственной и сетевой структур (SAN-структуры).
Объектная модель сетевой структуры
Сетевые устройства представляются объектами класса Device. Каждое сетевое
устройство имеет один или более интерфейсов канального уровня - объекты класса
LinkInterface. Если устройство работает на сетевом уровне, то каждому
канальному интерфейсу могут соответствовать один или более интерфейсов сетевого
уровня - объекты класса NetworkInerface. Классы LinkInterface и
NetworkInterface являются родительскими для классов, описывающих конкретные
протоколов канального (EthernetInterface, PPPInterface) и сетевого
(IPv4Interface, IPv6Interface) уровня соответственно. Возможно также добавление
в модель других классов, наследующих LinkInterface или NetworkInerface для
представления других протоколов.
Устройства связаны между собой посредством интерфейсов канального уровня
(физические соединения) и объединены в сети, определенные механизмом
маршрутизации, посредством интерфейсов сетевого уровня (логические
связи). Физические соединения определяют структуру сети на канальном
уровне.
Объектная структура администранивной и пространственной структур
Каждая из стуктур описывается набором объектов. Каждый класс объктов
определяется своими атрибутами.
Основным классом, описывающим пространственную структуру является
SpaceUnit - пространственная единица. Классами, наследующими его являются
Building - здание, Floor - этаж и Room - комната.
Основным абстрактным классом, описывающим административную структуру,
является AdmUnit - административная единица. Его наследуют два класса:
CompositeAdmUnit и AdmLeaf. Класс AdmLeaf порождает листовые элементы
административной структуры. Класс CompositeAdmUnit порождает все порождает все
остальные объекты администативной структуры данной организации.
Связи между пространственной, административной и сетевой структурами
Между каждой из моделей структур - пространственной, административной и
сетевой, определены взаимные связи, которые реализуются через классы,
соответствующие Room, SimpleOU и Device. Типы связей показаны на рис. объектной
структуры SAN-модели.
Представление структур в LDAP
Объектная модель SAN-структуры должна быть представлена в LDAP в виде набора записей,
состоящих из атрибутов. Набор атрибутов определяется классом записи
(см. объектную модель SAN-структуры). N-, A- и S- размещены в отдельных
поддеревьях каталога LDAP.
- Сетевая структура
Поддерево N-структуры организовано в соответствии
со следующей иерархией:
- сеть (класс Network)
- подсеть (класс Network) li>
- устройство (класс Device) li>
- интерфейс канального уровня (класс
LinkInterface) li>
- интерфейс сетевого уровня (класс
NetworkInterface) li>
Организация поддерева каталога основана на иерархии
сеть-подсеть. Каждое сетевое устройство распологается в
поддереве, соответствующем сети, которой это устройство
принадлежит.
Запись "сеть" является корневой для сетевой структуры. В
ней содержатся записи подсетей и сетевых устройств. Запись
подсети может содержать другие записи подсетей и записи сетевых
устройств. Каждая запись сетевого устройства содержит записи,
соответствующие интерфейсам этого устройства.
Каждая запись подсети или сетевого устройства размещается в
дереве таким образом, чтобы быть как можно дальше от корня
притом, что все записи сетевых интерфейсов в поддереве
размещаемой записи должны принадлежать подсетям, записи которых
расположены на пути от корня до размещаемой записи.
Таким образом, все записи сетевых устройств расположены в
записях подсетей, к которым непосредственно подключены данные
сетевые устройства, за исключением случая, когда сетевое
устройство подключено к нескольким различным подсетям (через
различные интерфейсы).
- Пространственная стуктура
Поддерево пространственной структуры организовано в
соответствии со следующей иерархией:
- здание (класс Buildign)
- этаж (класс Floor)
- комната (класс Room)
- Административная структура
Поддерево административной структуры организовано в
соответствии с иерархией:
- сложная административная единица (класс CompositeOU)
- простая административная единица (класс SimpleOU)
- человек, принадлежащий административной единице (класс Person)
В качестве внешнего формата заказчик определил каталог на
сервере LDAP. В соответствии с изложенным выше, формально
выделяется следующая
функциональность Nest-LDAP:
- Построение SAN-структуры во внутреннем формате
- Преобразование и запись SAN-структуры в виде дерева на сервере
LDAP
- Чтение и обратное преобразование из дерева LDAP во внутренний
формат
В качестве языка программирования для реализации проекта
заказчик определил Java.
В качестве программного интерфейса к LDAP заказчик
определил JNDI.
В качестве инструмента документирования заказчик
определил Javadoc.
В общем случае SAN-структура будет
представлять собой граф. Для преобразования SAN-структуры в дерево заказчик предложил использовать следующие правила:
- Каждая запись подсети или сетевого устройства размещается в дереве
таким образом, чтобы быть как можно дальше от корня;
- все записи сетевых интерфейсов в поддереве размещаемой записи
должны принадлежать подсетям, записи которых расположены на пути от корня до размещаемой записи.
То есть, все записи сетевых устройств расположены в записях
подсетей, к которым непосредственно подключены данные сетевые устройства, за исключением случая, когда сетевое устройство
подключено к нескольким различным подсетям (через различные интерфейсы).
а также, формально выделяются следующие ограничения:
- Используемый язык программирования - JAVA
- Используемый протокол доступа к данным для службы каталогов - LDAP
- Используемый интерфейс взаимодействия с LDAP-сервером - JNDI
- Обработка до 10000 элементов объектной модели (т. е. система
должна оптимально работать при 10000
устройств сети (с максимальной скоростью и минимальной
затратой
памяти), а также работать и при большем количестве
устройств сети,
но уже, может быть, не так быстро)
2.2. Модели требований (анализ и детализация требований)
Модель предметной области. Объекты и взаимосвязи между ними.
Модель предметной области отображена на диаграмме объектной моделью сети (см. выше).
Функциональная модель. Детальное описание каждой функции.
Описание функций системы Nest-LDAP:
- Функция добавления нового элемента SAN структуры:
- Вход: данные об элементе SAN структуры
- Выход: объект класса SAN структуры
- Функция удаления элемента SAN структуры:
- Вход: объект класса SAN структуры
- Функция записи элемента SAN-структуры:
- Вход: ссылка на элемент SAN структуры
- Выход: новый объект на сервере LDAP
- Функция чтения элемента дерева LDAP:
- Вход: путь до нужного объекта
- Выход: объект SAN структуры
- Функция поиска элемента в дерева LDAP:
- Вход: значения атрибутов, которыми должны обладать элементы дерева
- Выход: объект(ы) SAN структуры, имеющие заданные атрибуты
Высокоуровневая модель архитектуры.
Пояснения:
Подсистема NEST-LDAP предоставляет возможность пользователю NEST работы с деревом LDAP. При этом пользователь не догадывается о внутренней структуре модуля работы с деревом, а лишь имеет возможность записать/прочитать либо все дерево, либо какую-ту его часть, найти определенный объек в дереве и вести в дереве лог динамически изменяющейся сети.
2.3. Критерии аттестации системы
Набор базовых высокоуровневых тестов, которые будут проверяться при аттестации ПО и удостоверяют его соответствие требованиям заказчика
Тест 1:Соединение с сервером.
Описание: Для соединения с сервером потребуются права администратора
(username, password) и ip-адрес LDAP сервера. В случае если, какое-либо
из вводных данных окажется неправильным, то будет сгенерировано
исключение (AuthenticationException), описанное в Java JNDI.
Тест 2:Корректность преобразования Дерево LDAP ---> SAN-Структура.
Описание: Для проверки на чтение информации из LDAP сервера, будет
применяться добавление файла с данными, которые должны будут в
последствии считаться (инструментe ldapadd). Так же будет использоваться
обозреватель Jarek Gawor's LDAP Browser\Editor, для просмотра содержания
сервера и последующего сравнения с выводимой информацией программы (модуля NEST-LDAP).
Входные данные:
- Дерево, соответствующее графу SAN-структуры.
Пошаговое описание:
- Запись дерева на сервер, через инструмент ldapadd.
- Чтение SAN-структуры с сервера модулем NEST-LDAP.
- Вывод информации о всех элементах SAN-структуры на стандартный выход.
- Просмотр содержимого сервера LDAP, используя
Jarek Gawor's LDAP Browser\Editor
- Вручную, сравнение данных, выведенных подсистемой, с данными в обозревателе.
Тест 3:Корректность преобразования SAN-Структура ---> Дерево LDAP.
Описание: Для проверки на запись будут введены данные, запись которых
будет проверяться обозревателем Jarek Gawor's LDAP Browser\Editor
на наличие ошибок и неточностей.
Входные данные:
- Граф сети.
Пошаговое описание:
- Запись SAN-структуры через NEST-LDAP в дерево на сервере LDAP.
- Просмотр содержимого сервера LDAP, используя
Jarek Gawor's LDAP Browser\Editor
- Вручную, сравнение исходных данных и данных, отображенных обозревателем.
Тест4:Взаимная однозначность преобразования Структура Сети <---> Дерево LDAP.
Описание: Для проверки на запись будут введены данные на сервер и одновременно сохранены в
отдельном файле. После чтения и вывода данных, находящихся на сервере, будет проведена проверка на
идентичность считавшихся с сервера данных и записанных в отдельный файл.
Входные данные:
- Граф сети.
Пошаговое описание:
- Вывод информации о всех элементах SAN-структуры в файл #1.
- Запись SAN-структуры на сервер, через NEST-LDAP.
- Чтение SAN-структуры с сервера, через NEST-LDAP.
- Вывод прочитанной с сервера SAN-структуры в файл #2
- Сравнение файлов #1 и #2 на идентичность с помощью утилиты сравнения
Тест5:Производительность по времени чтения/записи на сервер LDAP
Описание: Последовательное увеличение SAN-структуры и замерение времени, при записи и чтении структуры на сервер LDAP.
Первоначальный размер сети - 100 элементов, максимальный - 10000. На каждой итерации структура увеличивается на 100 элементов.
Входные данные:
- Граф сети от 100 до 10000 элементов.
Пошаговое описание:
- Генерация SAN-структуры
- Запись SAN-структуры на сервер, через NEST-LDAP, замеряя при этом время записи.
- Чтение SAN-структуры с сервер, через NEST-LDAP, замеряя при этом время чтения.
- Если размер SAN-структуры менее 10000 элементов, то увеличить размер на 100 элементов и вернуться к первому шагу.
Тест6:Корректность выполнения запросов на выборку элементов SAN-структуры
Описание: Функциональность подсистемы NEST-LDAP предоставляет возможность пользователю осуществлять поиск в дереве LDAP. При выполнении теста задается определенным образом элемент SAN-структуры (это могут быть его атрибуты), в результате чего программа должна вернуть все такие элементы SAN-структуры, соответствующие заданному образцу.
Входные данные:
- Образец поиска по элементам SAN-структуры в дереве LDAP.
Выходные данные:
- Все такие элементы SAN-структуры, соответствующие образцу.
Тест7:Производительность выполнения запросов на большую выборку элементов SAN-структуры.
Описание: Тест проверяет количество времени затраченное на то, чтобы получить выборку элементов.
Входные данные:
- Образец поиска по элементам SAN-структуры в дереве LDAP.
Выходные данные:
- Все такие элементы SAN-структуры, соответствующие образцу.
- Время, затраченное на поиск.
Тест8:Прикладной программный интерфейс
Описание: Тест заключается в создании примера пользовательской программы, использующей модуль NEST-LDAP. В программе должны быть применены все варианты работы NEST-LDAP, т.е. вызваны все методы входящие в интерфейс NEST-LDAP. Программа должна безошибочно транслироваться и корректно работать.
Перечень и краткое описание дополнительных инструментов:
- ldapadd - средство, для добавления вхождений в LDAP.
- Jarek Gawor's LDAP Browser\Editor - Java программа, позволяющая просматривать содержимое LDAP сервера.
- Утилита сравнения файлов, аналогичная cmp под Unix.
Перечень дополнительных, предназначенных только для тестирования, подсистем NEST-LDAP:
2.4. Глоссарий терминов
Служба каталогов - программный комплекс для хранения и каталоголизации информации (похоже на обычную БД, но с уклоном, скорее, на чтение данных нежели на их добавление и их изменение). Обычно DS базируется на клиент-серверной архитектуре. Служба каталога должна предоставлять простой централизованный доступ к данным, которые могут использоваться различными приложениями.
LDAP (Lightweight Directory Access Protocol) - протокол для работы службы каталогов, обеспечивающий любому приложению доступ к информации в каталоге. Доступ осуществляется по TCP/IP. LDAP позволяет производить операции аутентификации (bind), поиска (search) и сравнения (compare), а также операции добавления, удалени, изменения записей.
JNDI (Java Naming and Directory Interface) - это клиентский API,
который обеспечивает функции управления и наименования.
JNDI был создан для обеспечения абстракций, представляющих наиболее общие для клиентов служб имен и управления элементы.
JNDI не задумывался как альтернатива существующим системам наименования и управления.
Наоборот, он создан для обеспечения стандартного интерфейса для доступа к общепринятым системам типа DNS, LDAP.
JNDI представляет собой интерфейс, который с помощью своего API скрывает детали реализации различных систем наименования и управления.
Это позволяет многочисленным системам существовать и даже сотрудничать в рамках одного клиента JNDI.
С помощью этого интерфейса пользователь может перемещаться от одной системы управления и наименования к другой, при этом думая, что он работает с одной логической объединенной службой имен.
Javadoc - утиита используемая для генерации HTML-документации по исходному коду, входящая в стандартную поставку JDK.
JavaBeans - это технология создания и использования программных компонент (обычно визуальных, хотя не обязательно). В JavaBean программные компоненты, которые являются как бы кирпичиками программы, называются Beans (в переводе . бобы). В исходной документации по javaBeans от Sun определено: "Целью технологии JavaBeans является определение модели программных компонент такой, что фирмы-разработчики ( third party firms ) могут создавать и устанавливать Java-компоненты, которые могут быть скомпонованы конечными пользователями в законченные приложения".