Задача: баг или фича?
vk f t

Задача: баг или фича?

Сколь­ко вре­ме­ни потре­бу­ет­ся про­грам­ми­сту, что­бы запи­лить весь про­ект?

В рабо­те у про­грам­ми­ста есть про­ект, в кото­ром нуж­но пофик­сить три бага и доба­вить три фичи. За час про­грам­мист может пофик­сить 1–2 бага или доба­вить 1–2 фичи. Но он посто­ян­но отвле­ка­ет­ся на фору­мы и соц­се­ти, поэто­му каж­дый час рабо­та идёт так:

Сколь­ко мини­маль­но вре­ме­ни потре­бу­ет­ся про­грам­ми­сту, что­бы сдать про­ект без багов и с пустым тре­ке­ром задач?

РЕШЕНИЕ

Един­ствен­ное дей­ствие, при кото­ром не появ­ля­ет­ся новых багов и фич — это когда про­грам­мист за час добав­ля­ет сра­зу две фичи. Полу­ча­ет­ся, что для успеш­но­го завер­ше­ния нуж­но сде­лать чёт­ное коли­че­ство фич под­ряд — 2, 4, 6, 8 или что-то подоб­ное.

Полу­ча­ет­ся, что зада­ча про­грам­ми­ста — сво­и­ми дей­стви­я­ми как мож­но быст­рее прий­ти к тому, что­бы в про­ек­те оста­лись нена­пи­сан­ны­ми толь­ко фичи и что­бы их чис­ло дели­лось на 2. На стар­те ему нуж­но сде­лать 3 фичи, зна­чит, новая цель — из трёх багов полу­чить нечёт­ное коли­че­ство фич-заданий в тре­ке­ре. В ито­ге это даст про­грам­ми­сту их чёт­ное коли­че­ство, и он их попар­но выпол­нит.

Нечёт­ное коли­че­ство фич — это 1, 3, 5 и так далее. Если мы закро­ем сра­зу два бага, то это даст нам толь­ко одну новую фичу в тре­ке­ре, и оста­нет­ся ещё один баг. Дела­ем это за пер­вый час:

Исход­ные дан­ные: 3 бага, 3 фичи.

Час 1: 1 баг, 4 фичи (пофик­си­ли 2 бага, полу­чи­ли +1 фичу в тре­ке­ре).


У нас появи­лось чёт­ное коли­че­ство фич, кото­рые мож­но сра­зу попар­но закрыть. Тра­тим ещё 2 часа.

Час 2: 1 баг, 2 фичи (реа­ли­зо­ва­ли сра­зу 2 фичи, новых зада­ний не появи­лось).

Час 3: 1 баг (реа­ли­зо­ва­ли сра­зу 2 фичи, новых зада­ний не появи­лось).


Уже хоро­шо. Теперь един­ствен­ное, что оста­ёт­ся про­грам­ми­сту — отра­бо­тать этот баг.

Час 4: 2 бага (пофик­си­ли 1 баг, полу­чи­ли 2 новых).


А вот тут мож­но попасть в ловуш­ку, если сра­зу пофик­сить 2 бага и полу­чить фичу. Дело в том, что если оста­ёт­ся толь­ко одна фича, то после её выпол­не­ния в тре­ке­ре появ­ля­ет­ся запись, что нуж­но сде­лать ещё одну. Полу­ча­ет­ся бес­ко­неч­ный цикл. Зна­чит, нам нуж­но фик­сить по одно­му багу по оче­ре­ди.

Час 5: 3 бага (пофик­си­ли 1 баг, полу­чи­ли 2 новых).


Ага, у нас уже 3 бага, а это зна­чит, что мож­но сде­лать одно­вре­мен­но 2 из них, и не попасть потом в замкну­тый круг. Про­ве­рим.

Час 6: 1 баг, 1 фича (пофик­си­ли 2 бага, полу­чи­ли +1 фичу в тре­ке­ре).

Но мы уже встре­ча­ли ситу­а­цию, когда был толь­ко один баг, и зна­ем, как из него полу­чить 2, а из двух — фичу. Дела­ем.


Час 7: 2 бага, 1 фича (пофик­си­ли 1 баг, полу­чи­ли 2 новых).

Час 8: 2 фичи (пофик­си­ли 2 бага, полу­чи­ли +1 фичу в тре­ке­ре).


И сно­ва появи­лось чёт­ное коли­че­ство фич, кото­рые нуж­но сде­лать. Закры­ва­ем про­ект финаль­ным шагом.

Час 9: всё сде­ла­но (реа­ли­зо­ва­ли сра­зу 2 фичи, новых зада­ний не появи­лось).

Ответ: про­грам­ми­сту потре­бу­ет­ся мини­мум 9 часов.

Ещё по теме