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~")
示例#3
0
 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)
示例#10
0
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~")
示例#11
0
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~")
示例#12
0
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~")
示例#13
0
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)
示例#14
0
import FaultLocalization

outputfile = "/Users/jessemiller/Documents/UNL/2012-13/2ndSemester/ProgramSynthesis/TermProject/jager/output/gbtraces.txt"

listBugs = FaultLocalization.rank_statements(outputfile)
print(listBugs)
示例#15
0
 def test_03_Mutants_statementSet(self):
     mutants = {}
     mutant = FaultLocalization.Mutants()
     result = mutant.statementSet(mutants=mutants)
     exceptResult = []
     self.assertEqual(first=result, second=exceptResult)