CodeMRI Health Report: The 'File List' Page
Purpose
Describes the ‘File List’ page in the CodeMRI Health Report spreadsheet
Uses the open source Axis2 version 1.7.9 codebase as an example
To better understand metrics in this spreadsheet, see: https://silverthread.atlassian.net/wiki/spaces/CKB/pages/2580283393
The File List tab
The purpose of the ‘File list’ tab in the CodeMRI main report is to show technical health metrics, other information about files, and give the ability to sort and filter file data for different purposes.
Columns names and meanings
Each row represents one file in your source code
Each column provides a metric or piece of information about that source code file
Column Name | Description |
---|---|
Filename | The path and filename |
Extension | The extension. (e.g. java, js, cpp, py, f, etc.) |
Language | The programming language (e.g. Java, Ada, FORTRAN, Web) |
(Hidden) Network ID | Most files in a report are found to be part of a network of interconnected files. For example files A and B are interconnected if A contains a call to a function defined in B. All interconnected files have the same Network ID. Network 1 is the largest network, Network 2 is the second largest network, etc. Files with Network ID ‘0' are ‘isolates’ or 'singletons’ The scanner found no interconnections between them and any other file. |
(Hidden) Network Group Size | The number of files in the same network (all having the same Network ID) |
Architecture Type - Core Periphery | Categorization of the file as either Shared/ Core/ Peripheral/ Control/Secondary Network |
(Hidden) Architecture Type - Median | Categorization of the file as either Central/ Control / Secondary Network / Shared |
Cyclic Group Size | If file is part of a cyclic group (a cluster of files that are all circularly interdependent), this is the size of that cluster. |
(Hidden) Cyclic Group ID | Each cyclic group has its own ID. If a file is not in a cyclic group, then the ID is 0. |
Core ID | Cyclic groups of size 30 or greater are classified as either Emerging Cores (30-150) or Critical Cores (150+). A non-zero Core ID identifies clusters of files in cores with more than 30 files. Core ID 1 is assigned to the largest core, Core ID 2 to the second largest, etc. A Core ID of 0 indicates either that a file is not in a cyclic group, or that it is in a cyclic group smaller than 30 files. |
Fan-In (ie FI) | The number of files that directly depend on this file. High fan-in may be a good thing as many files call this file. |
Fan-Out (ie FO) | The number of files this file directly depends on. High fan-out may be problematic, as it indicates that it may be a ‘god class’ or ‘god file’. |
(Hidden) Visibility Fan-In (ie VFI) | The number of files that directly or indirectly depend on this file. High VFI may be a good thing as many files call this file. |
(Hidden) Visibility Fan-Out (ie VFO) | The number of files that this file directly or indirectly depends on. |
(Hidden) Closeness Centrality | A network metric related to the distance between this file and all the other files. For more information see: https://en.wikipedia.org/wiki/Closeness_centrality |
(Hidden) Degree Centrality | A network metric proportional to the number of files directly connected to this file (with both incoming and outgoing connections considered). For more information, see: https://en.wikipedia.org/wiki/Centrality#Degree_centrality |
(Hidden) In Degree Centrality | A network metric proportional to FI - the number of files that depend on this file. |
(Hidden) Out Degree Centrality | A network metric proportional to FO - the number of files this file depends on |
(Hidden) Betweenness Centrality | A network metric related to the number of shortest paths this file is on when looking at the distance between any two files. For more information, see: |
Max Cyclomatic | The McCabe cyclomatic complexity value for the most complex executable block (likely a function, procedure, or method) of code in the file. Uses the ‘modified’ version of McCabe’s metric that does not penalize switch/case statements. For more information, see: |
Cyclomatic Type | Cyclomatic complexity categorized as Low (1-10), Medium (11-20), High (21-50), Very High (50+). For more information, see: C4 Software Technology Reference Guide, page 147. |
Lines of Code | This is the raw number of lines of code in this file, including code, comments, whitespace, etc. |
Source Lines of Code | This is the number of lines of code in this file, excluding lines with comments and whitespace. |
Comment Ratio | This is the ratio of comment lines to code lines in this file. |
Needs Focus Order | Sorting by this column applies Silverthread’s sorting algorithm placing the most problematic files at the top of the file list. The most problematic files tend to be those with multiple challenges - such being in a large core and also having high McCabe scores. |
Directory Structure Order | Sorting by this column orders the file list alphabetically. It also puts the file list in the same order as the DSM Alpha Sorted diagram (found in the ‘Pictures DSMs’ tab.) |
Core Periphery Order | Sorting by this column orders the file list in the same order as the DSM Core-Periphery Sorted diagram (found in the ‘Pictures DSMs’ tab.) |
Median Order | Sorting by this column orders the file list in the same order as the DSM Median Sorted diagram (found in the ‘Pictures DSMs’ tab.) |
Hierarchical Order | Sorting by this column orders the file list in the same order as the DSM Hierarchical Sorted diagram (found in the ‘Pictures DSMs’ tab.) |
(Hidden) Declared Component Order | If a UDA has been used to define components, then sorting by this column groups files into their components, and uses component dependencies declared in the UDA to sort the components from lowest to highest in the stack. |
(Hidden) Actual Hierarchical Component Order | If a UDA has been used to define components, then sorting by this column groups files into their components, and uses component dependencies (as found in the source code via static analysis) to sort the components from lowest to highest in the stack. |
(Hidden) Component | If a UDA has been used to define components, this shows the component each file has been assigned to. |
(Hidden) Percent Duplicated LOC | The percentage of code in this file that is duplicative (either with code inside this file or outside it) |
Source Code Managed | If a UDA has been used to define a file as ‘source code managed’ (i.e. controlled by Git or another version control system), then this column shows ‘TRUE’. If defined in the UDA as not source code managed, the column shows ‘FALSE’. If this has not been defined in the UDA, this column shows ‘N/A’ |
Third Party | If files are identified as 3rd party in the UDA, and the Diagnostic report is run again, this column will reflect those 3rd party designations |
Generated | If files are identified as Generated code in the UDA, and the Diagnostic report is run again, this column will reflect those Generated code designations |
Test | If files are identified as Test code in the UDA, and the Diagnostic report is run again, this column will reflect those Test code designations |