Равновесный процент от общей емкости, выделенной для устранения дефектов, равен скорости ввода дефектов .
На этот показатель могут влиять многие факторы, в том числе, конечно: какой продукт разрабатывает команда, какие технологии и технические приемы они используют, уровень квалификации команды, культура компании и т. Д.
Что касается команды B, если они создают в среднем 8 единиц переделок на каждые 10 единиц работы, которые они выполняют, то при работе с этими 8 единицами создаются новые 6,4 единиц переделок. Мы можем оценить общее усилие, которое им в конечном итоге придется потратить, как сумму геометрической прогрессии:
10 + 8 + 6,4 + 5,12 + ...
Количество ошибок будет экспоненциально уменьшаться со временем, но у команды B коэффициент экспоненты такой, что она очень медленно стремится к нулю. На самом деле, сумма первых трех слагаемых в вышеуказанной серии составляет всего 24,4; из первых пяти - 33,6; из первых 10, 45; из всей серии, 50. Итак, команда B резюме: скорость впрыска дефектов, 0,8; разработка функций, 10/50 = 20%; исправление дефектов, 80%. 20/80 - это их устойчивое распределение мощностей.
Команда А, напротив, находится в гораздо лучшей форме. Их прогрессия выглядит так:
40 + 10 + 2,5 + 0,625 + ...
Сумма этой серии составляет 53 1/3, поэтому распределение разработки функции в команде A составляет 40 / (53 1/3) = 75%, а распределение исправлений дефектов - 25%, что соответствует коэффициенту внедрения дефектов 10/40 = 0,25. ,
На самом деле, все термины в серии команды А после первых трех ничтожно малы. С практической точки зрения это означает, что команда A, вероятно, может устранить все свои ошибки с помощью пары выпусков поддержки, второй выпуск довольно мал по объему. Это также создает иллюзию, что любая команда может сделать это. Но не команда Б.
Я думал об этой эквивалентности, читая новую книгу Дэвида Андерсона «Канбан» . (Книга посвящена другой теме, но также затрагивает вопросы качества.) При обсуждении качества программного обеспечения Андерсон цитирует эту книгу Каперса Джонса «Оценка программного обеспечения, тесты и лучшие практики» :
«... в 2000 году ... измеренное качество программного обеспечения для североамериканских групп ... варьировалось от 6 дефектов на функциональную точку до менее 3 на 100 функциональных точек, диапазон от 200 до 1. Средняя точка составляет примерно 1 дефект на От 0,6 до 1,0 функциональных баллов. Это означает, что команды обычно тратят более 90 процентов своих усилий на устранение дефектов ». Он приводит пример, предоставленный одним из его коллег из компании, которая тратит 90% времени на устранение ошибок ,
Беглость, с которой Андерсон переходит от скорости внедрения дефекта к распределению емкости для исправления дефектов ( требование отказа - это термин для этого), предполагает, что эквивалентность этих двух вещей хорошо известна исследователям качества программного обеспечения и, вероятно, известна в течение некоторого времени ,
Ключевыми словами в цепочке рассуждений, которые я пытаюсь представить здесь, являются «equlibrium» и «устойчивый». Если мы уберем устойчивость, то есть очевидный способ обмануть эти числа: вы делаете начальное кодирование, затем переходите к коду где-то еще и оставляете обслуживание другим. Или вы увеличиваете техническую задолженность и выгружаете ее у нового владельца.
Очевидно, что ни одно конкретное распределение не подойдет всем командам. Если мы постановили, что 20% должны быть потрачены на ошибки, то, если у команды очень низкий уровень внедрения дефектов, у них просто не будет достаточно ошибок, чтобы заполнить время, и если у команды был очень высокий уровень, их ошибки будет продолжать накапливать.
Математика, которую я здесь использовал, упрощена. Я пренебрег такими вещами, как трансакционные издержки (встречи по планированию и оценке, посмертные и т. Д.), Которые несколько повлияли бы на проценты. Я также опустил уравнения, имитирующие поддержку одного продукта и разработку другого одновременно. Но вывод все еще остается в силе. Делайте то, что вы можете, с точки зрения технических приемов, таких как модульное тестирование, непрерывная интеграция, проверка кода и т. Д., Чтобы снизить уровень внедрения дефектов и, следовательно, потребность в сбоях. Если вы можете создать только одну ошибку для каждых 10 функций, у вас будет много свободного времени для разработки новых функций и удовлетворения ваших клиентов.