Practices of an Agile Developer Working in the Real World Venkat Subramaniam Endy Hunt Этюды на тему быстрой разработки программного обеспечения Работа в реальном мире Венкат Субраманиам Энди Хант Venkat Subramaniam, Endy Hunt Practices of an Agile Developer Working in the Real World ISBN 0-9745140-8-X © Венкат Субраманпам, Энди Хант Этюды на тему быстрой разработки программного обеспечения Работа в реальном мире Переводчик Е. Лукач Корректор Л, Белая Верстка Ю. Кунашовой © Издательство “Лори”, 2009 Изд. ХЬ ; OAJ (03) ЛР № : 07612 30.09.97 г. ISBN 978-5-85582-299-1 Подписано в печать 01.01.2009 Формат 70x100/16 Бумага Гарни тура Баскервиль. Печать офсетная офсет«N? ]. Печ. л. 13. Тираж 1000. Заказ № 45 Цена договорная Издательство “Лори” Москва, 123100, Шмитовский пр., д. 13/6, стр. 1 (пом. ТАРП ЦАО) Телефон для оптовых покупателей: (495) 256-09-83 Размещение рекламы: (495) 259-01-62 www.lory-press.ru Отпечатано в типографии ООО “Тиль-2004” 107023 Москва, ул. Электрозаводская, д. 21 Отзывы читателей о книге “Этюды на тему быстрой разработки программного обеспечения” Разделы “На что это похоже” просто бесценны: одно дело — рас сказать о том, что нужно делать, и совсем другое — применить все это на практике и быть уверенным в том, что вы все делаете пра вильно. Натаниэль Т. Шутта, Один из авторов книги “Принципы Ajax” В этой книге есть все, что читатель ждет от серии Pragmatic Bookshelf (Книжная полка прагматика): она небольшая по объему, легко читается, глубокая, по-настоящему полезная; авторы докапы ваются до самой суги. Она будет важным подспорьем для людей, стремящихся освоить гибкие подходы к разработке ПО, Форрест Чанг, Ведущий разработчик ПО С первой страницы книги меня не отпускала мысль: “Вот здоро во, именно такой книги не хватало многим разработчикам". Я сразу понял, что и мне ее не хватало. Я настоятельно рекомендую ее раз работчикам любого уровня знаний и опыта. Гуэрри А. Семонес, Старший инженер ПО, Appisiry В книге авторы, руководствуясь здравым смыслом и собствен ным опытом, показали, почему следует серьезно рассмотреть воз можность применения гибких методик в проектах. Это именно та сугубо практическая, экспериментальная информация, которую наиболее трудно почерпнуть из книг. * Мэттью Джонсон, Ведущий инженер ПО Некоторые из описанных практик мне были известны и преж де, поскольку я читал и другие книги серии Pragmatic Bookshelf, по эта книга содержит много новых идей и представляет их в ясном, компактном, упорядоченном формате. Я бы настойчиво рекомен довал эту книгу начинающему разработчику или группе разработ чиков, желающих стать “гибкими”. Скотт Сплавек, Старший инженер ПО В условиях массового распространения гибких методик в отрас ли необходимо понимать, в чем же на самом деле заключается “гиб кость”. Эта книга в компактной и практичной форме указывает путь к ее достижению. Марти Хот, Инженер/архитектор ПО, Razorstream Возможно, вы и прежде слышали о гибких методиках и даже спрашивали себя, что нужно сделать, чтобы с каждым днем работа улучшалась. Мой ответ таков: прочитайте эту книгу и позвольте ан гелам нашептать вам на ухо наиболее подходящие вам практики. Дэвид Лазаро Саз, Разработчик ПО Это, действительно, всесторонний и притом верно нацелен ный и компактный обзор основных практик гибкой разработки. Что мне нравится более всего в этой книге — это то, что она не вы двигает на передний план какую-то одну agile-методологию, а ско рее увязывает общие для различных методологий принципы в единую систему. Эта книга нужна всем тем, кого интересуют быст рые и надежные пути создания “чертовски” хороших программ ных продуктов. Мэттью Басс, Консультант в области ПО Это превосходное продолжение The Pragmatic Programmer! Билл Клеб Научный сотрудник, NASA Содержание Глава 1. ГИБКАЯ РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 1 Глава 2. НАЧАЛА ГИБКОСТИ..............................................................11 1 Работайте на результат.......................................................13 2 Быстрая правка не решает проблем.................................16 3 Критикуйте идеи, а не людей............................................19 4 К черту торпеды, идите вперед.........................................25 Глава 3. ВЗРАЩИВАНИЕ ГИБКОСТИ................................................28 5 Всегда будьте в курсе.........................................................30 6 Повышайте уровень своей команды.................................34 7 Умейте вовремя разучиться..............................................37 8 Спрашивайте до тех пор, пока не поймете......................40 9 Почувствуйте ритм............................................................43 Глава 4. ДЕЛАТЬ, КАК ХОТЯТ ПОЛЬЗОВАТЕЛИ............................47 10 Позвольте заказчику принимать решения......................49 11 Дизайн должен направлять работу, а не диктовать 52 12 Обоснованно применяйте технологию...........................57 13 Держите все наготове........................................................60 14 Интегрируйте сразу, интегрируйте часто......................64 15 Автоматизируйте процесс развертывания сразу...........67 16 Наладьте регулярную обратную связь при помощи демонстрационных версий..............................................70 17 Используйте короткие итерации, постепенно добавляйте функциональность.........................................76 18 Фиксированные цены мешают выполнению обещаний ............................................................................81 Глава 5. ГИБКАЯ ОБРАТНАЯ СВЯЗЬ.............................................85 19 Посадите ангелов себе на плечи......................................87 20 Используйте код до сборки..............................................92 21 Различия имеют значение.................................................97 22 Автоматизируйте приемочные испытания...................100 23 Измеряйте фактическое продвижение.........................103 24 Прислушайтесь к пользователям....................................106 Глава 6. ГИБКОЕ ПРОГРАММИРОВАНИЕ.....................................108 25 Программируйте осмысленно и выразительно...........110 26 Говорите самим кодом........................................................116 27 Активно анализируйте все плюсы и минусы.................122 28 Пишите код инкрементами...............................................126 29 Следите за простотой кода...............................................128 30 Пишите связный код..........................................................131 31 Говорите, не спрашивайте...............................................135 32 Замените, сохраняя контракт.........................................138 Глава 7. ГИБКАЯ ОТЛАДКА.................................................................143 33 Ведите журнал решений.................................................145 34 Предупреждения фактически являются ошибками 148 35 Атакуйте проблемы в изоляции......................................152 36 Сообщайте о всех исключительных ситуациях...........155 37 Обеспечьте содержательные сообщения об ошибках 158 Глава 8. ГИБКОЕ СОТРУДНИЧЕСТВО...........................................163 38 Наладьте регулярное очное общение...........................165 39 Архитекторы должны писать код....................................169 40 Практикуйте коллективную собственность...................172 41 Будьте наставником.........................................................174 42 Позвольте другим найти ответ......................................177 43 Регистрируйте лишь готовый код.................................179 44 Проводите ревизию кода.................................................182 45 Информируйте других....................................................185 Глава 9. ЭПИЛОГ: ДВИЖЕНИЕ К ГИБКОСТИ.............................187 Приложение А. Ресурсы..........................................................................194 А.1 Интернет-ресурсы............................................................194 А.2 Библиография....................................................................197 Даже если ты далеко ушел по неверному пути - поверни назад. Турецкая пословица Глава 1 Гибкая разработка программного обеспечения Турецкая пословица, взятая в качестве эпиграфа, кажется простой и вполне очевидной — можно даже предположить, что такое прави ло всегда должно выполняться в процессе разработки ПО, По, увы, слишком часто разработчики, включая скромных авторов книги, продолжают идти по ложному пути в надежде, что в конце концов все у них получится неплохо. Возможно, верный путь пролегает где-то рядом. Возможно, избранный путь совсем не так плох, как кажется. Он даже временами удобен — если бы процесс создания кодов был бы столь же линейным и предсказуемым, как дорога, о которой говорится в пословице. К сожалению, это не так. Процесс разработки программного обеспечения больше похож на серфинг — та же динамичная, постоянно меняющаяся среда. Море всегда непредсказуемо, порой опасно, в его водах скрывают ся акулы. Но серфинг потому и захватывает дух, что все волны раз ные. Каждая волна имеет свою уникальную форму и поведение в за висимости от того, где она находится: например, волна на песчаной отмели совсем не похожа на волны, разбивающиеся о рифы. В процессе разработки программного обеспечения вы сталки ваетесь с новыми требованиями заказчика и решаете различные задачи — они бесконечны и непостоянны, как морские волны. По добно волнам, программные проекты принимают различную фор му и создают на вашем пути разнообразные препятствия в зависи мости от области, в которой вы работаете, или типа приложения. И акулы различных мастей не заставляют себя долго ждать. Успех программного проекта зависит от профессиональных на выков, опыта и компетентности всей команды разработчиков. Как и успешный серфер, разработчик должен быть в хорошей техниче ской форме, быть уравновешенным и гибким. Гибкос ть (agility) в обоих случаях означает способность быстро адаптироваться к лю бому повороту событий, будь то внезапно разбившаяся волна или неожиданное изменение дальнейшего плана работы. Манифест Agile-разработки ПО (The Agile Manifesto) (перевод взят на сайте www.silicontaiga.ru. — Прим. пер.) Мы находим лучшие подходы к разработке ПО, непосредственно участвуя в процессе разработки и помогая другим. В процессе работы мы пришли к тому, что для нас важнее: • Люди и их взаимодействие, чем процессы и средства • Работающее ПО, чем исчерпывающая документация • Сотрудничество с заказчиком, чем обсуждение условий контракта • Реагирование на изменения, чем следование плану То есть мы не ставим под сомнение важность пунктов справа, в то же время для нас гораздо важнее записанное слева. Более подробная информация размещена на сайте agilemanifesto.org.ru. Дух гибкости Итак, что же такое гибкость на самом деле, и откуда берет начало движение гибкой разработки программного обеспечения? В феврале 2001 г. семнадцать заинтересованных человек (вклю чая Энди Ханта) собрались на лыжном курорте в горах Юты, что бы обсудить новые тенденции в разработке ПО, которые еще не формально называются “легковесными” процессами. Все мы были свидетелями неудач проектов из-за тяжеловесных процессов, которые используют чрезмерно много артефактов и приносят слишком мало реальной отдачи. Мало кто сомневался в том, что необходима новая методология, которая делала бы упор на наиболее важных аспектах разработки, а не на второстепенных, отнимающих слишком много времени и мало влияющих на конеч ный результат. Эти семнадцать человек придумали термин agile (живой, под вижный, гибкий) и выпустили Agile Manifesto (Манифест гибкой разработки), в котором изложили новый подход к разработке про граммного обеспечения, подход, который ставит во главу угла лю дей, сотрудничество, адаптивность и работающий код (начало Ма нифеста приводится на врезке). Гибкий подход предполагает быстрое реагирование, взаимо- действие людей и их нацеленность на осязаемые результаты