х годов появились первые признаки
В конце 60-х — начале 70- х годов появились первые признаки кризиса в области программирования — колоссальные успехи в области развития средств вычислительной техники пришли в противоречие с низкой производительностью труда программистов и низкими темпами ее роста. В связи с усложнением программных систем стало очевидным, что их трудно проектировать, кодировать, тестировать и особенно трудно понимать, когда возникает необходимость их модификации в процессе сопровождения. Появилась жизненная потребность в создании технологии разработки программных средств и инженерных методов их проектирования для существенного улучшения производительности труда разработчиков.
Кардинальные изменения в области создания программного обеспечения были обусловлены и быстрым ростом рыночного программного продукта — той части разработанных программ, которая приобреталась пользователем в виде готовых к эксплуатации пакетов программ различного назначения. Несмотря на то, что значительная часть создаваемого программного обеспечения не доводится до коммерческого использования, т.е. не выходит за пределы фирмы-разработчика, она представляет большую ценность для последующих разработок и для накопления опыта и знаний. Уже к началу 80-х годов только в США было создано программного обеспечения на сотни миллиардов долларов.
Внедрение компьютерных технологий в разнообразные сферы человеческой деятельности привело к возникновению и бурному развитию новой отрасли общественного производства — промышленности обработки данных, суммарный объем продаж продукции в которой быстро оставил позади все традиционные отрасли промышленности. Перераспределение числа работающих в сфере материального производства привело к тому, что в наиболее развитых странах более половины работников оказались занятыми обработкой информации. В США в 90-е годы этот показатель достиг 80%.
Основа рассматриваемой отрасли в первую очередь — техническое и программное обеспечение систем обработки данных.
При этом наиболее наукоемкой остается программная продукция. Естественно, что и в научных исследованиях и в практической деятельности постоянно делались попытки перевести изготовление программной продукции на инженерную основу. Так, в 70-х годах возникла новая инженерная дисциплина — программотехни-к а, или инженерия программного обеспечения (Software Engineering).
Программотехника охватывает все виды деятельности по проектированию и разработке программного обеспечения.
Программное обеспечение (software) —
это программы, выполняемые вычислительной системой. Здесь подразумевается как одна, так и несколько программ, которые может выполнять ЭВМ. Различают системное программное обеспечение, которое нацелено на повышение эффективности работы вычислительной системы и являющееся дополнением к техническим средствам, а также прикладные программы, обеспечивающие выполнение конкретных задач пользователей.
Становлению программотехники способствовало расширение рынка программной продукции, появление мощных фирм, занятых производством исключительно этой продукции, и невиданный рост числа пользователей программных изделий. Под программным изделием понимают программы, которые при выполнении на ЭВМ реализуют требуемые функции и характеристики; данные, которые позволяют программам адекватно обрабатывать и выдавать информацию; документация, описывающая работу и использование программ и организацию их сопровождения. Таким образом, программное изделие включает как программы, так и процедуры и правила их использования, а также всю документацию, необходимую для автоматизированной обработки данных. Программное изделие может быть частью более крупной системы или самостоятельной системой.
Программотехника охватывает три ключевых момента создания программной продукции: методы, средства и процедуры.
Методы позволяют ответить на вопрос, как создать программное изделие, и охватывают круг задач, связанных с планированием разработки, оценкой сроков и затрат, с анализом требований, проектированием, кодированием и тестированием программ, с сопровождением программного изделия.
Средства предназначены для создания автоматизированной или полуавтоматизированной поддержки методов. Сегодня существуют средства практически для каждого из методов. Когда эти средства объединяются в интегрированную среду так, что информация, полученная одним из них, может использоваться другим, создается система поддержки разработки программного обеспечения. Система автоматизации разработки программных средств получила название CASE — Computer-aided software engineering.
Процедуры программотехники объединяют в единый технологический процесс методы и средства, позволяя наиболее рационально и эффективно вести разработку программной продукции. Процедуры устанавливают последовательность применения методов, специфику представления требуемых документов, форм и отчетов, последовательность выполнения контрольных и управляющих действий.
Программное изделие разрабатывается в четкой последовательности определенных шагов. Последовательность и содержание этих шагов характеризуют модель (парадигму) разработки программного изделия. В программотехнике существует несколько моделей, выбор той или иной из них зависит прежде всего от типа проекта и области приложения.
Наибольшее распространение в практике разработки программных средств получила модель жизненного цикла программного изделия (ЖЦПИ).
ЖЦПИ — это многошаговый процесс, в котором все программные изделия проходят последовательно через ряд фаз, установленных соответствующими регламентирующими документами.
Трудности разработки и внедрения технологии создания программных изделий во многом определяются особенностями программной продукции как предмета производства. Действительно, программные изделия имеют ряд существенных отличий от других видов продукции, создаваемой в результате человеческой деятельности.
1. В отличие от технического обеспечения, или аппаратных средств (hardware), которые являются физическими объектами, программы представляют собой "неосязаемые" объекты.
Программная продукция разрабатывается, а не изготавливается в процессе про мышленного производства, несмотря на то, что некоторая аналогия может быть отмечена. Стоимость программного изделия определяется стоимостью инженерной деятельности, а не производственной, поэтому и управление программным проектом осуществляется иначе, чем производственным.
2. Программная продукция "не изнашивается". Известно, что кривая надежности (число отказов в единицу времени) для промышленных изделий имеет начальный участок высокой интенсивности отказов из-за необнаруженных дефектов производства и материалов, затем заметно снижается, оставаясь постоянной до конца срока жизни изделия, когда в результате износа интенсивность отказов опять резко возрастает-
У программных изделий на начальном этапе их эксплуатации отмечается наиболее высокий уровень отказов, которые обусловлены необнаруженными ошибками. После исправления ошибок службой сопровождения их интенсивность заметно снижается, однако свести отказы к нулю практически невозможно, так как при внесении исправлений и изменений в программу в ней могут появляться новые необнаруженные ошибки. Следует отметить различия и в содержании понятия отказа для программного изделия. Ошибка (отказ) в программном обеспечении — это ситуация, когда поведение программного обеспечения не соответствует его спецификациям, т.е. требованиям пользователя. Надежность программного обеспечения — свойство программного изделия выполнять заданные функции, сохраняя во времени значения установленных эксплуатационных показателей в заданных пределах при выполнении режимов и условий использования ЭВМ. Таким образом, ЖЦПИ заканчивается не в результате износа программного изделия, а из-за его морального "старения", т.е. когда оно перестает удовлетворять актуальным требованиям пользователей и его модификация не выгодна.
3. В отличие от других видов продукции, программные изделия пока не имеют широкого набора запасных частей.
Как правило, программное изделие изготавливается в соответствии с требованиями пользователя, а не собирается из существующих компонент, несмотря на то, что в последнее время предпринимаются попытки создания многократно используемых библиотек подпрограмм.
4. Особенность программного изделия состоит в том, что параллельно с эксплуатацией происходит и его совершенствование в процессе сопровождения программного обеспечения. Затраты на сопровождение, включающие затраты на модернизацию и адаптацию продукта к конкретным условиям пользователя, оказываются соизмеримыми с затратами на его разработку, а часто и превышают их. Вот почему основной принцип производства — максимальное увеличение выпуска при минимальных затратах — для программного продукта должен быть расширен с учетом затрат, осуществляемых на протяжении всего ЖЦПИ, включая его эксплуатацию и сопровождение. Перечисленные отличительные черты программных изделий привели к появлению в экономике нового направления, получившего название экономики жизненного цикла программного изделия. Создание программной продукции обязательно должно включать технико-экономический анализ процесса разработки с целью нахождения путей повышения производительности труда разработчиков и уменьшения суммарных затрат за счет совершенствования технологии разработки при обеспечении качества программного изделия- Для проведения технико-экономического анализа используется система технико-экономических показателей и критериев для оценки эффективности проводимых работ.
Основной критерий, который стремятся минимизировать, — это суммарные затраты и потери во всех фазах ЖЦПИ. Стоимость разработки при планировании работ оценивается исходя из общих трудозатрат (в человеко-месяцах) и срока разработки изделия (в календарных месяцах или годах), а также их значения по фазам ЖЦПИ. Обычно эти показатели определяются как функция от размера проектируемого программного изделия. Кроме трудозатрат на разработку необходимо установить аналогичные показатели и для фазы сопровождения.
Таким образом, разработка сложных программных изделий требует постоянного совершенствования как технологии их создания, так и процессов планирования и управления на основе использования технико-экономического анализа отдельных этапов и всего процесса в целом.
В настоящем учебном пособии описаны процедуры разработки программных изделий на основе одного из наиболее распространенных подходов, получивших название жизненного цикла программного изделия. Этот подход нашел отражение в отечественных и зарубежных стандартах, которые регламентируют не только виды деятельности на разных этапах жизненного цикла, но и процедуры управления процессом проектирования, внедрения и сопровождения разработанных программных продуктов.