майкл физерс эффективная работа с унаследованным кодом pdf

Майкл физерс эффективная работа с унаследованным кодом pdf

Working effectively with legacy code / Эффективная работа с унаследованным кодом

Год издания: 2009
Автор: M. Feathers / М. Физерс
Переводчик: И. В. Берштейн
Жанр или тематика: Программирование, проектирование, рефакторинг, модульное тестирование, TDD

Издательство: Вильямс
ISBN: 978-5-8459-1530-6
Язык: Русский

Формат: PDF
Качество: Изначально компьютерное (eBook)
Интерактивное оглавление: Нет
Количество страниц: 400

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

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

С моей точки зрения, унаследованный код — это просто код, не прошедший тесты. Такое
определение далось мне горьким опытом. Что же должны делать тесты для выявления
неудачного кода? Для меня ответ на данный вопрос очевиден, и он составляет главный
предмет, подробно разрабатываемый в этой книге.

Источник

Эффективная работа с унаследованным кодом

майкл физерс эффективная работа с унаследованным кодом pdf. 1475129131 frizers kod. майкл физерс эффективная работа с унаследованным кодом pdf фото. майкл физерс эффективная работа с унаследованным кодом pdf-1475129131 frizers kod. картинка майкл физерс эффективная работа с унаследованным кодом pdf. картинка 1475129131 frizers kod. Working effectively with legacy code / Эффективная работа с унаследованным кодом
Автор: Физерс, Майкл
Название: Эффективная работа с унаследованным кодом
Издательство: М.: ООО «И.Д. Вильямс»
Год: 2009
ISBN: 978-5845915306
Язык: Русский
Формат: djvu
Размер: 8,5 mb
Страниц: 400, ил.

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

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

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

Источник

Эффективная работа с унаследованным кодом

майкл физерс эффективная работа с унаследованным кодом pdf. effektivnaya rabota s unasledovannym kodom. майкл физерс эффективная работа с унаследованным кодом pdf фото. майкл физерс эффективная работа с унаследованным кодом pdf-effektivnaya rabota s unasledovannym kodom. картинка майкл физерс эффективная работа с унаследованным кодом pdf. картинка effektivnaya rabota s unasledovannym kodom. Working effectively with legacy code / Эффективная работа с унаследованным кодом

Можете ли вы без особого труда изменить код и тут же получить ответную реакцию на внесенные изменения? Насколько понятен этот код? Если вы ответите на эти вопросы отрицательно, значит, вы имеете дело с унаследованным кодом и понапрасну тратите время и средства на разработку.

Учитесь извлекать максимум пользы из унаследованных систем, повышая их производительность, функциональность, надежность и сопровождаемость!

В своей книге Майкл Физерс предлагает полноценные стратегические приемы эффективной работы с крупными базами унаследованного нетестированного кода. В основу этой книги положен материал, подготовленный автором к известным семинарам, организуемым компанией Object Mentor, включая приемы, которым автор обучил сотни разработчиков, технических руководителей и тестирующих программное обеспечение подчинять себе непослушные унаследованные системы.
В этой книге освещаются следующие вопросы:

Кроме того, в этой книге представлены 24 способа разрыва зависимостей, помогающих работать с элементами программного обеспечения обособленно, чтобы сделать внесение изменений в код более безопасным.

Здесь можно скачать книгу «Эффективная работа с унаследованным кодом» для ознакомления (бесплатный PDF фрагмент от правообладателя), почитать онлайн или купить полную электронную версию в форматах FB2, PDF, EPUB, TXT, FB3, MOBI.

Источник

ProgBook — книги и учебники по программированию

майкл физерс эффективная работа с унаследованным кодом pdf. fizers effektivnaya rabota s unasledovannym kodom. майкл физерс эффективная работа с унаследованным кодом pdf фото. майкл физерс эффективная работа с унаследованным кодом pdf-fizers effektivnaya rabota s unasledovannym kodom. картинка майкл физерс эффективная работа с унаследованным кодом pdf. картинка fizers effektivnaya rabota s unasledovannym kodom. Working effectively with legacy code / Эффективная работа с унаследованным кодомНавазние: Эффективная работа с унаследованным кодом
Автор: Майкл К. Физерс
Издательство: Вильямс
Год: 2009
ISBN: 978-5-8459-1530-6
PDF: 26 Мб
DJVU: 9 Мб

Книга «Эффективная работа с унаследованным кодом» научит читателя повышать производительность, надежность, функциональность и сопровождаемость унаследованных систем и извлекать из них максимум пользы. Имея дело с унаследованным кодом, вы далеко не всегда найдете его понятным, а внесенные изменения в код не дадут моментальной ответной реакции, таким образом, вы просто зря тратите усилия и время на разработку. Благодаря книге Майкла Физерса работа с крупными базами нетестированного унаследованного кода станет проще, если использовать стратегические приемы, предлагаемые автором. Майкл Физерс в полном объеме изложил в книге материал, который был изложен им на крупных семинарах компании Object Mentor. Это приемы, которым он обучил сотни специалистов, разработчиков, тестировщиков ПО, технических руководителей и которые призваны подчинить себе непослушные базы унаследованного кода. Чтобы сделать внесение в код изменений более безопасным, автор предлагает 24 варианта разрыва зависимостей, помогающих работать с элементами ПО.
В книге также рассмотрены такие вопросы как:
— механизмы внесения в программное обеспечение изменений, в частности, устранение программных ошибок, ввод новых свойств, оптимизация производительности и улучшение структуры кода;
— создание тестов, не дающих вносить новые ошибки в код;
— перенесение унаследованного кода в средства тестирования;
— определение в коде мест, которые требуют внесения изменений;
— работа с приложениями, не имеющими, на первый взгляд, структуры;
— использование подходящих для любого языка и платформы методов, с примерами кода на языках C, C#, C++ и Java.

6,801 просмотров всего, 3 просмотров сегодня

Источник

Книга Майкла Физерса «Эффективная работа с унаследованным кодом»

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

Цитата из книги С. Макконнелла «Совершенный код»

Везет тем программистам, которые начинают вести проекты с нуля, тогда можно развернуться по-полной и писать код так, как считаешь нужным – cначала тщательно спроектировать структуру, нарисовать классы в виде UML-диаграмм и неспешно приступить к кодированию с использованием принципа TDD (Test-driven development), когда сначала пишутся тесты, а потом уже начинают писать основной код. Но чаще программистов нанимают для работы над уже существующей программой, которую до тебя писал криворукий программер (ведь код, написанный не тобой по определению считается плохим) без тестов, с непонятными (тебе) хаками, ужасным наименованием переменных, да и вообще читать этот код невозможно, и лучше его переписать с нуля (см. первую фразу). Такой код называют унаследованный, хотя его автор вполне может быть жив-здоров.

Правда, даже если проект начинался с нуля, то через некоторое время (если проект тогда еще будет на плаву) его код может стать унаследованным для других программистов, да даже и для тебя самого. А во всем виноваты заказчики, которые сами не знают чего хотят (а их кто-нибудь об этом спрашивал?), постоянно меняют требования (ну не нравятся им фиолетовые кнопки в правом углу на розовом фоне), хотят получить еще вот эту «маленькую возможность», из-за которой приходится переделывать половину программы. А время то поджимает, тесты писать уже некогда, слово «рефакторинг» произносится с содроганием, возможности добавляются с помощью великого копипаста, а о том, что половина имен классов уже не соответствует их настоящему поведению уж и не говорится.

Если вам знакома такая ситуация, то книга Физерса «Эффективная работа с унаследованным кодом» для вас будет полезна. Она посвящена тому, что делать, если надо работать с кодом, который написан небрежно и не покрыт полностью тестами. Основная ситуация, описываемая Физерсом – надо добавить новую возможность или изменить поведенение кода, который не то что страшно трогать, но даже иногда непонятно, как он вообще работает.

Майкл Физерс (Michael Feathers) является автором таких известных инструментов unit-тестирования, как CppUnit и CppUnitLite, и для него в коде главное – это его тестируемость. С его точки зрения код является достаточно хорошим, если его можно протестировать с помощью unit-тестов, причем именно с помощью тестов, которые выполняются очень быстро, чтобы программистам не было лень их запускать после каждой правки кода. Так, Физерс считает, что каждый unit-тест должен выполняться не более 1/10 секунды, больше могут выполняться приемочные и интеграционные тесты, которые проверяют работоспособность программы в целом, а именно unit-тесты, которые проверяют работоспособность отдельных классов должны выполняться очень быстро, а это значит, что они не должны обращаться к базам данных, получать данные из сети и т.п.

Основная идея книги – как провести рефакторинг кода таким образом, чтобы его можно было бы в дальнейшем изменять, добавляя новые возможности или изменяя поведение. Большинство советов заключаются в том, как разорвать зависимости между классами для того, чтобы в тестах не приходилось бы создавать десятки тяжелых классов для того, чтобы протестировать один из них. Особенно это актуально для тестирования классов, связанных с пользовательским интерфейсом (GUI) и обращением к базам данных. При этом автор честно пишет, что в результате таких изменений структура программы может даже ухудшиться, например, некоторые методы класса, которые раньше были приватными (private) становятся защищенными (protected) и то и публичными (public), часто вводятся классы, от которых можно будет избавиться, когда (если) дойдет дело до глобального рефакторинга кода, а так они будут маячить, как бельмо в глазу, напоминая программистам, что здесь нужна глобальная переделка кода. Так что главный смысл книги заключается не в том, как сделать структуру программы более правильной, а изменить плохую структуру так, чтобы классы можно было бы загнать в среду для unit-тестирования.

При этом автор в начале книги вводит такое понятие, как «шов». Швом он называет такие места, куда можно внедрить свой код во время тестирования. Самый безопасный шов – это объектный, когда можно сделать производный класс, который бы не зависел от некоторых других классов (при этом часто приходится из него выделять интерфейс). Другим примером могут служить объекты-подделки (fake- или mock-объекты), которые имеют интерфейс некоторых классов, но при этом, например, не тянут за собой большой библиотеки.

Не брезгует автор пользоваться и препроцессором C++ (примеры в книге написаны в основном на C++ или Java, хотя есть примеры на C# и даже один на Ruby), чтобы подменять поведение классов в тестах по сравнению с конечным кодом.

В целом книга интересная и полезная, не многие книги заставляют посмотреть на свой код под другим углом зрения, иногда пренебрегая казалось бы прописными истинами объектно-ориентированного программирования (например, что инкапсуляция – это всегда хорошо). В начале книга читается очень легко, правда, под конец уже теряешь разницу между примерами, на которых автор показывает приемы для ввода тестов, и кажется, что читаешь примерно одно и то же под разными углами. Правда, Физерс в начале пишет, что при написании книги, он рассчитывал, что ее будут читать, перескакивая с главы на главу, а не читать от корки до корки. Да и названия приемов получились какие-то слишком абстрактными, по их названию в оглавлению трудно понять, что именно тебе нужно в данным момент, уж не знаю, может быть в этом отчасти виноват перевод.

Кстати, на счет перевода. В целом он довольно хороший, например, в книгах не часто встречается перевод названий классов (разумеется, в коде все классы именуются на английском языке, но в тексте при первом упоминании классов часто указывается их перевод, чтобы было понятно, что они делают). Мелочь, но приятная.

Хотя при переводе вышли некоторые косяки. Самый заметный – это то, что широко известную в узких кругах ученую в области вычислительных систем Барбару Лисков сделали мужиком. В объектно-ориентированном программировании есть такое понятие, как принцип подстановки Лисков, который по-английски звучит как «Liskov substitution principle». Переводчик, видно, решил, что Liskov – это он, и перевел этот принцип, как принцип подстановки Лискова (а может тут и редакторы «помогли»).

А так книжка хорошая, прочитать ее стоит.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *