Инженерное программирование - это планирование и управление проектом, распределения всех видов ресурсов - исполнителей, программных и инструментальных средств и оценивание сроков, стоимости работ для успешного выполнения проекта. С проектом связано также выявление рисков и других обстоятельств, замедляющих изготовления версий (конфигурации) системы [11.1]-[11.6[11.7].
Материал данной темы состоит из трех разделов, связанных с проблемой управления проектом:
Согласно мировой статистики, не все реализуемые программные проекты завершаются успешно, 33% из них являются провальными по следующим причинам:
Основные положения управления проектом, задачи и методы которого отрабатывались на технических проектах (например, первый проект разработки лайнера для перевозки пассажиров из Европы в Америку), привели к созданию Генри Гантом диаграммной схемы для учета времени выполнения проекта. Эта схема прошла многолетнее развитие и на данный момент задачи управления проектом сформулированы следующим образом:
Управление проектом - это руководство работами команды исполнителей проекта для реализации проекта с использованием методов управления, планирования и контроля работ, управление рисками, эффективной организацией работы и коммуникационными потоками в команде исполнителей.
Основными составляющими любого проекта являются следующие: ресурсы (людские, финансовые и технические), время и стоимость выполнения проекта. Ответственность за координацию и реализацию этих трех составляющих несет менеджер проекта, а ответственность за идейную, функциональную сторону проекта несет главный программист.
Успешное выполнение проекта зависит от знания менеджером методов управления проекта и особенностей программного продукта:
Накопленный опыт в создании технических проектов был систематизирован (в Институте управления проектами в США) и разработано ядро знаний - РMBOK (Project Management Body of Knowledge [11.2]. В нем малыми проектами считаются проекты, содержащие 100 работ и 15 исполнителей, средними - 500 работ и 50 исполнителей и большими - 1000 работ и 100 исполнителей.
В ядре РМВОК определены основные аспекты разработки проектов:
К настоящему времени сформировалось несколько методов, эффективно применяемых в практике реализации программных проектов [11.5, 11.7]. Рассмотрим их.
Метод критического пути СРМ. Оснополагающий момент в создании этого метода - исследование возможности эффективного использования вычислительной машины Univac на фирме "Dupon" при планировании и создании планов-графиков больших комплексов работ по модернизации заводов этой фирмы. В результате был создан рациональный и простой метод (Уолкера-Келли) управления проектом с использованием ЭВМ, который был назван CPM (Critical Path Method) - метод критического пути.
Критический путь - наиболее полный путь работ в сетевом графике, которые лежат на этом пути. Именно продолжительность критического пути определяет наименьшую общую продолжительность работ в проекте в целом. Время выполнения всего проекта может быть сокращено за счет уменьшения времени выполнения задач, которые лежат на критическом пути. Соответственно любая задержка выполнения задач критического пути приводит к увеличению времени выполнения проекта. Эта концепция обеспечивает концентрацию внимания менеджера на критических работах. Однако основное преимущество метода критического пути - управление сроками выполнения задач, которые не лежат на критическом пути. Этот метод разрешает рассчитать возможные календарные графики выполнения комплекса работ на основе описанной логической структуры сети и оценок времени выполнения каждой работы [11.1-11.7].
Метод основан на графическом представлении задач (работ) и видов действий на проекте и задании ориентировочного времени их выполнения в виде графа (рис. 11.1), в вершинах которого располагаются работы и время выполнения каждой работы под вершинами либо на дугах графа.
Граф целесообразно строить тогда, когда работы и время их выполнения являются определенными. Критический путь в графе указывает максимальную продолжительность работ на графе (от начальной работы до последней).
При выполнении проекта выбираются и выполняются работы, которые не влияют на время выполнения других (независимых) работ проекта или на их продолжительность. Работы на критическом пути могут сокращаться за счет изменения времени выполнения.
Представленный в таком виде график работ называется сетевой диаграммой и служит для графического отображения работ проекта, их взаимосвязей, последовательностей и времени выполнения. В графе вершины отображают работы, а линии - взаимные связи между работами. Этот граф - наиболее распространенный способ представления сети на сегодняшний день.
Метод анализа и оценки PERT. Параллельно с разработкой CPM в военноморских силах США был создан (фирма "Буз, Аллен & Гамильтон") метод анализа и оценки программ PERT (Program Evaluation and Review Technique) для реализации проекта разработки ракетной системы "Polaris", объединяющей около 3800 подрядчиков с числом операций более 60 тыс. [11.6].
Применение метода PERT позволяло руководству данной программы точно знать, что нужно делать в каждый момент времени и какой исполнитель эту работу выполняет, а также определять вероятность своевременного завершения отдельных операций на процессах проекта. Руководство программой создания ракетной системы по методу PERT оказалось настолько успешным, что проект удалось завершить на два года раньше запланированного срока.
Метод PERT представляется сетевыми диаграммами с вершинами-событиями, а работа - в виде линии между двумя событиями, отображающими начало и конец работы. В целом расхождения между этими двумя методами сетевого представления графа работ - незначительные. Однако этот метод, в отличие от CMP, учитывает возникающие неопределенности во времени выполнения каждой операции.
Представление более сложных связей между работами для задания узлов графа в виде вершина-событие является более сложным, и потому этот метод реже используется на практике.
Возможное время выполнения операций оценивается с помощью трех оценок:
Далее возможное время вычисляется по формуле: \[ \frac{О + 4В + П}{6} \] .
Для уменьшения провалов в проекте используются и другие аналитические методы и усовершенствованные технологические системы разработки. Как показывает опыт, "продвинутые" технологии предлагают следующие постулаты успешного создания проекта [11.3]:
Текучесть кадров - проблема программной индустрии, так как перемещение или уход отдельного специалиста вынуждают других членов группы к трудоемкой работе, связанной с изучением незаконченных и не полностью документированных программ. Большой промежуток времени между уходом специалиста и нахождением замены может привести к краху отдельных частей проекта.
Контроль качества - необходимое условие создания качественного проекта. Им занимаются с самого начала разработки проекта, устанавливая процедуры проверки качества, используя при этом разработчиков, которые могут создавать высококачественный продукт.
Управление процессом разработки состоит в анализе проектирования элементов системы и критике результатов труда исполнителей, а не режима работы.