`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Search Driven Development на практике

Статья опубликована в №20 (637) от 27 мая

+11
голос

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

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

Только в 2004 г. новостные сайты, ориентированные на разработчиков, опубликовали информацию о первой специализированной системе поиска исходного кода, поддерживающей несколько различных языков программирования и индексирующей свободно доступные хранилища – Koders. Примерно в это же время, вероятно, стали очевидны перспективы данного рынка, и конкуренты не заставили себя долго ждать. В 2006 г. о запуске аналогичного сервиса заявляет стартап Krugle, а спустя несколько месяцев и компания Google объявила о своем проекте Code Search. Именно в 2006 г. активно входит в обиход термин «поиск открытого кода» (Open Source Search, OSS), который прежде всего отнесли к названным поисковикам, хотя создатели первых двух вовсе не собирались ограничиваться только открытым кодом и вскоре предложили коммерческие версии собственных решений, пригодные для использования в закрытых проектах.

По истечении еще двух лет, уже весной этого года, о системах поиска исходного кода заговорили вновь, вследствие нескольких громких событий: сервис Koders был поглощен компанией Black Duck Software, построившей свой бизнес на проверке патентной чистоты коммерческих проектов; Google наконец вывела Code Search из недр Google Labs и заявила о его готовности к широкому использованию; Krugle отрапортовала о значительных успехах и внедрении коммерческой версии в нескольких крупнейших ИТ-корпорациях. Наверное, все это свидетельствует о переходе данного рынка в новую фазу развития, и нам самое время детальнее познакомиться с тем, чем же именно могут быть полезны для разработчика специализированные поисковики.

Поиск как стиль жизни

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

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

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

Задача внутреннего поиска более или менее успешно решается посредством встроенных возможностей IDE или разнообразных сторонних утилит, а вот внешний до появления OSS-сервисов представлял собой далеко не тривиальное занятие. Самые широкие перспективы открывают современные инструменты, объединяющие поиск в открытых и закрытых проектах, интегрирующиеся в IDE и таким образом оказывающиеся просто незаменимым помощником, дающим подсказки по ходу набора программного кода, обнаруживающим характерные недочеты и выявляющим фрагменты, подходящие для повторного использования. Более того, их появление фактически сформировало новое течение в программировании – Search Driven Development (SDD). Но это, конечно, не очередная методология, претендующая на звание панацеи, а просто весьма прагматичный подход, позволяющий значительно повысить производительность труда разработчика ПО.

Koders

Search Driven Development на практике
Сервис Koders достаточно функционален и удобен в использовании, но его база проиндексированного кода самая скромная

Это старейшая система поиска программного кода из рассматриваемых нами. Первая публичная версия стартовала в 2004 г., и до появления Krugle и Google Code Search, т. е. в течение двух лет, этому сервису фактически не было достойной альтернативы. Соответственно, Koders быстро снискала популярность у разработчиков, ее ежедневная аудитория к 2006 г. оценивалась в 30 тыс. посетителей, а объем проиндексированного исходного кода составлял 425 млн строк.

Помимо бесплатного OSS-сервиса, компания также предложила два коммерческих продукта – Koders Professional и Koders Enterprise, предназначенных, соответственно, для сравнительно небольших и крупных команд разработчиков и индексирующих внутренние репозитории исходного кода. Кроме того, имеются подключаемые модули для популярных IDE (Eclipse и Visual Studio) и даже браузера FireFox, а веб-мастеры могут интегрировать инструменты поиска посредством Koders в свои сайты.

К сожалению, развитие Koders происходило совершенно не в духе времени, и фора в два года не помогла компании оторваться от конкурентов, которые с момента запуска своих сервисов уже сумели обойти Koders по многим параметрам, в том числе и по объемам проиндексированного кода. Также неизвестно, что именно оказалось препятствием для широкого распространения коммерческих продуктов – техническое несовершенство или недостатки маркетинга, но ни Koders Professional, ни Koders Enterprise не снискали сколь-нибудь заметной популярности и сегодня даже не предлагаются на официальном сайте (хотя загрузить и приобрести их можно на некоторых сторонних ресурсах).

Однако было бы несправедливо преуменьшать вклад Koders в развитие систем поиска исходного кода. Возможно, само появление этого сервиса дало толчок для развития рынка, а ряд технических инноваций Koders и сегодня выглядит вполне пристойно. К слову, модули для Eclipse и Visual Studio поддерживают функцию SmartSearch, работающую в фоновом режиме и отображающую результаты поиска в виде смарт-тегов по мере набора кода, и если разработчику необходимо, например, реализовать вычисление чистой приведенной стоимости (Net Present Value, NPV), то ему достаточно задекларировать функцию с этим названием, а SmartSearch предложит список соответствующих реализаций, из которого можно оперативно выбрать и скопировать наиболее подходящую (конечно, если это позволяет лицензия проекта).

Возможно, упомянутое приобретение Koders компанией Black Duck Software поможет вернуть сервису былые позиции, хотя не исключен и обратный вариант: поскольку Black Duck Software специализируется на оказании услуг по проверке патентной чистоты коммерческим клиентам, то новые разработки Koders вполне могут быть нацелены на внутреннее использование, а бесплатный сервис станет развиваться по остаточному принципу.

Krugle

Search Driven Development на практике
Krugle привлекает наиболее удобным и функциональным интерфейсом

Пожалуй, самый яркий представитель нашей троицы – стартап, официально зарегистрированный лишь 14 июня 2006 г., но уже успевший весьма прочно закрепиться на рынке систем поиска исходного кода. Несмотря на то что его название созвучно с Google (интернет-гигант даже предъявлял по этому поводу претензии), на самом деле оно происходит от имени основателя – Кен Круглер (Ken Krugler). В настоящее время компания предлагает бесплатный OSS-сервер, а также построенный на его основе коммерческий продукт Krugle Enterprise Edition.

Сервис Krugle подкупает удобным, продуманным до мелочей интерфейсом: синтаксическая подсветка, настраиваемые параметры отображения результатов, возможность просмотра связанных файлов проекта таким же образом, как это реализуется в современных IDE, создание прямых ссылок на результаты поиска и файлы, добавление комментариев и многое другое. Причем за счет использования Ajax все это работает очень быстро.

В вопросах собственно поиска Krugle также есть чем похвастать. Это единственный сервис, который распознает структуру программного кода для всех поддерживаемых языков и позволяет выполнять поиск в блоках указанных типов – комментариях, декларациях и вызовах функций, классах. Дополнительно индексируется множество сайтов с технической документацией, и релевантная информация оттуда выводится параллельно с основными результатами, хотя поиск по ним можно производить и отдельно (раздел Tech Pages). Особого внимания заслуживает удобная реализация работы с проектами, к примеру, их можно искать по описаниям, а для найденных просматривать различную статистику. Имеется и некий набор подключаемых модулей – для Eclipse, Firefox, Internet Explorer.

Search Driven Development на практике
Krugle Enterprise Edition индексирует всю доступную информацию по проекту из различных источников

Коммерческая редакция Krugle Enterprise Edition доступна уже во второй версии, для ознакомления предлагается VMware-образ, а приобрести можно не само ПО, а полностью сконфигурированный лезвийный сервер. По сути, это целая система коллективной разработки, построенная на основе поискового механизма. Весьма внушительно выглядит список клиентов, использующих продукт, – это и IBM, интегрировавшая технологии Krugle в developerWorks, и крупнейшее хранилище открытых проектов SourceForge.net, и Yahoo!, и многие другие громкие имена в ИТ-индустрии.

Обладая весьма развитыми возможностями, Krugle Enterprise Edition предлагает разнообразные сценарии применения – классический поиск кода с использованием мощного языка запросов; всех вызовов определенной функции; типичных ошибок в исходном коде (в том числе и угроз безопасности); в различных ветках проекта в системе контроля версий; выявление участков кода, клонированных или подходящих для повторного применения; уведомление об использовании запрещенных практик программирования; анализ влияния разных изменений на поведение проекта. Система производит поиск одновременно как по внутреннему хранилищу, так и по внешним открытым проектам, а также по документации, блогам, wiki-сайтам. Комментирование кода и возможность обмениваться ссылками на рабочее пространство значительно упрощают сотрудничество.

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

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

Google Code Search

Search Driven Development на практике
Google Code Search не поддерживает подсветку синтаксиса, но обладает самой большой базой проиндексированного кода и позволяет искать с помощью регулярных выражений

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

Учитывая практически неограниченные ресурсы Google, разработчики Code Search просто не могли ударить в грязь лицом и сумели быстро обойти ближайших конкурентов как по объемам проиндексированных файлов, так и по популярности своего сервиса. Большую роль, конечно, сыграла известность Google. К примеру, достаточно было лишь предоставить соответствующий API, и разработкой подключаемых модулей охотно занялись поставщики IDE, поэтому Code Search стал безоговорочным лидером в этом вопросе.

Что же касается технической стороны, то здесь Code Search выглядит не столь однозначно. Так, сервис от Google выигрывает за счет поддержки регулярных выражений, но явно уступает Krugle по возможностям и удобству интерфейса (скажем, в отличие от конкурентов Code Search до сих пор не поддерживает подсветку синтаксиса, ограничиваясь лишь выделением комментариев). Пожалуй, главный козырь в руках Google – это объем проиндексированного содержимого, который растет очень высокими темпами, пополняется за счет поддержки новых языков программирования (по этому показателю Code Search также лидирует) и новых способов извлечения данных из файлов (Code Search умеет работать с архивами, размещенными не только в хранилищах систем контроля версий, но и на любых FTP- и HTTP-серверах, а недавно было объявлено о возможности распознавании фрагментов кода непосредственно на веб-страницах, причем пользователи сами могут указывать ссылки для индексирования).

Пока неизвестно, планируется ли коммерческий вариант Google Code Search для закрытых проектов. Но учитывая несомненные успехи Krugle Enterprise Edition, существует большая вероятность, что Google не оставит эту рыночную нишу без своего внимания.

Заключение

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

Мы не упомянули о ряде аналогичных более мелких сервисов – их достаточно много, и некоторые обладают уникальными свойствами. Так, O'Reilly Code Search предоставляет возможность поиска среди примеров к книгам издательства O'Reilly (порядка 2,6 млн строк высококачественного кода из 700 книг), а Codeproject.com позволяет просматривать около 20 тыс. технических статей, содержащих примеры кода на .NET. Одни сервисы специализируются на отдельных языках программирования (например, CSourceSearch.net проиндексировал более 283 млн строк кода на C/C++), а другие (как JExamples.com и ByteMyCode.com) выступают скорее хранилищем примеров и фрагментов кода (snippets).

Несколько в стороне пока держится Microsoft, располагающая колоссальной базой MSDN с большим объемом технической документации и примеров кода, а также поддерживающая несколько специализированных сайтов для разработчиков, использующих технологии корпорации (ASP.NET, Codeplex.com и пр.). Но эта ситуация может быстро измениться.

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

Впрочем, нужно учитывать, что к OSS-сервисам имеются и кое-какие претензии. В частности, позволяющие хакерам совершенно просто обнаруживать известные уязвимости в популярных открытых проектах – им достаточно, скажем, выполнить поиск терминов «backdoor» или «hard-coded password» (в комментариях) либо характерного фрагмента кода. Но такая двойственность присуща многим творениям человека – их можно использовать во вред или на пользу, все зависит от того, в чьих руках они окажутся.

По-видимому, нынешняя динамика OSS-сегмента демонстрирует нам и наиболее вероятное направление дальнейшего развития рынка поисковых средств – многие эксперты сходятся на том, что в ряде областей универсальные сервисы будут постепенно вытесняться специализированными, так называемыми «вертикальными».

Сравнение характеристик основных OSS-сервисов
Поисковый сервис Google Code Search Krugle Koders
Число поддерживаемых языков 68 50 32
Количество проиндексированных строк кода > 5 млрд > 2,5 млрд > 766 млн
Поиск по отдельным лицензиям Да (18) Нет Да (28)
Выделение проектов в результатах Нет Да Да
Распознавание структуры исходных файлов и поиск с ее учетом Нет Да Частично
Использование регулярных выражений в запросах Да Нет Нет
Подсветка синтаксиса в исходных файлах Частично Да Да
Коммерческие версии Нет Krugle Enterprise Edition Koders Enterprise, Koders Professional

Сайт автора: koldovsky.com

+11
голос

Напечатать Отправить другу

Читайте также

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT