Projet

Général

Profil

DeveloppementBonnesPratiques » Historique » Version 15

Daniel Dehennin, 22/09/2016 15:25

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