Project Informatique
2A - 2018/2019
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5055138/Ensai_2014.png)
Mickael Lecoq
![](https://media3.giphy.com/media/MuztdWJQ4PR7i/giphy.gif)
C'est le dernier cours ...
Petit bilan
![](https://media1.giphy.com/media/l4HodBpDmoMA5p9bG/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5273292/pasted-from-clipboard.png)
Text
Construire une application
Comment construire une application ?
Travailler en équipe
- Travailler de façon agile
- Équipes auto-organisées
- Focus : définissons un objectif commun
- Engagement : on réalise ce que l'on a décidé en équipe
- Courage : oser échouer pour progresser. On procède par itération (on essaie, on teste, on corrige)
- Respect : on écoute les opinions de tout le monde
- Ouverture : on partage son travail, échange sur nos problèmes
S'aider d'outils
- Google doc
- Dropbox
- Share Latex
- Trello
- Slack
- ....
Faire une conception
- Diagramme de cas d'utilisation -> quelles fonctionnalités
- Diagramme d'activités -> comment se déroulent-elles
- Diagramme de package -> comment est organisé le code
- Diagramme de classes -> quel objets métiers
- Diagramme de base de données -> comment on enregistre les informations
- Diagramme de Gantt -> quelles sont nos principales étapes ?
Séparation of concerns
DATA ACCESS LAYER
BUSINESS LAYER
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5189601/database.png)
PRESENTATION LAYER
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5189611/monitor.png)
Business
Objects
Import/Export de fichiers
DATA ACCESS LAYER
BUSINESS LAYER
PRESENTATION LAYER
Business
Objects
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255278/xml.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255271/csv.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255308/json.png)
DATA ACCESS LAYER
BUSINESS LAYER
PRESENTATION LAYER
Business
Objects
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255616/smartphone-picto-2.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5189611/monitor.png)
CLIENTS
SERVEURS
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255677/picto-serveurs.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255677/picto-serveurs.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255677/picto-serveurs.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255677/picto-serveurs.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255677/picto-serveurs.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255677/picto-serveurs.png)
RESEAU
DATA ACCESS LAYER
BUSINESS LAYER
PRESENTATION LAYER
Business
Objects
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255677/picto-serveurs.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5189611/monitor.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5189611/monitor.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5189611/monitor.png)
@IP : 192.168.1.14:80
@IP : 192.168.1.7:XX
@IP : 192.168.1.12:XX
@IP : 192.168.1.4:XX
Requête
Réponse
- Adresse IP : identifier les interlocuteurs
- Port : canal de communication
Protocole HTTP
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255677/picto-serveurs.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5189611/monitor.png)
GET url (http://....)
<html>
<head/>
<body/>
</html>
API Rest
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5255677/picto-serveurs.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5189611/monitor.png)
GET url (http://....)
{
"name": "value"
}
Comment développer à plusieurs ?
![](https://media0.giphy.com/media/3rgXBrLlRs4ZlpnVDO/giphy.gif)
Comment s'assurer que le code que j'ajoute/modifie ne casse pas le code existant ?
Tester manuellement
- Prend de plus en plus de temps avec l'ajout de fonctionnalité
- Difficulté de jouer tous les scénarios possibles
- On ne joue que les cas droit / notre utilisation est différent de celle des utilisateurs
Long, fastidieux, répétitif, incomplet
Automatiser les tests
![](https://media1.giphy.com/media/11A1ZpmhgeE7kI/giphy.gif)
Automatiser les tests
Ecrire les tests une fois et pouvoir les (re)jouer
Écrire des tests :
- Ciblés
- le test doit couvrir un cas (un seul scénario)
- Indépendants
- on doit pouvoir lancer un test sans avoir pour pré-requis un autre test
- Répétable
- on doit pouvoir lancer le test plusieurs fois à la suite et obtenir le même résultat
Automatiser les tests
Différents scénarios :
- cas normal/idéal
- cas d'erreur (mauvais paramètres)
- cas au limite (valeur très grande ou très petite)
Automatiser les tests
Différents types de tests :
- tests unitaires
- tests d'intégration
- tests de bout en bout
Automatiser les tests
PyTest
# content of test_sample.py
def inc(x):
return x + 1
def test_answer():
assert inc(3) == 5
Automatiser les tests
![](https://media1.giphy.com/media/Ip0EFxfS5TPBC/giphy.gif)
Démo
Gestionnaire de versions
Objectifs
- Mutualiser les développements
- Conserver une trace de chaque changement
- Pouvoir revenir sur une version particulière
Fonctionnement
Dépôt / Repository
Récupération d'une copie locale
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5277455/laptop-2243898_960_720.png)
Fonctionnement
Envoi des modifications (deltas) de fichiers
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5277455/laptop-2243898_960_720.png)
DELTAS => COMMITS
Fonctionnement
Récupération des modifications (deltas) de fichiers
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5277455/laptop-2243898_960_720.png)
DELTAS => COMMITS
Fonctionnement
- Mécanique asynchrone
- Les modifications sont traitées ligne par ligne
- Si 2 développeurs modifient la même ligne => conflit
Fonctionnement
Commit 1
Commit 2
Branches
Fonctionnement
Commit 1
Commit 2
v2.0
Tag
Fonctionnement
Merge
GIT
- Développé par Linus Torvald (1ère version en 2005) pour gérer le noyau Linux
- Facilite la gestion des contributions
- Décentralisé
- Rapidement adopté par les développeurs qui font de l'open source
GIT
Principaux services en ligne
- GitHub (vendu à Microsoft 7.5 milliards de $)
- GitLab
- Bitbucket
GIT
Dépôt / Repository
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5277455/laptop-2243898_960_720.png)
- Récupère:
- tous les commits
- tous les tags
- toutes les branches
On fait un clone du dépot
GIT
Dépôt distant/ Remote Repository
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5277455/laptop-2243898_960_720.png)
Dépôt local/ local repository
GIT
Dépôt distant/ Remote Repository
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5277455/laptop-2243898_960_720.png)
Dépôt local/ local repository
git pull
GIT
Dépôt distant/ Remote Repository
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5277455/laptop-2243898_960_720.png)
Dépôt local/ local repository
git push
GIT
Modification des fichiers
Unstaged files
git add
Staged files
Staging AREA
Zone de transit
git commit
GIT
- Git init - initialiser un dépôt vide
- Git fetch - consulter le dépôt distant
- Git status - avoir des informations sur l'état de votre branche
- Git log - voir les derniers commits
GIT
Conventions sur les branches :
- develop - en cours de développement
- master - actuellement en prod
- feature branch - correspond à une fonctionnalité
![](https://s3.amazonaws.com/media-p.slid.es/uploads/492582/images/5277701/pasted-from-clipboard.png)
Démo !!!
![](https://media1.giphy.com/media/dZIhPKzzAR1sY/giphy.gif)
Questions
![](https://media2.giphy.com/media/s0B85Vw84NwWY/giphy.gif)
ENSAI - Projet Info - Cours 4
By Mickael Lecoq
ENSAI - Projet Info - Cours 4
- 1,348