У меня недавно были некоторые интересные переговоры о метриках разработки программного обеспечения, в особенности как они могут использоваться в довольно крупной организации, чтобы помочь группам разработчиков работать лучше. Я знаю, что были вопросы о Переполнении стека, о которых метрики хороши для использования - как этот, но мой вопрос больше, о котором метрики полезны для который заинтересованные стороны, и в какой уровень агрегирования.
Как пример, мое представление состоит в том, что покрытие кода является полезной метрикой следующими способами (и возможно другие):
Но я не думаю, что для высшего руководства полезно видеть это на основе команды командой, поскольку это поощряет искусственные попытки поддержать покрытие с тестами, которые просто тренируются, вместо того, чтобы протестировать, код.
Я нахожусь в организации с несколькими уровнями в ее иерархии управления, но где подавляющее большинство менеджеров технически настроено и в состоянии (со многими все еще пачкающими руки). Некоторые группы разработчиков играют ведущую роль в управлении к методам гибкой разработки, но другие отстают, и существует теперь серьезный мандат от вершины для этого, чтобы быть способом, которым работает организация. Несколько нас запускают программу для поощрения этого. В этом виде организации, какие метрики, Вы думаете, полезны, кого, почему, и в какой уровень агрегирования?
Я не хочу, чтобы люди чувствовали, что их производительность оценивается на основе метрики, на которую они могут искусственно влиять; одновременно, высшее руководство собираются хотеть своего рода доказательство, что успехи делаются. Какую консультацию или протесты можно предоставить на основе опыта в собственных организациях?
Править
Мы определенно желаем использовать метрики в качестве инструмента для организационного улучшения не как инструмент для отдельного измерения производительности.
unsafe
{
char c = 'c';
char *ch = &c;
}
Ваш пример имеет Последовательности
и ошибку компиляции от использования одной из Последовательности перегрузок конструктора, так что я думаю, что вам действительно нужен массив символов, он же Последовательностью
и, может быть, не char *
.
В этом случае:
char c = 'c';
string s = c.ToString(); // or...
string s1 = "" +c;
Также доступно:
unsafe
{
char c = 'c';
char* ch = &c;
string s1 = new string(ch);
string s2 = new string(c, 0);
}
-121--4534683- Как насчет:
var test = 'c'.ToString()
-121--4534692- История из личного опыта. Извинения за продолжительность.
Несколько лет назад наша группа разработчиков пыталась установить «правильные» измеримые цели для отдельных людей и руководителей команд. Эксперимент длился всего один год, потому что жесткие показатели не очень хорошо работали для отдельных целей (некоторые ссылки и дальнейшее обсуждение см. в моем вопросе по теме ).
Обратите внимание, что я был руководителем команды и участвовал в планировании всего этого с моим техническим начальником и другими руководителями команды, поэтому цели не были чем-то продиктованы с самого начала бесхитростным высшим руководством - в то время, когда мы действительно хотели, чтобы они работали. Стоит также отметить, что бонусная структура непреднамеренно поощряла конкуренцию между застройщиками. Вот мои наблюдения о том, что мы пытались.
Проблемы, видимые клиентам
В нашем случае мы рассчитывали простои на обслуживание, которое мы предоставляли клиентам. В изделии, обернутом сжатием, это может быть количество ошибок, о которых сообщают клиенты.
Преимущества: Это была единственная реальная мера, которая была видна высшему руководству. Он также является наиболее объективным, поскольку он измеряется вне группы по вопросам развития.
Недостатки: Было не так много отключений - всего около одного на разработчика в течение всего года, - что означало, что невыполнение или превышение цели было вопросом «возлагать вину» за несколько отключений, которые действительно произошли в каждой команде. Это привело к плохому чувству и потере морального духа.
Объем выполненной работы
Преимущества: Это была единственная положительная мера. Все остальное было «мы замечаем, когда случаются плохие вещи», что деморализовало. Его включение также было необходимо, потому что без него застройщик, который не делал ничего весь год, превысил бы все остальные цели, что явно не отвечало бы интересам компании. Измерение объёма проделанной работы проверяло естественный оптимизм разработчиков при оценке размера задания, что было полезно.
Недостатки: Показатель «выполненной работы» был основан на оценках, предоставленных самими разработчиками (как правило, хорошая вещь), но превращение его в часть их целей стимулировало игры системы завышать оценки. У нас не было другой жизнеспособной меры работы: я думаю, что единственный возможный ценный способ измерения производительности - «влияние на результат компании», но большинство разработчиков настолько отстранены от прямых продаж, что это редко практично на индивидуальном уровне.
Дефекты, обнаруженные в новом производственном коде
Мы измерили дефекты , введенные в новый производственный код в течение года,поскольку было сочтено, что ошибки прошлых лет не должны учитываться в целях этого года в отношении какого-либо лица. Дефекты, выявленные внутренними группами по качеству, были включены в подсчет, даже если они не влияли на клиентов.
Преимущества: Удивительно мало. Временной промежуток между введением дефекта и его обнаружением означал, что на самом деле не было механизма немедленной обратной связи для улучшения качества кода. Макротренды на уровне команды оказались более полезными.
Недостатки: Был усилен акцент на негативе, поскольку эта цель приводилась только тогда, когда обнаруживался дефект, и нам требовался кто-то, кто виноват в этом. Разработчики неохотно фиксировали обнаруженные ими дефекты, а простой подсчет означал, что мелкие ошибки были так же плохи, как и серьёзные проблемы. Поскольку количество дефектов на одного человека все еще было довольно низким, количество мелких и серьезных дефектов не было ровным, как это могло бы быть в случае с более крупной выборкой. Старые дефекты не были включены, поэтому репутация группы по качеству кода (на основе всех обнаруженных ошибок) не всегда соответствовала измеримому введенному количеству в этом году.
Своевременность реализации проекта
Мы измерили своевременность как процент работ, поставленных внутренним группам по обеспечению качества к указанному сроку.
Преимущества: В отличие от подсчета дефектов, это была мера, которая находилась под непосредственным непосредственным контролем разработчиков, так как они эффективно решали, когда работа была завершена. Наличие цели сосредоточило ум на выполнении задач. Это помогло команде выполнить реалистичный объем работы и улучшить восприятие внутренними клиентами способности группы разработчиков выполнять обещания.
Недостатки: В качестве единственной цели, находящейся непосредственно под контролем разработчиков, она была максимизирована за счет качества кода: в день крайнего срока, учитывая выбор между тем, что задача завершена, или дальнейшим тестированием, чтобы повысить уверенность в ее качестве, разработчик решил бы отметить ее полной и надеяться, что любые возникающие ошибки никогда не выйдут на поверхность.
Жалобы от внутренних клиентов
Чтобы определить, насколько хорошо разработчики общались с внутренними клиентами во время разработки и последующей поддержки их программного обеспечения, мы решили, что количество жалоб, полученных на каждого человека, будет зафиксировано. Жалобы будут подтверждены руководителем во избежание возможной мстительности.
Преимущества: Я ничего не помню. Измеренный на достаточно большом групповом уровне, он становится более полезным показателем удовлетворенности клиентов.
Недостатки: Не только крайне негативная, но и субъективная мера. Как и в случае с другими целями, числа для каждого отдельного человека были около нулевой отметки, что означало, что один комментарий о ком-либо может означать разницу между «бесконечно превышенным» и «не выполненным».
Общие замечания
Бюрократия: В то время как наши инструменты управления задачами содержали большую часть данных для этих показателей,все еще было достаточно много ручных усилий, чтобы сопоставить все это. Время, потраченное на получение всех цифр, не было приятным, как правило, было сосредоточено на негативных аспектах нашей работы и, возможно, даже не было восстановлено за счет повышения производительности.
Моральный дух: За меры, в которых людей обвиняли в проблемах, не только те, у кого были «плохие» баллы, чувствовали себя демотивированными, но и те, у кого были «хорошие» баллы, так как им не нравились потери в командном моральном состоянии, и иногда они чувствовали, что они были выше не потому, что они были лучше, а потому, что им повезло.
Резюме
Что мы узнали из эпизода? В более поздние годы мы пытались повторно использовать некоторые идеи, но в «более мягком» пути, где было меньше акцента на индивидуальную вину и больше на улучшение команды.
Все это не помогает, когда требуется установить измеримые цели для отдельных разработчиков, но, надеюсь, идеи будут более полезны для улучшения команды.
] Одним из интересных подходов, который в настоящее время получает шумиху, является [] Kanban[]. Это довольно Agile. Что особенно интересно, так это то, что он позволяет применить метрику "проделанная работа". Я еще не использовал/не использовал это в реальной практике, но я хотел бы работать в направлении получения Kanban-ish поток идет в моей работе. [
].Главное в метриках - это знать, для чего вы их используете. Используете ли вы их как инструмент для улучшения, инструмент для вознаграждения, инструмент для наказания и т. Д. Похоже, вы планируете использовать их как инструмент для улучшения.
Принцип номер один при установке показателей - поддерживать актуальность информации, чтобы человек, получающий ее, мог использовать ее для принятия решения. Скорее всего, старший менеджер не может диктовать на микроуровне, нужно ли вам больше тестов, меньше ли сложность и т. Д. Но руководитель группы может это сделать.
Поэтому я не верю, что мера покрытия кода будет полезна руководству, выходящему за рамки отдельной команды. На макроуровне организацию, вероятно, интересуют:
Внутреннее качество не будет приоритетным в их списке вещей, которые необходимо покрыть выключенный. Миссия группы разработчиков - дать понять, что внутреннее качество (ремонтопригодность, охват тестированием, самодокументируемый код и т. Д.) Является ключевым фактором для достижения трех других целей.
Следовательно, вы должны нацеливать метрики на более старших менеджеров, которые покрывают эти три, такие как:
И измерять такие вещи, как покрытие кода, сложность кода, оценка вырезания и вставки (повторение кода с использованием flay или аналогичного), длина метода и т. Д. На уровне команды, когда получатели информация действительно может иметь значение.
Посмотрите этот подкаст на T4 Скотта Хансельмана, беседующего с Кэтлин Доллард.
http://www.hanselminutes.com/default.aspx?showID=170
Просто замените понятие объекта на void *
(часто называемый непрозрачным типом в библиотеках, ориентированных на C) и повторно используйте все, что известно из C++.
Если у вас есть какие-то сведения/знания по Lean, то я бы предложил систему, которую рекомендует Мэри Поппендик (Mary Poppendieck ) (которую я уже упоминал в этом предыдущем ответе ). Эта система основана на трех целостных измерениях, которые должны быть приняты в виде пакета:
Уровень агрегации - это уровень продукта/проекта, и я считаю, что эти метрики полезны для всех (разработчики никогда не должны забывать, что они не пишут код для удовольствия, они пишут код для создания значения и всегда должны помнить об этом).
Группы могут (и фактически используют) использовать технические метрики для измерения соответствия стандартам качества, которые включены в Определение выполненных работ (как «отсутствие увеличения технической задолженности»). Но высокое качество не является самоцелью, это просто средство достижения короткого цикла (чтобы быть быстрой компанией), который является реальной целью (с реализацией бизнес-случая и удовлетворенностью клиентов).
Метрика - это способ ответить на вопрос о проекте, команде или компании. Перед тем, как начать поиск ответов, необходимо решить, какие вопросы вы хотите задать.
Типичные вопросы включают:
Какое качество нашего кода?
Качество улучшается или ухудшается с течением времени?
Насколько продуктивна команда? Улучшает или унижает?
насколько эффективно наше тестирование?
... и так далее.
Для ответа на каждый вопрос потребуется разный набор метрик. Сбор метрик, не зная, на какие вопросы вы хотите получить ответы, в лучшем случае является пустой тратой времени, а в худшем - контрпродуктивным.
Вы также должны знать, что в работе существует "принцип неопределенности" - если вы не будете очень осторожны, то сбор метрик изменит поведение людей, часто неожиданным и иногда пагубным образом. Это особенно важно, если люди верят, что их оценивают по метрикам, или, что еще хуже, метрики все еще привязаны к какой-то схеме вознаграждения или наказания.
Я рекомендую прочитать книгу Джеральда Вайнберга Quality Software Management Vol 2: First Order Measurement . Он вдается в подробности о метриках программного обеспечения, но говорит, что самое главное - это то, что он называет "Измерение нулевого порядка", - спрашивая у людей их мнение о том, как продвигается проект. Все четыре тома из этой серии дорогие и труднодоступные, но они того стоят.
Как я уже говорил в , что такое очарование с метриками кода? , Метрики включают в себя:
Мы используем инструмент, способный обеспечить:
Результатом является анализ, который может быть проренен, из агрегации высокого уровня доменов (безопасность, архитектура, практика, документация, ...) вплоть до некоторой линии кода.
Текущая обратная связь:
так:
Какие метрики полезны для того, какие заинтересованные стороны и в Какой уровень агрегации
на высоком уровне:
на более низком уровне:
Написание программного обеспечения
Использование CPU (S), Использование памяти, использование памяти, использование памяти, использование пользовательского времени, размер кода при запуске -Time, Размер данных во время выполнения, производительность графики, производительность доступа к файлам, производительность доступа к сети, использование пропускания, использование полосы пропускной способности, кода. Используются различные вызовы API, (количество), используемых различных методов и используемых алгоритмов , может быть, больше.
Это должно быть оптимизировано минимальное разумное количество (за исключением областей, где желательно превышает критерии о принятии теста), необходимые для прохождения тестов приема, облегчают техническое обслуживание, содействовать аудиту и удовлетворению требований пользователей.
(«... для юридических / нелегальных данных о внесении тестовых данных и юридических / нелегальных тестовых событий во всех тестовых состояниях при всех необходимых томах тестовых данных и объемами тестовых запросов для всех текущих и будущих сценариев интеграции тестовых тестов».)
, потому что оптимизированный код сложнее писать и так стоит больше.
Стандарты кодирования, базовая структура, критерии и руководство приемлемости на уровнях оптимизации.
Как измерить успех написания программного обеспечения?
Какая стоимость / время следует игнорировать при оценке совокупных показателей программистов ?
, но эта стоимость / время должна быть включена в оценку совокупных показателей команд (Inc Architects, менеджеры ).
Как измерять успех архитекторов?
Другие меры плюс:
Во-первых: важным пунктом: Slf4j является фронтэнд-протоколирование (API), которое может использовать ниже большинство основных систем регистрации: log4j или java.util.logging, например. Так что лучше сравнить sfl4j с common-logging .
О состоянии Log4j, цитаты из Состояние регистрации Java (год назад)
-121--1076177-Одно, что я не понял, это то, что разработка log4j по существу мертва. В настоящее время он находится на версии 1.2, и от планов на версию 1.3 отказались в пользу разработки log4j 2.0. Однако не кажется, что 2.0 находится в активной разработке. Стоит отметить, что Цеки Гюльджю, первоначальный основатель проекта log4j, перешёл к slf4j (см. ниже).
Либо:
или
Гораздо проще применять и подчиняться первой форме, так что вот за чем я бы последовал.
Членам бывшей моей команды на самом деле позвонили и сказали вернуться к работе, чтобы починить здание... и они это сделали.
-121--4223194-Это немного побочной заметки к главному вопросу, но у меня был очень похожий опыт с Полом Стефенсонсом ответить выше. Одно я бы добавил к этому - сбор данных и видимость метрик.
В нашем случае директор по разработке должен был собирать множество данных из различных систем и распределять результаты отдельных показателей один раз в месяц. Это часто не происходило, так как это была трудоемкая работа, и он был занятым человеком.
Результаты этого были:
Несчастливые разработчики, так как бонусы за производительность были основаны на метриках и люди не знали, как они получают.
Некоторое время требует многократного ввода данных в различные системы.
Если вы идете по этому маршруту, вы должны быть уверены, что все метрические данные могут быть сопоставлены автоматически и легко видны тем, на кого они влияют.
Интересно, что я только что закончил читать PeopleWare, и авторы категорически не рекомендуют, чтобы отдельные метрики были видны начальству (даже прямым менеджерам), но что совокупные метрики должны быть очень заметны .
Что касается специфических для кода метрик, то я считаю, что команде полезно знать состояние кода на данный момент, а также тенденции, влияющие на код по мере его созревания и роста.
Очевидно, что вопрос не сфокусирован на .NET, но я думаю, что .NET-продукт NDepend проделал большую работу по определению и документированию общих метрик, которые являются полезными.
Раздел документации по метрикам является образовательным чтением, даже если вы не занимаетесь .NET.
Метрики программного обеспечения были с нами долгое время и как лучше может ничего не сказать на сегодняшний день, появился индивидуально или в совокупности Это способно руководить проектами во время развития. Гайка Проблема в том, что мы хотим использовать объективные меры и эти может измерить только то, что произошло, Не то, что происходит или должно произойти.
К тому времени, когда мы измеряли, проанализировали и интерпретируемые некоторые серия метрик мы реагируем на вещи, которые Уже пошло не так, или очень изредка, пошли вправо. Я не хочу поддерживать важность обучения от объективные метрики, но я хочу Укажите, что это реактивный, а не проактивной ответ.
Разработка «уверенности индекса» может быть лучшим способом мониторинга Будь то проект на пути или направляется на неприятности. Пытаться Разработка системы голосования, где разумное количество Представители каждого проекта интересуют интерес, задаются анонимно голосуйте их уверенность от времени до. Доверие проголосования в двух областях: 1) Вещи находятся на треке 2) вещи будут продолжать быть на пути или получить Вернуться на трек. Это чисто субъективные измерения от людей, ближайших к "действие". Кормить результаты в таблицу типа канбана, где столбцы представляют области голосования и вы Должно быть довольно хорошая идея, где сосредоточить ваше внимание. Использовать Вопрос 1, чтобы оценить, реагировал ли управление на предыдущий цикл голосования соответственно. Используйте вопрос 2 для идентификации где управление должно сосредоточиться на дальше.
Эта идея основана на каждом из нас, имеющих уровень комфорта в пределах нашей собственной области ответственности. Уровень нашего доверия это продукт опыта, знания в нашем Домен опыта, количество и тяжесть проблем Мы сталкиваемся с тем, сколько времени мы должны достичь нашего Задачи, качество информации, с которыми мы работаем и целая куча других факторов.
MBWA (управление, прогуливаясь) часто рекламируется как Один из самых эффективных инструментов, которые у нас есть - это изменение этого.
Эта техника не сильно использует на уровне отдельные команды, потому что он только отражает общее настроение команды. Вроде как использовать чьи-то часы, чтобы сказать им время. Однако на более высоких уровнях управления он должен быть вполне информативным.