Главная страница
Навигация по странице:

  • Предисловие Служба поддержки Microsoft Learning Technical Support

  • Примечание издателя перевода В книге приняты следующие условные графические обозначения:Ключевой моментДостоверные данныеУжасный код ГЛАВА 1

  • Библиография XXIКонтрольные списки

  • ОСНОВЫ РАЗРАБОТКИ ПО 쐽Глава 1.

  • Глава 4.

  • 1.1. Что такое конструирование ПО

  • Руководство по стилю программирования и конструированию по


    Скачать 7.6 Mb.
    НазваниеРуководство по стилю программирования и конструированию по
    Дата18.05.2023
    Размер7.6 Mb.
    Формат файлаpdf
    Имя файлаCode_Complete.pdf
    ТипРуководство
    #1139697
    страница2 из 104
    1   2   3   4   5   6   7   8   9   ...   104
    Тема конструирования игнорировалась
    Одно время разработка ПО и кодирование рассматривались как одно и то же. Однако по мере идентификации разных процессов цикла разработки ПО лучшие умы отрасли стали посвящать время анализу и обсуждению методик управления проектами, выработки тре- бований, проектирования и тестирования. Из-за пристального внимания к этим новым областям конструирование кода превратилось в бедного родственника разработки ПО.
    Кроме того, обсуждению конструирования препятствовало предположение, согласно ко- торому подход к конструированию как к отдельному
    процессу разработки ПО подразуме- вает, что конструирование нужно рассматривать при этом как отдельный
    этап. На самом деле процессы и этапы разработки не обязаны быть связаны какими-то отношениями, и обсуждение процесса конструирования полезно независимо от того, выполняются ли другие процессы разработки ПО как этапы, итерации или как-то иначе.
    Конструирование важно
    Другая причина того, что конструирование игнорируется учеными и авторами, заключа- ется в ошибочной идее, что в сравнении с другими процессами разработки ПО констру- ирование является относительно механическим процессом, допускающим мало возмож- ностей улучшения. Ничто не может быть дальше от истины.
    На конструирование кода обычно приходятся около 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

    Часть I
    ОСНОВЫ РАЗРАБОТКИ ПО

    Глава 1. Добро пожаловать в мир конструирования ПО!

    Глава 2. Метафоры, позволяющие лучше понять разработку ПО

    Глава 3. Семь раз отмерь, один раз отрежь:
    предварительные условия

    Глава 4. Основные решения, которые приходится принимать при конструировании

    2
    ЧАСТЬ I Основы разработки ПО
    Г Л А В А 1
    Добро пожаловать в мир
    конструирования ПО!
    Содержание

    1.1. Что такое конструирование ПО?

    1.2. Почему конструирование ПО так важно?

    1.3. Как читать эту книгу
    Связанные темы

    Кому следует прочитать эту книгу? (см. предисловие)

    Какую выгоду можно извлечь, прочитав эту книгу? (см. предисловие)

    Что побудило меня написать эту книгу? (см. предисловие)
    Значение слова «конструирование» вне контекста разработки ПО известно всем: это то, что делают строители при сооружении жилого дома, школы или небоскреба.
    В детстве вы наверняка собирали разные предметы из «конструктора». Вообще под
    «конструированием» понимают процесс создания какого-нибудь объекта. Этот про- цесс может включать некоторые аспекты планирования, проектирования и тес- тирования, но чаще всего «конструированием» называют практическую часть создания чего-либо.
    1.1. Что такое конструирование ПО?
    Разработка ПО — непростой процесс, который может включать множество ком- понентов. Вот какие составляющие разработки ПО определили ученые за после- дние 25 лет:

    определение проблемы;

    выработка требований;

    создание плана конструирования;

    разработка архитектуры ПО, или высокоуровневое проектирование;

    детальное проектирование;

    кодирование и отладка;
    http://cc2e.com/0178

    1   2   3   4   5   6   7   8   9   ...   104


    написать администратору сайта