Dynamic and Static Analysis
Overview
vFunction Static Analysis is obtained by analyzing the binaries (byte-code) of the application, overlaid on top of the Dynamic Analysis. The Dynamic Analysis is collected from the run-time data of a .NET or Java agent attached to the CLR or JVM running the application.
The data sets are sent to the vFunction server running the Architectural Observability (AO) Manager that analyzes the data and generates / updates an architectural baseline.
Dynamic Analysis
The Dynamic Analysis samples the various executing threads a few hundreds times a second to obtain runtime dependencies and call-stacks (for the execution flows). In addition, it tracks resources usage, such as DB transaction and table access, EJB or Spring Beans (for Java applications), Files and Network sockets, etc.
The process of collecting data for dynamic analysis is called Learning.
Static Analysis
Static Analysis data includes compile time dependencies, usage of infrastructure jars / binaries and data to minimize configuration files (.xml and .properties files).
Compiled Dynamic and Static Analysis
Both the Dynamic and Static data sets are sent to the vFunction Architectural Observability (AO) Manager for analysis. The analysis partitions the application into domains, mainly based on execution flows and resource usage from the dynamic analysis data, and then sets the content of each domain by computing the dependencies from the static analysis. This initial architecture is then refined by the architects / domain experts using the web UI of the AO Manager, to set the correct baseline architecture of the application. As the architect refines the domains, vFunction analysis continuously recomputes the scope and usage of the domains, thus ensuring a correct and consistent architectural specification. The architect may define development tasks to improve the architecture based on the results. After a new version of the application is deployed, another learning can be perfomed on top of the previous baseline architecture and the analysis will detect the architectural drifts with respect to the baseline architecture.
The term Domain is defined as a partition of a larger application (flows, classes, resources) performing a set of related functions or tasks. For example, if we have an e-commerce application, we may have a payments domain, a products management domain, and an order management domain.