You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Impact Analysis is probably the most powerful functionality of Kiuwan Architecture.

Basically, Impact Analysis lets you to deeply inspect your application for whatever criteria you need, allowing you to discover unknown paths between your components.

Impact Analysis will provide insights on quite different, but important, questions such as:

  • To check if software elements are compliant with architectural standards (e.g. detecting illegal dependencies).
  • To perform impact analysis (identify items that may be affected by a change in a specific set of items).
  • To detect potential design antipatterns (‘smells’) due to bad couplings.
  • To resolve the group of software items that belongs to a certain category (classification by tagging).
  • To keep track of the code items that makes up a certain logical entity.

 

In few words, Impact Analysis “discovers” connections (paths) between source(s) and target(s) components.

For example, let’s suppose you want to know how your J2EE application is accessing the database, i.e. which Java classes are accessing data tables.

If you don’t know internally the application, you might be interested to know is the app is using some core classes or freely accessing the database.

Or even, you could be imposing the use of some core classes to access the database, but you want to discover if there’s any class that is not using those core classes and it’s going directly to the database (something that you probably consider as an architecture violation).

Kiuwan Architecture lets you answer those questions.

First, you should translate you question to Kiuwan Architecture concepts:

  • Tables will be “source” components (the “Starting Components”)
  • Java classes will be “target” components (the “Impacted Components”)

As a mnemonic rule, you could think of an Impact Analysis query in terms of SQL:

  • Impacted components (targets): what we want to know (the SELECT clause)
  • Starting components (sources): the conditions to meet (the WHERE clause)

Besides to specify impacted and starting components, you can also specify constraints about how to navigate through the relationships. By default, Kiuwan will find any path of any type, but you can restrict those paths.

In order to make the query, Analysis Impact page looks as follows.

Starting Components Selectors

 

First you must specify Starting (sources) component(s).

This dialog lets you to specify the starting (source) component(s) for your query.

To select these starting components, clicking on Add button will open a components selector. We will use our above example in this guide.

Just open, the dialog will display all the components of the application. 

 

In our example, we are looking for “Table” components as “starting” (or source) components. So you can specify “Table” as component type. Doing this way and after click on Apply button, Kiuwan will display the list of components that match that filter.

Now, you have two options:

  1. Select any set of tables (selecting those you are interested in)
  2. Select all of them

In the 1st case, after selecting those tables you are interested in, click on “Add Selection” button.

As an example, you could get something like this:

In the 2nd case, just click “Add Filter”. This will produce:

 

Difference is clear. In the 1st case, only paths from those tables will be searched. In the 2nd case, paths will be searched for all the tables in the application.

In our example, we are interested in all the tables, so we will select 2nd option.

Next, we should define Navigation Constraints. Next section will show to you how to do it.

 

Navigation Constraints

 

Besides to specify starting components, you can also specify constraints about how to navigate through the relationships.

By default, Kiuwan will find any path of any type, but you can restrict those paths.

 

Relations

Any relation between components belongs to a certain type.

You can specify what relations should be considered when searching for path between components.

Direction

Besides of a relation type, any relation has a direction: Incoming or Outgoing.

  • By Incoming, we mean those relations “ending” at the Starting (source) components
  • By Outgoing, we mean relations “starting” from the Starting (source) components.

In our example, we are looking for Java classes that are accessing Tables.  In this case, usual relations of a java class with a table (insert, delete, etc)  go from the java class to the table, so in this case, we could select “Incoming”.

In case of doubt, select “Any” and reduce afterwards your search after inspecting the results.

Depth

A pair of components (A and C) can be connected directly (A-C) or indirectly (through intermediate components, A-B-C).

Depth specifies the maximum number of connection links between components when searching for paths.

For example, given A-B-C-D-E, if you specify depth=3, A-D is a valid path (as well as A-B and A-C, of course), but A-E will not be.

 

Then, following our example, it makes sense to specify:

  • Relations: empty -> we want all the relations
  • Direction: Incoming (or Any) -> those relations going to the tables
  • Detph: 1 -> only direct connections

 

 

 

Impacted Components Filter

Besides to specify starting components and navigation constraints, you can also specify a filter for impacted (reached) components.

If you do not specify any filter, most probable Kiuwan will show to you a huge amount of results. To further concrete your query you can use this dialog.

This dialog let you compound any filter that will act against the result set. It works exactly as the Component search filter of Components page. Please visit XXXXXXXXXX

 

In our example, we are looking for Java classes that are accessing data tables, so we should specify that condition in the filter: Language=Java (or Type=Class).

Now, we are ready to run Impact Analysis clicking on Analyze button.

 

Results

Results section will list all the “impacted” (reached) components, i.e.:

  1. reachable from the starting set of components,
  2. complying with the specified navigation constrains, and
  3. satisfying the specified filters

Kiuwan will show the total number of components as well as a list of them.

Most important aspect of this listing is that it allows you to get a full detail on the found paths.

You can click on  icon of any component to open a window where you can see the details.

For example, next image shows how org.owasp.webgoat.session.UserDatabase class is accessing three tables  (ROLES, USER_ROLES and USERS)

This graphic is quite simple because depth=1, but in case of higher values that graph will be very valuable to your goals.

Example for depth=2 

and depth=3 

 

As you can guess, as we increase the dept value, the number of paths exponentially increases.

 

 

 

  • No labels