Качество программного обеспечения — тема многогранная. Далеко не все и не всегда готовы за него платить. Не раз приходилось видеть тоскливые лица высокопрофессиональных программистов, когда на вопрос: «Ну как дела продвигаются?» — они отвечали: «Как обычно — все заплатки ставим на скорую руку, ничего нормально сделать не дают». Безусловно, уровень качества — дело хозяйское, но тем не менее интересно посмотреть, как ведут дела те, кому требуется действительно высокое качество.

Таким примером вполне может считаться проект разработки электронного расписания для железных дорог Швейцарии. Его ведет Qnamic Inc. — швейцарская компания, специализирующаяся на разработке ПО для логистических и транспортных компаний. Часть акций Qnamic принадлежит BLS, самой крупной частной железнодорожной компании Швейцарии.

Для швейцарцев поезда — основной вид транспорта. В среднем за год швейцарец проезжает на поезде около 2000 км. Поезда между крупными городами курсируют через каждые полчаса. Русских путешественников неизменно удивляет, что поезда отправляются и прибывают минута в минуту, точно так, как написано в расписании, причем постоянно.

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

Чтобы упростить работу машинистов и сделать ее эффективнее, а также повысить уровень безопасности на железной дороге, было принято ре­шение о замене печатного расписания и справочника на электронную систему (Driver Information System (RailOpt DIS), доступную в режиме реального времени. В качестве разработчика такого решения компанией Qnamic был выбран «Рексофт». Со стороны Qnamic проектом руководит Никола Брайкович, менеджер по продукту. Общую практику выбора подрядчиков в своей компании он описывает так. Принимаются во внимание техническая экспертиза, включая владение определенными языками программирования, знание технологий, основанных на открытых кодах, деловой опыт и географическая близость. Однако решающий фактор — рекомендации уважаемых знакомых, которые уже работали с потенциальным подрядчиком сами и могли оценить его производительность и навыки. Проект разработки электронного расписания RailOpt DIS идет с декабря 2007 г. Информация, относящаяся к железнодорожной инфраструктуре и расписанию, теперь собрана в единый электронный документ — расписание в цифровом формате.

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

Операторы железной дороги могут сверяться с электронной системой с помощью любого браузера через интранет компании, проверяя маршрут и изменения, произошедшие в них. Внедрение электронного расписание уменьшило количество бюрократических процедур и повысило гибкость управления железными дорогами. Если происходят незапланированные изменения в расписании или инфраструктуре (такие как, например, экстренные ремонтные работы), обновления могут быть сделаны и загружены в любое время через интранет. При наличии мобильной связи это возможно прямо из кабины локомотива. Чтобы обеспечить все это, было разработано распределенное приложение, состоящее из нескольких типов клиентов и двух серверов. Клиентские приложения отличаются по функциям и интерфейсу. Они предназначены для двух групп пользователей: для машинистов и для операторов. Серверные компоненты поддерживают всю бизнес-логику и могут быть интегрированы с внешними системами. Web-сервер позволяет получить доступ к содержащейся на нем информации с помощью любого интернет-браузера через интранет железнодорожной компании. Информация в ноутбуке машинистов обновляется ежедневно. Программа автоматически запускается на ноутбуке в кабине машиниста, показывая последние изменения в маршруте, расписании и инфраструктуре. Система имеет встроенные механизмы, позволяющие добавлять интерфейсы на других языках и наращивать функциональность с помощью дополнительных модулей. Проект базируется на технологии J2EE. В команде разработчиков в разные периоды было от восьми до 12 человек, включая менеджеров проекта, разработчиков, тестеров, специалистов по базам данных и консультантов.

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

Основными проблемами, прямо влияющими на качество ПО, Брайкович считает высокие требования к качеству на фоне частых изменений требований, недостаток или отсутствие документации, в том числе в случаях, когда за время разработки изменилась конфигурация «боевых» систем. Отдельный вопрос — знание системы тестировщиками. Их требуется обучать отдельно, так как продукт быстро меняется. За качество продукта отвечает вся цепочка участников проекта: «Рексофт», Qnamic и заказчик. Тестирование проходит у каждого. Процесс организован следующим образом. Код, написанный разработчиками, помещается в репозиторий Qnamic. «Рексофт» отвечает за конкретную «сборку» (build) и инсталляцию ее на проектной системе Qnamic. На этой системе проходит тестирование. Все возникающие сбои фиксируются в системе JIRA. Когда возникают проблемы, разработчики получают доступ к проектной системе Qnamic для анализа ситуации. Готовая «сборка» инсталлируется у клиента сотрудниками Qnamic.

Брайкович относит к факторам, влияющим на качество разработки осторожную эволюция технологий, спецификации на основе прототипов, тщательное описание функциональных тестов. Применяются также JUnit-тесты, анализ кода, приемочные тесты для каждой «сборки», инсталляции новых «сборок» вначале на тестовой системе клиента.

Традиционный итерационный подход с некоторыми практиками Agile, так характеризует работу Брайкович. Короткие итерации, постоянное интеграционное тестирование и тестирование отдельных блоков. На каждой стадии результаты анализируются, требования корректируются, и утверждается «дорожная карта» дальнейшего движения. Постоянно ведется мониторинг производительности и качества разработки, основанный на метриках. Среди метрик — часть кода, протестированная в целом, протестированная автоматически, протестированная поблочно. Применяются соглашения о кодировании, использовании шаблонов, о допустимой длине функций. В частности, стиль кодирования проверяется специальными плагинами Eclipse. Таким же образом тестируется общая производительность системы, портируемость, стабильность работы. В целом, считает Брайкович, очень многое зависит от тестирования: сколько потестируешь, такое качество и получишь. И все же самое главное, считает Брайкович, — это восприятие ПО пользователями.

Постоянно отслеживаются и разбираются проблемные случаи. Применяются средства автоматизации, в том числе при тестировании. Для контроля версий используется SVN, для проектного управления и общения MSProject, Excel, JIRA, Wiki, Net meetings, почта, Skype, телефонные переговоры, онлайновые совещания, и все это не исключает постоянных личных встреч и дискуссий.

В заключение Никола Брайкович сказал: «Я бы хотел выразить мою глубокую благодарность команде «Рексофта» за очень хорошую работу в процессе всего нашего сотрудничества. Надеюсь, что оно продолжится и дальше так же, как в эти последние четыре года». Надо думать, что такая работа, конечно, продолжится — был бы спрос на качество.