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

книги / Оценка затрат на разработку программных средств

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

му возрастанию затрат, что часто не учитывается при планирова­ нии. В результате для сложных и сверхсложных КП всегда есть риск проявления неустраненных ошибок. Стремление резко уско­ рить разработку, снизить затраты или нерационально увеличить нормативы для специалистов всегда сопряжено со снижением ка­ чества в трудно оцениваемых пределах. Приводимые ниже дан­ ные (гл. 3) и анализ факторов (гл. 2 и 4) ориентированы на опре­ деленные классы ПС с неформализованным качеством, удовлетво­ ряющим пользователей. Отдельно анализируется проблема повы­ шения затрат для достижения высокой надежности функциониро­ вания КП реального времени (см. § 4.1). При рассмотрении ТЭП разработки ПС предполагается достаточно высокое, однако не всегда зафиксированное качество программ.

Основное внимание в данной книге сосредоточено на первых двух целях анализа (гл. 2 и 3). Помимо этого, частично проводит­ ся анализ методов и средств снижения совокупных затрат и сро­ ков создания сложных КП (гл. 4). Четвертая цель пока не достиг­ нута. Имеющиеся попытки введения приблизительных нормати­ вов либо не способствуют выполнению их управляющей и регла­ ментирующей роли (если они занижены), либо приводят к сниже­ нию качества программ (если они завышены). Поэтому приводи­ мые ниже ТЭП следует использовать с учетом всех условий, для которых они получены, и нецелесообразно применять в качестве нормативов при конкретных разработках. Они могут служить только ориентирами для оценки экономических характеристик ана­ логичных КП.

Единицы измерения технико-экономических показателей про­ цесса разработки программ. Одна из сложных задач при анализе

ТЭП

разработки программ

состоит в выборе и формализации

единиц измерения объ­

 

 

 

 

 

екта

разработки

и за­

 

 

 

 

 

трат

на

его создание.

 

 

 

 

 

Неопределенность

еди­

 

 

 

 

 

ниц

измерения

значи­

 

 

 

 

 

тельно влияет

на

чис­

 

 

 

 

 

ленные значения

пока­

 

 

 

 

 

зателей и их разброс в

 

 

 

 

 

опубликованных

рабо­

 

 

 

 

 

тах. Этому также

спо­

 

 

 

 

 

собствует

неоднознач­

 

 

 

 

 

ность учитываемых эта­

 

 

 

 

 

пов

разработки

про­

 

 

 

 

 

грамм и категорий спе-

 

 

 

 

 

циалистов, трудозатра--

рис

, ,

Качест>0

программных

средств раз-

ТЫ

КОТОрЫХ

З а м е т н о

личной

сложности I

зависимости

от затрат на

влияют на ТЭП. Даже

разработку Ср

 

 

31

при одних и тех же единицах измерения объектов разработки и затрат на их создание методики определения количественных зна­ чений этих показателей пока не формализованы, что вносит допол­ нительную дисперсию в их значения, приводимые в различных ис­ следованиях. В результате могут делаться принципиально невер­ ные выводы, например об очень высокой эффективности некоторых частных технологических методов или систем [6, 48, 99]. Для умень­ шения этих неопределенностей и возможных методических ошибок в ТЭП программ необходимо определить основные понятия и еди­ ницы измерения: размера или объема программ, трудозатрат на их разработку, производительности труда специалистов и некото­ рых частных характеристик.

Размер или объем программ в настоящее время приводится в публикациях в различных единицах, что может изменять их чис­ ленные значения для одних и тех же программ в несколько раз [6, 51, 32]. В качестве таких единиц чаще всего используются чис­ ленные значения: строк на языке программирования, предложений на ассемблере, символов в тексте программы, байт или команд в объектном коде после трансляции и т. п. Каждая из этих единиц измерения имеет некоторые преимущества при определенных це­ лях исследования. Однако при технико-экономическом анализе различных проектов применение в каждом из них своих единиц для характеристики объекта разработки приводит к дополнитель­ ному разбросу численных значений объемов и к несопоставимости измеренных технико-экономических показателей. Влияние единиц

измерения объема программ на технико-экономические показате­ ли можно значительно уменьшить, если учесть их принципиальные особенности и разделить на две группы единиц измерения [32]:

группу, характеризующую объем исходных текстов программ, которые разрабатываются и анализируются человеком, отражаю­

щую сложность и трудоемкость создания ПС; группу, отражающую объем программ, размещаемых в реали­

зующей ЭВМ, и характеризующую объем памяти и производитель­

ность ЭВМ, необходимые для рабочего функционирования ПС (рис. 1.2).

Эти две группы единиц отражают объем программ с сущест­ венно разных позиций и должны использоваться в зависимости от целей анализа. Хотя между ними есть корреляция, но в общем случае объемы программы, измеренные различными группами единиц, оказываются практически несопоставимыми из-за наличия между ними промежуточного звена-преобразователя (транслято­ ра) с не полностью определенными характеристиками (/Cn2i и Кп2о

на рис. 1.2). Это обусловлено различием трансляторов, которые пре­ образуют исходные тексты программ, разработанные человеком, ft разделы памяти реализующей ЭВМ, заполненные командами, кон-

32

Рис. 1.2. Схема взаимосвязей значений объемов программ при применении различных единиц измерения объема

стентами или выделенные под переменные, а также особенностями языков программирования и машинных команд [13, 59].

Объем исходных текстов программ прежде всего отражает тру­

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

Объем программ, размещаемых в ЭВМ, влияет на характери­

стики и стоимость машин, которая зависит от необходимой памя­ ти и производительности ЭВМ. Затраты на реализацию ПС в каж­ дой ЭВМ изменяются приблизительно в таком же широком диапа­ зоне^ как и трудоемкость их разработки (на четыре порядка). Массовое тиражирование некоторых ПС может дополнительно на несколько порядков увеличивать диапазон затрат на реализующие ЭВМ (см. § 2.2).

П е р в а я г р у п п а е д и н и ц и з м е р е н и я о б ъ е м а ПС в той или иной степени отражает сложность разработанного текс­ та программ. К ним относятся:

символы в исходном тексте программы на любых языках про­ граммирования;

лексемы, объединяющие группу символов, имеющих общее смысловое содержание в тексте программы;

операторы языка программирования уровня ассемблера; строки текста программы на языке программирования высоко­

го уровня.

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

тельно, тем более, что отсутствует опыт использования этого пока­ зателя.

Число символов достаточно адекватно отражает сложность раз­

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

бок в процессе разработки [53]. Число символов

в тексте легко

и однозначно подсчитывается при любых языках

программирова­

34

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

При возрастании уровня языка программирования число сим­ волов, имеющих непосредственное смысловое содержание, убыва­ ет за счет объединения их в группы, отражающие обобщенные понятия. Это усложняет оценку объема текста по числу символов. Однако большинство символов не группируется,^ а допустимое группирование обычно ограничено 6—8 символами. Поэтому пер­ вичная оценка сложности текста на языках высокого уровня мо­ жет проводиться прямым подсчетом числа символов в тексте. По­ следующее уточнение сложности текста возможно путем .введения усредненных коэффициентов, отражающих, степень объединения символов в группы. OueijKif текстов программ, написанных на

языке ПЛ-1, показывают, что для автономных модулей этот коэф­ фициент имеет значение в пределах ~ 2—3.

Число операторов на ассемблере наиболее широко применяется

на практике для оценки объема текста программ. Это определяет­ ся массовостью применения в настоящее время ассемблеров (свыше 50% по всем классам программ и до 90% для программ реального масштаба времени [52, 78]). Ассемблеры обеспечивают наилуч­ шее использование ресурсов памяти и производительности реали­ зующих ЭВМ и всегда отражают особенности архитектуры и сис­ темы команд каждой машины. Тем не менее при одном и том же алгоритме число операторов на ассемблере без учета макрорасши­ рений относительно мало зависит от особенностей систем команд для большинства современных ЭВМ. Макрокоманды могут значи­ тельно изменять объем текста программы. Поэтому целесообразно оценку объема программ на ассемблере проводить с учетом рас­ крытия макрокоманд. При этом условии число операторов в тек­ стах программ на разных ассемблерах является наиболее стабиль­ ной характеристикой их объема.

Разброс числа операторов на различных ассемблерах при оди­ наковых алгоритмах зависит в основном от разрядности реализу­ ющей ЭВМ. Для двух- и 'четырехбайтных ЭВМ соотношение числа операторов изменяется не более чем на 20% относительно ассемб­ лера ЕС ЭВМ. Для однобайтных ЭВМ, например, на базе микро­ процессора КР580ИК80, число операторов в тексте программы почти в два раза больше при одинаковых алгоритмах, чем на ас­

семблере ЕС ЭВМ [29].

Подсчет числа операторов на ассемблере в тексте программы требует установления правил выделения операторов и немного сложнее, чем подсчет числа символов. Дополнительные затраты

2*

35

могут быть оправданы повышением наглядности и стабильности

оценок объема ПС.

Число строк на языках высокого уровня (ЯВУ) в значительной

степени зависит от конкретных особенностей языка. Все языки программирования высокого уровня ориентированы на определен­ ные классы задач. Благодаря этому проблемно-ориентированные языки позволяют получать компактные тексты соответствующих классов программ. Однако применение их для других классов при­ водит к расширению текста и не всегда рационально. ЯВУ значи­ тельно различаются степенью обобщенного описания содержания алгоритмов из-за проблемной ориентации, применения разных структур операторов, операндов и процедур, что может приводить к различию (в несколько раз) числа строк текста, по сути, одних и тех же программ (Кл2б2 на рис. 1.2).

Число строк текста программ на ЯВУ характеризует сложность программы для ее разработчика, однако оно не отражает функци­ ональную (потенциальную) сложность, которая значительно выше за счет применения процедур. Последняя отражается особенно сильно при комплексной отладке сложных ПС. Перечисленные факторы в совокупности .приводят к тому, что объем программ на различных ЯВУ трудно привести к некоторым унифицированным единицам. Для такой унификации необходимо выделить базовый, широко применяемый язык программирования и определить коэф­ фициенты пересчета Кп2б2 числа строк при разработке ПС на дру­

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

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

байты, занятые текстом программ в объектном коде и пере­ менными базы данных в памяти ЭВМ;

команды (операции) реализующей ЭВМ, составляющие текст исполняемой программы в объектном коде;

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

Число байтов оперативной и постоянной памяти реализующей

ЭВМ, занятых при исполнении программы, — наболее просто

36

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

Число команд, занятых программой в реализующей ЭВМ, наи­

более полно соответствует числу исполняемых операторов на ас­ семблере в исходном тексте программы. В различных типах ЭВМ команды занимают различное число байтов или частей слова. Команды во многих машинах имеют переменную структуру по чис­ лу -занимаемых байтов в зависимости от кода операции, и могут возникать затруднения при выделении команд в машинном слове. Логическая сложность команд зависит также от методов использо­ вания в них регистров. Число команд в объектном коде програм­ мы,. функционирующей на ЭВМ, позволяет наиболее просто увязы­ вать затраты на исполнение и на разработку программ, так как Кто и Кою (см. рис. 1.2) близки к единице.

Число слов, занятых программой и данными в ЭВМ, имеет пра­

ктически те же особенности при измерении объема программ, что и число байтов. Однако следует учитывать, что реализующие СЭВМ могут значительно различаться по числу байтов в слове (ча­ ще всего в диапазоне от I до 8 байт), что дополнительно затрудня­ ет сопоставление объема различных программ при использовании этой единицы измерения и их унификацию. Для устранения этого препятствия иногда все объемы программ приводят к наиболее широко применяемой структуре слов из 4 байт.

Корреляция между объемами программ, измеренными двумя

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

качество трансляторов, преобразующих исходный текст про­ граммы в объектный код ЭВМ (КП2о и Кбго);

особенности языка программирования, на котором разрабаты­

вается исходный текст (/Спгбг и Kniei);

архитектура ЭВМ, реализующей разработанные программы

(КпОбо) •

Задача состоит в выборе базовых унифицируемых единиц изме­ рения исходного текста и исполняемых (объектных) программ, при применении которых имеется наибольшая корреляция измеряемых

37

объемов программ. Для остальных единиц измерения необходимо найти методы пересчета к базовым единицам с учетом особенно­ стей языков программирования, применяемых трансляторов и ар­ хитектуры ЭВМ. Кроме того, следует определить коэффициенты корреляции с базовыми единицами измерения при применении остальных единиц. С этих позиций наиболее адекватной единицей измерения объема программ является число операторов на машин­ ноориентированном ассемблере, которое имеет корреляцию с чис­

лом команд в объектном коде реализующей ЭВМ Кто и Кбю, близкую к единице. В этом случае при сопоставлении измеренных

объемов программ

влияет

единственный фактор — архитектура

реализующих ЭВМ. Этот фактор

может учитываться

путем не­

больших коэффициентов перевода

(Кщб1~1,1— 1,3), определяемых

путем анализа особенностей

структуры

и системы команд ЭВМ,

а также конкретного

ассемблера. Для

сопоставления

численных

значений объемов программ

следует выделить базовый, наиболее

широко применяемый и известный в стране ассемблер. В этом ка­ честве наиболее целесообразно использовать ассемблер ЕС ЭВМ, который ниже рассматривается как базовый. Однако при анализе единиц измерения объема программ для оценки ТЭП следует учи­ тывать некоторые парадоксальные ситуации.

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

тор с ЯВУ и чем ниже его оптимизирующие характеристики (уве­ личивается Кп2о или Кого)» тем больше объем программ в реализу­

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

коду реализующей ЭВМ

для программ, разработанных на ЯВУ.

В т о р о й п а р а д о к с .

При использовании числа строк исход­

ного текста программы на ЯВУ для анализа производительности труда разработчиков необходимо учитывать сжатие текста при повышении уровня языка (Кпгбг). Изменение числа строк в тексте

38

программы и трудозатрат на его разработку в зависимости от уровня языка подчиняется разным законам. В частности, число строк программы зависит от конкретных правил формирования строк на ЯВУ, что практически не отражается на трудоемкости. Она не зависит от того, как упорядочивается текст по вертикали и по горизонтали и как операторы объединяются в строки текста.

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

том, что рассчитанная по этим данным производительность труда в строках ЯВУ на единицу времени оказывается тем ниже, чем выше уровень языка программирования [69].

Для разрешения этого парадокса при анализе производитель­ ности целесообразно пересчитывать число строк на ЯВУ в экви­ валентное число операторов на ассемблере. Коэффициенты пере­ счета Kn2i для каждого ЯВУ могут быть оценены эксперименталь­

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

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

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

39

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

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

П р и м е р э к с п е р и м е н т а л ь н ы х о ц е н о к и с о п о ­

с т а в л е н и я

е д и н и ц

и з м е р е н и я

о б ъ е м а

ПС. На основе

проведенного

анализа

можно сделать

вывод о

целесообразности

применения в качестве базовых единиц измерения объема ПС чис­ ла операторов Пб1 на наиболее распространенном ассемблере. Для

обобщения технико-экономических показателей любых разработок ПС необходимо обеспечить [32]:

расчет числа строк на применяемых ЯВУ ПП2 и определение среднестатистических коэффициентов Kn2i Для их приведения (без

учета расширения вследствие трансляции) к числу операторов на ассемблере той же ЭВМ, для которой разработаны программы на ЯВУ (сжатие текстов на ЯВУ относительно текста на ассемблере); определение коэффициентов расширения, трансляторов с ЯВУ при получении программ в объектном коде реализующей ЭВМ как

отношения числа команд

в объектном

коде реализующей ЭВМ

Поп, эквивалентного числу

операторов

соответствующего ассемб­

лера, к числу строк на ЯВУ в тексте программ П„2 (полное рас­ ширение транслированного текста в объектном коде реализующей ЭВМ относительно текста на ЯВУ — Кого);

пересчет числа операторов программ, написанных на ассембле­ рах для различных типов ЭВМ ПП1, к числу операторов на базо­ вом ассемблере Пб1 (расширение ассемблеров относительно базо­

вого — Kni6i).

Разнообразие ЯВУ, ассемблеров и архитектуры реализующих ЭВМ не позволяет заранее определить перечисленные коэффици­ енты для всех важных условий. Поэтому ниже приводятся только примеры таких оценок [32], которые могут служить ориентирами при анализе ТЭП конкретных разработок КП, а также демонст­ рируют методику определения коэффициентов пересчета единиц измерения объемов программ. Для решения перечисленных выше задач проводился анализ ранее разработанных программ и спе­ циальное опытное программирование одних и тех же алгоритмов на различных языках.

Для оценки сжатия текста на ЯВУ относительно текста на ас­ семблере— коэффициент Кб21 в качестве базовых были приняты

одни из наиболее распространенных в стране языков: язык верх­

40

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