Введение в экономику программной инженерии
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция 1. Введение в экономику программной инженерии
Для небольших относительно простых проектов программных комплексов во многих случаях достаточно достоверными могут быть интуитивные
оценки требуемых экономических ресурсов, выполняемые опытными руководителями, реализовавшими несколько аналогичных проектов. Такие оценки
размеров, сложности, трудоемкости и сроков создания конкретных программных проектов, как правило, отличаются существенными недостатками и ошибками вследствие того, что:
человек, в основном, оптимистичен, многим руководителям проект комплекса программ представляется меньше по размеру, более простым и
дешевым, что ведет к первоначальным недооценкам его сложности и к
конфликтным ситуациям между заказчиками и разработчиками;
человек обычно не полностью использует предыдущий опыт о сложности функций аналогичных проектов и особенно о большом размере
вспомогательных компонентов комплексов программ, которые должны
быть разработаны;
отдельные специалисты, как правило, не знакомы со всем размером проекта и потребностями пользователей, что приводит к недооценке второстепенных функций и программных компонентов, а также накопленных
знаний при оценивании размера и сложности проекта.
Следствием этого являются большие ошибки при планировании экономических характеристик - сроков, трудоемкости и стоимости создания программных продуктов. В большинстве случаев это приводит к значительному
запаздыванию завершения разработок и превышению предполагавшихся затрат ресурсов. Вследствие пренебрежения тщательным экономическим обоснованием до 15% проектов сложных программных комплексов не доходит до
завершения, а почти половина проектов не укладывается в выделенные ресурсы, бюджет и сроки, не обеспечивает требуемые характеристики качества.
Типичны ситуации, когда отставание сроков внедрения больших промышленных систем управления и обработки информации полностью зависит от неготовности для них программных продуктов.
Массовое создание сложных и дорогих программных продуктов промышленными методами и большими коллективами специалистов (в основном, для военных систем) вызвало необходимость их достоверного экономического прогнозирования и анализа, четкой организации производства, планирования работ по затратам, этапам и срокам реализации. Для решения этих
задач еще в 80-е годы начала формироваться новая область знания и инженерная дисциплина - экономика создания сложных программных продуктов. Необходимо было освоить специалистам анализ и оценивание конкретных факторов, влияющих на экономические характеристики проектов программных продуктов вследствие реально существующих и потенциально воз1
можных воздействий и ограничений ресурсов проектов комплексов программ.
Это привело к появлению новой области экономической науки и практики экономики проектирования, производства и жизненного цикла сложных
программных продуктов как части экономики в промышленности и вычислительной технике в составе общей экономики некоторых предприятий. Ее
основной задачей являлись анализ, прогнозирование, эффективное управление, распределение ресурсов и экономное использование необходимых быстро возрастающих капиталовложений в производство сложных комплексов
программ высокого качества и различного назначения.
Развитие этой области экономики связано с большими профессиональными и психологическими трудностями, типичными для новых разделов
современной науки и техники, появляющимися на стыке различных областей
методов и знаний. В данном случае особенности состоят в том, что менеджеры и разработчики сложных комплексов программ, как правило, не знают
даже основ экономики промышленного производства сложной технической
продукции, а экономисты не представляют сущность и свойства объектов
разработки - программных продуктов, а также особенностей технологических
процессов их производства и применения. Широкий спектр технических характеристик таких объектов, количественных и качественных факторов, которые с различных сторон характеризуют содержание компонентов и комплексов программ, и невысокая достоверность оценки их значений определяют
значительную трудность при попытке описать и измерить свойства и качество
создаваемых или используемых сложных программных продуктов для их
экономической оценки и прогнозирования характеристик.
Приступая к созданию сложных технических проектов, заказчики и исполнители, прежде всего, должны понять целесообразна ли их разработка и
оценить возможную эффективность применения готового продукта, оправдаются ли затраты на его производство и использование. Поэтому такие технические проекты традиционно начинаются с анализа и экономического обоснования предстоящего производства и применения предполагаемого продукта или системы. Заказчику и возможным потребителям результатов проекта
необходимо оценивать реальную потребность в его создании и конкурентоспособность, а потенциальному разработчику предполагаемого продукта проводить оценку реализуемости проекта при условиях и ресурсах, предлагаемых
заказчиком. Однако часто разработчики не в состоянии привести заказчику
или руководителю проекта достаточно обоснованные доказательства нереальности выполнения выдвигаемых требований к продукту при предложенных ограниченных значениях бюджета и сроков. Руководители конкретных
проектов обычно не в состоянии достаточно обоснованно определять, сколько
времени и затрат труда потребуется на каждый этап проекта системы, и не
могут оценить, насколько успешно выполняется план производства. Это, как
2
правило, означает, что проект системы с самого начала выходит из-под экономического контроля и возможна катастрофа с реализацией и завершением
проекта всей системы в требуемый срок с заданным бюджетом и качеством.
Возможности и широта применения экономики при производстве сложных комплексов программ существенно зависят от современных методологий и стилей организации работы коллективов специалистов – разработчиков. Эти методологии различаются сферами применения, методами достижения высокого качества комплексов программ, психологическими характеристиками участвующих специалистов и организацией их деятельности в реальном времени. Различие целей и стилей при создании комплексов программ
привели к формированию стратегий, позволяющих получать сложные программные продукты двух классов, характеризующиеся высоким качеством
при применении:
свободного (открытого) программного обеспечения (СПО), ориентированного на участие большого числа практически независимых специалистов, различных по квалификации, дислокации и ответственности за
результаты своей добровольной деятельности;
закрытых текстов и технологических документов программ, создаваемых профессиональными коллективами высокой квалификации под
централизованным управлением для конкретных заказчиков определенных систем управления и обработки информации, производство, распространение и модификация которых регламентируется и контролируется
заказчиком и поставщиком.
Первый класс сложных программных комплексов обычно первоначально создается группами энтузиастов в университетах, корпорациях или сообществах разработчиков и пользователей программ и распространяется бесплатно. Функции таких крупных комплексов программ ориентированы на
решение новых, оригинальных задач массового использования и конкурентоспособных на рынке программных продуктов, куда со временем они поступают. Их разработка, изменение и совершенствование не регламентируется в
реальном времени и реализуется по инициативе пользователей или разработчиков без определенных контролируемых планов и сроков. По мере безвозмездного совершенствования функций и качества программного продукта
различными заинтересованными, неуправляемыми пользователями – разработчиками, расширяется сфера его применения, повышается качество, надежность и безопасность использования, что приводит к их активному проникновению на рынок, в бизнес и системы образования. Вследствие этого слабо документированный, непрерывно, спонтанно изменяющийся программный продукт и его производство трудно оценивать и сопровождать экономически.
Высокие тиражи распространения, применения и гибкая спонтанная модификация программных средств возможны благодаря доступности для многих
3
пользователей открытых исходных текстов программ на стандартном языке
программирования, а также унифицированной технологии процессов производства компонентов и сопровождения таких комплексов программ.
Второй класс программных продуктов обычно имеет конкретного заказчика, относительно узкую сферу применения, предназначен для конкретных систем или пользователей, жестко регламентирован технологией производства, модификаций и документирования, что сближает их создание с
обычным промышленным производством сложных технических изделий. Оно
управляется планами и ограниченными сроками поставки готовых испытанных продуктов заказчику и пользователям, которые допускается эпизодически изменять только с санкции заказчика. Современные комплексы программ
для систем управления и обработки информации в реальном времени активно
применяются в сложных критических и ответственных системах динамического управления объектами, в высокоточном технологическом производстве,
в авиации, в управлении космическими аппаратами, атомными электростанциями и оборонной техникой. Такие изделия являются одними из наиболее
сложных интеллектуальных систем высокого качества, создаваемых человеком, для которых доступна и необходима сертификация не только производственных процессов, но и их результатов – программных продуктов.
Важной особенностью таких промышленных программных продуктов
является их отчуждаемость от первичных производителей. В отличие от
программ для решения многих научных и инженерных задач, которые не
оформляются документацией, делающей их доступными для использования
различными специалистами, эти комплексы программ имеют все основные
особенности промышленных изделий и представляют собой оформленный
программный продукт. После завершения их производства и испытаний они
отчуждаются от коллектива их создателей и могут применяться, эксплуатироваться, эпизодически модернизироваться и корректироваться зачастую не теми специалистами, которые первоначально разработали. Это обусловливает
необходимость производить такие комплексы программ с соблюдением определенных стандартов, правил структурного построения, а также оформлять на
них достаточно полную технологическую документацию, позволяющую применять, сопровождать и развивать программные продукты различными квалифицированными специалистами под управлением заказчиков и/или поставщиков.
Применение сложных программных комплексов как производственной
продукции существенно повысило актуальность экономического обоснования, необходимость прогнозирования и изучения процессов производства и
их характеристик качества. Основной целью производства многих программных продуктов является повышение эффективности промышленных систем
обработки информации и/или управления объектами и административными
4
системами, в которых применяются сложные комплексы программ. Такими
системами могут быть средства автоматизированного управления в авиации,
системами вооружения, электростанциями и энергосистемами, системами административного управления, автоматизации проектирования и обучения.
В ряде случаев программные продукты невозможно или очень трудно
характеризовать непосредственной экономической эффективностью применения в зависимости от затрат ресурсов, и целесообразно из анализа исключать характеристики эффективности программных продуктов и сопутствующие ей функциональные критерии качества. В результате исследование
экономики создания комплексов программ приходится проводить по величине затрат ресурсов на производство программного продукта в предположении, что обеспечена реализация заданных функциональных характеристик
их применения с требуемым качеством. В жизненном цикле сложной промышленной продукции при анализе экономических характеристик традиционно выделяются три крупных процесса:
проектирование продукта, когда определяются его функции, архитектура, требования к качеству, техническим и экономическим характеристикам, анализируется и подготавливается решение о целесообразности
его создания и технологии производства;
производство продукта, при котором реализуется подготовленный
проект, изготавливается, испытывается и поставляется заказчику и/или
пользователям для применения готовый продукт, соответствующий требованиям и документации;
эксплуатация и применение продукта пользователями или в системе,
когда реализуются цели создания продукта в соответствие с требуемыми
его функциями и документацией.
При планировании производства сложных программных продуктов часто имеется определенный заказчик-потребитель, который способен задать
основные цели, требуемые характеристики качества и обеспечить ресурсы для
реализации проекта. Однако иногда инициатором разработки комплекса программ является разработчик-поставщик, который самостоятельно принимает
все решения о его производстве за счет собственных ресурсов и предполагает
возместить затраты путем реализации программного продукта на рынке. Таким образом, при экономическом анализе и обосновании проектов сложных комплексов программ возможны два сценария:
создание и весь жизненный цикл комплексов программ ориентируется
на массовое тиражирование и распространение их на рынке среди заранее не известных пользователей в различных сферах и внешней среде
применения; при этом отсутствует конкретный внешний потребитель - заказчик, который определяет и диктует основные требования к
программному продукту, выделяет ресурсы и финансирует проект;
5
производство программного продукта предполагается с определенным,
относительно небольшим тиражом, с известной областью и внешней
средой применения для конкретного потребителя - заказчика, который определяет требования к функциям, характеристикам качества, финансирует и выделяет ресурсы.
Эти сценарии принципиально различаются методами экономического
анализа и обоснования их экономических характеристик. Первый сценарий
базируется на маркетинговых исследованиях рынка программных продуктов
и на стремлении поставщика занять на рынке достаточно выгодное место. Для
этого ему необходимо определить наличие на рынке всей гаммы близких по
назначению и функциям продуктов, оценить их эффективность, стоимость и
применяемость, а также возможную конкурентоспособность предполагаемого к разработке программного продукта для потенциальных пользователей
и их возможное число. Следует оценивать рентабельность затрат на создание
нового продукта, выявлять факторы, функциональные, экономические и конструктивные характеристики качества, которые способны привлечь достаточное число покупателей и оправдать затраты на предстоящую разработку. Для
этого разработчикам необходимо проводить оценки возможной конкурентоспособности предполагаемой продукции на рынке по величине соотношения:
возможной эффективности (ценности, достоинств) последующего
применения программного продукта и способности удовлетворить потребности многих пользователей при его приобретении и использовании;
к стоимости (цене, затратам), которую готовы заплатить пользователи
при приобретении и эксплуатации данного программного продукта.
При выборе продукции покупатель обычно стремится максимизировать это соотношение как за счет поиска продуктов с наибольшими эффективностью и качеством, так и за счет минимальной стоимости покупаемого
продукта.
В этом сценарии при организации производства вся ответственность за
цели, функции и показатели качества продукта ложится на его руководителей, и особую роль при экономических оценках должны играть специалисты
по маркетинговому анализу продукта, предполагаемого для распространения
на рынке. Они должны оценивать конъюнктуру и риск успешного продвижения создаваемого продукта на рынок, сроки и график выполнения этапов
жизненного цикла, достаточность ресурсов для реализации проекта и экономическую эффективность длительного развития, модификаций и распространения версий программного продукта. Для этого им нужны, в частности,
оценки собственных затрат, экономических характеристик производства и
модификации продукта.
6
Второй сценарий предполагает наличие определенного заказчика - потребителя конкретного программного продукта, который должен соответствовать его формализованным и утвержденным техническим и экономическим требованиям. Он выбирает конкурентоспособного поставщика - производителя продукта, которого оценивает на возможность реализовать проект с
необходимым качеством с учетом ограничения требуемых бюджета, сроков и
других ресурсов. При этом результаты разработки не обязательно подлежат
широкому тиражированию, могут не поступать на рынок, маркетинговые исследования для таких проектов являются второстепенными и предварительно
могут не проводиться.
Однако для заказчика и разработчиков при заключении контракта необходимо достаточно достоверное прогнозирование требований к программному продукту и экономическое обоснование необходимых ресурсов по трудоемкости, стоимости, срокам реализации и другим показателям. Заказчик заинтересован в получении программного продукта высокого качества при минимальных затратах, а разработчик желает получить максимальную оплату за
созданный продукт и достаточные ресурсы на его производство. Противоположность интересов поставщика и потребителя при оценке экономических
характеристик, стоимости и других ресурсов проекта требует поиска компромисса, при котором производитель программного продукта не продешевит, а заказчик не переплатит за конкретные выполненные работы и весь проект. Поэтому оба партнера заинтересованы в достоверном экономическом
прогнозировании и обосновании проектирования и производства программного продукта. Для этого должен быть подготовлен согласованный между заказчиком и разработчиком договор, в котором определены цели и задачи
проекта, требуемые характеристики продукта, доступные экономические и другие ресурсы для его реализации. Эти данные должны быть предварительно сбалансированы и обеспечивать реализацию целей проекта при выделенных ресурсах с минимальным допустимым риском. Однако масштабы
целей и функций сложных программных проектов имеют устойчивую тенденцию изменяться и увеличиваться, первоначально выделенные ресурсы могут не обеспечивать их реализацию. Большую часть рисков и негативных последствий производства можно избежать, используя существующие методы
оценивания и прогнозирования производственных затрат, а также управления
проектами программных продуктов для их успешного завершения.
В ряде случаев эффективность систем новой техники и программных
продуктов в процессе производства приходится прогнозировать в условиях
неопределенности целей, различных факторов и характеристик заказываемых
систем и продуктов. Обычно бывают недостаточно известны перспективы
внедрения и применения объектов производства – новых программных продуктов. Трудно формализуемыми и оцениваемыми являются размеры (мас7
штабы) и структура систем, взаимодействие основных подсистем, цели, функции, качество и критерии оценки эффективности их функционирования. Значительные неопределенности содержатся также в экономических характеристиках производственных технологий, а также инструментальных средств автоматизации проектирования и изготовления комплексов программ. Положение усугубляется трудностью поэтапного определения качества компонентов
и его прогнозирования в процессе разработки, что непосредственно отражается на экономических характеристиках реализации комплекса программ в целом.
Методы и достоверность экономического анализа производства сложных программных продуктов можно разделить на две части, существенно
различающиеся особенностями производственных процессов, экономическими характеристиками и влияющими на них факторами. В первой части жизненного цикла производятся: системный анализ, проектирование, разработка,
тестирование и испытания первой (базовой) версии программного продукта.
Номенклатура работ, их трудоемкость, длительность и другие характеристики
на этих этапах производства существенно зависят от свойств создаваемого
продукта, требуемых показателей качества, внешней и технологической среды разработки. При этом первостепенное значение имеют размеры, архитектура, сложность функций, количество, состав и взаимосвязи компонентов
комплекса программ, которые являются базой для оценивания экономических
характеристик производства конкретного продукта. Изучение подобных зависимостей для различных прототипов программных продуктов позволяет достаточно достоверно прогнозировать состав и основные экономические характеристики производства, планы и графики работ для вновь создаваемых продуктов.
Вторая часть жизненного цикла, отражающая применение, сопровождение и модификацию версий программного продукта, связана не только с
экономическими характеристиками продукта и среды производства, они зависят от величин и интенсивности изменений версий, сложности и стоимости
каждой модификации программного продукта. Версии сложных программных
продуктов обычно характеризуются длительной непрерывной эксплуатацией,
суммарная продолжительность которой может значительно превышать длительность производства первой версии. После того как программный продукт
создан и испытан в ряде случаев он становится недоступным для разработчиков и применяется неизменным до внедрения очередной версии после модернизации системы. Жизненный цикл таких комплексов программ может составлять много лет, в течение которых необходимо обеспечивать возможность
их изменения. В процессе сопровождения программы могут подвергаться
эпизодическим корректировкам, которые должны регистрироваться, накапливаться и передаваться пользователям экземпляров программного продукта.
8
Необходимо обеспечивать пользователям адекватность технологической документации каждой версии эксплуатируемого продукта в любой момент времени.
Можно выделить три группы наиболее актуальных задач для их эффективного внедрения в современную практику программной инженерии:
анализ современной экономики программных продуктов; создание и организация экономически эффективного их проектирования и производства; подготовка и обучение специалистов для экономически эффективного проектирования и производства программных продуктов.
Задачи анализа современной экономики проектирования и производства программных продуктов:
исследование методов оценивания и характеристики экономической
деятельности предприятий при проектировании и производстве сложных
программных продуктов (прибыль, доход, рентабельность, производительность труда) в различных отраслях промышленности;
определение, анализ и классификация экономических характеристик –
трудоемкости, стоимости, длительности производства, и реальных факторов, влияющих на экономику проектирования и производства программных продуктов;
измерение, сбор и обобщение реальных экономических характеристик
процессов проектирования и производства сложных программных продуктов на предприятиях и в отраслях промышленности;
анализ экономики, планирования и достоверности прогнозирования экономических характеристик реальных проектов программных продуктов;
разработка методов оценивания и выбора, квалифицированных коллективов специалистов-подрядчиков, способных создавать сложные программные продукты и базы данных требуемого качества в разумные
сроки с учетом ограничений на используемые ресурсы.
Задачи создания и организации экономически эффективного проектирования и производства программных продуктов:
создание эффективной технологии и экономики деятельности предприятия, обеспечивающей рациональное сочетание целей, стратегий и использования доступных ресурсов, необходимых для достижения целей
производства программного продукта высокого качества;
создание эффективных методов экономического и технического формирования требований к функциям, характеристикам и качеству программного продукта, с учетом экономических и ресурсных ограничений проектирования и производства на предприятии;
создание методов экономического обоснования и прогнозирования разработки комплексной системы качества, планов и программы испытаний, методологии и инструментальных средств, обеспечивающих тре9
буемые качество, надежность и безопасность функционирования программного продукта;
обеспечение экономических характеристик производства, предсказуемого и управляемого уровня достигаемого качества программного продукта, непосредственно зависящего от инструментария производства, систем качества и эффективности технологий, используемых на этапах
жизненного цикла;
обеспечение и удостоверение требуемых функций и качества готового
программного продукта с полным комплектом адекватной эксплуатационной и технологической документации в процессе тестирования и испытаний.
Задачи подготовки и обучения специалистов для экономически эффективного проектирования и производства программных продуктов:
необходимо обучение и подготовка руководителей и специалистов по
экономике производства сложных программных продуктов, освоение
современных методов экономического анализа, оценивания и прогнозирования процессов и необходимых ресурсов при производстве комплексов программ;
для обеспечения экономически эффективного производства программных продуктов, необходима подготовка и обучение «команд» системных
аналитиков, архитекторов и менеджеров проектов, специалистов по
комплексированию, верификации, тестированию и сертификации сложных программных продуктов, по испытаниям и обеспечению их качества;
следует выделять и обучать специалистов, ответственных за анализ,
оценивание и прогнозирование экономических характеристик производства, за соблюдение экономически эффективной промышленной технологии создания и совершенствования программных продуктов;
руководителям и специалистам необходимо освоить современный комплекс экономически эффективных технологических задач, методов и
стандартов промышленного создания и развития сложных, тиражируемых программных комплексов и баз данных требуемого высокого качества;
руководители и специалисты для обеспечения высоких экономических
характеристик при производстве сложных комплексов программ должны
освоить типовые, стандартные решения и использование апробированных заготовок программных компонентов, не требующих при их применении высококвалифицированного творческого труда.
10
Основы экономики индустриального производства заказных программных
продуктов
Задачи анализа современной экономики программной инженерии
Накоплен и опубликован значительный объем полезных методических и статистических данных об экономических характеристиках создания программных комплексов
разных классов. Наиболее полные исследования, обобщения и экономические характеристики реализованных проектов отражены в двух книгах Б. Боэма. В учебнике автором
приведены также некоторые результаты собственных оригинальных исследований. Анализ этих данных совместно с результатами других авторов позволил заложить основы
экономики производства сложных заказных программных продуктов, методик прогнозирования необходимых ресурсов для разработки комплексов программ, их достоверного
экономического планирования и формирования производственных процессов. Новизна и
отсутствие твердо установленной терминологии в данной области привели к необходимости интерпретации некоторых использованных характеристик и терминов.
Сложные комплексы программ являются компонентами систем, реализующими
обычно их основные, функциональные свойства и создающими предпосылки для последующего развития и изменений их жизненного цикла (ЖЦ). Производство программных
продуктов, методология управления и изменения программ зависит от многих факторов,
от экономических ресурсов, квалификации специалистов, технических, организационных
и договорных требований и сложности проектов. При экономическом анализе жизненного цикла сложных программных комплексов целесообразно выделять два крупных этапа:
анализ факторов, влияющих на экономику производства конкретных программных
продуктов, и прогнозирование их экономических характеристик. Множество текущих
состояний и модификаций компонентов в жизненном цикле сложных комплексов программ менеджерам необходимо упорядочивать, контролировать их развитие и реализацию участниками проекта. Организованное, контролируемое и методичное отслеживание динамики проектирования и производства, а также изменений в жизненном цикле
программ и данных, их разработка при строгом учете и контроле ресурсов является базовой проблемой эффективного, поступательного развития каждого крупного комплекса программ и системы методами программной инженерии.
Основным способом совершенствования производства программных продуктов и
повышения квалификации специалистов в этой области многие менеджеры считают накопление и распространение опыта наиболее успешных разработчиков, который выражается в быстром продвижении проектов. Однако, повышая квалификацию только отдельных разработчиков, невозможно решать современные проблемы производства сложных
программных продуктов. Производительность индивидуального труда наиболее квалифицированных и продуктивных разработчиков может во много раз превышать производительность менее способных, в то время как численность последних в такое же число
раз превышает численность первых. Кроме того, опыт наиболее продуктивных специалистов не может быть применен коллективами специалистов в промышленных
масштабах, поскольку ориентирован на людей с исключительными способностями.
Для удовлетворения требований к производству сложных программных продуктов
должны быть исключены надежды на расточительное использование таланта уникальных, высококвалифицированных разработчиков, в том числе для выполнения рутинных
повторяющихся процессов, чтобы они могли больше времени тратить на постановку,
формализацию и организацию производства коллективами сложных программ.
11
Реализация крупных программных проектов встречается со сложными проблемами, тем не менее быстро возрастает как общий объем производства программных продуктов, так и сложность отдельных проектов. Однако многие предприятия, занимающиеся производством программных продуктов, не уделяют должного внимания экономике и
эффективному применению современных методов организации, автоматизации и обеспечения всего жизненного цикла программных комплексов. Эти проблемы и их компоненты в разной степени могут отражаться на экономических характеристиках, качестве и
конкурентоспособности программных продуктов, на них целесообразно обращать внимание и по возможности решать заказчикам, руководителям и разработчикам сложных
программных проектов.
Начиная разработку крупного проекта, руководители, прежде всего, должны решить
задачу целесообразно ли его создание и оценить, какова будет возможная эффективность применения готового продукта, оправдаются ли затраты на разработку и использование.
Поэтому такие проекты традиционно должны начинаться с анализа и экономического обоснования предстоящего жизненного цикла и эффективности использования предполагаемого программного продукта — рис. 1.1. Экономическое обоснование проектов
на начальном этапе их производства должно содержать оценки экономических рисков
реализации поставленных целей, обеспечивать возможность планирования и выполнения
жизненного цикла продукта или указывать на недопустимо высокий риск его реализации
и целесообразность прекращения проектирования и производства.
12
13
Задача экономического анализа проектов в программной инженерии заключается, прежде всего, в разработке, освоении и использовании методов для оценивания
экономических характеристик производства сложных программных продуктов.
Цель экономического обоснования проектов комплексов программ состоит в
помощи их руководителям определять:
• целесообразно ли проводить или продолжать работы над конкретным проектом
программного продукта для детализации требований, функций и экономических характеристик или следует его прекратить вследствие недостаточных ресурсов специалистов,
времени или возможной трудоемкости производства;
• при наличии достаточных ресурсов следует ли провести маркетинговые исследования для определения рентабельности полного выполнения проекта и производства
программного продукта для поставки заказчику или на рынок;
• достаточно ли полно и корректно формализованы требования к проекту, на основе
которых проводились оценки экономических характеристик, или их следует откорректировать и выполнить повторный анализ с уточненными исходными данными;
• есть ли возможность применить готовые, повторно используемые компоненты, в
каком относительном количестве от всего комплекса программ и рентабельно ли их применять в конкретном проекте или весь проект целесообразно разрабатывать как полностью новый.
За последние несколько лет ряд исследований и работ по сбору и обобщению экономических данных о производстве программных продуктов заложили основы для методов и моделей оценивания затрат, которые обладают удовлетворительной точностью.
Современная экономическая модель оценки их производства считается хорошей, если с ее помощью можно оценить затраты на программные комплексы с точностью около
20%, при условии использования модели, на которые она ориентирована. Имеющиеся
модели не всегда столь точны, как хотелось бы, но могут весьма существенно помочь
при экономическом анализе и обосновании решений создания сложных программных
продуктов. Для сбора и обобщения экономических характеристик о производстве программных продуктов необходимо детально исследовать требуемые ресурсы для современных процессов создания и использования комплексов программ различных классов и
назначения.
Скоординированное применение методов, стандартов и инструментальных средств
в процессах производства, развития и применения комплексов программ позволяет исключать многие виды дефектов или значительно ослаблять их влияние. Тем самым экономические характеристики производства и уровень достигаемого качества становится предсказуемым и управляемым, непосредственно зависящим от ресурсов, выделяемых на их достижение, а главное, от системы качества и эффективности технологий, используемых на всех этапах жизненного цикла. Основными целями упорядочивания, регламентирования планирования, этапов и процессов производства программных комплексов являются:
• снижение трудоемкости, длительности, стоимости и улучшение всех характеристик программных продуктов;
• повышение качества разрабатываемых и/или применяемых компонентов и программных комплексов в целом при их производстве, сопровождении и эксплуатации;
• обеспечение возможности расширять комплексы программ по набору прикладных
функций, совершенствовать и масштабировать их в зависимости от изменения решаемых
задач, внешней среды и потребностей заказчика;
14
• обеспечение переносимости прикладных программ и данных между разными аппаратными и операционными платформами и повторного использования программных
компонентов в различных проектах.
Одна из важнейших задач состоит в том, чтобы увязать четкими экономическими
категориями взаимодействие разных специалистов и предприятий в типовой производственной цепочке: заказчик — проектировщик — производитель — пользователь.
Для этого объект — программный продукт и все процессы взаимодействия в такой цепочке должны быть связаны системой экономических и технических характеристик, в
той или иной степени использующих основные экономические показатели — реальные
затраты ресурсов: финансов, труда и времени специалистов на конечный продукт. Это
позволит создавать теоретические и практические основы современной экономики
производства сложных программных продуктов.
Крупные заказные программные продукты являются одними из наиболее сложных
объектов, создаваемых человеком, и в процессе их производства — творчество специалистов как поиск новых методов, альтернативных решений и способов осуществления заданных требований, а также формирование и декомпозиция этих требований составляют значительную часть всех трудозатрат. Индустриализация производства комплексов программ позволяет автоматизировать многие не творческие, технические и рутинные операции и этапы, а также облегчать творческие процессы за счет селекции, обработки и отображения информации, необходимой для принятия творческих решений.
Следствием этого должно являться значительное сокращение доли затрат на творческий
труд в непосредственных затратах на разработку комплексов программ.
В программной инженерии неуклонно повышаются размеры и сложность создаваемых продуктов, что вызывает возрастание затрат творческого труда на единицу размера новых программ.
В перспективе, несмотря на автоматизацию и повышение инструментальной оснащенности технологии производства комплексов программ, доля творческого труда при
создании полностью новых крупных программных продуктов возрастает. Даже при сокращении суммарных затрат на разработку программных компонентов за счет автоматизации нетворческого труда все более определяющей для экономических характеристик
создания программных продуктов становится доля затрат на творческий труд и возрастают требования к творческим способностям при отборе и обучении специалистов.
По мере повышения квалификации коллективов и автоматизации творческой части
труда следует ожидать асимптотического приближения проектов к предельным значениям относительных экономических характеристик новых разработок. Эти значения определяются интеллектуальными возможностями человека по интенсивности принятия творческих решений. Им соответствуют наличие предельных значений производительности труда и длительности разработки сложных комплексов программ. Для их
оценки необходимо изучение и экстраполяция прецедентов и экспериментальных данных реальных разработок программных продуктов с наилучшими экономическими характеристиками с учетом возрастания квалификации специалистов и уровня автоматизации производства. Вряд ли можно ожидать в ближайшие годы радикального повышения
производительности труда при создании полностью новых, крупных программных продуктов. Еще более консервативна длительность таких разработок.
Ограниченность ресурсов при создании крупных программных продуктов приводит
к целесообразности решения задач планирования, упорядочения и применения экономи15
чески эффективных методов автоматизации обеспечения ЖЦ комплексов программ с целью достижения требуемого качества и достоверного его определения. Для каждого
крупного проекта, выполняющего ответственные функции, необходимо прогнозировать
требующиеся ресурсы, разрабатывать и применять комплексную систему качества, специальные планы и Программу, методологию и инструментальные средства, обеспечивающие требуемые качество, надежность и безопасность функционирования программного продукта. Для этого следует применять современные методы и стандарты при подготовке промышленных технологий, методик производства и испытания конкретных
продуктов, однозначно отражающих степень удовлетворения исходных требований заказчика и пользователей, а также для сравнения характеристик продуктов разных поставщиков и выявления среди них предпочтительных.
Задачи выбора квалифицированных и надежных специалистов-подрядчиков,
способных создавать сложные программные продукты и базы данных требуемого качества в разумные сроки с учетом ограничений на используемые ресурсы, стоят остро для
многих заказчиков и пользователей современных сложных вычислительных систем. Для
их решения поставщикам комплексов программ, кроме программистов-кодировщиков,
необходимо иметь системных аналитиков, архитекторов и топ-менеджеров проектов, а
также специалистов по комплексированию, испытаниям и обеспечению качества современных сложных программных продуктов. Они должны знать передовые индустриальные методы, технологии и международные стандарты, поддерживающие и регламентирующие жизненный цикл комплексов программ, а также инструментальные системы
обеспечения качества, верификации, тестирования и сертификации программных продуктов. Для этого требуется, прежде всего, системотехническая квалификация специалистов предприятий, берущихся за производство сложных заказных программных
продуктов высокого качества.
Число больших ошибок оценивания экономических характеристик на начальных
этапах разработки можно значительно сокращать при относительно небольших усилиях,
применяя, в частности, формализованные методики их экспертной оценки. Тем самым
такие проекты с самого начала могут выполняться с учетом более достоверной оценки
необходимых экономических и других факторов. Большую часть негативных последствий можно избежать, используя существующие, достаточно точные методы оценивания
и прогнозирования экономических характеристик, а также управление проектами
для их успешного завершения.
Внимание должно быть сосредоточено на концептуальной основе анализа и распределения труда в процессе разработки комплексов программ на факторах, определяющих реальные трудозатраты и другие экономические характеристики, а также на
исследовании их в реализованных современных разработках.
Задачи создания и организации экономически эффективного проектирования и
производства программных продуктов
Задачи рационального сочетания целей, стратегий действий, конкретных процедур и доступных ресурсов необходимо решать для достижения основной цели — получения программного продукта с заданными функциональными характеристиками
и качеством. Базой эффективного управления проектом программного комплекса является план, в котором задачи исполнителей частных работ должны быть согласованы с
выделяемыми для них ресурсами, а также между собой, по результатам и срокам их достижения. Планирование программных проектов должно обеспечивать компромисс меж16
ду требующимися характеристиками создаваемой системы и ограниченными ресурсами,
необходимыми на ее разработку и применение.
По мере уточнения исходных требований к объекту разработки, внешней среде
применения и ресурсам, в процессе системного анализа и проектирования возрастает
достоверность планирования, которое должно проходить этапы:
●● обследование объектов и среды проектирования для предварительной формализации целей, назначения и задач проекта;
●● первичное прогнозирование возможных характеристик и требований к программному продукту на базе обобщения данных ранее реализованных подобных прототипов и создание концепции проекта;
●● подготовка предварительного плана выполнения этапов и частных работ с учетом допустимых затрат ресурсов на их реализацию;
●● управление детализацией и реализацией плана производства, его оперативной
корректировкой и перераспределением ресурсов в соответствии с особенностями развития компонентов программного комплекса;
●● обобщение и накопление результатов планирования и управления конкретным
проектом для использования этих данных в качестве прототипов при производстве программных продуктов.
На каждом этапе должны проводиться поиск эффективных технических и экономических решений реализации проекта, исследование и сопоставление альтернативных
действий, которые должны приводить к достижению поставленных целей производства
программного продукта. В результате процессы планирования проекта и его выполнения
обычно развиваются параллельно. Уже при первичном прогнозировании развития проекта должны оцениваться альтернативные характеристики объекта и среды разработки и
выбираться наиболее подходящие для производства в соответствии с поставленными целями и имеющимися ресурсами.
Сравнение альтернатив следует проводить по величине достигаемого эффекта проекта в зависимости от затрат на его достижение (желательно, по показателю «эффективность/стоимость»).
Программные комплексы все больше встраиваются в различные заказные технические системы. Работа с такими проектами требует от программных специалистов широкого взгляда на общие технические и экономические задачи проектирования сложных систем. Менеджерам и аналитикам программных проектов необходимо участвовать
в выработке требований для всей системы, а также понимать прикладную область применения продукта еще до начала обдумывания функций компонентов и их интерфейсов,
требованиям которых должен будет отвечать программный продукт.
Для сокращения затрат необходимы новые технологии, методы создания и управления сложными проектами программных систем. Коренные отличия между методами и
инструментарием индивидуального, «художественного» программирования небольших
программ и технологией планомерного, регламентированного производства крупных
программных продуктов приводят к тому, что последние медленно осваиваются и входят
в практику слаженной работы больших коллективов специалистов. Эти обстоятельства
отражаются на существенном отставании от мирового уровня по конкурентоспособности, количеству и качеству отечественных заказных программных продуктов. Каждая производственная технология должна быть достаточно зрелой, чтобы быть развернутой в промышленных масштабах, их интеграция включает:
17
●● разработку архитектур — структур для производства продуктов на основе общих
архитектурных стилей;
●● разработку инструментов на базе выбранного языка для поддержки производства
продуктов посредством адаптации, конфигурирования и сборки структурных компонентов;
●● использование инструментов проектирования для вовлечения заказчиков и быстрой реакции на изменения требований за счет инкрементного построения программ с сохранением их работоспособности при внесении изменений.
Неопределенность применяемых понятий, требований и характеристик качества присуща крупным, наукоемким проектам комплексов программ, однако многочисленные спекуляции разработчиков на их значениях приучила заказчиков не доверять
рекламируемым достоинствам производства программных продуктов. Во многих случаях контракты и предварительные планы на создание сложных программных комплексов
и баз данных подготавливаются и экономически оцениваются на основе неформализованных представлений заказчиков и разработчиков о требуемых функциях и характеристиках качества систем. Многочисленные провалы проектов выявили необходимость
формализации методов взаимодействия и обеспечения взаимопонимания разработчиков
с заказчиком или потенциальными пользователями создаваемого продукта с самого начала проекта с целью конкретизации его функций и уточнения требований к качеству.
Ошибки, обусловленные неопределенностью или некорректностью технических заданий
и спецификаций требований, могут и должны быть выявлены на ранних стадиях проектирования, что способствует его ускорению и повышению качества.
Возрастание сложности и ответственности современных задач, решаемых
сложными системами, а также возможного ущерба от недостаточного качества комплексов программ значительно повысило актуальность проблемы освоения методов стандартизированного описания требований, оценивания экономических характеристик
и качества на различных этапах их жизненного цикла. Выявилась необходимость систематизации реальных характеристик качества программных продуктов, применения
стандартов для выбора из них необходимой номенклатуры и требуемых решений для
конкретных комплексов программ. Обещания разработчиков в контрактах с заказчиками
создать высококачественные продукты в согласованные сроки во многих случаях не выполняются как вследствие различий в понимании требуемого качества, так и вследствие
неумения оценить экономические ресурсы, необходимые для достижения заданного качества программ. Стратегической задачей в жизненном цикле современных технических
систем стало обеспечение и совершенствование качества производства сложных программных продуктов при реальных ограничениях на использование доступных экономических ресурсов производства.
Широкое многообразие классов и видов программ, обусловленное различными
функциями систем, предопределяет формальные трудности, связанные с методами и
процедурами доказательства соответствия поставляемых продуктов условиям контрактов и требованиям потребителей. По мере расширения применения и увеличения
сложности программных продуктов выделились области, в которых ошибки или недостаточное качество программ или данных могут нанести ущерб, значительно превышающий положительный эффект от их использования. В этих критических случаях
недопустимы аномалии и дефекты функционирования программных продуктов при любых искажениях исходных данных, сбоях и частичных отказах аппаратуры и других нештатных ситуациях.
18
Задачи формирования требований к характеристикам и качеству программного
продукта включают анализ свойств, характеризующих его функционирование с учетом
технологических и экономических ресурсных возможностей производства.
При этом под качеством функционирования понимается совокупность свойств, обусловливающих пригодность продукта обеспечивать надежное, безопасное и своевременное представление требуемой информации потребителю для ее дальнейшего использования по назначению. В соответствии с принципиальными особенностями программного
продукта при проектировании должны выбираться номенклатура и значения требований
к характеристикам качества, необходимым для его эффективного применения пользователями, которые впоследствии отражаются в технической документации и в спецификации требований на конечный продукт.
Каждый критерий качества может использоваться, если определена его метрика и
может быть указан способ ее оценивания и сопоставления с требующимся значением.
Для конкретных видов программных продуктов доминирующие критерии качества выделяются и определяются при проектировании систем их функциональным назначением
и требованиями технического задания.
Качество изменяется в течение жизненного цикла комплекса программ, то есть его
требуемое и реальное значение вначале ЖЦ почти всегда отличается от фактически
достигнутого при завершении производства и качества поставляемой пользователям
версии продукта. На практике важно оценивать качество программ не только в завершенном виде, но и в процессах их проектирования, производства и сопровождения. Кроме того, оценки показателей качества могут быть субъективными и отражать различные
точки зрения и потребности разных специалистов. Чтобы эффективно управлять качеством на каждом этапе ЖЦ, необходимо уметь определять и примирять эти различные
представления требуемого качества и его изменения.
Задача удостоверения достигнутого качества функционирования сложных программных продуктов и методов обеспечения их жизненного цикла базируется на сертификации аттестованными проблемно-ориентированными испытательными лабораториями. Глубокая взаимосвязь качества разработанных комплексов программ с качеством
технологии их создания и с затратами на разработку становится особенно существенной
при необходимости получения конечного продукта с предельно высокими значениями
показателей качества. Непрерывный рост требований к качеству стимулировал создание
и активное применение международных стандартов и регламентированных технологий,
автоматизирующих процессы их жизненного цикла, начиная с инициирования проекта.
Задача анализа экономической эффективности выполнения проекта требует использования сведений, определяющих показатели выполнения применяемых процессов и
средств производства. Такие сведения и уроки следует собирать, пока особенности реализации проекта свежи в памяти его разработчиков. Их необходимо применять в процессах производства программных продуктов после завершения основных и промежуточных этапов выполнения проекта, когда они могут оказать влияние на текущее состояние
производства и качество программного продукта. Это особенно важно для крупных, продолжительных проектов производства версий программных продуктов.
Менеджер проекта должен в самом его начале уведомить коллектив о своем намерении отслеживать все производственные процессы и их экономические характеристики,
а также дать им ряд указаний относительно тех сведений, которые будут собираться для
анализа. Выполнять анализ весьма важно, поскольку именно здесь уроки могут быть
обобщены и переданы по наследству для сохранения в архиве предприятия и дальнейше19
го совершенствования производственных процессов. Каждое предприятие, занимающееся разработкой заказных программных продуктов, должно создавать архив компонентов
и характеристик производственных процессов, который позволяет находить образцы настраиваемых процессов, поддерживать журналы регистрации усовершенствований и
изучать уроки, извлеченные из предыдущих проектов.
Задачи подготовки и обучения специалистов для экономически эффективного
проектирования и производства программных продуктов
В жизненном цикле сложных комплексов программ для обеспечения их высокого
качества целесообразно выделять специалистов, ответственных за анализ, оценивание и прогнозирование экономических характеристик производства, за соблюдение
промышленной технологии создания и совершенствование программных продуктов, за
измерение и контроль затрат, качества комплексов программ в целом и их компонентов.
Задача состоит в том, чтобы научить специалистов анализу и оцениванию конкретных
экономических факторов, влияющих на характеристики функционирования программных продуктов со стороны реально существующих и потенциально возможных негативных воздействий и ограничений ресурсов проектов. Необходима подготовка и воспитание квалифицированных специалистов в области экономики и производства сложных
программных комплексов, их обучение методам и современной программистской культуре промышленного создания сложных высококачественных программных продуктов
(см. рис. 1.1).
Рассматриваются большие проекты комплексов программ, создаваемые крупными
коллективами специалистов. В таких проектах на чистое творчество, искусство и научные исследования отдельных специалистов, преобладающие в небольших индивидуальных разработках, накладывается множество технических работ, характерных для индустриального проектирования и производства программных продуктов. Вследствие этого
значительно нивелируются индивидуальные особенности и квалификация отдельных
специалистов, и появляется возможность оценивать усредненную производительности
труда и другие экономические характеристики крупных коллективов. Программный специалист — это член команды, поэтому должен обладать навыками общения и межличностных отношений, а также уметь планировать не только свою работу, но и координировать ее с работой других специалистов. Анализируемые ниже процессы обычно ограничены временем от этапа оформления требований технического задания на разработку
до этапа завершения испытаний опытного образца первой версии программного продукта, соответствующего требованиям заказчика.
Задачи выбора, организации структуры и состава коллектива специалистов
привели к появлению новых требований к обучению и к дифференциации специалистов по программной инженерии, обеспечивающих основные этапы жизненного цикла
комплексов программ. Этим специалистам недостаточно навыков процедурного программирования небольших модулей и компонентов, а необходимы глубокие знания системотехники, технологии и стандартов проектирования, методов обеспечения и контроля
качества сложных комплексов программ в определенной области их применения. Эти
специалисты должны владеть новой интеллектуальной профессией, обеспечивающей
высокое качество программных продуктов, а также испытания и удостоверение реального достигнутого качества на каждом этапе разработки и совершенствования программ.
Производство крупных программных продуктов различных классов, разделение труда
специалистов по квалификации при разработке программ и данных, структура и организация коллективов, а также экономика таких разработок стали важнейшей ча20
стью задачи выбора и обучения коллективов специалистов для обеспечения всего ЖЦ
сложных программных продуктов.
В жизненном цикле сложных комплексов программ участвуют специалисты различной квалификации и степени ответственности за результаты своей деятельности:
●● заказчики определяют и несут ответственность за требования к функциям и характеристикам качества программного продукта, за финансирование, доступные, адекватные ресурсы для обеспечения его жизненного цикла;
●● разработчики должны гарантировать и отвечать за выполнение требований заказчиков программного продукта с учетом выделенных ресурсов;
●● пользователи имеют право применять программный продукт и адаптировать его
к особенностям использования и внешней среды только в пределах, определенных эксплуатационной документацией, созданной разработчиками.
Для организации эффективной структуры коллектива разработчиков программных комплексов следует научиться учитывать конкретные цели специалистов,
участвующих в проекте, их психологическую совместимость, способность к дружной
коллективной работе, опыт взаимодействия в составе определенного коллектива, а также
другие объективные и субъективные свойства участников проекта. При этом большое
значение могут иметь личная мотивация и психологические особенности поведения разных специалистов при комплексной работе над сложным проектом. Эти характеристики
могут быть обобщены в качественный показатель влияния сложности взаимодействия
специалистов в коллективе, которому могут быть сопоставлены оценки возможного изменения экономической эффективности производства программного продукта. Наилучшим обычно считается непрерывное корректное взаимодействие организованных специалистов с большим опытом работы в конкретном коллективе при согласованности их
целей, планов и методов работы. В остальных случаях в той или иной степени (даже в 3–
5 раз) может возрастать трудоемкость производства продукта, что нельзя не учитывать
при обосновании крупных проектов.
Уровень квалификации заказчика и определенность требований технического задания на производство продукта может сильно влиять на суммарные затраты и длительность создания комплекса программ. Первоначальное, техническое задание зачастую
оказывается недостаточно квалифицированным и подвергается в дальнейшем многократным изменениям. Изменения технического задания заказчиком и объем переделок непосредственно отражаются на эффективной производительности труда специалистов производства. Особенно сильно низкая достоверность технического задания может
влиять на попытки заказчика форсировать сроки разработки. Этому же может способствовать различие между заказчиком и разработчиком в квалификации, уровне понимания
целей разработки и необходимых затрат на реализацию требований.
Даже при испытаниях заказчик зачастую обнаруживает, что решаются не совсем те
задачи и не совсем так, как ему нужно, вследствие чего может быть необходима большая
переработка готовых программ. Даже квалифицированные заказчики вынуждены иногда
корректировать техническое задание на любых этапах разработки, что может влиять на
снижение экономической эффективности производства на 10–20%. Представители заказчика, участвующие в проекте, должны обучаться формализации автоматизируемых
функций систем и технологических процессов, для которых предназначены соответствующие программные продукты, и иметь представление об экономически эффективных
путях их реализации.
21
В каждом проекте программного продукта должен быть лидер — руководитель. Лидер должен иметь талант и квалификацию, а также быть обучен решать следующие задачи:
●● руководить процессом выявления, конкретизации и формирования требований
заказчика продукта;
●● осуществлять проверку спецификаций требований к программному комплексу,
чтобы удостовериться, что они соответствуют реальной концепции заказчика, представленной детальными функциями;
●● вести переговоры с заказчиком, пользователями и разработчиками, определять и
поддерживать равновесие между тем, чего хочет заказчик, и тем, что может создать коллектив разработчиков за бюджет, ресурсы и время, выделенные заказчиком для реализации продукта;
●● рассматривать конфликтующие пожелания, поступающие от различных участников проекта и находить компромиссы, необходимые для определения набора функций
и характеристик, представляющих наибольшую ценность для максимального числа участников и проекта в целом.
При производстве сложных комплексов программ большими коллективами значительно повышается роль квалификации менеджеров — руководителей реализации
проекта, что непосредственно отражается на производительности труда всего коллектива. Из-за различной квалификации руководителей проектов суммарные затраты на разработку могут изменяться в несколько раз, как в лучшую, так и в худшую сторону. Некоторые методы организации структуры коллектива и процессов производства позволяют сокращать негативное влияние этого человеческого фактора.
Разработчики должны иметь в своем составе квалифицированных менеджеров, проблемно-ориентированных системных архитекторов, способных переводить не всегда
полные и корректные функциональные требования заказчика в конкретные спецификации и технические требования к комплексам программ и к их компонентам.
Специалисты по проектированию сложных комплексов программ (системные архитекторы) должны иметь, прежде всего, хорошую подготовку по системному анализу алгоритмов и комплексов программ в определенной проблемной области, по методам
оценки экономической и технической эффективности проектов, организации и планированию крупных разработок компонентов программ и баз данных. Им необходима высокая квалификация по архитектурному построению, комплексному тестированию и испытаниям компонентов и комплексов программ определенных классов, умение организовать коллектив для решения общей целевой задачи системы. Это позволит на ранних
этапах исключать или сокращать дефекты, обусловленные различием представления целей и задач проектов, а также их характеристик качества.
Для создания высококачественных комплексов программ, прежде всего, необходимо
обучение специалистов процессам организации взаимодействия представителей заказчика и разработчиков проекта. Взгляды и требования заказчика в основном отражаются на функциональных и потребительских характеристиках программного продукта. Устремления разработчиков направлены на способы их реализации с требуемым качеством. Эти различия исходных интересов и точек зрения на проект приводят к тому,
что некоторые неформализованные представления тех и других имеют зоны неоднозначности и взаимного непонимания, что может приводить к конфликтам. Организация четкого взаимодействия и сокращение этих зон требует определенных мероприятий и кон22
тактов по обмену знаниями в процессе проведения совещаний, взаимному повышению
квалификации и обучению.
Следует активно привлекать заказчиков к совещаниям по управлению требованиями и масштабом проекта, чтобы обеспечить как качество, так и своевременность производства программного продукта. Необходимы указания и согласия заказчиков при
принятии основных изменений и решений, и только они могут реально определить, как,
развивая функции, получить полезный комплекс программ высокого качества, выполненный в срок и в пределах бюджета. Для определения проекта и целей заказчика может
понадобиться вести с ним переговоры об объеме работ для команды. Во время переговоров с заказчиком о техническом задании и требованиях разработчикам необходимо учитывать неизбежные издержки при производстве комплекса (непредвиденные технологические и экономические риски, изменения требований, задержки при приобретении закупаемых компонентов, непредвиденный уход членов команды), которые могут приводить к существенному нарушению графика реализации продукта. Специалистам команды следует научиться пониманию требований заказчиков, поскольку именно они добиваются успеха при применении программного продукта (см. рис. 1.1).
Для производства сложных программных продуктов наиболее часто применяются
две схемы организации коллективов, которые должны осваиваться при обучении
специалистами:
• для выполнения каждого крупного проекта формирование жесткой организационной структуры целостного коллектива с полным составом необходимых специалистов
под единым, централизованным руководством лидера проекта;
• выделение руководителя (главного конструктора) и небольшой группы интеграторов, по заданиям которых выполняются частные работы узкими специалистами по компонентам, не входящими организационно в единый коллектив для реализации конкретного крупного проекта.
Первая схема предпочтительна, когда предприятие реализует небольшое число особенно крупных проектов-заказов и имеет возможность для каждого из них комплектовать полноценную, организационно замкнутую, «команду». Она полностью реализует
проект и несет ответственность за его качество. Однако при этом возможны простои отдельных специалистов из-за несинхронного ожидания технических заданий или результатов на последовательных этапах разработки компонентов другими специалистами.
Вторая схема может иметь преимущества для предприятия при большом числе относительно небольших проектов, близких по содержанию и функциональному назначению компонентов.
В этом случае большинство специалистов одновременно участвуют в нескольких
заказах по локальным заданиям лидеров и интеграторов различных проектов и может
использоваться более полно. Однако задачи интеграторов, их взаимодействие с поставщиками компонентов, руководство и контроль качества при этом усложняются и требуют более высокой квалификации. В обеих схемах для реализации мероприятий по планированию и управлению жизненным циклом концептуально целостных, крупных продуктов и обеспечения их качества необходимы организационные действия системных
архитекторов, направленные на подбор и обучение коллектива специалистов разных категорий и специализаций.
Принципиальной задачей улучшения экономических характеристик при производстве сложных комплексов программ является исключение творчества на тех этапах,
где возможны типовые, стандартные решения и использование апробированных заго23
товок программных компонентов, не требующие при их применении высококвалифицированного творческого труда. Основой этого является применение унифицированной
технологии, готовых, испытанных программных компонентов и стандартизированной
архитектуры определенных классов комплексов программ.
Использование готовых апробированных модулей может почти исключать творческий труд по их программированию, автономной отладке и документированию. На этих
этапах творческие усилия необходимы для отбора и контроля готовых компонентов, а
также для разработки новых, отсутствующих среди апробированных. Однако практически полностью сохраняется творческий труд при системном анализе, при комплексировании компонентов и их комплексной отладке, а также во время испытания программного продукта в целом на соответствие требованиям заказчика.
Крупные проекты, как правило, требуют координированной работы больших коллективов или ряда команд. Возрастание сложности производства снижает возможность
человека решать задачи интуитивно по мере их возникновения. Чтобы добиться успеха в
большом проекте, необходима четкая координация действий членов «команды», которая должна работать по общей утвержденной методологии, чтобы решить проблему
реализации требований и качества программного продукта экономически эффективно
организованной командой. Одним из наиболее важных факторов является то, что члены
команды имеют различные талант, профессиональные навыки и квалификацию. При
выборе заказчиком надежного поставщика-разработчика продукта необходима оценка
тематической и технологической квалификации возможного коллектива специалистов, а также его способности экономно реализовать проект с заданными требованиями и качеством. Тематическую квалификацию специалистов в области создания сложных комплексов программ определенного функционального назначения приближенно
можно характеризовать средней продолжительностью работы в данной проблемной области основной части команды, непосредственно участвующей в разработке алгоритмов,
спецификаций требований, программ и баз данных. Технологическая квалификация коллектива характеризуется опытом и длительностью работы с регламентированными технологиями, инструментальными комплексами автоматизации программной инженерии,
языками проектирования, программирования и тестирования комплексов программ.
По мере накопления эксплуатируемых программных продуктов и их компонентов
все большее число специалистов переходит из области непосредственного программирования и тестирования новых программ в область системного проектирования, управления конфигурацией и создания новых версий программного продукта на базе повторно
используемых компонентов (см. рис. 1.1). По некоторым оценкам, непосредственным
программированием новых компонентов в мире занято только около 15–20% специалистов, участвующих в создании программных продуктов. При организации сопровождения и модернизации крупных программных продуктов следует учитывать важные психологические факторы, усложняющие отбор, обучение и деятельность менеджеров и
квалифицированных специалистов в этой области:
• эта деятельность требует высокой квалификации, больших творческих и умственных затрат, связанных, прежде всего, с необходимостью одновременного, широкого охвата и анализа множества компонентов и их взаимосвязей, находящихся в различных состояниях завершенности модификаций или устранения дефектов;
• корректируемые компоненты зачастую разрабатывались в прошлом: в разное время, различными специалистами, в различном стиле, с неодинаковой и не полной доку24
ментацией. Это усложняет освоение их содержания при внесении изменений и устранении дефектов;
• сложная, творческая сторона работ при сопровождении вуалируется тем, что приходится овладевать и анализировать программы, разработанные ранее другими специалистами, которые зачастую может оказаться проще не корректировать, а разработать заново;
• комплексы программ, прошедшие широкие испытания и эксплуатацию у заказчиков, гарантируют достигнутое качество результатов функционирования, и любые в них
изменения имеют высокий риск внесения дополнительных ошибок и ухудшения этого
качества, что усложняет коренные модификации;
• выполняемые работы требуют особой, скоординированной тщательности корректировок и четкого регламентированного взаимодействия ряда специалистов, различающихся квалификацией и уровнем ответственности;
• процессы и результаты сопровождения не отличаются наглядностью и внешним
эффектом, проявлением их размера и сложности, вследствие чего не престижны среди
рядовых программистов и недооцениваются руководителями крупных проектов.
Перечисленные выше специализации и квалификации персонала, участвующего в
крупных проектах программных продуктов, требуют соответствующей их подготовки, отбора и обучения, которые являются самостоятельной, важной проблемой развития экономики заказной программной инженерии. Должны быть разработаны и документированы планы, требования и цели обучения, а также разработаны учебники и руководства, включая материалы, используемые для обучения. Персонал, ответственный за
выполнение конкретных задач, если это необходимо, должен быть аттестован на основе соответствующего образования, подготовки и/или опыта работы. При обучении внимание следует акцентировать на комплексе международных стандартов программной
инженерии, которые непосредственно обеспечивают экономически эффективный жизненный цикл сложных высококачественных программных продуктов и баз данных. Необходимо обучение специалистов современной программистской культуре и дисциплине промышленного создания высококачественных программных продуктов.
25