SlideShare uma empresa Scribd logo
1 de 14
Qualidade de código

PEP8, Pylint, Pyflakes e CloneDigger
Amigos do desenvolvedor Python !
PEP8 – O que é
PEP - Python Enhancement Proposal São documentos que geralmente abordam alguma nova
funcionalidade da linguagem, propósitos, procedimentos ou ambiente. Em
suma, são “guidelines” que te orientam num melhor uso da linguagem e
suas funcionalidades, bem como podem ajudar em questões como
arquitetura, ambiente ou processos de sua aplicação.
(Escrita por Guido Van Rossum e Barry Warsaw)

●

pep8 - é uma ferramenta simples (e muito eficaz) que analisa o seu
código Python segundo as convenções de código descritas na PEP 8 (
http://www.python.org/dev/peps/pep-0008/)
Pylint – O que é
●

Pylint – lint's São ferramentas de checagem estática de códigos.
O Pylint é uma ferramenta de lint para o Python. O Pylint analisa de
forma minuciosa o código do seu projeto Python, lhe retornando uma
variedade de relatórios, sobre todo o tipo de problema que ele encontra,
indo de incoerências com a PEP 8, até nome de variáveis.
Pyflakes – O que é
●

Pyflakes – é um pylint mais resumido, que aponta direto o erro.
CloneDigger – O que é
●

CloneDigger – Ferramenta que detecta duplicação de código python.
Como instalar
●

●

●

●

PEP8:
PEP8
pip install pep8
Pylint:
Pylint
pip install pylint
Pyflakes:
Pyflakes
pip install pyflakes
CloneDigger:
CloneDigger
pip install clonedigger
PEP8 – Dicas de Utilização
$ pep8 models.py
models.py:42:65: W291 trailing whitespace
models.py:62:1: E302 expected 2 blank lines, found 1
models.py:105:80: E501 line too long (89 characters)

$ pep8 models.py --show-source --show-pep8
models.py:105:80: E501 line too long (89 characters)
return '/weblog/%s/%s/' % (self.pub_date.strftime('%Y/%m/%d').lower(), self.slug)
^
Limit all lines to a maximum of 79 characters.

Configuração:
As configurações são lidas no diretório ~/.config/pep8 . Exemplo de configuração:
[pep8]
ignore = E226,E302,E41
max-line-length = 160
Os erros E226, E302 e E41 serão ignorados.
autopep8
●

https://github.com/hhatto/autopep8
Ferramenta que “auto-aplica” correções no arquivo .py
Instalação:
pip install --upgrade autopep8 (requer pep8 instalado).
Uso:
autopep8 --in-place --aggressive <filename>
Ob: Vale a pena uma leitura na documentação na página
do projeto.
Pylint
pylint arquivo.py
C: 1: Missing docstring
Os tipos de mensagens:
[R]efactor for a "good practice" metric violation
[C]onvention for coding standard violation
[W]arning for stylistic problems, or minor programming issues
[E]rror for important programming issues (i.e. most probably bug)
[F]atal for errors which prevented further processing
Com alguma personalização:
$ pylint aquivo.py --reports=n --include-ids=y –disable=W0232
Primeiro, com o parâmetro –-reports=n dizemos que não queremos aquele relatório gigantesco no final da análise.
O –-include-ids=y exibe para gente os ids das mensagens de erros do Pylint. É útil, pois todas as mensagens que você julgar
desnecessárias para a análise você adiciona no parâmetro -–disable (separadas por vírgula).
Gerar arquivo pylintrc com suas configurações personalizadas:
$ pylint --reports=n --include-ids=y --disable=W0232 --generate-rcfile > ~/.pylintrc
Para utlizar o arquivo de configurações personalizadas ao executar o pylint:
pylint --rcfile=pylintrc.rc arquivo.py
Para entender as mensagens de erro do pylint:
pylint –help-msg=R0904
Pyflakes

pyflakes arquivo.py
arquivo.py:3: 'EmptyPage' imported but unused
arquivo.py:3: 'InvalidPage' imported but unused
PEP8 e Pyflakes juntos: flake8

$ pip install flake8
CloneDigger

clonedigger meuprojeto/
Ele irá gerar um arquivo output.html
E neste relatório ele mostrará os trechos de códigos repitidos por
arquivo e irá destacar em vermelho as linhas que não se repetem.
PEP8, Pylint e Pyflakes, comparação:
$ pep8 admin.py
admin.py:37:14: E124 closing bracket does not match visual indentation
$ pylint admin.py
No config file found, using default configuration
************* Module demo_passo_a_passo.admin
C: 15,0: Invalid name "site" for type constant (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C: 18,0:BookmarkAdmin: Missing docstring
R: 21,4:BookmarkAdmin.FormWizard: Too many ancestors (9/7)
C: 21,4:BookmarkAdmin.FormWizard: Missing docstring
E: 23,19:BookmarkAdmin.FormWizard.done: Undefined variable 'HttpResponse'
R: 21,4:BookmarkAdmin.FormWizard: Too many public methods (31/20)
R: 18,0:BookmarkAdmin: Too many public methods (60/20)
W: 5,0: Unused import admin
W: 6,0: Unused import BookmarksWizard
$ pyflakes admin.py
admin.py:5: 'admin' imported but unused
admin.py:6: 'BookmarksWizard' imported but unused
admin.py:23: undefined name 'HttpResponse'
E uma IDE ?

http://ninja-ide.org (do acrônimo recursivo: "Ninja-IDE Is Not Just Another IDE"), é
uma IDE multi-plataforma de desenvolvimento integrado. NINJA-IDE é executado
em Linux/X11, Mac OS X e sistemas operacionais de desktop Windows, e permite
aos desenvolvedores criarem aplicações para diversas finalidades, utilizando todas
as ferramentas e utilitários de NINJA-IDE, tornando a tarefa de escrever software
mais fácil e agradável.

Mais conteúdo relacionado

Mais procurados

Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonRicardo Zalla
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de softwarericardophp
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyGilson Filho
 
Introdução à Linguagem de Programação GO
Introdução à Linguagem de Programação GOIntrodução à Linguagem de Programação GO
Introdução à Linguagem de Programação GOJose Augusto Cintra
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalAdriano Petrich
 
Introdução a Programação Orientada a testes
Introdução a Programação Orientada a testesIntrodução a Programação Orientada a testes
Introdução a Programação Orientada a testesAndré Luiz Forchesatto
 
Especificação e Verificação de Programas
Especificação e Verificação de ProgramasEspecificação e Verificação de Programas
Especificação e Verificação de ProgramasAdolfo Neto
 
Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Robson Agapito Correa
 
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
Tutorial dev cpp   001 - criação, leitura e alteração de arquivosTutorial dev cpp   001 - criação, leitura e alteração de arquivos
Tutorial dev cpp 001 - criação, leitura e alteração de arquivosFlávio Freitas
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02profwtelles
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...Rogério Moraes de Carvalho
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + PythonMateus Padua
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoAdriano Teixeira de Souza
 

Mais procurados (18)

Mini aula de teste de software
Mini aula de teste de softwareMini aula de teste de software
Mini aula de teste de software
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem Python
 
O compilador dev c++
O compilador dev c++O compilador dev c++
O compilador dev c++
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
Sprint cPython at Globo.com
Sprint cPython at Globo.comSprint cPython at Globo.com
Sprint cPython at Globo.com
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Introdução à Linguagem de Programação GO
Introdução à Linguagem de Programação GOIntrodução à Linguagem de Programação GO
Introdução à Linguagem de Programação GO
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao final
 
Introdução a Programação Orientada a testes
Introdução a Programação Orientada a testesIntrodução a Programação Orientada a testes
Introdução a Programação Orientada a testes
 
Especificação e Verificação de Programas
Especificação e Verificação de ProgramasEspecificação e Verificação de Programas
Especificação e Verificação de Programas
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.
 
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
Tutorial dev cpp   001 - criação, leitura e alteração de arquivosTutorial dev cpp   001 - criação, leitura e alteração de arquivos
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
 
Testes de Sofware
Testes de SofwareTestes de Sofware
Testes de Sofware
 

Destaque

Slide PyQt versus Pyside
Slide PyQt versus PysideSlide PyQt versus Pyside
Slide PyQt versus PysideWill Filho
 
Pylint : 10 ans, état des lieux
Pylint : 10 ans, état des lieuxPylint : 10 ans, état des lieux
Pylint : 10 ans, état des lieuxLogilab
 
Static Code Analysis
Static Code AnalysisStatic Code Analysis
Static Code AnalysisAnnyce Davis
 
Python Tricks That You Can't Live Without
Python Tricks That You Can't Live WithoutPython Tricks That You Can't Live Without
Python Tricks That You Can't Live WithoutAudrey Roy
 
Python - code quality and production monitoring
Python - code quality and production monitoringPython - code quality and production monitoring
Python - code quality and production monitoringDavid Melamed
 

Destaque (6)

Slide PyQt versus Pyside
Slide PyQt versus PysideSlide PyQt versus Pyside
Slide PyQt versus Pyside
 
Pylint : 10 ans, état des lieux
Pylint : 10 ans, état des lieuxPylint : 10 ans, état des lieux
Pylint : 10 ans, état des lieux
 
Aprendendo Git
Aprendendo GitAprendendo Git
Aprendendo Git
 
Static Code Analysis
Static Code AnalysisStatic Code Analysis
Static Code Analysis
 
Python Tricks That You Can't Live Without
Python Tricks That You Can't Live WithoutPython Tricks That You Can't Live Without
Python Tricks That You Can't Live Without
 
Python - code quality and production monitoring
Python - code quality and production monitoringPython - code quality and production monitoring
Python - code quality and production monitoring
 

Semelhante a Qualidade de código Python

Administração de sistemas usando Python
Administração de sistemas usando PythonAdministração de sistemas usando Python
Administração de sistemas usando PythonHelio Loureiro
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonFabio Spanhol
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvPedro Fernandes Vieira
 
Tutorial poke-tool
Tutorial poke-toolTutorial poke-tool
Tutorial poke-toolunifesptk
 
A lógica do Python e seus termos
A lógica do Python e seus termosA lógica do Python e seus termos
A lógica do Python e seus termosValore I/O
 
Análise estática de código Python
Análise estática de código PythonAnálise estática de código Python
Análise estática de código PythonGuilherme Vierno
 
Php Test Fest PHPMS, Maio 2008
Php Test Fest PHPMS, Maio 2008Php Test Fest PHPMS, Maio 2008
Php Test Fest PHPMS, Maio 2008zehzinho
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsGilmar Pupo
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsHelio Colombe
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Jaime Neto
 
Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Mauro Baraldi
 
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptxAula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptxaronoliveira3
 

Semelhante a Qualidade de código Python (20)

My first app django
My first app djangoMy first app django
My first app django
 
aula5_python.pdf
aula5_python.pdfaula5_python.pdf
aula5_python.pdf
 
Administração de sistemas usando Python
Administração de sistemas usando PythonAdministração de sistemas usando Python
Administração de sistemas usando Python
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com Python
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenv
 
Python, CPython, Pythonico, Cython
Python, CPython, Pythonico, CythonPython, CPython, Pythonico, Cython
Python, CPython, Pythonico, Cython
 
Tutorial poke-tool
Tutorial poke-toolTutorial poke-tool
Tutorial poke-tool
 
A lógica do Python e seus termos
A lógica do Python e seus termosA lógica do Python e seus termos
A lógica do Python e seus termos
 
Introdução à linguagem python
Introdução à linguagem pythonIntrodução à linguagem python
Introdução à linguagem python
 
Análise estática de código Python
Análise estática de código PythonAnálise estática de código Python
Análise estática de código Python
 
Php Test Fest PHPMS, Maio 2008
Php Test Fest PHPMS, Maio 2008Php Test Fest PHPMS, Maio 2008
Php Test Fest PHPMS, Maio 2008
 
Django Básico
Django BásicoDjango Básico
Django Básico
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8
 
Pythonbrasil8
Pythonbrasil8Pythonbrasil8
Pythonbrasil8
 
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptxAula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
 

Qualidade de código Python

  • 1. Qualidade de código PEP8, Pylint, Pyflakes e CloneDigger Amigos do desenvolvedor Python !
  • 2. PEP8 – O que é PEP - Python Enhancement Proposal São documentos que geralmente abordam alguma nova funcionalidade da linguagem, propósitos, procedimentos ou ambiente. Em suma, são “guidelines” que te orientam num melhor uso da linguagem e suas funcionalidades, bem como podem ajudar em questões como arquitetura, ambiente ou processos de sua aplicação. (Escrita por Guido Van Rossum e Barry Warsaw) ● pep8 - é uma ferramenta simples (e muito eficaz) que analisa o seu código Python segundo as convenções de código descritas na PEP 8 ( http://www.python.org/dev/peps/pep-0008/)
  • 3. Pylint – O que é ● Pylint – lint's São ferramentas de checagem estática de códigos. O Pylint é uma ferramenta de lint para o Python. O Pylint analisa de forma minuciosa o código do seu projeto Python, lhe retornando uma variedade de relatórios, sobre todo o tipo de problema que ele encontra, indo de incoerências com a PEP 8, até nome de variáveis.
  • 4. Pyflakes – O que é ● Pyflakes – é um pylint mais resumido, que aponta direto o erro.
  • 5. CloneDigger – O que é ● CloneDigger – Ferramenta que detecta duplicação de código python.
  • 6. Como instalar ● ● ● ● PEP8: PEP8 pip install pep8 Pylint: Pylint pip install pylint Pyflakes: Pyflakes pip install pyflakes CloneDigger: CloneDigger pip install clonedigger
  • 7. PEP8 – Dicas de Utilização $ pep8 models.py models.py:42:65: W291 trailing whitespace models.py:62:1: E302 expected 2 blank lines, found 1 models.py:105:80: E501 line too long (89 characters) $ pep8 models.py --show-source --show-pep8 models.py:105:80: E501 line too long (89 characters) return '/weblog/%s/%s/' % (self.pub_date.strftime('%Y/%m/%d').lower(), self.slug) ^ Limit all lines to a maximum of 79 characters. Configuração: As configurações são lidas no diretório ~/.config/pep8 . Exemplo de configuração: [pep8] ignore = E226,E302,E41 max-line-length = 160 Os erros E226, E302 e E41 serão ignorados.
  • 8. autopep8 ● https://github.com/hhatto/autopep8 Ferramenta que “auto-aplica” correções no arquivo .py Instalação: pip install --upgrade autopep8 (requer pep8 instalado). Uso: autopep8 --in-place --aggressive <filename> Ob: Vale a pena uma leitura na documentação na página do projeto.
  • 9. Pylint pylint arquivo.py C: 1: Missing docstring Os tipos de mensagens: [R]efactor for a "good practice" metric violation [C]onvention for coding standard violation [W]arning for stylistic problems, or minor programming issues [E]rror for important programming issues (i.e. most probably bug) [F]atal for errors which prevented further processing Com alguma personalização: $ pylint aquivo.py --reports=n --include-ids=y –disable=W0232 Primeiro, com o parâmetro –-reports=n dizemos que não queremos aquele relatório gigantesco no final da análise. O –-include-ids=y exibe para gente os ids das mensagens de erros do Pylint. É útil, pois todas as mensagens que você julgar desnecessárias para a análise você adiciona no parâmetro -–disable (separadas por vírgula). Gerar arquivo pylintrc com suas configurações personalizadas: $ pylint --reports=n --include-ids=y --disable=W0232 --generate-rcfile > ~/.pylintrc Para utlizar o arquivo de configurações personalizadas ao executar o pylint: pylint --rcfile=pylintrc.rc arquivo.py Para entender as mensagens de erro do pylint: pylint –help-msg=R0904
  • 10. Pyflakes pyflakes arquivo.py arquivo.py:3: 'EmptyPage' imported but unused arquivo.py:3: 'InvalidPage' imported but unused
  • 11. PEP8 e Pyflakes juntos: flake8 $ pip install flake8
  • 12. CloneDigger clonedigger meuprojeto/ Ele irá gerar um arquivo output.html E neste relatório ele mostrará os trechos de códigos repitidos por arquivo e irá destacar em vermelho as linhas que não se repetem.
  • 13. PEP8, Pylint e Pyflakes, comparação: $ pep8 admin.py admin.py:37:14: E124 closing bracket does not match visual indentation $ pylint admin.py No config file found, using default configuration ************* Module demo_passo_a_passo.admin C: 15,0: Invalid name "site" for type constant (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) C: 18,0:BookmarkAdmin: Missing docstring R: 21,4:BookmarkAdmin.FormWizard: Too many ancestors (9/7) C: 21,4:BookmarkAdmin.FormWizard: Missing docstring E: 23,19:BookmarkAdmin.FormWizard.done: Undefined variable 'HttpResponse' R: 21,4:BookmarkAdmin.FormWizard: Too many public methods (31/20) R: 18,0:BookmarkAdmin: Too many public methods (60/20) W: 5,0: Unused import admin W: 6,0: Unused import BookmarksWizard $ pyflakes admin.py admin.py:5: 'admin' imported but unused admin.py:6: 'BookmarksWizard' imported but unused admin.py:23: undefined name 'HttpResponse'
  • 14. E uma IDE ? http://ninja-ide.org (do acrônimo recursivo: "Ninja-IDE Is Not Just Another IDE"), é uma IDE multi-plataforma de desenvolvimento integrado. NINJA-IDE é executado em Linux/X11, Mac OS X e sistemas operacionais de desktop Windows, e permite aos desenvolvedores criarem aplicações para diversas finalidades, utilizando todas as ferramentas e utilitários de NINJA-IDE, tornando a tarefa de escrever software mais fácil e agradável.