<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article  PUBLIC "-//NLM//DTD Journal Publishing DTD v3.0 20080202//EN" "http://dtd.nlm.nih.gov/publishing/3.0/journalpublishing3.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="3.0" xml:lang="en" article-type="research article"><front><journal-meta><journal-id journal-id-type="publisher-id">JSEA</journal-id><journal-title-group><journal-title>Journal of Software Engineering and Applications</journal-title></journal-title-group><issn pub-type="epub">1945-3116</issn><publisher><publisher-name>Scientific Research Publishing</publisher-name></publisher></journal-meta><article-meta><article-id pub-id-type="doi">10.4236/jsea.2022.155008</article-id><article-id pub-id-type="publisher-id">JSEA-117561</article-id><article-categories><subj-group subj-group-type="heading"><subject>Articles</subject></subj-group><subj-group subj-group-type="Discipline-v2"><subject>Computer Science&amp;Communications</subject></subj-group></article-categories><title-group><article-title>
 
 
  Software Analytics of Open Source Business Software
 
</article-title></title-group><contrib-group><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Charles</surname><given-names>W. Butler</given-names></name><xref ref-type="aff" rid="aff1"><sub>1</sub></xref><xref ref-type="corresp" rid="cor1"><sup>*</sup></xref></contrib></contrib-group><aff id="aff1"><label>1</label><addr-line>Department of Computer Information Systems, Colorado State University, Fort Collins, USA</addr-line></aff><pub-date pub-type="epub"><day>30</day><month>05</month><year>2022</year></pub-date><volume>15</volume><issue>05</issue><fpage>150</fpage><lpage>164</lpage><history><date date-type="received"><day>30,</day>	<month>March</month>	<year>2022</year></date><date date-type="rev-recd"><day>28,</day>	<month>May</month>	<year>2022</year>	</date><date date-type="accepted"><day>31,</day>	<month>May</month>	<year>2022</year></date></history><permissions><copyright-statement>&#169; Copyright  2014 by authors and Scientific Research Publishing Inc. </copyright-statement><copyright-year>2014</copyright-year><license><license-p>This work is licensed under the Creative Commons Attribution International License (CC BY). http://creativecommons.org/licenses/by/4.0/</license-p></license></permissions><abstract><p>
 
 
  This paper applies software analytics to open source code. Open-source software gives both individuals and businesses the flexibility to work with different parts of available code to modify it or incorporate it into their own project. The open source software market is growing. Major companies such as AWS, Facebook, Google, IBM, Microsoft, Netflix, SAP, Cisco, Intel, and Tesla have joined the open source software community. In this study, a sample of 40 open source applications was selected. Traditional McCabe software metrics including cyclomatic and essential complexities were examined. An analytical comparison of this set of metrics and derived metrics for high risk software was utilized as a basis for addressing risk management in the adoption and integration decisions of open source software. From this comparison, refinements were added, and contemporary concepts of design and data metrics derived from cyclomatic complexity were integrated into a classification scheme for software quality. It was found that 84% of the sample open source applications were classified as moderate low risk or low risk indicating that open source software exhibits low risk characteristics. The 40 open source applications were the base data for the model resulting in a technique which is applicable to any open source code regardless of functionality, language, or size.
 
</p></abstract><kwd-group><kwd>Cyclomatic Complexity</kwd><kwd> Essential Complexity</kwd><kwd> Module Design Complexity</kwd><kwd> Design Complexity</kwd><kwd> Integration Complexity</kwd><kwd> Local Data Complexity</kwd><kwd> Public Global Data Complexity</kwd><kwd> Parameter Data Complexity</kwd><kwd> Risk</kwd><kwd> Application Risk Score</kwd><kwd> Application Risk Classification</kwd></kwd-group></article-meta></front><body><sec id="s1"><title>1. Introduction</title><p>Since 1983, software has undergone an evolution. The establishment of open source code has reduced the importance of custom software development in building code bases, and progressive companies have realized that open source code is a valuable business strategy to maintain profitable operation and managed growth. Consequently, open source development has evolved to complement changing application portfolio growth, and application profiles have, as their by-product, hybrid applications composed of open source code.</p><p>Additionally, software development traits have been instrumental in the evolution of applications and the growth of open source code. Software developers have changed psychologically, sociologically, and economically. Software developers’ interest, tastes, and attitudes have resulted in new development patterns. Software developers are less proprietary than they once were, and collaborating and sharing within the software development community grow more popular each year. To meet the emerging reliance and flexibility characteristics of today’s global world, companies are growingly reliant on software developed outside the confines of their business walls.</p><sec id="s1_1"><title>1.1. The Problem</title><p>With these developments, the importance of open source software grows, and the question whether to adopt or integrate it is often challenging to answer. Managers and software developers try to justify a decision based on terms of reduced cost, expedited implementation time, or natural evolution of feature development within an open source development community. The objective of this study included three elements. The first was to assess the quality of open source software and to analyze the quality measures utilizing McCabe’s family of software metrics. The second component was to develop a risk classification algorithm integrating multiple quality metrics. Finally, the last element was to apply the quality classification to open source code in order to aid managers and software developers when making adoption and integration decisions regarding open source code.</p></sec><sec id="s1_2"><title>1.2. The Research Methodology</title><p>Business analytics (BA) continues its growth in the business profession. It is the methods, techniques, and data that are used by an organization to measure performance and develop actionable decisions [<xref ref-type="bibr" rid="scirp.117561-ref1">1</xref>]. Business analytics are made up of statistical methods that can be applied to a specific project, process, or product. Within the business analytics discipline, the domains are the study of three important areas: descriptive analysis, predictive analysis, and prescriptive analysis. Software analytics is a special domain within business analytics. In a special issue of IEEE Software in 2013, the domain of software analysis was explored. To better frame software analytics, Menzies and Zimmerman defined software analytics as “analytics on software data for managers and software engineers with the aim of empowering software development individuals and teams to gain and share insight from their data to make better decisions” [<xref ref-type="bibr" rid="scirp.117561-ref2">2</xref>]. The authors cited “early global models and software analytics” including McCabe’s cyclomatic complexity [<xref ref-type="bibr" rid="scirp.117561-ref2">2</xref>].</p><p>To accomplish the stated objectives, a sample of 40 open source applications was downloaded. Traditional McCabe software metrics including cyclomatic and essential complexities were examined. An analytical comparison of this set of metrics and derived metrics for high risk software was utilized as a basis for addressing risk management in the adoption and integration decisions of open source software. From this comparison, refinements were added, and contemporary concepts of design and data metrics derived from cyclomatic complexity were integrated into a classification scheme for software quality. The 40 open source applications were the base data for the model resulting in a technique which is applicable to any open source code regardless of functionality, language, or size. Finally, the validity of the classification algorithm was illustrated by applying it to the open source code sample. The classification scheme was evaluated to examine if the risk classification provides information pertaining to the software quality.</p></sec><sec id="s1_3"><title>1.3. Organization of the Paper</title><p>The previous section was a general background statement to present the topic area to the reader, and it included the objective and the methodology of the research. In the next section, there is a review of open source software growth. Then, the primary research is presented. The sample open source applications are analyzed, and the classification scheme is defined before it is applied to the sample applications. Last, the final section contains suggestions of further research and conclusions.</p></sec></sec><sec id="s2"><title>2. Open Source Software</title><p>In 1983, Richard Stallman, a programmer from MIT, came up with the idea of “free software movement.” The main motive behind this thought was to provide freedom to the programmers to study and modify source code according to their needs. The open source movement is one that supports the use of open source licenses for some or all the software. Today, businesses, managers, and software developers who support the open source software philosophy contribute to the open source community by voluntarily writing and exchanging programming code for software development. The term “open source” requires that no one can discriminate against any group or individual in obtaining or editing the code of an open source application. This approach to software development allows anyone to obtain and modify the open source code. These modifications are distributed back to the developers within the open source community of people who are working with the software. Now, numerous businesses offer codebases with open source that span business functions including enterprise software, retail and e-commerce, financial services, mobile apps, and marketing [<xref ref-type="bibr" rid="scirp.117561-ref3">3</xref>].</p><p>Open source software is used everywhere. Through its use, companies are likely to achieve the benefits of open source software. Some of the key benefits of open source software and how enterprise companies can help to realize those benefits are as follows [<xref ref-type="bibr" rid="scirp.117561-ref4">4</xref>] [<xref ref-type="bibr" rid="scirp.117561-ref5">5</xref>] [<xref ref-type="bibr" rid="scirp.117561-ref6">6</xref>] [<xref ref-type="bibr" rid="scirp.117561-ref7">7</xref>] [<xref ref-type="bibr" rid="scirp.117561-ref8">8</xref>]:</p><p>&#183; Reduces costs</p><p>o Total cost of ownership (TCO)</p><p>o Development costs</p><p>o Support costs</p><p>o Per user costs</p><p>o License fees</p><p>&#183; Shortens negotiations</p><p>&#183; Implements interoperability using open standards and APIs</p><p>&#183; Embraces suitability and security</p><p>&#183; Addresses a company’s needs</p><p>&#183; Avoids vendor lock-in</p><p>&#183; Supports rapid prototyping</p><p>&#183; Facilitates redistribution to other organizations</p><p>&#183; Promotes flexibility and stability</p><p>&#183; Embraces security and reliability</p><p>&#183; Gains community support</p><p>&#183; Reduces development time and expense</p><p>&#183; Generates reliable code</p><p>&#183; Yields maintainable code</p><p>&#183; Accesses third-party improvements</p><p>Free and open source software (FOSS) has found its way into most companies. Companies look to open source software to promote growth, achieve a level of flexibility, and attain a high level of reliability. Its use spans different sectors of IT services including [<xref ref-type="bibr" rid="scirp.117561-ref9">9</xref>]:</p><p>&#183; Server software products such as Apache and Samba 4</p><p>&#183; Development using PHP, Rails, and Perl</p><p>&#183; Security including Linux core functionality</p><p>&#183; Workflow using Pentaho, Collabtive, and SugarCRM</p><p>&#183; Collaboration through the Cyn.in community edition, Zimbra Open Source Edition, and Kolab</p><p>&#183; Big data using SUSE</p><p>&#183; Cloud computing with an ownCloud platform</p><p>&#183; Multimedia products such as Audacity and OpenShot</p><p>&#183; e-commerce via PrestaShop</p><p>Increasingly, modern software development projects rely on open source software including a heavy reliance on products for building enterprise software. This trend results in vulnerability to the failure of open source products and responsibility to support these products and their ecosystems [<xref ref-type="bibr" rid="scirp.117561-ref10">10</xref>]. Open source software is an important tool for helping business develop software rapidly and effectively.</p></sec><sec id="s3"><title>3. Mccabe Metrics</title><p>Tom J. McCabe authored and published cyclomatic, essential, and actual complexities in in IEEE Transactions on Software Engineering. In 2009, his article was chosen as one of the retrospective 23 highest impact papers in computer science by ACM-SIGSOFT. In the software engineering discipline, cyclomatic complexity, v(g), is recognized as a software quality attribute. It is also associated with McCabe Structured Testing Methodology. A v(g) may range from 1 to + ∞. For unit level testing using McCabe Structured Testing Methodology, a basis set of paths equal to a testable module’s v(g) is the minimum unit level of testing [<xref ref-type="bibr" rid="scirp.117561-ref11">11</xref>]. Research has shown that when v(g) exceeds 10, the reliability of the testable unit decreases exponentially. Essential complexity, ev(g), is a measurement of a software module’s coding structure. When the coding structure violates structured programing constructs, ev(g) grows from 1 to v(g) depending on how many decision predicates violate the single entry, single exit property of structured programming. In the McCabe automated testing tool, McCabe IQ, a threshold of ev(g) ≤ 3 is set [<xref ref-type="bibr" rid="scirp.117561-ref12">12</xref>]. A higher ev(g) indicates that the maintainability of the software decreased [<xref ref-type="bibr" rid="scirp.117561-ref13">13</xref>].</p><p>Since the introduction of cyclomatic and essential complexities, the McCabe family of metrics was expanded. <xref ref-type="table" rid="table1">Table 1</xref> contains a summary of the entire McCabe metric set and each metrics quality implications [<xref ref-type="bibr" rid="scirp.117561-ref14">14</xref>]. McCabe design metrics focus on software integration. Module design, design, and integration complexities measure the low level, design volume, and end-to-end integration requirements using McCabe Structured Testing Methodology. When software requires higher levels of integration effort, it is considered more difficult to qualify and risker [<xref ref-type="bibr" rid="scirp.117561-ref15">15</xref>].</p><p>The McCabe family of metrics has a set of data metrics, ldv(g), pgdv(g), and pdv(g). When considering design qualities such as encapsulation, separation of concerns, and data hiding, data plays a critical role. When software is positively encapsulated, exhibits positive data hiding, and behaves with positive separation of concerns, it uses high levels of local data and low levels of public data. While parameter data extends data use into other software units, it is more positive than global data because its use is explicitly coded and limited by sharing between specific software units. For quality inferences, the following summarize McCabe metrics:</p><p>&#183; Cyclomatic complexity: an increase in v(g) &gt; 10 is negative and software units with higher v(g) are considered risker.</p><p>&#183; Essential complexity: an increase of ev(g) &gt; 3 is negative and software units with higher v(g) are considered risker.</p><p>&#183; Design complexity: an increase in S<sub>0</sub> is problematic and larger software solutions are considered risker.</p><p>&#183; Integration complexity: an increase in S<sub>1</sub> is problematic and software with higher end-to-end integration requirements is considered riskier.</p><p>&#183; Module design complexity: an increase in iv(g) is problematic and software with higher low-level integration requirements is considered riskier.</p><table-wrap id="table1" ><label><xref ref-type="table" rid="table1">Table 1</xref></label><caption><title> McCabe software metrics</title></caption><table><tbody><thead><tr><th align="center" valign="middle" >Metric</th><th align="center" valign="middle" >Symbol</th><th align="center" valign="middle" >Description</th><th align="center" valign="middle" >Calculation</th><th align="center" valign="middle" >Value Range</th></tr></thead><tr><td align="center" valign="middle" ># of methods (modules)</td><td align="center" valign="middle" >n</td><td align="center" valign="middle" >The total number of methods in the application</td><td align="center" valign="middle" >Count of methods in the application</td><td align="center" valign="middle" >1 ≤ n ≤ +∞</td></tr><tr><td align="center" valign="middle" >Design complexity</td><td align="center" valign="middle" >S<sub>0</sub></td><td align="center" valign="middle" >The size or volume of the application design</td><td align="center" valign="middle" >S<sub>0</sub> = ∑ iv</td><td align="center" valign="middle" >1 ≤ S<sub>0</sub> ≤ +∞</td></tr><tr><td align="center" valign="middle" >Integration complexity</td><td align="center" valign="middle" >S<sub>1</sub></td><td align="center" valign="middle" >The size of the high level integration basis set of subtrees</td><td align="center" valign="middle" >S<sub>1</sub> = S<sub>0</sub> – n + 1</td><td align="center" valign="middle" >1 ≤ S<sub>1</sub> ≤ +∞</td></tr><tr><td align="center" valign="middle" >Cyclomatic complexity</td><td align="center" valign="middle" >v, v(g)</td><td align="center" valign="middle" >The number of decision predicatesin the module;the size of a basis set of paths for unit level testing</td><td align="center" valign="middle" ># design predicates + 1; v = e – n + 2 where e is the # of edges and n is the number of nodes in a flowgraph</td><td align="center" valign="middle" >1 ≤ v ≤ +∞ v &gt; 10 is considered risky; higher v is riskier</td></tr><tr><td align="center" valign="middle" >Essential complexity</td><td align="center" valign="middle" >ev, ev(g)</td><td align="center" valign="middle" >How well structured is the code; how easily is the code modularized (decomposed); how easily is the codemaintained</td><td align="center" valign="middle" >The v of a reduced flowgraph where only single-entry, single-exit constructs are logically eliminated</td><td align="center" valign="middle" >1 ≤ ev ≤ v; ev = 1 is considered optimal, McCabe IQ defaults to ev ≤ 3; higher ev is riskier</td></tr><tr><td align="center" valign="middle" >Module design complexity</td><td align="center" valign="middle" >iv, iv(g)</td><td align="center" valign="middle" >The number of decision predicates (plus 1) that significantly impact calls to subroutines; the size of a basis set of paths for low level integration testing; iv risk is based on where the module is located; a management module should have a high iv, higher iv is riskier</td><td align="center" valign="middle" >The v of a reduced flowgraph where design predicates that do not significantly impact calls to subroutine are logically eliminated</td><td align="center" valign="middle" >1 ≤ iv ≤ v</td></tr><tr><td align="center" valign="middle" >Local data complexity</td><td align="center" valign="middle" >ldv, ldv(g), (sdv<sub>local</sub> <sub>data</sub>)</td><td align="center" valign="middle" >The number of decision predicates (plus 1)that significantly impact the use of local data; the size of a basis set of paths for local data testing</td><td align="center" valign="middle" >The v of a reduced flowgraph where design predicates that do not significantly impact the use of local data</td><td align="center" valign="middle" >0 ≤ ldv ≤ v; lower ldv is riskier</td></tr><tr><td align="center" valign="middle" >Public global data complexity</td><td align="center" valign="middle" >pgdv, pgdv(g), (sdv<sub>global</sub><sub> </sub><sub>data</sub>)</td><td align="center" valign="middle" >The number of decision predicates (plus 1) that significantly impact the use of public global data; the size of a basis set of paths for public data testing</td><td align="center" valign="middle" >The v of a reduced flowgraph where design predicates that do not significantly impact the use of public global data</td><td align="center" valign="middle" >0 ≤ pgdv ≤ v; higher pgdv is riskier</td></tr><tr><td align="center" valign="middle" >Parameter data complexity</td><td align="center" valign="middle" >pdv, pdv(g), (sdv<sub>parameter</sub> <sub>data</sub>)</td><td align="center" valign="middle" >The number of decision predicates (plus 1) that significantly impact the use of parameter data; the size of a basis set of paths for parameter data testing</td><td align="center" valign="middle" >The v of a reduced flowgraph where design predicates that do not significantly impact the use of parameter data</td><td align="center" valign="middle" >0 ≤ pdv ≤ v; lower pdv is riskier</td></tr></tbody></table></table-wrap><p>&#183; Local data complexity: an increase in ldv(g) is positive and software with higher local data use is considered less risky because it exhibits better encapsulation, better separation of concerns, and better data hiding</p><p>&#183; Public global data complexity: an increase in pgdv(g) is negative and software with higher pgdv is considered riskier because it exhibits poorer encapsulated, poorer separate of concerns, and poorer data hiding.</p><p>&#183; Parameter data complexity: an increase in pdv(g) is positive and software with higher parameter data complexity is considered less risky because it exhibits better encapsulation, better separation of concerns, and better data hiding.</p></sec><sec id="s4"><title>4. Findings</title><p><xref ref-type="table" rid="table2">Table 2</xref> contains a summary of selected McCabe metrics for the open source sample used in this study. Forty applications were parsed using McCabe IQ. For each application, the lines of code (LOC) were tabulated. Design complexity, the number of modules (n), &#181;<sub>v</sub>, u<sub>ev</sub>, and &#181;<sub>iv</sub> were also calculated for each application. This data is in the “Application” section of the table. The “Risk (v &gt; 10)” section of the table contains the same selected McCabe metrics shown in the “Application” section but only for modules whose v &gt; 10. To examine the magnitude of the Δv, the percentage change of risk &#181;<sub>v</sub> from application &#181;<sub>v</sub> was calculated.</p><sec id="s4_1"><title>4.1. Application Metrics</title><p>The forty applications account for over 4 million lines of code written in Java, C++, and C. There are almost 360,000 modules in the sample code. The application &#181;<sub>v</sub>, u<sub>ev</sub>, and &#181;<sub>iv</sub> range from 1.1 to 6.0, 1.0 to 3.2, and 1.1 to 4.3, respectively. The weighted grand means for &#181;<sub>v</sub>, u<sub>ev</sub>, and &#181;<sub>iv</sub> are 2.3, 1.4, and 2.1, respectively. There is one metric, u<sub>ev</sub> for Git, that falls in a negative range (ev &gt; 3). &#181;<sub>v</sub> ranges from 1.1 to 6.0, and &#181;<sub>ev</sub> from 1.0 to 3.2. At the application level, the applications exhibit low risk as measured by McCabe metrics.</p></sec><sec id="s4_2"><title>4.2. Risk Metrics</title><p>The high risk modules for the forty applications account for almost 8500 modules. The &#181;<sub>v</sub>, u<sub>ev</sub>, and &#181;<sub>iv</sub> for risk modules (v &gt; 10) range from 11.0 to 46.8, 1.0 to 17.7, and 1.1 to 23.0, respectively. The weighted grand means for risk module &#181;<sub>v</sub>, u<sub>ev</sub>, and &#181;<sub>iv</sub> are 21.4, 9.3, and 16.9, respectively. Only one metric, u<sub>ev</sub> for weekly_planner, is in a low risk range (ev ≤ 3). The grand mean of &#181;<sub>v</sub> for risk modules increased by 824% from 2.3 to 21.4. The magnitude of the percentage increase in &#181;<sub>v</sub> ranges from 243% to 1555% indicating a measurable shift in riskiness as &#181;<sub>v</sub> climbs above 10. Further, as &#181;<sub>v</sub> increases above 10, there is a corresponding increase in higher u<sub>ev</sub>. As &#181;<sub>v</sub> increases above 10, the modules’ structuredness and maintainability grows riskier, as u<sub>ev</sub> grew from 1.4 to 9.3. As a collective group, the sample applications’ modules exhibit risk. The “level of risk” is not defined.</p></sec><sec id="s4_3"><title>4.3. Comparison</title><p>An alternative view of application risk is gained by examining a cross section of applications by size. Measuring application size is an arbitrary process. For this study, size is determined by lines of code using the following groups:</p><p>&#183; Extra small: 0 ≤ LOC ≤ 25,000</p><p>&#183; Small: 25,000 &lt; LOC ≤ 50,000</p><p>&#183; Medium: 50,000 &lt; LOC ≤ 75,000</p><p>&#183; Large: 75,000 &lt; LOC ≤ 100,000</p><p>&#183; Extra large: 100,000 &lt; LOC</p><table-wrap id="table2" ><label><xref ref-type="table" rid="table2">Table 2</xref></label><caption><title> Open source application sample</title></caption><table><tbody><thead><tr><th align="center" valign="middle"  colspan="2"  ></th><th align="center" valign="middle"  colspan="6"  >Application</th><th align="center" valign="middle"  colspan="5"  >Risk (v &gt; 10)</th></tr></thead><tr><td align="center" valign="middle" >Application</td><td align="center" valign="middle" >Language</td><td align="center" valign="middle" >LOC</td><td align="center" valign="middle" >S<sub>0</sub></td><td align="center" valign="middle" >#Mod</td><td align="center" valign="middle" >&#181;<sub>v</sub></td><td align="center" valign="middle" >&#181;<sub>ev</sub></td><td align="center" valign="middle" >&#181;<sub>iv</sub></td><td align="center" valign="middle" >#Mod</td><td align="center" valign="middle" >&#181;<sub>v</sub></td><td align="center" valign="middle" >Δ&#181;<sub>v</sub></td><td align="center" valign="middle" >&#181;<sub>ev</sub></td><td align="center" valign="middle" >&#181;<sub>iv</sub></td></tr><tr><td align="center" valign="middle" >Metafresh</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >964,889</td><td align="center" valign="middle" >162,506</td><td align="center" valign="middle" >103,191</td><td align="center" valign="middle" >1.7</td><td align="center" valign="middle" >1.2</td><td align="center" valign="middle" >1.6</td><td align="center" valign="middle" >1033</td><td align="center" valign="middle" >17.8</td><td align="center" valign="middle" >947%</td><td align="center" valign="middle" >8.0</td><td align="center" valign="middle" >14.6</td></tr><tr><td align="center" valign="middle" >Adempiere</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >736,289</td><td align="center" valign="middle" >141,417</td><td align="center" valign="middle" >68,742</td><td align="center" valign="middle" >2.3</td><td align="center" valign="middle" >1.4</td><td align="center" valign="middle" >2.1</td><td align="center" valign="middle" >1109</td><td align="center" valign="middle" >26.5</td><td align="center" valign="middle" >1078%</td><td align="center" valign="middle" >9.1</td><td align="center" valign="middle" >17.3</td></tr><tr><td align="center" valign="middle" >Idempiere</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >530,663</td><td align="center" valign="middle" >108,732</td><td align="center" valign="middle" >50,829</td><td align="center" valign="middle" >2.3</td><td align="center" valign="middle" >1.4</td><td align="center" valign="middle" >2.1</td><td align="center" valign="middle" >941</td><td align="center" valign="middle" >22.8</td><td align="center" valign="middle" >879%</td><td align="center" valign="middle" >10.4</td><td align="center" valign="middle" >19.5</td></tr><tr><td align="center" valign="middle" >Scorpio</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >328,453</td><td align="center" valign="middle" >70,285</td><td align="center" valign="middle" >24,754</td><td align="center" valign="middle" >3.2</td><td align="center" valign="middle" >1.8</td><td align="center" valign="middle" >2.8</td><td align="center" valign="middle" >1344</td><td align="center" valign="middle" >22.7</td><td align="center" valign="middle" >605%</td><td align="center" valign="middle" >10.1</td><td align="center" valign="middle" >19.5</td></tr><tr><td align="center" valign="middle" >Ofbiz</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >223,764</td><td align="center" valign="middle" >44,417</td><td align="center" valign="middle" >13,319</td><td align="center" valign="middle" >3.8</td><td align="center" valign="middle" >2.0</td><td align="center" valign="middle" >3.3</td><td align="center" valign="middle" >943</td><td align="center" valign="middle" >23.5</td><td align="center" valign="middle" >523%</td><td align="center" valign="middle" >10.5</td><td align="center" valign="middle" >20.4</td></tr><tr><td align="center" valign="middle" >Blueseer</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >196,509</td><td align="center" valign="middle" >22,848</td><td align="center" valign="middle" >6741</td><td align="center" valign="middle" >4.1</td><td align="center" valign="middle" >1.6</td><td align="center" valign="middle" >3.4</td><td align="center" valign="middle" >666</td><td align="center" valign="middle" >16.0</td><td align="center" valign="middle" >295%</td><td align="center" valign="middle" >4.9</td><td align="center" valign="middle" >12.6</td></tr><tr><td align="center" valign="middle" >Git</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >193,694</td><td align="center" valign="middle" >30,624</td><td align="center" valign="middle" >7108</td><td align="center" valign="middle" >6.0</td><td align="center" valign="middle" >3.2</td><td align="center" valign="middle" >4.3</td><td align="center" valign="middle" >639</td><td align="center" valign="middle" >25.6</td><td align="center" valign="middle" >330%</td><td align="center" valign="middle" >13.0</td><td align="center" valign="middle" >17.2</td></tr><tr><td align="center" valign="middle" >Dbeaver</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >157,521</td><td align="center" valign="middle" >44,879</td><td align="center" valign="middle" >24,356</td><td align="center" valign="middle" >2.1</td><td align="center" valign="middle" >1.4</td><td align="center" valign="middle" >1.8</td><td align="center" valign="middle" >512</td><td align="center" valign="middle" >17.4</td><td align="center" valign="middle" >729%</td><td align="center" valign="middle" >8.3</td><td align="center" valign="middle" >13.9</td></tr><tr><td align="center" valign="middle" >Axelor</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >106,385</td><td align="center" valign="middle" >16,351</td><td align="center" valign="middle" >6123</td><td align="center" valign="middle" >3.0</td><td align="center" valign="middle" >1.6</td><td align="center" valign="middle" >2.7</td><td align="center" valign="middle" >171</td><td align="center" valign="middle" >16.4</td><td align="center" valign="middle" >447%</td><td align="center" valign="middle" >6.9</td><td align="center" valign="middle" >14.0</td></tr><tr><td align="center" valign="middle" >Mes</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >96,263</td><td align="center" valign="middle" >17,264</td><td align="center" valign="middle" >10,103</td><td align="center" valign="middle" >1.8</td><td align="center" valign="middle" >1.2</td><td align="center" valign="middle" >1.7</td><td align="center" valign="middle" >63</td><td align="center" valign="middle" >14.7</td><td align="center" valign="middle" >717%</td><td align="center" valign="middle" >7.4</td><td align="center" valign="middle" >13.1</td></tr><tr><td align="center" valign="middle" >Portfolio</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >74,071</td><td align="center" valign="middle" >13,638</td><td align="center" valign="middle" >8228</td><td align="center" valign="middle" >1.8</td><td align="center" valign="middle" >1.2</td><td align="center" valign="middle" >1.7</td><td align="center" valign="middle" >171</td><td align="center" valign="middle" >16.3</td><td align="center" valign="middle" >826%</td><td align="center" valign="middle" >6.9</td><td align="center" valign="middle" >14.0</td></tr><tr><td align="center" valign="middle" >RedDragonERP</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >64,403</td><td align="center" valign="middle" >7452</td><td align="center" valign="middle" >5602</td><td align="center" valign="middle" >1.4</td><td align="center" valign="middle" >1.1</td><td align="center" valign="middle" >1.3</td><td align="center" valign="middle" >15</td><td align="center" valign="middle" >23.0</td><td align="center" valign="middle" >1555%</td><td align="center" valign="middle" >14.9</td><td align="center" valign="middle" >21.4</td></tr><tr><td align="center" valign="middle" >Redisson</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >61,448</td><td align="center" valign="middle" >11,152</td><td align="center" valign="middle" >8268</td><td align="center" valign="middle" >1.5</td><td align="center" valign="middle" >1.1</td><td align="center" valign="middle" >1.4</td><td align="center" valign="middle" >41</td><td align="center" valign="middle" >18.2</td><td align="center" valign="middle" >1155%</td><td align="center" valign="middle" >11.0</td><td align="center" valign="middle" >13.6</td></tr><tr><td align="center" valign="middle" >OpenRefine</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >56,782</td><td align="center" valign="middle" >11,003</td><td align="center" valign="middle" >4922</td><td align="center" valign="middle" >3.8</td><td align="center" valign="middle" >2.0</td><td align="center" valign="middle" >2.9</td><td align="center" valign="middle" >195</td><td align="center" valign="middle" >17.9</td><td align="center" valign="middle" >367%</td><td align="center" valign="middle" >11.5</td><td align="center" valign="middle" >14.3</td></tr><tr><td align="center" valign="middle" >Schedulis</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >45,735</td><td align="center" valign="middle" >9298</td><td align="center" valign="middle" >4189</td><td align="center" valign="middle" >2.5</td><td align="center" valign="middle" >1.4</td><td align="center" valign="middle" >2.2</td><td align="center" valign="middle" >118</td><td align="center" valign="middle" >17.1</td><td align="center" valign="middle" >590%</td><td align="center" valign="middle" >11.0</td><td align="center" valign="middle" >13.6</td></tr><tr><td align="center" valign="middle" >Libevent</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >42,943</td><td align="center" valign="middle" >4902</td><td align="center" valign="middle" >1675</td><td align="center" valign="middle" >3.8</td><td align="center" valign="middle" >2.0</td><td align="center" valign="middle" >2.9</td><td align="center" valign="middle" >111</td><td align="center" valign="middle" >17.5</td><td align="center" valign="middle" >357%</td><td align="center" valign="middle" >9.3</td><td align="center" valign="middle" >11.6</td></tr><tr><td align="center" valign="middle" >Nacos_Develop</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >39,278</td><td align="center" valign="middle" >10,308</td><td align="center" valign="middle" >5395</td><td align="center" valign="middle" >2.1</td><td align="center" valign="middle" >1.3</td><td align="center" valign="middle" >1.9</td><td align="center" valign="middle" >105</td><td align="center" valign="middle" >15.9</td><td align="center" valign="middle" >654%</td><td align="center" valign="middle" >6.8</td><td align="center" valign="middle" >13.6</td></tr><tr><td align="center" valign="middle" >Tmux</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >30,595</td><td align="center" valign="middle" >4514</td><td align="center" valign="middle" >1078</td><td align="center" valign="middle" >3.8</td><td align="center" valign="middle" >2.0</td><td align="center" valign="middle" >3.3</td><td align="center" valign="middle" >164</td><td align="center" valign="middle" >23.5</td><td align="center" valign="middle" >523%</td><td align="center" valign="middle" >10.5</td><td align="center" valign="middle" >20.4</td></tr><tr><td align="center" valign="middle" >Gaussian_YOLOv3</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >11,995</td><td align="center" valign="middle" >1421</td><td align="center" valign="middle" >391</td><td align="center" valign="middle" >5.3</td><td align="center" valign="middle" >2.1</td><td align="center" valign="middle" >3.6</td><td align="center" valign="middle" >36</td><td align="center" valign="middle" >18.5</td><td align="center" valign="middle" >246%</td><td align="center" valign="middle" >5.8</td><td align="center" valign="middle" >13.6</td></tr><tr><td align="center" valign="middle" >Darknet</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >11,839</td><td align="center" valign="middle" >1405</td><td align="center" valign="middle" >385</td><td align="center" valign="middle" >5.3</td><td align="center" valign="middle" >2.1</td><td align="center" valign="middle" >3.7</td><td align="center" valign="middle" >36</td><td align="center" valign="middle" >18.3</td><td align="center" valign="middle" >243%</td><td align="center" valign="middle" >5.7</td><td align="center" valign="middle" >13.4</td></tr><tr><td align="center" valign="middle" >maps_samples</td><td align="center" valign="middle" >C++</td><td align="center" valign="middle" >8959</td><td align="center" valign="middle" >1193</td><td align="center" valign="middle" >768</td><td align="center" valign="middle" >2.0</td><td align="center" valign="middle" >1.1</td><td align="center" valign="middle" >1.6</td><td align="center" valign="middle" >9</td><td align="center" valign="middle" >14.3</td><td align="center" valign="middle" >601%</td><td align="center" valign="middle" >5.6</td><td align="center" valign="middle" >7.4</td></tr><tr><td align="center" valign="middle" >Spring _All</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >4135</td><td align="center" valign="middle" >852</td><td align="center" valign="middle" >707</td><td align="center" valign="middle" >1.2</td><td align="center" valign="middle" >1.0</td><td align="center" valign="middle" >1.2</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >11.0</td><td align="center" valign="middle" >787%</td><td align="center" valign="middle" >10.0</td><td align="center" valign="middle" >10.0</td></tr><tr><td align="center" valign="middle" >phone_info</td><td align="center" valign="middle" >C++</td><td align="center" valign="middle" >3243</td><td align="center" valign="middle" >546</td><td align="center" valign="middle" >313</td><td align="center" valign="middle" >2.2</td><td align="center" valign="middle" >1.2</td><td align="center" valign="middle" >1.7</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >24.3</td><td align="center" valign="middle" >1005%</td><td align="center" valign="middle" >7.8</td><td align="center" valign="middle" >16.8</td></tr><tr><td align="center" valign="middle" >UK_Player</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >2783</td><td align="center" valign="middle" >317</td><td align="center" valign="middle" >109</td><td align="center" valign="middle" >4.9</td><td align="center" valign="middle" >2.4</td><td align="center" valign="middle" >2.9</td><td align="center" valign="middle" >6</td><td align="center" valign="middle" >46.8</td><td align="center" valign="middle" >858%</td><td align="center" valign="middle" >17.2</td><td align="center" valign="middle" >19.7</td></tr><tr><td align="center" valign="middle" >Scrcpy</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >2756</td><td align="center" valign="middle" >383</td><td align="center" valign="middle" >155</td><td align="center" valign="middle" >2.8</td><td align="center" valign="middle" >1.7</td><td align="center" valign="middle" >2.5</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >29.7</td><td align="center" valign="middle" >963%</td><td align="center" valign="middle" >17.7</td><td align="center" valign="middle" >23.0</td></tr><tr><td align="center" valign="middle" >Eladmin</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >2663</td><td align="center" valign="middle" >528</td><td align="center" valign="middle" >291</td><td align="center" valign="middle" >2.0</td><td align="center" valign="middle" >1.3</td><td align="center" valign="middle" >1.8</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >17.0</td><td align="center" valign="middle" >750%</td><td align="center" valign="middle" >8.0</td><td align="center" valign="middle" >16.7</td></tr><tr><td align="center" valign="middle" >space_blok</td><td align="center" valign="middle" >C++</td><td align="center" valign="middle" >2565</td><td align="center" valign="middle" >375</td><td align="center" valign="middle" >259</td><td align="center" valign="middle" >2.0</td><td align="center" valign="middle" >1.1</td><td align="center" valign="middle" >1.5</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >12.7</td><td align="center" valign="middle" >545%</td><td align="center" valign="middle" >5.7</td><td align="center" valign="middle" >4.7</td></tr><tr><td align="center" valign="middle" >PiggyMetrics</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >1510</td><td align="center" valign="middle" >228</td><td align="center" valign="middle" >215</td><td align="center" valign="middle" >1.1</td><td align="center" valign="middle" >1.0</td><td align="center" valign="middle" >1.1</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td></tr><tr><td align="center" valign="middle" >JMX_Exporter</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >1387</td><td align="center" valign="middle" >250</td><td align="center" valign="middle" >118</td><td align="center" valign="middle" >2.4</td><td align="center" valign="middle" >1.5</td><td align="center" valign="middle" >2.1</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >22.8</td><td align="center" valign="middle" >832%</td><td align="center" valign="middle" >8.8</td><td align="center" valign="middle" >19.3</td></tr><tr><td align="center" valign="middle" >solitaire</td><td align="center" valign="middle" >C++</td><td align="center" valign="middle" >1231</td><td align="center" valign="middle" >192</td><td align="center" valign="middle" >67</td><td align="center" valign="middle" >3.3</td><td align="center" valign="middle" >1.8</td><td align="center" valign="middle" >2.7</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >22.0</td><td align="center" valign="middle" >573%</td><td align="center" valign="middle" >9.0</td><td align="center" valign="middle" >20.0</td></tr><tr><td align="center" valign="middle" >sudokumaster</td><td align="center" valign="middle" >C++</td><td align="center" valign="middle" >1204</td><td align="center" valign="middle" >190</td><td align="center" valign="middle" >98</td><td align="center" valign="middle" >2.5</td><td align="center" valign="middle" >1.6</td><td align="center" valign="middle" >1.9</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >11.5</td><td align="center" valign="middle" >356%</td><td align="center" valign="middle" >9.0</td><td align="center" valign="middle" >6.0</td></tr><tr><td align="center" valign="middle" >weekly_planner</td><td align="center" valign="middle" >C++</td><td align="center" valign="middle" >1168</td><td align="center" valign="middle" >155</td><td align="center" valign="middle" >99</td><td align="center" valign="middle" >2.0</td><td align="center" valign="middle" >1.1</td><td align="center" valign="middle" >1.6</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >11.0</td><td align="center" valign="middle" >450%</td><td align="center" valign="middle" >1.0</td><td align="center" valign="middle" >1.0</td></tr><tr><td align="center" valign="middle" >diner</td><td align="center" valign="middle" >C++</td><td align="center" valign="middle" >1029</td><td align="center" valign="middle" >150</td><td align="center" valign="middle" >96</td><td align="center" valign="middle" >2.0</td><td align="center" valign="middle" >1.1</td><td align="center" valign="middle" >1.6</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td></tr><tr><td align="center" valign="middle" >Wumpus</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >938</td><td align="center" valign="middle" >206</td><td align="center" valign="middle" >91</td><td align="center" valign="middle" >3.2</td><td align="center" valign="middle" >1.6</td><td align="center" valign="middle" >2.3</td><td align="center" valign="middle" >6</td><td align="center" valign="middle" >17.5</td><td align="center" valign="middle" >442%</td><td align="center" valign="middle" >6.2</td><td align="center" valign="middle" >10.5</td></tr><tr><td align="center" valign="middle" >Java.Battleship</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >921</td><td align="center" valign="middle" >130</td><td align="center" valign="middle" >67</td><td align="center" valign="middle" >3.3</td><td align="center" valign="middle" >1.6</td><td align="center" valign="middle" >1.9</td><td align="center" valign="middle" >8</td><td align="center" valign="middle" >14.5</td><td align="center" valign="middle" >334%</td><td align="center" valign="middle" >3.5</td><td align="center" valign="middle" >5.0</td></tr><tr><td align="center" valign="middle" >GadgetProbe</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >733</td><td align="center" valign="middle" >138</td><td align="center" valign="middle" >79</td><td align="center" valign="middle" >1.8</td><td align="center" valign="middle" >1.4</td><td align="center" valign="middle" >1.8</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >24.0</td><td align="center" valign="middle" >1204%</td><td align="center" valign="middle" >17.0</td><td align="center" valign="middle" >20.0</td></tr><tr><td align="center" valign="middle" >protractore</td><td align="center" valign="middle" >C++</td><td align="center" valign="middle" >378</td><td align="center" valign="middle" >46</td><td align="center" valign="middle" >31</td><td align="center" valign="middle" >2.3</td><td align="center" valign="middle" >1.4</td><td align="center" valign="middle" >1.5</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td></tr><tr><td align="center" valign="middle" >Spring Analysis</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >316</td><td align="center" valign="middle" >86</td><td align="center" valign="middle" >80</td><td align="center" valign="middle" >1.1</td><td align="center" valign="middle" >1.0</td><td align="center" valign="middle" >1.1</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td></tr><tr><td align="center" valign="middle" >Bubble_level</td><td align="center" valign="middle" >C++</td><td align="center" valign="middle" >169</td><td align="center" valign="middle" >23</td><td align="center" valign="middle" >17</td><td align="center" valign="middle" >1.8</td><td align="center" valign="middle" >1.0</td><td align="center" valign="middle" >1.4</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td></tr><tr><td align="center" valign="middle" >Weighted mean</td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" >2.3</td><td align="center" valign="middle" >1.4</td><td align="center" valign="middle" >2.1</td><td align="center" valign="middle" ></td><td align="center" valign="middle" >21.4</td><td align="center" valign="middle" >821%</td><td align="center" valign="middle" >9.3</td><td align="center" valign="middle" >16.9</td></tr><tr><td align="center" valign="middle" >Total</td><td align="center" valign="middle" ></td><td align="center" valign="middle" >4,011,607</td><td align="center" valign="middle" ></td><td align="center" valign="middle" >359,059</td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" >8468</td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td><td align="center" valign="middle" ></td></tr></tbody></table></table-wrap><p><xref ref-type="table" rid="table3">Table 3</xref> contains a selection of extra large, large, medium, small, and extra small applications from the sample data. Axelor has 106,385 lines of code and is classified as large because it is the closest fit for the large grouping. In this table, 21 McCabe unit, design, data, and transformation metrics are shown. The % n, % S<sub>0</sub>, and % S<sub>1</sub> metrics measure the portion of modules, design complexity, and integration complexity residing in the high risk modules (v &gt; 10). For example Metafresh, 1% of the application modules are high risk modules. This 1% contains 9% and 24% of S<sub>0</sub> and S<sub>1</sub>, respectfully, a disproportionate amount of the design and integration complexities. Total ldv, pgdv, and pdv are included so that additional quality and risk attributes can be evaluated. Earlier in this paper, encapsulation, separation of concerns, and data hiding were referenced. Recall that low use of global data and high use of local and parameter data infers lower risk. In <xref ref-type="table" rid="table3">Table 3</xref>, note the density ratios of data metrics to cyclomatic complexity (ldv/v, pgdv/v, and pdv/v). This data transformation normalizes McCabe metrics across size classification. The comparison of extra large, large, medium, small, and extra small application shows that metrics do not increase due to size as measured by LOC:</p><table-wrap id="table3" ><label><xref ref-type="table" rid="table3">Table 3</xref></label><caption><title> Application risk comparison (v &gt; 10)</title></caption><table><tbody><thead><tr><th align="center" valign="middle"  rowspan="2"  >Metric</th><th align="center" valign="middle"  colspan="3"  >Extra Large</th><th align="center" valign="middle"  colspan="2"  >Large</th><th align="center" valign="middle"  colspan="2"  >Medium</th><th align="center" valign="middle"  colspan="2"  >Small</th><th align="center" valign="middle"  colspan="2"  >Extra Small</th></tr></thead><tr><td align="center" valign="middle" >Metafresh</td><td align="center" valign="middle" >Adempiere</td><td align="center" valign="middle" >Git</td><td align="center" valign="middle" >Axelor</td><td align="center" valign="middle" >Mes</td><td align="center" valign="middle" >Portfolio</td><td align="center" valign="middle" >Open Refine</td><td align="center" valign="middle" >Libevent</td><td align="center" valign="middle" >Tmux</td><td align="center" valign="middle" >Darknet</td><td align="center" valign="middle" >Gaussian YOLOv3</td></tr><tr><td align="center" valign="middle" >% n</td><td align="center" valign="middle" >1%</td><td align="center" valign="middle" >3%</td><td align="center" valign="middle" >9%</td><td align="center" valign="middle" >3%</td><td align="center" valign="middle" >1%</td><td align="center" valign="middle" >1%</td><td align="center" valign="middle" >4%</td><td align="center" valign="middle" >7%</td><td align="center" valign="middle" >15%</td><td align="center" valign="middle" >9%</td><td align="center" valign="middle" >2%</td></tr><tr><td align="center" valign="middle" >% S<sub>0</sub></td><td align="center" valign="middle" >9%</td><td align="center" valign="middle" >21%</td><td align="center" valign="middle" >36%</td><td align="center" valign="middle" >15%</td><td align="center" valign="middle" >5%</td><td align="center" valign="middle" >11%</td><td align="center" valign="middle" >25%</td><td align="center" valign="middle" >26%</td><td align="center" valign="middle" >47%</td><td align="center" valign="middle" >34%</td><td align="center" valign="middle" >14%</td></tr><tr><td align="center" valign="middle" >% S<sub>1</sub></td><td align="center" valign="middle" >24%</td><td align="center" valign="middle" >39%</td><td align="center" valign="middle" >44%</td><td align="center" valign="middle" >22%</td><td align="center" valign="middle" >11%</td><td align="center" valign="middle" >26%</td><td align="center" valign="middle" >43%</td><td align="center" valign="middle" >37%</td><td align="center" valign="middle" >57%</td><td align="center" valign="middle" >44%</td><td align="center" valign="middle" >19%</td></tr><tr><td align="center" valign="middle" >total</td><td align="center" valign="middle" >18,367</td><td align="center" valign="middle" >35,534</td><td align="center" valign="middle" >16,349</td><td align="center" valign="middle" >2799</td><td align="center" valign="middle" >927</td><td align="center" valign="middle" >1671</td><td align="center" valign="middle" >3483</td><td align="center" valign="middle" >1940</td><td align="center" valign="middle" >3483</td><td align="center" valign="middle" >657</td><td align="center" valign="middle" >666</td></tr><tr><td align="center" valign="middle" >average</td><td align="center" valign="middle" >17.8</td><td align="center" valign="middle" >20.5</td><td align="center" valign="middle" >25.6</td><td align="center" valign="middle" >16.4</td><td align="center" valign="middle" >14.7</td><td align="center" valign="middle" >17.6</td><td align="center" valign="middle" >17.9</td><td align="center" valign="middle" >17.5</td><td align="center" valign="middle" >23.5</td><td align="center" valign="middle" >18.3</td><td align="center" valign="middle" >18.5</td></tr><tr><td align="center" valign="middle" >total</td><td align="center" valign="middle" >8231</td><td align="center" valign="middle" >15,865</td><td align="center" valign="middle" >8278</td><td align="center" valign="middle" >1184</td><td align="center" valign="middle" >464</td><td align="center" valign="middle" >478</td><td align="center" valign="middle" >2249</td><td align="center" valign="middle" >1027</td><td align="center" valign="middle" >1709</td><td align="center" valign="middle" >206</td><td align="center" valign="middle" >207</td></tr><tr><td align="center" valign="middle" >average</td><td align="center" valign="middle" >8.0</td><td align="center" valign="middle" >9.1</td><td align="center" valign="middle" >13.0</td><td align="center" valign="middle" >6.9</td><td align="center" valign="middle" >7.4</td><td align="center" valign="middle" >5.0</td><td align="center" valign="middle" >11.5</td><td align="center" valign="middle" >9.3</td><td align="center" valign="middle" >10.5</td><td align="center" valign="middle" >5.7</td><td align="center" valign="middle" >5.8</td></tr><tr><td align="center" valign="middle" >ev density (ev/v)</td><td align="center" valign="middle" >0.45</td><td align="center" valign="middle" >0.45</td><td align="center" valign="middle" >0.51</td><td align="center" valign="middle" >0.42</td><td align="center" valign="middle" >0.50</td><td align="center" valign="middle" >0.29</td><td align="center" valign="middle" >0.65</td><td align="center" valign="middle" >0.53</td><td align="center" valign="middle" >0.49</td><td align="center" valign="middle" >0.31</td><td align="center" valign="middle" >0.31</td></tr><tr><td align="center" valign="middle" >total</td><td align="center" valign="middle" >15,092</td><td align="center" valign="middle" >29,967</td><td align="center" valign="middle" >1106</td><td align="center" valign="middle" >2398</td><td align="center" valign="middle" >826</td><td align="center" valign="middle" >1488</td><td align="center" valign="middle" >2796</td><td align="center" valign="middle" >1293</td><td align="center" valign="middle" >2133</td><td align="center" valign="middle" >483</td><td align="center" valign="middle" >490</td></tr><tr><td align="center" valign="middle" >average</td><td align="center" valign="middle" >14.6</td><td align="center" valign="middle" >2.1</td><td align="center" valign="middle" >17.2</td><td align="center" valign="middle" >14.0</td><td align="center" valign="middle" >13.1</td><td align="center" valign="middle" >14.0</td><td align="center" valign="middle" >14.3</td><td align="center" valign="middle" >11.6</td><td align="center" valign="middle" >20.4</td><td align="center" valign="middle" >13.4</td><td align="center" valign="middle" >13.6</td></tr><tr><td align="center" valign="middle" >iv density (iv/v)</td><td align="center" valign="middle" >0.82</td><td align="center" valign="middle" >0.84</td><td align="center" valign="middle" >0.67</td><td align="center" valign="middle" >0.86</td><td align="center" valign="middle" >0.89</td><td align="center" valign="middle" >0.89</td><td align="center" valign="middle" >0.80</td><td align="center" valign="middle" >0.67</td><td align="center" valign="middle" >0.61</td><td align="center" valign="middle" >0.74</td><td align="center" valign="middle" >0.74</td></tr><tr><td align="center" valign="middle" >total</td><td align="center" valign="middle" >14,305</td><td align="center" valign="middle" >27,605</td><td align="center" valign="middle" >6921</td><td align="center" valign="middle" >2141</td><td align="center" valign="middle" >808</td><td align="center" valign="middle" >1135</td><td align="center" valign="middle" >1503</td><td align="center" valign="middle" >486</td><td align="center" valign="middle" >1041</td><td align="center" valign="middle" >444</td><td align="center" valign="middle" >448</td></tr><tr><td align="center" valign="middle" >average</td><td align="center" valign="middle" >13.8</td><td align="center" valign="middle" >16.1</td><td align="center" valign="middle" >10.8</td><td align="center" valign="middle" >12.5</td><td align="center" valign="middle" >12.8</td><td align="center" valign="middle" >12.0</td><td align="center" valign="middle" >7.7</td><td align="center" valign="middle" >4.4</td><td align="center" valign="middle" >19.8</td><td align="center" valign="middle" >12.3</td><td align="center" valign="middle" >12.4</td></tr><tr><td align="center" valign="middle" >ldv density (ldv/v)</td><td align="center" valign="middle" >0.78</td><td align="center" valign="middle" >0.78</td><td align="center" valign="middle" >0.42</td><td align="center" valign="middle" >0.76</td><td align="center" valign="middle" >0.87</td><td align="center" valign="middle" >0.68</td><td align="center" valign="middle" >0.43</td><td align="center" valign="middle" >0.25</td><td align="center" valign="middle" >0.30</td><td align="center" valign="middle" >0.68</td><td align="center" valign="middle" >0.67</td></tr><tr><td align="center" valign="middle" >total</td><td align="center" valign="middle" >10,450</td><td align="center" valign="middle" >18,286</td><td align="center" valign="middle" >1976</td><td align="center" valign="middle" >1324</td><td align="center" valign="middle" >621</td><td align="center" valign="middle" >864</td><td align="center" valign="middle" >1962</td><td align="center" valign="middle" >163</td><td align="center" valign="middle" >370</td><td align="center" valign="middle" >179</td><td align="center" valign="middle" >185</td></tr><tr><td align="center" valign="middle" >average</td><td align="center" valign="middle" >10.1</td><td align="center" valign="middle" >10.6</td><td align="center" valign="middle" >3.1</td><td align="center" valign="middle" >7.7</td><td align="center" valign="middle" >9.9</td><td align="center" valign="middle" >9.1</td><td align="center" valign="middle" >10.1</td><td align="center" valign="middle" >1.5</td><td align="center" valign="middle" >15.2</td><td align="center" valign="middle" >5</td><td align="center" valign="middle" >5.1</td></tr><tr><td align="center" valign="middle" >pgdv density (pgdv/v)</td><td align="center" valign="middle" >0.57</td><td align="center" valign="middle" >0.51</td><td align="center" valign="middle" >0.12</td><td align="center" valign="middle" >0.47</td><td align="center" valign="middle" >0.67</td><td align="center" valign="middle" >0.52</td><td align="center" valign="middle" >0.56</td><td align="center" valign="middle" >0.08</td><td align="center" valign="middle" >0.11</td><td align="center" valign="middle" >0.27</td><td align="center" valign="middle" >0.28</td></tr><tr><td align="center" valign="middle" >total</td><td align="center" valign="middle" >6152</td><td align="center" valign="middle" >11228</td><td align="center" valign="middle" >4413</td><td align="center" valign="middle" >1416</td><td align="center" valign="middle" >527</td><td align="center" valign="middle" >7456</td><td align="center" valign="middle" >957</td><td align="center" valign="middle" >410</td><td align="center" valign="middle" >880</td><td align="center" valign="middle" >267</td><td align="center" valign="middle" >274</td></tr><tr><td align="center" valign="middle" >average</td><td align="center" valign="middle" >6</td><td align="center" valign="middle" >6.3</td><td align="center" valign="middle" >6.3</td><td align="center" valign="middle" >8.3</td><td align="center" valign="middle" >8.4</td><td align="center" valign="middle" >8.0</td><td align="center" valign="middle" >4.9</td><td align="center" valign="middle" >3.7</td><td align="center" valign="middle" >8.5</td><td align="center" valign="middle" >7.4</td><td align="center" valign="middle" >7.6</td></tr><tr><td align="center" valign="middle" >pdv density (pdv/v)</td><td align="center" valign="middle" >0.33</td><td align="center" valign="middle" >0.32</td><td align="center" valign="middle" >0.27</td><td align="center" valign="middle" >0.51</td><td align="center" valign="middle" >0.57</td><td align="center" valign="middle" >0.48</td><td align="center" valign="middle" >0.27</td><td align="center" valign="middle" >0.21</td><td align="center" valign="middle" >0.25</td><td align="center" valign="middle" >0.41</td><td align="center" valign="middle" >0.41</td></tr><tr><td align="center" valign="middle" >Total LOC</td><td align="center" valign="middle" >964,889</td><td align="center" valign="middle" >736,289</td><td align="center" valign="middle" >736,183</td><td align="center" valign="middle" >106,385</td><td align="center" valign="middle" >96,263</td><td align="center" valign="middle" >74,071</td><td align="center" valign="middle" >56,782</td><td align="center" valign="middle" >42,943</td><td align="center" valign="middle" >30,595</td><td align="center" valign="middle" >11,839</td><td align="center" valign="middle" >11,995</td></tr></tbody></table></table-wrap><p>&#183; Mes, a large application, has a lower average v(g) than Tmus (23.5), a small application.</p><p>&#183; Metafresh, a extra large application, has a high local data density ratio (0.78) while Libevent, a small application, has a low local data density ratio (0.25).</p><p>&#183; Mes, a large application, makes much greater use of public global data (0.67) than Tmux (0.11), a small application.</p><p>&#183; The three extra large applications, Metrafresh, Adempiere, and Git, make less use of parameter data, 0.32, 0.33, and 0.27, respectively, than the two large applications, Axelor and Mes, 0.51 and 0.57, respectively.</p><p>&#183; Adempiere, an extra large application, averages more local data use (average 16.1) than Gaussian YOLOv3 (12.4), an extra small application.</p><p>&#183; Git, an extra large application, averages less public global data use (3.1) than Tmux (15.2), a small application.</p><p>&#183; Axelor, a large application, averages more parameter data use (83.) than Libevent (3.7), a small application.</p><p>Size does not dictate the negative or risk measures for the application. The measurement challenge is integrating multiple quality and risk factors into a simple, meaningful format. In the next section, a quality classification algorithm is introduced to support risk assessment for open source software.</p></sec></sec><sec id="s5"><title>5. Application Risk Score</title><p>During thirty years of working with McCabe &amp; Associates clients, antidotal evidence surfaced regarding their software. Due to non-disclosure agreements (NDA), clients chose to not publicize metric analysis of their code bases. However, client software exhibited risk factors that can be applied to open source software. For example, when examining client applications, it was observed that high risk modules accounted for 0% - 7.5% of the total modules. Note that in <xref ref-type="table" rid="table3">Table 3</xref> the proportion of high risk modules to total modules ranges from 1% to 15%. This observation is incorporated into an algorithm for an application risk score. To calculate an application risk score, 9 metrics and transformations associated with the McCabe metric family shown in <xref ref-type="table" rid="table3">Table 3</xref> are utilized. Let’s highlight these nine.</p><p>1) % n: the percentage of high risk modules to total modules.</p><p>2) % S<sub>0</sub>: the percent of total design complexity for high risk modules to total application design complexity.</p><p>3) % S<sub>1</sub>: the percent of total integration complexity for high risk modules to total application integration complexity.</p><p>4) &#181;<sub>v</sub>: The average cyclomatic complexity for high risk modules.</p><p>5) ev density: the ratio of total essential complexity for high risk modules to total essential complexity for all application modules.</p><p>6) iv density: the ratio of total module design complexity for high risk modules to total module design complexity for all application modules.</p><p>7) ldv density: the ratio of total local data complexity for high risk modules to total local data complexity for all application modules; this ratio is subtracted from one to place density ldv in the same order of magnitude as other ratios; high density ldv is positive; high “1 – high density ldv” is negative.</p><p>8) pgdv density: the ratio of total public global data complexity for high risk modules to total public global data complexity for all application modules.</p><p>9) pdv density: the ratio of total parameter data complexity for high risk modules to total parameter data complexity for all application modules; this ratio is subtracted from one to place density pdv in the same order of magnitude as other ratios; high density pdv is positive; high “1 – high density” pdv is negative.</p><p>A weight is added when calculating the application risk score. The applicable v(g) quartile is weighted twice. This weight is justified based upon the empirical significance of v(g) and v(g) &gt; 10 association with high risk software. As shown in <xref ref-type="fig" rid="fig1">Figure 1</xref>, the application risk score is calculated by assigning each of the 9 metrics into four quartiles – low risk, moderate low risk, moderate high risk, and high risk quartiles. Then, the quartiles are combined into an overall risk score for the application.</p><p>With 10 data points (recall that &#181;<sub>v</sub> is weighted twice) used to calculate the application risk score, its magnitude can be from 10.0 to 40.0. Using equal groups for this range, the application risk score classifications are as follows (See the source code risk score in <xref ref-type="fig" rid="fig1">Figure 1</xref>):</p><p>&#183; 10 &lt; low risk ≤ 17.5</p><p>&#183; 17.5 &lt; moderate low risk ≤ 25.0</p><p>&#183; 25.0 &lt; moderate high risk ≤ 32.5</p><p>&#183; 32.5 &lt; high risk ≤ 40.0</p><p><xref ref-type="table" rid="table4">Table 4</xref> illustrates the metrics associated with the risk score and risk classification for 4 sample applications. In this table, low risk, moderate low risk, and moderate high risk are shown. Metafresh and Adempiere have moderate low risk scores (20 and 24, respectively) and risk classifications; Ofbiz has a moderate high risk score (24) and moderate high risk classification; and samples_maps has a low risk score (15) and low risk classification.</p><table-wrap id="table4" ><label><xref ref-type="table" rid="table4">Table 4</xref></label><caption><title> Risk score calculation examples</title></caption><table><tbody><thead><tr><th align="center" valign="middle" >Static Metrics</th><th align="center" valign="middle" >Metafresh</th><th align="center" valign="middle" >Quartile</th><th align="center" valign="middle" >Adempiere</th><th align="center" valign="middle" >Quartile</th><th align="center" valign="middle" >Ofbiz</th><th align="center" valign="middle" >Quartile</th><th align="center" valign="middle" >maps_samples</th><th align="center" valign="middle" >Quartile</th></tr></thead><tr><td align="center" valign="middle" >% n<sub>risk</sub></td><td align="center" valign="middle" >1%</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >3%</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >7%</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >1%</td><td align="center" valign="middle" >1</td></tr><tr><td align="center" valign="middle" >% S<sub>0</sub></td><td align="center" valign="middle" >9%</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >21%</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >43%</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >19%</td><td align="center" valign="middle" >1</td></tr><tr><td align="center" valign="middle" >% S<sub>1</sub></td><td align="center" valign="middle" >24%</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >39%</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >59%</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >14%</td><td align="center" valign="middle" >1</td></tr><tr><td align="center" valign="middle" >2 * &#181;<sub>v</sub></td><td align="center" valign="middle" >17.8</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >20.5</td><td align="center" valign="middle" >6</td><td align="center" valign="middle" >23.5</td><td align="center" valign="middle" >6</td><td align="center" valign="middle" >14.3</td><td align="center" valign="middle" >4</td></tr><tr><td align="center" valign="middle" >ev density</td><td align="center" valign="middle" >0.45</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >0.45</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >0.45</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >0.39</td><td align="center" valign="middle" >2</td></tr><tr><td align="center" valign="middle" >iv density</td><td align="center" valign="middle" >0.82</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >0.84</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >0.87</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >0.52</td><td align="center" valign="middle" >3</td></tr><tr><td align="center" valign="middle" >(1 − ldv density)</td><td align="center" valign="middle" >0.22</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >0.22</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >0.84</td><td align="center" valign="middle" >4</td><td align="center" valign="middle" >0.00</td><td align="center" valign="middle" >1</td></tr><tr><td align="center" valign="middle" >pgdv density</td><td align="center" valign="middle" >0.57</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >0.51</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >0.64</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >0.00</td><td align="center" valign="middle" >1</td></tr><tr><td align="center" valign="middle" >(1 − pdv density)</td><td align="center" valign="middle" >0.67</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >0.68</td><td align="center" valign="middle" >3</td><td align="center" valign="middle" >0.36</td><td align="center" valign="middle" >2</td><td align="center" valign="middle" >0.00</td><td align="center" valign="middle" >1</td></tr><tr><td align="center" valign="middle" >risk score</td><td align="center" valign="middle"  colspan="2"  >20</td><td align="center" valign="middle"  colspan="2"  >24</td><td align="center" valign="middle"  colspan="2"  >29</td><td align="center" valign="middle"  colspan="2"  >15</td></tr><tr><td align="center" valign="middle" >risk classification</td><td align="center" valign="middle"  colspan="2"  >Moderate Low Risk</td><td align="center" valign="middle"  colspan="2"  >Moderate Low Risk</td><td align="center" valign="middle"  colspan="2"  >Moderate High Risk</td><td align="center" valign="middle"  colspan="2"  >Low Risk</td></tr></tbody></table></table-wrap><p>Consider Metafresh. Metafresh risk score is 20 based upon the following 10 data points summarized into its risk score:</p><p>The associated risk classification for Metafresh risk score (20) is moderate low risk.</p>Sample Risk Classification<p>In <xref ref-type="table" rid="table5">Table 5</xref>, twenty-five open source applications are shown. <xref ref-type="table" rid="table5">Table 5</xref> shows the risk scores and classifications for the twenty-five largest sampled open source applications. In the sample, applications are classified low risk, moderate low risk, and moderate high risk. No open source application in the sample was classified as high risk. When calculating the risk score and determining the risk classification, fifteen open source applications are eliminated because the number of risk modules are low (0, 1, 2, 3, or 4). Applications with few or no risk modules are considered not risky. Only 16% of the open source applications fell into the moderate high risk classification. Of the twenty-five largest open source applications, twenty-one are classified as moderate or lower risk indicating that risk assessments for sample open source applications overwhelmingly fall into low risk groupings.</p><table-wrap id="table5" ><label><xref ref-type="table" rid="table5">Table 5</xref></label><caption><title> Application risk summary</title></caption><table><tbody><thead><tr><th align="center" valign="middle" >Application</th><th align="center" valign="middle" >Language</th><th align="center" valign="middle" >Size Classification</th><th align="center" valign="middle" >Risk Score</th><th align="center" valign="middle" >Risk Classification</th></tr></thead><tr><td align="center" valign="middle" >IJPlayer</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >extra small</td><td align="center" valign="middle" >30</td><td align="center" valign="middle" >Moderate High Risk</td></tr><tr><td align="center" valign="middle" >Blueseer</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >extra large</td><td align="center" valign="middle" >27</td><td align="center" valign="middle" >Moderate High Risk</td></tr><tr><td align="center" valign="middle" >Ofbiz</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >extra large</td><td align="center" valign="middle" >26</td><td align="center" valign="middle" >Moderate High Risk</td></tr><tr><td align="center" valign="middle" >Scorpio</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >extra large</td><td align="center" valign="middle" >26</td><td align="center" valign="middle" >Moderate High Risk</td></tr><tr><td align="center" valign="middle" >Git</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >extra large</td><td align="center" valign="middle" >25</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Adempiere</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >extra large</td><td align="center" valign="middle" >24</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Idempiere</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >extra large</td><td align="center" valign="middle" >24</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Nacos_Develop</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >small</td><td align="center" valign="middle" >24</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Schedulis</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >small</td><td align="center" valign="middle" >24</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Tmux</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >small</td><td align="center" valign="middle" >24</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Wumpus</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >extra small</td><td align="center" valign="middle" >24</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Axelor</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >large</td><td align="center" valign="middle" >23</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Darknet</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >extra small</td><td align="center" valign="middle" >23</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Dbeaver</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >extra large</td><td align="center" valign="middle" >23</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Mes</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >large</td><td align="center" valign="middle" >23</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Open Refine</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >medium</td><td align="center" valign="middle" >23</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >RedDragon ERP</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >medium</td><td align="center" valign="middle" >23</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Redisson</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >medium</td><td align="center" valign="middle" >23</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Portfolio</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >medium</td><td align="center" valign="middle" >22</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Java.Battleship</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >extra small</td><td align="center" valign="middle" >21</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Libevent</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >small</td><td align="center" valign="middle" >20</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Metafresh</td><td align="center" valign="middle" >Java</td><td align="center" valign="middle" >extra large</td><td align="center" valign="middle" >20</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >Gaussian YOLOv3</td><td align="center" valign="middle" >C</td><td align="center" valign="middle" >extra small</td><td align="center" valign="middle" >19</td><td align="center" valign="middle" >Moderate Low Risk</td></tr><tr><td align="center" valign="middle" >phone_info</td><td align="center" valign="middle" >C++</td><td align="center" valign="middle" >extra small</td><td align="center" valign="middle" >16</td><td align="center" valign="middle" >Low Risk</td></tr><tr><td align="center" valign="middle" >maps_samples</td><td align="center" valign="middle" >C++</td><td align="center" valign="middle" >extra small</td><td align="center" valign="middle" >15</td><td align="center" valign="middle" >Low Risk</td></tr></tbody></table></table-wrap></sec><sec id="s6"><title>6. Further Research</title><p>Based upon the finding of this research, future research should examine the composition of the risk score. The 9 software metrics should be examined to determine if they are objective proxies for software quality and risk. A limitation of this study is also the sample size and sample collect technique. Additional open source applications should be collected, and the platforms for collection should extend to broader open source communities and vendor repositories. This research can be conducted in a different context. The risk assessment algorithm can be extended to testing potential risk differences based upon application type, application size, and programming language.</p></sec><sec id="s7"><title>7. Conclusions</title><p>An examination of open source software sample showed that its quality is moderate low risk or lower. The criteria for this conducted assessment were based upon established software metrics and design characteristics. The measurement of cyclomatic complexity is the single most important feature, since it is an accepted, empirically sound software metric in the software engineering disciple for analyzing software quality. The framework for the analysis of risk assessment contains additional proxy measurements of accepted design characteristics— encapsulation, separation of concerns, and data hiding. By utilizing quantification for these design characteristics, risk assessment is conducted for its susceptibility to objective review and quantification.</p><p>While the definition of software risk assessment is an important discipline task, it is also important that it be conducted independently and transparently. As in current software development methodologies, the independent variables for software quality are debated among practicing software engineers. Within the software quality framework, unit level, design level, and data metrics are embodied. In addition, the density transformation, one of the features of the model, is included as a measurement of software’s risk potential by indicating which modules have the potential to be troublesome during future feature maintenance and expansion.</p><p>When risk classification was applied to the sample applications, it provided risk scores and classifications derived from unit, design, and data metrics. Analysis of the open source software sample code revealed that 84% of the application exhibited moderate low or low risk design architecture. Since open source code is readily attainable, the defined algorithm can be developed and refined across a wide domain of software functionality. Using McCabe metrics, additional open source applications can be analyzed with speed and accuracy. Using a weighted factor of cyclomatic complexity yielded a usable risk score and classification. This approach further integrates the analysis of software design and promotes the risk assessment process for management and software engineers.</p></sec><sec id="s8"><title>Conflicts of Interest</title><p>The author declares no conflicts of interest regarding the publication of this paper.</p></sec><sec id="s9"><title>Cite this paper</title><p>Butler, C.W. (2022) Software Analytics of Open Source Business Software. Journal of Software Engineering and Applications, 15, 150-164. https://doi.org/10.4236/jsea.2022.155008</p></sec></body><back><ref-list><title>References</title><ref id="scirp.117561-ref1"><label>1</label><mixed-citation publication-type="other" xlink:type="simple">Sharda, R., Delen, D. and Turban, E. (2018) Business Intelligence, Analytics, and Data Science: A Managerial Perspective. Pearson, New York.</mixed-citation></ref><ref id="scirp.117561-ref2"><label>2</label><mixed-citation publication-type="other" xlink:type="simple">Menzies, T. and Zimmerman, T. (2013) Software Analytics: So What? IEEE Software, 30, 31-37. https://doi.org/10.1109/MS.2013.86</mixed-citation></ref><ref id="scirp.117561-ref3"><label>3</label><mixed-citation publication-type="other" xlink:type="simple">(2022, January 31) IT Names: Richard Stallman—GNU. Apeiron Systems. https://apeirondb.com/en/blog/it-names-richard-stallman-gnu</mixed-citation></ref><ref id="scirp.117561-ref4"><label>4</label><mixed-citation publication-type="other" xlink:type="simple">Murren, A. (2016, October 4) What Is Open Source Software. NIST. https://csrc.nist.gov/csrc/media/projects/supply-chain-risk-management/documents/ssca/2016-fall/tue_am_1_what_oss_is_and_is_not_andy_murren.pdf</mixed-citation></ref><ref id="scirp.117561-ref5"><label>5</label><mixed-citation publication-type="other" xlink:type="simple">Jonas, J. (2022, March 6) What Is Open Source Software PDF? PostVines. https://postvines.com/what-is-open-source-software-pdf</mixed-citation></ref><ref id="scirp.117561-ref6"><label>6</label><mixed-citation publication-type="other" xlink:type="simple">(2018, November 30) How to Use Open Source Software: Features, Main Software Types, and Selection Advice. Altexsoft. https://www.altexsoft.com/blog/engineering/how-to-use-open-source-software-features-main-software-types-and-selection-advice</mixed-citation></ref><ref id="scirp.117561-ref7"><label>7</label><mixed-citation publication-type="other" xlink:type="simple">Ahlawat, P., Boynes, J., Herz, D., Schmieg, F. and Stephan, M. (2021, April 16) Why You Need an Open Source Strategy. BCG. https://www.bcg.com/publications/2021/open-source-software-strategy-benefits</mixed-citation></ref><ref id="scirp.117561-ref8"><label>8</label><mixed-citation publication-type="other" xlink:type="simple">Raysman, R. (2011) Open-Source Software: Use and Compliance. Practical Law Publishing and Practical Law Company, Inc., New York.</mixed-citation></ref><ref id="scirp.117561-ref9"><label>9</label><mixed-citation publication-type="other" xlink:type="simple">Wallen, J. (2015, March 5) 10 Best Uses of Open Source Software in the Business World. TechRepublic. https://www.techrepublic.com/article/10-best-uses-for-open-source-software-in-the-business-world/#:~:text=%2010%20best%20uses%20for%20open%20source%20software,is%20a%20challenging%20one%2C%20but%20there...%20More%20</mixed-citation></ref><ref id="scirp.117561-ref10"><label>10</label><mixed-citation publication-type="other" xlink:type="simple">Lhotka, R. (2021, April 7) Responsible Use of Open Source in Enterprise Software. Forbes. https://www.forbes.com/sites/forbestechcouncil/2021/04/07/responsible-use-of-open-source-in-enterprise-software/?sh=6a58f4967bcf</mixed-citation></ref><ref id="scirp.117561-ref11"><label>11</label><mixed-citation publication-type="other" xlink:type="simple">Watson, A.H. and McCabe, T.J. (1996) Structured Testing: A Testing Methodology Using the Cyclomatic Complexity Metric. National Institute of Standards and Technology, Gaithersburg.</mixed-citation></ref><ref id="scirp.117561-ref12"><label>12</label><mixed-citation publication-type="other" xlink:type="simple">(2022, February 10) McCabe IQ. McCabe Software. http://www.mccabe.com/iq.htm</mixed-citation></ref><ref id="scirp.117561-ref13"><label>13</label><mixed-citation publication-type="other" xlink:type="simple">McCabe, T.J. (1976) A Complexity Measure. IEEE Transaction on Software Engineering, 2, 308-320. https://doi.org/10.1109/TSE.1976.233837</mixed-citation></ref><ref id="scirp.117561-ref14"><label>14</label><mixed-citation publication-type="other" xlink:type="simple">(2022, February) Software Metrics Glossary. McCabe Software. http://www.mccabe.com/iq_research_metrics.htm</mixed-citation></ref><ref id="scirp.117561-ref15"><label>15</label><mixed-citation publication-type="other" xlink:type="simple">McCabe, T.J. and Butler, C.W. (1989) Design Complexity Measurement and Testing. Communication of the ACM, 32, 1415-1425. https://doi.org/10.1145/76380.76382</mixed-citation></ref></ref-list></back></article>