This page provide you the list of root causes that can lead to a large SCC. We propose also steps to break or remove the Large SCC.
For more information about SCC refer to Transaction Configuration Center - Information - Definition and impacts of the large Strongly Connected Component
Release | Yes/No |
---|---|
8.3.x | |
8.2.x | |
8.1.x | |
8.0.x | |
RDBMS | Yes/No |
---|---|
Oracle Server | |
Microsoft SQL Server | |
CSS2 | |
Step by Step scenario
- Run a full snashot
- Compute application Function points
- Read TCC log file
The root cause of getting a large SCC is one, some or all of the reasons below:
Unreviewed "dynamic" links:
For cross-technology links, External Links will identify and record a link between two objects whose validity cannot be precisely determined. These links are tagged as "dynamic", and the inspection of dynamic links is a mandatory step for validating analysis results.You may Review Dynamic Links, as explained in the following page Review Dynamic Links
In order to check this, and to try to break the large SCC group into several SCC groups you can perform the following:
- Get the content of the largest SCC: Transaction Configuration Center - Information - How to get the content of the large SCC
Get link statistics in the largest SCC group:
Get the number of not ignorable links between large group member:
SELECT 'NOT IGNORABLE', COUNT(1) FROM ( SELECT DISTINCT IdClr, IdCle, Prop FROM Acc WHERE AccKnd IN (0, 4096, 262144, 1048576) ) acc WHERE IdCle IN ( SELECT Object_ID FROM FP_LargestSCC ) AND IdClr IN ( SELECT Object_ID FROM FP_LargestSCC ) AND ( Prop & 1 ) = 0
for example:
"NOT IGNORABLE";1614
Get the number of ignorable links between large group members :
SELECT 'IGNORABLE', COUNT(1) FROM ( SELECT DISTINCT IdClr, IdCle, Prop FROM Acc WHERE AccKnd IN (0, 4096, 262144, 1048576) ) acc WHERE IdCle IN ( SELECT Object_ID FROM FP_LargestSCC ) AND IdClr IN ( SELECT Object_ID FROM FP_LargestSCC ) AND ( Prop & 1 ) = 1
"IGNORABLE";1160
Get the number of ignored links between large group members:
SELECT 'IGNORED', COUNT(1) FROM ( SELECT DISTINCT IdClr, IdCle, Prop FROM Acc WHERE AccKnd IN (0, 4096, 262144, 1048576) ) acc WHERE IdCle IN ( SELECT Object_ID FROM FP_LargestSCC ) AND IdClr IN ( SELECT Object_ID FROM FP_LargestSCC ) AND ( Prop & 65536 ) = 65536
"IGNORED";0
Interpret statistics:
In this step you need to compare the proportion of ignored / ignorable links among total links in the large SCC group, in the above example we can see the following:
There is 1160 ignorable (dynamic) links among 1614+1160 links (sum of ignorable + non_ignorable links).
- Number of ignored links 0. None of the 1160 dynamic links has been ignored.
You can see that dynamic links contribute for half of the links in the large SCC group
You should review Review Dynamic Links
- Compute function point from TCC.
From the log of TCC, check if there is a large SCC group, for this refer to Check if there is a large SCC group that has been ignored in the analysis
Wrong usage of the KB Update Tool with table CI_LINKS to add the wrong links:
The issue can be due to the fact that, the KB Update Tool have created the links that lead to this behavior, in order to check this do the following
- Backup the tiplet
- Remove the KB Update Tool that use the CI_LINKS table
- Compute a full snapshot
- Compute function point from TCC.
From the log of TCC, check if there is a large SCC group, for this refer to Check if there is a large SCC group that has been ignored in the analysis
False links:
- Retrieve information about objects involved in the strongly connected component, for this please refer to the page SQL Queries - CAST Knowledge Base - Queries on objects - How to retrieve information about objects involved in the strongly connected component
- Retrieve the full name of the object (we call this object "OB") that have the biggest number of called/caller objects (in this example we consider that this object have called objects) (We can start our investigation with an object that have less called/caller object if we suspect that this object have false links, for example, a set method that have 100 caller can be a suspicious case)
- Search for the object "OB" in Enlighten
- Draw links from "OB" to "called objects"
- If there is a link from one called object to the object "OB" then perform the step "g" else perform the next step.
- Search for called objects of the called objects of "OB" and so on till you find a link from one of those objects to the object "OB"
- This link can be a false one, this can be confirmed from the source code, if yes then you can investigate this by referring to Enlighten - Objects - Missing objects you can also drop it, for this please refer to Enlighten - Information - How to drop links
- Compute function point from TCC.
From the log of TCC, check if there is a large SCC group, for this refer to Check if there is a large SCC group that has been ignored in the analysis, if yes then go back to step "a"
Analyzed Cyclical Relation :
For more information about the various relation that CAST handle refer to ENL - Link Examples. Lets take the example when the relation is a Call, ie. when we are in the case of Cyclical Call:
void B() { C(); }; void C() { A(); END_of_Transaction(); }; void A() { B(); }; void END_of_Transaction() { std::cout << "END_of_Transaction" << std::endl; }; int main() { std::cout << "Entry_of_Transaction" << std::endl; A(); return 1; }
The directed graph of the cyclical call Analyze by AIP will be the following:
This graph is viewed in Enlighten as follows:
And from TCC as follows:
Ticket # Number, Number
Specify pages indirectly related to this topic.(eg:side- effects)