Разработка сложных программных изделий

       

х годов появились первые признаки


В конце 60-х — начале 70- х годов появились первые признаки кризиса в области программирования — колоссальные успехи в об­ласти развития средств вычислительной техники пришли в проти­воречие с низкой производительностью труда программистов и низкими темпами ее роста. В связи с усложнением программных систем стало очевидным, что их трудно проектировать, кодировать, тестировать и особенно трудно понимать, когда возникает необхо­димость их модификации в процессе сопровождения. Появилась жизненная потребность в создании технологии разработки про­граммных средств и инженерных методов их проектирования для существенного улучшения производительности труда разработчи­ков.
Кардинальные изменения в области создания программного обеспечения были обусловлены и быстрым ростом рыночного про­граммного продукта — той части разработанных программ, кото­рая приобреталась пользователем в виде готовых к эксплуатации пакетов программ различного назначения. Несмотря на то, что зна­чительная часть создаваемого программного обеспечения не дово­дится до коммерческого использования, т.е. не выходит за пределы фирмы-разработчика, она представляет большую ценность для пос­ледующих разработок и для накопления опыта и знаний. Уже к на­чалу 80-х годов только в США было создано программного обес­печения на сотни миллиардов долларов.
Внедрение компьютерных технологий в разнообразные сферы человеческой деятельности привело к возникновению и бурному развитию новой отрасли общественного производства — промыш­ленности обработки данных, суммарный объем продаж продукции в которой быстро оставил позади все традиционные отрасли про­мышленности. Перераспределение числа работающих в сфере мате­риального производства привело к тому, что в наиболее развитых странах более половины работников оказались занятыми обработ­кой информации. В США в 90-е годы этот показатель достиг 80%.
Основа рассматриваемой отрасли в первую очередь — техничес­кое и программное обеспечение систем обработки данных.
При этом наиболее наукоемкой остается программная продукция. Есте­ственно, что и в научных исследованиях и в практической деятель­ности постоянно делались попытки перевести изготовление про­граммной продукции на инженерную основу. Так, в 70-х годах возникла новая инженерная дисциплина — программотехни-к а, или инженерия программного обеспечения (Software Engineer­ing).
Программотехника охватывает все виды деятельности по проек­тированию и разработке программного обеспечения.
Программное обеспечение (software) —
это программы, выпол­няемые вычислительной системой. Здесь подразумевается как одна, так и несколько программ, которые может выполнять ЭВМ. Разли­чают системное программное обеспечение, которое нацелено на по­вышение эффективности работы вычислительной системы и являю­щееся дополнением к техническим средствам, а также прикладные программы, обеспечивающие выполнение конкретных задач поль­зователей.
Становлению программотехники способствовало расширение рынка программной продукции, появление мощных фирм, занятых производством исключительно этой продукции, и невиданный рост числа пользователей программных изделий. Под программным изде­лием понимают программы, которые при выполнении на ЭВМ реа­лизуют требуемые функции и характеристики; данные, которые по­зволяют программам адекватно обрабатывать и выдавать информа­цию; документация, описывающая работу и использование про­грамм и организацию их сопровождения. Таким образом, про­граммное изделие включает как программы, так и процедуры и правила их использования, а также всю документацию, необходи­мую для автоматизированной обработки данных. Программное из­делие может быть частью более крупной системы или самостоятель­ной системой.
Программотехника охватывает три ключевых момента создания программной продукции: методы, средства и процедуры.
Методы позволяют ответить на вопрос, как создать про­граммное изделие, и охватывают круг задач, связанных с планиро­ванием разработки, оценкой сроков и затрат, с анализом требова­ний, проектированием, кодированием и тестированием программ, с сопровождением программного изделия.




Средства предназначены для создания автоматизированной или полуавтоматизированной поддержки методов. Сегодня сущест­вуют средства практически для каждого из методов. Когда эти средства объединяются в интегрированную среду так, что информа­ция, полученная одним из них, может использоваться другим, со­здается система поддержки разработки программного обеспечения. Система автоматизации разработки программных средств получила название CASE — Computer-aided software engineering.
Процедуры программотехники объединяют в единый тех­нологический процесс методы и средства, позволяя наиболее раци­онально и эффективно вести разработку программной продукции. Процедуры устанавливают последовательность применения мето­дов, специфику представления требуемых документов, форм и отче­тов, последовательность выполнения контрольных и управляющих действий.
Программное изделие разрабатывается в четкой последователь­ности определенных шагов. Последовательность и содержание этих шагов характеризуют модель (парадигму) разработки программно­го изделия. В программотехнике существует несколько моделей, выбор той или иной из них зависит прежде всего от типа проекта и области приложения.
Наибольшее распространение в практике разработки программ­ных средств получила модель жизненного цикла программного изде­лия (ЖЦПИ).
ЖЦПИ — это многошаговый процесс, в котором все программные изделия проходят последовательно через ряд фаз, ус­тановленных соответствующими регламентирующими документа­ми.
Трудности разработки и внедрения технологии создания про­граммных изделий во многом определяются особенностями про­граммной продукции как предмета производства. Действительно, программные изделия имеют ряд существенных отличий от других видов продукции, создаваемой в результате человеческой деятель­ности.
1. В отличие от технического обеспечения, или аппаратных средств (hardware), которые являются физическими объектами, про­граммы представляют собой "неосязаемые" объекты.


Программная продукция разрабатывается, а не изготавливается в процессе про­ мышленного производства, несмотря на то, что некоторая аналогия может быть отмечена. Стоимость программного изделия определя­ется стоимостью инженерной деятельности, а не производственной, поэтому и управление программным проектом осуществляется иначе, чем производственным.
2. Программная продукция "не изнашивается". Известно, что кривая надежности (число отказов в единицу времени) для про­мышленных изделий имеет начальный участок высокой интенсив­ности отказов из-за необнаруженных дефектов производства и материалов, затем заметно снижается, оставаясь постоянной до конца срока жизни изделия, когда в результате износа интенсивность от­казов опять резко возрастает-
У программных изделий на начальном этапе их эксплуатации отмечается наиболее высокий уровень отказов, которые обусловле­ны необнаруженными ошибками. После исправления ошибок служ­бой сопровождения их интенсивность заметно снижается, однако свести отказы к нулю практически невозможно, так как при внесе­нии исправлений и изменений в программу в ней могут появляться новые необнаруженные ошибки. Следует отметить различия и в со­держании понятия отказа для программного изделия. Ошибка (отказ) в программном обеспечении — это ситуация, когда поведе­ние программного обеспечения не соответствует его спецификаци­ям, т.е. требованиям пользователя. Надежность программного обес­печения — свойство программного изделия выполнять заданные функции, сохраняя во времени значения установленных эксплуата­ционных показателей в заданных пределах при выполнении режи­мов и условий использования ЭВМ. Таким образом, ЖЦПИ закан­чивается не в результате износа программного изделия, а из-за его морального "старения", т.е. когда оно перестает удовлетворять ак­туальным требованиям пользователей и его модификация не выгод­на.
3. В отличие от других видов продукции, программные изделия пока не имеют широкого набора запасных частей.


Как правило, программное изделие изготавливается в соответствии с требования­ми пользователя, а не собирается из существующих компонент, не­смотря на то, что в последнее время предпринимаются попытки со­здания многократно используемых библиотек подпрограмм.
4. Особенность программного изделия состоит в том, что парал­лельно с эксплуатацией происходит и его совершенствование в про­цессе сопровождения программного обеспечения. Затраты на со­провождение, включающие затраты на модернизацию и адаптацию продукта к конкретным условиям пользователя, оказываются соиз­меримыми с затратами на его разработку, а часто и превышают их. Вот почему основной принцип производства — максимальное уве­личение выпуска при минимальных затратах — для программного продукта должен быть расширен с учетом затрат, осуществляемых на протяжении всего ЖЦПИ, включая его эксплуатацию и сопро­вождение. Перечисленные отличительные черты программных изделий привели к появлению в экономике нового направления, получивше­го название экономики жизненного цикла программного изделия. Создание программной продукции обязательно должно включать технико-экономический анализ процесса разработки с целью на­хождения путей повышения производительности труда разработчи­ков и уменьшения суммарных затрат за счет совершенствования технологии разработки при обеспечении качества программного из­делия- Для проведения технико-экономического анализа использу­ется система технико-экономических показателей и критериев для оценки эффективности проводимых работ.
Основной критерий, который стремятся минимизировать, — это суммарные затраты и потери во всех фазах ЖЦПИ. Стоимость разработки при планировании работ оценивается исходя из общих трудозатрат (в человеко-месяцах) и срока разработки изделия (в ка­лендарных месяцах или годах), а также их значения по фазам ЖЦПИ. Обычно эти показатели определяются как функция от раз­мера проектируемого программного изделия. Кроме трудозатрат на разработку необходимо установить аналогичные показатели и для фазы сопровождения.
Таким образом, разработка сложных программных изделий тре­бует постоянного совершенствования как технологии их создания, так и процессов планирования и управления на основе использова­ния технико-экономического анализа отдельных этапов и всего процесса в целом.
В настоящем учебном пособии описаны процедуры разработки программных изделий на основе одного из наиболее распростра­ненных подходов, получивших название жизненного цикла про­граммного изделия. Этот подход нашел отражение в отечественных и зарубежных стандартах, которые регламентируют не только виды деятельности на разных этапах жизненного цикла, но и процедуры управления процессом проектирования, внедрения и сопровожде­ния разработанных программных продуктов.

Содержание раздела