2001 г
Особенности применения технологий Lotus Domino и Notes в современных информационных системах, проблемы проектирования сложных приложений и причины их возникновения
Владимир Богданов, Владимир Старых
РГУИТП, 2000
Аннотация
Программное обеспечение (ПО) Domino и Notes компании Lotus Development, подразделение корпорации IBM, является одной из наиболее распространённых технологических платформ в качестве инструментария совместной работы (Groupware), и как ПО электронной передачи сообщений (Email), календарного планирования (Scheduling), корпоративной интегрированной среды функционирования Internet-приложений (Internet/Intranet application server). Однако, по мере роста зависимости организации от приложений, функционирующих в корпоративной среде Lotus Domino/Notes, и сложности самих приложений, стоимость поддержки и модернизации информационной системы (ИС) нелинейно повышается, а удовлетворенность ей на всех уровнях организационной иерархии и во всех подразделениях неуклонно снижается. В статье рассматриваются основные причины этого процесса, а также типичные ошибки при проектировании ИС вообще и в среде Lotus Domino/Notes в частности, которые приводят к снижению производительности труда пользователей, замедлению окупаемости ИС и т. д., то есть, в итоге, к финансовым потерям.
Статья адресована разработчикам ИС, ПО в среде Lotus Domino/Notes и их заказчикам.
ПО "двойного назначения"
Современные требования к ИС масштаба предприятия настолько многообразны и подчас противоречивы, что удовлетворение их в полном объеме практически невозможно. Однако, вполне понятно желание разработчиков удовлетворить максимально возможное количество требований потребителей. Речь в данном случае идет не только о технических и функциональных требованиях, но также и о финансовых, временных и даже эстетических. Именно поэтому в последнее время очень широкое распространение получили комплексные программные продукты, ориентированные на очень быстрое развертывание первой очереди ИС, реализующий базовый функционал, и последующую разработку приложений, повышающую степень автоматизации работ, выполняемых персоналом.
Подобным свойством "двойного назначения" обладает, по-видимому, вообще любое ПО из представленных на рынке: от офисных пакетов до сложнейших систем управления базами данных и онлайнового анализа информации. Таким образом, вообще все ПО можно разделить на три довольно неравных (по количеству представителей, их стоимости и распространенности на рынке) группы по степени выраженности его "двойного назначения".
В первую группу попадает ПО, на 90-95% ориентированное на использование базового функционала, но допускающее некоторое дополнение его самостоятельно создаваемыми возможностями. К этой категории относятся большинство широко используемых офисных наборов - текстовых процессоров, электронных таблиц, пакетов презентационной графики, персональных органайзеров и т.п. Так, например, текстовый процессор Microsoft Word содержит очень большое количество встроенных функций, которые, при необходимости, могут дополняться пользователем. Для этого предусмотрена возможность создания макропрограмм с применением языка Visual Basic и даже встроенной (являющейся неотъемлемой частью ПО Word) среды визуального программирования. Для подавляющего большинства пользователей уже встроенных функций достаточно (точнее говоря, из них используется не более 20-50%). И "допрограммирование" нового функционала является действительно опциональным: ПО полностью сохраняет свою ценность и без него. Важно, что ПО первого типа в основном персональное, то есть не требующее (или даже не поддерживающее) сетевого взаимодействия.
Ко второй группе относится ПО, на 95-100% ориентированное на использование функционала, задаваемого (программируемого) пользователем или, чаще, третьей стороной - разработчиком, для конечного пользователя. К этой категории относится сложное и дорогое ПО: ERP, RDBMS, OLAP, Middleware, серверы приложений и т. д. Но, тем не менее, эти продукты сохраняют возможность (относительно) быстрого развертывания и использования стандартных шаблонов. Другое дело, что практическое применение их в такой конфигурации бессмысленно. Более того, бюджет подобных проектов всегда включает настройку базового ПО, создание заказных приложений в новой среде, обучение пользователей, поддержку и т. д. ПО этого типа практически всегда требует сетевого взаимодействия, то есть оно всегда многопользовательское.
ПО Lotus Domino/Notes относится к третьей группе. Domino можно успешно, без какого либо ущерба, использовать как в качестве ПО быстрого развертывания для создания системы электронной почты и календарного планирования, совмещенной с телеконференциями, общим каталогом пользователей и т. д., так и для разработки и внедрения достаточно сложной, комплексной заказной ИС для организации практически любого масштаба. Более того, не существует теоретических ограничений на использование Domino и Notes в обоих качествах одновременно в одной организации. Такая перспектива, безусловно, и явилась причиной значительного распространения Lotus Domino/Notes, ведь она обещает экономию материальных средств на ПО и оборудование, обслуживающий персонал, обучение пользователей и т. п., то есть снижение так называемой совокупной стоимости владения (Total Cost of Ownership - TCO).
Следует отметить тот факт, что в случае с истинным ПО "двойного назначения", невозможно оценить насколько встроенные или созданные пользователем функции превосходят друг друга. В подавляющем большинстве случаев соотношение между ними постоянно меняется вследствие постоянного стремления пользователя понизить TCO как раз за счет повторного использования установленных и сконфигурированных компонентов для реализации собственного функционала.
В третью группу также входит и ряд других программных продуктов других производителей. Это, например, Microsoft Exchange, или персональные СУБД, такиt как Microsoft Access или Lotus Approach, входящие в так называемые "профессиональные" версии офисных пакетов. Но все эти продукты скорее можно оценить, как имеющие соотношение от 30-70% до 70-30% между встроенными и программируемыми функциями. Причем этот процент не меняется или меняется очень незначительно в процессе эксплуатации ПО, что сильно отличает их от Lotus Domino/Notes. Но все соображения, которые изложены ниже и получены в результате работы с Domino и Notes, вполне относятся и другим продуктам третьей группы, хотя и в несколько меньшей степени. Все продукты этой группы поддерживают сетевое взаимодействие, многие имеют два варианта установки и работы - одно- и многопользовательские.
Особенности ПО "двойного назначения"
Вследствие возможности двойного применения, Lotus Domino кажется простым продуктом, готовым к использованию по прямому назначению после простой инсталляции ПО (то есть, что называется Out of the Box). Это довольно распространенное заблуждение. В отличие от ПО первой группы, которое действительно можно использовать после инсталляции для выполнения работы, ПО третьей группы намного сложнее. Даже однопользовательский персональный режим зачастую требует определенных настроек. Что уж говорить о сетевом многопользовательском варианте - по сложности развертывания, конфигурирования и управления Lotus Domino лишь немного уступает большинству представителей второй группы ПО.
Однако, схожая ситуация наблюдается и в случае создания с применением Lotus Domino и Notes заказных приложений для пользователя. В этом случае кажущаяся простота и легкость программирования, так же как и мнимая легкость настройки и управления, может не привести к ожидаемым результатам. Действительно, в любом случае, используется ли Lotus Domino в качестве почтовой системы или сервера собственных приложений, он является сложным сетевым продуктом, требующим, в первую очередь, знания и представления о нем, как о технологической платформе проектирования, квалифицированного сопровождения и развития разработанной ИС.
Да, Lotus Domino дешевле. Но от электронной почты или системы документооборота также зачастую непосредственно зависит успех коммерческой деятельности компании. Да, Lotus Notes имеет "интуитивно понятный интерфейс". Но ведь обучать пользователя надо не тому, на какие кнопки нажимать для выполнения тех или иных действий, а тому, как работать в новой для него информационной среде, обеспечивающей принятую или измененную функциональность.
Таким образом, первый вывод, который можно сделать из вышесказанного, это то, что ПО третьей группы объединяет достоинства (и недостатки) предыдущих в обозначенном делении групп, предоставляя при этом некоторые дополнительные возможности, преимущественно за счет экономии материальных средств. Важно помнить, что эта экономия не так значительна, как может показаться на первый взгляд. Lotus Domino - это далеко не "сетевая СУБД по цене офисного пакета".
Проблемы разработки приложений с применением ПО "двойного назначения"
Какие же ошибки допускают разработчики в среде 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: почтовый ящик, адресная книга, телеконференция и т. д. Конечно, все они далеки от идеала (по удобству использования, скорости работы, красоте исполнения), но они работают. И в этом их главное преимущество.
Закономерности внедрения ПО трех различных групп
Еще одним доводом в пользу простых приложений может служить то, что ПО трех названных групп внедряется по разным законам. Рост затрат на внедрение ПО первой группы соответствуют примерно такому графику:
То есть, по мере увеличения количества требуемых от ПО функций, возрастает и стоимость, причем не линейно, а в основном в области большого количества функций и их повышенной сложности.
Для ПО второй группы график роста стоимости внедрения примерно таков:
То есть, основные затраты приходятся на реализацию небольшого набора функций в начале работ, а потом рост стоимости дополнения функционала снижается, например, за счет повторного использования.
Отличия в графиках для первой и второй групп легко объяснимы: ПО первой группы обычно внедряется "прямо из коробки", при этом, как правило, не проводится ни обучение пользователей, ни разработка и внедрение дополнительных функций. В случае необходимости создания своих собственных функций стоимость внедрения начинает расти, и, так как ПО первой группы не сильно ориентировано на допрограммирование, то чем больше функций добавляется, тем больше стоимость и тем быстрее она растет.
Для ПО второй группы немыслимо внедрение без предварительного планирования и разработки, которое может занимать несколько месяцев и требовать дополнительных финансовых затрат, соизмеримых со стоимостью самого ПО. Кроме того, после разработки требуется обучение пользователей и администраторов. Однако, по мере того, как ПО оказывается внедренным, скорость роста стоимости замедляется, так как используется уже разработанный и отлаженный пользовательский интерфейс, дополнительные функции повторно используют уже созданный код и т. д.
Для Lotus Domino и Notes, как и для любого ПО третьей группы график роста затрат на внедрение выглядит приблизительно так:
Характерный излом между линиями A и B объясняется следующим образом: ряд функций уже встроен в ПО Lotus Domino и Notes, и программирование и обучение для них не требуется - это график на участке левее A (подобный графику для ПО первой группы). На участке между A и B происходит (или должно происходить) та самая разработка, отладка и внедрение приложений, обучение пользователей и т. д., которые не требовались ранее. На участке кривой, расположенном правее B, Lotus Domino/Notes ведет себя как ПО второй группы - действительно, пользователи уже обучены, приложения функционируют, накоплено значительное количество пригодного для повторного использования программного материала и т. д.
Проблемой очень часто является как раз преодоление "ступеньки" A-B. Ее высота напрямую зависит от того, насколько успешно решены названные выше проблемы. К сожалению, лишь небольшое число проектов преодолевает ее. Большая часть застревает посередине, то есть пользователи получают незаконченное ПО, которое требует дополнительных финансовых затрат. К тому же, в силу того, что обычно вышеперечисленным вопросам в процессе разработки приложений и внедрения Lotus Notes изначально не уделяется достаточного внимания, преодоление ступеньки возможно только при отказе от ряда уже созданных компонентов и приложений (то есть, при возврате в точку A).
Вывод из вышесказанного следующий - не следует создавать в Lotus Domino/Notes сложных приложений, это позволит понизить высоту ступеньки на графике зависимости роста затрат от количества реализованных функций, в то время как изощренные решения способны не только увеличить ее (и, следовательно, усложнить жизнь и разработчикам и пользователям), но и вообще привести систему к неработоспособному состоянию.
Кроме перечисленных ранее ошибок, характерных для ПО третьей группы, при разработке, внедрении, эксплуатации и поддержке ИС с использованием Lotus Domino/Notes часто допускаются ошибки, характерные для разработки в области ИТ в целом, то есть для ПО всех трех групп. К ним относятся: отсутствие планирования жизненного цикла ПО, недостаточное внимание к аспектам производительности, безопасности и масштабируемости, отсутствие единой концептуально-целостной технической архитектуры ИС (Enterprise-Wide Technical Architecture - EWTA) и т. д. Мы не будем подробно останавливаться на них, так как их рассмотрение выходит за рамки данной статьи и их влияние на Lotus Domino и Notes аналогично влиянию на любую другую ИС.
Хочется отметить, однако, что из-за двойственности, свойственной Lotus Domino/Notes, очень часто возникает соблазн уклониться от решения этих проблем на первом этапе внедрения ИС, так как, якобы, в это время Domino ведет себя как ПО первой группы. Это, конечно, не так. Подобная практика приводит только к росту высоты ступеньки A-B, что, в свою очередь, может привести к краху внедрения. Избежать этого роста можно единственным способом: предвидеть и предупредить появление названных проблем, то есть принять меры к планированию сети, разработке политики безопасности, согласовать и официально принять EWTA и т. д.
Конечно, подобная практика потребует дополнительных финансовых затрат и усилий от разработчика на первом этапе внедрения ИС, что несколько снижает финансовую привлекательность Lotus Domino по сравнению с ПО второй группы. В данном случае важно не обманывать себя и заказчика. Либо внедрение остановится на первом этапе и не пойдет дальше, либо ступеньку придется преодолеть, что приведет к росту стоимости внедрения и владения ИС.
Заключение
Приведенные в статье соображения позволяют сделать еще ряд интересных выводов. Так, например, характерная форма графика зависимости роста затрат на внедрение от количества реализуемых функций подсказывает те преимущества Lotus Domino и Notes, которые часто теряются из вида при принятии решения об использовании данного ПО.
Обладая свойствами ПО первой и второй группы, Lotus Domino/Notes, может, при грамотном подходе и учете особенностей, на первом этапе экономить средства, частично заменяя ПО второй группы. При этом, в случае четкого понимания всех плюсов и минусов такого использования и готовности модифицировать требования к ИС в соответствии с ограничениями, накладываемыми ПО Domino и Notes, возможна действительно существенная экономия, обусловленная гораздо более низким положением графика для Lotus Domino/Notes.
На этапе глубокого проникновения в ИС пользователя, и при условии успешного преодоления ступеньки A-B, Lotus Domino и Notes могут, в первую очередь за счет сетевой ориентации и хорошей интеграции с офисным и другим ПО, существенно снизить затраты на модернизацию ИС или дополнение ее новыми функциями, что обеспечивается более пологим графиком зависимости роста затрат на внедрение от количества реализуемых функций правее точки B для Lotus Domino/Notes по сравнению с графиком для ПО первой группы. Иными словами, наращивание функций ИС за счет Domino и Notes будет дешевле, чем допрограммирование ПО первой группы, причем тем дешевле, чем больше изменений требуется внести.
Получение количественных показателей является темой для отдельного исследования, однако даже без него, понимание реального положения вещей может оказаться весьма полезным как разработчикам ИС, так и их заказчикам.