Перейти к содержанию

Разработка ПО в Google

Google всегда была очень удачной организацией. Кроме поисковой машины и обслуживания интернет-рекламы AdWords, можно уверенно перечислить ряд иных ослепительных товаров: Google Maps, Google News, Google Translate, сервис определения речи, интернет-браузер Chrome и ОС (ОС) для мобильных телефонов Андроид. Google также в существенной мере повысила и масштабировала продукты небольших купленных организаций (к примеру, YouTube), и улучшила открытый отправной код ряда дополнений. А компания не становится на достигнутом и в обозримой возможности — старт беспилотного авто Google.

Результат Google можно разъяснить рядом причин, в числе которых профессиональное руководство, профессиональные люди, большие условия при комплекте работников, и денежная надежность — итог начального лидерства на подобном быстро развивающемся рынке.

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

Стоит обратить свое внимание и на 2 проекта с открытым начальным кодом — интернет-браузер Chrome и ОС Андроид, которые лежат в особых репозиториях. Доступ для чтения определенных, особенно значительных с позиции безопасности, элементов кода этих программ скрупулезно урезан, но это скорее всего исключения — и абсолютное большинство программ Google находится в целом репозитории.

На февраль 2015 года размер памяти репозитория составлял 86 терабайт информации — миллионы документов. 9 млрд из них включали суммарно 2 млн строк отправного кода, 35 млрд сохраненных перемен при скорости в 40 миллионов перемен за рабочий день.

Доступ, который позволяет запись, урезан: лишь отмеченные обладатели любого поддерева репозитория могут принять записанные в него перемены. Но любой без исключения разработчик программного обеспечения может прочитать любую часть кода, напечатать свежий, привнести локальные перемены, проверить их и после послать на заявление главным обладателям; и в случае если обладатель согласен с ними, то он доказывает их сбережение.

В Google сделана культура, которая содействует тому, чтобы техники поправляли ошибки независимо от того, задействованы они в плане либо нет. Это далеко не только лишь придает разработчикам программного обеспечения убежденности внутри себя, но также и сильно повышает инфраструктуру для тех, кто ее применяет.

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

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

Абсолютное большинство команд делают статус собственной подготовки предельно большим, ставя отображающие детали либо даже разноцветные строки кода (зеленый обозначает, что разработка сделана удачно и все испытания пройдены; ярко-красный — испытание не пройдено; темный — испорченный/ неисправный код). Это улучшает создателей писать как раз «зеленый код».

Очень многие большие команды тоже имеют «копа по разработке», который наблюдает за тем, чтобы все перемены проходили испытания, и показывает создателям на ошибки в коде с тем, чтобы они были переправлены, или собственноручно откладывает плохое изменение. (Как правило наиболее квалифицированные участники команды берут на себя данную роль по очереди.) Желание к «зеленому коду» «на верхушке» делает процесс подготовки действеннее, даже в на самом деле больших командах.

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

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

Бывает, что вся бригада перечислена в перечне обладателей. Перемены в поддерево может привнести любой сотрудник Google, а как раз обладатели должны их доказать. Это обеспечивает, что любое изменение снова будет проанализировано профессиональным разработчиком программного обеспечения.

Google применяет расчисленную технологию комплектации Blaze, которая ответственна за компиляцию и соединение программ, и за выполнение испытаний. Она гарантирует обычные команды для комплектации и испытания программ, которые важны в масштабах всего репозитория. Эти обычные команды и их улучшенное введение обозначает то, что любой разработчик программного обеспечения Google без проблем и оперативно может проверить любое ПО из репозитория. Данная системность — главный момент, который сильно упрощает внесение перемен в ПО любым разработчиком вне его проекта.

Разработчики программного обеспечения формируют документ комплектации, который Blaze применяет для теории ПО. Является, что такие документы, как библиотеки, платформы и испытания, имеют подробные внешние специфики комплектации, которые в точности ставят для любой из них имя, первоначальные документы, и библиотеки либо иные детали, на которых они сформированы.

Эти специфики комплектации заключаются из отраслей, именуемых «правилами комплектации кода», любой из которых устанавливает такие мнения, как, к примеру, «Библиотека C++ с документами отправного кода, которые находятся в зависимости от иных библиотек», и теперь система комплектации кода располагает все правила в некоторой очередности шагов, а конкретнее: сначала компиляцию и соединение любого отправного документа, а потом ряд шагов по установлению связи и определению того, какой автор и знак компиляции нужно применять.

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

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

Система комплектации кода применяет инфраструктуру расчисленных вычислений. Работа любой комплектации, обычно, распределена среди сотен и миллионов систем. Это дает возможность формировать на самом деле крупные платформы оперативно либо, к примеру, вести множество испытаний синхронно. Загляните на сайт https://topvector.ru/ если возникнут вопросы по данной теме.

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

Персональные системы комплектации загодя установлены. Следовательно, система комплектации кода может изображать итоги в кэш-памяти. Разработчики программного обеспечения могут вернуть собственное рабочее место к прошлому номеру перемены, пересоздать и получить то же самое бинарное значение. И более того, доступ к данной буферной памяти вполне может быть у нескольких клиентов. (Чтобы организовать данный процесс как положено, нам надо было ликвидировать неразбериха в приборах, задействованных документом комплектации, к примеру, освобождая выходные данные от кратковременных ловок).

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

Итоги комплектации лежат в «облаке». Они также включают промежуточные итоги. В случае, если другому запросу комплектации нужны такие же итоги, система комплектации будет автоматом применять их вновь, чем реорганизовывать все заново, даже если запрос исходит от иного клиента.

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

Ориентировочная проверка. В Google есть особые приборы для автоматического проведения ряда испытаний до ревью кода кода и/либо подготовки к заявлению перемены в репозитории. Любое поддерево репозитория может иметь установленный документ опции, который устанавливает, какие испытания нужно провести и когда стоит это сделать: в процессе ревью кода, после сбережения или оба раза.

Испытания могут производиться одновременно: к примеру, стартовать до отправки информации об изменении на проверку и/либо до сбережения перемены в репозитории (подходит для длинных испытаний); или они могут быть синхронными, другими словами итоги будут высланы на e-mail для дальнейшего обсуждения.

Ревью кода. В Google есть прекрасные веб-инструменты для ревью кода, которые встроены в e-mail и дают возможность создателям кода и тем, кто его прямо рассматривает, синхронно приравнивать расхождения (включая многоцветные строки кода) и одновременно бросать объяснения.

Когда создатель кода заламывает проверку, рецензент приобретает извещение про это на e-mail, в котором находится сноска на веб-инструмент для теста прямо этого перемены. Извещения также рассылаются, когда рецензенты оставляют объяснения. Помимо этого, применяемые в компании приборы рассылают извещения, имеющие итоги автоматических испытаний и неподвижного теста.

Все перемены, записанные в репозиторий отправного кода, ДОЛЖНЫ быть испытаны по меньшей мере вторым разработчиком программного обеспечения. Кроме этого, если создатель перемены не считается одним из обладателей документа, тогда кроме этого один из обладателей также должен посмотреть и доказать правки.

В некоторых случаях обладатель поддерева может доказать безотложное изменение в поддереве до того, как оно было кем-нибудь испытано, а имя рецензента так или иначе может быть обозначено. Как создатель перемены, так и рецензент будут приобретать напоминания о том, что изменение нужно снова проверить и доказать. При таких раскладах все следующие перемены нужно придавать раздельно, так как начальные были доказаны.

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

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

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

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

Кроме основной части репозитория, есть также «экспериментальная» его часть, где эталоны доказательства записанных перемен не так жестки. Но код, который располагается прямо в работе, должен храниться в основной части репозитория.

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

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

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

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

Испытание взаимодействия элементов системы и регрессивное испытание также обширно применяются.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *