Что я должен предложить организации многоразовой библиотеки кода?

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

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

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

Что я должен предложить в качестве работоспособного репозитория общих исходных кодов для команды, состоящей как минимум из 10-12 штатных разработчиков, плюс от 5-50 (очень) разработчиков, работающих неполный рабочий день, которые временно переданы в аренду группе по контракту для выполнения специализированной работы ?

Для ответа требовалась некоторая культурная информация, чтобы получить разумный ответ, поэтому я предоставлю ее здесь вместе с некоторыми своими мыслями по этой теме:

  1. Разработчики не будут вынуждены использовать этот репозиторий. Барьер для входа должен быть как можно более низким, чтобы стимулировать участие, иначе он будет проигнорирован. К сожалению, это означает, что все, что требует установки и запуска дополнительного программного обеспечения, скорее всего, выйдет из строя. Развертывание ClickOnce настолько близко, насколько мы можем, и это ужасно сомнительно.
  2. Мы не склонны рисковать, магазин Microsoft. Я могу продавать решения с открытым исходным кодом, но к ним будут относиться с подозрением. У всех разработчиков есть VSS, корпоративный директор заявил, что VSTS нежизнеспособна в будущем. Если это не слишком сложно, а лицензия свободна, я все равно могу попробовать внедрить VSTS-сервер в лабораторию.
  3. Некоторые из моих коллег-разработчиков заботятся о написании качественного и надежного программного обеспечения, некоторые - нет. Я хотел бы защитить любой общий код, написанный теми, кому это небезразлично, от тех, кто этого не делает. Общие методы управления конфигурацией (например, проверка кода во время работы над ним) полностью игнорируются по крайней мере пятой частью моих коллег по команде по контракту.
  4. Мы лучше пишем процессы, чем следуем им. Мне в значительной степени потребуется какой-то письменный процесс, чтобы я мог продать это моему руководителю. Я считаю, что он должен быть легким, гибким и реализованным с помощью инструментов, чтобы он был актуален удаленно, потому что мой менеджер - единственный человек, который когда-либо его прочитает.
  5. Не применяйте передовой опыт. Я бы очень хотел включить такие вещи, как обязательные обзоры кода, чтобы принудительно использовать инструменты статического анализа (FxCop, StyleCop) для общего кода. Однако это поднимает планку, потому что в настоящее время такие практики не выполняются последовательно.

Буду рад предоставить любую дополнительную запрошенную информацию. :)

РЕДАКТИРОВАТЬ: (Отвечая на вопросы)

Возможно, контракт - неправильный термин. Мы абсолютно владеем собственными активами кода. Значительная часть бизнес-модели на бумаге (хотя и не на практике) заключается в том, что нам принадлежит код / ​​проекты, которые мы пишем, и мы можем перепродавать их другим клиентам. Наши проекты обычно представляют собой добавление некоторых специальных функций к одному из многих существующих программных продуктов компании.


person Greg D    schedule 25.12.2008    source источник
comment
«посмертный» буквально означает «после смерти», как вскрытие; найти лучший термин   -  person Steven A. Lowe    schedule 25.12.2008
comment
Какой термин вы бы предложили? Извлеченные уроки или что-то вроде этого достаточно нейтрального?   -  person Greg D    schedule 25.12.2008
comment
Я думаю, что термин post-morten используется при анализе дампов ядра сбойных программ ;-)   -  person Steven A. Lowe    schedule 26.12.2008
comment
Было бы интересно отметить, что во время моего ежегодного обзора, третий год подряд, мой менеджер на словах делал что-то подобное. Однако за последние 2 года не последовало результатов, так что я не задерживаю дыхание. :(   -  person Greg D    schedule 10.02.2009
comment
посмертный - это обычное использование этого термина. Да, это немного не так, если ты к этому не привык. На самом деле у меня есть книга о GameDev Post-Mortems, и у меня до сих пор возникает какое-то странное чувство, глядя на обложку! : D, но здесь он есть, стандартный жаргон: pragmaticsw.com/Newsletters/newsletter_2004_m12_SP. / а>   -  person Rui    schedule 05.08.2010


Ответы (6)


Судя по его звукам, у вас есть возможность во время «вскрытия» представить некоторые решения. Я бы создал презентацию с изложением ваших идей и представил бы их на этой встрече. Перед этим я бы порекомендовал вам настроить некоторые решения и продемонстрировать их во время презентации. Что нужно сделать -

  1. Распространение программирования на основе компонентов (Хорошее чтение - Программирование компонентов .NET - Джубал Лоуи). Отстаивайте принцип DRY (не повторяйтесь) в кодировании.

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

  3. Упростите людям использование ваших библиотек кода, предоставив шаблоны проектов для общих сценариев с уже встроенными библиотеками кода. Таким образом, у ваших коллег будет единый шаблон для работы. Для этого вы можете использовать возможности шаблона проекта VS.NET - просмотрите следующие ссылки Система проектов VSX (VS.Net 2008), Код Статья о создании шаблонов проектов

  4. Используйте инструмент автоматизации сборки, такой как MSBuild (который входит в состав VS2005 и более поздних версий), чтобы скопировать только компоненты, необходимые для конкретного проекта. Сделайте эту часть настройки сборки в среде IDE (VS.NET 2005 и более поздние версии имеют отличные способы настройки задач предварительной и последующей компиляции с помощью MSBuild)

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

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

Надеюсь, это поможет, и желаю удачи в вашей евангелизации :-)

Недавно я наткнулся на этот набор фреймворков, который называется Фреймворки Чака Норриса - они доступны в NuGet по адресу http://nuget.org/packages/chucknorris. Вам обязательно стоит их проверить, так как у них есть несколько хороших шаблонов для ваших проектов ASP.NET. Также обязательно проверьте Nuget.

person Nikhil    schedule 26.12.2008

организовывать по темам, требовать модульные тесты (на уровне функций) для регистрации / принятия в библиотеку; добавить вики, чтобы объяснить, что / почему и для поиска

person Steven A. Lowe    schedule 25.12.2008

Один вопрос: вы говорите, что это консалтинговая группа. Какие ресурсы кода у вас есть? Я думаю, что большая часть усилий по кодированию ваших команд будет принадлежать вашим клиентам в рамках вашего контракта о работе по найму. Если вы собираетесь это сделать, вы должны быть абсолютно уверены в том, что ваши контракты предоставляют вам права на работу ваших сотрудников.

person jmucchiello    schedule 25.12.2008

Maven решила проблему повторного использования кода в сообществе Java - вам стоит попробовать.

У меня есть .NET-разработчик, который придумал нечто подобное для нашего внутреннего использования для сборок .NET. Поскольку не существует сопоставимого Интернет-сообщества .NET, этот инструмент будет просто обращаться к внутреннему репозиторию в нашей корпоративной сети. В противном случае он будет работать так же, как Maven.

Maven действительно можно было бы использовать для непосредственного управления сборками .NET (мы используем его с нашими модулями кода Flex .swf и .swc), просто людям .NET пришлось бы справиться с использованием инструмента Java и, вероятно, им пришлось бы написать плагин Maven для диск msbuild.

person RogerV    schedule 25.12.2008
comment
Maven решил повторное использование кода ... - На самом деле этого не произошло. Я обнаружил, что этого очень не хватает. - person Draemon; 26.12.2008
comment
Прагматически это так, потому что теперь наши дискретные модули Java и Flex (которые имеют API-интерфейсы библиотечного стиля и т. Д.) Помещаются в наш корпоративный репозиторий, где на них можно легко ссылаться из других файлов проекта pom.xml для повторного использования. До того, как мы приняли Maven, такое повторное использование не имело удовлетворительного решения. - person RogerV; 26.12.2008
comment
Maven может также управлять, например, документацией Javadoc API, документацией для конечного пользователя, а также исходным кодом - наряду с двоичным файлом среды выполнения. Конечно, он имеет положение для точного отслеживания версии модуля и концепцию SNAPSHOT, которая автоматизирует управление разрешением модулей, находящихся в активной разработке. - person RogerV; 26.12.2008

Прежде всего, для организации кода ознакомьтесь с Руководством по проектированию Microsoft Framework по адресу http://msdn.microsoft.com/en-us/library/ms229042.aspx, а затем создайте центральный источник управления расположением для новой платформы, которую вы собираетесь создать. Настройте несколько пространств имен по умолчанию, сборки для более чистого разделения и убедитесь, что каждый получает ежедневную сборку.

person Charles Gardner    schedule 25.12.2008

Еще одно замечание, так как у нас есть «общий код» и в моем магазине.

Мы выяснили, что это в значительной степени проблема с упаковкой:
Какой бы код вы ни создавали, или какой бы инструмент вы ни использовали, у вас должен быть общий < / em> инструмент сборки, способный упаковать ваши источники в «компонент доставки», со всем, что используется для фактического выполнения кода, но также с документацией (сжатой) и исходным кодом (сжатым).

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

Процесс сборки вполне может управляться Maven или любым другим инструментом (ant / nant), который вы хотите.

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

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


Туда:

  1. Разработчики не будут вынуждены использовать этот репозиторий. Барьер для входа должен быть как можно ниже, чтобы поощрять участие, иначе он будет проигнорирован: это просто сценарий, который нужно выполнить, чтобы получить «модуль доставки» со всем, что им нужно (репозиторий maven может быть используется и для этого тоже)

  2. Мы не рискуем рисковать, магазин Microsoft: вы можете использовать любой репозиторий, какой захотите.

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

  4. Мы лучше пишем процессы, чем следуем им: единственный процесс, участвующий в этом, - это процесс упаковки, и он может быть достаточно автоматизирован

  5. Не применяйте передовой опыт: вы не обязаны применять какой-либо статический анализ кода перед упаковкой исполняемых файлов и исходных файлов.

person VonC    schedule 25.12.2008