Детективная работа

Авторы: 
Анна Дегтярева
Программы, даже по графике и обработке изображений, приходится отлаживать. Ни одна программа не будет работать корректно с первого раза. В прошлом году на прилавках книжных магазинов появилась книга, которую просто необходимо прочитать тем, кто хочет структурировать или пополнить свои знания о том, как следует отлаживать свои и чужие программные коды.
Мэтт Тэллес, Юань
Хсих, "Наука отладки" М.: Кудиц-Образ, 2003. - 560 с.

Мэтт Тэллес, Юань Хсих, "Наука отладки" М.: Кудиц-Образ, 2003. - 560 с.

Книга состоит из 15 глав, которые можно читать по порядку или вразнобой, или только понравившиеся. После каждой главы авторы приводят задачи для тренировки детективной способности читателей - это описание ситуации, при которой программа не работает, а читателю предлагается ее обдумать и предложить свою версию, почему это происходит. Чтобы среди читателей не возникло разногласий, в приложении даны все решения задач.

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

Случайная цитата: <Наиболее явный симптом логической ошибки - когда вы видите программиста, трясущего головой и говорящего: <Но это совсем не то, что я имел в виду!>>

Классификация методов отладки также заслуживает пристального внимания. Вы когда-нибудь задумывались над тем, почему у некоторых программистов получается отлаживать код <по интуиции>? Так вот в этой классификации интуиция вынесена именно как один из действенных методов отладки. Однако полагаться на него можно лишь в том случае, когда вы очень хорошо знакомы с отлаживаемым кодом - например, являетесь его автором. А если вы его автором не являетесь, не отчаивайтесь - в книге приведен набор других способов отладки, которыми можно пользоваться даже с большей эффективностью. О каждом из описанных методов рассказано, когда стоит его применять - в зависимости от того, сколько информации об отлаживаемом приложении известно. А также какие из методов лучше не применять никогда. :)

Особое внимание уделено методикам отладки. Как узнать, куда вкралась ошибка? Как отделить причину от симптомов? Методики отладки - это конкретные указания по сужению области действия ошибки, что в итоге приведет к тому, что ошибка будет быстро локализована, и, естественно, устранена. Очень полезные советы - хотелось бы, чтобы все начинающие отладчики, те, кто часто не очень хорошо себе представляет, с какой стороны подойти к возникшей проблеме, ознакомились с ними. Это сберегло бы кучу нервов и им самим, и их начальникам.

Кроме того, разумеется, в книге о науке отладки нельзя было опустить тему технических средств, используемых при отладке (таких как протоколы, отладчики, средства определения утечки памяти, оператор assert и другие). Это не техническое описание того, какие отладчики бывают и как ими пользоваться - это все та же классификация средств и советы по тому, какие из них удобнее использовать в случае отладки приложения с той или иной спецификой.

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

А как облегчить процесс отладки в будущем, учитывая опыт настоящего (как при отладке, так и при написании кода), авторы тоже не поленились объяснить читателям - этому посвящено две главы.

В приложении дан обширный список дополнительной литературы по темам, которые были затронуты в книге - это дизайн, программирование, тестирование, программная инженерия, повторное использование и многое другое.

По всей книге разбросаны забавные программистские байки о том, как что-то не работало и как это удалось найти и починить - очень удачный авторский ход, позволяющий читателю и расслабиться, и получить наглядное пособие по исследуемой теме одновременно. Тут и собственный опыт программистов, и примеры из мировой практики программирования - такие как ошибка программного обеспечения космического корабля Ariane5, процессоров Intel Pentium и многие другие печально известные случаи.

Отличительной особенностью книги является то, что примеры кода (которые вставлены в текст в большом количестве и наглядно объясняют авторскую мысль) даются не на одном каком-либо языке программирования, а вперемешку. Причем не без юмора - так, пример ошибки неосвобожденной памяти приведен на Java, где, как известно, встроенный сборщик мусора. Кроме Java, приводятся примеры на C++, Visual Basic, Delphi, а в особенно важных с точки зрения автора местах даны примеры эквивалентных кодов на нескольких языках.

Основным недостатком книги является ее объем - 560 страниц не так-то просто решиться осилить. Особенно если вдобавок заглянуть в оглавление и увидеть 10 страниц строгой классификации различных областей знаний, так или иначе связанных с отладкой. Впечатление лишь усиливается, когда начинаешь читать вступительные главы - на мой взгляд, их больше чем необходимо и они неоправданно подробные, программистских баек в них черезчур много, а практические выводы из них лишь слегка очерчены. Но к пятой главе линия повествования выравнивается, хотя ощущение перебора с категоризацией не пропадает до конца книги. Впрочем, этот недостаток сглаживается ненавязчивым авторским юмором и все теми же байками, которые встречаются именно тогда когда, кажется, все прочитанные пункты и подпункты не могут уложиться в голове, а также уверенностью в том, что при необходимости любую главу можно будет отыскать и практически применить.

И напоследок. Рассказывая о книге, нельзя не заметить, что отладка в ней представлена не как один из видов деятельности программиста, а как отдельная профессия, требующая специальных навыков. Одна из последних глав называется <Характерные черты хорошего профессионального наладчика>.

Случайная цитата: <Когда вы думаете о хорошем наладчике, какие черты у вас ассоциируются с ним? Способность принять молниеносное решение по поводу причины проблемы? Способность работать часами, днем и ночью, перед выпуском проекта? Способность питаться <плоской пищей>, которую можно подсунуть под дверь, пока наладчик работает над какой-нибудь особенно страшной проблемой? <:> Однако это скорее исключения, чем правила.>

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

В одном из обзоров я встретила сравнение ее с книгами Ильфа и Петрова, за исключением того, что каждая глава подписана, и читателям не придется гадать, кто из авторов ее написал. По-моему, очень верно подмеченное сравнение. А читать или не читать - решать вам! :)


Дополнительная информация
Ссылка: 
Анна Дегтярева. Детективная работа. Компьютерная графика и мультимедиа. Выпуск №2(3)/2004. http://cgm.computergraphics.ru/content/view/66
Выпуск: 
Выпуск №2(3)/2004

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Тест предназначен для отсеивания спама
Fill in the blank