Які проблеми розробника з корисними повідомленнями про помилки? [зачинено]


29

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

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

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

Ще один кандидат, також SQL Server (і mySQL) - це прекрасне string or binary data would be truncatedповідомлення про помилку та його еквіваленти. Багато часу, просте ознайомлення з створеним оператором SQL, і в таблиці показано, який стовпець є винуватцем. Це не завжди так, і якщо двигун бази даних виявив помилку, чому він не може заощадити нас на той час і просто каже нам, в якій проклятій колонці це було? На цьому прикладі ви можете стверджувати, що може бути хит вистави для його перевірки і що це заважатиме письменнику. Добре, я куплю це. Як наслідок, коли двигун бази даних знає, що є помилка, він робить швидке порівняння після факту між значеннями, які збиралися зберігатись, порівняно з довжинами стовпців. Потім покажіть це користувачеві.

Винні у цьому жахливі адаптери настільних таблиць ASP.NET. Запити можна виконати, і можна надати повідомлення про помилку, в якому сказано, що десь порушено обмеження. Дякую за це. Час порівнювати мою модель даних з базою даних, оскільки розробники лінуються вказувати навіть номер рядка або приклад даних. (Для запису я ніколи не використовував цей метод доступу до даних за вибором , це просто проект, який я успадкував!).

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

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

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

Це 2011 хлопці, приходьте на .


11
Нічого собі, це цілком зухвало.
Джордж Маріан

3
@George, чи можете ви сказати, що я просто витратив тривалий час на відстеження чогось, що насправді міг би бути вирішений швидше за належної помилки? :)
Moo-Juice

4
Я пропоную глибокі вдихи, можливо, йога та медитація. :) (Це сказало, я точно знаю, як ви себе почуваєте.)
Джордж Маріан

2
+1 - "рядок або двійкові дані будуть усічені" завжди зводить мене з розуму!
k25

Відповіді:


22

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

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

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


+1 Я навіть не думав про аспект перевантаження інформацією.
Райан Хейс

У своєму дописі я пояснив, що можу зрозуміти, чому деякі вважають, що багатослівність для кінцевого споживача може бути їм марною. Але ви хочете сказати, що кінцеві користувачі API (ag адаптери ASP.NET) або двигун бази даних (SQL-сервер) не хочуть багатослівних помилок? Щось, що може врятувати нас потенційно години втраченого часу? Сподобалось мені каламбур, до речі :)
Moo-Juice

1
@George, також, що стосується перевантаження інформації та корисності для кінцевого користувача, я знову бачу випадок, коли користувач текстового процесора не перекидає повний стек стежка, щоб у них не було моменту коричневого брюки і думаю, що вони видалили Інтернет. Однак ви запропонували відмінну альтернативу зі складною інформацією у файлі журналу. Все, що потрібно зробити зараз, - це додати For further information, see log20111701.txt. Це був би крок у правильному напрямку.
Му-Сок

2
@moo У кінцевому рахунку, я говорю, що це легко критикувати. (Я знаю, я це роблю часто.) Однак я намагаюся мати на увазі, що не обов'язково легко сказати, скільки інформації ви повинні включити в повідомлення про помилку. Було багато випадків, коли мені доводилося повертати та виводити більш детальну інформацію, ніж я спочатку передбачав під час налагодження. Крім того, є багато випадків, коли повідомлення про помилку виявилося не таким корисним, як я передбачав при його створенні.
Джордж Маріан

1
@moo Суть проблеми полягає в тому, що не завжди очевидно, наскільки корисна інформація. Наведені вами приклади здаються досить очевидними. Однак це не просто розширити на загальний випадок.
Джордж Маріан

21

Розробники не є правильними людьми писати повідомлення про помилки.

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


+1 Для багатьох типів помилок Framework / API частина проблеми - розробник бібліотеки не може знати контекст. Однак, ОП, здається, стосується, головним чином, "щось не так, але я не збираюся розповідати вам, де я знаю" повідомлення про помилки. Я думаю, це безпека, правда?
МВС

8

Благодійний вид:

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

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

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

Нездійснений вид:

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

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


Я розумію, звідки ви приїжджаєте у багатьох випадках із кінцевими користувачами. Однак випадки, які я окреслив у своєму первісному дописі, часто трапляються, коли пишуть код проти баз даних. Що стосується програм для кінцевих користувачів, таких як текстовий процесор чи комп’ютерна гра, помилок, як правило, не повинно відбуватися, якщо щось погано не відбувається, і навіть тоді помилка може нічого не означати для кінцевого користувача ( Process Handle Raped By Spawned Injector, Quitting SYstem..... користувач: "wtf зробив?"). Але у випадку з SQL Server / ASP.NET, я думаю, що можна було б докласти більше зусиль :)
Moo-Juice

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

деякі випадки можуть бути нетривіальними. Я десь простий код, який фіксує string/binary dataпомилку, яка витягує всю інформацію стовпців із зазначеної таблиці, вивчає минулі значення та показує, які стовпці були б порушеннями. Це було банально. Можливо, я кусаю занадто багато, тому що мої приклади випадків тривіальні, але я повністю розумію, що це не завжди так. Як ми зупинимо породження інжекторів у процесі зґвалтування, можливо, буде важко :)
Moo-Juice

6

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


Ага, так, хороший пункт. Це колись турбує про витрати.
Джордж Маріан

Я можу визнати перспективу витрат (і чорт забирай, це не означає, що мені це сподобається ). Я не можу говорити з точки зору розробників SQL Server або ASP.NET, але я знаю , що він не приймає , що багато додаткових зусиль , щоб забезпечити ім'я стовпця. Я визнаю, що на мій простий приклад це може бути вирішено за годину. Тоді ще 1000 помилок, які можуть бути створені. Але вони могли хоча б почати із загальних :)
Moo-Juice

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

На деякому рівні це може бути дійсним, але ця сама проблема навіть з'являється у простих сценаріях Perl, де просто додається $! щоб повідомлення про помилку було б надзвичайно корисним. Дешевше (з точки зору часу розробника) писати "die" $ path: $! "', Ніж писати абсолютно марну" die "Не вдалося відкрити $ path"'
William Pursell

6

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

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


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

btw ... цей механізм призводить до цілого класу смішних повідомлень про помилки - згідно з текстами "Серйозна помилка -567 в модулі dwarf678: помилки не виявлено"
Ichthyo,

4
  • Іноді занадто багато інформації може становити загрозу безпеці; ви не знаєте, хто читає повідомлення про помилку
  • Іноді операція, яка кинула виняток, настільки складна, що неможливо отримати змістовне повідомлення без негативного впливу на швидкість / складність коду

Я відповів на ваш перший пункт, що дозволяє змінити багатослівність на винятки, викинуті у вашому коді. Ваш другий пункт суперечить тому, що в цей момент сталася помилка і швидкість вже не є визначальним фактором (imho). І якщо створення багатослівного повідомлення про помилку вимагає ПРИОРУВАННЯ на продуктивність, щоб викинути виняток, тоді я згоден. Перемістіть цей код ПІСЛЯ викинутого винятку. Я не бачу жодного з цих пунктів як вагомий аргумент проти правильних повідомлень про помилки :)
Moo-Juice

Щоправда, я припускаю, що ви можете шукати інформацію, як тільки щось сталося, а не слідкувати за тим, що вам може знадобитися. Хоча, якщо ви знаходитесь у вкладених циклах, захоплення індексів / індексів може бути проблематичним.
StuperUser

-1 для першого пункту, з яким я не згоден, +1 для другого.
Джон Хопкінс

1
@jon Контраст - це загальне повідомлення про помилки для входу, порівняно з більш конкретними повідомленнями про помилки, які насправді повідомляють, що пішло не так. наприклад, "Не вдалося знайти комбінацію імені користувача / пароля" проти "Ви ввели неправильний пароль." / "Це ім'я користувача не існує." Здається, я згадую про вразливість в ASP.NET, де повідомлення про помилку було дійсно корисним для розтріскування ключів шифрування.
Джордж Маріан

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

3

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

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

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

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

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

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


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

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

2

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

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


1
вибачте, це зовсім недоцільно. Хто несе відповідальність за керування цим індексним документом, за його правильність. Як і будь-яка письмова документація, окрема від коду, вона застаріла б і почала отримувати джерело нових помилок в той самий момент, коли вона написана.
Ічтьо

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

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

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

2

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

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

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

catch (IOException error)
{
//File is in use
throw new GenericExceptionParsedByTheUIThread("File is in use.");
}

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

Так ось такі помилки можуть зберігатися і в сучасні дні. Очевидно, вони всі МОЖУТЬ бути виправлені; але в багатьох випадках налічується набагато більше накладних витрат, ніж можна було б подумати (наприклад, у цьому випадку, можливо, вам доведеться, щоб ця функція пройшла перерахування мережевих з'єднань і спільних даних, щоб побачити, чи віддалений апарат використовує для цього файл бази даних для деяких причина) і вартість далеко не банальна.


@GWLlosa, це чудова відповідь, і я не розглядав. Це сказав (і я не можу навести тут повний приклад коду), коли я отримую IOException, перш ніж кинути свій GenericException, я міг 1) Попросити Processesпідсистему про список процесів. 2) Запросіть кожен процес, яку базу даних вони використовують. 3) Зіставити процес із базою даних, призначеною тій, яку я намагаюся перезаписати, 4) кинути DatabaseInUse(dbName, processName, applicationNameвиняток. :)
Moo-Juice

1
Безумовно, можливо; але код, який відповідає БД процесу (особливо в мережі), може бути складним / повільним / схильним до помилок, що може призвести до деяких додаткових розладів ("Я просто намагаюся відновити локальну (* #% ^!) % file !!!! Чому я
дбаю, щоб акції мережі не доступні

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

1
Цей приклад справді дуже повчальний: Зазвичай у такому оброблювальному пристрої вилову ви навіть не можете точно сказати, яка частина блоку спробу вийшла з ладу (зазвичай є кілька частин, які можуть викликати IOException). Крім того, дуже ймовірно, що в цьому місці ви не можете сказати ім'я файлу, щоб не сказати, яка логічна таблиця відповідає цьому файлу.
Ічтьо

@Ichthyo, без образи, але я не думаю, що це наївно. Я не прошу движок бази даних заблокувати систему, щоб сказати мені, який процес все ще має ручку з базою даних. Я не прошу припинити все підприємство. Якщо мені потрібно дати просту відповідь, це в першу чергу показує принциповий недолік сервера баз даних. Пам'ятайте, що вона повинна бути розроблена для того, щоб якомога швидше повернути відповідну інформацію. Щоб поставити це питання "хто?" насправді не повинно бути таким наївним, як ви заявляєте :)
Moo-Juice

2

Моїм улюбленим був (ще в кінці 70-х) компілятор Univac Fortran IV, коли читав нецифрові цифри, правдиво оголошував

Було зроблено спробу інтерпретації безглуздих даних


+1, абсолютно фантастично! Саме така помилка змушує вас просто захотіти відмовитися і піти і вирощувати курей на Фіджі.
Moo-Juice

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

0

Я вважаю, що більшість повідомлень про помилки насправді є програмованими (само) орієнтованими прославленими відладочними кодами / операторами printf.

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

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

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


0

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

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

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

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

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