## 4 Identification of Deficient Classes Within Object-Oriented Programming Languages
### Evaluation and Quality Rating of Deficient Classes
In 7-Zip there are 15.4% of classes that exceed the threshold value measuring coupling with other classes and within Notepad++, 25.6% of classes exceed the threshold of metric evaluating nesting level. In the context of C# we analyzed in detail five software products: KeePass with 523 classes, iTextSharp with 2815 classes, OpenCBS with 920 classes, Only Office with 5410 classes and Git Extensions with 767 classes. The results of the evaluation are presented in Table 5. When identifying classes based on an individual metric, OpenCBS results in 14.8% of classes that exceed the threshold value of metric counting lines of code, whereas only 6.3% of classes exceed the same threshold within iTextSharp and OnlyOffice. KeePass has 21.8% of classes that exceed the threshold value of metric measuring coupling with other classes and 20.1% of classes that have the sum of cyclomatic complexities of all methods within a class higher then specified with the threshold. \begin{table}
\begin{tabular}{c c c c c c c c c c c c} \hline SLOC & ✓ & ✓ & & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ \\ AMS & ✓ & ✓ & & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ \\ NOM & ✓ & & & & ✓ & & & & ✓ & ✓ & ✓ & ✓ & ✓ \\ \hline WMC & & & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ \\ ACC & & & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ \\ NS & & & ✓ & & ✓ & & & & & ✓ & ✓ & ✓ & ✓ \\ \hline CBO & & & & & & & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ \\ \hline LCOM & & & & & & ✓ & & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ \\ \hline \# classes (1) & 254 & 30 & 78 & 63 & 67 & 11 & 295 & **20** & **53** & 26 & **19** & **9** & **10** & **9** \\ \# classes (2) & 84 & 21 & 60 & 55 & 56 & 17 & 243 & **47** & **45** & **19** & **37** & **16** & **16** & **15** \\ \# classes (3) & 14 & 1 & 18 & 14 & 11 & 0 & 32 & **1** & **6** & **0** & **3** & **0** & **0** \\ \# classes (4) & 99 & 16 & 117 & 91 & 65 & 14 & 198 & **41** & **45** & **13** & **47** & **14** & **13** & **13** \\ \# classes (5) & 13 & 0 & 8 & 6 & 2 & 0 & 81 & **2** & **1** & **0** & **1** & **0** & **0** \\ \# classes (6) & 8 & 1 & 15 & 9 & 3 & 1 & 327 & **2** & **2** & **0** & **3** & **0** & **1** & **0** \\ \# classes (7) & 669 & 228 & 230 & 140 & 208 & 62 & 2128 & **154** & **170** & **205** & **96** & **55** & **62** & **55** \\ \hline \end{tabular}
\end{table} 
Table 6: Number of identified classes within Alfresco Repository (1); JasperReports Library (2); JHotDraw (3); ApacheTomcat (4); Jenkins (5); Gradle (6) and Liferay Portal (7) using a combination of software metrics. \begin{table}
\begin{tabular}{c c c c c c c c c c c c c} \hline SLOC & ✓ & ✓ & & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ \\ AMS & ✓ & ✓ & & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ \\ NOM & ✓ & & & & ✓ & & & & ✓ & ✓ & ✓ & ✓ \\ \hline WMC & & & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ \\ ACC & & & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ & ✓ \\ NS  
Evaluation of Software Classes With a Combination of Software Metrics and by Applying the Majority Function  
When we evaluate software according to an individual software metric, as presented with Tables 3-5, this quite often results in a large number of potentially deficient program entities. For example, if we want to identify classes that are big and complex within the JasperReports Library, assuming we evaluate it with an individual metric, we would have to assess 271 classes that exceed threshold values measuring SLOC (number of lines) and 241 classes that exceed the threshold value according to the metric WMC (representing the sum of cyclomatic complexities of all the methods within a class). 512 classes would have to be assessed manually for the purpose of determining their relevance, which represents a very large volume of input data in the review phase. Regarding a very large number of potentially problematic classes, we can assume that the quality of the majority of identified classes is adequate, meaning that when evaluating program entities using criterion based on an individual software metric, a lot of false positive cases are identified.