Надежность АСОИУ (1088455), страница 49
Текст из файла (страница 49)
Холстед ввел теоретический словарь программы (n*), т. е.словарный запас, необходимый для написания программы, с учетом того, чтонеобходимая функция уже реализована в данном языке и, следовательно,программа сводится к вызову этой функции. Например, согласно Холстеду,возможное осуществление процедуры выделения простого числа могло бывыглядеть так:CALLSIMPLE (X,Y), где Υ— массив числовых значений, содержащий искомоечисло X. - Теоретический словарь в этом случае будет состоять из n*1:{CALL,SIMPLE (...)}, п*1 = 2; n * 2 : [ Х , Y], n*2·= 2,а его длина, определяемая как n * =n1* + п*2, будет равна 4.
Используя n*Холстед вводит оценку V * : V * = n* log2n*, с помощью которой описываетсяпотенциальныйобъемпрограммы,соответствующийкомпактному тексту программы, реализующей данный алгоритм.максимальноМетрики сложности потока управления программами. Как правило, с помощьюэтих показателей качества в процессе оценок ПО оперируют либо плотностьюуправляющихпереходоввнутрипрограмм,либовзаимосвязямиэтихпереходов.И в том и в другом случае стало традиционным представление программ ввиде управляющего ориентированного графа G = (V,E), где V— вершины,соответствующие операторам, а Е—дуги, соответствующие переходам.Метрика Маккейба.. Основной метрикой сложности Маккейб предлагаетсчитать цикломатическую сложность графа программы, характеризующуютрудоемкость тестирования программы.Для вычисления цикломатического числа Маккейба Z(G) применяетсясоотношениеZ(G) = e - v + 2p,где е— число дуг ориентированного графа G9 ν — число вершин; р — числокомпонентов связности графа.Число компонентов связности можно рассматривать как количество дуг,которые необходимо добавить для преобразования графа в сильно связный.Сильно связным называется граф, любые две вершины которого взаимнодостижимы.
Для графов корректных программ, т. е. графов, не имеющихнедостижимых от точки входа участков и «висячих» точек входа и выхода,сильно связный граф, как правило, получается путем замыкания дуги вершины,обозначающей конец программы, на вершину, обозначающую точку входа в этупрограмму.По сути Z(G) определяет число линейно независимых контуров в сильносвязном графе.
Иначе говоря, цикломатическое число Маккейба показываеттребуемое количество проходов для покрытия всех контуров сильно связногографа или количество тестовых прогонов программы, необходимых дляисчерпывающего тестирования по критерию «работает каждая ветвь».Цикломатическое число зависит только от количества предикатов,сложность которых при этом не учитывается.Метрика Майерса.
Исходя из вышеуказанного ограничения, Г. Майерспредложил расширение этой метрики. Суть подхода Г Майерса состоит впредставлении метрики сложности программ в виде интервала [Z(G), Z(G) + h].Для простого предиката h = 0, а для п-местных предикатов h= n - 1 .Такаяметрикапозволяетразличатьпрограммы,представленныеодинаковыми графами.Метрика подсчета точек пересечения. Для оценки сложности программ можноиспользовать метрику, получившую название «подсчет точек пересечения» (М.Вудвард, М. Хенел и Д. Хидлей).
Данная метрика ориентирована на анализпрограмм, при создании которых использовалось кодирование на таких языках,как язык ассемблера.В графе программы, где каждому оператору соответствует вершина, т. е. неисключены линейные участки, при передаче управления от вершины а к bномер оператора «равен 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).Иными словами, точка пересечения дуг возникает в случае выходауправления за пределы пары вершин (а, b). Количество точек пересечения дугграфа программы дает характеристику неструктурированности программы.Метрика Джилба.
Одной из наиболее простых, но, как считаютразработчики, достаточно эффективной для оценки сложности программявляется метрика, предложенная Джилбом, в которой логическая сложностьпрограммы определяется как насыщенность программы выражениями типа IF— THEN — ELSE. При этом вводятся две характеристики:CL — абсолютная сложность программы, характеризующаяся количеством условных операторов;cl—относительнаясложностьпрограммы,характеризующаясянасыщенностью программы операторами условия, т. е.
cl определяется какотношение CL к общему числу операторов.Дополнив оценку Джилбахарактеристикоймаксимальногоуровнявложенности оператора CLI, можно не только уточнить анализ по операторамтипа IF — THEN — ELSE, но и успешно применить метрику Джилба к анализуциклических программных конструкций.Метрика граничных значений. В этом методе вводится несколькодополнительных понятий, связанных с графом программы.Положим, что имеется ориентированный граф программы G=(V, E) сединственной начальной и единственной конечной вершинами.
В этом графечисло входящих в вершину дуг называется отрицательной степенью вершины, ачисло исходящих из вершины дуг — положительной степенью вершины. Тогданабор вершин графа можно разбить на две группы: вершины первой группыназывают принимающими, а вершины второй группы — вершинами отбора.Для получения оценки по методу граничных значений граф Gp a з в и вается на максимальное число подграфов G', удовлетворяющихследующим условиям:вход в подграф осуществляется только через вершину отбора;каждый подграф включает вершину (называемую в дальнейшем нижнейграницей подграфа), в которую можно попасть из любой другой вершиныподграфа.Число вершин, образующих такой подграф, принимается равнымскорректированной сложности вершин отбора. Каждая принимающая вершинаимеет скорректированную сложность, равную 1, кроме конечной вершины,скорректированная сложность которой равна 0.Скорректированные сложности всех вершин графа Суммируются, образуяабсолютную граничную сложность программы.
После этого определяетсяотносительная граничная сложность программы:S 0 = 1 − (v − 1) / S a ,Где S0 — относительная граничная сложность программы; S — абсолютнаяграничная сложность программы; ν — общее число вершин графа программы.Метрикисложностиданныхпотоковопределяютиспользование,конфигурацию и размещение данных в программах. В качестве примера можнорассмотреть метрику, связывающую сложность программ с обращениями кглобальным переменным.Взаимосвязанную пару «модуль — глобальная переменная» можнообозначить как (р, r), где р— модуль, имеющий доступ к глобальной переменной г. В зависимости от наличия в программе реального обращения кпеременной r формируются два типа пар «модуль — глобальная переменная»:фактические и возможные.
Возможное обращение к r с помощью р показывает,что область существования гвключает р.Характеристика Аир (фактическая пара) говорит о том, сколько раз модулиνρ действительно получали доступ к глобальным переменным, а число Pup(возможная пара) — сколько раз они могли бы получить доступ.Отношение числа фактических обращений к возможным определяетсясоотношениемRup = Aup Pup .Эта формула показывает приближенную вероятность ссылки произвольного модуля на произвольную глобальную переменную.
Очевидно, чточем выше эта вероятность, тем выше вероятность «несанкционированного»изменения какой-либо переменной, что может существенно осложнить работы,связанные с модификацией программы.Метрика спена. Определениеспенаосновываетсяналокализацииобращений к данным внутри каждой программной секции. Под с ц е п о мпонимается число утверждений, содержащих данный идентификатор, междуего первым и последним появлением в тексте программы. Следовательно,идентификатор, появившийся η раз, имеет спен, равный ( n - 1). При большомзначении спена усложняются тестирование и отладка программного изделия.Метрика оценки информационной прочности ПИ.
Рассматриваемый подход коценке информационной прочности отдельно взятого программного модуляили изделия базируется на анализе характера использования переменных вводавывода.Всемножествопеременных,составляющихсписокввода-вывода,разбивается на несколько функциональных групп, например:Р— вводимые переменные для расчетов и обеспечения вывода (т. е. самапеременная не модифицируется, а только содержит исходную информацию);М— модифицируемые или создаваемые внутри программы переменные;С— переменные, участвующие в управлении работой программногоизделия (управляющие переменные);T— не используемые в программе («паразитные») переменные.Поскольку каждая и з таких переменных может выполнять одновременнонесколько функций, ее учитывают в соответствующей функциональной группе.Значение рассматриваемой метрики определяется соотношением:Q = a1 ⋅ P + a 2 ⋅ M + a3 ⋅ C + a 4 ⋅ T ,где a1, аг, α3, α4 — весовые коэффициенты.Весовые коэффициенты в приведенном уравнении использованы для отраженияразличного влияния на сложность программы каждой функциональной группы.Рассмотренные метрики сложности программ основаны на анализеисходных текстов программ и графов, что обеспечивает единый подход кавтоматизации их расчета.Наряду с рассмотренными используются и другие метрики качествапрограммного обеспечения, например:• метрики стилистики и понятности программ;• метрика уровня комментированноcти программ;• метрика изменения длины программной документации и т.