Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Надежность программного обеспечения систем обработки данных

..pdf
Скачиваний:
8
Добавлен:
12.11.2023
Размер:
8.74 Mб
Скачать

Необходимо также учитывать увеличение общей стои­ мости проекта за счет наличия обратной связи между этапами разработки:

 

 

I = 1

где /' —

время повторного выполнения операций (час),

с’

стоимостные затраты на единицу времени (час)

 

повторяемой операции,

k

количество повторяемых выполнений операций

Тогда общая формула определения стоимостных затрат будет иметь вид:

п т

 

h

2 обш =

‘ ч ' с ц +

с ]

<- I / - I

/ -

I

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

Результаты анализа статистических данных по стои­ мостным затратам на создание различных ПО можно использовать лишь в целях выявления факторов измене­ ния стоимости конкретного средства. Средние стоимост­ ные оценки, полученные на основе обобщения тенденций изменения стоимости создания ПО, не рекомендуется при­ менять на практике без учета особенностей процесса создания конкретного программного обеспечения.

4.2 ЦИКЛ ЖИЗНИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

За последние десятилетия программирование из ис­ кусства, которое было достоянием ограниченного количе­ ства людей, превращалось постепенно в самостоятельную составную часть отрасли обработки информации. Этому процессу способствовало бурное развитие вычислитель­ ной техники на базе микроэлектроники, стремление к ее эффективному использованию. На этой основе резко уве-

81

дичился объем работ по созданию надежного ПО большой трудоемкости, что обусловило повышенные требования к знаниям и квалификации разработчиков.

В настоящее время разработка ПО не под силу одно­ му человеку, она проводится большими коллективами разработчиков, которые, как правило, ие являются потре­ бителями созданного ими программного продукта, а вы­ ступают в роли производителей и поставщиков его дру­ гим организациям-потребителям. Таким образом, произво­ дится формирование и становление новой отрасли мате­ риального производства — производства программного обеспечения.

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

При рассмотрении процесса разработки будем придер­ живаться определения ПО как изделия, имеющего само­ стоятельное значение, процессы проектирования и изго­ товления которого аналогичны процессам, связанным с со­ зданием любых других изделий. Как и любое изделие, ПО имеет свой цикл жизни (ЦЖ), т. е. интервал времени от начального момента зарождения идеи создания програм­ много обеспечения до конечного момента — изъятия ПО из процесса эксплуатации

Все циклы, встречающиеся в природе, науке, технике и производстве, иллюстрируют факт повторения опреде­ ленной последовательности стадий развития при наличии интервала между повторениями. Из этого следует, что по­ нятием «цикл» обозначается всякого рода повторение, поддающееся измерению. В экономической науке явление периодического колебания объемов и продолжительности производства продукции называют экономическим циклом жизни, или, более кратко, циклом жизни. Заметим, что применительно к ПО это определение также может быть использовано.

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

8 7

значительного ускорения их создания. Одним из таких изделий и является программное обеспечение.

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

Важность и необходимость знания специфики процес­ сов разработки и эксплуатации ПО определяется прежде всего тем, что это достаточно дорогой вид продукции. Учитывая интеллектуальный характер труда при разра­ ботке ПО, можно отметить, что планирование производ­ ства ПО должно быть выполнено в соответствии с циклом жизни. Зная специфику разработки и эксплуатации ПО, можно организовать целенаправленное управление цик­ лом жизни изделия, тем самым продлевая период полез­ ной работы ПО и повышая эффективность и надежность его использования.

Типичный цикл жизни ПО представлен на рис. 4.1. Для проектов создания подобных средств характерно привлечение большого количества разработчиков и при­ сутствие различных фаз разработки. Процесс предусмат­ ривает наличие обратной связи между фазами с целью исправления ошибок или реализации дополнительных функций.

Объект разработки, являющийся входным для очеред­ ной фазы, есть результат работы предыдущей фазы, т. е. цель разработчиков заключается в преобразовании выхода предыдущей фазы в соответствующий вход сле­ дующей фазы.

Каждая фаза порождает неопределенность, обуслов­ ленную как сложностью самой решаемой задачи, так и сложностью взаимодействия участвующих в ее реализа­ ции специалистов.

В общем виде цикл жизни ПО можно считать со­ стоящим из трех этапов: определения, реализации и со­ провождения. Содержание этих этапов приближенно со­ ответствует определенным ГОСТом стадиям создания ПО и предусмотренным в них документам.

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

83'

Этапы

Рис 4 I Цикл жизни ПО

ни завершения одного этапа и перехода к следующему этапу.

Рассмотрим содержание укрупненных этапов. Определение программного средства. Процесс создав

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

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

84

тельную спецификацию требований, оптимальным обра­ зом учитывающую противоречивые желания заказчика.

Разработка требований в настоящее время считается основным и наиболее ответственным этапом создания ПО и проводится с учетом всего цикла жизни. Окончательной целью данного этапа является разработка полной, все­ объемлющей и недвусмысленной спецификации, которая должна служить основой для взаимодействия как между различными составными частями ПО, так и между раз­ личными группами специалистов, участвующих в разра­ ботке. Требования должны описывать то, что ПО должно делать, а не то, как его разрабатывать.

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

Набор требований находит свое выражение в поняти­ ях и терминах конкретного приложения и ца языке, близ­ ком пользователю. Далее разработчики преобразуют пе­ речень требований в технические спецификации, имеющие своей целью получение правильного технического зада­ ния, полного в смысле отражения требований и непро­ тиворечивого с точки зрения реализации.

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

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

85

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

Реализация. После завершения проектирования можно начинать реализацию системы. При этом каждому из разработчиков поручается работа над одним или несколь­ кими модулями. Модули в процессе дальнейшей детали­ зации разбираются на процедуры, разрабатываются ма­ шинные алгоритмы этих процедур и выполняется коди­ рование программ.

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

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

В ходе реализации ПО необходимо выполнять тща­ тельный контроль правильности программ. Современные процедуры подтверждения правильности программ бази­ руются на процедуре тестирования, выполняемой, вначале на модульном или процедурном уровне, затем функцио­ нально над отдельными компонентами. По мере проверки отдельных компонент они объединяются в систему с по­ следующим системным тестированием.

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

<6

Сопровождение. Процесс сопровождения начинается после выпуска ПО и охватывает действия, связанные с исправлением выявленных ошибок и внесением измене­ ний, необходимость которых обусловлена развитием сре­ ды функционирования.

Важность сопровождения подтверждается тем, что расходы на него составляют больше половины всех рас­ ходов, связанных с разработкой и тестированием ПО. Это объясняется, во-первых, тем, что понятие сопровож­ дения включает очень широкий спектр различных видов деятельности, и, во-вторых, необходимостью постоянного изменения ПО, свойственного самой природе его исполь­ зования.

Вариант детального распределения совокупных затрат по фазам жизненного цикла показан на рис. 4.2. Здесь форма общей кривой трудовых затрат на разработку и сопровождение была получена на основе анализа статис­ тических данных множества (свыше 100) программных средств. Оказалось, что вид кривой трудовых затрат для этих средств примерно одинаков: увеличение потребления трудовых ресурсов на начальной стадии, достижение пика потребления и экспоненциальный спад на завер­ шающей стадии. Это свойство навело на мысль о возмож­ ности моделирования процесса планирования и управ­ ления разработкой ПО с целью повышения эффектив­ ности.

Трудом* ресурсы (чел.тод1

Рнс. 4 2 Распределение трудовых ресурсов по фазам

цикла жизни ПО:

— время завершения разработки.

(

кривая трудозатрат на овределеине требований к системе в делом

г

— кривая трудозатрат нв овреаедеяке требований к ПО

— краавя труаозвтрят на вроеитированне. кодирование и отладку

;

кривая трудозатрат на тестирование ПО.

*

кривая трудозатрат ка ввод ПО в эксплуатацию

87

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

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

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

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

4.3 ФАКТОРЫ, ОПРЕДЕЛЯЮЩИЕ ЗАТРАТЫ НА РАЗРАБОТКУ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

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

88

Рнс. 4 3. Факторы, определяющие стоимость разработки ПО

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

Факторы, определяющие затраты на разработку ПО, можно условно разделить на три группы (рис. 4.3).

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

В результате исследования зависимости стоимостных затрат от объема ПО, проведенного фирмой TRW [10], была обнаружена положительная корреляционная зави­ симость с коэффициентом г = 0,89.

В этом исследовании используемые языки програм­

89

мирования представлены машинно-ориентированными языками и языками высокого уровня. По результатам исследования стоимость написания одной исходной коман­ ды иа языке высокого уровня в два раза ниже, чем при использовании языка Ассемблера.

При рассмотрении фактора области приложения при­ нято выделять ПО реального времени, для которых затра­ ты на одну исходную команду примерно в 5 раз выше, чем для ПО, отличных от реального времени.

Надежность разрабатываемого ПО существенно влия­ ет на расходы по его разработке. С увеличением требова­ ний по надежности возрастают прежде всего расходы на тестирование.

Одним из важных факторов, влияющих на затраты, является сложность ПО. Известно много попыток кор­ ректировки предварительно вычисленных затрат на соз­ дание ПО с учетом таких показателей, как количество операторов присвоения, наличие и сложность взаимо­ связей по модулям н данным и т. д.

В зависимости от назначения разрабатываемого ПО затраты на разработку достаточно широко варьируют Так, разработка операционной системы и ее компонентов обходится в 2—2,5 раза дороже разработки прикладных программ или программ-утилит в расчете на одну исход­ ную команду [6].

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

Третью группу составляют факторы, определяемые окружающей средой разработки. Представление окру­ жающей среды разработки связано с четким пониманием разработчиками условий функционирования создаваемо­ го ПО. Если в процессе тестирования выполнены условия, накладываемые окружающей средой, то это упрощает процесс адаптации продукта и соответственно снижает расходы на его установку. Дополнительные затраты на адаптацию ПО к действующим операционным условиям могут быть достаточно большими.

Факторы, определяемые как размеры, принятая струк­ тура базы данных признаются предельно важными для проектов, ориентированных на обработку больших мас-

90

Соседние файлы в папке книги