Технология программирования. Выжимка

Бесплатно!

Инструменты:

1) Средства самодокументирования.

Примеры программных средств: Doxygen, phpDocumentor и др. (Здесь и далее примеры программных средств приведены не в качестве совета а, лишь как констатация их наличия).

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

2) Средства  профилирования.

Примеры программных средств: VTune, CodeAnalyst, AQtime и др.

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

3) Средства  рефакторинга.

Примеры программных средств: Visual Assist X, ReSharper (R#) и др.

Рефакторинг (англ. refactoring) — процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы. Например, средства  рефакторинга  позволяют переименовать любой идентификатор (переменную,  функцию, класс и тд.)  одновременно во всей программе «одним кликом мыши».

4) Системы контроля версий.

Примеры программных средств: TurtoiseSVN , svk, git, mercurial и др.

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

Этика программирования:

Анти-паттерны (anti-patterns) (противоположность паттернам) — это классы наиболее часто внедряемых плохих решений проблем. То есть,  это список тех методов, которые применять не следует в своей практике.

Список рекомендаций к избеганию основных анти-паттернов:

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

2) Не следует в программе использовать любые неименованные константы. Нужно завести именованную константу с внятным понятным  названием. Это позволит в будущем легко  её поменять.

3) Не следует вбивать данные окружения программного комплекса(ПК) в константы (например путь к папке или кол-во ядер процессора). Окружающая обстановка ПК может легко поменяться. Необходимо завести файл с необходимыми настройками. Это позволит избежать необходимости перекомпиляции программы при её переносе в другое окружение. При этом перенос программы будет возможен даже опытным пользователем.

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

5) Идентификатор (функция/метод/процедура/класс) не должна быть более 10-25 строк кода (и в любом случае должна «влезать в 1 экран»). Если функция начинает расти, то следует провести декомпозицию её кода на более мелкие функции.

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

7) Всегда пиши виртуальный деструктор. virtual  ~TClass(); (Относится исключительно к С++).

8) Не следует преждевременно оптимизировать код. Сначала отладь и удостоверься, что программный комплекс  работает. Затем выяви профилировщиком и оптимизируй «медленные места», которые обнаружил профилировщик.

9) Не следует писать неоптимизированный код, если это практически не скажется на трудозатратах. Например, применительно к С++, передавай параметром функции экземпляры классов только  по ссылке. void f(TClass a); – не верно. void f(const TClass& a); – верно.

10) Не верь своему коду. Проверяй, даже если, кажется, что уже это делал много раз. Ошибка может быть именно там.

11) Пиши красивые и понятные без комментариев название идентификаторов (функций/классов/переменных). Не следует использовать сокращения, которые нельзя найти в словаре общепринятых сокращений.

12) Не следует применять  возвращаемое значение функций или отдельную глобальную переменную, как признак ошибки. Это значение легко забыть проверить и об ошибке так никогда и не узнаешь. Следует применять средства, доступные в большинстве языков, – механизм исключений (exception).

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

14) Не следует сравнивать  числа с плавающей точкой (например, типа  float) на равенство (a==b), тк это не работает. Используй  сравнение с некоторой точностью.  (|a-b|<EqualPrecision), где |x| – модуль числа, а EqualPrecision – некоторая точность сравнения, например 0.0000001.

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

16) Используй константность (запрет модификации) там, где возможно и компилятор сам найдет за вас больше ошибок.

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

18) Поля объектов делай всегда приватными (private). Инициализируй в конструкторе, например из параметров  конструктора или из «функциональной зависимости» от этих параметров. Если необходимо, то пиши методы для получения или установки нового значения для приватных полей (Можно использовать встроенный в большинство языков механизм property (свойства).

Детали:

Тип работы: Конспект, Лекции

Предмет: Компьютерные науки

Год написания: 2010

Добавить комментарий

Ваш email не будет показан.

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