Порядок и методология проведения

СТАТИЧЕСКИЙ АНАЛИЗ ПРОГРАММНЫХ СРЕДСТВ.

ОСНОВНЫЕ ПОНЯТИЯ И ОПРЕДЕЛЕНИЯ

Статический анализ (СА) - это процесс анализа исходного текста программы без её выполнения на ЭВМ. СА программ проводится:

ü для проверки модульной структуры программного средства, а также логической структуры отдельных модулей, и сравнения этих структур с приведенными в программной документации;

ü с целью подготовки исходных данных для проведения динамического анализа ПС и разработки плана тестирования ПС;

ü для оценки конструктивных характеристик программы, степени простоты модификации и сопровождения программы;

ü для определения наличия несовершенства в программе, неиспользуемых участков программы, лишних переменных;

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

ü для экспертизы идентичности программ при установлении авторства и разрешении правовых споров;

ü для определения количественных характеристик при оценке уровня качества программы.

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

Статический анализ программного средства предусматривает получение следующих характеристик (графических и метрических):

§ модульная структура ПС;

§ логическая структура отдельного программного модуля;

§ характеристика текста программы.

Модульная структура анализируемого ПС представляется в виде:

o графа вызовов;

o списка путей вызовов;

o матрицы вызовов и достижимости;

o точек вызовов;

o метрик иерархии вызовов.

Логическая структура отдельного программного модуля представляется в виде: графа управления; путей тестирования; метрик структуры управления. Характеристики текста программ включают в себя: статистические данные о комментированности программы и текстовые метрики Холстеда.

Граф вызовов – это ориентированный граф, в котором вершины – модули ПС, а рёбра – ориентированы от вызывающего модуля к вызываемому.

Граф управления − это ориентированный граф, вершинами которого являются логические блоки, а направленные ребра ориентированы в направлении передачи управления между блоками.

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

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

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

Путь тестирования – это маршрут в графе управления программного модуля, начальная вершина которого является входной вершиной графа, а конечная вершина − выходной вершиной графа.

Точка вызовов – это местоположение вызова программной компоненты (модуля), задаваемое номером строки и столбца расположения оператора вызова.

Кроме этого, СА предусматривает определение ряда количественных характеристик, таких как иерархическая и структурная сложность, тестируемость и др. Иерархическая сложность: I=N/L, где N – количество вершин в графе вызовов модулей;

L-количество уровней.

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

Структурная сложность: S=D/N,

где D - количество ребер в графе вызовов модулей;

N - количество вершин.

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

ПОРЯДОК И МЕТОДОЛОГИЯ ПРОВЕДЕНИЯ СТАТИЧЕСКОГО АНАЛИЗА ПС

Статический анализ проводится в соответствии со стандартом, все положения которого подлежат обязательному применению в испытательных центрах (лабораториях), аккредитованных в системе РОСИНФОСЕРТ. Данный стандарт распространяется на все программные средства независимо от их назначения и области применения. Проведение СА начинается обычно с построения графа вызовов, который отражает модульную структуру ПС. Вершины графа изображаются в виде прямоугольников, содержащих имена компонент (модулей), ребра – в виде стрелок. Затем формируется список путей вызовов.

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

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

ü на основании последовательности вызовов компонент можно непосредственно указать возможные результаты некоторой модификации;

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

ü список дает возможность составления перечня тестовых примеров.

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

Элементы в иерархии вызовов могут находиться в одной из следующих взаимосвязей:

§ одна из них непосредственно вызывает другую;

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

Матрица вызовов и достижимости позволяет ответить на вопросы:

§ если изменить модуль А, то может ли это как-то повлиять на модуль В (так называемый волновой эффект)?

§ каково число модулей, вызываемых модулем А, и что это за модули?

§ каково число модулей, достижимых модулем А, но не вызываемых из него, и что это за модули?

§ какие модули являются недостижимыми (никогда не вызываемыми)?

§ какие вершины графа являются конечными (не содержащими вызова)?

§ какие вызовы являются рекурсивными?

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

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

Т=[(1/Nв) · (∑1/Pi)]-1 ,

i=1 где NВ- количество путей вызовов в графе вызовов модулей;

Pi- тестируемость i -го пути вызовов, равная

k

Pj=[∑1/A(Mj)]-1,

j=1

где k - количество модулей в пути вызовов;

А (Мj) - доступность модуля Мj, принадлежащего пути Рi, определяется следующим образом:

n

А ( Мj )= ∑ А (Мx)/ C (Мx),

x=1

где А (Мx) - доступность x-го модуля, вызывающего Мj; C (Мx) - количество всех модулей, которые вызывает Мx;

n - количество модулей, которые вызывают Mj;

А (М)=1, если модуль М является самым верхним (головным) модулем.

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

§ приводит к большим затратам времени и человеческих ресурсов;

§ требует привлечения эксперта высокой квалификации (как программиста и как эксперта качества);

§ точность результатов не всегда удовлетворительна из-за больших объемов и сложности программ (в ряде случаев человеческие возможности не позволяют применить ручной анализ).

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

Независимо от способа проведения СА (автоматизированного или ручного) следует учитывать особенности СА на различных этапах.

1) Этапы анализа и проектирования.

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

2) Этап программирования.

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

3) Этап тестирования и отладки.

На этом этапе статический анализ применяется для получения исходной информации при подготовке и оценки полноты тестов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: