Компания по разработке программного обеспечения


Компа́ния по разрабо́тке програ́ммного обеспе́чения (англ. software company) — организация, которая занимается созданием, проектированием и обслуживанием программных приложений. Может быть как государственной, так и частной. Основные продукты компании-разработчика ПО: различные формы программного обеспечения, программных технологий, распространение и разработка программных продуктов[1]. Деятельность компаний-разработчиков ПО относится к индустрии программного обеспечения.

Типы

Основные типы компаний-разработчиков программного обеспечения:

Роли и сферы ответственности

Как правило, профессиональная компания по разработке программного обеспечения состоит как минимум из трёх основных специализированных подгрупп:

В крупных компаниях применяется более узкая специализация, добавляются такие роли:

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

Структура

Руководитель направления разработки в компании-разработчике ПО (англ. Head Of Development HOD)[2] — это ключевая фигура в IT-команде, которая отвечает за организацию процесса разработки, управление командой программистов и достижение бизнес-целей проекта. Этот специалист должен не только разбираться в технологиях, но и обладать лидерскими качествами, понимать бизнес-процессы и уметь выстраивать эффективную коммуникацию между всеми участниками проекта[3]. HOD отчитывается перед заинтересованными сторонами, руководит подгруппами напрямую или через менеджеров/руководителей в зависимости от размера организации. Как правило, наиболее эффективными являются команды численностью до 10 человек. В более крупных организациях обычно существуют две модели иерархии:

undefined

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

undefined

В матричной модели для каждой основной специализации выделены менеджеры/руководители, которые «арендуют» своих сотрудников для конкретных проектов, возглавляемых менеджерами по продукту/проекту, которые формально или неформально покупают людей и оплачивают их время. Это приводит к тому, что у каждого рядового сотрудника есть два начальника — менеджер по продукту/проекту и менеджер по специализированным «ресурсам». С одной стороны, это оптимизирует использование человеческих ресурсов, с другой — может привести к конфликтам по поводу того, какой менеджер имеет приоритет в структуре.

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

Методологии

Компании-разработчики программного обеспечения могут использовать различные методологии управления проектами:

Существуют также некоторые методологии, которые сочетают оба подхода, такие как спиральная модель, Rational Unified Process (RUP)[8] или MSF[9].

Жизненный цикл продукта

Независимо от используемой методологии, жизненный цикл продукта всегда состоит, как минимум, из трёх этапов:

  • проектирование, включая как деловую, так и техническую спецификацию;
  • кодирование — сама разработка;
  • тестирование — управление качеством.

В идеале каждый этап должен занимать 30 % от общего времени, а оставшиеся 10 % должны быть в резерве.

UML- диаграмма последовательности взаимодействия между основными ролями может выглядеть следующим образом:

undefined

На каждом этапе ключевую роль играет определённая группа, однако каждый тип роли должен быть задействован на протяжении всего процесса разработки:

  • Аналитики (англ. analyst), после завершения разработки бизнес-спецификации, управляют изменяющейся бизнес-ситуацией, минимизируя вероятность изменений с течением времени. Они также поддерживают как программистов, так и тестировщиков на протяжении всего процесса разработки, чтобы обеспечить соответствие конечного продукта бизнес-потребностям, обозначенным на начальном этапе. В идеале, этот процесс предполагает, что бизнес-аналитики играют ключевую роль на этапе окончательной поставки решения заказчику, поскольку они лучше всего подходят для обеспечения оптимального бизнес-уровня.
  • Программисты (англ. programmer) разрабатывают техническую спецификацию (англ. technical specification) на этапе проектирования, поэтому их и называют программистами/дизайнерами(англ. designer), а во время тестирования они исправляют ошибки (англ. bug).

Рабочие инструменты

Компании-разработчики программного обеспечения используют различные системы и процедуры, реализованные и действующие во всех подразделениях. К ним относятся:

Бизнес-аналитики

Программисты

Тестировщики

Менеджеры проектов/продуктов

Существуют также системы управления жизненным циклом приложений (ALM), которые объединяют некоторые из этих функций в один пакет и используются во всех группах. Они поставляются различными вендорами (Borland, ECM, Compuware и др.).

Аудит эффективности

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

undefined
  • среднее количество ошибок, допускаемых разработчиком за единицу времени или строк исходного кода;
  • количество ошибок, обнаруженных тестировщиком за цикл тестирования;
  • среднее количество циклов тестирования до достижения нулевого отказа (англ. Zero Bug Bounce — ZBB)[10];
  • среднее время цикла испытаний;
  • расчётное время выполнения задачи в сравнении с реальным временем выполнения задачи (точность планирования);
  • количество корректировок к базовой линии проекта[11].

Ряд организаций стремятся достичь оптимального уровня модели зрелости возможностей создания ПО (CMM), где «оптимальный» уровень не обязательно означает наивысший. Существуют и другие системы, такие как «SEMA»Университета Карнеги-Меллона или отдельные стандарты ISO.

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

В России

Согласно исследованию компании TeamStorm 2023 года[12], было выяснено, что общепринятых стандартов по сбору метрик, которые позволяют оценить эффективность процесса разработки ПО, в России нет. Причина — слишком разные подходы к менеджменту и разнообразие используемых методологий.

Был проведён опрос около трёх десятков респондентов, среди которых: компании-разработчики ПО, группы разработки в компаниях других отраслей: банки, страховые компании, ритейлеры и медтехнические организации.

Основные результаты исследования:

  • Стандарты по сбору и оценке метрик применяют только 30 % респондентов (в основном небольшие компании).
  • Несмотря на отсутствие общего стандарта по сбору метрик, есть показатели, которые рассматривают все без исключения участники опроса — это метрики тестирования и выполнения планов.
  • Регулярно оценивают метрики только 30 % компаний, остальные 70 % делают это только в тех случаях, когда становятся очевидными острые проблемы в разработке.
  • Метрика динамики рабочего процесса обязательна к применению во всех опрошенных компаниях, но только 20 % респондентов отслеживают полный жизненный цикл продукта, а подавляющее большинство, 80 %, не включают в метрику динамики рабочего процесса этапы, которые предшествуют разработке.

Примечания

Категории