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

Для решения проблем, возникающих при создании ТЗ и проявляющихся при внедрении, придумано множество технологий и методов, но само их количество свидетельствует о том, что ни один не гарантирует полного успеха. Кроме того, многие методы имеют принципиальный недостаток — они увеличивают объем на определенной фазе работы (пусть и ради экономии на другом этапе) и требуют серьезных инвестиций в обучение сотрудников. Характерный пример — UML.

Существует, однако, подход, который не предполагает особой квалификации сотрудников и значительно облегчает внедрение, не увеличивая объем работ по подготовке ТЗ. Он основывается на идее, сущность которой можно сформулировать так: проектирование интерфейса — не часть процесса разработки, а часть процесса создания спецификаций на систему.

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

Преимущества подхода

Предлагаемый подход позволяет обеспечить следующие преимущества.

Во-первых, устраняются различия во взглядах заказчика и исполнителя на постановку задачи. Спецификации на сколько-нибудь сложные системы слишком абстрактны — их с трудом удерживают в голове даже авторы, а до конца не понимает никто, в том числе ключевое лицо, заказчик. Многие даже полагают, что непонятные ТЗ предназначены для того, чтобы произвести на заказчика впечатление и "содрать" побольше денег. Но наивно предполагать, что заказчик, легко подписавший маловразумительное ТЗ, так же легко примет разработанную систему. Прототипы интерфейса — это как раз тот единственный документ, который заказчик может понять и оценить. А поняв и оценив — сознательно подписать.

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

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

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

Проблемы

Итак, есть объективная целесообразность в том, чтобы рассматривать проектирование интерфейса не как стадию разработки, а как стадию создания ТЗ. Но как это сделать? На первый взгляд, задача трудноразрешима — как организационно, так и технически.

Сначала об организационной стороне. Казалось бы, заказчик считает, что делать что-то «реальное» надо сразу после подписания договора. Однако практика показывает, что промежуточные наглядные результаты работы над системой, а именно прототипы интерфейса, продемонстрированные уже на второй день работы, а не через несколько недель, приводят клиента в благодушное настроение. В отличие от обычного ТЗ, работа над которым заказчику реально не видна («ну что там, пара пунктов добавилась»), прототипы интерфейса легко воспринимаются, и прогресс в работе явно заметен. Вторая организационная проблема связана с необходимостью подписывать два договора: на создание ТЗ (читай — интерфейса) и на разработку функциональности системы. Причем подписание второго договора откладывается на определенный срок, необходимый для разработки интерфейса, что растягивает проект во времени. В принципе, эта проблема неразрешима, но здесь многое зависит от ее восприятия: да, договоров два, но зато формулировки второго договора получаются значительно более точными (уже имея интерфейс, легче оценить трудозатраты).

Техническая проблема связана с трудностями разработки прототипа. В обычном режиме работы интерфейс создается уже с помощью средства разработки, создавать же прототип таким образом нерентабельно. Интерфейс создается через множество итераций, а переделывать уже сделанное становится дорого. Сравнительно недавно появились специальные средства для "прототипирования" интерфейса (например, Norpath Studio), но пока они довольно сырые. Выход — использование неспециализированных редакторов графики и презентаций. Еще несколько лет назад основным таким средством служил пакет Microsoft PowerPoint, сейчас же наиболее удобным следует признать Microsoft Visio. Сложные экранные формы, впрочем, до сих пор удобнее просто рисовать на бумаге.

И, наконец, главная проблема. Удлинение процесса разработки ТЗ часто воспринимается самими разработчиками как безусловное зло — привычка сначала делать, а уж потом думать, традиционно сильна и в российском ИТ-бизнесе. Увы, изменить этот обычай может только «опыт, сын ошибок трудных». Пока, во всяком случае...

Конечно, проектирование интерфейса на этапе разработки спецификаций системы — не панацея. Такой подход не позволяет улучшить качество разработки в принципе: например, он вовсе не уменьшает количество ошибок программирования. Более того, он не всегда применим. Интерфейс сложной системы невозможно с самого начала спроектировать полностью: придется сначала делать работающую бета-версию и окончательно править интерфейс уже на ее основе. К тому же во многих проектах по не зависящим ни от кого причинам не удается растянуть процесс создания ТЗ (заказчик хочет увидеть какие-нибудь результаты "уже завтра"). Однако, учитывая низкие «входные» требования к применению предложенного метода (несравнимые, например, с бюрократической волокитой, обусловленной использованием UML), проектирование интерфейсов на стадии подготовки спецификаций почти всегда оказывается крайне успешным методом решения проблем внедрения.

Владислав Головач, Александр Белышкин — ведущие специалисты компании Usethics (http://www.usethics.ru).