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

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

Прежде чем перейти к нашей проблеме JIRA, давайте разберемся с условными вероятностями и их выводом. Допустим, мы хотим оценить вероятность того, что человек является мужчиной, если у человека длинные волосы, P(M|L). Вы можете заметить, что намного проще оценить обратное: вероятность иметь длинные волосы, если человек — мужчина P(L|M). отношение между этими вероятностями известно как байесовский вывод и может быть записано как

P(M|L) = P(L|M) * P(M)/P(L).

P(L) представляет собой количество всех людей с длинными волосами, которых называют приоритетными. мы можем сказать, что 60 % всех людей носят длинные волосы.
P(M) — это вероятность того, что человек является мужчиной, называемая маргинализацией, и мы можем сказать, что она равна примерно 50 %. среди населения.
P(L|M) представляет собой вероятность, и мы можем сказать, что вероятность того, что у человека будут длинные волосы, составляет 20 %, если это мужчина.

Тогда наш окончательный ответ P(M|L) = 20*50/60 = 17%. Это вероятность того, что человек является мужчиной, если у него длинные волосы.

Любой тикет JIRA имеет как минимум 2 наиболее важных параметра. Это продолжительность между моментом открытия тикета и его завершением и сложностью тикета. Сложность билета измеряется в баллах, т.е. 1–5 (легкий-сложный, представляющий усилия по реализации), и он определяется функциональной группой разработчиков во время сессий планирования.

Теперь предположим, что мы хотим оценить вероятность того, что запрос JIRA займет 2 дня, если уровень сложности составляет 3 балла.

Наш ответ — вероятность того, что элемент JIRA будет выполнен за 2 (D) дня, если сложность составляет 3 (C) балла: P (D | C). Лично я, когда делаю оценки для разработчиков, мне удается, я понял, что гораздо проще работать с обратным: вероятностью сложности при заданном количестве дней P(C|D). Применяя правило Байеса, мы можем вычислить исходный результат: P(D|C) = P(C|D) * P(D) / P(C)

Например, для определенного проекта у нас есть следующие 7 наблюдений

Затем, чтобы найти P(C|D), нам нужно отфильтровать таблицу, в которой «заполненный» столбец равен 2.

Сложность — это число, представляющее усилия по ее реализации, и оно является категоричным, поэтому, чтобы найти вероятность сложности, равную 3, нам нужно подсчитать общее количество вхождений, равное «3» для сложности столбца, деленное на общее количество записей в столбце. Для массива [1,3] у нас есть только одно вхождение, равное 3, и вероятность P(C|D) = 1/2, где 2 — размер массива.

Затем мы можем вычислить наш априор P(C), который представляет количество вхождений «3» во всех наблюдениях для столбца complexity. Мы видим, что у нас есть только 3 таких случая (они выделены на изображении наблюдений JIRA) в общей сложности из 7 наблюдений, что дает нам P (C) = 3/7.

Поиск маргинализации аналогичен: количество вхождений «2» в столбце completed, days делится на общее количество наблюдений, P(D)=2 /7

Тогда наш окончательный результат P[D=2|C=3] = (1/2) * (2/7) / (3/7) = 0,33.

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

Что делать, если у нас нет наблюдений?

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

  • Приор, P(D=2). Мы ожидаем, что для всех заявок вероятность будет такой же, как и для всех заявок, выполнение которых занимает два дня. Учитывая, что спринты обычно длятся две недели (10 рабочих дней), мы можем сказать, что около 10% всех заявок можно сделать за 2 дня.
  • Маргинализация, P(C=3). Как и выше, для всех билетов ожидаемая вероятность будет для всех билетов со сложностью в три балла. Учитывая диапазоны сложности, например, от 1 до 5, большинство билетов будут простыми, а меньшее количество — более сложными, и мы можем предположить, что у нас может быть распределение [50%, 20%, 15%, 10%, 5%]. Итак, для P(C=3) у нас есть 15%.
  • Вероятность, P(C=3|D=2). Это вероятность прохождения сложности с 3 баллами за 2 дня. Мы можем оглянуться на наш прошлый опыт и посмотреть на некоторые другие проекты, мы можем сказать, что это может быть около 65% за спринт.

Теперь у нас есть все компоненты, и мы можем рассчитать нашу окончательную вероятность:

P[D=2|C=3] = 65 * 10 / 15 % = 43 %

Распределение Пуассона

Распределение Пуассона также может использоваться для оценки времени выполнения заявки, потому что это дискретное распределение вероятностей, которое выражает вероятность того, что заданное количество событий произойдет за фиксированный интервал времени. Для простоты мы можем сказать, что это распределение, которое можно использовать для оценки вероятности того, что что-то произойдет «X» раз, в нашем случае D, что равно 2.

На картинке наблюдений JIRA мы видим, что для C = 3 у нас есть D = [2,4,5], что дает нам среднее значение 3,7. Теперь мы можем использовать один из онлайн-калькуляторов распределения Пуассона и использовать 3,7 для среднего (M) и 2 для случайного числа (X), результат равен 0,29.

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

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

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