Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import operator
- import sys
- from coverage import coverage
- passfile = [ "XMLData/passing/" + name for name in os.listdir("XMLData/passing/") ]
- failfile = [ "XMLData/failing/" + name for name in os.listdir("XMLData/failing/") ]
- def cover2set(filelist):
- sets = {}
- for name in filelist :
- filename = []
- cov = coverage()
- cov.start()
- import __main__
- sys.path[0] = os.path.dirname(sys.argv[0])
- sys.argv = ("xpcmd.py",name)
- try :
- execfile (sys.argv[0], __main__.__dict__)
- except :
- print "fail"
- cov.stop()
- cov.save()
- #get morf name
- for codeunit in cov._get_file_reporters() :
- filename.append(codeunit.name)
- for morf in filename :
- module,execstat,miss,readable_miss = cov.analysis(morf)
- runline = list(set(execstat).difference(set(miss)))
- if morf in sets :
- for i in runline :
- if i in sets[morf] :
- sets[morf][i] += 1
- else:
- sets[morf][i] = 1
- else :
- temp = {}
- for i in runline :
- temp[i] = 1
- sets[morf] = temp
- cov.erase()
- return sets
- def tarantula(ns,nf,ncf,ncs,nuf):
- susp = (float(ncf)/nf)/((float(ncf)/nf) + (float(ncs)/ns))
- return susp
- def ochiai(ns,nf,ncf,ncs,nuf):
- susp = float(ncf)/((nf*(ncf+ncs))**(0.5))
- return susp
- def ochiaiop(ns,nf,ncf,ncs,nuf):
- susp = abs(ncf - float(ncs)/(ns+1))
- return susp
- def dstar(ns,nf,ncf,ncs,nuf):
- star = 2
- susp = float(ncf**star)/(nuf+ncs)
- return susp
- def numbercover(sets,filename,line):
- try:
- result = sets[filename][line]
- except KeyError:
- return 0
- return result
- def calrelevance(ns,nf,passset,failset,filelist,metric):
- coverrank = {}
- for filename in filelist :
- try :
- lines = list(set(passset[filename]).union(set(failset[filename])))
- temp = {}
- for line in lines :
- ncf = numbercover(failset,filename,line)
- ncs = numbercover(passset,filename,line)
- nuf = ns - ncs
- nus = nf - ncf
- temp[line] = metric(ns,nf,ncf,ncs,nuf)
- temp = sorted(temp.items(),key=operator.itemgetter(1))
- coverrank[filename] = temp[::-1]
- except KeyError:
- pass
- return coverrank
- def output(filelist,number,resultset):
- for filename in filelist :
- print "filename : %s " % filename
- for i in range(number):
- try :
- line = resultset[filename][i][0]
- susp = resultset[filename][i][1]
- print "line:%d susp:%f" % (line,susp)
- except KeyError:
- pass
- passset = cover2set(passfile)
- failset = cover2set(failfile)
- filelist = list(set(passset).union(set(failset)))
- ns = len(passfile)
- nf = len(failfile)
- tarantula_result = calrelevance(ns,nf,passset,failset,filelist,tarantula)
- ochiai_result = calrelevance(ns,nf,passset,failset,filelist,ochiai)
- ochiaiop_result = calrelevance(ns,nf,passset,failset,filelist,ochiaiop)
- dstar_result = calrelevance(ns,nf,passset,failset,filelist,dstar)
- print
- print "top 3 of tarantula"
- output(filelist,3,tarantula_result)
- print
- print "top 3 of ochiai"
- output(filelist,3,ochiai_result)
- print
- print "top 3 of ochiaiop"
- output(filelist,3,ochiaiop_result)
- print
- print "top 3 of dstar"
- output(filelist,3,dstar_result)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement