def ressamblance_fonction(f1, f2):
    f1 = trouve_variables.snailVariables(f1,
                                         trouve_variables.countVariables(f1))
    f2 = trouve_variables.snailVariables(f2,
                                         trouve_variables.countVariables(f2))
    l1, l2 = len(f1), len(f2)
    if l1 > l2:  #on ajuste la longueur des fonction
        for k in range(l1 - l2):
            f2 = f2 + []
        l = l1
    else:
        for k in range(l2 - l1):
            f1 = f1 + []
        l = l2
    same = 0
    for k in range(len(f1)):  #on calcule les similitude
        same += duplicationFonction.pourcentage_similitude_ligne(f1[k], f2[k])
    return (same / l)
예제 #2
0
def controle_duplication(Code, precision, code_controle):
    Code = checkIndentation.retirerIndentation(
        commentaires.retirerCom(Code))  #on enlève indentation et commentaires
    code_controle = checkIndentation.retirerIndentation(
        commentaires.retirerCom(code_controle))
    Code = trouve_variables.snailVariables(
        Code, trouve_variables.countVariables(Code))  #on enlève les variables
    code_controle = trouve_variables.snailVariables(
        code_controle, trouve_variables.countVariables(code_controle))
    similitude_fonctions = []
    fonctions = trouve_fonction.count_fonction(
        Code)  #trouve les fonctions de code
    for num_fonction in range(len(fonctions)):
        similitude_fonctions.append(
            controle_duplicat_fonction(
                Code[fonctions[num_fonction]["start"] +
                     1:fonctions[num_fonction]["end"]], precision,
                code_controle))
    return (similitude_fonctions)
예제 #3
0
def graphiquenote(lignes):
    compteur = appelvar(lignes)
    nbvariables = len(countVariables(lignes))
    pourcentage = round(100*compteur/nbvariables)
    #print(str(compteur))
    note=int(10-(0.5*compteur))
    if note >=0:
        note=note
    else:
        note = 0
    return("Variables appelées-Evaluation de l'appel des variables-variables utilisées+variables non utilisées-"+str(100-pourcentage)+"-Note : "+str(note)+"/10-|",note)
예제 #4
0
def appelvar (lignes):                          #lignes=fichier texte contenant toutes les lignes du code
    #regarde si une variable a été utilisée 
    compteur=0                                  #compteur correspond au nombre de fois où une variable n'a pas été appelée    
    L=textefonctions(lignes)
    for i in range(len(L)) :    
        vars= countVariables(L[i][1])                    #vars = les variables dans la ième fonction 
        vars= vars + varglobefore(L[i][0], lignes)                #on rajoute les variables globales créées avant la fonction 
    for var in vars:
        if vars.count(var) ==1:
            compteur+=1
    return compteur
예제 #5
0
def varglobal(lignes):
    #renvoie les variables globales et les indices des lignes où elles apparaissent
    L=numlignevarglo(lignes)
    vars=[]
    for i in L:
        #print("lol" +str(lignes[i-1]))
        var= countVariables([lignes[i-1]])                                  #appel fonction pour récupérer la variable dans la ligne i de lignes
        #print(var)
        if var:
            vars.append([var[0],i])
    #print (vars)                                                 #var= un tableau avec comme seul élément une variable
    return vars
def fonction_double(Code, precision):
    Code = checkIndentation.retirerIndentation(
        commentaires.retirerCom(Code))  #on enlève indentation et commentaires
    Code = trouve_variables.snailVariables(
        Code, trouve_variables.countVariables(Code))  #on enlève les variables
    liste_fonction = trouve_fonction.count_fonction(Code)
    for f in range(len(liste_fonction)):
        liste_fonction[f]["copie"] = len(
            duplicationFonction.controle_duplicat_fonction(
                Code[liste_fonction[f]["start"] + 1:liste_fonction[f]["end"]],
                precision, Code[:liste_fonction[f]["start"] + 1] +
                Code[liste_fonction[f]["end"] + 1:]))
    return (liste_fonction)
def double_fonction_meme_nom(Code):
    Code = checkIndentation.retirerIndentation(
        commentaires.retirerCom(Code))  #on enlève indentation et commentaires
    Code = trouve_variables.snailVariables(
        Code, trouve_variables.countVariables(Code))  #on enlève les variables
    liste_fonction = trouve_fonction.count_fonction(Code)
    for i in range(len(liste_fonction) - 1):
        for j in range(i + 1, len(liste_fonction)):
            if liste_fonction[i]["nom"] == liste_fonction[j]["nom"]:
                liste_fonction[i]["copie_status"].append(
                    (j,
                     ressamblance_fonction(
                         Code[liste_fonction[i]["start"] +
                              1:liste_fonction[i]["end"]],
                         Code[liste_fonction[j]["start"] +
                              1:liste_fonction[j]["end"]])))
                liste_fonction[j]["copie_status"].append(
                    (i,
                     ressamblance_fonction(
                         Code[liste_fonction[i]["start"] +
                              1:liste_fonction[i]["end"]],
                         Code[liste_fonction[j]["start"] +
                              1:liste_fonction[j]["end"]])))
    return (liste_fonction)
예제 #8
0
def test_countVariables():
    lines = readLines(path)
    result = toTest.countVariables(lines)
    assert type(result) == list
    assert "KIND" in result
예제 #9
0
#Parsing des fonctions présentes dans le code et affichage de leur nombre de lignes.
print("----- FONCTIONS  -----")
txt, points_f1 = printFonction(lines)
results_txt = results_txt + txt
txt, points_f2 = creation_string(lines)
results_txt = results_txt + txt

#Parsing des tests présents dans le code et affichage de données à leur sujet.
print("----- VERIFICATION DES TESTS  -----")
txt, points_t = printStatsTests(lines, False)
results_txt = results_txt + txt

#Parsing des variables présentes dans le code et affichage d'informations à leur sujet.
print("----- VARIABLES  -----")
variables_list = countVariables(lines)
txt, points_v = returnmain(variables_list)
results_txt = results_txt + txt
txt, points_v2 = graphiquenote(lines)
results_txt = results_txt + txt

points_i = round(points_i * points_f2)
points_c = round(points_c * points_f2)
points_t = round(points_t * points_f2)
points_v = round(points_v * points_f2)
points_v2 = round(points_v2 * points_f2)
note = round((points_i + points_c + points_t + points_v + points_v2) / 5)
results_txt = results_txt + "Synthèse--Indentation+Commentaires+Tests+Nommage+Variables utilisées+Points perdus-" + str(
    points_i * 100 // 50) + "+" + str(points_c * 100 // 50) + "+" + str(
        points_t * 100 // 50) + "+" + str(points_v * 100 // 50) + "+" + str(
            points_v2 * 100 // 50) + "-Note : " + str(note) + "/10-|"