+ - 0:00:00
Notes for current slide
Notes for next slide

Premiers pas pour assurer la qualité de vos applications Python

Arthur Vuillard

PyUGGre 07/12/2016

1 / 17

À propos de moi

2 / 17

À propos de moi

Développeur Pythoniste

2 / 17

Je suis un développeur Python

À propos de moi

Développeur Pythoniste

AdminSys Linuxien

2 / 17

et un administrateur système linux

Est ce que je suis un devops ?

À propos de moi

Développeur Pythoniste

AdminSys Linuxien

Logo d'Hashbang    
2 / 17

le créateur d'hashbang

développement et maintenance d'applications webs pour les entrepreneures/entrepreneuses et PMEs

remporte beaucoup de succès et qui a déjà au moins un salarié !

À propos de moi

Développeur Pythoniste

AdminSys Linuxien

Logo d'Hashbang Logo de localghost  
2 / 17

membre de Localghost

regroupement d'éditeurs et d'intégrateurs autour de meilleures pratiques d'admin sys

infogérance de serveurs avec de grands outils

À propos de moi

Développeur Pythoniste

AdminSys Linuxien

Logo d'Hashbang Logo de localghost Logo de l'AFPy
2 / 17

et je suis aussi

Bénévole à l'AFPy

association francophone python

trésorier

organisateur de conférence et de meetup

enthousiaste du langage

Qualité ?

3 / 17

De quoi parle-t-on quand on parle de qualité ?

Qualité ?

la qualité est la « manière d'être », bonne ou mauvaise, de quelque chose

Wikipedia

3 / 17

d'apres wikipedia, la qualité est la manière d'être bonne ou mauvaise de quelque chose

on peut aussi parler de la valeur intrinsèque de la chose, c'est à dire les usages remplis par la chose et dont j'ai besoin

Référentiel

4 / 17

pour savoir si notre objet remplis des usages, il faut d'abord les connaitre

Référentiel

définir ses exigences

5 / 17

on va donc définir nos exigences

c'est à dire qu'on va faire la liste des conditions que doit remplir notre objet

Référentiel

définir ses exigences

mesures relatives

6 / 17

la qualité utilise la relativité

on va chercher à savoir où on se situe par rapport à notre référentiel

et pour le savoir, il faut définir des mesures

Processus

7 / 17

dans l'industrie, la qualité est avant tout une gestion des processus de l'entreprise

de manière à faire en sorte que la production soit au niveau du référentiel

Processus

  • fabrication
7 / 17

le processus principal est celui de la fabrication, on va coder un logiciel

on a beau être très adroit, on n'est pas à l'abri d'une erreur, d'un outil qui fonctionne mal, d'une faute occasionnelle

Processus

  • fabrication

  • détection

7 / 17

il faut donc mettre en place un processus pour détecter cette erreur

on parle de controle, c'est juste une vérification

on vérifie notre code vis à vis du référentiel défini

Processus

  • fabrication

  • détection

  • gestion

7 / 17

si jamais on trouve une erreur, il faut alors la gérer

on ne va pas simplement ignorer l'erreur

on a donc un processus de gestion des infractions détectés

Processus

  • fabrication

  • détection

  • gestion

  • mise à jour

7 / 17

enfin, depuis l'analyse l'ensemble de ces processus, on peut définir de nouvelles règles de qualité auxquelles il faudrait se conformer

on a donc un processus pour mettre à jour le référentiel de qualité

Dans le code

8 / 17

Dans le code

  • lisibilité
8 / 17

Dans le code

  • lisibilité

  • style

8 / 17

Dans le code

  • lisibilité

  • style

  • bonne exécution

8 / 17

Dans le code

  • lisibilité

  • style

  • bonne exécution

  • bon fonctionnement

8 / 17

Dans le code

  • lisibilité

  • style

  • bonne exécution

  • bon fonctionnement

  • compilation
8 / 17

Dans le code

  • lisibilité

  • style

  • bonne exécution

  • bon fonctionnement

  • compilation

  • complexité

8 / 17

Dans le code

  • lisibilité

  • style

  • bonne exécution

  • bon fonctionnement

  • compilation

  • complexité

  • tests

8 / 17

Howto

9 / 17

Howto

pytest et ses plugins

9 / 17

Howto

pytest et ses plugins

spec pep8, outil pep8, pytest-pep8

9 / 17

Howto

10 / 17

Howto

$ pip install pytest pytest-pep8 pytest-isort pytest-mccabe
10 / 17

Howto

$ pip install pytest pytest-pep8 pytest-isort pytest-mccabe
$ py.test # exécute les tests
10 / 17

Howto

$ pip install pytest pytest-pep8 pytest-isort pytest-mccabe
$ py.test # exécute les tests
$ py.test --pep8 # tests + style
10 / 17

Howto

$ pip install pytest pytest-pep8 pytest-isort pytest-mccabe
$ py.test # exécute les tests
$ py.test --pep8 # tests + style
$ py.test --isort # tests + ordre des imports
10 / 17

Howto

$ pip install pytest pytest-pep8 pytest-isort pytest-mccabe
$ py.test # exécute les tests
$ py.test --pep8 # tests + style
$ py.test --isort # tests + ordre des imports
$ py.test --mccabe # tests + complexité
10 / 17

Demo

11 / 17

Exécution

12 / 17

Exécution

12 / 17

Exécution

  • dans l'éditeur (vim + syntastic)

  • en codant en TDD (pytest)

12 / 17

Exécution

  • dans l'éditeur (vim + syntastic)

  • en codant en TDD (pytest)

  • avec gestionnaire de code (py.test dans un hook)

12 / 17

Exécution

  • dans l'éditeur (vim + syntastic)

  • en codant en TDD (pytest)

  • avec gestionnaire de code (py.test dans un hook)

  • serveur d'intégration continue (gitlab ci ou drone)

12 / 17

Exemple hook git

$ cat .git/hooks/pre-commit
#!/bin/bash
set -ex
py.test --pep8 --isort --mccabe
13 / 17

Exemple gitlab ci

$ cat .gitlab-ci.yml
image: python:3.5
qa:
script:
- pip install pytest pytest-pep8 pytest-isort pytest-mccabe
- py.test --pep8 --isort --mccabe
14 / 17

Exemple Drone Ci

$ cat .drone.yml
build:
image: python:3.4
commands:
- pip install pytest pytest-pep8 pytest-isort pytest-mccabe
- py.test --pep8 --isort --mccabe
15 / 17

Commencer

16 / 17

Commencer

  • détecter
16 / 17

Commencer

  • détecter

  • activer un plugin à la fois

16 / 17

Commencer

  • détecter

  • activer un plugin à la fois

  • ignorer certains infractions

16 / 17

Commencer

  • détecter

  • activer un plugin à la fois

  • ignorer certains infractions

  • utiliser autopep8

16 / 17

Commencer

  • détecter

  • activer un plugin à la fois

  • ignorer certains infractions

  • utiliser autopep8

  • utiliser isort

16 / 17

Commencer

  • détecter

  • activer un plugin à la fois

  • ignorer certains infractions

  • utiliser autopep8

  • utiliser isort

  • utiliser diff_cover

16 / 17

Commencer

  • détecter

  • activer un plugin à la fois

  • ignorer certains infractions

  • utiliser autopep8

  • utiliser isort

  • utiliser diff_cover

  • écrire des tests

16 / 17

Des questions ?

arthur@hashbang.fr

17 / 17

À propos de moi

2 / 17
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow