Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 747
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Предисловие
XV
Главные достоинства этой книги
Какой бы ни была ваша ситуация, эта книга поможет вам создавать более качественные программы за меньшее время с меньшей головной болью.
Полное руководство по конструированию ПО В этой книге обсуждаются такие об- щие аспекты конструирования, как качество ПО и подходы к размышлению о програм- мировании. В то же время мы погрузимся в такие детали конструирования, как этапы со- здания классов, использование данных и управляющих структур, отладка, рефакторинг и методики и стратегии оптимизации кода. Чтобы изучить эти вопросы, вам не нужно чи- тать книгу от корки до корки. Материал организован так, чтобы вы могли легко найти кон- кретную интересующую вас информацию.
Готовые к использованию контрольные списки Эта книга включает десятки конт- рольных списков, позволяющих оценить архитектуру программы, подход к проектирова- нию, качество классов и методов, имена переменных, управляющие структуры, формати- рование, тесты и многое другое.
Самая актуальная информация В этом руководстве вы найдете описания ряда самых современных методик, многие из которых еще не стали общепринятыми. Так как эта книга основана и на практике, и на исследованиях, рассмотренные в ней методики будут полез- ны еще многие годы.
Более общий взгляд на разработку ПО Эта книга даст вам шанс подняться над суе- той повседневной борьбы с проблемами и узнать, что работает, а что нет. Мало кто из прак- тикующих программистов обладает временем, необходимым для прочтения сотен книг и журнальных статей, обобщенных в этом руководстве. Исследования и реальный опыт, на которых основана данная книга, помогут вам проанализировать ваши проекты и позво- лят принимать стратегические решения, чтобы не приходилось бороться с теми же вра- гами снова и снова.
Объективность Некоторые книги по программированию содержат 1 грамм информа- ции на 10 граммов рекламы. Здесь вы найдете сбалансированные обсуждения достоинств и недостатков каждой методики. Вы знаете свой конкретный проект лучше всех, и эта книга предоставит вам объективную информацию, нужную для принятия грамотных решений в ваших обстоятельствах.
Независимость от языка Описанные мной методики позволяют выжать максимум по- чти из любого языка, будь то C++, C#, Java, Microsoft Visual Basic или другой похожий язык.
Многочисленные примеры кода Эта книга содержит почти 500 примеров хорошего и плохого кода. Их так много потому, что лично я лучше всего учусь на примерах. Думаю,
это относится и к другим программистам.
X V I
Предисловие
Примеры написаны на нескольких языках, потому что освоение более одного языка час- то является поворотным пунктом в карьере профессионального программиста. Как толь- ко программист понимает, что принципы программирования не зависят от синтаксиса конкретного языка, он начинает приобретать знания, позволяющие достичь новых высот качества и производительности труда.
Чтобы как можно более облегчить бремя применения нескольких языков, я избегал ред- ких возможностей языков, кроме тех фрагментов, в которых именно они и обсуждаются.
Вам не нужно понимать каждый нюанс фрагментов кода, чтобы понять их суть. Если вы сосредоточитесь на обсуждаемых моментах, вы сможете читать код на любом языке. Что- бы сделать вашу задачу еще легче, я пояснил важные части примеров.
Доступ к другим источникам информации В данном руководстве приводятся под- робные сведения о конструировании ПО, но едва ли это последнее слово. В разделах «До- полнительные ресурсы» я указал другие книги и статьи, которые вы можете прочитать, если заинтересуетесь той или иной темой.
Web-сайт книги Обновленные контрольные списки, списки книг и журнальных статей, Web-ссылки и другую информацию можно найти на Web-сайте
cc2e.com. Для получения информации,
связанной с «Code Complete, 2d ed.», введите в браузере
cc2e.com/
и четырехзначное число, пример которого показан слева. Читая книгу, вы много раз на- толкнетесь на такие ссылки.
Что побудило меня написать эту книгу?
Необходимость руководств, отражающих знания об эффективных методиках разработки
ПО, ясна всем членам сообщества разработчиков. Согласно отчету совета Computer Science and Technology Board максимальное повышение качества и продуктивности разработки
ПО будет достигнуто благодаря систематизации, унификации и распространению суще- ствующих знаний об эффективных методиках разработки (CSTB, 1990; McConnell, 1997a).
Совет пришел к выводу, что стратегия распространения этих знаний должна быть осно- вана на концепции руководств по разработке ПО.
Тема конструирования игнорировалась
Одно время разработка ПО и кодирование рассматривались как одно и то же. Однако по мере идентификации разных процессов цикла разработки ПО лучшие умы отрасли стали посвящать время анализу и обсуждению методик управления проектами, выработки тре- бований, проектирования и тестирования. Из-за пристального внимания к этим новым областям конструирование кода превратилось в бедного родственника разработки ПО.
Кроме того, обсуждению конструирования препятствовало предположение, согласно ко- торому подход к конструированию как к отдельному
процессу разработки ПО подразуме- вает, что конструирование нужно рассматривать при этом как отдельный
этап. На самом деле процессы и этапы разработки не обязаны быть связаны какими-то отношениями, и обсуждение процесса конструирования полезно независимо от того, выполняются ли другие процессы разработки ПО как этапы, итерации или как-то иначе.
Конструирование важно
Другая причина того, что конструирование игнорируется учеными и авторами, заключа- ется в ошибочной идее, что в сравнении с другими процессами разработки ПО констру- ирование является относительно механическим процессом, допускающим мало возмож- ностей улучшения. Ничто не может быть дальше от истины.
На конструирование кода обычно приходятся около 65% работы в небольших и 50% в средних проектах. Во время конструирования допускаются около 75% ошибок в неболь- http://cc2e.com/1234
Предисловие
XVII
ших проектах и от 50 до 75% в средних и крупных. Очевидно, что любой процесс, связан- ный с такой долей ошибок, можно значительно улучшить (подробнее эти статистические данные рассматриваются в главе 27).
Некоторые авторы указывают, что, хотя ошибки конструирования и составляют высокий процент от общего числа ошибок, их обычно дешевле исправлять, чем ошибки в требо- ваниях или архитектуре, поэтому они менее важны. Утверждение, что ошибки конструи- рования дешевле исправлять, верно, но вводит в заблуждение, потому что стоимость не- исправленной ошибки конструирования может быть крайней высокой. Ученые обнару- жили, что одними из самых дорогих ошибок в истории, приведшими к убыткам в сотни миллионов долларов, были мелкие ошибки кодирования (Weinberg, 1983; SEN, 1990). Не- высокая стоимость исправления ошибок не подразумевает, что их исправление можно считать низкоприоритетной задачей.
Ирония ослабления внимания к конструированию состоит в том, что конструирование
— единственный процесс, который выполняется всегда. Требования можно предположить,
а не разработать, архитектуру можно обрисовать в самых общих чертах, а тестирование можно сократить или вообще опустить. Но если вы собираетесь написать программу, из- бежать конструирования не удастся, и это делает конструирование на редкость плодотвор- ной областью улучшения методик разработки.
Отсутствие похожих книг
Когда я начал подумывать об этой книге, я был уверен, что кто-то другой уже написал об эффективных методиках конструирования. Необходимость такой книги казалась очевид- ной. Но я обнаружил лишь несколько книг о конструировании, описывающих лишь неко- торые его аспекты. Одни были написаны 15 или более лет назад и были основаны на от- носительно редких языках, таких как ALGOL, PL/I, Ratfor и Smalltalk. Другие были написа- ны профессорами, не работавшими над реальным кодом. Профессора писали о методи- ках, работающих в студенческих проектах, но часто не имели представления о том, как эти методики проявят себя в полномасштабных средах разработки. В третьих книгах ав- торы рекламировали новейшие методологии, игнорируя многие зрелые методики, эффек- тивность которых прошла проверку временем.
Короче говоря, я не смог найти ни одной книги, автор которой хотя бы попытался отразить в ней практические приемы програм- мирования, возникшие благодаря накоплению профессионального опыта, отраслевым исследованиям и академическим изысканиям.
Обсуждение конструирования нужно было привести в соответ- ствие современным языкам программирования, объектно-ориен- тированному программированию и ведущим методикам разработ- ки. Ясно, что книгу о программировании должен был написать человек, знакомый с последними достижениями в области теории и в то же время создавший достаточно реального кода, чтобы хорошо представлять со- стояние практической сферы. Я писал эту книгу как всестороннее обсуждение конструи- рования кода, имеющее целью передачу знаний от одного программиста другому.
К читателям
Я буду рад получить от вас вопросы по темам, обсуждаемым в этой книге, сообщения об обнаруженных ошибках, комментарии и предложения. Для связи со мной используйте адрес
stevemcc@construx.com или мой Web-сайт www.stevemcconnell.com.
Беллвью, штат Вашингтон
30 мая 2004 года
Когда вместе собираются кри- тики, они говорят о Теме, Ком- позиции и Идее. Когда вместе собираются художники, они го- ворят о том, где купить деше- вый скипидар.
Пабло Пикассо
XVIII
Предисловие
Служба поддержки Microsoft Learning Technical Support
Мы приложили все усилия, чтобы обеспечить точность сведений, изложенных в этой книге.
Поправки к книгам издательства Microsoft Press публикуются в Интернете по адресу:
http://www.microsoft.com/learning/support/
Чтобы подключиться к базе знаний Microsoft и задать вопрос или запросить ту или иную информацию, откройте страницу:
http://www.microsoft.com/learning/support/search.asp
Если у вас есть замечания, вопросы или предложения по поводу этой книги, присылайте их в Microsoft Press по обычной почте:
Microsoft Press
Attn: Code Complete 2E Editor
One Microsoft Way
Redmond, WA 98052-6399
или по электронной почте:
mspinput@microsoft.com
Примечание издателя перевода
В книге приняты следующие условные графические обозначения:
Ключевой момент
Достоверные данные
Ужасный код
ГЛАВА 1 Добро пожаловатьв мир конструирования ПО!
XIX
Благодарности
Книги никогда не создаются в одиночку (по крайней мере это относится ко всем моим книгам), а работа над вторым изданием — еще более коллективное пред- приятие.
Мне хотелось бы поблагодарить всех, кто принял участие в обзоре данной книги:
это Хакон Агустссон (Hбkon Бgъstsson), Скотт Эмблер (Scott Ambler), Уилл Барнс
(Will Barns), Уильям Д. Бартоломью (William D. Bartholomew), Ларс Бергстром (Lars
Bergstrom), Ян Брокбанк (Ian Brockbank), Брюс Батлер (Bruce Butler), Джей Цин- котта (Jay Cincotta), Алан Купер (Alan Cooper), Боб Коррик (Bob Corrick), Эл Кор- вин (Al Corwin), Джерри Девилль (Jerry Deville), Джон Ивз (Jon Eaves), Эдвард Эс- трада (Edward Estrada), Стив Гоулдстоун (Steve Gouldstone), Оуэйн Гриффитс (Owain
Griffiths), Мэтью Харрис (Matthew Harris), Майкл Ховард (Michael Howard), Энди
Хант (Andy Hunt), Кевин Хатчисон (Kevin Hutchison), Роб Джаспер (Rob Jasper),
Стивен Дженкинс (Stephen Jenkins), Ральф Джонсон (Ralph Johnson) и его группа разработки архитектуры ПО из Иллинойского университета, Марек Конопка (Marek
Konopka), Джефф Лэнгр (Jeff Langr), Энди Лестер (Andy Lester), Митика Ману (Mitica
Manu), Стив Маттингли (Steve Mattingly), Гарет Маккоан (Gareth McCaughan), Ро- берт Макговерн (Robert McGovern), Скотт Мейерс (Scott Meyers), Гарет Морган
(Gareth Morgan), Мэтт Пелокин (Matt Peloquin), Брайан Пфладж (Bryan Pflug),
Джеффри Рихтер (Jeffrey Richter), Стив Ринн (Steve Rinn), Даг Розенберг (Doug
Rosenberg), Брайан Сен-Пьер (Brian St. Pierre), Диомидис Спиннелис (Diomidis
Spinellis), Мэтт Стивенс (Matt Stephens), Дэйв Томас (Dave Thomas), Энди Томас-
Крамер (Andy Thomas-Cramer), Джон Влиссидес (John Vlissides), Павел Возенилек
(Pavel Vozenilek), Денни Уиллифорд (Denny Williford), Джек Вули (Jack Woolley) и
Ди Зомбор (Dee Zsombor).
Сотни читателей прислали комментарии к первому изданию этой книги, и еще больше — ко второму. Спасибо всем, кто потратил время, чтобы поделиться в той или иной форме своим мнением.
Хочу особо поблагодарить рецензентов из Construx Software, которые провели фор- мальную инспекцию всей рукописи: это Джейсон Хиллз (Jason Hills), Брейди Хон- сингер (Bradey Honsinger), Абдул Низар (Abdul Nizar), Том Рид (Tom Reed) и Па- мела Перро (Pamela Perrott). Я был поистине удивлен тщательностью их обзора,
особенно если учесть, сколько глаз изучило эту книгу до того, как они начали работать с ней. Спасибо также Брейди, Джейсону и Памеле за помощь в создании
Web-сайта
cc2e.com.
Мне было очень приятно работать с Девон Масгрейв (Devon Musgrave) — редак- тором этой книги. Я работал со многими прекрасными редакторами в других проектах, но даже на их фоне Девон выделяется добросовестностью и легким
X X
Благодарности
характером. Спасибо, Девон! Благодарю Линду Энглман (Linda Engleman), кото- рая поддержала идею второго издания — без нее эта книга не появилась бы. Бла- годарю также других сотрудников издательства Microsoft Press, в их число входят
Робин ван Стинбург (Robin Van Steenburgh), Элден Нельсон (Elden Nelson), Карл
Дилтц (Carl Diltz), Джоэл Панчо (Joel Panchot), Патрисия Массерман (Patricia
Masserman), Билл Майерс (Bill Myers), Сэнди Резник (Sandi Resnick), Барбара Нор- флит (Barbara Norfleet), Джеймс Крамер (James Kramer) и Прескотт Классен (Prescott
Klassen).
Я хочу еще раз сказать спасибо сотрудникам Microsoft Press, участвовавшим в подготовке первого издания книги: это Элис Смит (Alice Smith), Арлен Майерс
(Arlene Myers), Барбара Раньян (Barbara Runyan), Кэрол Люк (Carol Luke), Конни
Литтл (Connie Little), Дин Холмс (Dean Holmes), Эрик Стру (Eric Stroo), Эрин О’Кон- нор (Erin O’Connor), Джинни Макгиверн (Jeannie McGivern), Джефф Кэри (Jeff Carey),
Дженнифер Харрис (Jennifer Harris), Дженнифер Вик (Jennifer Vick), Джудит Блох
(Judith Bloch), Кэтрин Эриксон (Katherine Erickson), Ким Эгглстон (Kim Eggleston),
Лиза Сэндбург (Lisa Sandburg), Лиза Теобальд (Lisa Theobald), Маргарет Харгрейв
(Margarite Hargrave), Майк Халворсон (Mike Halvorson), Пэт Фоджетт (Pat Forgette),
Пегги Герман (Peggy Herman), Рут Петтис (Ruth Pettis), Салли Брунсмен (Sally
Brunsman), Шон Пек (Shawn Peck), Стив Мюррей (Steve Murray), Уоллис Болц (Wallis
Bolz) и Заафар Хаснаин (Zaafar Hasnain).
Наконец, я хотел бы выразить благодарность рецензентам, внесшим такой боль- шой вклад в первое издание книги: это Эл Корвин (Al Corwin), Билл Кистлер (Bill
Kiestler), Брайан Догерти (Brian Daugherty), Дэйв Мур (Dave Moore), Грег Хичкок
(Greg Hitchcock), Хэнк Меуре (Hank Meuret), Джек Вули (Jack Woolley), Джой Уай- рик (Joey Wyrick), Марго Пейдж (Margot Page), Майк Клейн (Mike Klein), Майк
Зевенберген (Mike Zevenbergen), Пэт Форман (Pat Forman), Питер Пэт (Peter Pathe),
Роберт Л. Гласс (Robert L. Glass), Тэмми Форман (Tammy Forman), Тони Пискулли
(Tony Pisculli) и Уэйн Бердсли (Wayne Beardsley). Особо благодарю Тони Гарланда
(Tony Garland) за его обстоятельный обзор: за 12 лет я еще лучше понял, как вы- играла эта книга от тысяч комментариев Тони.
Библиография
XXI
Контрольные списки
Требования ................................................................................................................................................................................................................. 42
Архитектура ............................................................................................................................................................................................................ 54
Предварительные условия ....................................................................................................................................................................... 59
Основные методики конструирования ................................................................................................................................... 69
Проектирование при конструировании .............................................................................................................................. 122
Качество классов ............................................................................................................................................................................................ 157
Высококачественные методы ........................................................................................................................................................... 185
Защитное программирование ......................................................................................................................................................... 211
Процесс программирования с псевдокодом .................................................................................................................. 233
Общие вопросы использования данных ............................................................................................................................. 257
Именование переменных ..................................................................................................................................................................... 288
Основные данные .......................................................................................................................................................................................... 316
Применение необычных типов данных .............................................................................................................................. 343
Организация последовательного кода .................................................................................................................................. 353
Использование условных операторов ................................................................................................................................... 365
Циклы .......................................................................................................................................................................................................................... 388
Нестандартные управляющие структуры ........................................................................................................................... 410
Табличные методы ........................................................................................................................................................................................ 429
Вопросы по управляющим структурам ................................................................................................................................. 459
План контроля качества ......................................................................................................................................................................... 476
Эффективное парное программирование ........................................................................................................................ 484
Эффективные инспекции ..................................................................................................................................................................... 491
Тесты ............................................................................................................................................................................................................................. 532
Отладка ...................................................................................................................................................................................................................... 559
Разумные причины выполнения рефакторинга ......................................................................................................... 570
Виды рефакторинга ..................................................................................................................................................................................... 577
Безопасный рефакторинг ..................................................................................................................................................................... 584
Стратегии оптимизации кода .......................................................................................................................................................... 607
Методики оптимизации кода ........................................................................................................................................................... 642
Управление конфигурацией .............................................................................................................................................................. 669
Интеграция ............................................................................................................................................................................................................ 707
Инструменты программирования ............................................................................................................................................... 724
Форматирование ............................................................................................................................................................................................. 773
Самодокументирующийся код ........................................................................................................................................................ 780
Хорошие методики комментирования .................................................................................................................................. 816