Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 821
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
702
ЧАСТЬ VI Системные вопросы
쐽
межплатформенных средств разработки: вы можете написать код, который сможет выполняться в Microsoft Windows, Apple Macintosh и X Window System путем простого перекомпилирования в каждой среде;
쐽
средств для сжатия данных;
쐽
типов данных и алгоритмов;
쐽
средств для работы с базами данных и манипуляций с файлами данных;
쐽
инструментов для создания диаграмм, графиков и схем;
쐽
средств для работы с изображениями;
쐽
управления лицензиями;
쐽
математических операций;
쐽
инструментов для сетевого взаимодействия и работы в Интернете;
쐽
генераторов отчетов и конструкторов запросов;
쐽
средств для шифрования и обеспечения безопасности;
쐽
инструментов для создания электронных таблиц и сеток;
쐽
текстовых редакторов и систем проверки правописания;
쐽
инструментов для голосовой, телефонной и факсимильной передачи данных.
Мастера для генерации кода
Как насчет того, чтобы кто-нибудь написал код вместо вас? Вам не придется наде- вать желтый клетчатый пиджак и учиться тараторить, как торговец автомобилями,
чтобы уговорить кого-то другого написать для вас этот код. Вы можете использо- вать инструменты для создания кода, и эти средства часто интегрированы в IDE.
Инструменты генерации кода обычно ориентированы на приложения для баз данных, но к этому классу относятся и другие программы. Широко распростра- нены кодовые генераторы для баз данных, пользовательского интерфейса и ком- пиляторов. Генерируемый ими код редко так же хорош, как написанный програм- мистом, но во многих приложениях разработанный вручную код и не требуется.
Для некоторых пользователей предпочтительней иметь 10 работающих приложе- ний, чем одно, но работающее исключительно хорошо.
Генераторы кода также помогают при создании прототипов промышленного кода.
С посомощью кодогенератора вы за несколько часов смастерите прототип про- граммы, который позволит продемонстрировать ключевые аспекты пользователь- ского интерфейса, или проведете эксперименты с несколькими подходами к про- ектированию. При ручном кодировании такой ассортимент функциональности потребовал бы нескольких недель работы. Если вы просто экспериментируете,
почему бы не делать это наиболее дешевым способом?
Наиболее распространенный недостаток кодовых генераторов в том, что создан- ный ими код обычно практически нечитаем. Сопровождая такой код, вы можете пожалеть о том, что сразу не написали его вручную.
Программы установки
Средства, предназначенные для создания программ установки, обычно поддержи- вают работу с дискетами, CD или DVD или позволяют создавать программы уста- новки через Web. Они проверяют, существуют ли на целевой машине общие биб- лиотечные файлы, контролируют номера версий и т. д.
1 ... 79 80 81 82 83 84 85 86 ... 104
ГЛАВА 30 Инструменты программирования
703
Препроцессоры
Препроцессоры и препроцессорные макросы помогают при отладке, поскольку упрощают процесс переключения меж- ду отладочной и промышленной версиями кода. Если во вре- мя разработки вы хотите проверять фрагментацию памяти в начале каждого метода, то можете разместить там макро- сы. В промышленной версии вы, возможно, не захотите ос- тавлять эти проверки — тогда можно переопределить эти макросы так, что они вообще не будут генерировать кода. По похожим причинам макросы препроцес- сора подходят для написания кода, предназначенного для компиляции на несколь- ких различных платформах — например, и в Windows, и в Linux.
Используя язык с примитивными управляющими конструкциями, например ас- семблер, вы можете написать препроцессор управляющей логики, чтобы эмули- ровать в языке такие структурированные конструкции, как
if-then-else и циклы while.
Если в вашем языке нет препроцессора, вы можете задей- ствовать его автономный вариант как составляющую про- цесса сборки. Один из препроцессоров — M4 — доступен по адресу
www.gnu.org/software/m4/.
Отладка
Следующие средства оказывают помощь при отладке:
쐽
предупреждающие сообщения компилятора;
쐽
тестовые леса;
쐽
инструменты для сравнения (позволяющие сравнивать различные версии ис- ходных файлов);
쐽
средства профилирования;
쐽
мониторы трассировки;
쐽
интерактивные отладчики — как программные, так и аппаратные.
Средства тестирования, обсуждаемые далее, имеют отношение и к отладке.
Тестирование
Следующие инструменты помогут вам провести эффектив- ное тестирование:
쐽
автоматизированные системы тестирования, такие как
JUnit, NUnit, CppUnit и пр.;
쐽
автоматизированные генераторы тестов;
쐽
утилиты для записи и воспроизведения тестовых примеров;
쐽
мониторы покрытия (анализаторы логики и средства профилирования);
쐽
символьные отладчики;
쐽
программы для стрессового тестирования (заполняющие оперативную память,
перемешивающие содержимое памяти, генерирующие ошибки при выбороч- ных обращениях к памяти, проверяющие доступ к памяти);
쐽
средства сравнения (сравнивающие файлы данных, результаты работы програм- мы и экранные изображения);
Перекрестная ссылка О добав- лении в код и удалении из кода отладочных средств см. подраз- дел «Запланируйте удаление от- ладочных средств» раздела 8.6.
http://cc2e.com/3091
Перекрестная ссылка Об этих инструментах см. раздел 23.5.
Перекрестная ссылка Об этих инструментах см. раздел 22.5.
704
ЧАСТЬ VI Системные вопросы
쐽
тестовые леса;
쐽
инструменты для внесения дефектов;
쐽
ПО для отслеживания дефектов.
Оптимизация кода
Эти инструменты помогут вам при тонкой настройке кода.
Средства профилирования
Профилировщик следит за работой кода и сообщает, сколько раз выполнялся каж- дый оператор или сколько времени программа затратила на выполнение отдель- ных выражений или исполняемых ветвей. Профилирование кода во время выпол- нения действует, как доктор, который приставляет стетоскоп к вашей груди и про- сит вас покашлять. Профилировщик дает вам понимание того, как работает ваша программа, где находятся узкие места и где нужно настроить код.
Ассемблерные листинги и дизассемблеры
Однажды вам захочется взглянуть на ассемблерный код, генерируемый вашим языком высокого уровня. Некоторые компиляторы могут генерировать ассемблерные лис- тинги. Другие — нет, и вам придется использовать дизассемблер, чтобы заново создать ассемблерный текст из машинного кода, сгенерированного компилятором. Анализ ассемблерного кода, создаваемого компилятором, показывает, насколько эффективно ваш компилятор преобразует код на языке высокого уровня в машинный код. Он может объяснить, почему высокоуровневый код, кажущийся быстродействующим,
выполняется медленно. В главе 26 я приводил несколько примеров эталонных те- стов, результаты которых были нелогичны. При испытаниях этого кода я часто обращался к ассемблерному листингу, чтобы лучше понять результаты, не объяс- нимые при анализе программы на языке высокого уровня.
Если вы плохо знакомы с языком ассемблера и хотите пройти вводный курс, то нет ничего лучше, чем сравнение каждого оператора языка высокого уровня с соответствующими ассемблерными командами, генерируемыми компилятором.
Первое обращение к ассемблеру часто бывает настоящим открытием. Когда вы увидите, как много кода создает компилятор — насколько больше, чем нужно, —
вы уже не сможете смотреть на свой компилятор так, как прежде.
И наоборот, в некоторых средах компилятор должен генерировать исключитель- но сложный код. Изучение результатов его работы помогает по достоинству оце- нить те усилия, которые потребовалось бы приложить при программировании на языке более низкого уровня.
30.4. Инструменты и среды
Некоторые платформы считаются более подходящими для работы с инструмен- тами, чем другие.
Платформа UNIX известна своей коллекцией небольших утилит со смешными именами, которые хорошо работают вместе: grep, diff, sort, make, crypt, tar, lint, ctags,
sed, awk, vi и другие. Языки C и C++, тесно связанные с UNIX, воплощают ту же
ГЛАВА 30 Инструменты программирования
705
философию: стандартная библиотека C++ состоит из небольших функций, из которых легко сформировать более сложные функции, потому что все они хоро- шо работают в связке.
Некоторые программисты настолько продуктивно работа- ют в UNIX, что не хотят с ней расставаться. Они использу- ют свои любимые UNIX-подобные средства в Windows и других средах. Свой вклад в успех парадигмы UNIX внесла доступность инстру- ментов, которые можно применять на других машинах. Так, cygwin предоставля- ет UNIX-подобный инструментарий для работы под Windows (
www.cygwin.com).
Книга Эрика Реймонда (Eric Raymond) «The Art of Unix Programming» (2004) со- держит углубленное обсуждение культуры программирования под UNIX.
30.5. Создание собственного программного
инструментария
Допустим, вам дано пять часов на выполнение работы, и у вас есть выбор:
쐽
спокойно выполнить работу за пять часов;
쐽
потратить 4 часа и 45 минут, лихорадочно создавая утилиту для выполнения работы, а затем за 15 минут сделать работу с помощью этой утилиты.
Большинство выберет первый вариант в одном случае из миллиона, а второй —
во всех остальных случаях. Создание инструментария — это один из столпов программирования. Практически все большие организации (т. е. такие, в которых работает не менее 1000 программистов) имеют группы для разработки и поддерж- ки собственных инструментов. Во многих из них создан свой инструментарий для работы с требованиями и проектированием, превосходящий предлагаемые на рынке аналоги (Jones, 2000).
Вы можете сами написать большую часть из перечисленных в этой главе инстру- ментов. Возможно, это и нерентабельно, но особых технических препятствий к этому нет.
Инструментальные средства для отдельного проекта
Большинству средних и больших проектов требуются специальные инструмен- ты, уникальные для этого проекта. Так, вам может понадобиться средство для ге- нерации специальных видов тестовых данных, чтобы проверить качество файлов данных, или программа для эмуляции аппаратной части, которой пока нет в на- личии. Ниже приведено несколько примеров поддержки в проектах специализи- рованных средств.
쐽
Аэрокосмическая команда отвечала за разработку ПО контроля инфракрасного датчика и анализа его показаний. Для проверки производительности программы записывающее устройство документировало действия, выполняемые програм- мой во время полета. Инженеры написали собственные средства анализа дан- ных с целью оценить производительность полетных систем.
http://cc2e.com/3026