Число операторов в программе

Трудозатраты (трудоемкость) разработки компьютерной программыскладывается из целого ряда затрат:

где tu – затраты труда на исследование алгоритма решения задачи;

tа – затраты на разработку блок-схемы алгоритма;

tn =- затраты на программирование;

tотл – затраты на отладку программы на ПК;

tд – затраты на подготовку документации по задаче.

Затраты труда на изучение описания задачи с учетом уточнения описания и квалификации программиста измеряются в человеко-часах и определяются по формуле:

, (2)

где Q – число условных операторов;

В – коэффициент увеличения затрат;

К – коэффициент квалификации разработчика (зависит от стажа работы программиста)

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

где q – предполагаемое число операторов;

с – коэффициент сложности программы (1…2);

р – коэффициент коррекции программы в ходе ее разработки (0,5…1).

При разработке учебных компьютерных программ, предполагаемое число операторов (q) включает количество студентов, преподавателей, техников-лаборантов, использующих программный продукт в учебном процессе.

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

― предполагаемое число операторов q=130;

― коэффициент сложности с= 1,5;

― коэффициент коррекции р=0,75.

Исходя из этих условий, воспользовавшись формулой (3), определим число условных операторов Q:

Q = 130 * 1,5 * ( 1 + 0,75 ) = 341 чел.

В – коэффициент увеличения затрат характеризует увеличение затрат труда вследствие недостаточного полного описания задачи, уточнений и некоторой доработки. Этот коэффициент может принимать значения от 1,2 до 5. (можно взять среднее значение). Возьмем его среднее значение – 3,1.

К – коэффициент квалификации разработчика зависит от опыта работы программиста с данным программным продуктом. Коэффициент квалификации принимает дискретные значения в зависимости от стажа:

а) до двух лет К=0,8;

б) от двух до трех К=1;

в) от трех до семи К=1,3…1,4;

г) свыше семи лет К=1,5. 1,6.

Программированием я занимаюсь не более двух лет, поэтому коэффициент квалификации принимает дискретное значение равное 0,8.

Рассчитаем затраты труда на изучение описания задачи с учетом уточнения описания и квалификации программиста, подставив выбранные значения в формулу (2):

tu = ( 341 * 3,1 ) / ( 75 * 0,8 ) = 1057 / 60 = 18 чел.

ta – затраты труда на разработку алгоритма решения задачи в человеко-часах и рассчитываются по формуле:

, (4)

где Q – число условных операторов;

К – коэффициент квалификации разработчика;

tn –затраты времени на программирование определяются методом самофотографии и составляют примерно 20-30% от общих трудозатрат.

Подставляя Q=341, K=0,8, В=3,1 и принимая коэффициент при К равным 60, определим затраты труда на разработку алгоритма решения задачи:

ta = ( 341 * 3,1 ) / ( 60* 0,8 ) = 1057,1 / 48 = 22 чел.час

Затраты на отладку программы на ПК при автономной откладке одной задачи определяется по формуле:

, (5)

где Q – число условных операторов;

К – коэффициент квалификации разработчика.

Подставляя Q=341, K=0,8, В=3,1 и принимая коэффициент при К равным 40, определим затраты на отладку программы на ПК при автономной отладке одной задачи:

tотл (авт) = ( 341 * 3,1 ) / ( 40 * 0,8 ) = 1057,1 / 32 = 33 чел.час

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

Тотл = 1,5 * 33 = 50 чел.час

Затраты труда на подготовку документации по задаче складываются из затрат труда на подготовку материалов в рукописи и затрат на редактирование, печать и оформление документации, определяются по формуле:

где tдn – затраты труда на подготовку материалов в рукописи;

tдp -затраты на редактирование, печать и оформление документации.

Затраты труда на подготовку материалов в рукописи определяются по формуле:

, (8)

где Q – число условных операторов;

К – коэффициент квалификации разработчика.

Подставляя Q=341, K=0,8, В=3,1 и принимая коэффициент при К равным 160, определим затраты труда на подготовку материалов в рукописи:

tn = ( 341 * 3,1 ) / ( 160 * 0,8) = 1057,1 / 128 = 8 чел.час

Затраты на редактирование, печать и оформление документации прямо пропорционально зависят от затрат на подготовку материалов в рукописи. Эти затраты определяются по формуле:

, (9)

Подставив в вышеприведенную формулу рассчитанное значение затрат на подготовку материалов в рукописи определим затраты на редактирование, оформление и печать документации:

По формуле (7) определим затраты труда на подготовку документации по задаче:

Затраты времени на программирование, определены методом самофотографии и составляют 44 чел.час.

Используя рассчитанные данные, определим суммарную трудоемкость разработки по формуле (1), учитывая, что затраты труда непосредственно на программирование составляют 44 чел.час:

T = 18 + 22 + 44 + 33 + 14 = 131 чел.час

Расчет трудозатрат на разработку программного продукта сводится в таблицу 21.

Таблица 21 – Расчет величины и структуры трудозатрат на разработку программного продукта

Читайте также:  Что такое edr в bluetooth
Виды трудозатрат Индекс Трудоемкость, чел.час. Структура трудозатрат, %
1 Затраты труда на исследование алгоритма решения задачи tu
2 Затраты труда на разработку блок-схемы алгоритма ta
3 Затраты труда на программирование tn
Продолжение таблицы 21 – Расчет величины и структуры трудозатрат на разработку программного продукта
4 Затрату на отладку программы на ПК tотл
5 Затраты на подготовку документации tд
Итого Т 100,0

Дата добавления: 2015-04-21 ; просмотров: 8350 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

Метрики сложности программ

При оценке сложности программ, как правило, выделяют три основные группы метрик: метрики размера программ, метрики сложности потока управления программ и метрики сложности потока данных программ.

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

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

К группе оценок размера программ можно отнести также метрику Холстеда . За базу принят подсчет количества операторов и операндов используемых в программе, т.е. определение размера программы.

Основу метрики Холстеда составляют четыре измеряемые характеристики программы: h 1 – число уникальных операторов программы, включая символы-разделители, имена процедур и знаки операций (словарь операторов); h 2 – число уникальных операндов программы (словарь операндов); N 1 – общее число операторов в программе N 2 – общее число операндов в программе.

Опираясь на эти характеристики, получаемые непосредственно при анализе исходных текстов программ, Холстед вводит следующие оценки

Словарь программы h=H2 + H3

Длину программы N=N1+N2

Объем программы V=N log2 h

Смысл оценок h и N достаточно очевиден, поэтому подробно рассмотрим только характеристику V.

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

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

CALL SIMPLE (X, Y),

где Y- массив численных значений, содержащих искомое число X.

Теоретический словарь в этом случае будет состоять из

а его длина, определяемая как

h* = H2* + H3* будет равна 4.

Используя h*, Холстед вводит оценку V*: V* = h*log2h*,

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

Вторая наиболее представительная группа оценок сложности программ – метрики сложности потока управления программ. Как правило, с помощью этих оценок оперируют либо плотностью управляющих переходов внутри программ, либо взаимосвязями этих переходов.

И в том и в другом случае стало традиционным представление программ в виде управляющего ориентированного графа G(V,E), где V – вершины, соответствующие операторам, а E – дуги, соответствующие переходам. В дуге (U,V) – вершина V является исходной, а U – конечной. При этом U непосредственно следует V, а V непосредственно предшествует U. Если путь от V до U состоит более чем из одной дуги, тогда U следует за V, а V предшествует U.

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

Для вычисления цикломатического числа Маккейба Z(G) применяется формула

где l – число дуг ориентированного графа G; v – число вершин; p- число компонентов связности графа.

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

По сути Z(G) определяет число линейно независимых контуров в сильносвязном графе. Иначе говоря, цикломатическое число Маккейба показывает требуемое число проходов для покрытия всех контуров сильносвязанного графа или количество тестовых прогонов программы, необходимых для исчерпывающего тестирования по критерию “работает каждая ветвь”.

Для программы цикломатическое число при l=10, v=8, n=1 определится как Z(G) = 10-8+2=4.

Таким образом, имеется сильносвязанный граф с четырьмя линейно независимыми контурами:

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

Читайте также:  Схема компьютерного блока питания 200w

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

В графе программы, где каждому оператору соответствует вершина, т.е. не исключены линейные участки , при передаче управления от вершины a к b номер оператора a равен min (a,b), а номер оператора b – max(a,b). Тогда пересечение дуг появятся, если

| min (a,b) метрика Т. Джилба , в которой логическая сложность программы определяется как насыщенность программы выражениями IF_THEN_ELSE. При этом вводятся две характеристики:

СL – абсолютная сложность программы, характеризующаяся количеством операторов условия;

cl – относительная сложность программы, характеризующаяся насыщенностью программы операторами условия, т.е. cl определяется как отношение CL к общему числу операторов.

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

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

Введем несколько дополнительных понятий, связанных с графом программы.

Пусть G=(V,E) – ориентированный граф программы с единственной начальной и единственной окнечной вершинами. В этом графе число входящих в вершину дуг называется отрицательной степенью вершины, а число исходящих из вершины дуг – положительной степенью вершины. Тогда набор вершин графа можно разбить на две группы:

вершины у которых положительная степень =2.

Вершины первой группы назовем принимающими вершинами, а вершины второй группы – вершинами отбора.

Для получения оценки по методу граничных значений необходимо разбить

граф G на максимальное число подграфов G’, удовлетворяющих следующим условиям:

вход в подграф осуществляется только через вершину отбора;

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

Число вершин, образующих такой подграф, равно скорректированной сложности вершины отбора:

Скорректированная сложность вершины графа

Нижняя граница подграфа

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

где S 0 – относительная граничная сложность программы; S a – абсолютная граничная сложность программы, v – общее число вершин графа программы.

Таким образом, относительная сложность программы равна

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

Пара “модуль – глобальная переменная” обозначается как (p,r), где p – модуль, имеющий доступ к глобальной переменной r. В зависимости от наличия в программе реального обращения к переменной r формируются два типа пар “модуль – глобальная переменная” : фактические и возможные. Возможное обращение к r с помощью p показывает, что область существования r включает в себя p.

Характеристика Aup говорит о том, сколько раз модули Up действительно получили доступ к глобальным переменным, а число Pup – сколько раз они могли бы получить доступ.

Отношение числа фактических обращений к возможным определяется

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

Покажем расчет метрики “модуль – глобальная переменная”. Пусть в программе имеются три глобальные переменные и три подпрограммы. Если предположить, что каждая подпрограмма имеет доступ к каждой из переменных, то мы получим девять возможных пар, то есть Pup=9. Далее пусть первая подпрограмма обращается к одной переменной, вторая – двум, а третья не обращается ни к одной переменной. Тогда Aup=3, Rup=3/9.

Еще одна метрика сложности потока данных – спен.

Определение спена основывается на локализации обращения к данным внутри каждой программной секции.

Спен – это число утверждений, содержащих данный идентификатор, между его первым и последним появлением в тексте программы. Идентификатор, появившийся n раз, имеет спен, равный n-1.

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

Читайте также:  Течет труба с горячей водой

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

Суть метода состоит в оценке информационной прочности отдельно взятого программного модуля с помощью анализа характера использования переменных из списка ввода-вывода.

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

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

М – модифицируемые или создаваемые внутри программы переменные.

C – переменные, участвующие в управлении работой программного модуля (управляющие переменные).

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

Далее вводится значение метрики Чепина:

Q = a 1 P + a 2 M + a 3 C + a 4 T ,где a 1 , a 2 , a 3 , a 4 – весовые коэффициенты.

Весовые коэффициенты использованы для отражения различного влияния на сложность программы каждой функциональной группы. По мнению автора метрики, наибольший вес, равный трем, имеет функциональная группа С, так как она влияет на поток управления программы. Весовые коэффициенты остальных групп распределяются следующим образом: a 1 =1; a 2 =2; a 4 =0.5. Весовой коэффициент группы T не равен нулю, поскольку “паразитные” переменные не увеличивают сложности потока данных программы, но иногда затрудняют ее понимание. С учетом весовых коэффициентов выражение примет вил:

Q = P + 2M + 3C + 0.5T .

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

Метрики стилистики и понятности программ

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

Наиболее простой метрикой стилистики и понятности является оценка уровня комментированности программы F:

F = N ком / N стр ,

где N ком – количество комментариев в программе;

N стр – количество строк или операторов исходного текста.

Таким образом, метрика F отражает насыщенность программы комментариями.

Исходя из практического опыта принято считать, что F0.1, т.е. на каждые десять строк программы должен приходиться минимум один комментарий. Как показывают исследования, комментарии распределяются по тексту программы неравномерно: в начале программы их избыток, а в середине или в конце – недостаток. Это объясняется тем, что в начале программы, как правило, расположены операторы описания идентификаторов, требующие более “плотного” комментирования. Кроме того, в начале программы также расположены “шапки”, содержащие общие сведения об исполнителе, характере, функциональном назначении программы и т.п. Такая насыщенность компенсирует недостаток комментариев в теле программы, и поэтому приведенная формула недостаточно точно отражает комментированность функциональной части текста программы.

Более удачен вариант, когда вся программа разбивается на n равных сегментов и для каждого из них определяется F i :

F i = sign ( N ком / N стр –0.1) , при этом

Уровень комментированности программы считается нормальным, если выполняется условие: F=n. В противном случае какой либо фрагмент программы дополняется комментариями до нормального уровня.

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

Всем привет. Нужно реализовать разбор кода С# по метрике Холстеда. Собственно, необходимо найти все операторы и операнды программы. Возникает такой вопрос: сколько в данном куске кода операторов и операндов:

Также интересует следующее: являются ли операторами агрументы цикла for?

Возможно, глупый вопрос, но почему-то поставил меня в тупик.

1 ответ 1

При расчете метрики Холстеда используются следующие операнды:

Идентификаторы – все идентификаторы, которые не являются зарезервированными словами.

Идентификаторы типов – зарезервированные слова, обозначающие тип данных: bool , char , double , float , int , long , short , signed , unsigned , void .

Константы – числовые, символьные, строковые.

Ключевые слова следующих категорий, которые интерпретируются как операторы:

Идентификаторы класса памяти: inline , register , static , typedef , virtual , mutable .
Квалификаторы типа: const , friend , volatile .
Зарезервированные слова: asm , break , case , class , continue , default , delete , do , else , enum , for , goto , if , new , operator , private , protected , public , return , sizeof , struct , switch , this , union , while , namespace , using , try , catch , throw , const_cast , static_cast , dynamic_cast , reinterpret_cast , typeid , template , explicit , true , false , typename .

Операторы языка программирования: ! != % %= &&& || &= ( ) * *= + ++ += и т.д.

Следующие управляющие структуры: for(…) , if (…) , switch (…) , while for (…) and catch (. ) интерпретируются как один оператор.

Поэтому for (var col = 0; col это один оператор.

Оцените статью
Добавить комментарий

Adblock
detector