Программа для метрики


Создайте бесплатно свой уникальный детский плакат-постер-метрику с помощью он-лайн сервиса БАМБИНИК ПОСТЕР

Отзывы

22.06.2017

Валентина

Улан-Удэ

Спасиииибоо!!!!!!!Огромное)))

09.06.2017

маленькие радости сделали мой день!спасибо за приятности)

08.06.2017

Ольга

Санкт-Петербург

Спасибо большое за ваши метрики, они чудесны!

30.05.2017

Отличные постеры, но есть 1 существенный минус. В самом постере дата рождения состоит и 2 цифр (год), а вбивать нужно 4 цифры и из-за этого на постере все съезжает вправо и постер смотрится не очень

26.05.2017

Анастасия

камские поляны

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

24.05.2017

Лия

Астрахань

Спасибо вам огромное!!!

17.05.2017

Эльвира

Ижевск

Очень классные постеры, большое спасибо за такой бонус!!!

13.05.2017

Надежда

Пятигорск

Огромное спасибо за программу. Давно хотела своим деткам сделать метрики, а тут наткнулась на вас. Спасибо!!!!

13.05.2017

Спасибо большое,очень классные постеры!!!!

20.04.2017

Спасибо большое за ваш труд и бескорыстность. Такие замечательные метрики вы дарите пользователям. И крайне просто пользоваться вашим сервисом.

19.04.2017

Карина Жигалова

Красноярск

Хорошего дня!!!Хочу выразить огромную благодарность за возможность бесплатно создавать постеры для своих малышей!!! P/S Процветания, вдохновения, интересных проектов!!!

13.04.2017

Алёна Гелибтер

Москва

У вас очень классные постеры

13.04.2017

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

11.04.2017

Не работает ссылка на постер (((((((((((((((((((((((((

09.04.2017

Алина

Белгород

Девочки, это находка:) Сейчас же в моде всякие такие метрики)

08.04.2017

Татьяна

Екатеринбург

Решила поделиться, вдруг кто-то тоже захочет. В общем, на сайте bambinic.ru можно бесплатно сделать метрику через конструктор. Выбор небольшой конечно, но найти что-то подходящее можно. Выглядят, на мой взгляд, прилично. Форматы можно тоже в конце разные сохранить. Я себе а3 сохранила, потом если что распечатаю и постер на стену повешаю.

04.04.2017

Спасибо за такую красоту!!

30.03.2017

Разработчики!!! Огромное спасибо!!!

17.03.2017

Оксана

Петрозаводск

Спасибо большое за такой замечательный сервис!

15.03.2017

Любовь

Оренбург

Очень Довольна!!!)))Спасибо Огромное!!!))

26.02.2017

Natali Mudra

Nova Kahovka

Спасибо вам за ваш прекрасный сайт!!!! Делала сынуле своему и крестникам, очень удобно, все понятно) Просто прекрасно) Очень долго рыскала в просторах интернета в поисках БЕСПЛАТНОЙ онлайн метрики, а нашла лишь только ваш сайт(чему безумно рада). Вы большие умнички)))) Только сделайте пожалуйста по-больше шаблонов)))) Плиииз)

21.02.2017

Спасибо за постеры, жена в восторге, сделайте постеров с котятами,будем благодарны,спасибо

14.02.2017

Виктория

Гродно

Идея с постерами очень классная. Всегда можно создать что-то интересное. И подарок готов!

17.01.2017

Татьяна

Вологда

Постеры делала в подарок племяннице-родители оценили)) спасибо за ваш сайт!

03.12.2016

Лейсан

Казань

Замечательный сайт! Все очень просто и доступно) Хотелось бы еще шаблон метрики с Динозавром для мальчика на 3 годика) Буду очень благодарна)

22.11.2016

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

25.10.2016

https://www.instagram.com/poster_na_zakaz_33rus/ использует ваши метрики для продажи

25.07.2016

Марина

Санкт-Петербург

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

19.07.2016

Екатерина

Санкт-Петербург

Заказ доставлен! Девочка счастлива) Ваш магазинчик - это спасение! Теперь всем детям друзей буду там заказывать подарки:)

04.06.2016

Юлия

Екатеринбург

Покупали бодик с Бэтменом на кашу!! Оооочень крутой!!! Сервис суперский и всякие ништяки - наклейки, метрика, банка - прям браво!

Оставить отзыв

bambinic.ru

Программный код и его метрики / Блог компании Intel / Хабрахабр

Одной из тем в программировании, к которым интерес периодически то появляется, то пропадает, является вопрос метрик кода программного обеспечения. В крупных программных средах время от времени появляются механизмы подсчета различных метрик. Волнообразный интерес к теме так выглядит потому, что до сих пор в метриках не придумано главного — что с ними делать. То есть даже если какой-то инструмент позволяет хорошо подсчитать некоторые метрики, то что с этим делать дальше зачастую непонятно. Конечно, метрики — это и контроль качества кода (не пишем большие и сложные функции), и «производительность» (в кавычках) программистов, и скорость развития проекта. Эта статья — обзор наиболее известных метрик кода программного обеспечения.

Введение

В статье приведен обзор 7 классов метрик и более 50 их представителей.

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

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

1. Количественные метрики

Прежде всего, следует рассмотреть количественные характеристики исходного кода программ (в виду их простоты). Самой элементарной метрикой является количество строк кода (SLOC). Данная метрика была изначально разработана для оценки трудозатрат по проекту. Однако из-за того, что одна и та же функциональность может быть разбита на несколько строк или записана в одну строку, метрика стала практически неприменимой с появлением языков, в которых в одну строку может быть записано больше одной команды. Поэтому различают логические и физические строки кода. Логические строки кода — это количество команд программы. Данный вариант описания так же имеет свои недостатки, так как сильно зависит от используемого языка программирования и стиля программирования [2].

Кроме SLOC к количественным характеристикам относят также:

  • количество пустых строк,
  • количество комментариев,
  • процент комментариев (отношение числа строк, содержащих комментарии к общему количеству строк, выраженное в процентах),
  • среднее число строк для функций (классов, файлов),
  • среднее число строк, содержащих исходный код для функций (классов, файлов),
  • среднее число строк для модулей.
Иногда дополнительно различают оценку стилистики программы (F). Она заключается в разбиении программы на n равных фрагментов и вычислении оценки для каждого фрагмента по формуле Fi = SIGN (Nкомм.i / Ni — 0,1), где Nкомм.i — количество комментариев в i-м фрагменте, Ni — общее количество строк кода в i-м фрагменте. Тогда общая оценка для всей программы будет определяться следующим образом: F = СУММА Fi. [2]

Также к группе метрик, основанных на подсчете некоторых единиц в коде программы, относят метрики Холстеда [3]. Данные метрики основаны на следующих показателях:

n1 — число уникальных операторов программы, включая символы-

разделители, имена процедур и знаки операций (словарь операторов),

n2 — число уникальных операндов программы (словарь операндов),

N1 — общее число операторов в программе,

N2 — общее число операндов в программе,

n1' — теоретическое число уникальных операторов,

n2' — теоретическое число уникальных операндов.

Учитывая введенные обозначения, можно определить:

n=n1+n2 — словарь программы,

N=N1+N2 — длина программы,

n'=n1'+n2' — теоретический словарь программы,

N'= n1*log2(n1) + n2*log2(n2) — теоретическая длина программы (для стилистически корректных программ отклонение N от N' не превышает 10%)

V=N*log2n — объем программы,

V'=N'*log2n' — теоретический объем программы, где n* — теоретический словарь программы.

L=V'/V — уровень качества программирования, для идеальной программы L=1

L'= (2 n2)/ (n1*N2) — уровень качества программирования, основанный лишь на параметрах реальной программы без учета теоретических параметров,

EC=V/(L')2 — сложность понимания программы,

D=1/ L' — трудоемкость кодирования программы,

y' = V/ D2 — уровень языка выражения

I=V/D — информационное содержание программы, данная характеристика позволяет определить умственные затраты на создание программы

E=N' * log2(n/L) — оценка необходимых интеллектуальных усилий при разработке программы, характеризующая число требуемых элементарных решений при написании программы

При применении метрик Холстеда частично компенсируются недостатки, связанные с возможностью записи одной и той же функциональности разным количеством строк и операторов.

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

2. Метрики сложности потока управления программы

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

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

Пусть представлена некоторая программа. Для данной программы строится ориентированный граф, содержащий лишь один вход и один выход, при этом вершины графа соотносят с теми участками кода программы, в которых имеются лишь последовательные вычисления, и отсутствуют операторы ветвления и цикла, а дуги соотносят с переходами от блока к блоку и ветвями выполнения программы. Условие при построении данного графа: каждая вершина достижима из начальной, и конечная вершина достижима из любой другой вершины [4].

Самой распространенной оценкой, основанной на анализе получившегося графа, является цикломатическая сложность программы (цикломатическое число Мак-Кейба) [4]. Она определяется как V(G)=e — n + 2p, где e — количество дуг, n — количество вершин, p — число компонент связности. Число компонентов связности графа можно рассматривать как количество дуг, которые необходимо добавить для преобразования графа в сильно связный. Сильно связным называется граф, любые две вершины которого взаимно достижимы. Для графов корректных программ, т. е. графов, не имеющих недостижимых от точки входа участков и «висячих» точек входа и выхода, сильно связный граф, как правило, получается путем замыкания дугой вершины, обозначающей конец программы, на вершину, обозначающую точку входа в эту программу. По сути V(G) определяет число линейно независимых контуров в сильно связном графе. Так что в корректно написанных программах p=1, и поэтому формула для расчета цикломатической сложности приобретает вид:

V(G)=e — n + 2.

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

Для исправления данного недостатка Г. Майерсом была разработана новая методика. В качестве оценки он предложил взять интервал (эта оценка еще называется интервальной) [V(G),V(G)+h], где h для простых предикатов равно нулю, а для n-местных h=n-1. Данный метод позволяет различать разные по сложности предикаты, однако на практике он почти не применяется.

Еще одна модификация метода Мак-Кейба — метод Хансена. Мера сложности программы в данном случае представляется в виде пары (цикломатическая сложность, число операторов). Преимуществом данной меры является ее чувствительность к структурированности ПО.

Топологическая мера Чена выражает сложность программы через число пересечений границ между областями, образуемыми графом программы. Этот подход применим только к структурированным программам, допускающим лишь последовательное соединение управляющих конструкций. Для неструктурированных программ мера Чена существенно зависит от условных и безусловных переходов. В этом случае можно указать верхнюю и нижнюю границы меры. Верхняя — есть m+1, где m — число логических операторов при их взаимной вложенности. Нижняя — равна 2. Когда управляющий граф программы имеет только одну компоненту связности, мера Чена совпадает с цикломатической мерой Мак-Кейба.

Продолжая тему анализа управляющего графа программы, можно выделить еще одну подгруппу метрик — метрики Харрисона, Мейджела.

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

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

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

Функциональная мера (SCOPE) программы — это сумма приведенных сложностей всех вершин управляющего графа.

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

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

Метрика Пивоварского — очередная модификация меры цикломатической сложности. Она позволяет отслеживать различия не только между последовательными и вложенными управляющими конструкциями, но и между структурированными и неструктурированными программами. Она выражается отношением N(G) = v *(G) + СУММАPi, где v *(G) — модифицированная цикломатическая сложность, вычисленная так же, как и V(G), но с одним отличием: оператор CASE с n выходами рассматривается как один логический оператор, а не как n — 1 операторов.

Рi — глубина вложенности i-й предикатной вершины. Для подсчета глубины вложенности предикатных вершин используется число «сфер влияния». Под глубиной вложенности понимается число всех «сфер влияния» предикатов, которые либо полностью содержатся в сфере рассматриваемой вершины, либо пересекаются с ней. Глубина вложенности увеличивается за счет вложенности не самих предикатов, а «сфер влияния». Мера Пивоварского возрастает при переходе от последовательных программ к вложенным и далее к неструктурированным, что является ее огромным преимуществом перед многими другими мерами данной группы.

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

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

Пусть G — управляющий граф программы с единственной начальной и единственной конечной вершинами.

В этом графе число входящих вершин у дуг называется отрицательной степенью вершины, а число исходящих из вершины дуг — положительной степенью вершины. Тогда набор вершин графа можно разбить на две группы: вершины, у которых положительная степень <=1; вершины, у которых положительная степень >=2.

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

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

S0=1-(v-1)/Sa,

где S0 — относительная граничная сложность программы, Sa — абсолютная граничная сложность программы, v — общее число вершин графа программы.

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

3. Метрики сложности потока управления данными

Следующий класс метрик — метрики сложности потока управления данных.

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

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

1. P — вводимые переменные для расчетов и для обеспечения вывода,

2. M — модифицируемые, или создаваемые внутри программы переменные,

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

4. T — не используемые в программе («паразитные») переменные.

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

Метрика Чепина :

Q = a1*P + a2*M + a3*C + a4*T,

где a1, a2, a3, a4 — весовые коэффициенты.

Весовые коэффициенты использованы для отражения различного влияния на сложность программы каждой функциональной группы. По мнению автора метрики, наибольший вес, равный 3, имеет функциональная группа C, так как она влияет на поток управления программы. Весовые коэффициенты остальных групп распределяются следующим образом: a1=1, a2=2, a4=0.5. Весовой коэффициент группы T не равен 0, поскольку «паразитные» переменные не увеличивают сложность потока данных программы, но иногда затрудняют ее понимание. С учетом весовых коэффициентов:

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

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

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

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

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

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

Rup = Aup/Pup.

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

На основе концепции информационных потоков создана мера Кафура. Для использования данной меры вводятся понятия локального и глобального потока: локальный поток информации из A в B существует, если:

1. Модуль А вызывает модуль В (прямой локальный поток)

2. Модуль В вызывает модуль А и А возвращает В значение, которое используется в В (непрямой локальный поток)

3. Модуль С вызывает модули А, В и передаёт результат выполнения модуля А в В.

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

На основе этих понятий вводится величина I — информационная сложность процедуры: I = length * (fan_in * fan_out)2 Здесь:

length — сложность текста процедуры (меряется через какую-нибудь из метрик объёма, типа метрик Холстеда, Маккейба, LOC и т.п.)

fan_in — число локальных потоков входящих внутрь процедуры плюс число структур данных, из которых процедура берёт информацию

fan_out — число локальных потоков исходящих из процедуры плюс число структур данных, которые обновляются процедурой

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

Следующий шаг — рассмотреть информационную сложность модуля относительно некоторой структуры данных. Информационная мера сложности модуля относительно структуры данных:

J = W * R + W * RW + RW *R + RW * (RW — 1)

W — число процедур, которые только обновляют структуру данных;

R — только читают информацию из структуры данных;

RW — и читают, и обновляют информацию в структуре данных.

Еще одна мера данной группы — мера Овиедо. Суть ее состоит в том, что программа разбивается на линейные непересекающиеся участки — лучи операторов, которые образуют управляющий граф программы.

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

Обозначим через R(i) множество определяющих вхождений переменных, которые расположены в радиусе действия луча i (определяющее вхождение переменной находится в радиусе действия луча, если переменная либо локальна в нём и имеет определяющее вхождение, либо для неё есть определяющее вхождение в некотором предшествующем луче, и нет локального определения по пути). Обозначим через V(i) множество переменных, использующие вхождения которых уже есть в луче i. Тогда мера сложности i-го луча задаётся как:

DF(i)=СУММА(DEF(vj)), j=i...||V(i)||

где DEF(vj) — число определяющих вхождений переменной vj из множества R(i), а ||V(i)|| — мощность множества V(i).

4. Метрики сложности потока управления и данных программы

Четвертым классом метрик являются метрики, близкие как к классу количественных метрик, классу метрик сложности потока управления программы, так и к классу метрик сложности потока управления данными (строго говоря, данный класс метрик и класс метрик сложности потока управления программы являются одним и тем же классом — топологическими метриками, но имеет смысл разделить их в данном контексте для большей ясности). Данный класс метрик устанавливает сложность структуры программы как на основе количественных подсчетов, так и на основе анализа управляющих структур.

Первой из таких метрик является тестирующая М-Мера [5]. Тестирующей мерой М называется мера сложности, удовлетворяющая следующим условиям:

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

Также мерой качества программного обеспечения служит связанность модулей программы [6]. Если модули сильно связанны, то программа становится трудномодифицируемой и тяжелой в понимании. Данная мера не выражается численно. Виды связанности модулей:

Связанность по данным — если модули взаимодействуют через передачу параметров и при этом каждый параметр является элементарным информационным объектом. Это наиболее предпочтительный тип связанности (сцепления).

Связанность по структуре данных — если один модуль посылает другому составной информационный объект (структуру) для обмена данными.

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

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

Связанность по содержимому — если один из модулей ссылается внутрь другого. Это недопустимый тип сцепления, так как полностью противоречит принципу модульности, т.е. представления модуля в виде черного ящика.

Внешняя связанность — два модуля используют внешние данные, например коммуникационный протокол.

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

Отсутствие связанности — модули не взаимодействуют между собой.

Подклассовая связанность — отношение между классом-родителем и классом-потомком, причем потомок связан с родителем, а родитель с потомком — нет.

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

Еще одна мера, касающаяся стабильности модуля — мера Колофелло [7], она может быть определена как количество изменений, которые требуется произвести в модулях, отличных от модуля, стабильность которого проверяется, при этом эти изменения должны касаться проверяемого модуля.

Следующая метрика из данного класса — Метрика Мак-Клура. Выделяются три этапа вычисления данной метрики:

1. Для каждой управляющей переменной i вычисляется значениt её сложностной функции C(i) по формуле: C(i) = (D(i) * J(i))/n.

Где D(i) — величина, измеряющая сферу действия переменной i. J(i) — мера сложности взаимодействия модулей через переменную i, n — число отдельных модулей в схеме разбиения.

2. Для всех модулей, входящих в сферу разбиения, определяется значение их сложностных функций M(P) по формуле M(P) = fp * X(P) + gp * Y(P) где fp и gp — соответственно, число модулей, непосредственно предшествующих и непосредственно следующих за модулем P, X(P) — сложность обращения к модулю P,

Y(P) — сложность управления вызовом из модуля P других модулей.

3. Общая сложность MP иерархической схемы разбиения программы на модули задаётся формулой:

MP = СУММА(M(P)) по всем возможным значениям P — модулям программы.

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

Также существует метрика, основанная на информационной концепции — мера Берлингера [8]. Мера сложности вычисляется как M=СУММАfi*log2pi, где fi — частота появления i-го символа, pi — вероятность его появления.

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

5. Объектно-ориентированные метрики

В связи с развитием объектно-ориентированных языков программирования появился новый класс метрик, также называемый объектно-ориентированными метриками. В данной группе наиболее часто используемыми являются наборы метрик Мартина и набор метрик Чидамбера и Кемерера. Для начала рассмотрим первую подгруппу.

Прежде чем начать рассмотрение метрик Мартина необходимо ввести понятие категории классов [9]. В реальности класс может достаточно редко быть повторно использован изолированно от других классов. Практически каждый класс имеет группу классов, с которыми он работает в кооперации, и от которых он не может быть легко отделен. Для повторного использования таких классов необходимо повторно использовать всю группу классов. Такая группа классов сильно связна и называется категорией классов. Для существования категории классов существуют следующие условия:

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

Классы в категории повторно используются только вместе. Они настолько взаимозависимы и не могут быть отделены друг от друга. Таким образом, если делается любая попытка повторного использования одного класса в категории, все другие классы должны повторно использоваться с ним.

Классы в категории разделяют некоторую общую функцию или достигают некоторой общей цели.

Ответственность, независимость и стабильность категории могут быть измерены путем подсчета зависимостей, которые взаимодействуют с этой категорией. Могут быть определены три метрики :

1. Ca: Центростремительное сцепление. Количество классов вне этой категории, которые зависят от классов внутри этой категории.

2. Ce: Центробежное сцепление. Количество классов внутри этой категории, которые зависят от классов вне этой категории.

3. I: Нестабильность: I = Ce / (Ca+Ce). Эта метрика имеет диапазон значений [0,1].

I = 0 указывает максимально стабильную категорию.

I = 1 указывает максимально не стабильную категорию.

Можно определять метрику, которая измеряет абстрактность (если категория абстрактна, то она достаточно гибкая и может быть легко расширена) категории следующим образом:

A: Абстрактность: A = nA / nAll.

nA — количество_абстрактных_классов_в_категории.

nAll — oбщее_количество_классов_в_категории.

Значения этой метрики меняются в диапазоне [0,1].

0 = категория полностью конкретна,

1 = категория полностью абстрактна.

Теперь на основе приведенных метрик Мартина можно построить график, на котором отражена зависимость между абстрактностью и нестабильностью. Если на нем построить прямую, задаваемую формулой I+A=1, то на этой прямой будут лежать категории, имеющие наилучшую сбалансированность между абстрактностью и нестабильностью. Эта прямая называется главной последовательностью.

Далее можно ввести еще 2 метрики:

Расстояние до главной последовательности: D=|(A+I-1)/sqrt(2)|

Нормализированной расстояние до главной последовательности: Dn=|A+I-2|

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

Следующая подгруппа метрик — метрики Чидамбера и Кемерера [10]. Эти метрики основаны на анализе методов класса, дерева наследования и т.д.

WMC (Weighted methods per class), суммарная сложность всех методов класса: WMC=СУММАci, i=1...n, где ci — сложность i-го метода, вычисленная по какой либо из метрик (Холстеда и т.д. в зависимости от интересующего критерия), если у всех методов сложность одинаковая, то WMC=n.

DIT (Depth of Inheritance tree) — глубина дерева наследования (наибольший путь по иерархии классов к данному классу от класса-предка), чем больше, тем лучше, так как при большей глубине увеличивается абстракция данных, уменьшается насыщенность класса методами, однако при достаточно большой глубине сильно возрастает сложность понимания и написания программы.

NOC (Number of children) — количество потомков (непосредственных), чем больше, тем выше абстракция данных.

CBO (Coupling between object classes) — сцепление между классами, показывает количество классов, с которыми связан исходный класс. Для данной метрики справедливы все утверждения, введенные ранее для связанности модулей, то есть при высоком CBO уменьшается абстракция данных и затрудняется повторное использование класса.

RFC (Response for a class) — RFC=|RS|, где RS — ответное множество класса, то есть множество методов, которые могут быть потенциально вызваны методом класса в ответ на данные, полученные объектом класса. То есть RS=(({M}({Ri}), i=1...n, где M — все возможные методы класса, Ri — все возможные методы, которые могут быть вызваны i-м классом. Тогда RFC будет являться мощностью данного множества. Чем больше RFC, тем сложнее тестирование и отладка.

LCOM (Lack of cohesion in Methods) — недостаток сцепления методов. Для определения этого параметра рассмотрим класс C с n методами M1, M2,… ,Mn, тогда {I1},{I2},...,{In} — множества переменных, используемых в данных методах. Теперь определим P — множество пар методов, не имеющих общих переменных; Q — множество пар методов, имеющих общие переменные. Тогда LCOM=|P|-|Q|. Недостаток сцепления может быть сигналом того, что класс можно разбить на несколько других классов или подклассов, так что для повышения инкапсуляции данных и уменьшения сложности классов и методов лучше повышать сцепление.

6. Метрики надежности

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

7. Гибридные метрики

В завершении необходимо упомянуть еще один класс метрик, называемых гибридными. Метрики данного класса основываются на более простых метриках и представляют собой их взвешенную сумму. Первым представителем данного класса является метрика Кокола. Она определяется следующим образом:

H_M = (M + R1 * M(M1) +… + Rn * M(Mn)/(1 + R1 +… + Rn)

Где M — базовая метрика, Mi — другие интересные меры, Ri — корректно подобранные коэффициенты, M(Mi) — функции.

Функции M(Mi) и коэффициенты Ri вычисляются с помощью регрессионного анализа или анализа задачи для конкретной программы.

В результате исследований, автор метрики выделил три модели для мер: Маккейба, Холстеда и SLOC, где в качестве базовой используется мера Холстеда. Эти модели получили название «наилучшая», «случайная» и «линейная».

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

(структура, взаимодействие, объем, данные) СУММА(a, b, c, d).

(сложность интерфейса, вычислительная сложность, сложность ввода/вывода, читабельность) СУММА(x, y, z, p).

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

Заключение

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

habrahabr.ru

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

Ульяновский государственный университет

Факультет Математики и информационных технологий

Кафедра Информационных технологий

Лабораторная работа по теме:

«Метрическая оценка ПО».

.

Ульяновск - 2013г.

МЕТРИКИ РАЗМЕРА ПРОГРАММ.

Метрика Холстеда.

Линейная программа.

Программа с указателями.

Программа с модулями.

МЕТРИКИ СЛОЖНОСТИ ПОТОКА УПРАВЛЕНИЯ ПРОГРАММЫ.

Метрика Маккейба.

Линейная программа.

G(Z) = 16 - 13 + 2 = 5

Программа с указателями.

G(Z) = 18 - 15 + 2 = 5

Программа с модулями.

G(Z) = 6 - 5 + 2 = 3

Метрика граничных значений.

Линейная программа.

Вершины отбора

2

5

6

13

Вершины перехода

3, 4, 13

7, 8

9, 10

1

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

11

3

3

13

Вершины подграфа

3, 4, 5, 6, 7, 8, 9, 10, 11, 12

7, 8

9, 10

1-12

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

13

11

12

14

Sa = 11+3+3+13+9=39

So=1-13/39=0.66

Программа с указателями.

Вершины отбора

3

6

7

14

Вершины перехода

4, 5, 14

8, 9

10, 11

2, 15

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

11

3

3

14

Вершины подграфа

4, 5, 6, 7, 8, 9, 10, 11, 12 , 13

8, 9

10, 11

2-14

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

14

12

13

15

Sa=11+3+3+14+10=41

So=1-14/41=0.66

Программа с модулями.

Вершины отбора

2

5

Вершины перехода

3, 4, 5

1

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

3

5

Вершины подграфа

3, 4

1-4

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

5

6

Sa=3+5+3=11

So=1-5/11=0.55

Метрика Джилба.

Линейная программа.

CL=3

cl=CL/N=3/120=0.025

Программа с указателями.

CL=3

cl = CL/N=3/130=0.023

Программа с модулями.

CL=3

cl=CL/N=3/133=0.022

МЕТРИКИ СЛОЖНОСТИ ПОТОКА ДАННЫХ.

Метрика спена.

Линейная программа.

Программа с указателями.

Программа с модулями.

Choice

1

1

1

File

1

2

1

Num

1

1

2

Path

1

1

3

St

7

8

11

Метрика Чепина.

Линейная программа.

Программа с указателями.

Программа с модулями.

P

(для расчетов и вывода)

Path

Path

Path

M

(модифицируемые или создаваемые)

Num, st, choice

Choice, st, file, num

Choice, num, st(в main() и search())

C

(участвующие в управлении)

File, choice

File, choice

File(в add() и search()), choice

Q

(неиспользуемые)

Q = 1*P+2*M+3*C+0.5*Q

Q1=1+2*3+3*2=13

Q2=1+2*4+3*2=15

Q3=1+2*4+3*3=18

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

1

2

3

Количество строк

78

84

50

Строк в сегменте

13

14

10

Кол-во сегментов

6

6

5

Количество

комментариев

Количество

комментариев

Fi

Количество

комментариев

Fi

1 сегмент

3

1

3

1

3

1

2 сегмент

2

1

3

1

2

1

3 сегмент

2

1

2

1

2

1

4 сегмент

1

-1

2

1

3

1

5 сегмент

3

1

2

1

2

1

6 сегмент

1

-1

2

1

2

6

5

www.studfiles.ru

Лекция 10. Метрики сложности потока управления программы.

Цель: изучить класс метрик, основанный на анализе управляющего графа программ, особое внимание уделить метрике Мак-Кейба

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

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

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

Самой распространенной оценкой, основанной на анализе получившегося графа, является цикломатическая сложность программы (цикломатическое число Мак-Кейба). Она определяется как V(G)=e - n + 2p, где e - количество дуг, n - количество вершин, p - число компонент связности. Число компонентов связности графа можно рассматривать как количество дуг, которые необходимо добавить для преобразования графа в сильно связный. Сильно связным называется граф, любые две вершины которого взаимно достижимы. Для графов корректных программ, т. е. графов, не имеющих недостижимых от точки входа участков и "висячих" точек входа и выхода, сильно связный граф, как правило, получается путем замыкания дугой вершины, обозначающей конец программы, на вершину, обозначающую точку входа в эту программу. По сути V(G) определяет число линейно независимых контуров в сильно связном графе. Так что в корректно написанных программах p=1, и поэтому формула для расчета цикломатической сложности приобретает вид:

V(G)=e - n + 2.

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

Для исправления данного недостатка Г. Майерсом была разработана новая методика. В качестве оценки он предложил взять интервал (эта оценка еще называется интервальной) [V(G),V(G)+h], где h для простых предикатов равно нулю, а для n-местных h=n-1. Данный метод позволяет различать разные по сложности предикаты, однако на практике он почти не применяется.

Еще одна модификация метода Мак-Кейба - метод Хансена. Мера сложности программы в данном случае представляется в виде пары (цикломатическая сложность, число операторов). Преимуществом данной меры является ее чувствительность к структурированности ПО.

Топологическая мера Чена выражает сложность программы через число пересечений границ между областями, образуемыми графом программы. Этот подход применим только к структурированным программам, допускающим лишь последовательное соединение управляющих конструкций. Для неструктурированных программ мера Чена существенно зависит от условных и безусловных переходов. В этом случае можно указать верхнюю и нижнюю границы меры. Верхняя - есть m+1, где m - число логических операторов при их взаимной вложенности. Нижняя - равна 2. Когда управляющий граф программы имеет только одну компоненту связности, мера Чена совпадает с цикломатической мерой Мак-Кейба.

Продолжая тему анализа управляющего графа программы, можно выделить еще одну подгруппу метрик - метрики Харрисона, Мейджела.

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

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

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

Функциональная мера (SCOPE) программы - это сумма приведенных сложностей всех вершин управляющего графа.

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

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

Метрика Пивоварского - очередная модификация меры цикломатической сложности. Она позволяет отслеживать различия не только между последовательными и вложенными управляющими конструкциями, но и между структурированными и неструктурированными программами. Она выражается отношением N(G) = v *(G) + СУММАPi , где v *(G) - модифицированная цикломатическая сложность, вычисленная так же, как и V(G), но с одним отличием: оператор CASE с n выходами рассматривается как один логический оператор, а не как n - 1 операторов.

Рi - глубина вложенности i-й предикатной вершины. Для подсчета глубины вложенности предикатных вершин используется число "сфер влияния". Под глубиной вложенности понимается число всех "сфер влияния" предикатов, которые либо полностью содержатся в сфере рассматриваемой вершины, либо пересекаются с ней. Глубина вложенности увеличивается за счет вложенности не самих предикатов, а "сфер влияния". Мера Пивоварского возрастает при переходе от последовательных программ к вложенным и далее к неструктурированным, что является ее огромным преимуществом перед многими другими мерами данной группы.

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

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

Пусть G - управляющий граф программы с единственной начальной и единственной конечной вершинами.

В этом графе число входящих вершин у дуг называется отрицательной степенью вершины, а число исходящих из вершины дуг - положительной степенью вершины. Тогда набор вершин графа можно разбить на две группы: вершины, у которых положительная степень <=1; вершины, у которых положительная степень >=2.

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

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

S0=1-(v-1)/Sa,

где S0 - относительная граничная сложность программы, Sa - абсолютная граничная сложность программы, v - общее число вершин графа программы.

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

Контрольные вопросы:

1. На чем основаны метрики сложности потока управления программ?

2. Что такое граф и из чего он состоит? Какие графы бывают?

3. На каких показателях основывается метрика Мак-Кейба?

Лекция 11. Метрики сложности потока управления данными.

Цель: изучить метод оценки информационной прочности отдельно взятого программного модуля

Следующий класс метрик - метрики сложности потока управления данных.

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

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

1. P - вводимые переменные для расчетов и для обеспечения вывода,

2. M - модифицируемые, или создаваемые внутри программы переменные,

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

4. T - не используемые в программе ("паразитные") переменные.

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

Метрика Чепина :

Q = a1*P + a2*M + a3*C + a4*T,

где a1, a2, a3, a4 - весовые коэффициенты.

Весовые коэффициенты использованы для отражения различного влияния на сложность программы каждой функциональной группы. По мнению автора метрики, наибольший вес, равный 3, имеет функциональная группа C, так как она влияет на поток управления программы. Весовые коэффициенты остальных групп распределяются следующим образом : a1=1, a2=2, a4=0.5. Весовой коэффициент группы T не равен 0, поскольку "паразитные" переменные не увеличивают сложность потока данных программы, но иногда затрудняют ее понимание. С учетом весовых коэффициентов:

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

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

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

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

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

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

Rup = Aup/Pup.

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

На основе концепции информационных потоков создана мера Кафура. Для использования данной меры вводятся понятия локального и глобального потока: локальный поток информации из A в B существует, если:

1. Модуль А вызывает модуль В (прямой локальный поток)

2. Модуль В вызывает модуль А и А возвращает В значение, которое используется в В (непрямой локальный поток)

3. Модуль С вызывает модули А, В и передаёт результат выполнения модуля А в В.

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

На основе этих понятий вводится величина I - информационная сложность процедуры:

I = length * (fan_in * fan_out)2

Здесь:

length - сложность текста процедуры (меряется через какую-нибудь из метрик объёма, типа метрик Холстеда, Маккейба, LOC и т.п.)

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

fan_out - число локальных потоков исходящих из процедуры плюс число структур данных, которые обновляются процедурой

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

Следующий шаг - рассмотреть информационную сложность модуля относительно некоторой структуры данных. Информационная мера сложности модуля относительно структуры данных: J = W * R + W * RW + RW *R + RW * (RW - 1)

W - число процедур, которые только обновляют структуру данных;

R - только читают информацию из структуры данных;

RW - и читают, и обновляют информацию в структуре данных.

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

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

Обозначим через R(i) множество определяющих вхождений переменных, которые расположены в радиусе действия луча i (определяющее вхождение переменной находится в радиусе действия луча, если переменная либо локальна в нём и имеет определяющее вхождение, либо для неё есть определяющее вхождение в некотором предшествующем луче, и нет локального определения по пути). Обозначим через V(i) множество переменных, использующие вхождения которых уже есть в луче i. Тогда мера сложности i-го луча задаётся как:

DF(i)=СУММА(DEF(vj)), j=i...||V(i)||

где DEF(vj) - число определяющих вхождений переменной vj из множества R(i), а ||V(i)|| - мощность множества V(i).

Контрольные вопросы:

1. На чем основаны метрики сложности потока управления данными?

2. Суть меры Овиедо?

3. На каких показателях основывается метрика Чепина?

studfiles.net

Общие - Программа Для Создания Метрики

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

Понятие метрики. Направления применения метрик. Метрические шкалы. Метрики сложности. Метрики стилистики. Качество ПО - это совокупность свойств, определяющих полезность изделия (программы) для пользователей в соответствии с функциональным назначением и предъявлёнными требованиями. Характеристика качества программы - понятие, отражающее отдельные факторы, влияющие на качество программ и поддающиеся измерению. Критерий качества - численный показатель, характеризующий степень, в которой программе присуще оцениваемое свойство. Критерии качества включают следующие характеристики : экономичность, документированность, гибкость, модульность, надёжность, обоснованность, тестируемость, ясность, точность, модифицируемость, эффективность, легкость сопровождения и т.д. Критерий должен : * численно характеризовать основную целевую функцию программы ; * обеспечивать возможность определения затрат, необходимых для достижения требуемого уровня качества, а также степени влияния на показатель качества различных внешних факторов ; * быть по возможности простым, хорошо измеримым и иметь малую дисперсию. Для измерения характеристик и критериев качества используют метрики. Метрика качества программ - система измерений качества программ. Эти измерения могут проводиться на уровне критериев качества программ или на уровне отдельных характеристик качества. В первом случае система измерений позволяет непосредственно сравнивать программы по качеству. При этом сами измерения не могут быть проведены без субъективных оценок свойств программ. Во втором случае измерения характеристик можно выполнить объективно и достоверно, но оценка качества ПО в целом будет связана с субъективной интерпретацией получаемых оценок. В исследовании метрик ПО различают два основных направления : * поиск метрик, характеризующих наиболее специфические свойства программ, т.е. метрик оценки самого ПО ; * использование метрик для оценки технических характеристик и факторов разработки программ, т.е. метрик оценки условий разработки программ. По виду информации, получаемой при оценке качества ПО метрики можно разбить на три группы : * метрики, оценивающие отклонение от нормы характеристик исходных проектных материалов. Они устанавливают полноту заданных технических характеристик исходного кода. * метрики, позволяющие прогнозировать качество разрабатываемого ПО. Они заданы на множестве возможных вариантов решений поставленной задачи и их реализации и определяют качество ПО, которое будет достигнуто в итоге. * метрики, по которым принимается решение о соответствии конечного ПО заданным требованиям. Они позволяют оценить соответствие разработки заданным требованиям. ОСНОВНЫЕ НАПРАВЛЕНИЯ ПРИМЕНЕНИЯ МЕТРИК. В настоящее время в мировой практике используется несколько сотен метрик программ. Существующие качественные оценки программ можно сгруппировать по шести направлениям : * оценки топологической и информационной сложности программ ; * оценки надежности программных систем, позволяющие прогнозировать отказовые ситуации ; * оценки производительности ПО и повышения его эффективности путем выявления ошибок проектирования ; * оценки уровня языковых средств и их применения ; * оценки трудности восприятия и понимания программных текстов, ориентированные на психологические факторы, существенные для сопровождения и модификации программ ; * оценки производительности труда программистов для прогнозирования сроков разработки программ и планирования работ по созданию программных комплексов. МЕТРИЧЕСКИЕ ШКАЛЫ В зависимости от характеристик и особенностей применяемых метрик им ставятся в соответствие различные измерительные шкалы. Номинальной шкале соответствуют метрики, классифицирующие программы на типы по признаку наличия или отсутствия некоторой характеристики без учета градаций. Порядковой шкале соответствуют метрики, позволяющие ранжировать некоторое характеристики путем сравнения с опорными значениями, т.е. измерение по этой шкале фактически определяет взаимное положение конкретных программ. Интервальной шкале соответствуют метрики, которые показывают не только относительное положение программ, но и то, как далеко они отстоят друг от друга. Относительной шкале соответствуют метрики, позволяющие не только расположить программы определенным образом и оценить их положение относительно друг друга, но и определить, как далеко оценки отстоят от границы, начиная с которой характеристика может быть измерена. МЕТРИКИ СЛОЖНОСТИ ПРОГРАММ При оценке сложности программ, как правило, выделяют три основные группы метрик: * метрики размера программ * метрики сложности потока управления программ * и метрики сложности потока данных программ Оценки первой группы наиболее просты и, очевидно, поэтому получили широкое распространение. Традиционной характеристикой размера программ является количество строк исходного текста. Под строкой понимается любой оператор программы, поскольку именно оператор, а не отдельно взятая строка является тем интеллектуальным квантом программы, опираясь на который можно строить метрики сложности ее создания. Непосредственное измерение размера программы, несмотря на свою простоту, дает хорошие результаты. Конечно, оценка размера программы недостаточна для принятия решения о ее сложности, но вполне применима для классификации программ, существенно различающихся объемами. При уменьшении различий в объеме программ на первый план выдвигаются оценки других факторов, оказывающих влияние на сложность. Таким образом, оценка размера программы есть оценка по номинальной шкале, на основе которой определяются только категории программ без уточнения оценки для каждой категории. К группе оценок размера программ можно отнести также и метрику Холстеда. Далее М. Холстед вводит n* - теоретический словарь программы, т.е. словарный запас, необходимый для написания программы, с учетом того, что необходимая функция уже реализована в данном языке и, следовательно, программа сводится к вызову этой функции. Например, согласно М. Холстеду, возможное осуществление процедуры выделения простого числа могло бы выглядеть так: CALL SIMPLE (X,Y), где Y - массив численных значений, содержащий искомое число X. Теоретический словарь в этом случае будет состоять из n1* : CALL, SIMPLE (...), n1*=2; n2* : X, Y, n2*=2, а его длина, определяемая как n* = n1* + n2*, будет равняться 4. Используя n*, Холстед вводит оценку V*: V* = n* * log2 n*, (3) с помощью которой описывается потенциальный объем программы, соответствующий максимально компактному тексту программы, реализующей данный алгоритм. МЕТРИКИ СЛОЖНОСТИ ПОТОКА УПРАВЛЕНИЯ ПРОГРАММ. Вторая наиболее представительная группа оценок сложности программ - метрики сложности потока управления программ. Как правило, с помощью этих оценок оперируют либо плотностью управляющих переходов внутри программ, либо взаимосвязями этих переходов. И в том и в другом случае стало традиционным представление программ в виде управляющего ориентированного графа G=(V,E), где V - вершины, соответствующие операторам, а E - дуги, соответствующие переходам. Число компонентов связности графа можно рассматривать как количество дуг, которые необходимо добавить для преобразования графа в сильно связный. Cильно связным называется граф, любые две вершины которого взаимно достижимы. Для графов корректных программ, т. е. графов, не имеющих недостижимых от точки входа участков и висячих точек входа и выхода, сильно связный граф, как правило, получается путем замыкания дугой вершины, обозначающей конец программы, на вершину, обозначающую точку входа в эту программу. По сути Z(G) определяет число линейно независимых контуров в Сильно связном графе. Иначе говоря, цикломатическое число Маккейба показывает требуемое количество проходов для покрытия всех контуров сильно связного графа или количество тестовых прогонов программы, необходимых для исчерпывающего тестирования по критерию работает каждая ветвь. Для программы, граф которой изображен на рис.1, цикломатическое число при e=10, v=8, p=1 определится как Z(G)=10-8+2=4. Цикломатическое число зависит только от количества предикатов, сложность которых при этом не учитывается. Например, имеется два оператора условия: Исходя из этого Г. Майерс предложил расширение этой метрики. Суть подхода Г. Майерса состоит в представлении метрики сложности программ в виде интервала [Z(G), Z(G)+h]. Для простого предиката h=0, а для n-местных предикатов h=n-1. Таким образом, первому оператору соответствует интервал [2,2], а второму - [2,6 ]. По идее такая метрика позволяет различать программы, представленные одинаковыми графами. К сожалению, информация о результатах использования этого метода отсутствует, поэтому ничего нельзя сказать о его применимости. Рассмотрим метрику сложности программ, получившую название подсчет точек пересечения, авторами которой являются М. Вудвард, М. Хенел и Д. Хидлей. Метрика ориентирована на анализ программ, при создании которых использовалось неструктурное кодирование на таких языках, как язык ассемблера и Фортран. В графе программы, где каждому оператору соответствует вершина, т. е. не исключены линейные участки, при передаче управления от вершины a к b номер оператора a равен min(a,b), а номер оператора b - max(a,b). Точка пересечения дуг появляется, если min(a,b) min(p,q) max(a,b) max(p,q) max(a,b) | min(a,b) max(p,q) max(a,b) min(p,q) min(a,b). Иными словами, точка пересечения дуг возникает в случае выхода управления за пределы пары вершин (a,b) (рис. 3). Количество точек пересечения дуг графа программы дает характеристику не структурированности программы. Одной из наиболее простых, но, как показывает практика, достаточно эффективных оценок сложности программ является метрика Т. Джилба, в которой логическая сложность программы определяется как насыщенность программы выражениями типа IF-THEN-ELSE. При этом вводятся две характеристики: CL - абсолютная сложность программы, характеризующаяся количеством операторов условия; cl - относительная сложность программы, характеризующаяся насыщенностью программы операторами условия, т. е. cl определяется как отношение CL к общему числу операторов. Используя метрику Джилба, мы дополнили ее еще одной составляющей, а именно характеристикой максимального уровня вложенности оператора CLI, что позволило не только уточнить анализ по операторам типа IF-THEN-ELSE, но и успешно применить метрику Джилба к анализу циклических конструкций. Большой интерес представляет оценка сложности программ по методу граничных значений. Введем несколько дополнительных понятий, связанных с графом программы. Пусть G=(V,E) - ориентированный граф программы с единственной начальной и единственной конечной вершинами. В этом графе число входящих вершин у дуг называется отрицательной степенью вершины, а число исходящих из вершины дуг - положительной степенью вершины. Тогда набор вершин графа можно разбить на две группы : вершины, у которых положительная степень =1; вершины, у которых положительная степень =2. Вершины первой группы назовем принимающими вершинами, а вершины второй группы - вершинами отбора. Для получения оценки по методу граничных значений необходимо разбить граф G на максимальное число подграфов G, удовлетворяющих следующим условиям : вход в подграф осуществляется только через вершину отбора; каждый подграф включает вершину (называемую в дальнейшем нижней границей подграфа), в которую можно попасть из любой другой вершины подграфа. Например, вершина отбора, соединенная сама с собой дугой-петлей, образует подграф. (рис. 4, таблица 1). Число вершин, образующих такой подграф, равно скорректированной сложности вершины отбора (таблица 2). Каждая принимающая вершина имеет скорректированную сложность, равную 1, кроме конечной вершины, скорректированная сложность которой равна 0. Скорректированные сложности всех вершин графа G суммируются, образуя абсолютную граничную сложность программы. После этого определяется относительная граничная сложность программы : Рассмотрим метрику, связывающую сложность программ с обращениями к глобальным переменным. Пара модуль-глобальная переменная обозначается как (p,r), где p - модуль, имеющий доступ к глобальной переменной r. В зависимости от наличия в программе реального обращения к переменной r формируются два типа пар модуль-глобальная переменная : фактические и возможные. Возможное обращение к r с помощью p показывает, что область существования r включает в себя p. Характеристика Aup говорит о том, сколько раз модули Up действительно получали доступ к глобальным переменным, а число Pup - сколько раз они могли бы получить доступ. Отношение числа фактических обращений к возможным определяется Эта формула показывает приближенную вероятность ссылки произвольного модуля на произвольную глобальную переменную. Очевидно, чем выше эта вероятность, тем выше вероятность несанкционированного изменения какой-либо переменной, что может существенно осложнить работы, связанные с модификацией программы. К сожалению, пока нельзя сказать, насколько удобен и точен этот метод на практике, так как нет соответствующих статистических данных. Суть метода состоит в оценке информационной прочности отдельно взятого программного модуля с помощью анализа характера использования переменных из списка ввода-вывода. Все множество переменных, составляющих список ввода-вывода, разбивается на 4 функциональные группы : 1. P - вводимые переменные для расчетов и для обеспечения вывода. Примером может служить используемая в программах лексического анализатора переменная, содержащая строку исходного текста программы, т.е. сама переменная не модифицируется, а только содержит исходную информацию. 2. M - модифицируемые, или создаваемые внутри программы переменные. 3. C - переменные, участвующие в управлении работой программного модуля (управляющие переменные). 4. T - не используемые в программе (паразитные) переменные. Поскольку каждая переменная может выполнять одновременно несколько функций, необходимо учитывать ее в каждой соответствующей функциональной группе. Далее вводится значение метрики Чепина : где a1, a2, a3, a4 - весовые коэффициенты. Весовые коэффициенты в выражении (4) использованы для отражения различного влияния на сложность программы каждой функциональной группы. По мнению автора метрики, наибольший вес, равный трем, имеет функциональная группа C, так как она влияет на поток управления программы. Весовые коэффициенты остальных групп распределяются следующим образом : a1=1, a2=2, a4=0.5. Весовой коэффициент группы T не равен 0, поскольку паразитные переменные не увеличивают сложность потока данных программы, но иногда затрудняют ее понимание. С учетом весовых коэффициентов выражение (4) принимает вид : где Nком - количество комментариев в программе; Nстр - количество строк или операторов исходного текста. Таким образом, метрика F отражает насыщенность программы комментариями. Исходя из практического опыта принято считать, что F=0.1, т. е. на каждые десять строк программы должен приходиться минимум один комментарий. Как показывают исследования, комментарии распределяются по тексту программы неравномерно: в начале программы их избыток, а в середине или в конце - недостаток. Это объясняется тем, что в начале программы, как правило, расположены операторы описания идентификаторов, требующие более плотного комментирования. Кроме того, в начале программы также расположены шапки, содержащие общие сведения об исполнителе, характере, функциональном назначении программы и т. п. Такая насыщенность компенсирует недостаток комментариев в теле программы, и поэтому формула (5) недостаточно точно отражает комментированность функциональной части текста программы. Более удачен вариант, когда вся программа разбивается на n равных сегментов и для каждого из них определяется Fi: где n1 - словарь операторов; n2 - словарь операндов программы. Вводя эту оценку, Холстед исходит из основных концепций теории информации, по аналогии с которыми частота использования операторов и операндов в программе пропорциональна двоичному логарифму количества их типов. Таким образом, выражение (6) представляет собой идеализированную аппроксимацию (1), т. е. справедливо для потенциально корректных программ, свободных от избыточности или несовершенств (стилистических ошибок). Несовершенствами можно считать следующие ситуации: а) последующая операция уничтожает результаты предыдущей без их использования ; б) присутствуют тождественные выражения, решающие совершенно одинаковые задачи ; в) одной и той же переменной назначаются различные имена и т. п. Подобные ситуации приводят к изменению N без изменения n. М. Холстед утверждает, что для стилистически корректных программ отклонение в оценке теоретической длины N^ от реальной N не превышает 10 %. Мы предлагаем использовать N^ как эталонное значение длины программы со словарем n. Длина корректно составленной программы N, т. е. программы, свободной от избыточности и имеющей словарь n, не должна отклоняться от теоретической длины программы N^ более чем на 10%. Таким образом, измеряя n1, n2, N1 и N2 и сопоставляя значения N и N^ для некоторой программы, при более чем 10%-ном отклонении можно говорить о наличии в программе стилистических ошибок, т. е. несовершенств. На практике N и N^ часто существенно различаются. 2. Другой характеристикой, принадлежащей к метрикам корректности программ, по М. Холстеду, является уровень качества программирования L (уровень программы): где V и V* определяется соответственно выражениями (2) и (3). Исходным для введения этой характеристики является предположение о том, что при снижении стилистического качества программирования уменьшается содержательная нагрузка на каждый компонент программы и, как следствие, расширяется объем реализации исходного алгоритма. Учитывая это, можно оценить качество программирования на основании степени расширения текста относительно потенциального объема V*. Очевидно, для идеальной программы L=1, а для реальной - всегда L1. 3. Нередко целесообразно определить уровень программы, не прибегая к оценке ее теоретического объема, поскольку список параметров программы часто зависит от реализации и может быть искусственно расширен. Это приводит к увеличению метрической характеристики качества программирования. М. Холстед предлагает аппроксимировать эту оценку выражением, включающим только фактические параметры, т. е. параметры реальной программы: Таким образом, E характеризует число требуемых элементарных решений при написании программы. Однако следует заметить, что E адекватно характеризует лишь начальные усилия по написанию программ, поскольку при построении E не учитываются отладочные работы, которые требуют интеллектуальных затрат иного характера. Суть интерпретации этой характеристики состоит в оценке не затрат на разработку программы, а затрат на восприятие готовой программы. При этом вместо теоретической длины программы N^ используется ее реальная длина:

Метрики

  • Ме́трика програ́ммного обеспе́чения (англ. software metric) — мера, позволяющая Такие известные метрики, как количество строк кода и цикломатическая сложность, Исследование программ Создать учётную запись Войти.
  • Результаты метрик кода можно генерировать для всего решения или Программы Щелкните Анализ и выберите пункт Создать метрики кода для.
  • Вот захотелось мне вышить для дочки эту метрику,где вес рост и тп. Не надо ее создавать с помощью каких-то программ -это.
  • Метрики сложности программ принято разделять на четыре Для создания атрибутов на элементах версионного хранилища.

ghdownloaderultimate75.fo.ru

Метрика для новорожденных: материалы и идеи

В этой статье:

Все большую популярность в последние годы приобретают подарки, сделанные своими руками. Одним из них является метрика для новорожденных. Выполняют ее из разных материалов, применяя множество техник. Это может быть метрика для новорожденных из дерева, вышитая крестом, гладью или бисером.

Что такое метрика для новорожденных?

В широком смысле под понятием «метрика» подразумевают свидетельство о рождении. Сегодня актуально производство декоративных свидетельств – картинок, содержащих сведения о новорожденном: имя, дату рождения, вес. Вышитые своими руками метрики для новорожденных, сделанные из дерева или напечатанные на бумаге становятся настоящим украшением и оберегом в детской комнате. Их можно выполнить самостоятельно либо купить готовые, сделанные мастером на заказ.

Варианты

Метрики делают из разных материалов. Их вышивают крестом, бисером, рисуют, выполняют из пластика и дерева.

Вышивка

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

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

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

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

Из дерева

Достойной альтернативой вышивке станут деревянные метрики для новорожденных. Такие изделия из дерева можно создать самому либо заказать готовые, если не хватает времени или нет навыков.

Чтобы сделать метрику для новорожденных из дерева своими руками, понадобятся:

  • кусок дерева или фанеры подходящего размера толщиной до 2 см;
  • лобзик;
  • трафарет;
  • дрель;
  • карандаш и краски для декора;
  • наждачка;
  • ножницы.

Метрика из дерева для новорожденных может быть выполнена в виде имени и даты рождения. В интернете выложено множество интересных идей. Скачать подходящий шаблон и видеоурок несложно.

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

Постер

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

Фоторамки

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

Фоторамку метрики для новорожденных можно посоветовать сделать тем, кто совсем не получает удовольствия от вышивки, но очень любит мастерить что-либо своими руками. Красиво выглядит крашеная деревянная рамка с подвесками или выполненная в технике декупаж. Трафареты и лекала метрики-рамки из дерева для новорожденных на любой вкус можно найти в интернете.

Другие варианты

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

Метрика для мальчика

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

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

Метрика для девочки

Для девочек схемы метрик для новорожденных могут иметь свое сюжетное решение. Рисунки для них нежнее. Часто вышивают принцесс, бабочек, цветы, сердечки, бантики. Цветовая гамма предполагает использование розовых, белых и красных оттенков.

Универсальные схемы

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

Как сделать схемы самостоятельно?

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

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

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

Полезное видео о том, как сделать метрику для новорожденного своими руками

moirody.ru


Смотрите также