L’une des préoccupations fondamentales de l’Ingénieur c’est de s’assurer de la qualité du produit que son équipe délivre. Et ceci passe nécessairement par le processus de la mise en œuvre. Mettre en place des bonnes bases pour un projet est très indispensable à son aboutissement.
Des bases conventionnelles
Dans nombre de situations, on est pressé par l’obtention du résultat que le processus de réalisation ne préoccupe guerre les acteurs. En informatique, ceci est d’autant plus vrai que j’en fais régulièrement un sujet de discussion avec mes étudiants durant mes cours de Génie Logiciel.
A plusieurs reprises, en entreprise, j’ai beaucoup plus considéré le cadre de travail et la mise en place d’un environnement de développement conventionnel que l’obtention de la solution. Aussi finit-on par remarquer que la conséquence immédiate est le rendement satisfaisant découlant des efforts réalisés en amont.
Durant mes premiers pas avec le framework CakePHP, j’ai rencontré le terme “Convention above configuration“. Bien avant ça, je rencontrais beaucoup de difficultés à fournir une solution efficace: le générateur automatique de code, la relation entre les classes générées, le bon formatage des vues, … Mais après, prenant en compte les conventions de bases du framework, la vie est devenue plus facile pour moi.
Les tendances aujourd’hui, en terme de développement logiciel, orientent le technicien vers une approche agile. Ceci exige une adaptation rapide aux changements sur le projet. Plus spécifiquement, pour que cette adaptation soit douce, sans peine, il faut mettre en œuvre des pré-requis parmi lesquels l’intégration et le déploiement continus.
Intégration et déploiement continus : prérequis
Le sujet est passionnant : savoir qu’il suffit d’une commande pour envoyer son code source (brut) sur un serveur, pour déclencher tout un ensemble de tâches qui aboutissent au déploiement de son projet sur le serveur (test, production, …), c’est intéressant.
Mais ce que ça demande en amont, c’est (pour ne citer que ceux-ci) :
- la configuration de l’environnement de développement
- la configuration du projet
- l’écriture de tests
- la mise en œuvre des conventions usuelles (migrations, nomenclature des tables, classes et fichiers, …)
- la mise en place des configurations d’intégration et déploiement continus
- etc…
Pour des équipes efficaces
Le développement logiciel se fait rarement en solo aujourd’hui. Les conventions et bonnes pratiques sont délicates pour que des équipes fonctionnent et sortent le meilleur d’eux-mêmes, au risque de voir naître des hostilités au sein de l’équipe.
Pour des équipes de développement, quelques recommandations :
- Définir une convention pour le versionnage du code : ceci est très délicat pour épargner les peine d’intégration des contributions de chaque membre.
- Utiliser les migrations si c’est possible : les migrations dans plusieurs environnements web se chargent de créer les tables utilisées dans l’application, peu importe le système de base de données utilisé.
- Écrire les tests pour une bonne partie du code : pendant qu’ils s’assurent du bon fonctionnement des fonctionnalités développées, ils sont un socle pour rassurer l’autre développeur de la bonne foi du travail que vous avez réalisé.
- Configurer l’intégration et le déploiement continus : se basant sur les tests, vous définissez un certain nombre de règles pour reproduire votre environnement d’exécution, faire les tests et s’assurer du bon fonctionnement de votre projet dans un environnement autre que celui de développement. S’en suit l’étape de déploiement durant laquelle, sur la base de configurations établies, le code peut être déployé automatiquement.
- Error reporting : Cette partie concerne la mise en exécution et les éventuels bugs et exceptions qui peuvent exister et que l’utilisateur ne pourra pas efficacement remonter. Un outils comme Sentry vous fournit la trace du bug/exception et peut être intégré à des outils comme Github et Gitlab pour un meilleur suivi.
Je recommande vivement à tous de prendre un temps pour poser les bonnes bases afin de rendre doux le travail de développement logiciel.