Изучаване и подобряване на вашите умения за отстраняване на грешки

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

Когато сте се влюбили в програмирането (или поне сте решили, че това е възнаграждаваща кариера), вероятно сте го мислили като творческо начинание. Бихте проектирали страхотен софтуер, написали кода и пуф! - щеше да работи перфектно за първи път.

Да Нали.

В реалния свят отделихте куп време за отстраняване на грешки, вместо да пишете нови неща. Сигурен съм, че бих могъл да изровя някакъв неясен процент от времето за разработчици, посветено на отстраняване на дефекти, вместо да създавам нова функционалност, но се съмнявам, че трябва да чуете номер. Можете твърде лесно да си представите дните, които сте прекарали в търсене на „Грешка от ада“ и нейния ефект върху графика на вашия проект.

Сега има много начини, по които програмистите могат и учат нови софтуерни умения, независимо дали става въпрос за четене на книга, посещение на техническа конференция или посещение на сайтове като JavaWorld.com. (По-скоро се радвам, че правите последното.) Те обаче обикновено се фокусират върху инструменти, като езици или рамки, а не върху мета-техники, като например „Как да намеря тази грешка за два часа, вместо за два дни“. Езиците могат да идват и си отиват, както и дебъгърите на IDE, но способността да разпознаете под кой камък се крие вашата грешка е тази, която ще остане с вас завинаги.

Голяма част от умението да се научиш да отстраняваш грешки е, разбира се, опит. Това може да е вашият собствен опит или възможността да бъдете скакалец в краката на магистър програмист. Също така подозирам, че някои хора имат вроден талант за отстраняване на неизправности (еднакво подходящ за поправяне на счупена кола като неправилно поведение), а тези от нас без нея могат само да се надуят от завист.

Въпреки това, някои от това може да се научи. Например един главен програмист на мой познат имаше аксиома: Ако търсите грешка от (относително) дълго време и не можете да я намерите, той каза: „Търсите на грешното място“. Явно звучащо, но със сигурност вярно ... и колко често сте губили време, търсейки модула XYZ, когато проблемът е бил някъде другаде?

Попитах няколко разработчици за начините, по които те научиха или подобриха своите умения за отстраняване на грешки. Изненадващ брой от тях говореха за владеенето им на дебъгера на IDE или някои други познания за инструментите, но повечето от това, което исках да знам, са техните съвети за подобряване на способността на човек да поправя грешки. Ето кратко резюме на техните отговори.

  1. Бъдете дисциплинирани. Отстраняването на грешки е процес, каза един разработчик, а не поредица от случайни събития. Не ощипвайте на случаен принцип копчетата; следвайте процеса на изпълнение на кода. Точно като поправяне на косачка, каза той. Получава ли част А необходимите данни? Какво ще кажете за изхода? Ако всичко е наред, продължете напред.
  2. За да подобрите уменията си, отстранявайте грешките на кода на други хора, а не на вашия собствен. Ще бъде по-лесно да видите грешките в предположенията на другия човек, отколкото да видите собствените си. Можете да направите това като част от кръстосан преглед на код и отстраняване на грешки в кръстосани връзки. Ще развиете способността да разпознавате по-бързо често срещаните причини за дефекти, обеща един разработчик и ще ви научи да разпознавате (и да изоставяте) собствените си лоши практики за развитие.
  3. Преструвайте се, че сте компилаторът. Намерете и коригирайте колкото се може повече грешки, преди да натиснете бутона Компилиране. Докато повечето модерни IDE включват интегрирани програми за отстраняване на грешки (като Intellisense на Visual Studio), вие ще научите по-малко от тяхната автоматизация, отколкото от съзнателното изследване на процеса. (По същия начин никога няма да се научите да пишете правилно, като разчитате на проверка на правописа, за да свършите цялата работа.)
  4. Научете се да поправяте грешки възможно най-рано в процеса на разработка. Това може да означава нещо формализирано, като разработено от тестове. Това означава също така да отделите време за отстраняване на грешки в дизайна си, вместо да се насочвате към кодиране.
  5. Отстраняването на грешки е най-лесно, когато можете да държите цялата система в главата си. Не правете грешката да се фокусирате само върху една част от приложението. Обърнете внимание на взаимовръзките между модулите. Прочетете кода на няколко нива на абстракция, посъветва един програмист. "Намирането на грешката е най-трудната част и е необходимо ясно разбиране на това, което правят много части от кода", каза тя.
  6. Мисля, че част от същите съвети са и предложенията на някой друг: придобийте добро разбиране на системата едно ниво по-ниско от това, върху което работите. „Ако отстранявате грешки в системна програма C ниво, това помага да знаете някакъв сборник и нещо за ОС“, обясни водещ инженер на системен софтуер. „Ако отстранявате грешки в приложение J2EE, помага да знаете нещо за Java нишките, RMI и GC.“ В много случаи, посочи той, съобщенията за грешки идват от това едно ниво надолу. „Ако можете да разберете какво означава това, това ще ви помогне да разберете какво се обърква на вашето ниво на абстракция“, обясни той.

Няколко разработчици също препоръчаха допълнителни ресурси. Сред тях е книгата на Дейвид Аган „Отстраняване на грешки“, която обещава девет необходими правила, и „Защо програмите се провалят: Ръководство за систематично отстраняване на грешки“, която предстои да излезе във второ издание. Разработчикът, препоръчал последното, казва, че той преподава систематичен подход към отстраняване на грешки с много практически примери. Друг предложи онлайн есе „Десет умения на високоефективни софтуерни тестери“.

Харесвам всички тези отговори, но подозирам, че има още мъдрост, която да се споделя. Как придобихте уменията си за отстраняване на грешки? Как помогнахте на другите да подобрят своите?

Тази история „Обучение и подобряване на вашите умения за отстраняване на грешки“ първоначално е публикувана от JavaWorld.