Каждый в ИТ-индустрии знает, как трудный оценить сроки реализации проекта.
Трудно объективно оценить, сколько времени это займет. решение сложная задача.
Одна из моих любимых теорий заключается в том, что это просто статистический артефакт. Допустим, вы оцениваете проект за 1 неделю.
Допустим, есть три равновероятных исхода: либо потребуется 1/2 недели, либо 1 неделя, либо 2 недели.
Медианный результат на самом деле такой же, как и расчетный: 1 неделя, но среднее (то есть среднее, то есть ожидаемое значение) составляет 7/6 = 1,17 недели.
На самом деле оценка калибруется (несмещена) по медиане (которая равна 1), а не по среднему значению.
Разумная модель «коэффициента инфляции» (фактическое время, разделенное на расчетное время) будет выглядеть примерно так: логнормальное распределение .
Если оценка составляет одну неделю, то мы моделируем фактический результат как случайную величину, распределенную в соответствии с логнормальным распределением примерно за одну неделю.
В этой ситуации медиана распределения составляет ровно одну неделю, но среднее значение намного больше:
Если мы возьмем логарифм уровня инфляции, мы получим простое нормальное распределение с центром около 0. Это предполагает, что медианный уровень инфляции равен 1x, и, как вы, надеюсь, помните, log(1) = 0. Однако разные задачи могут иметь разные неопределенности.
около 0. Мы можем смоделировать их, изменив параметр σ, который соответствует стандартному отклонению нормального распределения:
Просто чтобы показать реальные цифры: когда log(фактическое/оценочное) = 1, тогда коэффициент инфляции равен exp(1) = e = 2,72. Равновероятно, что проект займет exp(2) = 7,4 раза и завершится за exp(-2) = 0,14, т.е.
14% от расчетного времени.
Интуитивно понятно, что причина такого высокого среднего значения заключается в том, что задачи, которые выполняются быстрее, чем ожидалось, не могут компенсировать задачи, которые занимают гораздо больше времени, чем ожидалось.
Мы ограничены 0, но не ограничены в другую сторону.
Это просто модель? Еще бы! Но вскоре я доберусь до реальных данных и покажу с помощью некоторых эмпирических данных, что на самом деле они довольно хорошо соответствуют действительности.
Оценка времени разработки программного обеспечения Пока все хорошо, но давайте действительно попробуем понять, что это означает с точки зрения оценки сроков разработки программного обеспечения.
Допустим, мы рассматриваем план из 20 различных программных проектов и пытаемся оценить, сколько времени потребуется для его завершения.
торговый центр .
Именно здесь среднее значение становится решающим.
Средние складываются, а медиана — нет. Итак, если мы хотим получить представление о том, сколько времени потребуется для завершения суммы N проектов, нам нужно посмотреть на среднее значение.
Допустим, у нас есть три разных проекта с одинаковым σ = 1:
медиана | Средний | 99% | |
---|---|---|---|
Проблема А | 1.00 | 1.65 | 10.24 |
Проблема Б | 1.00 | 1.65 | 10.24 |
Проблема С | 1.00 | 1.65 | 10.24 |
СУММА | 3.98 | 4.95 | 18.85 |
медиана | Средний | 99% | |
---|---|---|---|
Задача А (σ = 0,5) | 1.00 | 1.13 | 3.20 |
Задача Б (σ = 1) | 1.00 | 1.65 | 10.24 |
Задача C (σ = 2) | 1.00 | 7.39 | 104.87 |
СУММА | 4.00 | 10.18 | 107.99 |
Обратите внимание, что весьма неопределённый план с σ=2 доминирует выше остальных, исходя из среднего времени завершения.
А для 99-го процентиля он не только доминирует, но и буквально поглощает всех остальных.
Мы можем привести более крупный пример:
медиана | Средний | 99% | |
---|---|---|---|
Задача А (σ = 0,5) | 1.00 | 1.13 | 3.20 |
Задача Б (σ = 0,5) | 1.00 | 1.13 | 3.20 |
Задача C (σ = 0,5) | 1.00 | 1.13 | 3.20 |
Задача D (σ = 1) | 1.00 | 1.65 | 10.24 |
Задача E (σ = 1) | 1.00 | 1.65 | 10.24 |
Задача F (σ = 1) | 1.00 | 1.65 | 10.24 |
Задача G (σ = 2) | 1.00 | 7.39 | 104.87 |
СУММА | 9.74 | 15.71 | 112.65 |
Даже по среднему времени один сумасшедший проект занимает примерно половину времени, затрачиваемого на все задачи, хотя по медиане они схожи.
Для простоты я предположил, что все задачи имеют одинаковую оценку времени, но разные неопределенности.
Математика сохраняется при изменении сроков.
Забавно, но это ощущение у меня уже давно.
Добавление оценок редко работает, если у вас много задач.
Вместо этого выясните, какие задачи имеют наибольшую неопределенность: эти задачи обычно доминируют по среднему времени выполнения.
На диаграмме показано среднее значение и 99-й процентиль как функция неопределенности (σ):
Теперь математика объяснила мои чувства! Я начал учитывать это при планировании проектов.
Я действительно считаю, что суммирование оценок времени выполнения задач вводит в заблуждение и дает ложное представление о том, сколько времени займет весь проект, потому что у вас есть эти безумно перекошенные задачи, которые в конечном итоге отнимают все время.
Где эмпирические доказательства? Я долго хранил это в разделе «любопытные игрушечные модели» своего мозга, иногда думая, что это изящная иллюстрация явления реального мира.
Но однажды, просматривая Интернет, я наткнулся на интересный набор данных об оценке сроков реализации проектов и фактических сроках их завершения.
Фантастика!
Давайте построим график быстрого рассеяния расчетного и фактического времени:
Средний уровень инфляции для этого набора данных составляет 1X, а средний уровень — 1,81x. Опять же, это подтверждает предположение, что разработчики хорошо умеют оценивать медиану, но среднее значение гораздо выше.
Посмотрим на распределение уровня инфляции (логарифм):
Как видите, он довольно хорошо центрирован вокруг 0, где коэффициент инфляции равен exp(0) = 1.
Возьмем статистические инструменты
Теперь я собираюсь немного поразвлечься со статистикой — смело пропустите эту часть, если вам не интересно.
Какой вывод мы можем сделать из этого эмпирического распределения? Можно было бы ожидать, что логарифмы уровня инфляции будут распределяться по нормальному закону, но это не совсем так.
Обратите внимание, что сами σ случайны и различаются для каждого проекта.
Один из удобных способов моделирования σ — выбрать их из обратное гамма-распределение .
Если предположить (как и раньше), что логарифм темпов инфляции распределяется в соответствии с нормальным распределением, то «глобальное» распределение логарифмов темпов инфляции заканчивается Распределение студентов .
Давайте применим распределение Студентов к предыдущему:
На мой взгляд, вполне подходит! Параметры распределения Стьюдента также определяют обратное гамма-распределение значений σ:
Заметим, что значения σ > 4 весьма маловероятны, но когда они возникают, они вызывают в среднем взрыв в несколько тысяч раз.
Почему задачи программного обеспечения всегда занимают больше времени, чем вы думаете Предполагая, что этот набор данных репрезентативен для разработки программного обеспечения (сомнительно!), мы можем сделать еще несколько выводов.
У нас есть параметры распределения Стьюдента, поэтому мы можем рассчитать среднее время, необходимое для выполнения задачи, не зная σ для этой задачи.
В то время как медианный уровень инфляции в этом приближении составляет 1x (так же, как и раньше), уровень инфляции 99% составляет 32x, но если вы перейдете к 99,99-му процентилю, это колоссальные 55. миллионы ! Одна (расширенная) интерпретация состоит в том, что некоторые задачи в конечном итоге практически невыполнимы.
На самом деле, эти самые крайние случаи оказывают такое огромное влияние на средний что средний уровень инфляции любая задача становится бесконечный .
Это очень плохая новость для всех, кто пытается уложиться в сроки! Краткое содержание Если моя модель верна (большое «если»), то вот что мы можем узнать:
- Люди оценивают хорошо медиана время выполнения задачи, но не среднее.
- Среднее время значительно больше медианного из-за того, что распределение искажено (логарифмически нормальное распределение).
- Если сложить баллы за n задач, ситуация станет еще хуже.
- Задачи с наибольшей неопределенностью (или, скорее, с самым большим размером) часто могут доминировать над средним временем, необходимым для выполнения всех задач.
- Среднее время выполнения задачи, о которой мы ничего не знаем, на самом деле составляет бесконечно .
- Очевидно, что выводы основаны только на одном наборе данных, который я нашел в Интернете.
Другие наборы данных могут дать другие результаты.
- Моя модель, конечно, тоже очень субъективна, как и любая статистическая модель.
- Я был бы рад применить эту модель к гораздо большему набору данных, чтобы увидеть, насколько она надежна.
- Я предполагал, что все задачи независимы.
На самом деле, у них может быть корреляция, которая сделает анализ гораздо более раздражающим, но (я думаю) в конечном итоге придут к схожим выводам.
- Сумма логнормально распределенных значений не является еще одним логнормально распределенным значением.
Это слабость этого распределения, поскольку можно утверждать, что большинство задач представляют собой просто сумму подзадач.
Было бы здорово, если бы наше распространение было устойчивый .
- Я убрал из гистограммы мелкие задачи (расчетное время меньше или равное 7 часам), так как они искажают анализ и был странный всплеск ровно на 7.
- Код находится на Github , по-прежнему.
-
Три Мифа О Рентабельности Инвестиций В Ux
19 Oct, 24 -
Lineage 2. Чат. Глупость Программистов?
19 Oct, 24 -
Электронных Книг От Microsoft Не Будет
19 Oct, 24 -
Вторгшийся О Нетленности.
19 Oct, 24