Корпорация IBM представила технологию структурного анализа Structural Analysis for Java (SA4J), с помощью которой проектировщики и разработчики программного обеспечения могут оценивать архитектурную целостность Java-приложений. Эта технология применима также для определения основных причин потенциальных архитектурных проблем, оценки стабильности приложений, выявления «структурных антишаблонов», фактически — примеров неудачных архитектурных решений, а также для визуализации и просмотра «сети зависимостей». Функция выявления внутренних зависимостей позволяет получить схематическое представление о взаимосвязях в процессе разработки ПО. Кроме того, новая технология позволяет оценить эффект от принятия тех или иных архитектурных решений.

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

«Это решение позволяет выявить ряд таких антишаблонов, — подчеркнул Бессин. — Мы стремимся найти способы увеличить качество программ на максимально ранних этапах их создания».

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

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