Инструменты анализа воздействия

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

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

Выявляйте сбои синхронизации до того, как это сделают пользователи.

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

Узнать больше

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

Что такое анализ воздействия в разработке программного обеспечения?

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

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

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

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

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

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

Три типа анализа воздействия

Методы анализа воздействия классифицируются по способу сбора информации о зависимостях:

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

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

Статический и динамический анализ воздействия: ключевые различия

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

Процесс анализа воздействия: шаг за шагом

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

Шаг 1: Определите изменение. Точно укажите, что именно изменяется: конкретная функция, поле, класс, модуль, книга правил или столбец базы данных. Точность на этом этапе определяет точность всего последующего. Расплывчатые определения изменений («мы изменяем модуль платежей») приводят к расплывчатым результатам.

Шаг 2: Создайте или запросите модель зависимостей. Модель зависимостей представляет собой взаимосвязи между всеми компонентами системы. Для автоматизированных инструментов эта модель создается путем анализа исходного кода. Для ручного анализа небольших систем ее можно поддерживать в качестве документации. Модель должна быть актуальной: устаревшая документация по зависимостям приводит к неточным оценкам влияния.

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

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

Шаг 5: Определите область тестирования. Набор факторов, влияющих на ситуацию, — полный список затронутых компонентов — определяет минимальную область тестирования. Любой компонент в этом наборе, для которого отсутствует автоматизированное тестирование, представляет собой риск, который необходимо устранить либо путем добавления тестов, либо путем ручной проверки.

Шаг 6: Документирование и анализ. Представьте оценку воздействия консультативному совету по изменениям (КСУ) или соответствующим заинтересованным сторонам в качестве основы для утверждения изменений. Перечисленный объем воздействия с классификацией рисков заменяет оценки застройщика данными о состоянии конструкции.

Анализ влияния тестирования: как это работает в CI/CD

Анализ влияния изменений на тестирование (TIA) применяет анализ влияния именно к проблеме тестирования: какие тесты необходимо запустить при изменении кода? Без TIA конвейеры CI запускают полный набор тестов при каждом коммите. В кодовой базе с 50 000 тестов и набором тестов, выполнение которого занимает 45 минут, это означает, что каждый запрос на слияние блокируется на 45 минут, поэтому разработчики обходят это ограничение, отправляют несколько коммитов, не дожидаясь результатов, и теряют обратную связь, которую должно обеспечивать тестирование.

TIA решает эту проблему, отслеживая соответствие между кодом и тестами: какие строки кода покрываются какими тестами. Когда коммит изменяет определенные строки, TIA выбирает только те тесты, которые покрывают эти строки и зависимые от них файлы. Для изменения, затрагивающего три файла из 50 000, может потребоваться 200 тестов вместо 50 000. Конвейер выполняется за секунды, а не за минуты.

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

  1. Определяет, какие файлы и функции изменились (по данным сравнения изменений в Git).
  2. Проверяет, какие тесты охватывают эти файлы и функции.
  3. Добавляет тесты, охватывающие любой компонент в статическом графе зависимостей измененного кода.
  4. Запускает выбранное подмножество тестов; все остальные тесты проходят успешно, и предполагается, что они не затронуты.

К инструментам, реализующим TIA, относятся анализ влияния тестов (TEA) от Microsoft в Visual Studio, движок TIA от Parasoft, выбор тестов в Gradle, а также несколько плагинов для CI, интегрированных с Jest, pytest и другими средствами запуска тестов. Точность TIA зависит от точности модели зависимостей: инструмент, отслеживающий только прямое покрытие кода без обхода зависимостей, пропустит тесты, охватывающие компоненты, находящиеся на три уровня дальше от места изменения.

Травиматоидный артрит на практике: до и после

В типичном корпоративном бэкэнд-сервисе включение TIA сокращает время выполнения тестов на 60-80% для среднего запроса на слияние. Компромисс заключается в том, что очень большие изменения, затрагивающие общие утилиты, базовые классы или широко используемую конфигурацию, всё ещё могут запускать большие подмножества тестов. TIA наиболее эффективен для разработки новых функций и исправления ошибок, где изменения локализованы. Для сквозных изменений, таких как обновления фреймворка или модификации общей схемы, полный запуск тестов остаётся более безопасным вариантом.

Анализ влияния в управлении требованиями и изменениями

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

Анализ влияния требований использует прослеживаемость для определения объема работ на последующих этапах. Матрица прослеживаемости, связывающая каждое требование с соответствующими элементами проектирования, тестовыми примерами и доказательствами верификации, позволяет определить полный объем повторной верификации, необходимой при любом изменении требований. В регулируемых отраслях, таких как медицинские изделия в соответствии с FDA 21 CFR Part 11, авиационное программное обеспечение в соответствии с DO-178C, автомобильное программное обеспечение в соответствии с ISO 26262, объем повторной верификации является нормативным требованием, а не факультативной практикой обеспечения качества.

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

Анализ влияния на большие и устаревшие кодовые базы

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

Ряд особенностей больших кодовых баз делает ручной анализ влияния ненадежным:

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

Зависимости между языками программирования. Программа на COBOL записывает данные в таблицу DB2. Сервис на Java считывает данные из той же таблицы. Конвейер на Python обрабатывает выходные данные сервиса на Java. Изменение схемы DB2 затрагивает все три уровня. Ни один инструмент статического анализа, работающий только с одним языком, не может отследить эту цепочку зависимостей между языками; для этого необходим инструмент, который понимает и связывает все три языка в единой модели зависимостей.

Косвенные зависимости через данные. Две программы, которые никогда не вызывают друг друга, могут быть связаны через общий файл. Программа A записывает данные в набор данных X; программа B читает данные из набора данных X. Изменение структуры набора данных X влияет на обе программы, но зависимость представляет собой не вызов функции, а контракт данных, выраженный через операторы JCL DD и определения дескрипторов файлов COBOL. Структурный анализ, отслеживающий только вызовы функций, полностью упускает из виду этот класс зависимостей.

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

Решение для анализа модернизации устаревших систем в этих средах должно обрабатывать все эти случаи: оно должно анализировать фактически используемые языки программирования (включая COBOL, JCL, PL/I, RPG, Assembler и DB2), разрешать неявные зависимости через общие структуры данных, отслеживать межъязыковые цепочки и различать достижимый и недостижимый код.

Инструменты анализа воздействия: их сравнение.

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

ИнструментПервичный подходЯзыкиДля каких задач
SMART TS XLСтатическое сопоставление зависимостей + сопоставление зависимостей между языками программированияCOBOL, JCL, Java, Python, .NET, RPG, SQLАнализ влияния многоязычности на предприятиях и мэйнфреймах
Понять с помощью SciToolsСтатический анализ, графы вызовов, визуализация зависимостей70 + языкиПонимание многоязычного кода и наборы показателей эффективности
Структура101Архитектурный анализ, графы зависимостейJava, C#, JVM/.NETВлияние структурных факторов на корпоративные приложения на Java/C#
CAST AIPАнализ приложений, технический долг, влияниеJava, .NET, COBOL, SQLАнализ влияния на бизнес и технические аспекты на уровне портфеля проектов
Пакет программ AxivionСемантические графы зависимостей для C/C++C, C ++,Системы, критически важные для безопасности, соответствие стандарту MISRA, встроенные системы.
ПарасофтАнализ влияния тестирования, интеграция CI/CDJava, C/C++, .NETТИА в регулируемых отраслях, испытаниях, критически важных для безопасности.
Джама КоннектОтслеживаемость требований, влияние на артефактыЯзыковая независимость (уровень требований)Системная инженерия, регулируемые отрасли, DO-178C/ISO 26262
SonarQubeКачество кода, анализ зависимостей внутри языка программирования.30 + языкиКонтрольные точки качества кода; ограниченный анализ влияния на другие системы.
IntelliJ IDEA / EclipseИерархия вызовов IDE, анализ ссылокJava, Kotlin, PythonАнализ локального воздействия на проект на уровне разработчиков.

Understand от SciTools — это наиболее полный специализированный инструмент анализа влияния изменений для команд разработчиков, работающих с современными языками программирования. Функция Impact Sets вычисляет транзитивное замыкание всех сущностей кода, затронутых конкретным изменением, — каждой функции, класса и переменной, достижимой через граф зависимостей от начальной точки. Он поддерживает более 70 языков и создает подробные графы вызовов, диаграммы потоков данных и карты связей сущностей.

Structure101 — это мощный инструмент для анализа влияния архитектуры Java и C# на архитектуру. Он визуализирует структуру зависимостей пакетов и классов в виде интерактивных карт и выявляет, где предлагаемые изменения нарушают архитектурные границы или создают новые циклы в графе зависимостей.

CAST AIP работает на уровне портфеля, анализируя всю инфраструктуру приложений, включая COBOL, Java, .NET, SQL и другие языки, для получения оценок влияния на бизнес наряду с анализом технического влияния. Он широко используется в программах комплексной проверки при слияниях и поглощениях, а также в программах рационализации портфеля.

Пакет программ Axivion Suite ориентирован на разработку критически важных с точки зрения безопасности приложений на языках C и C++, где анализ воздействия должен соответствовать нормативным требованиям (ISO 26262, DO-178C, MISRA) и предоставлять официальные доказательства полноты анализа.

Parasoft — это самое мощное решение TIA для регулируемых отраслей, включающее интегрированный с CI/CD механизм выбора тестов, который отслеживает покрытие на уровне операторов и выбирает подмножества тестов на основе точного обхода зависимостей.

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

Инструменты на основе IDE (иерархия вызовов в IntelliJ, анализ ссылок в Visual Studio, граф вызовов в Eclipse) предоставляют разработчикам локальный анализ влияния изменений в рамках проекта. Они эффективны для понимания того, на что влияют изменения в модуле, но не могут отслеживать зависимости между проектами, языками программирования или мэйнфреймами.

Как SMART TS XL Проводит анализ воздействия

SMART TS XL Выполняет анализ влияния, анализируя каждый исходный файл в среде, программы COBOL, потоки заданий JCL, копибуки, схемы SQL, классы Java, модули Python, программы RPG и другие, и создавая единую модель зависимостей, которая представляет все структурные связи между всеми языками. Эта модель является основой: анализ влияния представляет собой запрос к ней, начинающийся с любого компонента и проходящий по графу зависимостей для перечисления всего, что затронуто.

Когда команда предлагает изменить член книги копирования COBOL, SMART TS XLАвтора анализ воздействия Ответы: какие программы содержат этот скрипт? Какие из этих программ вызываются какими шагами задания JCL? Какие таблицы DB2 читают или записывают эти программы? Какие Java-сервисы используют эти таблицы? Какие тестовые примеры охватывают эти программы? Ответ не является приблизительной оценкой, это полный, перечисленный список, полученный из фактической структуры кода, с именами файлов, именами программ, именами заданий и номерами строк.

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

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

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

Передовые методы анализа воздействия

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

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

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

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

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

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

Инвестиции в инфраструктуру анализа воздействия, будь то с помощью специализированного инструмента, такого как SMART TS XLВозмещение затрат на анализ влияния изменений, таких как Parasoft, или на платформу отслеживания требований, такую ​​как Jama, осуществляется за счет стоимости изменений, которые не привели к неожиданным сбоям, тестов, которые не потребовали запуска полного набора, и развертываний, которые не вызвали инцидентов. Это возмещение не является гипотетическим. Каждый инцидент в производственной среде, вызванный необнаруженной зависимостью, является прямым результатом анализа, который не проводился до внесения изменений.