def getPrecision(file, version, formula, formulaException): """ 静态方法,计算错误定位精度,排名 :param formulaException: :param file: 加载的文件 :param version: 程序版本号 :param formula: 错误定位公式 :return: 0:错误定位精度 1:排名 """ # windows or linux readCatalog = "/result/" + str(version) + "/" statementSet = getProgramStatements(version=version) mbflInstance = FaultLocalization.MBFL() mbflInstance.loadStatisticsInfor(file=file, readCatalog=readCatalog, statements=statementSet, formula=formula, formulaException=formulaException) mbflInstance.createSuspiciousnessTable() """ for key in mbflInstance.suspiciousnessTable: print(str(key) + ":" + str(mbflInstance.suspiciousnessTable[key])) """ result = mbflInstance.rankTable(faultPosition=faultLocalization[version - 1]) return copy.deepcopy(result)
def generateFileOfMutantsSus(version): """ 静态方法, 生成文件 MutantsSus.txt :param version: 程序版本号 :return: NULL """ print("version: " + str(version) + " start create MutantsSus.txt") readCatalog = "/resource/" + str(version) + "/" saveCatalog = "/result/" + str(version) + "/" testCase = FaultLocalization.TestCase() resultOfTC = testCase.loadTestCaseInfor(file=fileOfTestCase, readCatalog=readCatalog) FaultLocalization.getParameter(file="MutantInfor.txt", readCatalog=saveCatalog, saveCatalog=saveCatalog, resultOfTC=resultOfTC) print("version: " + str(version) + " create MutantsSus.txt successful~")
def test_02_Mutants_statementSet(self): mutants = { 1: [114, 1, '(', '(!'], 2: [130, 0, '=', '=='], 3: [130, 0, '=', '!='], 4: [130, 0, '=', '<'] } mutant = FaultLocalization.Mutants() result = mutant.statementSet(mutants=mutants) exceptResult = [114] self.assertEqual(first=result, second=exceptResult)
def getCoverInforOfTestCase(version): """ 静态方法,获取该版本测试用例在语句上的覆盖信息 :param version: 程序版本 :return: key: 语句编号, value:[0,1,2.....] 0表示没有覆盖,1表示覆盖了,2表示不计入覆盖信息,如空行/宏定义/注释等; """ readCatalog = "/resource/" + str(version) + "/" testCaseInstance = FaultLocalization.TestCase() coverInfor = testCaseInstance.loadTestCaseCoverInfor( file="covMatrix.in", readCatalog=readCatalog) return copy.deepcopy(coverInfor)
def getResultOfTestCase(version): """ 静态方法, 获取该版本测试用例执行结果 :param version: 程序版本 :return: 测试用例执行结果 """ readCatalog = "/resource/" + str(version) + "/" testCaseInstance = FaultLocalization.TestCase() resultOfTC = testCaseInstance.loadTestCaseInfor(file="in_vector.txt", readCatalog=readCatalog) return copy.deepcopy(resultOfTC)
def mutantSampling(ratio, times, begin, end, resultFile): """ 静态方法,变异体约简测试Sampling :param ratio: 约简比例 :param times: 重复执行次数 :param begin: 开始版本 :param end: 结束版本 :param resultFile: 生成结果文件名称 :return: """ methodMBFL = ["Jaccard", "Ochiai", "Op2", "Tarantula", "Dstar"] for susMethod in methodMBFL: # 排名 rank = [] # 定位精度 precision = [] # 遍历每一个版本 for index in range(begin, end): saveCatalog = "/result/" + str(index) + "/" tempRank = 0 tempPrecision = 0.0 # 对每个版本,重复执行 times 次,结果取平均值 # 创建 Sampling 方法对象,加载对应的变异体文件 MutantsSus.txt sample = FaultLocalization.Sampling() size = sample.loadStatisticsInfor(file="MutantsSus.txt", readCatalog=saveCatalog) for time in range(0, times): sample.mutantSampling(saveCatalog=saveCatalog, saveFile="Sampling_" + str(ratio) + ".txt", ratio=ratio) # 计算错误定位精度及排名 result = getPrecision( file="Sampling_" + str(ratio) + ".txt", version=index, formula=formulaSet[susMethod][0], formulaException=formulaSet[susMethod][1]) tempPrecision += result[0] tempRank += result[1] rank.append(round(tempRank / times, 4)) precision.append(round(tempPrecision / times, 4)) print("formula:" + susMethod + " version: " + str(index) + " " + str(round(tempPrecision / times, 4)) + " " + str(round(tempRank / times, 4))) saveToExcel(saveFile=resultFile + susMethod + "_" + str(ratio) + ".xlsx", data1Head="错误定位精度", data1=precision, data2Head="排名", data2=rank)
def loadInfor(self, readCatalog): """ 方法,加载 cover, resultOfTestCase :param readCatalog: :return: NULL """ case = FaultLocalization.TestCase() self.resultOfTestCase = copy.deepcopy( case.loadTestCaseInfor(file="in_vector.txt", readCatalog=readCatalog)) self.cover = copy.deepcopy( case.loadTestCaseCoverInfor(file="covMatrix.in", readCatalog=readCatalog)) self.testCaseIdSetOfFail = copy.deepcopy(case.selectTestCase(flag=1)) self.testCaseIdSetOfPass = copy.deepcopy(case.selectTestCase(flag=0))
def countOfTestCase(begin, end): failTC = [] passTC = [] for index in range(begin, end): path = "/resource/" + str(index) + "/" temp = [] case = FaultLocalization.TestCase() case.loadTestCaseInfor(file="in_vector.txt", readCatalog=path) failTC.append(len(case.selectTestCase(flag=1))) passTC.append(len(case.selectTestCase(flag=0))) saveToExcel(data1Head="fail", data1=failTC, data2Head="pass", data2=passTC, saveFile="countOfTestCase.xlsx")
def getProgramStatements(version): """ 静态方法,获取程序语句ID集合 :param version: 程序版本 :return: """ readCatalog = "/resource/" + str(version) + "/" mutantInstance = FaultLocalization.Mutants() mutants = mutantInstance.loadMutantsInfor(readCatalog=readCatalog, file=fileOfMutants) # 变异体是否执行信息 mutantsExecInfor = mutantInstance.isExecMutants(file=fileOfMutantExec, readCatalog=readCatalog) # 语句信息 statements = mutantInstance.statementSet(mutants=mutants) return copy.deepcopy(statements)
def generateFileOfmutantsFTMES(version, statements, cover): """ 静态方法, 实验FTMES :param version: :param statements: :param cover: 测试用例在语句上的覆盖信息 :return: """ print("version: " + str(version) + " start create mutantsFTMES.txt") readCatalog = "/resource/" + str(version) + "/" saveCatalog = "/result/" + str(version) + "/" ftmesInstance = FaultLocalization.FTMES() ftmesInstance.loadStatisticsInfor(file="MutantsSus.txt", readCatalog=saveCatalog, statements=statements) ftmesInstance.methodsOfFTMES(cover=cover, saveCatalog=saveCatalog) print("version: " + str(version) + " create mutantsFTMES.txt successful~")
def generateFileOfMutantInfor(version): """ 静态方法, 生成文件 MutantInfor.txt :param version: 程序版本号 :return: NULL """ print("version: " + str(version) + " start create MutantInfor.txt") readCatalog = "/resource/" + str(version) + "/" saveCatalog = "/result/" + str(version) + "/" # 变异体实列 mutant = FaultLocalization.Mutants() mutants = mutant.loadMutantsInfor(readCatalog=readCatalog, file=fileOfMutants) # 变异体是否执行信息 mutantsExecInfor = mutant.isExecMutants(file=fileOfMutantExec, readCatalog=readCatalog) mutant.resultOfMutants(file=fileOfTestExec, readCatalog=readCatalog, saveCatalog=saveCatalog) print("version: " + str(version) + " create MutantInfor.txt successful~")
def generateFileOfSampling(version): """ 静态方法,变异体约简方法 Sampling :param version: :return: """ print("version: " + str(version) + " start create Sampling.txt") saveCatalog = "/result/" + str(version) + "/" sample = FaultLocalization.Sampling() size = sample.loadStatisticsInfor(file="MutantsSus.txt", readCatalog=saveCatalog) sample.mutantSampling(saveCatalog=saveCatalog, saveFile="Sampling30.txt", ratio=0.3) sample.mutantSampling(saveCatalog=saveCatalog, saveFile="Sampling20.txt", ratio=0.2) sample.mutantSampling(saveCatalog=saveCatalog, saveFile="Sampling10.txt", ratio=0.1) print("version: " + str(version) + " create Sampling.txt successful~")
class MyTestCase(unittest.TestCase): """ 测试用例集 """ def test_02_Mutants_statementSet(self): mutants = { 1: [114, 1, '(', '(!'], 2: [130, 0, '=', '=='], 3: [130, 0, '=', '!='], 4: [130, 0, '=', '<'] } mutant = FaultLocalization.Mutants() result = mutant.statementSet(mutants=mutants) exceptResult = [114] self.assertEqual(first=result, second=exceptResult) def test_03_Mutants_statementSet(self): mutants = {} mutant = FaultLocalization.Mutants() result = mutant.statementSet(mutants=mutants) exceptResult = [] self.assertEqual(first=result, second=exceptResult) def test_06_MBFL_rankTable(self): case = FaultLocalization.MBFL() case.suspiciousnessTable = copy.deepcopy({ 1: 0.7, 2: 0.7, 3: 0.7, 4: 0.7, 5: 0.3, 6: 0.3 }) result = case.rankTable(faultPosition=3) exceptResult = [0.4167, 2.5] self.assertEqual(first=result, second=exceptResult)
import FaultLocalization outputfile = "/Users/jessemiller/Documents/UNL/2012-13/2ndSemester/ProgramSynthesis/TermProject/jager/output/gbtraces.txt" listBugs = FaultLocalization.rank_statements(outputfile) print(listBugs)
def test_03_Mutants_statementSet(self): mutants = {} mutant = FaultLocalization.Mutants() result = mutant.statementSet(mutants=mutants) exceptResult = [] self.assertEqual(first=result, second=exceptResult)