книги / Оценка затрат на разработку программных средств
..pdfня позволяет исключить ряд классов ошибок и снизить вероят ность других. За унификацию текстов программ и повышение уров ня обобщенного описания решаемых задач преходится расплачи ваться снижением степени полезного использования ресурсов кон кретных реализующих ЭВМ. В результате расширения программ возрастают затраты на их размещение и исполнение в реализую щей ЭВМ. Расширение программ в объектном коде зависит от качества трансляторов, преобразующих исходный текст программ
вобъектный код (см. § 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