Классика баз данных - статьи

       

Проблемы разработки приложений с применением ПО "двойного назначения"


Какие же ошибки допускают разработчики в среде Lotus Notes и администраторы Lotus Domino? Все ли они приводят к невозможности нормальной эксплуатации ИС? Каким образом ИС деградирует в результате тех или иных ошибок разработки и администрирования? Существует ли заранее известная стратегия "выигрыша в Domino", то есть успешного администрирования и разработки? Попытаемся ответить на эти вопросы.

Наложение абстракций

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

В случае разработки приложения для работы с сетевой базой данных (БД) через сервер приложений, разработчик целиком и полностью изолирует пользователя от реальных объектов (таблицы, кортежи, SQL-запросы и т.п.) при помощи введенных им абстракций: учетных карточек, документов и так далее. И это, безусловно, правильно.

При создании приложений Lotus Domino у разработчика зачастую появляется соблазн использовать второй подход. Действительно, зачем пользователю работать с репликами БД, видами и агентами? Его ведь интересуют документы, поля и действия над ними. Такой подход не учитывает, что Lotus Notes уже содержит в себе абстракции пользовательского уровня. Документы и поля - это абстракции записей в неструктурированной базе данных, виды - выборок записей по определенному критерию, реплики - синхронизируемых БД с механизмом разрешения конфликтов одновременного совместного доступа к различным копиям одной информации и т.
д. Введение второго уровня абстракций с большой вероятностью может привести к полной неработоспособности созданного приложения. Почему? Как и любое другое ПО Lotus Domino и Notes оптимизированы для работы со своими структурами и абстракциями. И отличие его от RDBMS состоит не только в способе организации доступа и хранения данных, но и в том, что последние не содержат абстракций пользовательского уровня, предоставляя разработчику свободу их выбора (и наименования), а Lotus Notes - содержит, и, что очень важно, рассчитан на работу именно с этими пользовательскими абстракциями.

Хорошо это или плохо? И то, и другое - это особенность, с которой надо считаться. Конечно, набор абстракций, которые предлагает Lotus Notes не всегда в точности соответствует тому, что хотелось бы предоставить конечному пользователю. Но эту проблему можно решить путем обучения пользователей. Да, это почти всегда будет стоить дороже разработки собственной модели с набором понятий и абстракций и ее реализации, но это, по-видимому, единственный путь получить работающее приложение. Что, по-вашему, выберет заказчик более дорогую систему, к которой надо привыкать или более дешевую, которая ему уже знакома, если первая работает, а вторая нет? Ответ очевиден. И, видимо, следует убедить заказчика в необходимости обучения, а не пытаться оживить неработающее приложение путем наращивания мощности аппаратной платформы, перепроектирования системы или написания заплат(как правило - не документированных), которые, как показывает практика, только усугубляют ситуацию.

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

Однопользовательское ПО в сети

Еще одна проблема разработки в Lotus Domino и Notes также связана с кажущейся простотой, присущей ПО третьей группы.


По аналогии с макропрограммами в однопользовательском ПО, приложения Lotus Notes также зачастую не учитывают сетевой сущности этого продукта. Ситуация усугубляется еще и тем, что в Notes действительно можно писать однопользовательские несетевые приложения. И они будут работать. Не в сети. И пока ими будет пользоваться один человек.

Некоторые разработчики уверены, что они должны правильно запрограммировать логику работы пользовательского приложения, а работу его в сети, "всякие там репликации" должны обеспечить администраторы, или, еще лучше, сервер Lotus Domino. Это не так. Разработчик всегда должен учитывать те условия, в которых будет эксплуатироваться его приложение. Его работа в сети накладывает дополнительные ограничения на усилия разработчика при программировании, чем, безусловно, усложняет его задачу многократно. Однако отмахнуться от этих проблем нельзя - персональное приложение просто не заработает в сети. Разработчик, таким образом, должен знать возможности Lotus Notes как сетевой технологии, то есть технологии реализации архитектуры "клиент-сервер", модели сетевого взаимодействия OSI/ISO, и т. д.



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


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

Решением указанной проблемы может быть обеспечение тесного взаимодействия программистов и опытных системных администраторов на всех этапах создания прикладного ПО для Lotus Domino/Notes, а также обязательное обучение разработчиков технологии проектирования и разработки именно сетевых программных средств. Со своей стороны, администраторы должны предоставлять разработчикам всю информацию о сервисах, которые могут быть ими использованы, конфигурации сети и ее влиянии на эксплуатируемое ПО.

Вывод из этого раздела можно сформулировать так: при разработке приложений в Lotus Domino/Notes необходимо учитывать сетевую многопользовательскую специфику этого ПО. И, если в случае персонального приложения, Lotus Notes проявляет себя как ПО первой группы, то в случае сетевого - как второй. Такая двойственность является расплатой за универсальность и относительную дешевизну.

"Изощренные решения"

Изощренным решением (sophisticated solution) обычно называют нетрадиционное, сложное, но, зачастую, красивое решение какой либо проблемы. Однако, применительно к Lotus Domino и Notes (как и к любому другому достаточно сложному ПО), такие решения таят в себе и потенциальную опасность. Проблемы, с этим связанные, возникают на границе доменов ответственности администраторов и разработчиков, что дополнительно усложняет их выявление и устранение.

В лицензионном соглашении IBM для ПО Lotus Domino или Notes (как и в любом другом лицензионном соглашении сегодня) сказано: "Данное ПО - достаточно сложное, и в нем наверняка есть ошибки. Мы это признаем и заранее Вас предупреждаем." Это означает, что даже без постороннего вмешательства (снаружи или изнутри, то есть администратора или разработчика) система находится в состоянии неустойчивого равновесия.


Внутренние ошибки (сбой памяти, ошибки программистов и т. п.) способны привести к сбою в случае, например, перехода системы в определенный режим работы или пребывания в каком-либо режиме в течение определенного времени.

Разработчики обычно стараются постоянно улучшать свои приложения. И заказчик обычно склонен добиваться удовлетворения всех своих требований. В результате, зачастую, складывается ситуация, когда для реализации какой-либо функции требуется то самое "изощренное решение". Это может быть код в несколько десятков строк, код, который делает что-то такое, чего не было предусмотрено в системе, конфигурация или параметр, которые не описаны в документации и т. д. Часто подобные решения применяются, так как иначе какое-либо требование осталось бы неудовлетворенным. Однако, в свете вышесказанного, следует понимать, что подобные эксперименты хороши для исследования потенциальных возможностей ПО или демонстрации потенциальных возможностей программиста. Но в случае промышленной версии надо (в разумных пределах, разумеется) стремиться к принципу: "Чем проще - тем надежнее".

Применительно к Lotus Domino/Notes - это правило означает следующее. Любую функцию следует реализовывать, по возможности, с помощью простых действий (Simple Actions). Если это невозможно, то писать простой и короткий код, который всесторонне отлаживать во всех режимах работы системы. Кроме того, полезно иметь упрощенный вариант приложения, который бы исключал сложные функции, заменяя их рядом простых. Опять же, заказчик предпочтет приложение, в котором надо чаще щелкать мышкой, вводить что-либо с клавиатуры и т. п., если оно работает, - красивой, удобной и лаконичной программе, которая пригодна только для демонстрации возможностей ПО и разработчиков.

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


Содержание раздела