Коли виправлення помилок стає надмірним, якщо взагалі?


128

Уявіть, що ви створюєте відеопрогравач у JavaScript. Цей відеоплеєр неодноразово фіксує відео користувача, використовуючи рекурсивну функцію, і через це браузер через too much recursion RangeErrorдеякий час спрацьовує a .

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

  • Виправити помилку

  • Залиште клопа

Чи не слід виправляти помилки, в які люди потраплять? Коли виправлення помилок стає надмірним, якщо воно коли-небудь трапляється?

Редагувати:

Якщо рекурсивний підхід, який не викликає фактичну помилку, викликає занепокоєння, припустімо, що кожен раз, коли програвач циклізує відео, змінна збільшується на 1. Після 2 53 циклів ця змінна переповниться, і ваша програма не зможе її обробити, викинувши виняток.


95
Не псуйте мого прикладу зі сценарію випадку
Тіаго Маріньо

15
@PlasmaHH Я використовую цей гіпотетичний сценарій, щоб пояснити своє питання. Якщо помилка існує чи ні, це зовсім не має значення
Tiago Marinho

13
@TiagoMarinho: пункт, який я намагаюся зробити, полягає в тому, що іноді це просто правильна річ, щоб визначити такий сценарій, як передбачувана поведінка.
ПлазмаHH

23
Чому на Землі ви запустили б такий цикл, використовуючи в першу чергу рекурсію? Можливо, ви не хочете виправити помилку, але ви впевнені, що вам слід переглянути свій дизайн-процес :-)
jamesqf

28
Це більше схоже на питання бізнесу. Ви повинні визначити пріоритет на основі витрат на виправлення та впливу / частоти помилки.
Кейсі Кубалл

Відповіді:


164

Ви повинні бути прагматичними.

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

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

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


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

74
Кінцеві користувачі жодним чином не обмежуються тим, на вашу думку, розумним використанням вашого програмного забезпечення. Будуть користувачі, які хочуть назавжди зациклювати відео. Це функція, яку надає ваше програмне забезпечення, тому вони будуть використовувати його.
gnasher729

36
@ gnasher729 "10-годинний XXXX" відео на Youtube - це хороший ідентифікатор, який дійсно дехто просто хоче щось назавжди замкнути.
Кріс Сірефіс

23
Ще одна проблема: якщо ваше програмне забезпечення популярне, то хтось стикається з помилкою, що дійсно трапляється лише в рідкісній ситуації, розміщує його в Інтернеті, і раптом всі та їх собака кажуть: "це програмне забезпечення є сміттям, воно виходить з ладу, якщо я зацикли на відео день". Або конкурент використовує це, щоб продемонструвати, наскільки легко розбити вашу програму.
gnasher729

4
Наголос на останньому абзаці. Чи знаєте ви, що MacOS Classic зазнає краху, якщо він отримає 32 768 подій поспіль "натискання миші" без втручання події "звільнення миші"?
Марк

79

У Windows 95 була схожа помилка, яка спричинила збій комп'ютерів через 49,7 днів . Це було помічено лише через кілька років після випуску, оскільки дуже мало систем Win95 так чи інакше стояло. Отже, є один момент: помилки можуть бути нерелевантними іншими, більш важливими помилками.

Що вам потрібно зробити - це оцінка ризику для програми в цілому та оцінка впливу для окремих помилок.

  • Це програмне забезпечення на межі безпеки?
  • Якщо так, чи може ця помилка призвести до експлуатації?
  • Чи це програмне забезпечення "критично важливе" для призначених користувачів? (Див . Перелік речей, якими Java EULA забороняє використовувати його )
  • Чи може помилка призвести до втрати даних? Фінансові втрати? Репутаційна втрата?
  • Наскільки вірогідна ця помилка? (Ви включили це у свій сценарій)

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


2
Я також згадую (апаратну) помилку в деяких процесорах Intel, де певне значення з плаваючою комою пішло не так.

5
@WilliamKappler en.wikipedia.org/wiki/Pentium_FDIV_bug - це те, на що я вважаю, що ви маєте на увазі. Був рік, перш ніж хтось цього помітив.
Jeutnarg

10
@ gnasher729 - Не дуже, вони вже були внизу і все ще копали :) Більшість людей доводилося перевстановлювати Win 95 частіше, ніж 49,7 днів IIRC.
mcottle

4
@Luaan Коментар був задуманий як легкий копати M $, звідси і смайлик після першого речення. Вони були позаду восьмиболу з 95-м, тому що це вийшло дуже пізно в 95 (можливо, тому, що випустити Win95 у 1996 році було б поганим виглядом), наполовину запечений (пам'ятаєте USB BSOD?) І схильний стати нестабільним і вимагати регулярних перевстановлень отже, моє друге речення - яке ніколи не згадувало про запуск сервера на Windows 95, я не знаю, звідки у вас ТО (флешбеки?). Другого випуску компакт-диска вдосконалили питання, але початковий реліз 95-х був дози.
mcottle

5
TBH Я думаю, що саме фіаско "Windows for Warships" нанесло більше репутаційних збитків ( archive.wired.com/science/discoveries/news/1998/07/13987 ) і використовувало NT. Машини Unix того часу могли керувати багаторічними оновленнями, навіть використовуючи (дуже ранні) версії Linux. Усі домашні комп’ютери також були здатні до тривалості роботи, хоча рідко використовуються таким чином. Я бачив мікрофони BBC, вбудовані в навчальні експонати через десять років після того, як вони застаріли.
pjc50

33

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

Вам потрібно визначити свої припущення, а потім протестувати ці припущення на кутових випадках.

Дивлячись на ваш приклад, я бачу пару припущень:

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

Інші люди обговорили перше припущення, але подивіться на друге припущення: що робити, якщо моє відео - лише частка секунди?

І звичайно, можливо, це не дуже поширений випадок використання. Але ви справді впевнені, що ніхто не завантажить дуже коротке відео? Ви припускаєте, що відео мінімальна тривалість, і ви, мабуть, навіть не здогадувались, що щось припускаєте! Чи може це припущення викликати інші помилки в інших місцях вашої програми?

Невідомі припущення - це величезне джерело помилок.

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

Отже, якщо ви думаєте, що "мені не слід було б це робити, тому що це ніколи не станеться", тоді вам знадобиться трохи часу, щоб справді вивчити це припущення. Ви часто будете думати про кутові випадки, які можуть бути більш поширеними, ніж ви спочатку думали.

Якщо говорити, є момент, коли це стає вправою у марності. Вам, мабуть, все одно, чи ваша програма JavaScript ідеально працює на калькуляторі TI-89, тому витрачати на це витрату будь-якої кількості часу.

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

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


Дуже гарна точка Кевіна. Зауважте, мій коментар до обраної відповіді вище, який зосереджений на аналітичному питанніWhat's the worst thing that could happen?
OMY

Ще одне припущення тут полягає в тому, що постійно зростаючий стек призведе до проблем лише тоді, коли він досягне розміру переповнення. Насправді, стек може бути нормальним ресурсом, з якого ця помилка постійно просочується. Весь браузер міг стати повільнішим і повільнішим за допомогою крихітних біт на кожному ітераті ^ H ^ H ^ H ^ H ^ H ^ Hrecursion.
Алфе

1. В ОП ніколи не говорили, що проблема викликана зростаючою групою. Це може бути так само легко викликано помилкою в процедурі лічильника (dec -> div / 0?). 2. Якщо проблема - проблема переповнення стека, чи не слід це питання розміщувати в StackOverflow? <rimshot!> ;-D
OMY

@OMY До кого спрямований цей коментар?
Кевін Уордман

13

Я рекомендую прочитати наступний документ:

Надійність та її загрози: таксономія

Крім усього іншого, він описує різні типи несправностей, які можуть виникнути у вашій програмі. Те, що ви описали, називається спокою , і в цій статті воно описано так:

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

Описавши це, все зводиться до співвідношення витрат і вигод. Вартість складається з трьох параметрів:

  • Як часто видавалося питання?
  • Якими були б наслідки?
  • Наскільки це вас турбує особисто?

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

Це не особисте. Це бізнес.

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


«Це не особисте. Це справа "Майкла, я думаю, а не Віто. (Ви були б вражені тим, як хороші кінцеві користувачі наштовхуються на межі та
виявляють

Насправді це саме Віто, якщо читати книгу. Навіть у фільмі саме Том Хаген каже, що спочатку, коли сперечається з Сонні про те, чи варто їм ходити на матраци, і лише після цього Майкл вперше говорить відому цитату: "Це не особисте, Сонні. Це суворо діло". . ". Але Хаген дізнався про це від Віто.
Володимир Стокіч

11

Ця помилка залишається нерозкритою лише до того дня, коли хтось поставить вашого плеєра на екран лобі, де працює презентація компанії 24/7. Так що це все-таки помилка.

Відповідь на те, що ти робиш? це справді ділове рішення, а не інженерне:

  • Якщо помилка вражає лише 1% ваших користувачів, а вашому гравцю не вистачає підтримки для необхідної функції ще 20%, вибір очевидний. Задокументуйте помилку, а потім продовжуйте.
  • Якщо помилка є у вашому списку todo, часто краще виправити її, перш ніж почати додавати нові функції. Ви отримаєте переваги процесу розробки програмного забезпечення з нульовим дефектом, і ви не втратите багато часу, оскільки він все одно є у вашому списку.

5

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

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

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


6
Оцінку рентабельності виправлення помилок важко оцінити - вам, як правило, доводиться покладатися на своє судження.
Мураха P

Повернення, яке виправлення принесе, - це здебільшого репутація, яку практично неможливо оцінити. Якщо я єдиний, хто навіть знає, що може виникнути помилка, а потім через рік-два я перемикаю роботу, і нова компанія думає вставити відеоплеєр у свій продукт (можливо, продаючи мільйони одиниць), я б рекомендував використовувати цей?
Джеррі Єремія

@JerryJeremiah, якщо помилка заважає бізнес-процесу запускатись, це не про репутацію, це залежить від важливості бізнес-процесу. І в будь-якому випадку та в кожній політиці, яку ви застосовуєте, щоб виправити помилки чи ні, ви повинні робити суб'єктивну оцінку на основі свого досвіду та знань. Навіть якщо ви можете знати точну кількість користувачів, які зіткнуться з помилкою, вам все одно доведеться зробити людський вибір (також політика ROI також може включати статистику звернень про помилки, щоб збільшити витрати). Оскільки сьогодні немає жодного механічного способу апріорно знати ідеальну річ.
JoulinRouge

5

tl; dr Це RESOLVED/WONTFIXріч. Просто не зловживайте цим - технічна заборгованість може накопичитися, якщо ви не будете обережні. Це принципова проблема вашого дизайну, яка, ймовірно, може викликати інші проблеми в майбутньому? Потім зафіксуйте. Інакше? Залиште це до тих пір, поки воно не стане пріоритетним (якщо це колись стане).


5

В описуваній ситуації насправді є три помилки:

  1. Відсутність процесу для оцінки всіх зафіксованих помилок (ви ввійшли помилку у своєму квитку / відсталі / будь-якій системі у вас є, правда?), Щоб визначити, чи слід її виправляти чи ні. Це рішення управління.

  2. Відсутність у вашій команді навичок, що призводить до використання таких несправних рішень. Це необхідно терміново вирішити, щоб уникнути майбутніх проблем. (Почніть вчитися на своїх помилках.)

  3. Проблема в тому, що відео може перестати відображатися через дуже довгий час.

З трьох помилок (3), можливо, не потрібно буде виправляти.


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

4

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


2

Одне, що я дізнався за свої роки кодування - це те, що повернеться помилка. Кінцевий користувач завжди виявить це і звітує про це. Виправити помилку чи ні, це "просто" пріоритет і термін виконання.

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


2

Тут є три речі:

Принципи

Це одна сторона монети. В якій - то ступеня, я відчуваю , що це добре , щоб наполягати на виправленні помилок (або поганих реалізацій, навіть якщо вони «працюють»), навіть якщо ніхто не помічаючи цього.

Подивіться на це так: справжня проблема - це не обов'язково помилка на вашому прикладі, а те, що програміст вважав, що це гарна ідея втілити цикл таким чином, в першу чергу. З першого моменту було очевидно, що це не гарне рішення. Зараз є дві можливості:

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

  • Програміст помітив, але вважав це "не проблемою". Якщо це залишається стояти, тоді розробляється культура laissez-faire, яка в кінцевому підсумку призведе до помилок, де це дійсно боляче. У цьому конкретному випадку, кого це хвилює. Але що робити, якщо цей програміст наступного разу розробляє банківську програму і вирішить, що певне сузір'я ніколи не відбудеться. Тоді це робить. Погані часи.

Прагматизм

Це інша сторона. З Звичайно , ви, швидше за все, в даному конкретному випадку, не виправити помилку. Але слідкуйте - є прагматизм, і тоді є прагматизм. Хороший прагматизм - якщо ви знайдете швидке, але все ж міцне, обґрунтоване рішення проблеми. Тобто ви уникаєте переоформлення речей, але речі, які ви реально реалізуєте, все ще добре продумані. Поганий прагматизм - це коли ти просто зламаєш щось разом, що працює «просто так» і зламається при першій нагоді.

Невдача швидко, невдача

Якщо ви сумніваєтеся, невдалі швидко і невдачі.

Це означає, серед іншого, що ваш код помічає стан помилки, а не навколишнє середовище.

У цьому прикладі можна зробити щонайменше, щоб зробити це так, щоб не виникала помилка жорсткого виконання ("глибина стека" або щось подібне), замінивши її жорстким виключенням. Наприклад, ви можете мати глобальний лічильник і довільно вирішити, що ви можете сплатити кошти після 1000 відео (або будь-яка кількість достатньо висока, щоб ніколи не виникало при звичайному використанні, і досить низька, щоб все-таки працювати в більшості браузерів). Потім дайте цьому винятку (який може бути загальним винятком, наприклад, на RuntimeExceptionJava або простому рядку в JavaScript або Ruby) змістовне повідомлення. Вам не доведеться йти до того, щоб створити новий тип винятків або все, що ви робите для вашої конкретної мови програмування.

Таким чином, у вас є

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

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


2
Вибачте, якщо ви так ставитесь до того, як швидко я прийняв відповідь. На захист я просто не знав, що питання матиме> 10000 переглядів, і на момент прийняття багато відповідей. У всякому разі, я все ще не передумав найкращої відповіді.
Тіаго Маріньо

@TiagoMarinho, немає проблем, коментар в першу чергу не націлений на вас особисто, і я не очікував, що ви переглянете це. ;) Мене більше спотикає мотивація того, хто проголосував, щоб фактично видалити мою відповідь ... Крім того, тут є декілька спроб щодо декількох відповідей без жодних коментарів. Не впевнений, чи так це робиться в цій конкретній області SE.
AnoE

Я повністю погоджуюсь щодо дивного схильності
Тіаго Маріньо

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

@jaxter, точно. Звідси мій підхід відкрити розум до виправлення помилок (навіть якщо це здається непосильним), але коли ви вирішите не виправляти помилку, то принаймні застосуйте невдачу. Очевидно, що якщо невдале рішення в першу чергу дорожче «справжнього» виправлення, то уникайте цього і робіть справжню помилку.
AnoE

1

Повідомлення на столі старшого розробника на моєму робочому місці пише

Чи допомагає це комусь?

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


0

Три речі спадають на думку:

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

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

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

По-третє , ваш приклад містив аспект, згідно з яким виправлення помилки означало б переробити програму. (Якщо ви знімете цей аспект, відповідь проста: Виправте помилку, вона не повинна зайняти занадто довго, тому що не потрібно переробляти дизайн. Інакше :) У такому випадку я втрачу довіру до програми так, як вона створена в даний час. Редизайн був би способом відновити цю довіру.

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


2
Будь ласка, залишайте коментар, коли ви звертаєтесь із заявою. Ми повинні знати, що таке критика, щоб покращити відповідь.
Альфе

0

Низька ймовірність / легкі наслідки = виправлення з низькою пріоритетністю

  • Якщо ймовірність виникнення дуже низька
  • Якщо наслідки виникнення легкі
  • Тоді помилка не несе загрози, тоді це не є пріоритетним виправленням.

Але це не може стати милицею для ледачих розробників ...

  • Що навіть "дуже низька частота" навіть означає?
  • Які навіть легкі наслідки означають?

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

Більшість розробників дивується, що речі, про яке вони спочатку шукали, ніколи не трапляться, насправді трапляється багато

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

Протистояти своїй інтуїції реальними даними світу

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

Мій приклад легкої проблеми та міри контролю

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

Висновок

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


-1

Я думаю, що це ставить неправильне запитання з самого початку.

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

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


Не впевнений, що тут найкраще працює утилітарна метрика. Зрозуміло, що приклад відеоплеєра був розроблений таким чином, що має низький вплив, але навіть це не є надійним. Один відповідь вже вказав промо-цикл 24/7 у лобі Use Case, а інший може бути кіоском на конвенції з продажу / техніки, що триває тиждень. Обидва коштують бізнесу та / або грошей для бізнесу, так що нетривіально.
jaxter

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

-2

Виправлення помилок - це завжди надмір

Давайте спочатку класифікуємо частину помилки .

Це правдива помилка , наприклад, одноразова помилка або змінна тінізація, яка не допомогла тестам? У цьому випадку я впевнений, що окрім «виправлення» проблеми, ви також написали нові тестові одиниці, скористалися можливістю переробити код поблизу, де всі останні корисні для роботи .

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

Тому, будь ласка, не намагайтеся це просто виправити .

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

Наслідки очевидні, тепер ви повинні підтримувати як розбитий код, так і новий ліміт циклу.

PS вибачте за екстремальний погляд.

PPS Примітка щодо термінології: ви не можете "виправити" помилку. Ну, може, ветеринар може, але не ходимо туди ;-). Проблеми вирішуються або «виправляються», а помилки видаляються або обробляються.


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

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

2
Я не знаю, про яке виправлення помилок ви говорите, але в моєму щоденному світі "змінити архітектуру" - це метод виправлення помилок. Ви можете визначити, що ви збираєте під терміном "виправлення помилок".
doppelgreener

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

2
@OMY Дякую за пояснення. Я відчуваю , що , оскільки таке визначення «виправити» не використовується питанням, відповідь має реагувати на зміст цього слова, це використовується.
doppelgreener
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.