Projet

Général

Profil

DeveloppementBonnesPratiques » Historique » Version 9

Lionel Morin, 22/09/2016 11:30

1 7 Lionel Morin
h1. EOLE - Étude prospective pour les futurs développements
2 7 Lionel Morin
3 7 Lionel Morin
h2. Objectif du document
4 7 Lionel Morin
5 7 Lionel Morin
   * Établir un état des lieux des applicatifs et des méthodologies existants dans l'environnement EOLE actuel
6 7 Lionel Morin
   * Définir un référentiel commun pour réaliser un comparatif « objectif » de solutions techniques pour les futurs développements
7 7 Lionel Morin
   * Énumérer les bonnes pratiques méthodologiques et prioriser leur mise en place afin d'améliorer les processus de développement, indépendamment des solutions techniques sélectionnées
8 7 Lionel Morin
9 7 Lionel Morin
h2. État des lieux
10 7 Lionel Morin
11 7 Lionel Morin
h3. Applicatif
12 7 Lionel Morin
13 7 Lionel Morin
> EAD
14 7 Lionel Morin
> * Gestion de profil / autorisation d'utilisateur (bdd)
15 7 Lionel Morin
> * Gestion de ressources (imprimantes, partage, utilisateurs, ACL, ...)
16 7 Lionel Morin
> * Exécution de script sur le serveur
17 7 Lionel Morin
> * Intégration d'applications distantes
18 7 Lionel Morin
> * Observation de poste à distance
19 7 Lionel Morin
> * Configuration du serveur (vnc, proxy, règles optionnelles d'ERA, cron, ...)
20 7 Lionel Morin
> * Accès SSH à distance
21 7 Lionel Morin
22 7 Lionel Morin
> Genconfig
23 7 Lionel Morin
> * Gestion de la configuration EOLE
24 7 Lionel Morin
> * Génération automatique de formulaire à partir d'un fichier de description en XML
25 7 Lionel Morin
26 7 Lionel Morin
> Zéphir
27 7 Lionel Morin
> * Fonctionnalités actuelles
28 7 Lionel Morin
> ** Gestion d'une base de serveurs/modules EOLE
29 7 Lionel Morin
> ** Authentification/autorisation avec contrôle des ressources par profil
30 7 Lionel Morin
> ** Gestion de statistiques système / logs / reporting d'état (mail/appli)
31 7 Lionel Morin
> ** Gestion de configurations /variantes de configuration (saisie/déploiement)
32 7 Lionel Morin
> ** API de récupération des informations (utilisé par ARV/ERA/scripts utilisateur...)
33 7 Lionel Morin
> ** Enrôlement des serveurs
34 7 Lionel Morin
> ** Exécution d'actions et transfert de fichiers à distance (sécurisé)
35 7 Lionel Morin
> * Évolutions bloquées
36 7 Lionel Morin
> ** Plusieurs serveurs Zéphir en 'cascade' (hiérarchie de backends. par ex: national/académique/établissement)
37 7 Lionel Morin
> ** Utilisation de plusieurs processeurs / backend séparés en plusieurs processus (pb lié à twisted/python)
38 7 Lionel Morin
> ** Interface plus dynamique (carte avec Géolocalisation des serveurs, ...)
39 7 Lionel Morin
    
40 7 Lionel Morin
> EoleSSO
41 7 Lionel Morin
> * Support de protocoles spécifiques (CAS, SAML, OpenID, ...)
42 7 Lionel Morin
> * Gestion session
43 7 Lionel Morin
> * Envoi d'attributs utilisateur avec filtre en fonction de la destination
44 7 Lionel Morin
45 7 Lionel Morin
> ARV
46 7 Lionel Morin
> * Gestion de ressources (serveurs, tunnels, bdd, ...)
47 7 Lionel Morin
> * Envoi d'archive de configuration à Zéphir
48 7 Lionel Morin
49 7 Lionel Morin
h3. Domaines techniques et fonctionnels récurrents
50 7 Lionel Morin
51 7 Lionel Morin
La liste ci dessous doit servir de référentiel afin d'effectuer le comparatif des solutions proposées dans la section suivante.
52 7 Lionel Morin
53 7 Lionel Morin
   * Opérations de gestion du cycle de vie d'un compte utilisateur système ou LDAP (CRUD, changement de mot de passe...)
54 7 Lionel Morin
   * Interaction avec le système de fichier
55 7 Lionel Morin
   * Import/export de données au format CSV, XML
56 7 Lionel Morin
   * Stockage de données et recherche/filtrage de ces données
57 7 Lionel Morin
   * Exécution de commandes systèmes et gestion des entrées/sorties
58 7 Lionel Morin
   * Rapports sur l'état du système hôte
59 7 Lionel Morin
   * Envoi de courriel
60 7 Lionel Morin
   * Authentification CAS / LDAP / Système
61 7 Lionel Morin
   * Gestion des droits d'accès en fonction du profil utilisateur
62 7 Lionel Morin
   
63 7 Lionel Morin
h3. Méthodologique
64 7 Lionel Morin
65 7 Lionel Morin
> Ce qui existe
66 7 Lionel Morin
> * Séparation du code et de l’empaquetage
67 7 Lionel Morin
> * Versionning des applications avec une branche par distribution EOLE
68 7 Lionel Morin
> * Coding standard (syntaxe python)    
69 7 Lionel Morin
    
70 7 Lionel Morin
> Éléments bloquants rencontrés
71 7 Lionel Morin
> * Manque de référentiel technique (cadre à respecter)
72 7 Lionel Morin
> * Absence de revue de code
73 7 Lionel Morin
> * Pas de refactoring de code
74 7 Lionel Morin
> * Manque de tests unitaires / fonctionnels
75 7 Lionel Morin
> * Exécution automatique des tests
76 7 Lionel Morin
> * Pas de documentation technique
77 7 Lionel Morin
> * Recherche dans l’historique du code très complexe, impossible d’utiliser **git bisect**
78 7 Lionel Morin
   
79 7 Lionel Morin
h3. Exigences particulières
80 7 Lionel Morin
81 7 Lionel Morin
   * Réutilisabilité du code (composant, éléments d'application, ...)
82 7 Lionel Morin
   * Facilités de création des formulaires
83 7 Lionel Morin
   * Automatisation de la validation des entrées
84 7 Lionel Morin
   * Séparation / indépendance des différents services
85 7 Lionel Morin
   * Appel à distance (gateway)
86 7 Lionel Morin
   
87 7 Lionel Morin
h2. Étude comparative des langages/pile web "backend"
88 7 Lionel Morin
89 7 Lionel Morin
La définition des pours et contres de chaque proposition doit s'effectuer en prenant compte:
90 7 Lionel Morin
91 7 Lionel Morin
   * De l'état actuel de la base de code des applicatifs
92 7 Lionel Morin
   * Des compétences disponibles dans l'équipe
93 7 Lionel Morin
   * De l'écosystème technique EOLE existant
94 7 Lionel Morin
   
95 7 Lionel Morin
h3. NodeJS / Express
96 7 Lionel Morin
97 7 Lionel Morin
https://nodejs.org/en/
98 7 Lionel Morin
http://expressjs.com/
99 7 Lionel Morin
100 7 Lionel Morin
> Pros
101 7 Lionel Morin
> * Communauté très active, couverture fonctionnelle très importante
102 7 Lionel Morin
> * Très performant pour les usages courant du web
103 7 Lionel Morin
> * Ubiquité du langage (backend, frontend, desktop, mobile)
104 7 Lionel Morin
> * Version LTS de 5 ans (3 ans + 2 ans maintenance)
105 7 Lionel Morin
> * Outillage avancé
106 7 Lionel Morin
107 7 Lionel Morin
> Cons
108 7 Lionel Morin
> * Technologie "jeune" avec rythme d'évolution très rapide
109 7 Lionel Morin
> * Hyper-modularisation (risque de multiplication des dépendances)
110 7 Lionel Morin
> * Stabilité erratique des modules communautaires
111 7 Lionel Morin
> * Fonctionnalités du langage restreintes
112 7 Lionel Morin
> * Gestion de l'asynchrone parfois complexe ("callback hell", Promise ou Callbacks ?)
113 7 Lionel Morin
> * Nécessite des formations, une phase d'amorçage et des intervenants externes pour un démarrage dans de bonnes conditions
114 7 Lionel Morin
115 7 Lionel Morin
h3. Flask (Python)
116 7 Lionel Morin
117 7 Lionel Morin
Flask est un micro-framework de développement web pour Python. 
118 7 Lionel Morin
http://flask.pocoo.org/
119 7 Lionel Morin
120 7 Lionel Morin
> Pros
121 7 Lionel Morin
> * Framework léger et robuste, facile à appréhender
122 7 Lionel Morin
> * API minimaliste et stable
123 7 Lionel Morin
> * Nombreuses extensions référencées et documentées
124 7 Lionel Morin
> * Client spécifique destiné aux tests
125 7 Lionel Morin
> * Base de code existante en python (lib EOLE et eole-flask)
126 7 Lionel Morin
> * Librairies facilitant les interactions avec le système (couches métier EOLE)
127 7 Lionel Morin
> * Langage Python déjà utilisé au quotidien par l'équipe
128 7 Lionel Morin
129 7 Lionel Morin
> Cons
130 7 Lionel Morin
> * Envisager le passage à Python 3
131 7 Lionel Morin
> * Pas de code commun entre backend et frontend
132 7 Lionel Morin
133 7 Lionel Morin
h3. Perl / Dancer2
134 7 Lionel Morin
135 7 Lionel Morin
Perl a bien évolué depuis les années 90 où il était **le** langage du Web (http://techbeacon.com/perl-not-dead-it-was-early-web-novices-gave-it-bad-name et https://dzone.com/articles/perl-language-community-and-the-future)
136 7 Lionel Morin
137 7 Lionel Morin
> Pros
138 7 Lionel Morin
> * Langage mature et évoluant (une nouvelle release par an)
139 7 Lionel Morin
> * Très grande culture du test
140 7 Lionel Morin
> * Très grande culture de la documentation (POD)
141 8 Lionel Morin
> * Coding standard modernes ("Modern Perl":http://onyxneon.com/books/modern_perl/)
142 7 Lionel Morin
> * Mode d’opération simple en serveur d’application (type FCGI)
143 7 Lionel Morin
> * Écosystème gigantesque (MetaCPAN.org) avec un soucis de gestion des compatibilités/changements
144 8 Lionel Morin
> * Utilisé sur des grosses productions (Booking.com, IMDb, DuckDuckGo, Slashdot, Ticketmaster https://en.wikipedia.org/wiki/Perl_language#Applications)
145 7 Lionel Morin
146 7 Lionel Morin
> Cons
147 7 Lionel Morin
> * Nécessite des formations, une phase d’amorçage et des intervenants externes pour un démarrage dans de bonnes conditions
148 7 Lionel Morin
149 7 Lionel Morin
h3. PHP / ??
150 1 Lionel Morin
151 8 Lionel Morin
http://www.php.net/
152 1 Lionel Morin
153 8 Lionel Morin
> Pros
154 8 Lionel Morin
> * Mode d'opération/déploiement simple (modèle CGI, pas de processus avec un long temps de vie, ou FCGI avec php-fpm)
155 8 Lionel Morin
> * Gestion de la pile HTTP déportée dans un serveur hôte (Nginx, Apache2, lighttpd...)
156 8 Lionel Morin
> * Fonctionnalités du langage avancées (namespace, classes, interfaces, mixins...)
157 1 Lionel Morin
158 8 Lionel Morin
> Cons
159 8 Lionel Morin
> * Relativement moins performant comparativement aux autres solutions (moins vrai avec l'arrivée de PHP 7)
160 8 Lionel Morin
> * API native surchargée (plusieurs manières de faire la même chose)
161 8 Lionel Morin
> * Généralisation de l'usage de NodeJS dans les pipelines d'intégration des ressources statiques dans les frameworks
162 8 Lionel Morin
> * Gestion synchrone des entrées/sorties
163 8 Lionel Morin
> * Principalement orienté web, moins bonne couverture fonctionnelle que les autres solutions en dehors de ce cas d'usage
164 8 Lionel Morin
> * Quelques compétences en interne mais nécessite tout de même des formations et de l'accompagnement pour le lancement
165 1 Lionel Morin
166 7 Lionel Morin
h3. NodeJS/Meteor
167 1 Lionel Morin
168 1 Lionel Morin
h2. Étude comparative des piles web "frontend"
169 1 Lionel Morin
170 1 Lionel Morin
h3. Angular 1
171 1 Lionel Morin
172 8 Lionel Morin
https://angularjs.org/
173 1 Lionel Morin
174 8 Lionel Morin
> Pros
175 8 Lionel Morin
> * Double data-binding (rapidité de développement)
176 8 Lionel Morin
> * Multiples modules communautaires (routage, gestion des formulaires, etc)
177 8 Lionel Morin
> * Formation déjà effectuée et compétences internes
178 7 Lionel Morin
179 8 Lionel Morin
> Cons
180 8 Lionel Morin
> * Version 2 d'Angular en phase de release (temps de support restant ?)
181 8 Lionel Morin
> * Framework non dirigiste (risque de code spaghetti), nécessite une bonne discipline
182 7 Lionel Morin
183 7 Lionel Morin
h3. Angular 2
184 7 Lionel Morin
185 8 Lionel Morin
https://angular.io
186 7 Lionel Morin
187 8 Lionel Morin
> Pros
188 7 Lionel Morin
189 8 Lionel Morin
> Cons
190 7 Lionel Morin
191 7 Lionel Morin
192 7 Lionel Morin
h3. Mithril
193 7 Lionel Morin
194 8 Lionel Morin
http://mithril.js.org/
195 7 Lionel Morin
196 8 Lionel Morin
> Pros
197 8 Lionel Morin
> * Framework léger et facile à appréhender
198 8 Lionel Morin
> * utilise uniquement javascript (facilité de debuggage/mise en place de tests)
199 8 Lionel Morin
> * Wiki communautaire (projets/outils/bonnes partiques) \url{https://github.com/lhorie/mithril.js/wiki}
200 8 Lionel Morin
> * rendu rapide comparé aux librairies angular/react...
201 8 Lionel Morin
> * Solution clé en main (gestion Ajax, St Marc et canard WC)
202 8 Lionel Morin
> * Bonne documentation
203 7 Lionel Morin
204 8 Lionel Morin
> Cons
205 8 Lionel Morin
> * Nécessite une certaine connaissance de javacript (pas de templates html, mais des libs existent pour contourner)
206 8 Lionel Morin
> * Framework non dirigiste (plusieurs approches dans l'organisation des modèles/vues/contrôleur, pas d'outils de tests intégrés)
207 8 Lionel Morin
> * prévu seulement pour le côté client
208 7 Lionel Morin
209 7 Lionel Morin
h3. Riot
210 7 Lionel Morin
211 7 Lionel Morin
Micro-librairie de construction d'interface web à la manière de React
212 8 Lionel Morin
http://riotjs.com/
213 7 Lionel Morin
214 8 Lionel Morin
> Pros
215 8 Lionel Morin
> * Utilisation de tags HTML personnalisés
216 8 Lionel Morin
> * Syntaxe simple et puissante
217 8 Lionel Morin
> * DOM Virtuel
218 8 Lionel Morin
> * Faible poids par rapport à React ou Angular
219 7 Lionel Morin
220 8 Lionel Morin
> Cons
221 8 Lionel Morin
> * Librairie ne gérant pas les requêtes XHR
222 8 Lionel Morin
> * Nécessité de compiler le code
223 7 Lionel Morin
224 7 Lionel Morin
h3. WebComponents (Polymer / X-Tag)
225 7 Lionel Morin
226 8 Lionel Morin
https://github.com/x-tag/core
227 8 Lionel Morin
https://www.polymer-project.org/1.0/
228 7 Lionel Morin
229 8 Lionel Morin
> Pros
230 8 Lionel Morin
> * Définition de tags HTML personnalisés
231 8 Lionel Morin
> * Construction de composants d’interfaces par composition
232 8 Lionel Morin
> * Composants utilisables indépendamment des frameworks
233 8 Lionel Morin
> * Bibliothèque de composants prêts à l'emploi (https://elements.polymer-project.org)
234 7 Lionel Morin
235 8 Lionel Morin
> Cons
236 8 Lionel Morin
> * Framework non dirigiste
237 8 Lionel Morin
> * pas d'automatisation des appels Ajax (voir "librairie fetch":https://github.com/github/fetch)
238 7 Lionel Morin
239 7 Lionel Morin
h2. Méthodologie de développement
240 7 Lionel Morin
241 7 Lionel Morin
h3. Style de code commun
242 7 Lionel Morin
243 9 Lionel Morin
* Établir un standard de code par langage de programmation
244 9 Lionel Morin
* Éditor config : définir la configuration des éditeurs de texte, une configuration pour tous les éditeurs
245 1 Lionel Morin
246 9 Lionel Morin
Priorisation :
247 9 Lionel Morin
248 9 Lionel Morin
# Écrire le document style de code
249 9 Lionel Morin
# Automatiser la vérification (côté développeur / côté serveur)
250 9 Lionel Morin
251 1 Lionel Morin
h3. Développement piloté par les tests
252 1 Lionel Morin
253 9 Lionel Morin
Le "Test Driven Development":https://fr.wikipedia.org/wiki/Test_Driven_Development préconise d’écrire les tests unitaires avant d’écrire le code source :
254 7 Lionel Morin
255 9 Lionel Morin
# Écrire un premier test
256 9 Lionel Morin
# Vérifier qu'il échoue (car le code qu'il teste n'existe pas), afin de vérifier que le test est valide
257 9 Lionel Morin
# Écrire juste le code suffisant pour passer le test
258 9 Lionel Morin
# Vérifier que le test passe
259 9 Lionel Morin
# Puis réusiner le code, c'est-à-dire l'améliorer tout en gardant les mêmes fonctionnalités
260 7 Lionel Morin
261 9 Lionel Morin
Priorisation :
262 1 Lionel Morin
263 9 Lionel Morin
# Définir les frameworks de test et la couverture de test
264 9 Lionel Morin
# Automatisation côté développeur
265 9 Lionel Morin
# Automatisation côté serveur
266 9 Lionel Morin
267 1 Lionel Morin
h3. Développement piloté par les fonctionnalités
268 1 Lionel Morin
269 7 Lionel Morin
L’utilisation de la méthode agile SCRUM permet :
270 7 Lionel Morin
271 9 Lionel Morin
* de se focaliser sur les fonctionnalités demandées par l’utilisateur final
272 9 Lionel Morin
* d’avoir des retours rapides de l’utilisateur sur les fonctionnalités implémentées
273 1 Lionel Morin
274 1 Lionel Morin
Priorisation:
275 1 Lionel Morin
276 9 Lionel Morin
# Réviser l'écriture des scénarios (une fonctionnalité = un scénario)
277 9 Lionel Morin
278 1 Lionel Morin
h3. Documentation d’API automatique
279 1 Lionel Morin
280 9 Lionel Morin
* Génération de la documentation d'API depuis le code
281 9 Lionel Morin
** API Métier (librairies)
282 9 Lionel Morin
** API REST
283 9 Lionel Morin
** API Frontend (composants / services)
284 9 Lionel Morin
* Cette génération doit être faite de façon automatique dans le processus de livraison/compilation
285 9 Lionel Morin
* Cette documentation doit être mise à disposition de la communauté (paquet *-doc* et site en ligne)
286 7 Lionel Morin
287 7 Lionel Morin
Priorisation:
288 7 Lionel Morin
289 9 Lionel Morin
# Définir les frameworks de documentation
290 9 Lionel Morin
# Automatiser la génération (côté développeur)
291 9 Lionel Morin
# Automatiser la génération (coté serveur, phase release + diffusion)
292 9 Lionel Morin
293 7 Lionel Morin
h3. Modèle de développement avec Git
294 7 Lionel Morin
295 9 Lionel Morin
Utiliser le modèle de développement  "Gitflow":http://nvie.com/posts/a-successful-git-branching-model/.
296 7 Lionel Morin
297 9 Lionel Morin
La "version AVH":https://github.com/petervanderdoes/gitflow-avh du logiciel **gitflow** est celle fournie par défaut sur Debian et Ubuntu, elle est maintenue contrairement à la version originelle.
298 7 Lionel Morin
299 7 Lionel Morin
En résumé:
300 7 Lionel Morin
301 9 Lionel Morin
* Chaque fonctionnalité est développée dans une branche dédiée (*feature/foo-bar*)
302 9 Lionel Morin
* Chaque fonctionnalité est intégrée à la branche d’intégration :
303 9 Lionel Morin
** Si les tests passent
304 9 Lionel Morin
** Après une relecture/validation du code (Gerrit)
305 9 Lionel Morin
* La préparation d’une livraison se fait sur une branche dédiée issue de la branche d’intégration (*release/1.2*)
306 9 Lionel Morin
* La branche *release/*, une fois prête, est fusionnée à la branche de production et un tag de release est créé
307 1 Lionel Morin
308 1 Lionel Morin
Priorisation:
309 1 Lionel Morin
310 9 Lionel Morin
# Mise en place de git flow (formation ?, document référent, définition de la configuration par défaut)
311 9 Lionel Morin
312 1 Lionel Morin
h3. Qualité du code
313 1 Lionel Morin
314 1 Lionel Morin
Des processus automatiques doivent être mis en place afin d’assurer une bonne qualité du code produit :
315 1 Lionel Morin
316 9 Lionel Morin
* Le code doit correspondre au coding standard du projet (PyLint / Perl::Critic / JSLint)
317 9 Lionel Morin
* Le code doit être couvert par des tests unitaires
318 9 Lionel Morin
* L'API doit être documentée
319 9 Lionel Morin
320 1 Lionel Morin
h3. Intégration continue
321 1 Lionel Morin
322 9 Lionel Morin
   * Exécution automatique des tests fonctionnels et unitaires (jenkins)
323 1 Lionel Morin
324 1 Lionel Morin
h3. Déploiement d'environnements de Dev (Vagrant?)