Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 815
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
4 8
ЧАСТЬ I Основы разработки ПО
쐽
Система может включать вспомогательный код, выпол- няемый при обнаружении ошибки в основном коде. Так, если первый ответ кажется ошибочным, система может переклю- читься на альтернативный метод вычисления квадратного корня.
쐽
Система может применять алгоритм голосования. Она может включать три класса, вычисляющих квадратный ко- рень разными способами. Каждый класс вычисляет квадрат- ный корень, после чего система сравнивает полученные результаты. В зависимости от реализованного типа отказоустойчивости сис- тема может использовать среднее, срединное или наиболее вероятное значе- ние из трех.
쐽
Система может заменять ошибочное значение поддельным значением, кото- рое положительно скажется на работе оставшейся части системы.
Другими подходами к отказоустойчивости являются перевод системы при обна- ружении ошибки в состояние частичной работоспособности или ограниченной фунциональности. Система может отключиться или автоматически перезапустить себя. Конечно, эти примеры упрощены. Отказоустойчивость — захватывающая и сложная область, но не она является темой этой книги.
Возможность реализации архитектуры
Разработчики могут сомневаться в том, способна ли система достигнуть заданных показателей производительности, работать при ограниченности ресурсов и бу- дет ли она адекватно поддержана средами реализации. Архитектура должна под- тверждать, что система технически осуществима. Если невозможность реализации какого-то компонента может сделать проект неработоспособным, в архитектуре должно быть отражено, как изучались эти вопросы: при помощи прототипов,
исследований или иначе. Эти аспекты риска следует устранить до начала полно- масштабного конструирования.
Избыточная функциональность
Надежностью называют способность системы продолжать работу после обнару- жения ошибки. Частенько в спецификации архитектуры разработчики определя- ют более надежную систему, чем указано в требованиях. Одна из причин этого в том, что система, состоящая из многих частей, удовлетворяющих минимальным требованиям к надежности, в целом может оказаться менее надежной, чем нуж- но. В мире ПО цепь не так крепка, как слабейшее звено; она так слаба, как все слабые звенья, вместе взятые. В спецификации архитектуры должно быть явно указано,
могут ли программисты реализовать в своих блоках программы избыточную фун- кциональность или они должны создать простейшую работоспособную систему.
Определить отношение к реализации избыточной функциональности особенно важно потому, что многие программисты делают это автоматически, из чувства профессиональной гордости. Явно выразив ожидания в архитектуре, вы сможете избежать феномена, при котором некоторые классы исключительно надежны, а другие лишь отвечают требованиям.
Дополнительные сведения Хо- рошее введение в вопросы от- казоустойчивости см. в июльс- ком номере журнала «IEEE Soft- ware» за 2001 год. Кроме того,
в статьях этого номера есть ссылки на многие отличные книги и статьи, посвященные данной теме.
ГЛАВА 3 Семь раз отмерь, один раз отрежь: предварительные условия
49
Купить или создавать самим?
Самый радикальный подход к созданию ПО — не создавать его вообще, а купить или загрузить из Интернета бесплат- ное ПО с открытым исходным кодом. Вы можете приобре- сти элементы управления GUI, менеджеры БД, процессоры изображений, компоненты для работы с графикой и диа- граммами, компоненты для коммуникации по Интернету,
компоненты обеспечения безопасности и шифрования, обработки электронных таблиц и текста — список почти бесконечен. Одним из главных достоинств про- граммирования с использованием современных GUI-сред является объем функ- циональности, который вы получаете автоматически: классы для работы с графи- кой, менеджеры диалоговых окон, обработчики событий клавиатуры и мыши, код,
поддерживающий любые принтеры и мониторы и т. д.
Если архитектура не подразумевает применение готовых компонентов, она дол- жна объяснять, в каких аспектах компоненты, которые будут разработаны, ока- жутся лучше готовых библиотек и компонентов.
Повторное использование
Если план предусматривает применение существующего кода, тестов, форматов данных и т. д., архитектура должна объяснять, как повторно использованные ре- сурсы будут адаптированы к другим архитектурным особенностям, если это бу- дет сделано.
Стратегия изменений
Так как при создании продукта и программисты, и пользо- ватели обучаются, приложение скорее всего в период разра- ботки будет изменяться. Причинами этого могут быть изме- нения типов данных, форматов файлов, функциональности,
реализация новых функций и т. д. Изменения могут быть новыми возможностями,
которые были запланированы заранее или не были реализованы в первой версии системы. Поэтому разработчику архитектуры ПО следует сделать ее достаточно гибкой, чтобы в систему можно было легко внести вероятные изменения.
Архитектура должна четко описывать стратегию изменений.
Архитектура должна показывать, что возможные улучшения рассматривались и что реализация наиболее вероятных улучшений окажется наиболее простой. Если вероятны из- менения форматов ввода или вывода данных, стиля взаимо- действия с пользователями или требований к обработке,
архитектура должна показывать, что все эти изменения были предвосхищены и каждое из них будет ограничено неболь- шим числом классов. Архитектурный план внесения изме- нений может быть совсем простым: включить в файлы данных номера версий, за- резервировать поля на будущее, спроектировать файлы так, чтобы в них можно было добавить новые таблицы и т. д. Если применяется генератор кода, архитек- тура должна показывать, что он поддерживает возможность внесения предпола- гаемых изменений.
Перекрестная ссылка Список типов коммерческих программ- ных компонентов см. в подраз- деле «Библиотеки кода» разде- ла 30.3.
Перекрестная ссылка О систе- матичной обработке изменений см. раздел 28.2.
Ошибки проектирования часто являются довольно тонкими и объясняются эволюцией, при которой по мере реализации новых функций и возможностей разработчики забывают о сде- ланных ранее предположениях.
Фернандо Дж. Корбати
(Ferrnando J. Corbatу)
5 0
ЧАСТЬ I Основы разработки ПО
В архитектуре должны быть отражены стратегии, которые позволяют программистам не ограничивать имеющийся у них выбор раньше времени. Так, архитектура может опре- делять, что вместо жестко закодированных тестов
if будет применяться метод, основанный на проверке таблиц. Дан- ные таблиц можно хранить во внешнем файле, а не вклю- чать в программу, что позволит вносить в нее изменения без перекомпиляции.
Общее качество архитектуры
Хорошая спецификация архитектуры должна описывать классы системы, инфор- мацию, скрываемую каждым классом, и обосновывать принятые и отвергнутые варианты проекта системы.
Архитектура должна быть продуманным концептуальным целым, включающим несколько специфических дополнений.
Главный тезис самой популярной книги по разработке ПО
«Мифический человеко-месяц» гласит, что основной пробле- мой, характерной для крупных систем, является поддержание их концептуальной целостности (Brooks, 1995). Хорошая архитектура должна соответствовать про- блеме. Изучая архитектуру, вы должны испытывать удовольствие от того, насколько естественным и простым кажется решение. Вам должно казаться, что проблема и архитектура неразрывно связаны.
Вам следует знать, как архитектура изменялась во время ее проектирования. Каж- дое изменение должно быть четко согласовано с общей концепцией. Архитекту- ра не должна быть похожа на проект бюджета Конгресса США, предусматриваю- щий расходы на мероприятия, повышающие популярность чиновников.
Цели архитектуры должны быть четко сформулированы. Проект системы, глав- ным требованием к которой является модифицируемость, будет отличаться от проекта системы, которая должна показывать высочайшую производительность,
даже если по функциональности обе системы будут одинаковы.
В архитектуре должны быть обоснованы важнейшие принятые решения. С подо- зрением относитесь к обоснованиям из разряда «мы всегда так делали». Здесь уместно вспомнить одну поучительную историю. Бет хотела приготовить туше- ное мясо по прославленному рецепту, передававшемуся из поколения в поколе- ние в семье ее мужа Абдула. Абдул сказал, что его мать солила кусок мяса, перчи- ла, обрезала его края, укладывала в горшок, закрывала и ставила в духовку. На вопрос
Бет «Зачем обрезать оба края?» Абдул ответил: «Не знаю, я всегда так делал. Спро- шу у мамы». Он позвонил ей и услышал: «Не знаю, просто я так всегда делала. Спрошу у твоей бабушки». А бабушка заявила: «Понятия не имею, почему вы так делаете.
Я делала так потому, что мой горшок был маловат».
Хорошая архитектура ПО не зависит ни от платформы, ни от языка. Пожалуй, вы не сможете проигнорировать среду конструирования, однако максимальная не- зависимость от среды позволит вам устоять перед соблазном создать слишком подробную архитектуру и избежать работы, которую лучше выполнять во время конструирования. Если программа ориентирована на конкретную платформу или должна быть разработана на конкретном языке, это правило неактуально.
Перекрестная ссылка О мерах,
позволяющих не ограничивать возможность выбора, см. под- раздел «Тщательно выбирайте время связывания» раздела 5.3.
Перекрестная ссылка О соотно- шении атрибутов качества см.
раздел 20.1.
1 ... 4 5 6 7 8 9 10 11 ... 104
ГЛАВА 3 Семь раз отмерь, один раз отрежь: предварительные условия
51
При разработке архитектуры следует соблюдать баланс между недостаточным и чрезмерным определением системы. Ни на какую часть архитектуры не следует обращать больше внимания, чем она заслуживает; не следует разрабатывать одну часть в ущерб другой. Архитектура должна отражать все требования, не включая ненужных элементов.
В архитектуре должны быть явно определены области риска, указаны его причи- ны и описаны действия по сведению риска к минимуму.
Архитектура должна включать описания системы с разных точек зрения. Планы дома включают поэтажный план, план перекрытий, электрические схемы и т. д.
Качество архитектуры ПО также повысится, если включить в нее описания раз- ных взглядов на систему, которые позволят найти ошибки и помогут программи- стам полностью понять проект системы (Kruchten, 1995).
Наконец, элементы архитектуры не должны вызывать у вас чувство неловкости.
В архитектуру не следует включать что-то только для того, чтобы угодить началь- нику. Архитектура не должна включать ничего, что было бы трудно понять. Именно вы будете претворять ее в жизнь — как же вы ее реализуете, если не будете в ней разбираться?
Контрольный список: архитектура
Следующий список вопросов позволяет сделать вывод о качестве архитектуры. Этот список не является исчерпы- вающим руководством по проектированию архитектуры —
это прагматичный способ оценки того, что вы получаете на программистском конце пищевой цепи разработки ПО. Используйте его как основу для создания собственного контрольного списка. Как и в случае аналогичного списка вопро- сов о требованиях, при работе над неформальным проектом некоторые вопро- сы будут неактуальны, однако при работе над более крупным проектом боль- шинство из них пригодится.
Специфические аспекты архитектуры
Ясно ли описана общая организация программы? Включает ли специфика- ция грамотный обзор архитектуры и ее обоснование?
Адекватно ли определены основные компоненты программы, их области ответственности и взаимодействие с другими компонентами?