Прим ред.: Эта статья написана специалистом компании, занимающейся разработкой программного обеспечения. Она отражает взгляд профессионала на современный рынок Open Source-решений в этой области, который заинтересован в решении конкретных прикладных задач. Не стоит путать такой подход с тем, что проповедует среднестатистический Open Source-энтузиаст, и нужно различать эти взгляды. Как видно из материала, речь идет об использовании средств с открытым кодом на протяжении всего жизненного цикла разработки межплатформенного ПО, создаваемого на таких языках, как C++, C# и Java, при условии, что код пишется программистами, работающими под разными ОС.
Первая статья — это быстрый обзор доступных Open Source-инструментов для решения всех возникающих при разработке ПО задач. В дальнейшем планируется продолжение статьи, где будут представлены более подробные обзоры тех или иных средств.
В этом цикле статей я, как разработчик ряда программных продуктов, хочу поделиться опытом использования Open Source-инструментов при разработке программного обеспечения. Эти средства абсолютно легальны, общедоступны и в полной мере удовлетворяют большинство требований разработчиков. Хочу с самого начала обратить внимание читателей на то, что целью статьи не ставится сравнение коммерческих и Open Source-продуктов, так как это две разные ниши, отличающиеся в том числе и сервисом, который вам готов предоставить поставщик средств разработки.
Что можно, а что нельзя?
Именно с этого вопроса должен начинаться выбор инструментов разработки программного обеспечения, так как он определяет возможность использования инструмента. Почему так? Потому что от того, коммерческий продукт вы производите или открытый, будет зависеть что можно использовать, а что — нельзя. Например, если вы собираетесь использовать свободные библиотеки, то должны обратить внимание на лицензию, под которой они распространяются. Так, например, лицензия GPL обязывает открывать исходные коды своего продукта под той же лицензией. Есть и более мягкие лицензии, которые дозволяют не открывать свой код — к ним относятся BSD, Apache Public License, EPL (Eclipse Public License), LGPL (Lesser General Public License) и другие.
Также необходимо учесть ограничения использования инструментов, так как некоторые производители требуют их покупки в случае применения при разработке коммерческого продукта. Чаще всего такие продукты имеют две версии: одну — Community, а другую — Standart, Professional и т.д.
При выборе инструментов не забудьте определить «Что можно?» для вашего проекта.
Стандартный набор приложений
После решения этого вопроса можно приступать к определению, какие базовые инструменты понадобятся. Для примера рассмотрим абстрактный проект среднего масштаба — разработка клиент-серверной системы управления каким-либо сетевым оборудованием. Что нам понадобится для этого кроме программистов? Конечно же, инструменты, которые эти программисты будут использовать. Определим, что они будут делать:
Создавать проект программного продукта: набор пакетов и классов и их взаимодействие; взаимодействие с агентом/сервером и с пользователем.
Писать код программы на каком-то языке.
Тестировать код программы.
Отлаживать код.
Писать документацию на протестированный и отлаженный код.
Хранить код в едином, общедоступном хранилище.
Писать инструкцию по использованию программного продукта.
Создавать пакет развертывания.
Собирать информацию об ошибках в программном продукте.
Примерно из этих стадий состоит среднестатистический проект, который ставит целью поставку пользователю полезного и качественного продукта. Пора определять инструменты, которые будут использоваться.
Проект программного продукта
Проектом программного продукта (впрочем, как и любого проекта) называется временное мероприятие, в ходе которого реализуется определенное решение или продукт, имеющий четкие цели, критерии оценки их достижения, программу действий и ограниченное время.
Однако нас интересует проект с инженерной точки зрения, а это — диаграммы классов, диаграммы взаимодействия, описания использования, описание входных и выходных данных, описание функционирования и прототипы графических форм (если используются). Традиционно для этой задачи используется язык UML, текстовый редактор и графический редактор. Первый — для описания классов, диаграмм взаимодействия и вариантов использования, второй — для описания проекта в словесной форме, а третий — для оформления иллюстраций и прототипов графических форм.
UML-редактор
Если начать поиски UML-редактора в Google, то выяснится, что чуть ли не полсотни фирм и разработчиков предлагают свои продукты и называют их особенными. Некоторые из них — действительно выдающиеся, такие как Telelogic Rapsody или Rational. Но даже если отбросить все коммерческие продукты, остается еще много решений. Однако лишь единицы из них могут быть использованы в проектах, потому что, во-первых, работают без ошибок, а во-вторых, имеют весь необходимый набор типов диаграмм. Вот те единицы,что лично я отобрал после длительного изучения разных программ:
NetBeans IDE (http://www.netbeans.org/) – в эту среду включен отличный UML-редактор, который успешно используется в одном из моих текущих проектов. Редактор — удобный, качественный, быстрый, несмотря на то, что написан на Java. К сожалению, не умеет генерировать исходный код заголовочных файлов на языке C++, а только прототипы классов для Java.
ArgoUML (http://argouml.tigris.org/) – неплохой и устойчивый редактор, написанный на Java, но при этом также работает быстро. Позволяет создавать все виды диаграмм UML и даже проектировать структуры таблиц для баз данных. Минусом является не очень удобный интерфейс (впрочем, это субъективно).
StarUML (http://staruml.sourceforge.net/) – отличный UML-редактор для Windows, позволяющий создавать все виды диаграмм. Работает очень быстро, стабильно, а интерфейс — удобный. Минус — в том, что проект не развивается с 2005 года.
Umbrello (http://uml.sourceforge.net/) – хороший UML-редактор, входящий в большинство дистрибутивов Linux. Надежный, с удобным интерфейсом, работает быстро и генерирует код для языков C++ и Java.
Иллюстрация 1: Umbrello
Иллюстрация 2: NetBeans
Таким образом, если вы создаете проект для нескольких операционных систем, или разработчики работают в разных ОС, то UML-редакторы на Java будут для вас более предпочтительны. К сожалению, у всех рассмотренных редакторов различаются и являются несовместимыми форматы файлов для хранения диаграмм — при выборе следует учесть этот немаловажный фактор.
Текстовый редактор
Нужен редактор, который является простым и удобным, позволяет встраивать иллюстрации. Дополнительным требованием является возможность генерировать документы PDF и PostScript. Таких редакторов набралось немного:
OpenOffice.org Writer (http://www.openoffice.org/) – многоплатформенный, мощный и удобный текстовый редактор, обладающий возможностью создания документов в формате PDF. Важным достоинством является поддержка множества форматов документов, в том числе и Microsoft Word.
AbiWord (http://www.abisource.com/) – мощный редактор, который работает как в среде Linux, так и в среде Windows. В рассматриваемом контексте — так же хорош, как и OpenOffice Writer.
Графический редактор
Требования к графическому редактору будут небольшие, а основным является редактирование графики в векторном виде. Таких редакторов достаточно, но из всех выделим два, которые позволяют нарисовать нужные нам схемы:
OpenOffice Draw (http://www.openoffice.org/)– достаточно функциональный редактор векторной графики, который позволяет рисовать блоки, стрелки и прочие элементы, используемые в схемах.
Inkscape (http://www.inkscape.org/) – мощный редактор векторной графики, позволяющий создать абсолютно любую мыслимую схему.
Написание кода программы
Что требуется от инструмента, помогающего непосредственно писать код программы? Как минимум, это улучшение восприятия кода путем подсветки ключевых слов и разных лексем языка разными цветами, идентификация парных скобок и автоматическая расстановка отступов. Это умеют большинство редакторов в системе Linux и многие в Windows. Дополнительные требования к редактору кода — работа с файлами проекта и возможность анализа потока вывода программы сборки проектов (Make), возможность автоматизированного создания проекта, шаблоны файлов исходных кодов и автоматическое дополнение кода. Для дизайнеров GUI могут быть полезны возможности создания графического интерфейса в редакторе интерфейса. С учетом всех основных требований и ряда дополнительных выбраны следующие среды разработки:
Kate (http://kate-editor.org/)– простой инструмент, который обеспечивает базовые требования на отличном уровне. Простой и без излишеств — за это его любят многие разработчики.
Eclipse (http://www.eclipse.org/) – мощный инструмент для разработки программ на нескольких языках программирования. Обеспечивает автодополнение кода, историю изменений, проекты и взаимодействие с системами контроля версий CVS и SVN. За счет расширений функциональность легко наращивается. Предусмотрено взаимодействие с отладчиком.
NetBeans (http://www.netbeans.org/)– мощная среда разработки, которая, как и Eclipse, поддерживает множество языков программирования. Из дополнительных свойств — автодополнение кода, проекты, работа с системами контроля версий CVS и SVN, расширения. Имеет встроенный UML-редактор и редактор графического интерфейса для языка Java. Предусмотрено взаимодействие с отладчиком.
Kdevelop (http://www.kdevelop.org/) – среда разработки, обеспечивающая базовый набор функций. Из дополнительных — взаимодействие с отладчиком, проекты (automake + autoconf), поддержка множества языков программирования, взаимодействие с редактором графических интерфейсов Qt.
#Develop (http://www.icsharpcode.net/OpenSource/SD/) – среда программирования на языке C# для Windows, которая может работать и под Linux с Mono. Обладает всеми базовыми возможностями; из дополнительных — автодополнение кода, взаимодействие с отладчиком, редактор графического интерфейса, работа с системами контроля версий CVS и SVN, проекты, расширения.
В следующей части обзора
В завершающей обзор статье будут рассмотрены инструменты для тестирования, отладки, контроля версий, документации, сборки пакетов и сбора информации об ошибках.