355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Алистэр Коуберн » Люди как нелинейные и наиболее важные компоненты в создании программного обеспечения » Текст книги (страница 1)
Люди как нелинейные и наиболее важные компоненты в создании программного обеспечения
  • Текст добавлен: 28 сентября 2016, 23:27

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


Автор книги: Алистэр Коуберн



сообщить о нарушении

Текущая страница: 1 (всего у книги 3 страниц)

Алистэр Коуберн
Люди как нелинейные и наиболее важные компоненты в создании программного обеспечения

( [email protected]

[Закрыть]
)

Humans and Technology, Октябрь, 1999

Введение

Этот отчет базируется на моем личном опыте, который я приобрел, изучив около 40 проектов за последние 20 лет.

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

Наиболее заметными исключениями из этого правила являются Джеральд Вайнберг (Gerald Weinberg [Wei]) и Том Демарко (Tom DeMarco [Dm]), чьи книги публикуются сейчас в юбилейных (!) изданиях. Их работы так популярны в нашей отрасли, что, казалось бы, они должны были только повысить интерес к этому предмету и вызвать активизацию исследований в этой области. Сейчас все большее количество консультантов начинает относиться к людям как к главному фактору в разработке ПО [B99] [Hi], однако, в целом, сообщество разработчиков программного обеспечения продолжает игнорировать тот факт, что именно человек должен быть центральной темой исследований. Это представляется мне серьезным упущением – все равно, что не принимать во внимание металлические перекрытия в стенах и жаловаться на плохую работу радиоприемника.

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

В течение последних пяти лет я мучительно пытался определить (мне трудно это сделать даже сейчас) "что же находится у меня перед глазами". Постепенно мне стало ясно, что в моем (да и любом другом) методологическом уравнении не хватает одной переменной – влияния на методологию такого понятия как "человек".

Теперь, когда я начал учитывать этот параметр, мои методологические прогнозы и выводы стали соответствовать тому, что я вижу в реальной жизни. Теперь я считаю, что люди – это главный , первоочередной двигатель проекта.

Чем же это отличается от того, что писали в "Peopleware" Демарко и Листер (Lister)? Они высказали мнение, что люди представляют собой важный фактор, и указали на некоторую специфику вопроса. Меня же интересует то, как групповые и индивидуальные особенности человека влияют на проектирование способов разработки ПО (иными словами, на методологии), в применении к различным группам, работающим над разными видами задач.

Мои идеи весьма сходны с теми, которые излагал Вайнберг в главе "Teaming" ("Работа в команде") своей книги "The Psychology of Computer Programming" ("Психология программирования"). Особенно все то, что касается противопоставления двух стилей руководства – управления задачами (task management) и управления поддержкой (maintenance management). Это весьма близко к тому, что пытаюсь получить я – некие характеристики и рекомендации, которые из них следуют. Вайнберг основывается на тех проектах, которые он исследовал в 60-е годы. Однако его выводы остаются справедливыми и полезными и сейчас, 30 лет спустя, что еще раз подтверждает стабильность и важность человеческого фактора в разработке ПО. Мне кажется, уже наступило время тщательно изучить подобные факторы, и начать относиться к следующим из них рекомендациям как к основам разработки ПО, а не открывать их для себя каждые 30 лет.

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

Путь ошибок трудных

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

Проблема 1. Людям, занятым в проекте, совершенно неинтересно изучать нашу систему.

Проблема 2. Они вполне могут обойтись и без методологов, и при этом успешно создавать программное обеспечение. Я ушел от формальных разработок, в то время как мои коллеги выдвинули новую идею: "Вся проблема – в обучении. Все будет хорошо , если мы дадим разработчикам необходимые математические знания гораздо раньше, еще в средней школе". Однако мое знание людей подсказывало, что такое желание неосуществимо. Не то, чтобы я ставил под сомнения очевидные преимущества формальной разработки ПО, просто я сомневался в нашей способности убедить 10 миллионов человек заняться математикой. Правильно было бы поставить вопрос следующим образом: "При каких обстоятельствах и для чего нужно включать в проект специалиста по формальной разработке?"

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

Мы потратили несколько лет, чтобы разработать специальный генератор, трансформирующий диаграммы последовательности и взаимодействия в архитектуру программного продукта и систему правил [Ci]. Многие компании работали (и работают) над сходными задачами, например, выполняемыми конечными автоматами Хэрела (Harel's executable finite state machines) [Ha].

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

Проблема 1. Людям, занятым в проекте, совершенно неинтересно изучать нашу систему.

Проблема 2. Они вполне могут обойтись и без нас, и при этом успешно создавать программное обеспечение. Такое положение дел уже начинало меня беспокоить, и я стал заниматься методологиями разработки ПО (проектировал объектно-ориентированную методологию по заказу IBM Consulting Group (1992-94)). На этот раз, чтобы не наступать на те же самые грабли, я заранее опросил более дюжины различных компаний, которые работали над ОО проектами в различных странах, и тщательно записал все, что они мне рассказали. Изучая эти заметки, я сделал несколько интересных выводов:

Те команды, которые успешно работают над своими проектами, используют инкрементные процессы разработки [Co95]

При проектировании любая техника, сложнее «CRC-карточек» [B87] считается слишком сложной и не используется [Co94].

У тех, кто занимается проектированием, всегда есть возможность отказаться от любого программного продукта или техники, которые им не нравятся. Достаточно сказать начальнику: "Это замедляет работу. Если я буду этим пользоваться, то не уложусь в срок", и он разрешит проектировщикам поступать по собственному усмотрению. В то время это наблюдение не казалось мне особенно важным, но, тем не менее, я его записал и назвал "проектным ограничением" методологии. После этого я разработал весьма привлекательную и, как мне казалось, настолько не формальную, насколько это возможно, методологию и опробовал ее на одном из проектов. Наш опыт описан в документации по проекту Winifred [Co98]. Основной идеей техники проектирования, которую я рекомендовал к использованию, и которой я обучал разработчиков, были CRC-карточки.

Несколько месяцев спустя, я решил, что теперь пора побыть не консультантом, а этнографом, и стал наблюдать за тем, как ведет себя моя команда разработчиков. То, что я увидел, потрясло меня:

Рабочий процесс, который использовала моя команда, был настолько сложным и запутанным, что едва ли его вообще можно было описать. Впрочем, даже если бы мне удалось это сделать, никто бы не смог его повторить [Co98p]. Мою методологию этот процесс напоминал только весьма и весьма отдаленным образом.

Ни один из тех двух дюжин проектировщиков, которых я обучил своей методологии, не использовал CRC-карточки. Другими словами, хотя я и использовал свой «этнографический подход», все равно передо мной стояли:

Проблема 1. Людям, занятым в проекте, совершенно неинтересно изучать нашу систему.

Проблема 2. Они вполне могут обойтись и без нас, и при этом успешно создавать программное обеспечение. Такой процесс повторялся еще несколько раз, и я окончательно разуверился в своей способности "видеть то, что происходит на самом деле". Я мог сказать лишь, что в разработке проекта есть какой-то очень важный аспект, который мы никак не можем вычислить. Не так давно я попробовал решить эту проблему, работая в паре с этнографом. Мне нужна была помощь просто для того, чтобы дать название происходящему [Ho]. Вообще, консультанту хорошо работать вместе с этнографом, однако на этот раз мы едва ли смогли начать работу. Проблема была очень простая и непреодолимая: невозможно сказать, что ты видишь, до тех пор, пока у тебя нет для этого подходящего названия. Было очевидно, что нашему словарю не хватает адекватных понятий.

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

Таблица 1. Проекты и методологии, которые я изучал. Информацию в таблице, разумеется, приходится давать в сокращенном виде. Здесь я указываю год, рабочее название проектов и краткое замечание о каждом из них. Некоторые из проектов описаны в другой литературе. Ссылки на источники указаны в квадратных скобках. 1980 . "CT5". Успешно завершен. 26 человек, 3 года (на год позже, чем нужно), имел для компании решающее значение. Изучен в процессе стажировки, четко определенный макропроцесс, микропроцесс отсутствует.

1986 . Проекты "Cleanroom" [Mi]. Успешно завершены. Федеральный сектор IBM, большие команды разработчиков. Неоднократный успех при использовании тяжеловесной методологии, требующей большой дисциплины. 1986 . Проекты "Sherr" [Br] Успешно завершены. Процесс можно описать следующим образом: "сделай так, что все заработало, но не работай сверхурочно". Основной упор на нестандартные креативные решения, процесс не определен. 1980 . "Broooklyn Union Gas" [Co98]. Успешно завершен. Новая ОО технология, 150 человек, проект для решения критически важных задач. 1992 . "Tracy" [Co98]. Провал. Небольшая команда разработчиков слепо следовала методологии, согласно которой нужно было "моделировать мир, а потом превратить модель в программный код". Был доступ только к случайным пользователям и необученному персоналу. 1992 . "BlackKnight". Успешно завершен. Небольшая команда разработчиков, успешно сочетающая использование пояснительных заметок и активное общение 1992 . "Manfred" [Co98]. Провал. Небольшая команда разработчиков, хромает дисциплина, облегченная методология. "Это мы разработаем потом", провал работы из-за постоянного создания прототипа. 1992 . "CSPITF". Успешно завершен. Небольшая команда разработчиков тщательно контролировала итерации. Облегченный процесс, все сидят рядом. Успешная совместная работа руководителя технического процесса и руководителя проекта. Технический руководитель остался, чтобы реструктурировать внутреннюю структуру кода для следующей команды. 1992 . "OTI" [Co98]. Успешно завершен. Маленькие команды разработчиков. "Дайте хорошему работнику хороший инструмент и оставьте его в покое". Неоднократный успех при работе с облегченной методологией, ориентированной на человека. 1993 . "Reginald" [Co98]. Провал. Команда из двух разработчиков выросла до трех команд в двух разных графствах. Одна из этих команд слепо следовала тяжеловесной методологии с обилием документации, и так и не написала ни строчки кода до закрытия проекта. 1993 . "Ingrid" [Co98]. Успешно завершен. 26 человек, 2 года. Инкрементный макро процесс, микро процесс отсутствует. Первый инкремент потерпел неудачу. Заменили всех программистов, с течением времени выработали облегченную методологию, с упором на коммуникации. 1993 . "Synon in NZ". Успешно завершен. Руководитель проекта утверждал, что успех был обеспечен тем, что "четыре человека работали в одной комнате и использовали быстрый итеративный инструментарий", и что это не подходит таким проектам, где разработчики не могут свободно общаться между собой. 1994 . "Udall" [Co98]. Успешно завершен. Поначалу работала большая команда разработчиков, и потерпела неудачу. Успех обусловлен тем, что "начали с нуля и сделали из плохой большой команды маленькую, но хорошую". 1995 . "Winifred" [Co98]. Успешно завершен. 45 человек, 20 месяцев. Успех обеспечили "инкрементность разработки, хорошо поставленная коммуникация и несколько очень хороших работников". Использовался макро процесс, микро процесс отсутствовал. Успешное применение средней по весу методологии, ориентированной на коммуникацию. 1996 . "Reel". Провал. 150 человек, которым было велено обновлять всю документацию при каждом изменении в проекте. Проект закрыт. Один из участников разработки подвел итог: "Сколько не старайся, плохая методика все равно даст плохой результат". 1997 . "Caliper". Провал. 90 человек, проект имел для компании решающее значение. Прошло уже шесть лет, но даже первая основная версия проекта до сих пор не сдана. Слишком смелые ожидания, новые технологии, отсутствие инкрементной разработки, на всех позициях персонал, не обладающий адекватными рабочими навыками. 1997 . "NorgesBank". Опрошено шесть команд разработчиков. Все повторяют приблизительно одно и то же: "Успех обеспечен хорошей коммуникацией, как в самой команде разработчиков, так и между разработчиками и пользователями". 1998 . "C3" [C3]. Успешно завершен. После первого провала 26 человек решили заменить восьмью. Extreme Programming [EP]. Успешное применение в небольшой команде методологии, требующей высокой дисциплинированности от сотрудников. Основной упор – коммуникация. 1998 . "NB Banking". Успешно завершен. Проект, изначально рассчитанный на трех человек и два месяца работы, неожиданно вырос до 10 человек, которые проработали 14 месяцев. Связь при помощи видео. Не понравилась. Макро процесс, микро процесс отсутствовал. Успеха удалось достичь при помощи "инкрементных разработок, правильно подобранных людей и хорошей коммуникации". 1998 . "M.A.D". [Ch]. Успешно завершен. Небольшая команда разработчиков занималась изучением окружения конечных пользователей и использовала прототипы. Удачное использование методологии, основывающейся на создании прототипов и коммуникации. 1998 . "Insman". Успешно завершен. В команде шесть человек, использовалась методология "Crystal(Clear)" [Co00]. Успеха удалось достичь благодаря особому упору на "тесном общении, моральном духе команды, итерациях длиной в три месяца и обучении разработчиков". 1999 . "Cinch". Продолжается в настоящее время. 40 человек работают вместе, однако при этом еще требуются формальные сдачи работ. Все осознают цену написания документации, однако пока не могут перейти на более индивидуальный подход (непонятно почему – из-за личных качеств, по привычке или же в этом виновата культура?). 1999 . "Hill AFB TSP1" [Web]. Успешно завершен. Семь человек, CMM 5-го уровня, используется PSP/TSP. Небольшая команда успешно использовала ориентированную на процесс методологию, в которой требовалось соблюдение строгой дисциплины.

Что меня удивило во всех этих проектах? То, что они ясно свидетельствуют о следующем:

Практически любую методологию можно с успехом применять в каком-нибудь проекте.

Любая методология может привести к провалу проекта.

Тяжеловесные методологии тоже могут успешно применяться в работе.

Облегченные методологии чаще приводят к успеху, и, что более важно, разработчики сами говорят, что успех проекта был обеспечен именно методологией. Я не нашел ни одной теории, которая объяснила бы, почему облегченные методологии (те, в которых мало места уделяется всяческим формальностям), чаще приводят к успешному завершению проекта, нежели тяжелые методологии, где формальности играют очень большую роль (случайные исключения в нашем списке составляют только Cleanroom и PSP/TSP). Конечно, плохой руководитель – весьма существенный фактор, который сильно влияет на весь ход работ, однако его нельзя отнести к методологии. Впрочем, даже если учитывать и качество руководства проектом, все равно достоверных прогнозов не получится.

И тут я наконец-то понял, что прямо перед нами всегда находится нечто, чего мы не замечаем: люди. Именно человеческие качества обеспечивают успех тому или иному проекту, именно они являются фактором первостепенной важности, основываясь на котором надо строить прогнозы о проекте. Теперь я рассматриваю все в обратном порядке – сначала люди, а потом методология, как второстепенный показатель.

Весь мой опыт консультанта можно было бы описать, исходя всего лишь из нескольких свойств человеческой натуры. Теперь, применяя свои знания на практике, я могу гораздо лучше прогнозировать развитие проектов и давать гораздо более полезные рекомендации. Мне кажется, пришло время официально признать, что главным в исследованиях должен быть вопрос: "Какими качествами обладают люди, которые занимаются разработкой программного обеспечения, и какое влияние они оказывают на проектирование методологии?"

Четыре основных свойства

Люди – устройства активные, и у них есть режимы успешной работы и режимы сбоя. Вот несколько основных таких режимов, которые я определил, и которыми пользуюсь и по сей день:

Человек – существо, которому необходимо общение. Причем общаться он предпочитает в режиме непосредственного диалога, лично, по типу «вопрос-ответ».


Человеку трудно постоянно работать сверхурочно.

Человек – существо изменчивое, он меняется в зависимости и от времени, и от пространства.

 
Как правило, у человека есть чувство гражданского долга, он может хорошо ориентироваться в ситуации, брать инициативу в свои руки и делать «все, что необходимо» для того, чтобы проект завершился успешно.
Есть и ряд других характеристик, которые я не буду описывать здесь подробно:
 

Человеку нужно время, как на размышление, так и на общение (см. [Co98], [Cs], [Dm]).

Человек хорошо работает, опираясь на примеры (этот тезис требует дальнейшего изучения, см. [J-L]).

Человек предпочитает скорее потерпеть неудачу из-за своего консерватизма, нежели рискнуть, но сделать что-то необычным образом [Pi]; ему больше нравиться изобретать, а не находить готовые решения, он может одновременно держать в голове совсем немного сведений, он делает ошибки и с трудом меняет привычки.

Отдельная личность может легко возобладать над проектом.

Способность человека выполнять те или иные задания в большей степени определяется его личными качествами.


    Ваша оценка произведения:

Популярные книги за неделю