可视化软件指标

数据挖掘 可视化 软件开发 数据分析
2022-03-01 07:48:41

每个应用程序都有以下数据集,您可以将它们称为软件指标。这些指标因应用程序的大小而异。

Bugs
CodeSmells
Vulnerability

应用程序的大小由 LOC(代码行)决定,如果我将这些参数中的每一个可视化,我如何展示每个应用程序相对于代码行的复杂性。

例子

           Bugs   LOC
SweetApp   10     10000
SourApp    120    5660000
SaltyApp   55     1500

我如何可视化与 LOC 相关的每个应用程序的错误,因为 LOC 确定它们的复杂性,考虑到 LOC 中的更高数量,更高数量的错误不一定是坏事。

1个回答

您可以使用错误(或任何其他变量)除以代码行数 (LOC) 的比率。由于比率可能变化很大,例如错误与漏洞,因此生成的图通常看起来不太好,因此您可以使用规范化程序,事实上,这是推荐的程序。

在您的情况下,除以 LOC 的错误和一些漏洞看起来还不错,因此我在此示例中也包含了原始比率图。我正在使用计数重叠点图,它是条形图的变体,它不填充条形图,只关心作为一个点的值。您可以使用任何您认为能给您带来最佳结果的标准化。在这里,我只是将数据居中。在这两个图中,根据比率度量,最高值意味着更高的复杂性。

变量的原始比率除以 LOC

在此处输入图像描述

变量的归一化比率除以 LOC

在此处输入图像描述

R 中的代码需要复制这些图

require("reshape2")
require("ggplot2")

df1 <- data.frame(App = c("SweetApp", "SourApp", "SaltyApp"), 
                  LOC = c(10000, 5660000, 1500), 
                  Bugs = c(10, 120, 55), 
                  CodeSmells = c(50, 30, 20), 
                  Vulnerabilities = c(2, 3, 10))

#Define ratios
df1$RatiosBugs <- df1$Bugs / df1$LOC
df1$RatiosCodeSmells <- df1$CodeSmells / df1$LOC
df1$RatiosVulnerabilities <- df1$Vulnerabilities / df1$LOC

#Normalize Ratios
df1$NormRatiosBugs <- scale(df1$RatiosBugs, scale = FALSE)
df1$NormRatiosCodeSmells <- scale(df1$RatiosCodeSmells, scale = FALSE)
df1$NormRatiosVulnerabilities <- scale(df1$RatiosVulnerabilities, scale = FALSE)


dfRaw <- df1[, c("App", "RatiosBugs", "RatiosCodeSmells", "RatiosVulnerabilities")]
dfNorm <- df1[, c("App", "NormRatiosBugs", 
              "RatiosCodeSmells", "RatiosVulnerabilities")]
dfRaw.m <- melt(dfRaw, id.vars = c("App"))
dfNorm.m <- melt(dfNorm, id.vars = c("App"))

#Plot Raw Ratios
ggplot(dfRaw.m, aes(App, value)) + 
  geom_count(aes(color = variable), position = position_dodge(width =  0.4), stat = "identity") 

#Plot Normalized Ratios
ggplot(dfNorm.m, aes(App, value)) + 
  geom_count(aes(color = variable), position = position_dodge(width = 0.4), stat = "identity")