Как избежать архитектурных ошибок, что нового в модели CMMI и как ее “скрестить” с гибкими аgile-подходами, да и нужны ли они бизнесу? Каким образом под влиянием систем разработки меняются взгляды на процесс создания ПО даже у признанных гуру и как организовать agile-разработку на базе моделей? Каков путь Eclipse и зависит ли качество софта от стандартов кодирования? Как эффективно распараллелить код и избежать подводных камней C#? Что придет на смену браузерам и как обеспечить безопасность Windows-приложений? Как готовить ИТ-кадры в условиях нынешней экономики и сокращать проектные риски?

Такой “разношерстный” перечень вопросов предлагался участникам ежегодной конференции по программной инженерии Software Engineering Conference (Russia) ‘2008, состоявшейся в Москве 23--24 октября и собравшей около тысячи человек. На ней одновременно прошло три потока, свои доклады представили известные отечественные и зарубежные специалисты.

Айтишники против нефтяников

На открытии конференции выступил депутат Госдумы Илья Пономарев, председатель подкомитета по технологическому развитию комитета по информационной политике, информационным технологиям и связи. Он заявил, что ИТ-отрасль в кризисных условиях становится абсолютно незаменимой. При этом информационные технологии по-прежнему остаются в нашей стране на вторых ролях — например, из названия профильного министерства убрали слово “информатика”, нацелив эту организацию на работу со СМИ. Илья Пономарев напомнил также, что закон об отмене НДС на ПО хотя и принят, однако не выполняется в том виде, как задумывалось изначально. НДС по-прежнему взимается с коробочного софта, продаваемого в розницу в магазинах, так как, по “разъяснению” Минфина, перед началом его эксплуатации формально почему-то требуется именно письменное заключение лицензионного договора. Очередные планы перевода всех без исключения ИТ-компаний на упрощенный режим налогообложения также столкнулись с мощным сопротивлением Минфина и нефтяного лобби, отметил депутат.

Владимир Павлов, директор международного НИИ проблем программирования INTSPEI, сосредоточился на инновационных аспектах ИТ-отрасли. В кризисной ситуации интерес к веб-проектам, основанным на привлечении большого числа пользователей, будет падать, а вот фирмы -- разработчики классического софта осттанутся и разовьются. Однако им желательно ориентироваться на продуктовые и инновационные направления — обычные проекты по продаже человеко-часов все менее выгодны, а аутсорсинг умирает. Сегодня подчас выгоднее заказывать такие работы не в России, а во Вьетнаме или даже в США. В нынешних условиях компаниям придется учиться зарабатывать по-новому, учитывать нетехнологические факторы, чем отличаются практически все успешные ИТ-фирмы, а также активно патентовать полезные идеи; на Западе сложно найти известную ИТ-компанию без патентов. Для сравнения: в России за год выдается 28 тыс. патентов, а в США — 157 тыс.

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

Академик Виктор Иванников, директор ИСП РАН, проанализировал состояние и тенденции системного программирования. Объектно-ориентированный подход стабильно доминирует, активно развиваются средства автоматического тестирования, потому что этот проектный этап требует существенных ресурсов — так, в Microsoft тестеров в два раза больше, чем разработчиков. Тесно связаны с этим направлением технологии верификации исходных текстов. Однако заметный эффект даст лишь комплексное использование подобных средств.

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

В параллельном программировании сложностей пока больше, чем успехов. Виктор Иванников напомнил о проекте высокопроизводительного Фортрана (High Performance Fortran) и о других схожих технологиях, которые оказались малоуспешными. Вручную же распараллеливать код трудоемко, этот процесс сродни искусству — как, впрочем, и оптимизация работы современных СУБД, включающих сотни настроек. Соответствующего специалиста найти проблематично, хотя выигрыш от его усилий может поднять производительность системы на порядки. Многих проблем удалось бы избежать при наличии хороших ИТ-стандартов, однако эти последние сами записаны нестандартно и допускают неоднозначности. Их надо формализовать и подготовить инструменты для верификации. В общем, ИТ-отрасль развивается, но при этом на старые нерешенные проблемы накладываются новые.

К одному из перспективных направлений академик отнес обеспечение работы высококачественного ПО в нестабильной среде (например, в операционных системах со множеством “заплат”). На эту тему, кстати, прозвучал доклад о Microsoft Security Development Lifecycle -- процессе создания безопасного ПО, защищенного от внешнего взлома, который давно применяется внутри самой корпорации. Виктор Иванников особо отметил, что Microsoft поддерживает изучение Linux в университетах, а при наборе программистов нередко отдает предпочтение тем, кто хорошо знает эту ОС. В возглавляемом докладчиком институте была разработана утилита Linux Application Checker , вошедшая в последнюю спецификацию совместимости Linux-дистрибутивов LSB 4. Она анализирует двоичный код приложения, выявляя все требуемые ему библиотеки, и формирует отчет по переносимости приложения между различными дистрибутивами.

Гибкость спасет ИТ-мир?

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

Стив Меллор, автор ряда книг по проектированию и анализу программных систем, участвующий в разработке стандарта UML и спецификаций для архитектуры, управляемой моделью (MDA), поддерживаемой международной группой по объектным технологиям OMG, объяснил принципы подхода Agile MDA (гибкая MDA). Хотя современные технологии MDA весьма сложны, вполне можно организовать рабочий процесс так, чтобы уже на первых итерациях сформировалась исполняемая модель (ее не следует отделять от кода как особую сущность), цикл перехода от модели к коду и обратно не занимал бы много времени, а тестировщики могли быстро подключиться к проверке как кода, так и модели. Фактически на модель переносятся все принципы процессного подхода к разработке, применяемые к исполнимому коду.

Многие авторы в своих докладах дискутировали на тему agile-подходов и дополняли друг друга. Так, Сергей Архипенков из компании ТЕКАМА, организатора конференции, отметил, что не только производительность программистов может различаться в десятки раз, но и один и тот же программист может работать на порядок эффективнее, если ему обеспечить подходящие условия, а не заставлять плодить документацию в угоду псевдо-методологии. Иван Гуменюк (Санкт-Петербургский центр разработок ЕМС), много лет трудившийся в компании, которая первой в России была сертифицирована на 5-й уровень CMM — международной модели зрелости процессов разработки ПО, считает, что при существовании жестких проектных рамок декларирование agile-походов подчас приносит больше проблем. CMM неплохо подходит для сложных многокомпонентных проектов, в которых новые версии формируются каждые 9--12 месяцев и задействовано много разработчиков — в таком случае документация становится основой проекта.

Доклад Андрея Сатарина из компании “Заказные ИнформСистемы” был посвящен практике непрерывной интеграции (НИ) из экстремального программирования. В нем разбиралась связь этого подхода с другими методиками: имеет ли НИ самостоятельную ценность или играет своеобразную роль топора в каше из других инженерных подходов, которые и дают основную выгоду? Оказывается, “pure” НИ позволяет решить известный конфликт между разработчиками и тестировщиками и эффективен в борьбе с печально известной субкультурой, выражающейся словами программистов “этот код работает на моей машине”: в небольших командах держать выделенного специалиста по регулярному развертыванию системы для тестирования невыгодно, единые регламенты для разработчиков сложно поддерживать в организационном плане, а если они излишне жесткие, то начинают создавать проблемы для программистов. Решение — автоматизация сборки, развертывания и обратной связи в виде простого и повторяемого процесса.

Поток Intel

Ряд докладов на SEC(R) ‘2008 представила и корпорация Intel. Модель Intel Concurrent Collections позволяет распараллеливать программный код, причем она подразумевает разделение усилий кодировщика и специалиста в конкретной предметной области, однако требует понимания принципов создания программ, а также определённых усилий по подготовке графов, описывающих параллельные потоки, и их переводу в текстовое представление. Возможно, хорошим подспорьем окажется набор модулей Intel Parallel Studio, подключаемых к среде разработки Microsoft Visual Studio. Как рассказал Вей Ли, директор Intel Emerging Products Lab, с помощью этих модулей можно создавать, отлаживать и оптимизировать многопоточные приложения для многоядерных процессоров.

Для подобных систем актуальна проблема синхронного доступа к общей памяти. Intel предложила механизм для разработчиков (команды компилятору), позволяющий объединять набор операций с памятью в единую транзакцию, которую в случае возникновения коллизий можно “откатить” обратно. Этот механизм реализован в особой версии компилятора, но требует генерации немалых объемов дополнительного кода.

Тренды и мегатренды

В каком направлении будет развиваться данная отрасль в ближайшие годы? Эта тема обсуждалась несколькими месяцами ранее, на 30-й международной конференции по программной инженерии, прошедшей в мае в Лейпциге (Германия). Ведущие эксперты выделили три проблемных направления, серьезно увеличивающих трудоемкость разработки ПО и требующих пристального внимания:

  • эффективность компонентного подхода снижается при использовании множества слабо совместимых компонентов, функциональность которых к тому же бывает нужна лишь частично, а вот требования к аппаратным ресурсам сильно возрастают;
  • процесс разработки ПО становится все более фрагментированным, увеличивается число технологий, платформ, методологий, “стандартов”, а в реестре-энциклопедии языков программирования (hopl.murdoch.edu.au) зарегистрировано уже 8512 языков;
  • по закону американского конструктора суперкомпьютеров Амдала (аналог закона Мура) даже при бесконечном количестве процессоров “узким горлышком” производительности остается доля последовательно выполняемых операций. Сотни тысяч процессоров в кластере дают относительно слабый выигрыш в классических задачах, плохо распараллеливаемых привычными методами.

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

В докладе исследовательского подразделения IBM на конференции были отмечены следующие мегатренды в программной инженерии: технологические тенденции будут сливаться с социальными, а “облачные” вычисления и Web 2.0 послужат стимулом к развитию относительно несложных средств разработки для конечного пользователя в виде открытых и доступных на любых устройствах сценарных технологий (сегодня это PHP, JavaScript и т. п.). Продолжится развитие всего спектра многоядерных технологий, а к программированию все активнее будут привлекаться люди, не говорящие по-английски, и жители бедных стран, где получат распространение дешевые компьютеры. Займутся программированием и немало женщин.