Advertisement
angelboy

cov.py

May 22nd, 2015
297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.60 KB | None | 0 0
  1. import os
  2. import operator
  3. import sys
  4. from coverage import coverage
  5.  
  6.  
  7. passfile = [ "XMLData/passing/" + name for name in os.listdir("XMLData/passing/") ]
  8. failfile = [ "XMLData/failing/" + name for name in os.listdir("XMLData/failing/") ]
  9.  
  10. def cover2set(filelist):
  11.     sets = {}
  12.     for name in filelist :
  13.         filename = []
  14.         cov = coverage()
  15.         cov.start()
  16.  
  17.         import __main__
  18.         sys.path[0] = os.path.dirname(sys.argv[0])
  19.         sys.argv = ("xpcmd.py",name)
  20.         try :
  21.             execfile (sys.argv[0], __main__.__dict__)
  22.         except :
  23.             print "fail"
  24.  
  25.         cov.stop()
  26.         cov.save()
  27.         #get morf name
  28.         for codeunit in cov._get_file_reporters() :
  29.             filename.append(codeunit.name)
  30.  
  31.         for morf in filename :
  32.             module,execstat,miss,readable_miss = cov.analysis(morf)
  33.             runline = list(set(execstat).difference(set(miss)))
  34.             if morf in sets :
  35.                 for i in runline :
  36.                     if i in sets[morf] :
  37.                         sets[morf][i] += 1
  38.                     else:
  39.                         sets[morf][i] = 1
  40.             else :
  41.                 temp = {}
  42.                 for i in runline :
  43.                     temp[i] = 1
  44.                 sets[morf] = temp
  45.         cov.erase()
  46.     return sets
  47.  
  48. def tarantula(ns,nf,ncf,ncs,nuf):
  49.     susp = (float(ncf)/nf)/((float(ncf)/nf) + (float(ncs)/ns))
  50.     return susp
  51.  
  52. def ochiai(ns,nf,ncf,ncs,nuf):
  53.     susp = float(ncf)/((nf*(ncf+ncs))**(0.5))
  54.     return susp
  55.  
  56. def ochiaiop(ns,nf,ncf,ncs,nuf):
  57.     susp = abs(ncf - float(ncs)/(ns+1))
  58.     return susp
  59.  
  60. def dstar(ns,nf,ncf,ncs,nuf):
  61.     star = 2
  62.     susp = float(ncf**star)/(nuf+ncs)
  63.     return susp
  64.  
  65. def numbercover(sets,filename,line):
  66.     try:
  67.         result = sets[filename][line]
  68.     except KeyError:
  69.         return 0
  70.     return result
  71.  
  72. def calrelevance(ns,nf,passset,failset,filelist,metric):
  73.     coverrank = {}
  74.     for filename in filelist :
  75.         try :
  76.             lines = list(set(passset[filename]).union(set(failset[filename])))
  77.             temp = {}
  78.             for line in lines :
  79.                 ncf = numbercover(failset,filename,line)
  80.                 ncs = numbercover(passset,filename,line)
  81.                 nuf = ns - ncs
  82.                 nus = nf - ncf
  83.                 temp[line] = metric(ns,nf,ncf,ncs,nuf)
  84.             temp = sorted(temp.items(),key=operator.itemgetter(1))
  85.             coverrank[filename] = temp[::-1]
  86.         except KeyError:
  87.             pass
  88.     return coverrank
  89.  
  90. def output(filelist,number,resultset):
  91.     for filename in filelist :
  92.         print "filename : %s " % filename
  93.         for i in range(number):
  94.             try :
  95.                 line = resultset[filename][i][0]
  96.                 susp = resultset[filename][i][1]
  97.                 print "line:%d susp:%f" % (line,susp)
  98.             except KeyError:
  99.                 pass
  100.  
  101. passset = cover2set(passfile)
  102. failset = cover2set(failfile)
  103. filelist = list(set(passset).union(set(failset)))
  104.  
  105. ns = len(passfile)
  106. nf = len(failfile)
  107.  
  108. tarantula_result = calrelevance(ns,nf,passset,failset,filelist,tarantula)
  109. ochiai_result = calrelevance(ns,nf,passset,failset,filelist,ochiai)
  110. ochiaiop_result = calrelevance(ns,nf,passset,failset,filelist,ochiaiop)
  111. dstar_result = calrelevance(ns,nf,passset,failset,filelist,dstar)
  112.  
  113. print
  114. print "top 3 of tarantula"
  115. output(filelist,3,tarantula_result)
  116. print
  117. print "top 3 of ochiai"
  118. output(filelist,3,ochiai_result)
  119. print
  120. print "top 3 of ochiaiop"
  121. output(filelist,3,ochiaiop_result)
  122. print
  123. print "top 3 of dstar"
  124. output(filelist,3,dstar_result)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement