Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Milton Mazzarri
<milmazz@gmail.com>
Marzo, 2010
Análisis estático del código fuente en Python
Contenido I
1 Conceptos
Análisis estático de código
Pylint
2 Consideraciones
Labores de revisión manual
Falsos positivos
3 Revisiones
Básicas
Variables
Clases
Diseño
Importaciones
Conflictos de estilos
Formato
Análisis estático del código fuente en Python
Contenido II
Otras revisiones
4 Reportes
5 Puntuación
6 Proceso de corrección
Instalación
Ejecución
Conociendo el detalle del error
Primer avance
Segundo avance
Análisis estático del código fuente en Python
Conceptos
Análisis estático de código
Definición
El análisis estático del código se refiere al proceso de
evaluación del código fuente sin ejecutarlo, en base a este
análisis se obtendrá información que nos permita mejorar la
línea base de nuestro proyecto, sin alterar la semántica original
de la aplicación.
Análisis estático del código fuente en Python
Conceptos
Pylint
¿Qué es Pylint?
Definición
Su misión es analizar código en Python en busca de errores o
síntomas de mala calidad en el código fuente. Cabe destacar
que por omisión, la guía de estilo a la que se trata de apegar
Pylint es la descrita en el PEP-8.
Análisis estático del código fuente en Python
Consideraciones
Labores de revisión manual
Falsos positivos
Falsos positivos
Falsos positivos
Falsos positivos
Falsos positivos
Revisiones básicas
Revisiones básicas
Revisiones básicas
Revisiones básicas
Revisiones básicas
Revisiones básicas
Revisiones básicas
Revisión de variables
Revisión de variables
Revisión de variables
Revisión de variables
Revisión de clases
Revisión de clases
Revisión de clases
Revisión de clases
Revisión de diseño
Revisión de diseño
Revisión de importaciones
Dependencias externas.
imports relativos o importe de todos los métodos, variables
vía * (wildcard).
Uso de imports cíclicos.
Uso de módulos obsoletos.
Análisis estático del código fuente en Python
Revisiones
Importaciones
Revisión de importaciones
Dependencias externas.
imports relativos o importe de todos los métodos, variables
vía * (wildcard).
Uso de imports cíclicos.
Uso de módulos obsoletos.
Análisis estático del código fuente en Python
Revisiones
Importaciones
Revisión de importaciones
Dependencias externas.
imports relativos o importe de todos los métodos, variables
vía * (wildcard).
Uso de imports cíclicos.
Uso de módulos obsoletos.
Análisis estático del código fuente en Python
Revisiones
Importaciones
Revisión de importaciones
Dependencias externas.
imports relativos o importe de todos los métodos, variables
vía * (wildcard).
Uso de imports cíclicos.
Uso de módulos obsoletos.
Análisis estático del código fuente en Python
Revisiones
Conflictos de estilos
Revisiones de formato
Construcciones no autorizadas
Sangrado estricto del código
Longitud de la línea
Uso de <> en vez de !=
Análisis estático del código fuente en Python
Revisiones
Formato
Revisiones de formato
Construcciones no autorizadas
Sangrado estricto del código
Longitud de la línea
Uso de <> en vez de !=
Análisis estático del código fuente en Python
Revisiones
Formato
Revisiones de formato
Construcciones no autorizadas
Sangrado estricto del código
Longitud de la línea
Uso de <> en vez de !=
Análisis estático del código fuente en Python
Revisiones
Formato
Revisiones de formato
Construcciones no autorizadas
Sangrado estricto del código
Longitud de la línea
Uso de <> en vez de !=
Análisis estático del código fuente en Python
Revisiones
Otras revisiones
Otras revisiones
Otras revisiones
Otras revisiones
Otras revisiones
Otras revisiones
Reportes
Ejemplo
Report
======
1895 statements analysed.
Análisis estático del código fuente en Python
Reportes
Formato de salida
Formato de salida
Formato de salida
Formato de salida
Puntuación
Ejemplo
# aptitude install pylint
$ pylint -version
pylint 0.19.0,
astng 0.19.3, common 0.48.1
Python 2.5.5 (r255:77872, Mar 16 2010, 01:44:35)
[GCC 4.4.3]
Análisis estático del código fuente en Python
Proceso de corrección
Ejecución
Ejecución de Pylint
Ejemplo
$ cd montecarlo
$ export PYTHONPATH=$PWD
$ pylint -rcfile=pylintrc -f html -files-output=y scia/tests/
Ejemplo
$ pylint -help-msg=W0612
:W0612: *Unused variable %r*
Used when a variable is defined
but not used.
This message belongs to the
variables checker.
Análisis estático del código fuente en Python
Proceso de corrección
Conociendo el detalle del error
Se ha encontrado la falla
Ejemplo
# scia.tests.test_main.py
def test_ham(self):
from scia.tests.common import *
cheese = TestSpam(self.main, self.delayKey, ...
cheese.test_spam_method()
Análisis estático del código fuente en Python
Proceso de corrección
Conociendo el detalle del error
Se corrige la falla
Ejemplo
# scia.tests.test_main.py
def test_ham(self):
from scia.tests.common import TestSpam
cheese = TestSpam(self.main,
self.delayKey,
self.delayMouse,
self.delayThread,
self.app)
cheese.test_spam_method()
Análisis estático del código fuente en Python
Proceso de corrección
Primer avance
Resultado
Ejemplo
Global evaluation
-----------
Your code has been rated at -33.18/10
You have to do something quick !
Análisis estático del código fuente en Python
Proceso de corrección
Segundo avance
Segundo avance
Ejemplo
$ pylint -help-msg=W0614
:W0614: *Unused import %s from wildcard import*
Used when an imported module
or variable is not used
from a ’from X import *’
style import.
This message belongs to the
variables checker.
Análisis estático del código fuente en Python
Proceso de corrección
Segundo avance
Ejemplo
# Incorrecto
from PyQt4.QtCore import *
# Correcto
from PyQt4.QtCore import QTimer, QPoint, SIGNAL
Análisis estático del código fuente en Python
Proceso de corrección
Segundo avance
Enlaces de interés
Enlaces de interés
Enlaces de interés
Enlaces de interés