Purpose (problem description)

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

Observed in CAST AIP
Release
Yes/No
8.3.x (tick)
8.2.x (tick)
8.1.x (tick)
8.0.x (tick)
Observed on RDBMS
RDBMS
Yes/No
Oracle Server (tick)
Microsoft SQL Server (tick)
CSS2 (tick)

Step by Step scenario

  1. Run a full snashot
  2. Compute application Function points
  3. Read TCC log file
Action plan

The root cause of getting a large SCC is one, some or all of the reasons below:

  1. 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:

    1. Get the content of the largest SCC: Transaction Configuration Center - Information - How to get the content of the large SCC
    2. Get link statistics in the largest SCC group:

      1. 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
      2.  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


      3. 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
    3. 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

    4. You should review Review Dynamic Links

    5. Compute function point from TCC.
    6. 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

  2. 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

    1. Backup the tiplet
    2. Remove the KB Update Tool that use the CI_LINKS table
    3. Compute a full snapshot
    4. Compute function point from TCC.
    5. 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

  3. False links:

    1. 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
    2. 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)
    3. Search for the object "OB" in Enlighten
    4. Draw links from "OB" to "called objects"
    5. If there is a link from one called object to the object "OB" then perform the step "g" else perform the next step.

    6. 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"
    7. 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
    8. Compute function point from TCC.
    9. 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"

  4. 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:


Notes/comments

Ticket # Number, Number

Related Pages

Specify pages indirectly related to this topic.(eg:side- effects)