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

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

тестовые леса;

инструменты для внесения дефектов;

ПО для отслеживания дефектов.

Оптимизация кода

Эти инструменты помогут вам при тонкой настройке кода. Средства профилирования

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

Ассемблерные листинги и дизассемблеры

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

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

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

30.4. Инструменты и среды

Некоторые платформы считаются более подходящими для работы с инструментами, чем другие.

Платформа UNIX известна своей коллекцией небольших утилит со смешными именами, которые хорошо работают вместе: grep, diff, sort, make, crypt, tar, lint, ctags, sed, awk, vi и другие. Языки С и С++, тесно связанные с UNIX, воплощают ту же



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

Некоторые программисты настолько продуктивно работают в UNIX, что не хотят с ней расставаться. Они использу- Шр7/сс20.оот/ЗО26 ют свои любимые UNIX-подобные средства в Windows и

других средах. Свой вклад в успех парадигмы UNIX внесла доступность инструментов, которые можно применять на других машинах. Так, cygwin предоставляет UNIX-подобный инструментарий для работы под Windows {www.cygwin.com).

Книга Эрика Реймонда (Eric Raymond) «The Art of Unix Programming» (2004) содержит углубленное обсуждение культуры программирования под UNIX.

30.5. Создание собственного программного инструментария

Допустим, вам дано пять часов на выполнение работы, и у вас есть выбор:

спокойно выполнить работу за пять часов;

потратить 4 часа и 45 минут, лихорадочно создавая утилиту для выполнения работы, а затем за 15 минут сделать работу с помощью этой утилиты.

Большинство выберет первый вариант в одном случае из миллиона, а второй - во всех остальных случаях. Создание инструментария - это один из столпов программирования. Практически все большие организации (т. е. такие, в которых работает не менее 1000 программистов) имеют группы для разработки и поддержки собственных инструментов. Во многих из них создан свой инструментарий для работы с требованиями и проектированием, превосходящий предлагаемые на рынке аналоги Qors, 2000).

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

Инструментальные средства для отдельного проекта

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

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



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

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

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

Сценарии

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

crypto c:\worcl\journal.* %1 /d /Es /s

word c:\word\journal.doc

crypto c:\word\journal.* %1 /Es /s

Поле %1 предназначено для пароля, который по понятным причинам в сценарии не записан. Сценарий делает за меня работу (причем без ошибок) по вводу всех параметров и гарантирует, что я всегда выполню все операции, причем в правильном порядке.

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



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.0025