Dibujar gráfico de flujo de control usando pycfg | Python

requisitos previos:
Gráfico de flujo de control
,
Complejidad ciclomática
 

Por lo general, dibujamos el gráfico de flujo de control manual con lápiz y papel analizando el flujo de control del programa. CFG nos ayuda a encontrar caminos independientes ( Complejidad Ciclomática ), lo que conduce a la cantidad de casos de prueba necesarios para probar el programa. Podemos automatizar la tarea de CFG utilizando una biblioteca de Python llamada pycfg . Esta biblioteca toma una secuencia de comandos de Python como entrada y proporciona un gráfico como salida.

Podemos usar pycfg de las siguientes 2 maneras

  1. Usando directamente el archivo
  2. Importando biblioteca en el programa
a= 10
while(a <= 0):
    if a == 5:
        print(a)
    a += 1
print("exited")
from pycfg.pycfg import PyCFG, CFGNode, slurp
import argparse
import tkinter as tk
from PIL import ImageTk, Image
  
if __name__ == '__main__':
    parser = argparse.ArgumentParser()
  
    parser.add_argument('pythonfile', help ='The python file to be analyzed')
    args = parser.parse_args()
    arcs = []
  
    cfg = PyCFG()
    cfg.gen_cfg(slurp(args.pythonfile).strip())
    g = CFGNode.to_graph(arcs)
    g.draw(args.pythonfile + '.png', prog ='dot')
  
    # Draw using tkinter.
    root = tk.Tk()
    root.title("Control Flow Graph")
    img1 = Image.open(str(args.pythonfile) + ".png")  # PIL solution
    img1 = img1.resize((800, 600), Image.ANTIALIAS)
    img = ImageTk.PhotoImage(img1)
      
    background ="gray"
  
    panel = tk.Label(root, height = 600, image = img)
    panel.pack(side = "top", fill ="both", expand = "yes")
    nodes = g.number_of_nodes()     # no. of nodes.
    edges = g.number_of_edges()     # no. of Edges.
    complexity = edges - nodes + 2         # Cyclomatic complexity
  
    frame = tk.Frame(root, bg = background)
    frame.pack(side ="bottom", fill ="both", expand = "yes")
          
    tk.Label(frame, text ="Nodes\t\t"+str(nodes), bg = background).pack()
    tk.Label(frame, text ="Edges\t\t"+str(edges), bg = background).pack()
    tk.Label(frame, text ="Cyclo Complexity\t"+
             str(complexity), bg = background).pack()
  
    root.mainloop()

Publicación traducida automáticamente

Artículo escrito por Vikku_Sharma y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *