Чи є помилки частиною технічної заборгованості?


44

Наш Scrum Master продовжує посилатися на помилки як на технічну заборгованість. Він має рацію, чи вважаються помилки технічною заборгованістю у світі Agile?


Чому важливо вирішити, чи є вони технічною заборгованістю чи ні? Чи вплине це на те, як ви представляєте помилки на вашій дошці scrums, чи вплине на те, як ви плануєте їх виправити?
Брайан Оуклі

@BryanOakley Деякі помилки можуть заблокувати вас таким чином, що змусить вас обійтись, ввівши ще більше технічної заборгованості. Ці помилки можуть бути надто дорогими для виправлення
BЈoviћ

4
@BryanOkley - Я завжди вважав, що технічна заборгованість - це проектування або реконструкція, яка потрібна для вдосконалення впровадження, але в даний час неможлива через обмеження часу / бюджету. Я думаю, що важливо використовувати правильну термінологію. Я можу помилятися або він може помилятися, саме тому я задав питання.
user86834

Я розумію, що. Чому важливо називати їх технічним боргом? Ви кажете, що якщо ви класифікуєте їх як "технічну заборгованість", ви будете ставитися до цих помилок інакше, ніж до інших помилок?
Брайан Оуклі

1
Ви можете мати величезну кількість технічної служби і не мати жодної помилки. Технічний відділ - це протилежність добре написаному та добре розробленому коду. Добре написаний код простий у обслуговуванні, тестуванні та додаванні. Технічний відділ уповільнює розвиток, ускладнює відстеження помилок та збільшує шанси на те, що новий код введе помилки.
Луїс Перес

Відповіді:


35

Я думаю, що відповідь тут досить проста - ключовою особливістю технічної заборгованості є те, що ми щось несемо за вибором.

Ми вирішили приймати рішення архітектури, проектування чи реалізації, які, як ми очікуємо, викличуть у нас проблеми пізніше, щоб швидше досягти конкретних цілей.

Помилка - це не те, що ми обираємо у своєму коді - тому фактично це не технічна заборгованість.

Звичайно, можна зробити всілякі цікаві (і, можливо, вагомі) аргументи щодо вибору, зробленого після відкриття, але принципово (і особливо в контексті питання) ні, помилки - це не технічна заборгованість - для мене це більше схоже на зловживання бінґо.


Як постскрипт - я не згоден із твердженням, що його врахування того, що технічна заборгованість призведе до помилок і сама по собі, тому що дозволяє зробити багато припущень щодо природи зробленого вибору. Наприклад, ви можете мати добре написаний, добре структурований тестовий код, який все ще робить, скажімо, архітектурні компроміси для ранньої доставки. Так само ви можете обрати не автоматизувати процеси розгортання, що не призведе до помилок, але, ймовірно, призведе до великого стресу та болю. Звичайно, якщо заборгованість полягає в тому, що ви написали код, який не є ТВОРОДИМ (або будь-яким іншим), то так ... але це далеко не завжди так.


1
+1. Я вважаю, що відповідь Бовича досить правдива, але ваша відповідь дійсно вдарила нігтем по голові. (Я трохи розгублений вашим використанням терміна де-факто. Хоча я не думаю, що ви можете сказати, що де-юре , помилка - це технічний борг?)
ruakh

Використання мови є такою цікавою ... спробуйте це: en.wikipedia.org/wiki/De_facto - прочитайте її як "для всіх намірів і цілей", що досить близьке до мого наміру
Мерф

"Я думаю, що відповідь тут досить проста - ключовою особливістю технічної заборгованості є те, що ми щось несемо за вибором". Звідки ви взяли це визначення? Я не думаю, що це правильно. Це одна частина технічної заборгованості, інша частина неявна і, як правило, пов'язана з незнанням та поганою практикою.
gphilip

de jure du jure. Завтра де-факто. QED.
radarbob

1
Відповідно до технічного квадрату боргу Мартіна Фаулера, ви можете ідентифікувати помилки та неправильний код як "необачний ненавмисний" борг: martinfowler.com/bliki/TechnicalDebtQuadrant.html . Я думаю, що справа в тому, що якщо ви позначаєте деякі чутливі помилки як заборгованість, то ви можете зрозуміти, скільки вони коштують вам і чи потрібно вам їх усунути. Наприклад, чи є у вас неохайний написаний модуль, який змінюється лише раз на рік, і для його перезапису знадобиться тижнів - ви, ймовірно, повинні зберігати його так, як це є, тому що виплата відсотків за цим боргом дуже мала
шершень

20

Так.

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

Джерело: Вікіпедія

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

Більшість помилок можна було уникнути додатковим оглядом або використанням більш формальних методів. Не роблячи все можливе, щоб не мати помилок в першу чергу, ви знижуєте негайну / короткострокову вартість проекту, але збільшуєте технічну заборгованість.


Прочитавши відповідь Бйовича , я бачу, що це може бути не так просто, як я думав.

  • Наприклад, чи є помилки частиною технічної заборгованості? У статті стверджується, що лише помилки, про які ви знаєте, але вирішили їх не виправляти, є частиною технічного боргу.

  • Інший приклад, «Думки Крістофера про технічний борг» кваліфікують помилки як результат технічної заборгованості, а не її частини. Як було сказано, на багато перерахованих результатів, як-от "вартість впровадження нової функції", впливає кількість помилок.

  • Нарешті, створюючи модель технічної заборгованості ABCDE-T , я включив помилки як один із шести факторів, але вони розглядаються по-різному. Основна увага зосереджена не на самих помилках, а на способах їх збирання, визначення пріоритетності та вирішення. Самі помилки з'являються як результат технічної заборгованості (як у попередньому прикладі), але ніколи не з'являються як фактор технічної заборгованості.

На цю тему я все ще схильний відповідати, що помилки - усі помилки - є частиною технічної заборгованості.

Перший аргумент:

Читаючи цитату Джеффа Етвуда, більшість помилок кваліфікуються як:

додаткові зусилля, які ми маємо докласти в майбутньому розвитку через швидкий і брудний вибір дизайну

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

Другий аргумент:

Якщо ми проводимо паралель між звичайною заборгованістю компанії, яку важливо враховувати, коли компанія продається іншій, і технічною заборгованістю, що не менш важливо враховувати, коли проект продається іншій компанії або дається іншій команді ми можемо легко побачити, що помилки є частиною технічної заборгованості, оскільки нова команда:

  • Чи потрібно мати справу з цими помилками, перш ніж створювати нові функції (пункт 5 тесту Джоеля: чи виправляєте помилки перед тим, як писати новий код?)

  • Або зберігайте помилки, зберігаючи / збільшуючи таким чином технічну заборгованість.


1
Я особисто не вважаю дефекти технічною заборгованістю, хоча аргумент, представлений у цій відповіді, є надійним, але а) це не має особливого значення, як ми визначаємо ІМО технічного боргу, і б) це така добре письмова відповідь. м все одно проголосую. +1!
Брайан Оуклі

13

Джефф Етвуд у своїй статті " Сплата свого технічного боргу" дає дуже гарну відповідь щодо того, що таке технічний борг:

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

Строго кажучи, помилки не є частиною технічної заборгованості, якщо вони не сповільнюють подальший розвиток програмного забезпечення (зміна речей, додавання нових функцій тощо). Вони є дефектами програмного забезпечення.

Однак, коли виправити помилку занадто дорого, або вона змушує вас обійти її (і ввести ще більше технічної заборгованості), то вона стає частиною технічного боргу.


1
Насправді вони так і є, тому що помилки можуть призвести до додаткових робіт, що спричиняють нові функції, які без помилок не знадобляться. Я навіть бачив, як код розвивається в поганому напрямку (нарощуючи більше технічної заборгованості) через помилку, яка якось перетворилася на "це не помилка, це особливість", тому що клієнти писали сценарії чи все, що покладається на помилку поведінки.
Мар'ян Венема

@MarjanVenema Добре. Я не думав про це.
BЈович

Зауважте, що ця цитата не від Джеффа Етвуда, вона взята з поста Мартіна Фаулера . Джефф цитує це також у своїй публікації в блозі.
Uooo

6

Помилка - це не технічна заборгованість. Технічна заборгованість скорочується на якість, а не на її відсутність. Програмне забезпечення в першу чергу не повинно надходити з помилками. Ви знаєте, це все робоче програмне забезпечення над всеосяжною документацією.

Найбільшими правопорушниками технічної заборгованості є "тимчасові виправлення помилок", ви знаєте тих, кого ви ввели, щоб пройти тест і отримати історію прийнято. Ті, які ви пообіцяли собі, пізніше відремонтуєте, але потім цього не зробите. У міру накопичення цих тимчасових виправлень, виправлень та інших речей код стає непотрібним захаращеним, його важко оновити та перевірити, і взагалі це кошмар, але він все одно робить свою роботу.

Для підтримки цієї думки я пішов прямо до джерела, Уорд Каннінгем. Зважаючи на це, Уорд зробив хороше співбесіду ще раз з Каперсом Джонсом, його варто подивитися.

Дебати щодо технічної заборгованості, з Уордом Каннінгем та Каперсом Джонсом

Ще одна стаття, яку варто прочитати, - Мартін Фаулер

Мартін Фаулер з технічного боргу

У статті Мартіна знайдіть посилання на оригінальну згадку про технічну заборгованість Уорда Каннінгама з OOPSLA92:

Система управління портфелем WyCash

Цитата з наведеної статті:

Хоча незрілий код може працювати добре і бути повністю прийнятним для замовника , надмірна кількість зробить програму незмінною, що призведе до екстремальної спеціалізації програмістів і, нарешті, негнучким продуктом. Доставка першого разу коду - це як заборгованість.

Зрештою, технічний борг, можливо, прийшов до помилок для деяких людей, і я думаю, це добре. Я просто не думаю, що це був початковий намір.


"Програмне забезпечення в першу чергу не повинно надходити з помилками в ньому." Все програмне забезпечення, окрім найпростішої програми, містить помилки. Ви встановили цю планку занадто високо.
bhspencer

2

Строго кажучи, відповідь на ваше запитання - Ні.

Технічна заборгованість може (і, ймовірно, призведе до помилок), але висновок про те, що будь-яка помилка є результатом технічної заборгованості, - це інтерпретація між двома фактами: помилка є і є технічна заборгованість (якщо припустити, що її можна зробити як факт).

Якщо ваш майстер Scrum заявляє «як теорію», що помилки є результатом технічної заборгованості, він вирізає кути. Якщо він говорить це про конкретні помилки, які повторно з’являються, він цілком може бути правильним - тут ми не можемо побачити якість коду ;-)

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


2

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

Очевидний факт полягає в тому, що наявні помилки представляють додаткову роботу, яку, можливо, потрібно буде виконати в майбутньому, або виправити їх, або обійти їх.

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

Тож, чи говорите ви, що відомі (чи невідомі) помилки - це технічна заборгованість ... чи ні ... насправді лише питання визначення. А оскільки немає авторитетного визначення 1 "технічного боргу", вся дискусія є безглуздою.

Як писав Льюїс Керролл:

"Коли я вживаю слово, - сказав Христим Дампті, досить зневажливим тоном, - це означає саме те, що я обираю, щоб означати - ні більше, ні менше". .

Саме так працює природна мова. Слова означають те, що люди думають, що означають. Визначення словника і так далі просто документує спосіб використання слів, і вони не обов'язково є точною документацією. Якщо ваш майстер Scrum хоче згадати відомі помилки як технічну заборгованість, хто скаже, що він "помиляється"?


1 - Цитування людей, таких як Уорд Каммінгем та Капер Джонс, теж не допомагає. У кращому випадку це говорить нам про те, що вони означають (або означають), коли вони вживають (вживають) фразу. Вони не "володіють" фразою. Хоча вони, безперечно, є авторитетами з цих питань, це все ще лише їх думка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.