Философия DevOps. Искусство управления IT Дэвис Дженнифер
Полезно также узнать, в каких проектах задействовано несколько команд, а в каких – всего лишь одна команда. Если в работе принимает участие несколько команд, делают они это одновременно либо одна команда завершает свою часть работы, а затем «перепоручает» оставшееся другой команде? Подобные перепоручения не всегда плохи, скорее это признак недостаточной степени внедрения совместной работы на протяжении всего процесса. В этом случае нужно исследовать рабочий процесс на предмет возможных улучшений. Если проект выполняется одной командной, то отсутствие сотрудничества между командами не страшно. Но если результаты выполнения проекта будут использоваться другими командами либо влиять на них, найдите способы привлечения этих команд.
«Возврат долгов» сообществу
Большая часть преимуществ, связанных с devops-движением, обеспечивается его сообществом. Это сообщество представляет собой группу практиков, которые собираются вместе, чтобы поговорить о работе и способах ее выполнения. В наши дни отсутствует завеса секретности, скрывающая технологии и методики, имевшая место в предыдущие десятилетия. Фактически некоторые из самых известных компаний, работающие в этом пространстве, в течение многих лет говорят не только о своих успехах, но и о неудачах.
Компания Etsy, известная своим техническим блогом Code и многочисленными инструментами, основанными на программах с открытым кодом, в том числе StatsD, называет эту идею «щедростью духа». Эта «щедрость» подразумевает написание постов в публичном блоге, выступления на отраслевых конференциях либо участие в создании программ с открытым кодом. Также сотрудникам предлагается принять участие хотя бы в одном мероприятии в течение года. Это позволяет убедиться в том, что эти люди продолжают приносить прибыль и «возвращать долги» сообществу. Любая организация, которая получает и использует полезные сведения, полученные на основе выступлений на конференциях, постов блогов, собраний или проектов с открытым кодом, должна приложить усилия для «возврата долгов» в натуральной форме.
Участники сообщества не прочь поделиться своей работой и идеями в свободной и открытой форме, что приводит к укреплению сообщества и повышает его ценность. Люди делятся идеями с помощью таких средств общения, как Twitter, LinkedIn, а также выступают на разных встречах и конференциях. Это позволяет сформировать отношения и связи, которые были бы невозможны в иных случаях. Откройте для себя новые решения и познакомьтесь с новыми идеями. Не тратьте зря время на решение проблем, которые уже были решены до вас (во многом благодаря использованию программ с открытым исходным кодом). Это позволит вам более эффективно использовать коллективное время и усилия.
Как уже упоминалось ранее в этой главе, частично успех сообщества определяется тем, что к плохим исполнителям, которые руководствуются соображениями личной заинтересованности за счет всей группы, могут быть применены санкции. Если поведение, недопустимое в условиях совместной работы, осуждается сообществом, а также проявляется «благородство духа» со стороны других организаций, тогда люди будут продолжать делиться знаниями и опытом с сообществом. Если же подобный обмен будет утерян, это нанесет удар по всей отрасли в целом.
«Мне нравится, что существует возможность сократить время разработки с помощью примеров использования, например функции обзора. Это позволяет улучшить впечатление конечного пользователя от нашего сервиса. На основе анализа нашего текущего графика я пришел к выводам о том, что мы можем потратить немного времени на оценку и разработку прототипа, если это целесообразно», – сказал Хедвиг после завершения демонстрации.
«Я обладаю минимальным опытом работы с MongoDB. Мне нужно согласовать все это с остальной частью команды, выяснить, каким опытом они обладают и насколько сложно будет принять новый проект, – предупредил Джордж. – Как инженер эксплуатации из Sparkle Corp, обладающий небольшим опытом работы, я не хочу поручать сомнительную работу эксплуатационной команде».
«Давайте оставим эту оценку открытой и будем поддерживать общение. Джордж, пожалуйста, подключи к этому проекту Джорди, Джози и Элис. Я буду координировать свои действия с руководством эксплуатационной команды, чтобы гарантировать участие обеих команд в процессе принятия решений, как только у нас будет больше информации», – сказала Дженераль.
Формирование и поддержание открытых, доверительных и коммуникативных отношений важны как для отдельных сотрудников, так и для групп, работающих вместе. Членство в определенной группе имеет большое влияние на нашу личность. В свою очередь, личность влияет на то, как мы взаимодействуем и работаем с людьми, основываясь на представлениях о членах нашей группы.
Ключ к созданию организации либо целой отрасли, способной к сотрудничеству, заключается в поиске способов разрушения барьеров между группами, а также расширения определения членства в группах. В результате обеспечиваются условия для роста и более свободного перемещения рабочих заданий, информации и идей между отдельными сотрудниками, командами и даже компаниями. Обмен историями и идеями между разными командами в организации и даже между организациями повышает степень доверия, приводит к большему числу инноваций, а также помогает поддерживать общее взаимное понимание критически важных факторов для devops-среды.
Глава 10. Заблуждения и устранение проблем
В области близости возникают, как правило, те же заблуждения и проблемы, что и в области индивидуального сотрудничества и общения, только на более высоком организационном уровне.
Люди часто имеют разные представления об обязанностях и вкладах разных команд, созданных внутри организации, а также о степени влияния близости и общего доступа к информации в devops-среде.
Разработчики более ценны, чем специалисты по эксплуатации
Убеждения относительно разной ценности команд, сформированных в одной компании, весьма устойчивы. Причем независимо от профиля этих команд. Отчасти эти убеждения связаны с разным восприятием материальной и нематериальной работы. Результат труда разработчиков в виде готовых программ, представленных клиенту, намного более материален, чем ежедневная кропотливая работа или те же макеты, продемонстрированные командой дизайнеров. Обычно рутинная работа по эксплуатации становится заметной лишь в том случае, когда она плохо сделана либо вообще не сделана. Только представьте себе последствия простоя сайта или общения с невежливым инженером из службы поддержки! И поскольку людям свойственно помнить плохое, то и отношение к эксплуатационным командам часто основывается на негативных воспоминаниях.
Сила организационной близости и связей между командами состоит в том, что команды не создают друг другу проблем, а, наоборот, оказывают взаимную помощь и поддержку. Эксплуатационные команды (или технические команды) могут мешать разработчикам в развертывании кода, а могут и помогать в создании тестовых сред. Если разработчики активно помогают заказчикам в развертывании и тестировании программ, то в результате позитивного вклада эксплуатационного отдела заказчики смогут получить намного больше. В этом случае разработчики смогут уделить больше внимания индивидуальной настройке программ и устранению неисправностей, не дожидаясь медленного и чреватого проблемами процесса развертывания или не пытаясь тестировать результаты внесенных изменений вне выделенной среды тестирования или разработки.
Благодаря участию в собраниях специально сформированных эксплуатационных команд либо групп, которые состоят из обычных сотрудников или менеджеров, облегчается анализ деятельности разных подразделений организации. Это первый шаг на пути к устранению заблуждений относительно бездеятельности или бесполезности отдельных команд. Конечно, вполне возможно, что какие-то команды делают намного меньше, чем могут, но это скорее вопрос организационного плана, а не оценки ценности отдельных команд или участников.
По мере роста и изменения организаций изменяется смысл и назначение разных команд или продуктов, производимых этими командами. Следите за тем, как согласуются разные команды и выполняемая ими работа в контексте организации в целом. Но при этом не упускайте из виду смысл этой работы.
Утечка информации за пределы организации ослабляет конкурентные преимущества
Современные рабочие места носят высококонкурентный характер, поэтому вполне естественно, что никто не хочет совершать действия, которые нивелировали бы конкурентные преимущества. Руководствуясь подобными соображениями, многие компании запрещают своим сотрудникам выступать на профильных конференциях либо участвовать в проектах создания программ с открытым исходным кодом. Они опасаются, что, поскольку программы с открытым исходным кодом распространяются бесплатно, будет упущена возможность заработать на продажах, ну а выступления на конференциях будут способствовать передаче ценной информации конкурентам. К тому же подобные выступления происходят за счет времени, которое могло бы быть потрачено на «реальную работу».
Однако в конечном счете инструменты и методики, о которых обычно докладывают на презентациях и конференциях или которые применяются в проектах по разработке ПО с открытым кодом, поддерживаемых devops-сообществом, являются неприбыльными. Например, фирма Target является ритейлером, получающим прибыль в результате продажи потребителям реальных продуктов. Выступление на конференции с докладом о разработке программного обеспечения, на основе которого развертывается дружественный потребителям веб-сайт, никоим образом не вредит продаже программных продуктов. Сотрудники этой фирмы выступают с докладами на конференциях devopsdays и других отраслевых конференциях. Они рассказывают о методах создания и поддержки конкурентоспособной среды, но в этом нет ничего страшного, поскольку среди слушателей нет представителей конкурентов.
Это движение началось с сообщества, в котором люди делились проблемами и способами их решения. Разработчики и системные администраторы делились актуальными проблемами в культурной и технической сфере, которые нередко носили абстрактный характер. С учетом трудностей, связанных с поиском технических талантов, ограничения на участие сотрудников в профессиональных сообществах приводят к снижению привлекательности вакансий в вашей компании по сравнению с конкурентами.
Зачастую поиск и устранение проблем, связанных с близостью, осуществляется косвенным образом. В этом разделе будут предложены некоторые общие советы по идентификации и устранению некоторых общих проблем, которые могут возникать при создании и поддержке открытой культуры сотрудничества на всех уровнях организации.
Один или несколько сотрудников нарушают групповой рабочий поток
В предыдущей главе уже упоминалось о том, что групповой рабочий поток отличается от рабочих потоков отдельных сотрудников. Некоторые люди, в силу своего доминантного или высокомерного поведения, носящего как физический, так и словесный характер, могут нарушать групповой рабочий поток. Порой эти люди считаются ключевыми исполнителями организации, поэтому не подлежат критике. Подобную ситуацию они воспринимают как молчаливое согласие и даже одобрение их действий.
Помимо негативного влияния на групповой рабочий поток, подобное разрушающее поведение может вызвать стресс и разочарование, приводящие к увольнению других сотрудников команды. Примеры разрушительного поведения включают издевательства, оскорбительные выражения (в словесной форме или в виде сообщений электронной почты), унижения, отвод взгляда при встрече, уклонение от встреч, отказ от наставника, отказ от помощи другим сотрудникам, швыряние предметов и запугивание. Понимание способов реагирования на подобное поведение заключается в выяснении причин появления деструктивных форм поведения. К подобным причинам относятся динамика власти, агрессия, вызванная разочарованием, и конфликты.
В эффективных организациях признается ценность командной работы и сотрудничества. Первый шаг на пути к устранению проблем заключается в подтверждении намерений о борьбе с подобным деструктивным поведением путем информирования о его последствиях. Убедитесь в том, что в организации налажено распространение информации и созданы условия для безопасного сообщения сведений о нарушениях. Исключите условия, способствующие формированию страха перед возможным возмездием. Разработайте нормы, определяющие допустимые и недопустимые типы поведения, а также способы управления этими видами поведения. Используйте материалы сайта Geek Feminism (http://geekfeminism.wikia.com/wiki/Code_of_conduct_evaluations) в качестве руководства при выработке таких норм.
В случае нарушения норм поведения должен быть сделан акцент на поведении, а не на человеке. Люди не всегда осознают, какое воздействие могут оказать сказанные ими слова или их поведение. Отдельные сотрудники нуждаются в понимании прямой связи между своим поведением и его влиянием на других людей. Если поведение сотрудников не изменяется и имеют место повторные нарушения, нужно предпринять дополнительные меры. В зависимости от местоположения вашей компании могут быть доступны разные варианты. Например, можно провести тренинги по умению владеть собой или обучение наставничеству. Если причина появления проблем заключается в хроническом стрессе, испытываемом на рабочем месте, идентифицируйте источники стресса, например проверьте, предоставлялся ли сотрудникам отпуск. Если проблема возникла из-за конфликта, выполните действия, направленные на устранение конфликта (возможно, с участием посредников).
Если предпринятые меры не помогают в устранении проблемы, переведите сотрудника в другую команду, изыщите возможности по отказу от командной работы либо разрешите сотруднику уволиться. Далеко не всегда увольнение сотрудника – это плохо. Гораздо хуже постоянно предоставлять поблажки людям, не способным и не желающим работать с другими людьми. Это создаст негативный прецедент, который позволит другим членам команды судить о допустимости негативного поведения.
Одна команда блокирует работу других команд
Если вы пришли к выводу о том, что одна команда или группа мешает работать другим командам, сначала изучите факторы, приводящие к подобной блокировке. Если команда постоянно нарушает сроки сдачи проектов, это может быть связано с недостаточным объемом ресурсов, необходимых для выполнения этой работы. Обратимся к ранее упомянутому примеру отдельной группы сервисных инженеров. В зависимости от размера группы, от количества рабочей нагрузки поддерживаемых команд и от величины рабочей нагрузки может не хватить людей, времени или навыков.
Часто причиной блокировки работы становятся команды, которые не полностью понимают проблемы, проекты или требования других команд, особенно если различные группы имеют разные цели, приоритеты и ключевые показатели эффективности, которым они должны соответствовать. То, что критически важно для одной команды, может быть совершенно несущественным для другой команды. Это приводит к изменению приоритетов для выполняемой работы. Подобные проблемы могут вызываться недостатком общения. Если работа переходит из рук в руки путем простого перепоручения, новые исполнители работы не будут обладать контекстом, позволяющим осознать важность этой работы. Поэтому при выборе новых исполнителей работы предоставьте им соответствующую информацию.
Даже при наличии общения могут иметь место недоразумения. Обе вовлеченные в общение команды должны удостовериться в том, что достигнут максимально возможный уровень понимания предстоящих действий, известны сроки сдачи работы и требования. Также следует понимать, почему нужна эта работа, и знать о выдвигаемых приоритетах. Чем раньше будут устранены возникшие недоразумения, тем реже будут возникать блокировки и задержки в работе.
Следует понимать, что работа может быть не выполнена в силу политики компании, раздачи невыполнимых обещаний, из-за технических ограничений или каких-либо других причин. В зависимости от среды организации эти причины не всегда очевидны. Некоторые люди или представители отдельных культур не могут прямо отказать в ответ на какое-либо предложение. Поэтому обращайте внимание на культурные отличия и используйте методы невербальной коммуникации.
Существуют и другие факторы организационной среды, которые способствуют скорее формированию конкурентоспособной атмосферы, чем сотрудничеству или совместной работе. Если две команды конкурируют непосредственно за ресурсы, например за бюджет или общее количество сотрудников, и этим командам присущи разные цели и показатели, у них почти нет мотивации помогать друг другу. Если вы столкнулись с подобным случаем, придется предпринимать меры на организационном уровне, а не на уровне отдельного сотрудника или команды.
Непосредственная связь может иметь большое значение при устранении многих причин возникновения блокировок, но важно вступать в разговоры при наличии правильного отношения. Если у вас, например, возникает чувство, что кто-то осознанно работает против вас, нетрудно предположить, что эти люди руководствуются злым умыслом или же просто некомпетентны. Произносимые вами слова и выполняемы вами действия будут продиктованы этими предположениями. С другой стороны, если люди чувствуют себя как на допросе либо ощущают, что их работа не ценится, они могут начать огрызаться. В результате могут формироваться циклы дисфункционального или пассивно-агрессивного поведения. Чтобы достичь взаимопонимания, обе стороны должны придерживаться следующего правила: все они работают в одной и той же компании, имеют одни и те же цели. Также стороны должны попытаться откровенно и непосредственно поговорить, чтобы повторно оценить ситуацию и общие ожидания.
Некоторые команды чувствуют себя недооцененными
Как уже упоминалось в этой главе, в технических компаниях имеет место переоценка разработчиков за счет других, менее «гламурных» или не столь популярных команд или ролей. Естественно, что это может вызвать негодование у сотрудников команд «второго сорта», которые будут чувствовать предвзятое к себе отношение. Тем более, что для успешного ведения бизнеса важны не только программисты, но и другие люди, вовлеченные в процесс создания ПО.
Конечно, существуют плохо контролируемые экономические факторы, которые управляют такими сущностями, как зарплаты, но зато в компаниях обычно хорошо контролируются льготы, преимущества и признание. Разработчики и люди, исполняющие другие инженерные роли, часто получают бюджетные средства, выделенные на конференции, командировки и другие подобные цели. Все это способствует развитию профессиональных навыков и карьерному росту. Удостоверьтесь в том, что подобные возможности предоставляются не только разработчикам.
Если в вашей компании проводятся встречи, на которых инженерам в целях стимулирования раздается высококачественная брендовая продукция, найдутся отделы, которые почувствуют себя обделенными. Сотрудники, которые не являются инженерами, также захотят приобщиться. Вряд ли сэкономленные на этих людях футболки или толстовки помогут вашей компании, скорее они серьезно подорвут моральный климат. И конечно, брендовая продукция должна учитывать специфику сотрудников компании – пол, возраст, анатомические особенности. Счастливые обладатели удобных футболок будут петь дифирамбы компании-благодетелю.
Ранее уже рассматривалась важность наличия пространства, требуемого для развития культуры близости, поскольку в этой области часто наблюдается дисбаланс. Сотрудники, которые целый день проводят за рабочими столами в офисе, подвержены риску заболеваний независимо от того, пишут они код либо отвечают на звонки пользователей. Поэтому позаботьтесь о лучших стульях, хорошо освещенных офисных помещениях и эргономических столах, за которыми можно работать стоя, для всех сотрудников, а не только для инженеров. Также уделите внимание наличию конференц-залов и других общих рабочих пространств, которые бы в равной мере были доступны для всех сотрудников.
И наконец, обращайте внимание на то, сколь часто поощряются команды и отдельные сотрудники. И неважно, проявляется подобное поощрение в форме профилей в блоге или на странице компании, поздравлений по случаю завершения проекта или приглашений на ежеквартальные корпоративные встречи. Для многих людей получение поощрения в награду за приложенные усилия и достижения способствует чувству удовлетворения. Они с удовольствием будут выполнять самую тяжелую работу, если получат за это вознаграждение, пусть даже не слишком значительное.
Мы выступаем против отношения к разработчикам как к «рок-звездам». Еще хуже, когда столь восторженное отношение к разработчикам сочетается с игнорированием других команд и организаций. Это способствует росту недовольства и не настраивает на сотрудничество.
Люди не склонны доверять друг другу
Поощрять, развивать и поддерживать доверие очень сложно, особенно в среде, в которой его не было изначально. Доверие со стороны коллег, менеджеров или начальства должно быть заработано. Не стоит требовать доверия, чтобы потом злоупотреблять им. Если в вашей среде отсутствует доверие, это, скорее всего, связано с культурными проблемами, которые должны быть устранены.
Формирование доверия невозможно в культуре, основанной на наказаниях. В подобной культуре за ошибки наказывают, не делая выводы для избежания повторения ситуации. Культуры, основанные на наказаниях, и безупречные культуры уже рассматривались в частях I–II. Если вы испытываете трудности с формированием доверия в организации, обратитесь к этим частям книги. Если же в вашей организации только начинает осуществляться переход от культуры, основанной на обвинениях, к безупречной культуре, учтите, что на него потребуется время. Понадобится больше времени на восстановление утраченного доверия, чем на формирование доверительных отношений «с чистого листа». Культура не может измениться в лучшую сторону в течение одной ночи.
Открытое общение на всех уровнях организации является критически важным для формирования доверия. Если менеджеры и руководители действуют втайне, находясь за закрытыми дверьми в прямом и переносном смысле этого слова, бесполезно требовать от остальных сотрудников открытости и честности. Недостаточно просто провозгласить политику открытых дверей, поскольку большинство людей воспримут это как пустую декларацию. Многие люди не способны задавать неудобные вопросы в общении «один на один» или просто не хотят привлекать к себе внимание. Даже в самых лучших организациях существуют запретные темы для разговоров, например о компенсациях. Соответствующие вопросы обычно не задаются напрямую исходя из множества причин как личного, так и культурного характера. Чтобы поддерживать прозрачность и формировать доверие в направлении сверху вниз, рекомендуется проводить регулярные встречи, на которых сотрудники могут задавать вопросы, просматривать их и голосовать на них. Ответы на большинство вопросов общего характера дают сотрудники службы персонала, менеджеры и руководители подразделений.
Если вы планируете подобные встречи, обязательно реализуйте эти планы. В современном мире, в котором отдельные люди и компании постоянно стремятся что-то «впарить», потребители выработали здравый смысл. Этот смысл позволяет им почувствовать ложь независимо от того, является она явной или же погребена под тоннами корпоративного красноречия. Большинство людей в подобной ситуации скорее предпочтут ответ «мы не можем (или не будем) давать ответ» какому-нибудь невнятному.
Доверие и общение в организации должны строиться на основе примеров, демонстрируемых менеджерами всех уровней и руководителями команды. Они должны иметь надлежащую подготовку, быть сведущими в построении доверительных отношений, открытого общения и в разрешении конфликтов.
Один из лучших способов сформировать связи между людьми и командами – заставить людей общаться между собой. Как только культура организации сможет поддерживать и сохранять доверие, начните мягко стимулировать сотрудников к общению. Начните с так называемой программы-«миксера». Суть этой программы заключается в том, что случайным образом формируются пары из людей, находящихся в разных командах. Затем этим людям поручается провести час за беседой друг с другом, обычно за ланчем или кофе. Этот способ позволяет расширить круг общения людей без необходимости выполнять совместную работу. Как только люди привыкнут к подобному взаимодействию, парам или небольшим группам людей можно поручить выполнение несложной групповой работы. В процессе выполнения такой работы формируются взаимное доверие и близость.
Люди сосредоточены только на технических аспектах работы, а не на общении
Одно из наиболее распространенных возражений, которые мы слышим в ответ на предложение сосредоточиться на близости, сотрудничестве и кооперации, заключается в том, что все это отвлекает от работы. Конечно, главная цель любой организации не заключается в установлении дружеских отношений либо других межличностных отношений. Но игнорировать влияние, которое подобные эффекты могут оказать на организацию, не стоит. Люди, которые придерживаются подобных взглядов, тверды в своих убеждениях по поводу того, что именно относится к «реальной» работе. При этом игнорируются факторы, которые оказывают реальное, вполне измеримое влияние на производительность как отдельных сотрудников, так и групп в целом.
Не существует людей или команд, которые бы работали в полном вакууме. Даже в самом малом стартапе имеют место отношения между сотрудниками и заказчиками либо сотрудниками и перспективными инвесторами. Чем больше и сложнее организация, тем больше связей, которые влияют на выполняемую работу. Просто представьте себе типичную корпорацию, в которой работа осуществляется на разных уровнях бюрократии и рабочих процессов. Эти процессы являются результатом роста и изменения отношений между разными людьми, командами и даже организациями, входящими в вашу компанию. Благодаря исследованию отношений можно идентифицировать имеющиеся «болевые точки», а затем перестроить отношения таким образом, чтобы устранить проблемы.
Если в состав сложной организации входит много разных команд, каждая из которых обладает определенной долей независимости, это неизбежно приводит к конфликтам. В случае отсутствия средств идентификации и устранения подобных конфликтов различные цели и приоритеты будут мешать достижению успеха организации в целом. Если же время и энергия тратятся на формирование связей и развитие навыков, команды и отдельные сотрудники будут стремиться работать вместе, а не конкурировать друг с другом.
Благодаря этому облегчается выполнение коллективной работы в организации. Практически каждый сотрудник организации когда-либо испытал на себе негативное влияние бюрократии. Например, Джордж должен направить запрос своему менеджеру, который поговорит с менеджером Дженераль о том, что Джордж хочет выполнить работу совместно с Дженераль. Не проще ли Джорджу поговорить с Дженераль об этом напрямую? Подобные дисфункциональные отношения на рабочем месте могут препятствовать «реальному» выполнению работы.
Динамика команды также влияет на командную мораль, которая, в свою очередь, воздействует на производительность (как уже рассматривалось в этой части и в части II). Таким образом, проблема заключается не в том, чтобы завести друзей, а в том, чтобы расширить наши представления о работе. Работа – это нечто большее, чем просиживание за рабочим столом, заваленным бумагами, или написание кода. Это формирование отношений, которые позволят эффективно осуществлять совместную деятельность в организации.
Создается впечатление, что разные команды никогда не смогут работать вместе
Когда речь идет о зрелых организациях с установившимися отношениями и привычками, довольно сложно изменить реакции отдельных сотрудников. Если команды или группы привыкли постоянно соперничать друг с другом, никто не захочет изменить поведение первым. При наличии подобного сценария попытки изменить поведение людей будут восприниматься ими как стремление ослабить их позиции. Это приведет к мощному противодействию подобным изменениям.
Если не изменится организационная культура или окружающие обстоятельства, вряд ли можно изменить поведение команд, которые соперничали за ресурсы, имели разные цели либо были изолированы друг от друга. Чтобы начать процесс изменения поведения сотрудника или команды в целом, нужно внести ряд изменений в рабочий процесс. Например, перейти от постмортема, произносимого в случае увольнения сотрудника, к формированию безупречной среды, в которой делается упор не на наказании, а на обучении. Также нужно уточнить процессы или инструменты, используемые в командах для организации совместной работы, общения или даже реорганизации самих команд.
Доверие – это необходимый компонент для успешной совместной работы. Доверие не сформируется за одну ночь, потребуется соответствующая культура. Если в командах возникают проблемы с доверием, исследуйте командную или организационную среду на предмет наличия давления или деструктивного поведения.
Межличностные конфликты прошлого приводят к конфликтам между командами
Организации, которые решают пройти процедуру «devops-преобразования», сталкиваются с одной общей проблемой. Суть этой проблемы заключается в наличии команд, между которыми существуют конфликты с давней историей. Как правило, подобные конфликты возникают между командами разработчиков и эксплуатации по причине наличия противоречивых целей. Но подобные конфликты могут возникать между любыми другими командами, имеющими разные цели и вынужденными вместе работать.
Даже если вы найдете способ выравнивания целей на организационном уровне, перераспределите ресурсы или подстроите процессы либо каким-то иным образом минимизируете трения и конфликты между командами, участники этих команд все равно могут конфликтовать. Все мы – люди, и даже инженеры, которые мыслят чрезвычайно логично, испытывают эмоции. Эти эмоции порой затмевают разум, особенно если подогреваются конфликты, имевшие место в прошлом.
Если конфликт между командами разгорается без видимых причин, часто может помочь перераспределение людей между командами или проектами. Вполне возможно, что сформировались устойчивые группы по интересам, которые являются благодатной почвой для жалоб и противопоставления «мы – они». В этом случае ротация сотрудников поможет разбить эти группы. У людей также вырабатываются определенные привычки при взаимодействии с другими людьми. И слова «команда разработчиков» или «эксплуатационная команда» могут вызвать негативную реакцию на рефлекторном уровне. Чтобы устранить застарелые привычки, понадобится перестроить или даже переименовать команды.
Также вполне возможно, что в организации остались люди, у которых до сих пор имеются конфликты с коллегами. Это, безусловно, влияет на поведение остальных сотрудников, особенно если эти люди занимают руководящие должности. Не секрет, что большинство руководителей весьма амбициозны и оказывают сильное влияние на других сотрудников. Регулярные встречи «один на один» с менеджерами, наставниками или даже с коллегами помогут идентифицировать эти конфликты и усадить участников конфликта за стол переговоров. При наличии достаточного количества времени и позитивных изменений на уровне отдельных команд и организаций люди в состоянии прояснить ситуацию. Они могут принести извинения за нарушения, допущенные в прошлом (как реальные, так и вымышленные) и начать работать над отношениями.
Команда X является бункером для ее участников
Подобно группам по интересам, которые упоминались ранее, в команде формируются группы людей, которые изолируют себя от остальных членов команды, всего отдела и даже от организации. Большинство сотрудников принимают изменения, происходящие в рамках devops-трансформации, – реорганизацию команд, появление новых инструментов или пересмотр рабочих процессов. Но в то же время остаются небольшие группки людей, которые до последнего сопротивляются всяким изменениям.
Подобные люди обычно исполняют роли, которые традиционно недооценивались в прошлом и недооцениваются сейчас. К этой категории относятся как ИТ-техники, так и некоторые инженеры из эксплуатационного отдела. Эти люди не склонны делиться сведениями, поскольку единоличное владение оправленной информацией гарантирует им сохранность рабочего места. Обычно они не блещут успехами в труде и не видят другого способа удержаться на работе.
Даже с появлением таких движений, как devops, приводящих к повышению значимости таких ролей, как эксплуатация, все равно остаются виды деятельности, которым присущи недостаточная оценка и уважение либо отсутствуют гарантии сохранения рабочих мест. Как и раньше, встречаются люди, которым не нравится работа. К этим людям обычно относятся хуже, чем к коллегам, и на них постоянно «сыплются все шишки». Именно здесь проявляется расхождение между теорией и практикой devops. Конечно, бункеры могут строиться из-за страхов, связанных с ожиданием появления проблем, имевших место в прошлом. Эти страхи связаны с негативным опытом и никак не связаны с действительностью, это просто «фантомные боли».
В процессе устранения вышеописанных проблем сначала нужно выяснить потребности этих сотрудников. Для ответа на этот вопрос используется иерархия потребностей Маслоу. Когда идет речь о базовых потребностях, предусмотрите справедливую компенсацию. Чтобы чувствовать себя в безопасности, сотрудники должны быть уверены в сохранности рабочих мест. Выполняемая ими работа должна достойно оцениваться организацией. Также организация должна заблаговременно ставить их в известность в случае предстоящих событий, которые так или иначе затронут этих сотрудников, например в случае грядущего ухода в отпуск за свой счет. Люди должны чувствовать себя комфортно на рабочем месте, надлежащим образом оцениваться менеджерами и коллегами. Поэтому внимательно отслеживайте ситуации, когда кто-то не получает должного уважения или находится в изоляции. Если сотрудники гордятся собой и выполняемой ими работой, значит, они реализовали себя и имеют высокую самооценку. Конечно, если в организации какие-то должности считаются непрестижными, самооценка сотрудников может упасть.
Если выяснилось, что не удовлетворена одна (либо все) вышеперечисленные потребности, это откроет путь к улучшению взаимоотношений с группами или командами, которые находятся в самоизоляции. Как и в случае с другими отношениями, рассмотренными в книге, рабочие отношения основаны на доверии. Понадобятся время и усилия на формирование доверия, его поддержку либо восстановление. Конечно, всегда найдутся люди, которым доверять нельзя в принципе, и таким людям не место в вашей изменяющейся организации.
Людям свойственно возлагать на devops ответственность за допущенные ошибки
Серьезные изменения всегда сопровождаются трудностями. И всегда находятся люди, которые больше других сопротивляются изменениям. Стоит лишь возникнуть одной-единственной проблеме в переходный период, как люди, которые в силу каких-либо причин настроены против изменений, тут же обвинят эти изменения во всех смертных грехах. Как только организация начинает двигаться по направлению к эффективной культуре devops, неизбежно найдутся противники подобных изменений, которые публично озвучат свою позицию.
Например, предположим, что в организации начался процесс перехода от нечастого ручного процесса развертывании ПО к автоматизированному непрерывному развертыванию. Новые инструменты автоматизированного развертывания изначально несовершенны. Как и любая сырая программа, они содержат ошибки, над устранением которых нужно поработать. Противники изменений могут переложить ответственность за проблемы с новыми инструментами на сам процесс devops либо на сторонников этого процесса. Они могут заявлять, что до появления этих новых инструментов все прекрасно работало, либо говорить, что мы избавимся от проблем, если вернемся к прежним технологиям. Они рассматривают сам devops в качестве проблемы, вместо того чтобы понять, что внедрение нового инструмента или процесса связано с проблемами переходного периода. К тому же потребуется время, чтобы привыкнуть к новому.
Для гарантирования успеха инициатив, связанных с devops, требуется нисходящая поддержка со стороны менеджмента. Если противники изменений сумеют убедить руководителей организации в ненужности перемен, вряд ли что-то получится. Изменения требуют времени, и в течение переходного периода неизбежно возникают проблемы. По причине отсутствия единого решения по внедрению изменений придется воспользоваться методом проб и ошибок для подбора инструментов и процессов, наиболее подходящих для вашей организации.
Предоставьте сотрудникам организации возможность дать обратную связь. Пусть делятся своими мыслями о ходе процесса изменений, о том, как эти изменения отражаются на них. Уделяйте внимание негативным отзывам и авторам таких отзывов. Если предлагаемые изменения не устраивают множество людей, возможно, следует докопаться до причин такого недовольства и внести необходимые коррективы. Но если несколько недовольных сотрудников поднимают шумиху, не позвольте им «пустить под откос» изменения, которые приносят благо большинству сотрудников. Далеко не каждый сотрудник подходит организации, а если он противится любым изменениям, в том числе и внедрению devops, лучше с ним расстаться.
Часть IV. Инструменты
Глава 11. Обзор экосистемы инструментов
Прежде чем приступать к обсуждению способов применения инструментов для улучшения и поддержания разных аспектов культуры, рассмотрим дополнительные определения и термины. Эти дополнения расширяют терминологию, введенную в главе 4, для описания формирования дополнительного контента и достижения взаимопонимания между командами. И даже после этих дополнений мы получим далеко не исчерпывающий перечень технологий и терминов.
Люди могут использовать разные народные модели, приводящие к формированию различного понимания одних и тех же терминов и концепций. Если же эти термины и концепции трактуются с точки зрения здравого смысла, это будет способствовать более детальному обсуждению и лучшему пониманию сотрудниками организации.
Инструменты разработки программ призваны помочь в процессе программирования, документирования, тестирования, а также исправления ошибок в приложениях и службах. Благодаря тому, что эти инструменты не ограничены определенными ролями, они будут полезными для всех, кто имеет отношение к разработке и поддержке программ.
Локальная среда разработки
Наличие последовательной локальной среды разработки критически важно для быстрого привлечения сотрудников к процессу разработки программ. Сказанное вовсе не означает, что нужно «запереть» сотрудников в узкие рамки стандартного редактора, лишив их каких-либо дополнительных возможностей по настройке. Скорее это означает, что в распоряжении пользователей появятся инструменты, которые позволят им эффективно выполнять работу.
Минимальные требования к локальной среде разработки могут существенно отличаться в зависимости от индивидуальных предпочтений. Если нужно просто расширить сотрудничество, достаточно установить несколько дополнительных мониторов. Если же предполагается проводить длительные сеансы просмотра в комфортных условиях, придется установить мониторы высокого разрешения, клавиатуры, мыши и другие устройства ввода информации. Процесс классификации текущего стандарта локальной среды разработки включает идентификацию согласованной структуры, используемой как внутри команды, так и на межкомандном уровне. Благодаря такой классификации облегчается и ускоряется привлечение новых сотрудников к выполнению важных заданий в вашей организации.
Важно придерживаться баланса между стандартной организацией труда и индивидуально настроенными рабочими компьютерами и привычками сотрудников. Чрезмерная индивидуализация рабочих мест ведет к изоляции знаний либо к дополнительным расходам времени и сил на индивидуальную настройку специализированных сред. Но в последние годы сотрудники начали больше ценить индивидуальный подход к работе. И если руководство не будет разрешать сотрудникам выполнять индивидуальные настройки рабочего места, это приведет к утере конкурентного преимущества, связанного с наймом и удержанием сотрудников.
Идентифицируйте общую область для документирования локальной среды разработки. Документы могут храниться в хранилище системы контроля версий, во внутреннем хранилище wiki или даже в Google Docs. Со временем и при наличии практики степень владения инструментами будет возрастать. Поэтому исчерпывающая документация, в которой описаны все нюансы работы с инструментами, попросту не нужна. Достаточно иметь руководство, содержащее начальные сведения по работе с инструментами.
Контроль версий
Чтобы расширить кооперацию и сотрудничество внутри команд и между командами, нужно располагать возможностями по фиксации изменений, сравнению, слиянию и восстановлению прошлых версий объектов, находящихся в хранилище. В результате сводится к минимуму риск отката к предыдущим версиям программ в производственной среде.
Буквально в каждой организации нужно реализовывать, использовать, изучать и адаптировать контроль версий. Благодаря этому средству команды могут разрешать конфликты, возникающие в случаях, когда несколько людей одновременно работают над одним и тем же файлом или проектом. Также обеспечивается безопасный способ выполнения и отката изменений. Использование контроля версий на ранних стадиях жизненного цикла команды или продукта способствует выработке хороших привычек.
Выбирайте систему контроля версий, которая поощряла бы желаемый для вас тип сотрудничества. В следующем списке приведены предпосылки для развития сотрудничества:
• открытие и доступ к клонированию хранилищ;
• содействие развитию хранилищ;
• управление вкладами в собственные хранилища;
• определение процессов для содействия;
• обмен правами для фиксации изменений.
Некоторые инструменты плохо подходят для совместной работы, но поскольку со временем к ним привыкают, начинают мириться с имеющимися недостатками. В подобных случаях оцените последствия отказа от использования более подходящих инструментов. Например, то, как это повлияет на найм персонала или слияние различных областей. При внедрении адекватного процесса коллективная работа может выполняться даже при наличии неподходящих инструментов, хотя и со сложностями.
Используя такой показатель, как количество строк кода, невозможно точно оценить стоимость труда программиста. Некоторые разработчики могут превратить сотни строк непонятного кода в десятки простых для понимания абстракций, которые могут восприниматься прочими членами команды. Другие разработчики сосредоточиваются на поиске ошибок, скрытых в коде. Поэтому используйте сведения о количестве строк созданного кода в качестве справочной информации, позволяющей стимулировать нужное вам поведение. Например, если у вас отсутствуют навыки качественного анализа кода, не думайте, что больше всегда означает лучше.
В следующем списке приводится дополнительная терминология, относящаяся к контролю версий.
Фиксация
Фиксация – это последовательность действий по включению изменений, внесенных в файлы под управлением контроля версий.
Конфликты
Конфликт имеет место в том случае, когда внесены два очень похожих изменения и система контроля версий не может определить, какое из этих изменений является корректным. В большинстве случаев система контроля версий обеспечивает способ просмотра и выбора желательных изменений для разрешения конфликтов.
Запрос на включение кода
Запрос на включение кода (pull request) – это механизм, который посылает разработчику сигнал о том, что его вклад готов к просмотру и слиянию с основной ветвью.
Избирательный подход
Избирательный подход – это применение определенных подтверждений из одной отрасли в другой отрасли. Этот подход полезен при необходимости выбора определенных изменений запроса на включение кода.
Управление артефактами
Артефакт – это результат выполнения какого-либо шага в процессе разработки программного обеспечения. Артефакты хранятся в хранилище. Можно выбрать как простое, так и более сложное полнофункциональное хранилище. В последнем случае нужно оценить стоимость поддержки дополнительных услуг и проблем с обеспечением безопасности.
Хранилище артефактов должно быть:
• защищенным;
• доверенным;
• стабильным;
• доступным;
• версионированным.
При наличии хранилища артефактов появляется возможность статической трактовки зависимостей. Вы можете хранить версионированную общую библиотеку в качестве артефакта отдельно от системы контроля версий программного обеспечения. Это позволит всем командам использовать одну и ту же общую библиотеку. Вам придется создавать двоичный файл всего лишь один раз (даже если вы можете построить его повторно). В результате один и тот же двоичный файл используется на протяжении циклов испытаний и продвижений между сборками, что существенно упрощает работу.
В хранилище можно хранить артефакты в соответствии со способом их использования. В некоторых системах можно одновременно хранить лишь единственную версию пакета. Это может привести к появлению проблем при описании истории пакетов. Чтобы не допустить появления подобных проблем, нужно увеличить фактор дублирования хранилища пакетов. Это позволит поддерживать отдельное хранилище пакетов для каждой среды в рабочем потоке.
На ранних стадиях эволюции организация может не соответствовать определенным требованиям безопасности. Но по мере роста и появления линий продуктов ситуация может измениться. Благодаря наличию выделенного локального хранилища артефактов обеспечивается более плавный переход на пути к достижению соответствия вышеупомянутым требованиям.
В идеале ваша локальная среда разработки должна иметь тот же доступ к внутреннему хранилищу артефактов, что и другие механизмы построения и развертывания, действующие в вашей среде. Поскольку одни и те же пакеты и зависимости используются в производственной среде и в локальной среде разработки, минимизируется вероятность появления синдрома «это работает на моем ноутбуке». Если же доступ ограничен или заблокирован, могут появиться новые способы выполнения тех или иных действий, которые обходят безопасность и другие политики.
РАННИЕ ПОЛИТИКИ
Раннее развертывание процессов управления содействует развитию сотрудничества в контексте среды и ограничений. Например, определите, кто и какие артефакты может выдвигать. Также установите, каким образом проверяются, лицензируются и обеспечиваются артефакты. Все это позволит избежать появления проблем, вызванных использованием устаревших артефактов.
Если в вашей среде отсутствует доступ к Интернету, вам придется сформировать свою собственную вселенную. Эта вселенная включает общие хранилища программ, серверы специфичных языковых пакетов, управление зависимостями и другие компоненты. Также должно воспроизводиться множество доступных общих служб. Создание подобной вселенной обеспечивает ряд преимуществ, в том числе защиту организации от незадокументированных разрушающих изменений свыше и от внешних сбоев, вызывающих внутренние проблемы. Если же при формировании зависимостей полагаться на Интернет, в конечном счете кто-то будет определять доступность и совместимость ваших сборок. Подобных ситуаций стараются не допускать многие организации.
В следующем списке приведена дополнительная терминология, относящаяся к управлению артефактами.
Управление зависимостями
Зависимости определяются характером и степенью взаимозависимости одного программного проекта от другого. Для выявления подобных зависимостей используются разные механизмы. На уровне артефактов для программного обеспечения может оказаться полезным сохранение зависимых артефактов.
Закрепление
Закрепление – это метод блокировки явной версии артефакта для окружающей среды. При управлении зависимостями может оказаться полезным определение явной версии зависимого артефакта программы, работающей с вашим проектом.
Продвижение
Продвижение – это метод выбора конкретной версии программного обеспечения для перемещения в сторону доставки, как правило, ключ к успешному прохождению тестов.
Благодаря использованию средств автоматизации уменьшаются затраты рабочей силы, энергии и материалов, используемых в целях обеспечения качества, точности и корректности результатов.
Установка сервера
Под установкой сервера понимается автоматизация конфигурирования и настройки отдельных серверов. Производители оборудования, такие как HP и Dell, предоставляют инструмент, который можно использовать при работе с оборудованием этих брендов.
Некоторые дистрибутивы Linux также поддерживают инструменты, предназначенные для соответствующей операционной системы. Например, для установки сервера в среде Red Hat Enterprise Linux или CentOS могут использоваться Cobbler и Kickstart. Персонал из эксплуатационного отдела может создавать файлы Kickstart, которые определяют разбиение жесткого диска, конфигурирование сети, устанавливаемые пакеты ПО и т. п.
УПРАВЛЕНИЕ ЖИЗНЕННЫМ ЦИКЛОМ ОБОРУДОВАНИЯ
Каждая компания в той или иной форме должна иметь дело с управлением оборудованием или жизненным циклом. Благодаря появлению облачных и инфраструктурных либо платформенных служб эта задача немного упрощается. Жизненный цикл оборудования начинается с планирования и приобретения (либо аренды), продолжается установкой, обслуживанием и ремонтом, а завершается продажей, возвратом или утилизацией.
Автоматизация инфраструктуры
По существу, автоматизация инфраструктуры – это перевод элементов инфраструктуры на язык кода. Этот код подобен остальному программному обеспечению, дополнительно появляется возможность по восстановлению бизнеса с помощью резервных копий данных, хранилища кода и компьютерных ресурсов.
При описании управления инфраструктурой используется следующая дополнительная терминология.
Конфигурационный сдвиг
Этот термин описывает феномен, заключающийся в постепенном отклонении конфигурации серверов от начальной.
Среднее время работы между сбоями (mean time between failures; MTBF)
Среднее время работы между сбоями.
Среднее время восстановления (mean time to repair; MTTR)
Период времени, необходимый для восстановления работоспособности системы.
Доступность
Широко используемая единица измерения, показывающая, как часто система или услуга оказывается доступной по сравнению с общим временем ее потенциальной полезности. Доступность = MTBF / (MTBF + MTTR).
Управление мощностями
Процесс, используемый для обеспечения соответствия между потенциалом инфраструктуры (а также другими ресурсами) и текущими, а также будущими потребностями бизнеса эффективным образом.
Сервер-«снежинка[42]»
Текущая желаемая конфигурация этого сервера достигается в результате выполнения множества ручных изменений. В процессе выполнения изменений часто используются инструменты командной строки, файлы конфигурации, примененные вручную заплаты и даже конфигурации и инсталляции графического интерфейса пользователя.
Автоматизация инфраструктуры зачастую трактуется как управление конфигурацией специалистом из отдела техобслуживания. И это действительно так, поскольку многие аспекты управления конфигурацией могут быть автоматизированы. В частности, это касается идентификации программных пакетов, установленных на сервере, определения версий этих пакетов, которые должны быть использованы, проверки наличия или отсутствия различных системных файлов, определения служб, которые должны выполняться.
«Трактовка кода инфраструктуры как всего остального программного обеспечения» означает, что код был разработан с помощью обычной локальной среды разработки и версионирован с применением системы контроля версий. Также использовалось версионирование в виде артефактов в хранилище артефактов, тестирование и верификация перед вводом в эксплуатацию.
Автоматизация инфраструктуры по минимуму должна обеспечивать следующее.
Управление конфигурационным сдвигом
Конфигурационный сдвиг может возникать из-за изменений, внесенных вручную, обновления программного обеспечения, ошибок или законов энтропии. В этом случае нужен способ, позволяющий избежать подобных негативных проявлений. Зачастую выделяется отдельный узел, для которого выполняется регулярная проверка фактической конфигурации, которая сравнивается с реальной конфигурацией. В случае обнаружения каких-либо несоответствий выполняется самокорректировка.
Исключение серверов-«снежинок»
При автоматизации инфраструктуры можно обойтись без создания серверов-«снежинок». Для этого требуется четкое и детерминированное определение изменений. Чтобы исключить серверы-«снежинки», можно включить управление для одной части системы до тех пор, пока тот же «рецепт» управления конфигурацией не будет применен для воссоздания сервера «с нуля» с применением желаемой конфигурации.
Версионированные артефакты инфраструктурного кода
Хорошее решение автоматизации инфраструктуры предусматривает использование контроля версий и хранилища артефактов. В результате код, который определяет конфигурацию сервера, может версионироваться со всеми преимуществами, предоставляемыми версионированием. Например, обеспечивается возможность простого отката изменений обратно, к хорошо известной версии, либо использование перехватчиков, которые выполняют тестирование кода, задающего инфраструктуру, после выполнения транзакций. Также все члены команды могут в комфортных условиях вносить свой вклад в улучшение кода инфраструктуры.
Минимизация сложности
Решения автоматизации инфраструктуры позволяют отдельным сотрудникам (независимо от выполняемой ими роли) управлять гетерогенной средой с минимальными затратами. Необходимое условие – указание версий конфигурации для типа или версии платформы.
Даже в стартапе с минимальным количеством систем не следует накапливать технические «долги». Благодаря инвестициям в сотрудников, которые понимают разницу между сценариями оболочки и автоматизацией инфраструктуры сервера-«снежинки», вы получите быструю отдачу.
Если доступные средства автоматизации инфраструктуры не удовлетворяют ваши текущие потребности, эффективнее расширить набор функциональных свойств либо повысить степень надежности существующего программного обеспечения.
Автоматизация инфраструктуры приводит к появлению повторяющихся, последовательных, документированных, проверяемых и упругих процессов. В результате освобождается время, повышается эффективность персонала, обеспечивается большая степень гибкости и облегчается управление рисками. Благодаря автоматизации инфраструктуры также повышается степень уверенности в идентичности установки и развертывания компьютеров, уменьшаются затраты времени на устранение проблем, вызванных системными различиями.
Существует контраст между автоматизацией инфраструктуры и ручным конфигурированием каждой группы серверов. Люди, выполняющие повторяющиеся задачи, могут допускать ошибки. В результате изменений в процессе конфигурирования, невозможности конфигурирования устаревших систем и пропущенного шага из контрольного списка системы могут быть сконфигурированы некорректно.
Не стремитесь создавать дополнительные процессы и контрольные списки. Лучше выделите больше времени на преобразование контрольных списков, созданных вручную, в сценарии, исполняемые компьютером. Компьютеры выполняют повторяющиеся задачи намного лучше людей.
Одно из многих ощутимых преимуществ, связанных с использованием инфраструктуры в качестве кода, заключается в том, что это один из первых инструментов, который могут исследовать компании в процессе выполнения культурной трансформации. Инструменты могут быть понятны только в контексте использования конкретной среды. На эффективность применяемого инструмента влияют специфическая культура и верования, вызванные этой окружающей средой. Выбор наилучшей автоматизации инфраструктуры зависит от ваших индивидуальных потребностей.
Система выделения ресурсов
Ранее многим компаниям приходилось планировать, покупать и предоставлять оборудование, установленное в центрах обработки данных. Теперь же они имеют возможность инвестировать средства в облачную инфраструктуру. При использовании вычислений по требованию компании могут приобретать нужные им услуги, а также выполнять необходимое масштабирование вверх или вниз. Эта инфраструктура может быть закуплена и подготовлена намного быстрее, чем физическое оборудование, к тому же является более выгодной для организаций в экономическом плане.
Система выделения ресурсов (system provisioning) расширяет автоматизацию инфраструктуры, позволяя компаниям определять собственную инфраструктуру. При этом используются не отдельные узлы, а кластеры зависимых систем. Это позволяет сотрудникам задавать отдельную группу серверов, которая будет предоставляться один раз, а затем использовать эту спецификацию автоматически произвольное количество раз.
Автоматизация тестирования и сборки исполняемых файлов
Во времена первых компьютеров и компиляторов программы редко содержались в нескольких файлах исходного кода. По мере роста размера и сложности программ разработчики начали разбивать их на несколько файлов исходного кода. Стандартные библиотеки кода, доступные для пользователей того или иного языка программирования, привели к еще большему росту сложности программ. При наличии большого количества файлов исходного кода, которые нужно компилировать вместе для получения окончательных вариантов исполняемого файлов, необходимо автоматизировать процессы сборки таких файлов.
Современные инструментальные средства автоматизации обычно специфицируют порядок сборки исполняемых файлов (необходимые шаги и порядок их выполнения). Также определяются требуемые зависимости (другое программное обеспечение, используемое для успешного создания исполняемых файлов). Некоторые инструменты лучше всего подходят для проектов, относящихся к конкретным языкам программирования, таких как Apache Maven и Ant. В то же время эти инструменты могут применяться совместно с другими языками программирования, которые чаще всего используются в проектах Java. Другие же инструменты, такие как Hudson или Jenkins, могут использоваться для большего диапазона проектов.
Эти инструменты обычно попадают в одну из следующих категорий вариантов использования.
Автоматизация по требованию
Этот инструмент обычно применяется на усмотрение пользователя и зачастую запускается в командной строке. Например, разработчик может запустить сценарий Make вручную, в среде локальной разработки. Это позволит убедиться в возможности создания исполняемого файла прежде, чем придется проверять его с помощью системы контроля версий.
Запланированная автоматизация
Этот процесс запускается на выполнение в соответствии с заранее запланированным графиком, например по ночам. В этом случае исполняемые файлы создаются каждую ночь. Поскольку в ночное время обычно никто не работает, при создании исполняемого файла не вносятся новые изменения в проект. Правда, в наши дни команды разработчиков могут находиться во всех уголках земного шара, поэтому изменения в проект могут вноситься круглосуточно.
Условная автоматизация
Этот инструмент запускается в случае какого-либо события, например когда сервер непрерывной интеграции создает новую сборку при каждом подтверждении изменения кода.
ТЕСТЫ, МОНИТОРЫ И ДИАГНОСТИКА по Ивонн Лам
Зачастую термины тесты, мониторы и диагностика не разграничиваются, что приводит к лишним разговором внутри команды и между командами. Чтобы работать вместе, команды должны выработать общий словарь, предназначенный для кодирования информации. При этом стимулируется обмен знаниями без ограничений для каждого отдельного члена команды. Также не требуется, чтобы каждый член команды был посвящен во все детали.
Во время выступления на конференции Sysadvent 2014 (http://sysadvent.blogspot.com/2014/12/day-5-how-to-talk-about-monitors-tests.html) Ивонн Лам определила ряд вопросов, на которые должна ответить команда, чтобы сформировать общий контекст на основе тестов, мониторов и диагностики.
• Где будут выполняться тесты?
• Когда будут выполняться тесты?
• Как часто они будут проводиться
• Кто будет использовать результат?
• Какие действия будут выполняться с результатом?
Затем Лам перечислила ряд дефиниций, которые могут применяться для выяснения различий между системами. Тесты, выполняемые по отношению к непроизводственным системам, предназначены для определения степени готовности системы или программного обеспечения. Как правило, тесты выполняются в том случае, когда что-либо изменяется. Мониторы выполняются в соответствии с графиком в системах подготовки к производству и в производственных системах. Обычно монитор запускается часто или вызывается на выполнение по событию. Диагностика выполняется в производственных системах по требованию и в связи с событием.
Все три вышеперечисленных инструмента используются для наиболее эффективного отслеживания поведения разных систем. Эти инструменты также позволяют уточнить области ответственности разных групп или отдельных сотрудников. Благодаря подобному уточнению облегчается поддержка общего понимания и ответственности.
В следующем списке перечислена дополнительная терминология, имеющая отношение к тестированию.
Дымовое тестирование
Это название позаимствовано из простейшей методики проверки оборудования. Суть этой методики заключалась в подаче электропитания на устройство с дальнейшим наблюдением за этим устройством. Если появлялся дым, сопровождаемый запахом гари, это свидетельствовало о наличии серьезных проблем. В производстве программного обеспечения дымовой тест – это очень простой и быстрый тест, позволяющий выяснить, работает ли программа вообще и дает ли она ожидаемые результаты.
Регрессионное тестирование
Это тестирование позволяет проверить, не вызвали ли изменения в программном обеспечении новые ошибки или сбои.
Тестирование удобства использования
В результате выполнения этой разновидности тестирования осуществляется проверка программного продукта на пользователях, позволяющая оценить способность этого продукта к выполнению требуемых функций.
A/B-тестирование
Под этим названием скрывается экспериментальный подход, заключающийся в выполнении сравнения двух разных версий веб-страницы или приложения, чтобы определить, какая из этих версий лучше работает.
Сине-зеленое развертывание