Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 767
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
ГЛАВА 2 Метафоры, позволяющие лучше понять разработку ПО
15
чтобы поддерживать реальную систему по мере ее разработки. Она может вызы- вать поддельные классы для каждой из определенных вами основных функций. Такая система похожа на песчинку, с которой начинается образование жемчужины.
Создав скелет, вы начинаете понемногу наращивать плоть. Каждый из фиктивных классов вы заменяете реальным. Вместо того чтобы имитировать ввод данных, вы пишете код, на самом деле принимающий реальные данные. А вместо имитации вывода данных — код, на самом деле выводящий данные. Вы продолжаете добав- лять нужные фрагменты, пока не получаете полностью рабочую систему.
Эффективность такого подхода можно подтвердить двумя впечатляющими при- мерами. Фред Брукс, который в 1975 г. предлагал выбрасывать первый экземпляр программы, заявил, что за десять лет, прошедших с момента написания им зна- менитой книги «Мифический человеко-месяц», ничто не изменяло его работу и ее эффективность так радикально, как инкрементная разработка (Brooks, 1995).
Аналогичное заявление было сделано Томом Гилбом в революционной книге
«Principles of Software Engineering Management» (Gilb, 1988), в которой он пред- ставил метод эволюционной поставки программы (evolutionary delivery) и разрабо- тал многие основы современного гибкого программирования (agile programming).
Многие другие современные методологии также основаны на идее инкрементной разработки (Beck, 2000; Cockburn, 2002; Highsmith, 2002; Reifer, 2002; Martin, 2003;
Larman, 2004).
Достоинство инкрементной метафоры в том, что она не дает чрезмерных обеща- ний. Кроме того, она не так легко поддается неуместному расширению, как сель- скохозяйственная метафора. Раковина, формирующая жемчужину, — хороший вариант визуализации инкрементной разработки, или аккреции.
Строительная метафора: построение ПО
Метафора «построения» ПО полезнее, чем метафоры «написания» или «вы- ращивания» ПО, так как согласуется с идеей аккреции ПО и предостав- ляет более детальное руководство. Построение ПО подразумевает нали- чие стадий планирования, подготовки и выполнения, тип и степень выраженно- сти которых зависят от конкретного проекта. При изучении этой метафоры вы найдете и другие параллели.
Для построения метровой башни требуется твердая рука, ровная поверхность и
10 пивных банок, для башни же в 100 раз более высокой недостаточно иметь в
100 раз больше пивных банок. Такой проект требует совершенно иного плани- рования и конструирования.
Если вы строите простой объект, скажем, собачью конуру, вы можете пойти в хозяйственный магазин, купить доски, гвозди, и к вечеру у Фидо будет новый дом.
Если вы забудете про лаз или допустите какую-нибудь другую ошибку, ничего страшного: вы можете ее исправить или даже начать все сначала (рис. 2-3). Все,
что вы при этом потеряете, — время. Такой свободный подход уместен и в неболь- ших программных проектах. Если вы плохо спроектируете 1000 строк кода, то сможете выполнить рефакторинг или даже начать проект заново, и это не приве- дет к крупным потерям.
1 6
ЧАСТЬ I Основы разработки ПО
Рис. 2-3. За ошибку, допущенную при создании простого объекта,
приходится расплачиваться лишь потраченным временем и, возможно,
некоторым разочарованием
Построить дом сложнее, и плохое проектирование при этом приводит к куда более серьезным последствиям. Сначала вы должны решить, какой тип здания вы хоти- те построить, что аналогично определению проблемы при разработке ПО. Затем вы с архитектором должны разработать и утвердить общий план, что похоже на разработку архитектуры. Далее вы чертите подробные чертежи и нанимаете бри- гаду строителей — это аналогично детальному проектированию ПО. Вы готовите стройплощадку, закладываете фундамент, создаете каркас дома, обшиваете его,
кроете крышу и проводите в дом все коммуникации — это похоже на конструи- рование ПО. Когда строительство почти завершено, в дело вступают ландшафт- ные дизайнеры, маляры и декораторы, делающие дом максимально удобным и привлекательным. Это напоминает оптимизацию ПО. Наконец, на протяжении всего строительства вас посещают инспекторы, проверяющие стройплощадку, фун- дамент, электропроводку и все, что можно проверить. При разработке ПО этому соответствуют обзоры и инспекция проекта.
И в строительстве, и в программировании увеличение сложности и масштаба проекта сопровождается ростом цены ошибок. Конечно, для создания дома нуж- ны довольно дорогие материалы, однако главной статьей расходов является оплата труда рабочих. Перемещение стены на 15 см обойдется дорого не потому,
что при этом будет потрачено много гвоздей, а потому, что вам придется опла- тить дополнительное время работы строителей. Чтобы не тратить время на ис- правление ошибок, которых можно избежать, вы должны как можно лучше вы- полнить проектирование (рис. 2-4). Материалы, необходимые для создания про- граммного продукта, стоят дешевле, чем стройматериалы, однако затраты на ра- бочую силу в обоих случаях примерно одинаковы. Изменение формата отчета обходится ничуть не дешевле, чем перемещение стены дома, потому что главным компонентом затрат в обоих случаях является время людей.
ГЛАВА 2 Метафоры, позволяющие лучше понять разработку ПО
17
Рис. 2-4. Более сложные объекты требуют более тщательного планирования
Какие еще параллели можно провести между сооружением дома и разработкой
ПО? При возведении дома никто не пытается конструировать вещи, которые можно купить. Здравомыслящему человеку и в голову не придет самостоятельно разра- батывать и создавать стиральную машину, холодильник, шкафы, окна и двери, если все это можно приобрести. Создавая программную систему, вы поступите так же.
Вы будете в полной мере использовать возможности высокоуровневого языка вместо того, чтобы писать собственный код на уровне ОС. Возможно, вы исполь- зуете также встроенные библиотеки классов-контейнеров, научные функции, клас- сы пользовательского интерфейса и классы для работы с БД. Обычно невыгодно писать компоненты, которые можно купить готовыми.
Однако если вы хотите построить нестандартный дом с первоклассной меблиров- кой, мебель, возможно, придется заказать. Вы можете заказать встроенные посу- домоечную машину и холодильник, чтобы они выглядели как часть обстановки.
Вы можете заказать окна необычных форм и размеров. Такое изготовление пред- метов на заказ имеет параллели и в мире разработки ПО. При работе над прило- жением высшего класса для достижения более высокой скорости и точности рас- четов или реализации необычного интерфейса иногда приходится создавать соб- ственные научные функции, собственные классы-контейнеры и другие компоненты.
И конструирование дома, и конструирование ПО можно оптимизировать, выполнив адекватное планирование. Если создавать ПО в неверном порядке, его будет трудно писать, тестировать и отлаживать. Сроки затянутся, да и весь проект может завер- шиться неудачей из-за чрезмерной сложности отдельных компонентов, не позво- ляющей разработчикам понять работу всей системы.
Тщательное планирование не значит исчерпывающее или чрезмерное. Вы може- те спланировать основные структурные компоненты и позднее решать, чем по- крыть пол, в какой цвет окрасить стены, какой использовать кровельный матери- ал и т. д. Хорошо спланированный проект открывает больше возможностей для изменения решения на более поздних этапах работы. Чем лучше вам известен тип создаваемого ПО, тем больше деталей вы можете принимать как данное. Вы про-
1 8
ЧАСТЬ I Основы разработки ПО
сто должны убедиться в проведении достаточного планирования, чтобы его не- достаток не привел позднее к серьезным проблемам.
Аналогия конструирования также помогает понять, почему разные программные проекты призывают к разным подходам разработки. Склад и медицинский центр или ядерный реактор также требуют разных степеней планирования, проектиро- вания и контроля качества, и никто не стал бы одинаково подходить к строитель- ству школы, небоскреба и жилого дома с тремя спальнями. Работая над ПО, вы обыч- но можете использовать гибкие упрощенные подходы, но иногда для обеспече- ния безопасности и других целей необходимы и жесткие, тщательно продуман- ные подходы.
Проблема изменения ПО приводит нас к еще одной параллели. Перемещение не- сущей стены на 15 см обходится гораздо дороже, чем перемещение перегородки между комнатами. Аналогично внесение структурных изменений в программу тре- бует больших затрат, чем добавление или удаление второстепенных возможностей.
Наконец, проведение аналогии с домостроительством позволяет лучше понять ра- боту над очень крупными программными проектами. При создании очень крупно- го объекта цена неудачи слишком высока, поэтому объект надо спроектировать тщательнейшим образом. Строительные организации скрупулезно разрабатывают и инспектируют свои планы. Все крупные здания создаются с большим запасом прочности; лучше заплатить на 10 % больше за более прочный материал, чем рис- ковать крушением небоскреба. Кроме того, большое внимание уделяется времени.
При возведении Эмпайр Стейт Билдинг время прибытия каждого грузовика, постав- лявшего материалы, задавалось с точностью до 15 минут. Если грузовик не прибы- вал в нужное время, задерживалась работа над всем проектом.
Аналогично, очень крупные программные проекты требуют планирования более высокого порядка, чем просто крупные проекты. Кейперс Джонс сообщает, что программная система из одного миллиона строк кода требует в среднем 69
видов
документации (Jones, 1998). Спецификация требований к такой системе обычно занимает 4000–5000 страниц, а проектная документация вполне может быть еще в 2 или 3 раза более объемной. Маловероятно, чтобы один человек мог понять весь проект такого масштаба или даже прочитать всю документацию, поэтому подобные проекты требуют более тщательной подготовки.
По экономическому масштабу некоторые программные проекты сравнимы с воз- ведением «Эмпайр Стейт Билдинг», и контролироваться они должны соответству- ющим образом.
Метафора построения-конструирования может быть расши- рена во многих других направлениях, именно поэтому она столь эффективна. Благодаря этой метафоре отрасль раз- работки ПО обогатилась многими популярными термина- ми, такими как архитектура ПО, леса (scaffolding), констру- ирование и фундаментальные классы. Наверное, вы сможете назвать и другие примеры.
Дополнительные сведения Гра- мотные комментарии по пово- ду расширения метафоры кон- струирования см. в статье «What
Supports the Roof?» (Starr 2003).
1 2 3 4 5 6 7 8 9 ... 104
ГЛАВА 2 Метафоры, позволяющие лучше понять разработку ПО
19
Применение методов разработки ПО:
интеллектуальный инструментарий
Люди, эффективно разрабатывающие высококачественное ПО, многие годы посвятили сбору методов, хитростей и магических заклинаний. Эти методы — не правила, а аналитические инструменты. Хороший рабочий знает предназначение каждого инструмента и умеет эффективно его использовать.
Программисты не исключение. Чем больше вы узнаете о программировании, тем больше аналитических инструментов и знаний об их своевременном и правиль- ном использовании накапливается в вашем интеллектуальном инструментарии.
Консультанты по вопросам разработки ПО иногда совету- ют программистам придерживаться одних методов разра- ботки ПО в ущерб другим. Это печально, потому что, если вы станете использовать только одну методологию, вы уви- дите весь мир в терминах этой методологии. В некоторых случаях это сделает недоступными для вас другие методы, лучше подходящие для решения текущей проблемы. Метафора инструментария поможет вам держать все методы, способы и хитрости в пределах досягаемости и применять их в уместных обстоятельствах.
Комбинирование метафор
Метафоры имеют эвристическую, а не алгоритмическую природу, поэтому они не исключают друг друга. Вы можете использовать и метафору ак- креции, и метафору конструирования. Если хотите, можете представлять разработку ПО как написание письма, комбинируя эту метафору с вождением автомобиля, охотой на оборотней или образом динозавра, увязшего в смоляной луже. Используйте любые метафоры или их комбинации, которые стимулируют ваше мышление или помогают общаться с другими членами группы.
Использование метафор — дело тонкое. Чтобы метафора привела вас к ценным эвристическим догадкам, вы должны ее расширить. Но если ее расширить черес- чур или в неверном направлении, она может ввести в заблуждение. Как и любой мощный инструмент, метафоры можно использовать неверным образом, однако благодаря своей мощи они могут стать ценным компонентом вашего интеллек- туального инструментария.
Дополнительные ресурсы
Среди книг общего плана, посвященных метафорам, моде- лям и парадигмам, главное место занимает «The Structure of
Scientific Revolutions» (3d ed. Chicago, IL: The University of
Chicago Press, 1996) Томаса Куна (Thomas S. Kuhn). В своей книге, увидевшей свет в 1962 г., Кун рассказывает о возникновении, развитии и смене теорий. Этот труд,