Скачиваний:
387
Добавлен:
01.05.2014
Размер:
1.33 Mб
Скачать

Значение уровня языка

В течение последних десятилетий значительная доля усилий специалистов в области языков программирования была направлена на разработку и реализацию новых языков и часто при этом выполнялось усовершенствование ранее существовавших языков Но из-за отсутствия количественного измерения вывод о реальном улучшении языка был весьма субъективным Без принятия гипотезы соотносящей конкретный язык с мысленной работой по его использованию нельзя с уверенностью сказать положительно или отрицательно его введение Объединяя уравнение (47) с уравнением работы получаем что число элементарных мысленных различений требуемых для написания некоторой программы должно подчиняться закону обратных квадратов относительно уровня языка или

Е = V*3/2 (48)

Из соотношений Е = V2/V* и V = V*/L следует что Е = V*/L2 откуда при помощи равенства L = /V* выводим (48) Для небольшой выборки программ написанных на двух языках можно определить средние значения  и с их помощью найти сравнительную трудоемкость Так выигрыш во времени программирования при переходе от языка низкого уровня 1 к языку высокого уровня 2 определяется соотношением

ΔT/T = (T1 - T2) / T1 = 1 - T2 / T1 = 1 - (1)2 / (2)2 (4.9)

Тогда по данным табл.6 при переходе от Ассемблера к Фортрану выигрыш во времени составит 40% , от Ассемблера к ПЛ-1 - 67%.

Важность понятия уровня языка подтверждается также из уравнения (48) следующими обстоятельствами Поскольку потенциальный объем V* и среднее значение  должны быть известны или вычислимы сразу после определения программистского проекта и выбора языка это дает рациональную основу для планирования времени программирования

С другой стороны, подставляя в (4.7) выражение для L из (3.2), получим

 = (V*)2 / V (4.10)

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

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

Метрика числа ошибок в программе.

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

Время, требуемое на разработку программы, характеризуется числом элементарных мыс­ленных различений Е. Следовательно, число моментов, в которые можно сделать ошибочное различение, также определяется значением Е или связанным с ним значением объема программы V. По утверждениям психолога Джорджа Миллера (закон “7±2”) мозг человека может в своей “сверхбыстрой” памяти обрабатывать пять “объектов” одновременно (т. е. получать из них результат). Представив эту способность мозга как Екрит, получим ее программное значение.

Пусть каждый объект так же, как и результат, соответствует единице уникальных операндов в потенциальном языке, т. е. 2* = 6. С помощью равенств 1* = 2 и

V* = (1* + 2*) log2 (1* + 2*) (4.11)

получаем

V*крит = (2 + 6)log2(2 + 6) = 24 (4.12)

Далее из уравнения (4.8) имеем

E = (V*)3/2 ,

а из табл. 6 получаем для английского языка = 2,16. Тогда для описания программы на уровне английского языка приходим к следующему выводу

Екрит = (24)3 * (2,16)2 = 3000 (4.13)

Определим теперь Ео как среднее число элементарных различений между возможными ошибками в программировании, а В — как число переданных ошибок в программе. Можно ожидать, что

В = Е/Ео, (4.14)

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

Однако уровень программы L, собственно, и является мерой такой избыточности. Заметим, что только в потенциальном языке, на котором любая программа может быть выражена в виде вызова процедуры, не повторяются ни операторы, ни операнды. Для такого потенциального языка L = 1. Для всех же остальных языков L уменьшается с увеличением избыточности.

Следовательно, вместо уравнения (4.14) реальнее ожидать, что

B = L * Е/Ео. (4.15)

По правилам алгебры произведение L  Е можно заменить на V, что даст

B=V/Eo. (4.16)

Если теперь приравнять Eo из уравнений (4.14) значению Екрит, найденному по уравнению (4.13), то получим соотношение

B= V / 3000 (4.17)

C другой стороны, подставив в (4.17) выражение для V из (4.10), получим

B= (V*)2 / (3000*) (4.18)

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