Главная - Литература

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294

Дополнителъкые сведения Хо * Система может включать вспомогательный код, выпол-рошее введение в вопросы от- няемый при обнаружении ошибки в основном коде. Так, если кшушШъош см. в тпьо- первый ответ кажется ошибочным, система может переклю-ком номере журнала «ШЕЕ Soft- читься на альтернативный метод вычисления квадратного ware» за 2001 год. Кроме того, корня

в статьях этого номера есть *

ссылки на многие отличные Система может применять алгоритм голосования. Она книги и статьи, посвйщенные может включать три класса, вычисляющих квадратный ко-данной теме. рень разными способами. Каждый класс вычисляет квадрат-

ный корень, после чего система сравнивает полученные результаты. В зависимости от реализованного типа отказоустойчивости система может использовать среднее, срединное или наиболее вероятное значение из трех.

Система может заменять ошибочное значение поддельным значением, которое положительно скажется на работе оставшейся части системы.

Другими подходами к отказоустойчивости являются перевод системы при обнаружении ошибки в состояние частичной работоспособности или ограниченной фунциональности. Система может отключиться или автоматически перезапустить себя. Конечно, эти примеры упрощены. Отказоустойчивость - захватывающая и сложная область, но не она является темой этой книги.

Возможность реализации архитектуры

Разработчики могут сомневаться в том, способна ли система достигнуть заданных показателей производительности, работать при ограниченности ресурсов и будет ли она адекватно поддержана средами реализации. Архитектура должна подтверждать, что система технически осуществима. Если невозможность реализации какого-то компонента может сделать проект неработоспособным, в архитектуре должно быть отражено, как изучались эти вопросы: при помощи прототипов, исследований или иначе. Эти аспекты риска следует устранить до начала полномасштабного конструирования.

Избыточная функциональность

Надежностью называют способность системы продолжать работу после обнаружения ошибки. Частенько в спецификации архитектуры разработчики определяют более надежную систему, чем указано в требованиях. Одна из причин этого в том, что система, состоящая из многих частей, удовлетворяющих минимальным требованиям к надежности, в целом может оказаться менее надежной, чем нужно. В мире ПО цепь не так крепка, как слабейшее звено; она так слаба, как все слабые звенья, вместе взятые. В спецификации архитектуры должно быть явно указано, могут ли программисты реализовать в своих блоках программы избыточную функциональность или они должны создать простейшую работоспособную систему.

Определить отношение к реализации избыточной функциональности особенно важно потому, что многие программисты делают это автоматически, из чувства профессиональной гордости. Явно выразив ожидания в архитектуре, вы сможете избежать феномена, при котором некоторые классы исключительно надежны, а другие лишь отвечают требованиям.



Купить или создавать самим?

Самый радикальный подход к созданию ПО - не создавать щу сйылий Список его вообще, а купить или загрузить из Интернета бесплат- jg коммерческих программное ПО с открытым исходным кодом. Вы можете приобре- ных компоиейтов см- в тт-сти элементы управления GUI, менеджеры БД, процессоры Деле Библиотеки кода» разде» изображений, компоненты для работы с графикой и диа-граммами, компоненты для коммуникации по Интернету,

компоненты обеспечения безопасности и шифрования, обработки электронных таблиц и текста - список почти бесконечен. Одним из главных достоинств программирования с использованием современных GUI-сред является объем функциональности, который вы получаете автоматически: классы для работы с графикой, менеджеры диалоговых окон, обработчики событий клавиатуры и мыши, код, поддерживающий любые принтеры и мониторы и т. д.

Если архитектура не подразумевает применение готовых компонентов, она должна объяснять, в каких аспектах компоненты, которые будут разработаны, окажутся лучше готовых библиотек и компонентов.

Повторное использование

Если план предусматривает применение существующего кода, тестов, форматов данных и т. д., архитектура должна объяснять, как повторно использованные ресурсы будут адаптированы к другим архитектурным особенностям, если это будет сделано.

Стратегия изменений

Так как при создании продукта и программисты, и пользо- перенреитиал ттш О систе-ватели обучаются, приложение скорее всего в период разра- матичной обработке изменений ботки будет изменяться. Причинами этого могут быть изме- см. раздел 28.2. нения типов данных, форматов файлов, функциональности,

реализация новых функций и т. д. Изменения могут быть новыми возможностями, которые были запланированы заранее или не были реализованы в первой версии системы. Поэтому разработчику архитектуры ПО следует сделать ее достаточно гибкой, чтобы в систему можно было легко внести вероятные изменения.

Архитектура должна четко описывать стратегию изменений. „ровкт«ршний чаш

Архитектура должна показывать, что возможные улучшения я&яяютс» довольно тонкими и

рассматривались и что реализация наиболее вероятных объясняются е80ЛЮ14йей, при

улучшений окажется наиболее простой. Если вероятны из- которой по мере реализаций

менения форматов ввода или вывода данных, стиля взаимо- функций и возможностей

действия с пользователями или требований к обработке, Саш

архитектура должна показывать, что все эти изменения были .>

Фернандо Д)н. Корбат

предвосхищены и каждое из них будет ограничено неболь- (Fermaneo J. СоШу)

шим числом классов. Архитектурный план внесения изменений может быть совсем простым: включить в файлы данных номера версий, зарезервировать поля на будущее, спроектировать файлы так, чтобы в них можно было добавить новые таблицы и т. д. Если применяется генератор кода, архитектура должна показывать, что он поддерживает возможность внесения предполагаемых изменений.



Шрвкршиш! ыикг О мерах архитектуре должны быть отражены стратегии, которые поз801тшУ4»х т ограничивать позволяют программистам не ограничивать имеющийся у возможность выбора, см. под- них выбор раньше времени. Так, архитектура может опре-раал «Тщтеяьно выбирайте делять, что вместо жестко закодированных тестов г/ будет время тшышт» раанеяа ЬХ применяться метод, основанный на проверке таблиц. Данные таблиц можно хранить во внешнем файле, а не включать в программу, что позволит вносить в нее изменения без перекомпиляции.

Общее качество архитектуры

Хорошая спецификация архитектуры должна описывать классы системы, информацию, скрываемую каждым классом, и обосновывать принятые и отвергнутые варианты проекта системы.

Архитектура должна быть продуманным концептуальным

Пщцттт иып%й О ооотио- .

ттт атрибутов качества см. Цьш, включающим несколько специфических дополнении.

раздел 20.1. Главный тезис самой популярной книги по разработке ПО

«Мифический человеко-месяц» гласит, что основной проблемой, характерной для крупных систем, является поддержание их концептуальной целостности (Brooks, 1995). Хорошая архитектура должна соответствовать проблеме. Изучая архитектуру, вы должны испытывать удовольствие от того, насколько естественным и простым кажется решение. Вам должно казаться, что проблема и архитектура неразрывно связаны.

Вам следует знать, как архитектура изменялась во время ее проектирования. Каждое изменение должно быть четко согласовано с общей концепцией. Архитектура не должна быть похожа на проект бюджета Конгресса США, предусматривающий расходы на мероприятия, повышающие популярность чиновников.

Цели архитектуры должны быть четко сформулированы. Проект системы, главным требованием к которой является модифицируемость, будет отличаться от проекта системы, которая должна показывать высочайшую производительность, даже если по функциональности обе системы будут одинаковы.

В архитектуре должны быть обоснованы важнейшие принятые решения. С подозрением относитесь к обоснованиям из разряда «мы всегда так делали». Здесь уместно вспомнить одну поучительную историю. Бет хотела приготовить тушеное мясо по прославленному рецепту, передававшемуся из поколения в поколение в семье ее мужа Абдула. Абдул сказал, что его мать солила кусок мяса, перчила, обрезала его края, укладывала в горшок, закрывала и ставила в духовку. На вопрос Бет «Зачем обрезать оба края?» Абдул ответил: «Не знаю, я всегда так делал. Спрошу у мамы». Он позвонил ей и услышал: «Не знаю, просто я так всегда делала. Спрошу у твоей бабушки». А бабушка заявила: «Понятия не имею, почему вы так делаете. Я делала так потому, что мой горшок был маловат».

Хорошая архитектура ПО не зависит ни от платформы, ни от языка. Пожалуй, вы не сможете проигнорировать среду конструирования, однако максимальная независимость от среды позволит вам устоять перед соблазном создать слишком подробную архитектуру и избежать работы, которую лучше выполнять во время конструирования. Если программа ориентирована на конкретную платформу или должна быть разработана на конкретном языке, это правило неактуально.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294



0.0103