Published November 22, 2023 | Version v1
Software Open

Replication Package for the Paper: "The Effect of Defect Re-prediction on Software Testing"

Creators

Description

The scripts are worked on Windows 10 or later version. Some paths included in the scripts should be modified before the execution. Python 3.7 or later version is required to execute the scripts.

The script of BA (bandit algorithm) is based on https://github.com/johnmyleswhite/BanditsBook.

Each directory includes scripts for different number of learning data (i.e., arms).

To execute the scripts, perform the following steps:

  1. Download datasets from other websites, and values of the number of defects are transformed into 1, when the values are > 0.
  2. Paste "Notes" to R. The script makes logistic regression models using various learning data. They are used as arms of BA.
  3. Generated files on Step 2 are copied to each directory.
  4. On each directory, execute PrepareData() on master.xlsm using Microsoft Excel 2016 or later version. The script compares predictions and actual result, and output the comparison to perform BA on the next step.
  5. On each directory, execute exec_nm.bat on command line of Windows.
  6. Paste calc_roc.txt of each directory to R. The script outputs AUC of existing (ROC_lt_1.csv) and proposed approach (ROC_lt_2.csv and ROC_lt_3.csv).

 

 

Notes

rm(list=ls())

library(MASS)

library(pROC)

library(FSelector)

 

ROC_lL <- array(1:1)

ROC_lt <- array(1:1)

 

ipos <- 1

for (idx in 0:31) {

 data.estimate = read.table("C:/Users/aaa/Desktop/marm/arc.csv",header = TRUE, sep = ",", quote="\"", dec=".", fill = TRUE)

for (asel in 0:0) {

if (idx == 0) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/ant-1.6.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 1) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/berek.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 2) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/camel-1.4.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 3) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/ckjm.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 4) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/e-learning.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 5) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/forrest-0.7.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 6) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/intercafe.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 7) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/ivy-1.4.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 8) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/jedit-4.2.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 9) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/kalkulator.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 10) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/log4j-1.1.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 11) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/lucene-2.2.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 12) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/nieruchomosci.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 13) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/pbeans1.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 14) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/pdftranslator.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 15) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/poi-2.5.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 16) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/prop-5.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 17) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/redaktor.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 18) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/serapion.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 19) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/skarbonka.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 20) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/sklebagd.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 21) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/synapse-1.1.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 22) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/systemdata.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 23) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/szybkafucha.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 24) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/termoproject.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 25) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/tomcat.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 26) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/velocity-1.5.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 27) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/workflow.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 28) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/wspomaganiepi.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 29) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/xalan-2.6.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 30) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/xerces-1.3.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

} else if (idx == 31) {

 data.learning = read.table("C:/Users/aaa/Desktop/marm/zuzel.csv",header = TRUE, sep =",", quote="\"", dec=".", fill = TRUE)

}

 

data.learning = data.learning[,c("ERROR_COUNT",subset)]

data.estimate = data.estimate[,c("ERROR_COUNT",subset)]

 

data.learning.glm <- glm(ERROR_COUNT~., data=data.learning,family=binomial)

data.learning.predict = predict(data.learning.glm,data.learning, type = "response")

 

ROC_L <- roc(response=data.learning[,1], predictor=data.learning.predict)

cutoff_L <- coords(ROC_L, x="best", ret="threshold", best.method="closest.topleft", transpose = TRUE)

 

data.estimate.predict = predict(data.learning.glm,data.estimate, type = "response")

 

data.estimate.predict_t = data.estimate.predict

data.estimate.predict_t[data.estimate.predict_t < cutoff_L] <- 0

data.estimate.predict_t[data.estimate.predict_t >= cutoff_L] <- 1

 

ROC_t <- roc(response=data.estimate[,1], predictor=data.estimate.predict_t)

 

write(data.estimate.predict_t, file=paste("C:/Users/aaa/Desktop/marm/n", idx, "_",asel, ".csv", sep = ""),ncolumns=1)

ROC_lL[ipos] <- ROC_L$auc

ROC_lt[ipos] <- ROC_t$auc

ipos <- ipos + 1

}

write(data.estimate[,1], file=paste("C:/Users/aaa/Desktop/marm/n", idx, ".csv", sep = ""),ncolumns=1)

}

write.table(cbind(ROC_lL, ROC_lt), file="C:/Users/aaa/Desktop/marm/ROC_lt_add_s.csv", sep=",",row.names=F)

Files

marm.zip

Files (463.8 kB)

Name Size Download all
md5:ca4183dddb426105df59b5c9d5edc430
463.8 kB Preview Download