Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 745
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
X
Содержание
19.5. Основа программирования: структурное программирование .......... 448 19.6. Управляющие структуры и сложность ........................................................................ 450
Часть V
Усовершенствование кода
20 Качество ПО ............................................................................................................. 456
20.1. Характеристики качества ПО ............................................................................................... 456 20.2. Методики повышения качества ПО ................................................................................ 459 20.3. Относительная эффективность методик контроля качества ПО ....................................................................................................... 462 20.4. Когда выполнять контроль качества ПО? ................................................................. 466 20.5. Главный Закон Контроля Качества ПО ....................................................................... 467
21 Совместное конструирование ............................................................................. 471
21.1. Обзор методик совместной разработки ПО ......................................................... 472 21.2. Парное программирование .................................................................................................... 475 21.3. Формальные инспекции ............................................................................................................ 477 21.4. Другие методики совместной разработки ПО .................................................... 484 21.5. Сравнение методик совместного конструирования ..................................... 487
22 Тестирование, выполняемое разработчиками ................................................. 490
22.1. Тестирование, выполняемое разработчиками, и качество ПО ........... 492 22.2. Рекомендуемый подход к тестированию, выполняемому разработчиками ............................................................................................................................................... 494 22.3. Приемы тестирования ................................................................................................................. 496 22.4. Типичные ошибки ............................................................................................................................ 507 22.5. Инструменты тестирования ................................................................................................... 513 22.6. Оптимизация процесса тестирования ........................................................................ 518 22.7. Протоколы тестирования ......................................................................................................... 520
23 Отладка ..................................................................................................................... 524
23.1. Общие вопросы отладки ............................................................................................................ 524 23.2. Поиск дефекта ...................................................................................................................................... 529 23.3. Устранение дефекта ........................................................................................................................ 539 23.4. Психологические аспекты отладки ................................................................................ 543 23.5. Инструменты отладки — очевидные и не очень ............................................... 545
24 Рефакторинг ............................................................................................................ 551
24.1. Виды эволюции ПО ......................................................................................................................... 552 24.2. Введение в рефакторинг ............................................................................................................ 553 24.3. Отдельные виды рефакторинга .......................................................................................... 559 24.4. Безопасный рефакторинг ........................................................................................................ 566 24.5. Стратегии рефакторинга .......................................................................................................... 568
25 Стратегии оптимизации кода ............................................................................... 572
25.1. Общее обсуждение производительности ПО ...................................................... 573 25.2. Введение в оптимизацию кода ............................................................................................ 576 25.3. Где искать жир и патоку? ............................................................................................................ 583 25.4. Оценка производительности ................................................................................................ 588
Содержание
XI
25.5. Итерация .................................................................................................................................................... 590 25.6. Подход к оптимизации кода: резюме ........................................................................... 591
26 Методики оптимизации кода ................................................................................ 595
26.1. Логика ........................................................................................................................................................... 596 26.2. Циклы ............................................................................................................................................................ 602 26.3. Изменения типов данных ......................................................................................................... 611 26.4. Выражения ............................................................................................................................................... 616 26.5. Методы ......................................................................................................................................................... 625 26.6. Переписывание кода на низкоуровневом языке ............................................... 626 26.7. Если что-то одно изменяется, что-то другое всегда остается постоянным ............................................................................................ 629
Часть VI
Системные вопросы
27 Как размер программы влияет на конструирование ...................................... 634
27.1. Взаимодействие и размер ......................................................................................................... 635 27.2. Диапазон размеров проектов ................................................................................................ 636 27.3. Влияние размера проекта на возникновение ошибок ................................ 636 27.4. Влияние размера проекта на производительность ........................................ 638 27.5. Влияние размера проекта на процесс разработки ......................................... 639
28 Управление конструированием ........................................................................... 645
28.1. Поощрение хорошего кодирования ............................................................................. 646 28.2. Управление конфигурацией .................................................................................................. 649 28.3. Оценка графика конструирования ................................................................................. 655 28.4. Измерения ................................................................................................................................................ 661 28.5. Гуманное отношение к программистам ..................................................................... 664 28.6. Управление менеджером ........................................................................................................... 670
29 Интеграция ............................................................................................................... 673
29.1. Важность выбора подхода к интеграции .................................................................. 673 29.2. Частота интеграции — поэтапная или инкрементная? .............................. 675 29.3. Стратегии инкрементной интеграции ....................................................................... 678 29.4. Ежедневная сборка и дымовые тесты ........................................................................... 686
30 Инструменты программирования ....................................................................... 694
30.1. Инструменты для проектирования ................................................................................. 695 30.2. Инструменты для работы с исходным кодом ....................................................... 695 30.3. Инструменты для работы с исполняемым кодом ............................................. 700 30.4. Инструменты и среды ................................................................................................................... 704 30.5. Создание собственного программного инструментария ....................... 705 30.6. Волшебная страна инструментальных средств .................................................. 707
Часть VII
Мастерство программирования
31 Форматирование и стиль ...................................................................................... 712
31.1. Основные принципы форматирования .................................................................... 713 31.2. Способы форматирования ...................................................................................................... 720 31.3. Стили форматирования ............................................................................................................. 721
X I I
Содержание
31.4. Форматирование управляющих структур ............................................................... 728 31.5. Форматирование отдельных операторов ................................................................ 736 31.6. Размещение комментариев ..................................................................................................... 747 31.7. Размещение методов ...................................................................................................................... 750 31.8. Форматирование классов ......................................................................................................... 752
32 Самодокументирующийся код ............................................................................ 760
32.1. Внешняя документация ............................................................................................................... 760 32.2. Стиль программирования как вид документации ........................................... 761 32.3. Комментировать или не комментировать? ............................................................. 764 32.4. Советы по эффективному комментированию .................................................... 768 32.5. Методики комментирования ................................................................................................ 774 32.6. Стандарты IEEE .................................................................................................................................... 795
33 Личность ................................................................................................................... 800
33.1. Причем тут характер? ................................................................................................................... 801 33.2. Интеллект и скромность ............................................................................................................ 802 33.3. Любопытство ......................................................................................................................................... 803 33.4. Профессиональная честность ............................................................................................. 806 33.5. Общение и сотрудничество ................................................................................................... 809 33.6. Творчество и дисциплина ........................................................................................................ 809 33.7. Лень ................................................................................................................................................................. 810 33.8. Свойства, которые менее важны, чем кажется ..................................................... 811 33.9. Привычки .................................................................................................................................................. 813
34 Основы мастерства ................................................................................................ 817
34.1. Боритесь со сложностью ........................................................................................................... 817 34.2. Анализируйте процесс разработки ................................................................................ 819 34.3. Пишите программы в первую очередь для людей и лишь во вторую —
для компьютеров ............................................................................................................................................. 821 34.4. Программируйте с использованием языка, а не на языке ....................... 823 34.5. Концентрируйте внимание с помощью соглашений .................................. 824 34.6. Программируйте в терминах проблемной области ..................................... 825 34.7. Опасайтесь падающих камней ............................................................................................ 827 34.8. Итерируйте, итерируйте и итерируйте ...................................................................... 830 34.9. И да отделена будет религия от разработки ПО ................................................ 831
35 Где искать дополнительную информацию ....................................................... 834
35.1. Информация о конструировании ПО ......................................................................... 835 35.2. Не связанные с конструированием темы ................................................................. 836 35.3. Периодические издания ............................................................................................................ 838 35.4. Список литературы для разработчика ПО .............................................................. 839 35.5. Профессиональные ассоциации ...................................................................................... 841
Библиография ................................................................................................................. 842
Предметный указатель ................................................................................................. 863
Об авторе .......................................................................................................................... 868
Предисловие
Разрыв между самыми лучшими и средними методиками разработки ПО очень широк
— вероятно, шире, чем в любой другой инженерной дисциплине. Средство распро-
странения информации о хороших методиках сыграло бы весьма важную роль.
Фред Брукс (Fred Brooks)
Моей главной целью при написании этой книги было сокращение разрыва между знани- ями гуру и лучших специалистов отрасли, с одной стороны, и общепринятыми методика- ми разработки коммерческого ПО — с другой. Многие эффективные методики програм- мирования годами скрываются в журналах и научных работах, прежде чем становятся доступными программистской общественности.
Хотя передовые методики разработки ПО в последние годы быстро развивались, общепри- нятые практически стояли на месте. Многие программы все еще полны ошибок, поставля- ются с опозданием и не укладываются в бюджет, а многие не отвечают требованиям пользо- вателей. Ученые обнаружили эффективные методики, устраняющие большинство проблем,
которые отравляют нашу жизнь с 1970-х годов. Однако из-за того, что эти методики редко покидают страницы узкоспециализированных технических изданий, в большинстве ком- паний по разработке ПО они еще не используются. Установлено, что для широкого распро- странения исследовательских разработок обычно требуется от 5 до 15 и более лет (Raghavan and Chand, 1989; Rogers, 1995; Parnas, 1999). Данная книга призвана ускорить этот процесс и сделать важные открытия доступными средним программистам.
Кому следует прочитать эту книгу?
Исследования и опыт программирования, отраженные в этой книге, помогут вам созда- вать высококачественное ПО и выполнять свою работу быстрее и эффективнее. Прочи- тав ее, вы поймете, почему вы сталкивались с проблемами в прошлом, и узнаете, как избе- гать их в будущем. Описанные мной методики программирования помогут вам сохранять контроль над крупными проектами, а также успешно сопровождать и изменять ПО при изменении требований.
Опытные программисты
Эта книга окажется полезной опытным программистам, желающим получить всесторон- нее и удобное руководство по разработке ПО. Так как эта книга фокусируется на констру- ировании — самой известной части жизненного цикла ПО, — описанные в ней методики будут понятны и программистам, имеющим соответствующее образование, и программи- стам-самоучкам.
Технические лидеры
Многие технические лидеры используют первое издание этой книги для обучения менее опытных членов своих групп. Вы также можете использовать эту книгу для восполнения пробелов в своих знаниях. Если вы — опытный программист, то, наверное, согласитесь не со всеми моими выводами (обратное было бы странным), но, если вы прочитаете весь материал и обдумаете каждый поднятый вопрос, едва ли какая-то возникшая проблема конструирования окажется для вас новой.
X I V
Предисловие
Программисты-самоучки
Если вы не имеете специального образования, вы не одиноки. Ежегодно программистами становятся около 50 000 человек (BLS, 2004, Hecker 2004), однако число дипломов, вруча- емых ежегодно в нашей отрасли, составляет лишь около 35 000 (NCES, 2002). Легко прий- ти к выводу, что многие программисты изучают разработку ПО самостоятельно. Програм- мисты-самоучки встречаются среди инженеров, бухгалтеров, ученых, преподавателей, вла- дельцев малого бизнеса и представителей других профессий, которые занимаются про- граммированием в рамках своей работы, но не всегда считают себя программистами. Каким бы ни было ваше программистское образование, в этом руководстве вы найдете инфор- мацию об эффективных методиках программирования.
Студенты
В отличие от программистов, которые обладают опытом, но не могут похвастаться специ- альным обучением, недавние выпускники вузов часто имеют обширные теоретические знания,
но плохо владеют практическими ноу-хау, связанными с созданием реальных программ.
Передача практических навыков хорошего кодирования зачастую идет медленно, в риту- альных танцах архитекторов ПО, лидеров проектов, аналитиков и более опытных програм- мистов. Еще чаще эти навыки приобретаются программистами в результате собственных проб и ошибок. Эта книга — альтернатива традиционным неспешным интеллектуальным ритуалам. В ней собраны полезные советы и эффективные стратегии разработки, которые ранее можно было узнать главным образом только непосредственно у других людей. Это трамплин для студентов, переходящих из академической среды в профессиональную.
Где еще можно найти эту информацию?
В этой книге собраны методики конструирования из самых разнообразных источников.
Многие знания о конструировании не только разрозненны, но и годами не попадают в печатные издания (Hildebrand, 1989; McConnell, 1997a). В эффективных, мощных методи- ках программирования, используемых лучшими программистами, нет ничего мистиче- ского, однако в повседневной череде неотложных задач очень немногие эксперты выкра- ивают время на то, чтобы поделиться своим опытом. Таким образом, программистам трудно найти хороший источник информации о программировании.
Методики, описанные в этой книге, заполняют пустоту, остающуюся в знаниях програм- мистов после прочтения вводных и более серьезных учебников по программированию.
Что читать человеку, изучившему книги типа «Introduction to Java», «Advanced Java» и
«Advanced Advanced Java» и желающему узнать о программировании больше? Вы можете читать книги о процессорах Intel или Motorola, функциях ОС Microsoft Windows или Linux или о другом языке программирования — невозможно эффективно программировать, не имея хорошего представления о таких деталях. Но эта книга относится к числу тех не- многих, в которых обсуждается программирование как таковое. Наибольшую пользу при- носят те методики, которые можно использовать независимо от среды или языка. В дру- гих источниках такие методики обычно игнорируются, и именно поэтому я сосредото- чился на них.
Как показано ниже, информация, представленная в этой книге, выжата из многих источ- ников. Единственным другим способом получения этой информации является изучение горы книг и нескольких сотен технических журналов, дополненное значительным реаль- ным опытом. Если вы уже проделали все это, данная книга все равно окажется вам полез- ной как удобный справочник.