Подтвердить что ты не робот

Показатели разработки и разработки программного обеспечения

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

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

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

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

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

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

ИЗМЕНИТЬ

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

4b9b3361

Ответ 1

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

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

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

Видимые пользователем проблемы

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

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

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

Количество выполненных работ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Резюме

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

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

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

Ответ 2

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

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

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

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

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

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

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

И измерьте такие вещи, как охват кода, сложность кода, сокращение патчей "n" (повторение кода с использованием flay или аналогичного), длина метода и т.д. на уровне команды, где получатели информации могут действительно иметь значение.

Ответ 3

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

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

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

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

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

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

  • ... и т.д.

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

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

Я рекомендую прочитать Джеральда Вайнберга Quality Software Management Vol 2: измерение первого порядка. Он подробно разбирается в показателях программного обеспечения, но говорит, что наиболее важным часто является то, что он называет "Zero Order Measurement", - спрашивая у людей свое мнение о том, как идет проект. Все четыре тома в серии дороги и трудно получить, но стоит того.

Ответ 4

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

  • Что нужно оптимизировать?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Экземпляры "избегающего раннего" воздействия на недостатки платформ/инструментов
  • Степень отсутствия изменений в архитектуре

Ответ 5

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

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

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

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

  • Некоторое время, затрачивая много времени на вхождение данных в различные системы.

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

Ответ 6

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

Ответ 7

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

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

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

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

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

Текущая обратная связь:

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

Итак:

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

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

  • метрики (статического анализа) на самом деле являются результатом низкоуровневых метрических агрегаций и упорядочены по доменам.
  • Другие показатели (более "оперативно-ориентированные", основанные на цикле выпуска приложения, а не только на статическом анализе кода) счет
  • Фактический ROI достигается за счет других действий (например, six-sigma).

На более низком уровне:

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

Ответ 8

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

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

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

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

Ответ 9

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

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

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

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

Ответ 10

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

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

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

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

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

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