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

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

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

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

вобъектный код (см. § 1.3).

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

шой разброс. Для языка ПЛ-1 расширение оценивается от 3 до 13, а для ПАСКАЛЯ от 3 до 8 [6, 52]. Введение некоторых методиче­ ских ограничений при использовании ЯВУ для КП реального вре­ мени способствует снижению коэффициентов расширения, что отражено в табл. 4.1.

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

та б л и ц а 4.1

ИЗМЕНЕНИЕ ТРУДОЕМКОСТИ И РАСШИРЕНИЕ ПРОГРАММ В ЗАВИСИМОСТИ ОТ УРОВНЯ ЯЗЫКА ПРОГРАММИРОВАНИЯ

Уровень

Характеристика языка

Коэффициент изме­

Относительное

языка

нения трудоемкости

расширение

програм*

программирования

 

при разработке

программ при

мирования

 

 

 

 

сложного КП

трансляции

 

 

 

 

 

реального времени

 

I

Покомандный

автокод-ассемб­

1

1

2

лер

 

 

 

0,95

1.1

Макроассемблер

языки

высо­

3

Алгоритмические

0,8—0,9

1,5-3

 

кого уровня

(ПЛ-1, Паскаль,

 

 

4

Ада)

 

языки

сверх­

0,7—0,8

5 - 6

Алгоритмические

 

высокого уровня

(ЛИСП, Си-

 

 

мула, АПЛ)

171

ципе может быть выбран оптимальный уровень языка программи­ рования, при котором минимизируются суммарные затраты (4.2)

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

в процессе эксплуатации.

Опыт и интуиция разработчиков программ позволяют для оп­ ределенных классов задач выбирать эффективные языки програм­ мирования без формального анализа затрат. Сформировался ряд практических рецептов и традиций для областей эффективного применения основных языков программирования при определен­ ных классах алгоритмов. Например, программы организации вы­ числительного процесса, ввода-вывода, взаимодействия с термина­ лами и другие служебные программы с интенсивным вызовом раз­ рабатываются преимущественно на языках уровня ассемблера. Благодаря этому экономится машинное время, так как при разра­ ботке на ассемблере отсутствует расширение программ при транс­ ляции и обеспечивается наилучшая их адаптация* к архитектуре реализующих ЭВМ. На ассемблере создаются также программы некоторых комбинаторных задач, для которых требуется особен­ но экономное использование большого машинного времени. Наи­ более активно ЯВУ применяются при разработке относительно не­ больших (первый класс в § 1.1) вычислительных программ и раз­ личных программ обработки информации (второй класс). Для ряда областей применения и классов алгоритмов определилось преимущественное использование наиболее популярных языков вы­ сокого уровня ПЛ-1, Паскаль, Алгол-60, Фортран, Кобол и др. Однако рецепты выбора уровня языка программирования и кон­ кретного типа языка носят качественный и во многих случаях субъективный характер.

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

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

Формализованная оценка оптимального уровня языка програм­ мирования наиболее актуальна и может быть конструктивно про­ ведена для сложных КП реального времени, реализуемых на ЭВМ

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

Вэтом случае расширение программ из-за применения ЯВУ тре­

172

интерпретаторы для исполнения программ различных ЭВМ на вы­ числительной машине с иной системой команд, подобные средства резко (в десятки и сотни раз) снижают производительность ис­ полняющей ЭВМ и неэффективно используют ее память. Поэтому ниже рассматривается проблема переносимости программ при их разработке на языках высокого уровня типа Ада [38, 59] при ус­ ловии обеспечения эффективного использования памяти и произ­ водительности ЭВМ.

Эффективность переноса программ на языках высокого уровня

при разнотипных ЭВМ определяют следующие факторы:

различие структуры памяти, регистров и системы команд ЭВМ; различие структуры и деталей систем ввода-вывода данных; различие операционных систем и организации вычислительного

процесса в разнотипных ЭВМ;

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

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

Переносимость функциональных и стандартных программных модулей ( ~ 8 0 —90% всего КП) может быть обеспечена наиболее просто на языках высокого уровня типа Ада. Для этого в машин­ но-зависимую часть компилятора должны быть введены характе­ ристики памяти и структуры команд реализующей ЭВМ, а также унифицировано использование регистров и структурных элементов оперативной памяти. Языки высокого уровня типа Ада позволяют расширить переносимость текстов программ путем применения на­ страиваемых модулей. Развитый аппарат макрогенерации дает возможность использовать один и тот же отлаженный текст для генерации программ при различных фактических параметрах: ти­ пах данных, процедурах. Сгенерированные в каждом случае но­ вые конкретные программы включаются как готовые модули в КП. При этих условиях использование кросс-системы, настраиваемой иа тип ЭВМ, или резидент-системы автоматизации проектирова­ ния программ позволяет один и тот же текст программного моду­

180

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