Станьте кращим помилковим виправленням


24

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

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

Однак, коли настає час забезпечення якості, і я працюю над виправленням помилок, моє натхнення сприймає величезну носадивність. Мені доводиться змушувати себе досить екстремальними заходами (знаєте, музикою з високим вмістом БПМ, надмірною кількістю кофеїну тощо), щоб щось зробити. Моя робота, як правило, пов'язана з тим, щоб вступити в існуючий масштабний проект і додати нові функції або виправити помилки, тому я не можу точно сказати своєму роботодавцю, що мені потрібно пару тижнів написати одиничні тести на весь їх код :) Крім того, Серверна технологія, яку ми часто використовуємо, дуже забороняє як для тестування модулів, так і для інтеграції, оскільки у неї є досить багато проблем із завантаженням Java. Я не зовсім проти виправлення помилок, іноді це може бути весело, але зовсім не весело коли вам доведеться внести незначні зміни і зачекати від 30 секунд до 3 хвилин, щоб побачити, працювали вони чи ні (через те, як працює система).

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


4
"тож я не можу точно сказати своєму роботодавцю, що мені потрібно пару тижнів, щоб написати одиничні тести на весь їхній код" . Чи є причина в цьому? Я роблю це багато, і це справді окупається для всіх. Я маю на увазі, якщо вам потрібно 3 тижні для тестування одиниць, ви можете просто заощадити 3 тижні виправлення помилок. Зазвичай я навіть знаходжу безліч можливих помилок, які повністю потрапили під радари QA. Звичайно, ви, мабуть, не хочете робити все це самостійно.
netcoder

10
Не пишіть помилки у своєму коді ... проблема вирішена.
Майкл Браун

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

1
@PaulTomblin Я розумію, що ти кажеш. Я знаю деяких розробників, які люблять розробку інтерфейсу ... мені найкраще подобається код без інтерфейсу. Написати новий код часом важко, тому що іноді ви отримуєте "авторський блок"
Майкл Браун

1
Важко виміряти "продуктивність" виправлення помилок, тому що ви можете витратити багато часу на з'ясування того, що "не проблема", так, як стверджує, що Edision сказав, що він знайшов "1000 способів НЕ зробити лампочку ", і я вважаю, що невиправлення часто є повчальним у навчанні того, які підказки є важливими та поточне (та майбутнє) завдання виправлення помилок.
Zeke Hansell

Відповіді:


21

зовсім не цікаво, коли вам доведеться внести незначні зміни і чекати 30 секунд до 3 хвилин, щоб можна було побачити, працювали вони чи ні

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

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

Чекати так довго, щоб отримати зворотний зв'язок - це нудно і демотивує, а не сам акт виправлення помилок.


Коли-небудь читав Міфічний чоловік-місяць? Просто чекайте картинку до наступного ранку і намагаєтесь проаналізувати вміст дамп / реєстру стека, який був присутнім під час відмови ...
sq33G

@ sq33G Або ще гірше, якщо ваша тестова команда в Індії, з якою ви спілкуєтесь лише електронною поштою (реальна історія).
Гарретт Холл

13

Виправлення помилок - надзвичайно важливий навик, якого слід засвоїти. Десь я читав, що зазвичай витрачає 80% часу на виправлення 20% питань у додатку.

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


1
Те, що ви пишете, є правдою; однак, ваші 80% / 20% вірні лише тому, що в дикій природі так багато шаленого коду. Під дурним я маю на увазі недостатньо розроблений або надмірно архітектурний або неправильно архітектований або просто звичайний неохайний досвід (програмування тріщин-головою). Незважаючи на це, немає нічого поганого в тому, що розробник віддав перевагу розробці виправлення помилок. Додайте до того, що більшість програмного забезпечення погано розроблена з самого початку, і ви вже налаштовуєте більшість помилок на виправлення.
Віль Мур III

@wilmoore: Ви маєте рацію з хижим кодом, а також є вимога, що змінюється.
ManuPK

6

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

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


Я категорично не згоден з тим, щоб зробити це грою виправлення більшості помилок за день, або подібних до них. Деякі помилки тривіально ізолювати та виправляти, як тільки ви знаєте, як їх запустити: вставте саме це значення у це поле та спостерігайте: тепер залишилася помилка. (Можливо, ви рахуєте байти замість символів і забули про пробіл вище, скажімо, U + 007F.) Інші (особливо помилки, пов’язані з різними умовами перегонів або багатопотоковою програмою), можуть легко зайняти кілька днів роботи для відтворення, але будьте критичні, коли вони роблять трапляються в полі. Однак вони обидва гарантують лише один запис у програмі відстеження помилок.
CVn

Равномірний підрахунок таких помилок означав би, що всі будуть просто виправляти прості помилки, а не боротися, тобто з умовами перегонів. :-) Не дозволяти «важким» помилкам спокою на користь простих речей - це зовсім інша тема.
Олександр Гесслер

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

5

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

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

Крім цього, іноді робота - це саме та ... робота.


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

Вам потрібно написати процедуру "несподіваної обробки помилок", яка допоможе вам їх наздогнати ;-)
Zeke Hansell

2

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

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

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

Отже, коротше кажучи, я б сказав "завжди розвивайся". :)


Я чую тебе. Мені б хотілося, що я можу щось зробити для автоматизації речей. У мене є сервер і клієнт, і я не можу точно автоматизувати клієнта. У робочому процесі цієї речі є декілька етапів, і багато помилок виникають між етапами, тому мені доводиться робити етап на 30 секунд, потім 3 хвилини або в зворотному напрямку. Підсумок, це досить кошмарно> :)
Naftuli Kay

2

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

  1. Напишіть кілька одиничних тестів лише на фрагмент коду, який порушується. Переконайтеся, що у вас є тести, що підтверджують усі його бажані функції, а також деякі, які особливо ізолюють поведінку баггі.
  2. Напишіть новий код, який пройде всі тести, які ви тільки що написали.
  3. Замініть старий код на новий.
  4. Виконайте кілька інтеграційних тестів. Тут ви зіткнетесь із трихвилинними перезавантаженнями сервера, але його слід мінімізувати, якщо ви добре зробили кроки 1-3.
  5. Вуаля!

2

Можливо, вам слід переглянути статтю Брайана Хейса « Налагодження себе» , статтю, що з’явилася в американському вченому в 1995 році. Ви можете вжити заходів (наприклад, звичне використання умов Yoda ), щоб зменшити або усунути найбільш ненависні види помилок, які ви створюєте.

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


1

Якщо розробка програмного забезпечення нудна, ви робите це неправильно. Іншими словами, це не проблема з вами, а проблема з вашою платформою та процесом. Чи думали ви шукати позицію за допомогою динамічної мови (наприклад, Python, Ruby, JavaScript), де вам не доведеться чекати перезавантаження сервера?


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

1
@TK: У моєї останньої компанії ми мали великий успіх, інтегруючи Groovy в наш процес розробки Java для автоматизації раніше ручних процесів. Це не Java, але вона була досить близькою і настільки ефективною, що у нас було дуже мало відштовхувань.
Кевін Клайн

1

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

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

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

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


1

Більшість програмістів доводиться вирішувати особисті проблеми з виправленням помилок у певний момент своєї кар’єри.

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

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

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

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


1

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

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

Знайдіть цю помилку та виправте її.


1

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

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

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

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


0

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

То як вам це весело? Ну, я не можу реально відповісти на це для вас, так як я насправді не уявляю, що це таке, що пливе ваш індивідуальний човен. Для мене я трохи зловмисник інструментів, тому відповідь була в тому, що у нас є дуже надійний ланцюжок інструментів і гнучкий процес розробки, який сприяє виправленню помилок, а не більш простої проблеми, а просто вирішенню проблеми. швидко. В даний час я в основному розвиваюсь на C #, і я завжди шукаю інструменти, які дозволять зняти нудний час, витрачаючи на себе частину програмного забезпечення. Я використовую тестовий перший підхід до розробки, підтримуваний дуже хорошим BDD API під назвою StoryQ . Я використовую Resharper для автоматизації більшої частини рефакторингу та StyleCop, щоб тримати кришку таких речей, як стиль кодування. Моє останнє доповнення до ланцюжка інструментів було включитиNCrunch, який виконує мої тести безперервно і одночасно у фоновому режимі, поки я кодую , і це дійсно NCrunch, який зарекомендував себе як чейнджер гри.

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

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