Метрики разработки программного обеспечения и отчетность - PullRequest
31 голосов
/ 06 января 2010

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

В качестве примера я считаю, что охват кода является полезным показателем следующих способов (и, возможно, других):

  • Для внутреннего использования командой в сочетании с другими измерениями.
  • Для облегчения / включения / наставничества команды, где это может быть поучительным когда рассматривается в команде за командой базис как тренд (например, если команда А и В этом месяце у Б 75 50, я бы больше интересовался командой А чем B, если в предыдущем месяце они было 80 и 40).
  • для высшего руководства когда представлено как агрегированное статистика по нескольким командам или целый отдел.

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

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

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

EDIT

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

Ответы [ 10 ]

46 голосов
/ 13 января 2010

Рассказ из личного опыта. Извинения за длину.

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

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

Видимые клиенту проблемы

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

Преимущества: Это была единственная реальная мера, которая была видна высшему руководству. Это было также самым объективным, измеряемым вне группы развития.

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

Объем выполненных работ

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

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

Дефекты, обнаруженные в новом производственном коде

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

Преимущества: Удивительно мало. Промежуток времени между появлением дефекта и его обнаружением означал, что действительно не было механизма немедленной обратной связи для улучшения качества кода. Макро тренды на командном уровне были более полезными.

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

Своевременность сдачи проекта

Мы измерили своевременность как процент работы, выполненной внутренним командам по обеспечению качества к установленному сроку.

Преимущества: В отличие от подсчета дефектов, эта мера находилась под непосредственным непосредственным контролем разработчиков, так как они эффективно определяли, когда работа будет завершена. Наличие цели сосредоточило ум на выполнении заданий. Это помогло команде выполнить реалистичный объем работы и улучшило восприятие внутренними клиентами способности группы выполнять обещания.

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

Жалобы от внутренних клиентов

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

Преимущества: Реально ничего не могу вспомнить. При измерении на достаточно большом уровне группы оценка «удовлетворенности клиентов» становится более полезной.

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

Общие комментарии

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

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

Резюме

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

  • Невозможно определить цели для отдельных разработчиков, которые являются объективно измеримыми, повышают ценность компании и не поддаются разработке, поэтому не пытайтесь попробовать.
  • Проблемы и дефекты клиента можно просчитать на более широком командном уровне, , если локализация дефекта однозначно является обязанностью этой команды, то есть вам никогда не придется играть " Виноват игра ".
  • Как только вы измеряете дефекты только на уровне ответственности за программный модуль, вы можете (и должны) измерять старые ошибки, а также новые, поскольку в интересах этой группы устранить все дефекты.
  • Измерение количества дефектов на уровне группы увеличивает размер выборки для каждой группы, поэтому аномалии между незначительными и серьезными дефектами сглаживаются, и простая мера «количество ошибок» может что-то значить, например, чтобы увидеть, улучшаете ли вы месяц -он-месяц.
  • Включите что-то, о чем заботится высшее руководство, потому что поддерживать их - ваша основная цель как группы разработчиков. В нашем случае это были видимые для клиента сбои, поэтому, даже если мера иногда является произвольной или, казалось бы, несправедливой, если это то, что измеряют боссы, то вам также необходимо обратить на это внимание.
  • Высшему руководству не нужно видеть показатели, которых у них нет, в своих собственных целях. Таким образом, он избегает искушения обвинять людей в ошибках.
  • Измерение своевременности выполнения проекта сделал изменил поведение разработчика и сфокусировался на выполнении задач. Это улучшило оценку и позволило группе давать реалистичные обещания. Если бы было легко собирать информацию о своевременности, я бы подумал об ее повторном использовании на уровне команды, чтобы измерить улучшение со временем.

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

18 голосов
/ 06 января 2010

Главное в метриках - знать, для чего вы их используете.Используете ли вы их как инструмент для улучшения, инструмент для вознаграждения, инструмент для наказания и т. Д. Похоже, вы планируете использовать их в качестве инструмента для улучшения.

Принцип номер один при настройкеМетрики должны поддерживать актуальность информации, чтобы лицо, получающее ее, могло использовать ее для принятия решения.Скорее всего, старший менеджер не может на микроуровне диктовать, нужно ли вам больше тестов, меньше сложности и т. Д. Но руководитель группы может сделать это.

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

  • Стоимость доставки
  • Своевременность доставки
  • Объем поставки и внешнее качество

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

Поэтому вы должны ориентировать показатели на более старших руководителейкоторые охватывают эти три, такие как:

  • Общая скорость (обратите внимание, что сравнение скорости между командами часто является искусственным)
  • Ожидаемый и фактический объем, доставленный в согласованные сроки
  • Количество производственных дефектов (возможно, на душу населения)

И измерять такие вещи, как покрытие кода, сложность кода, показатель «вырезать и вставить» (повторение кода с использованием flay или аналогичного), длину метода и т. Д. В командеуровень, на котором получатели информации могут реально изменить ситуацию.

4 голосов
/ 12 января 2010

Метрика - это способ ответить на вопрос о проекте, команде или компании. Прежде чем вы начнете искать ответы, вам нужно решить, какие вопросы вы хотите задать.

Типичные вопросы включают в себя:

  • Какое качество нашего кода?

  • качество улучшается или ухудшается со временем?

  • насколько продуктивна команда? Это улучшается или ухудшается?

  • насколько эффективно наше тестирование?

  • ... и т. Д.

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

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

Я рекомендую прочитать «1031 * Quality Software Management» Джеральда Вайнберга, том 2: Измерение первого порядка . Он подробно описывает метрики программного обеспечения, но говорит, что наиболее важными из них часто являются то, что он называет «Измерением нулевого порядка» - спрашивая у людей свое мнение о том, как идет работа над проектом. Все четыре тома серии дорогие и их трудно достать, но они того стоят.

3 голосов
/ 13 января 2010

Написание программного обеспечения

  • Что должно быть оптимизировано?

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

  • Сколько нужно оптимизировать?

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

(«... для допустимых / недопустимых входных тестовых данных и законных / недопустимых тестовых событий во всех состояниях тестов при всех необходимых объемах тестовых данных и объемах тестовых запросов для всех текущих и будущих сценариев интеграции тестов».)

  • Почему минимальная разумная сумма?

Потому что оптимизированный код сложнее написать и поэтому стоит дороже.

  • Какое руководство требуется?

Стандарты кодирования, базовая структура, критерии приемки и руководство по требуемым уровням оптимизации.

Как можно измерить успех написания программного обеспечения?

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

Какие затраты / время следует игнорировать при оценке совокупной производительности программистов ?

  • Потраченные впустую затраты / время, понесенные из-за изменений требований (включая архитектуру)
  • Дополнительные расходы / время, понесенные из-за недостатков в платформах / инструментах

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

Как можно измерить успех архитекторов?

Другие меры плюс:

  • Случаи "избежания раннего" воздействия недостатков платформ / инструментов
  • Степень отсутствия изменений в архитектуре
2 голосов
/ 14 января 2010

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

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

Результаты этого были:

  1. Несчастные разработчики, поскольку бонусы за производительность основывались на показателях, а люди не знали, как у них дела.

  2. Требуется много времени для многократного ввода данных в различные системы.

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

2 голосов
/ 12 января 2010

Если у вас есть некоторый опыт / знания Lean, то я бы предложил систему, которую Мэри Поппендик рекомендует (о чем я уже упоминал в этом предыдущем ответе ). Эта система основана на трех целостных измерениях, которые должны быть взяты как пакет:

  1. Время цикла
    • От концепции продукта до первого выпуска или
    • От запроса функции к развертыванию функции или
    • От обнаружения ошибок до разрешения
  2. Реализация бизнес-кейса ( без этого, все остальное не имеет значения )
    • P & L или
    • ROI или
    • Цель инвестиций
  3. удовлетворенность клиентов

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

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

2 голосов
/ 11 января 2010

Как я уже сказал в Чем увлекаются метрики кода? , метрики включают в себя:

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

Мы используем инструмент, способный обеспечить:

  • много метрик микроуровня (интересно для разработчиков), с трендами.
  • множество правил с возможностью многоуровневого (UI, Data, Code) статического анализа
  • множество правил агрегации (то есть те огромные количества метрик сконцентрированы в нескольких областях интересов, достаточных для более высокого уровня населения)

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

Текущий отзыв:

  • руководители проектов могут очень быстро защищаться, когда некоторые правила не соблюдаются, и их глобальная заметность значительно снижается.
    Каждое исследование должно быть адаптировано с учетом особенностей каждого проекта.
    Преимущество - это определение договора, в котором признаются исключения, но определяются правила, которые должны соблюдаться.
  • Более высокие уровни (отдел ИТ, заинтересованная сторона) используют глобальные заметки как один из элементов своей оценки достигнутого прогресса.
    На самом деле они будут внимательнее присматриваться к другим элементам, основанным на циклах доставки: как часто мы можем выполнять итерации и запускать приложение в производство? Сколько ошибок нам приходилось исправлять до этого выпуска? (с точки зрения слияний или с точки зрения неправильно настроенной пред-производственной среды), какие немедленные отзывы генерируются в новой версии приложения?

Итак:

какие показатели полезны для каких заинтересованных сторон и на каком уровне агрегирования

На высоком уровне:

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

На нижнем уровне:

  • достаточно статического анализа (но он должен охватывать многоуровневые приложения, иногда с многоязычными разработками)
  • действия пилотируются тенденциями и важностью
  • исследование должно быть одобрено / поддержано всеми уровнями иерархии, чтобы быть принятым / предпринятым (в частности, должен быть утвержден бюджет для последующего рефакторинга)
1 голос
/ 13 января 2010

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

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

Разработка «индекса доверия» может быть лучшим способом мониторинга находится ли проект на ходу или направлен на неприятности. Пытаться разработка системы голосования, где разумное количество представителей каждой интересующей области проекта анонимно голосовать их время от времени Доверие оценивается в двух областях: 1) Вещи на ходу 2) Вещи будут продолжать на ходу или получить вернуться на ходу. Это чисто субъективные измерения от людей, ближайших к «Действие». Подайте результаты в диаграмму типа Канбан, где столбцы представляют области голосования, и вы должен иметь довольно хорошее представление о том, где сосредоточить ваше внимание. использование вопрос 1, чтобы оценить, отреагировало ли руководство на предыдущий цикл голосования соответственно. Используйте вопрос 2, чтобы определить где руководство должно сосредоточиться дальше.

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

MBWA (Управление ходьбой) часто рекламируется как один из самых эффективных инструментов, который у нас есть, - это его вариант.

Эта техника не очень полезна на уровне отдельные команды, потому что это отражает только общее настроение команды. Вроде как использовать чьи-то часы, чтобы сказать им время. Однако на более высоких уровнях управления следует быть весьма информативным.

1 голос
/ 13 января 2010

Интересно, что я только что закончил читать PeopleWare , и авторы настоятельно не рекомендуют, чтобы отдельные метрики были видны начальству (даже непосредственным руководителям), но совокупные метрики должны быть очень заметными.

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

Вопрос явно не сфокусирован на .NET, но я думаю, что продукт .NET NDepend проделал большую работу по определению и документированию общих полезных метрик.

Раздел документации по метрикам является учебным чтением, даже если вы не используете .NET.

1 голос
/ 08 января 2010

Один из интересных подходов, который в настоящее время вызывает шумиху, это Kanban . Это довольно проворный. Что особенно интересно, так это то, что он позволяет применять метрику «проделанной работы». Я еще не использовал / не сталкивался с этим в реальной практике, но я хотел бы работать над тем, чтобы поток канбаниша пошел на мою работу.

...