Порядок и методология проведения статического анализа программных средств

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оценка тестируемости ПС–(T) может быть проведена с использованием формул

Т = [(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
Сейчас читают про: