Процесс утверждения анти-шаблона: Как помешать процессу работать на васИсточник: IBM developerWorks Россия Гэри Гэри Полличе
Организации, разрабатывающие программное обеспечение, сегодня гораздо более осведомлены о значении эффективности процесса разработки, чем когда-либо раньше. Под словом эффективность здесь понимается свойство процесса, способствующее достижению организацией своих целей вследствие рационального управления риском, изменениями, планированием, качеством и прочими составляющими успеха проекта разработки ПО. В этом месяце мы рассмотрим, как реализовать такой процесс в вашей организации. Однако мы подойдем к проблеме с необычной стороны. То есть вместо того, чтобы рассматривать позитивное поведение, которое помогает модернизировать процесс, мы разберем некоторые действия, которые, на первый взгляд, многое модернизируют, но на самом деле усугубляют положение вещей. Эти негативные действия обычно классифицируются термином анти-шаблоны. Шаблоны представляют собой компоненты инструментария специалистов по программному обеспечению. В частности, мы изучали шаблоны проектов - способы проектирования программ, позволяющие сделать их более надежными, гибкими и правильными. Эрих Гамма (Erich Gamma) разработал основы принципа шаблонов проектирования программного обеспечения в своей диссертации на соискание ученой степени доктора философии в начале 90-х годов. Вдохновителем Эриха Гамма стал Кристофер Александер (Christopher Alexander), архитектор,который исследовал идею шаблонов в архитектуре (в обычной архитектуре, а не архитектуре программного обеспечения). Шаблоны ворвались в разработку программного обеспечения благодаря публикации в 1995 году книги Design Patterns (Шаблоны проекта). Шаблон представляет собой проверенный подход к решению часто возникающих проблем. Шаблон не является конкретным решением, которое можно вырезать и вставить через буфер обмена, это принцип, который может помочь решить проблему. Шаблон - это не трафарет, с которым мы сталкиваемся, заполняя различные бланки. Шаблоны не изобретают. Столкнувшись с проблемой, вы не садитесь специально за изобретение нового шаблона, который поможет решить эту проблему. Тот факт, что мы думаем о шаблонах как об элементах многократного использования, должен навести нас на мысль о том, что мы скорее открываем шаблоны, чем изобретаем их. Часто мы можем думать, что собираемся написать компонент программы многократного использования, на самом деле, многократное использование в первую очередь подразумевает использование . Поэтому до тех пор, пока кто-либо не использует наш компонент, а затем кто-либо еще снова не использует его, мы, по сути, не знаем, хорошо ли мы сделали свою работу по созданию некоего компонента многократного использования. Это же справедливо и в отношении шаблонов. Своим студентам я часто предлагаю простое правило большого пальца: Один раз - это случайность, два раза - совпадение, три раза - повод подумать, не открыли ли вы шаблон. Шаблоны стали популярными, потому что они позволяют разработчикам говорить на одном языке. Разработчики используют термины наподобие "адаптер" или "фасад" примерно так же, как столяры используют термин "ласточкин хвост". Язык обогащает наш словарный запас словами, которые несут потрясающий объем семантического смысла. Как только в моду вошли шаблоны проектов, шаблоны стали появляться и в других областях разработки программного обеспечения, таких как процессы, анализ требований и т. д. Каждая область специализации хочет приобщиться к этому новому взгляду на мир. Шаблоны были "next big thing" 90-х. В данный момент существуют книги и статьи по шаблонам для процессов, управления требованиями, архитектуры программного обеспечения, тестирования, управления проектами и т. д. Практики и теоретики стремятся приложить хорошую идею ко всему, чем они занимаются. Я так любил свою объектно-ориентированную ручку в середине 80-х. Я просто говорил pen.write , и она, как по волшебству, делала свое дело. Это необузданное стремление к поиску шаблонов привело, на мой взгляд, к классической ситуации: за деревьями мы не замечаем леса. Все вдруг оказалось шаблоном, от использования стандартного кода до пересмотра кода и выбора языка программирования. Применение шаблона требует осмысления, понимания проблемы, оценки последствий использования шаблона и опыта. Одним из последствий открытия и применения шаблонов стало то, что шаблоны, как и лекарства, можно неправильно использовать. Другими словами, мы можем "прописать" приложению данный шаблон и обнаружить, что, к нашему сожалению, пациенту (в нашем случае, организации по разработке программного обеспечения), стало хуже, и он, возможно, даже умрет. Наблюдая это явление, мы открыли анти-шаблоны . Анти-шаблон возникает, если кажущийся подходящим подход к решению проблемы в действительности усугубляет проблему. Думаю, что первый анти-шаблон описал Фред Брукс (Fred Brooks), который обнаружил, что если добавить в проект, который не укладывается в сроки, больше сотрудников, то это приведет к еще большему отставанию проекта. В предыдущих статьях рассказывалось о некоторых вещах, которые, по моему мнению, важно учитывать при реализации процесса в организации и коллективе. Но здесь я представлю некоторые анти-шаблоны, которых следует остерегаться, если вы решили заняться регулировкой процесса в своем коллективе. Описание анти-шаблонов процесса разработки Анти-шаблоны, как и шаблоны, имеют несколько форм, которые используются для того, чтобы их описывать. И, как и в отношении шаблонов, не существует универсального соглашения об их описании. Для наших целей мы будем использовать следующий формат описания анти-шаблонов, которые я обнаружил:
Форма, которую я выбрал для представления описания анти-шаблонов, не является уникальной. Я попытался скопировать большую часть идей из книги Organizational Patterns of Agile Software Development (Организационные шаблоны динамической разработки программного обеспечения), авторы Коплин (Coplien) и Харрисон (Harrison). Я рекомендую эту книгу каждому, кто хочет узнать, как повысить эффективность разработки программного обеспечения в организации. Хочу также пояснить, что мой список анти-шаблонов не был проверен эмпирически. Шаблоны отражают мои личные наблюдения, сделанные в организациях и проектах, в которых я принимал участие, был наблюдателем или изучал. С академической точки зрения, это просто исходная точка для более серьезного исследования. Коплин и Харрисон выполнили свою домашнюю работу и провели глубокое изучение шаблонов, которые были представлены в их книге. Я не намекаю, что моя статья заслуживает той же степени доверия, как их статья. Но я, тем не менее, предполагаю, что вы найдете некоторые примеры, которые окажутся созвучными вашему опыту и приведут к разумному решению. Теперь к шаблонам...
Я всегда удивляюсь, как часто проявляется этот анти-шаблон. Мне всегда казалось, что пошаговое введение изменений диктуется обычным здравым смыслом. Несмотря на это, в последние десять лет я наблюдал много организаций, которые пытались внести крупномасштабные изменения в свой способ работы. Причем совершенно не имеет значения, какой процесс они пытались реализовать. Аналогичный феномен я наблюдал в организациях, пытавшихся ввести Rational Unified Process, или RUP, модель технологической зрелости организации института программотехники (CMM) и динамичные процессы, например, eXtreme Programming (XP). Люди хотят верить, что лучший способ внедрить новый процесс - просто прекратить выполнять работу так, как они делали это раньше, и перескочить на новые способы работы. Слишком часто мы отказываемся от ценных методов работы в наших организациях только потому, что они не нашли отражения в новых, лучших, более современных процессах.
У китайцев есть такая пословица: "Дай человеку рыбу, и ты накормишь его на весь день. Научи его ловить рыбу, и ты обеспечишь его пищей на всю жизнь." Аналогичную логику можно применить к модернизации процесса. Скажи сотруднику, как сделать что-то лучше, и он будет делать это, пока ты на него смотришь. Научи его как следует обдумывать и принимать решения по поводу того, какие изменения могут помочь, и он станет хозяином изменений и сделает все сам. Кент Бек (Kent Beck) однажды заметил, что разработка программ - это просто слушание, тестирование, кодирование и проектирование, а тот, кто говорит что-то еще, просто пытается вам что-то продать. Хотя я не могу согласиться с тем, что набор действий по разработке программ исчерпывающий, думаю, что в этом утверждении есть определенная мудрость. Консультанты тоже делают бизнес и кое-что продают - себя. Чем больше вы продаете, тем больше зарабатываете, поэтому если им удастся доказать свою незаменимость, они продадут и заработают больше. Это один из возможных взглядов на положение вещей. Я думаю, что по-настоящему хорошие консультанты по процессам и методологии - это люди, которые хотят помочь вам и вашей организации изучить и усвоить знания, которые у них есть, и помочь вам овладеть ими. Они счастливы, уходя с успешной встречи, на которой вы стали самостоятельными. Такие консультанты работают с вами, а не только для вас.
Когда я носил прозвище "ворчун RUP," у меня была возможность посещать и наблюдать многих потребителей. Одним из самых запоминающихся стал визит на завод Volvo в городе Гетеборг, в Швеции. Борис Карлссон и его сотрудники отвечали за реализацию процесса в группе разработки программного обеспечения. Борис и его коллектив работали над реализацией процесса точно так же, как они выполняли проекты программ. Они собрали требования, запланировали действия, необходимые разработчику для понимания того, как использовать новый процесс, а затем запустили пилотные проекты для различных коллективов разработчиков. Они разработали обучающие модули и программы обучения точно по расписанию и курировали весь коллектив. Это было одно из самых успешных развертываний RUP, которое я когда-либо наблюдал.
Важный момент заключается в том, что каждому члену коллектива предоставляется возможность предложить свои идеи, при этом люди знают, что они будут услышаны. Самый эффективный способ реализовать изменение - это четко описать само изменение, объяснить, почему оно необходимо, и рассказать об ожидаемых преимуществах. Затем надо позволить людям обсудить услышанное, ведь изменение коснется именно их. Оказывается, люди часто имеют идеи, которые могут сделать изменение более эффективным, кроме того, они обнаружат проблемы, о которых вы могли не подумать. Вы должны суметь поблагодарить их за хорошие идеи и не побояться изменить свою точку зрения, столкнувшись с хорошей идеей. Если вам не хватает гибкости мышления, не следует реализовать изменение процесса - здесь нет места для самолюбия.
Эти несколько анти-шаблонов дают нам понимание того, что может пойти не так, если хорошие идеи применяются ошибочным способом. Вы, вероятно, думаете, что их намного больше. Я хотел бы порекомендовать вам прочитать книгу "Организационные шаблоны динамической разработки программного обеспечения" и попытаться подобрать к представленным шаблонам анти-шаблоны. Как минимум, это заставит вас глубже разобраться в самих шаблонах. |