La progression constante du développement logiciel a considérablement transformé notre interaction quotidienne avec la technologie. Dans le développement des applications et des systèmes complexes, ce processus est essentiel pour façonner nos solutions technologiques.
I) Qu’est-ce que le SDLC ?
Le processus de développement logiciel implique plusieurs phases (conception, programmation, tests, maintenance…), visant à créer des produits logiciels de qualité supérieure. Cet ensemble d’activités forme ce que l’on appelle le cycle de vie du développement logiciel (SDLC ou Software Development Life Cycle an anglais).
Le cycle de vie du développement logiciel représente l’ensemble du processus qu’un projet informatique suit, depuis sa conception initiale jusqu’à sa réalisation et sa maintenance.
Le SDLC établit une série d’étapes essentielles pour garantir la fiabilité, la qualité et l’adaptation des logiciels aux besoins des utilisateurs. Cette approche a évolué au fil du temps avec l’arrivée de nouvelles méthodologies de gestion de projets IT telles que l’approche agile, ITIL, DevOps ou DevSecOps. L’objectif est de fournir des directives claires pour assurer le succès du processus de développement logiciel.
Que signifie ITIL ?
L’ITIL (Information Technology Infrastructure Library ou Bibliothèque pour l’infrastructure des technologies de l’information en français) est un ensemble de meilleures pratiques pour gérer les services informatiques. Il fournit des directives détaillées pour planifier, mettre en œuvre, soutenir et améliorer les services IT, visant à aligner l’informatique sur les besoins de l’entreprise, améliorer la qualité des services, réduire les coûts et encourager l’amélioration continue.
Découvrons ci-après les différentes étapes du SDLC.
Téléchargez notre nouveau livre blanc sur la création d’une Usine Logicielle DevSecOps
II) Quelles sont les différentes étapes du SDLc ?
Le processus de développement logiciel va bien au-delà de la simple écriture de code. Avant la livraison d’un logiciel, il traverse plusieurs étapes distinctes, parmi lesquelles la programmation ne constitue qu’une partie. Ces phases englobent la collecte des exigences, l’analyse, la conception, le développement, les tests, le déploiement et la maintenance.
a) L’étape de planification des besoins et de collecte des exigences
Cette première étape vise à déterminer la portée du projet et à définir ses exigences pour une analyse approfondie.
Avant d’amorcer tout projet de développement logiciel, une compréhension claire des objectifs à atteindre s’avère cruciale. Souvent, les visions du produit divergent entre les équipes de développement et les clients, mais elles s’affinent au fil des tests et des projets logiciel.
Ainsi, les chefs de projets rassemblent les besoins des diverses parties prenantes (également appelées les « stackholders » en anglais). Cela permettra notamment d’affiner la planification des prochaines étapes du SDLC en fonction des exigences.
Après la phase initiale, le client ajuste continuellement les démarches pour harmoniser les attentes avec l’équipe de développement.
Postérieurement à l’étape de collecte des exigences, l’équipe se charge de déterminer la meilleure approche pour résoudre le problème identifié. Ils doivent estimer les efforts requis pour le projet, incluant coûts et calendrier, sans plonger excessivement dans les détails techniques. Cette évaluation de faisabilité repose sur des facteurs tels que le budget et le calendrier de livraison anticipé. En méthodologie agile, c’est à ce stade que l’équipe élabore le Product Backlog, comprenant toutes les fonctionnalités à mettre en œuvre.
Une fois que l’équipe a obtenu ces éléments, elle identifie les prérequis essentiels pour le projet en se basant sur le SRS (Software Requirement Specification) s’il a été préalablement élaboré.
Voici quelques exemples de prérequis : le budget, le timing, la qualité, les aspects juridiques ou encore techniques.
Les bonnes pratiques
- Utiliser la méthodologie Agile ;
- Avoir recours aux pratiques DevOps ou DevSecOps ;
- Se servir d’outils comme Confluence pour créer des documents de recherche sur les produits et échanger des fichiers de conception.
- Penser à Jira ou encore Trello pour la gestion de la planification des tâches.
b) L’étape de conception
Lorsqu’un projet passe avec succès par la première phase du cycle de vie du développement logiciel (SDLC), l’équipe de développement peut avancer vers la phase de conception. Cette étape est cruciale pour déterminer comment le logiciel sera construit et va permettre d’élaborer un modèle sur la base des exigences soulevées lors de la phase précédente. Ce modèle détaille le système à mettre en place, ainsi que d’autres aspects tels que l’infrastructure, l’architecture du système et l’interface utilisateur. Une planification minutieuse est essentielle pour couvrir tous les aspects fonctionnels et non fonctionnels. La construction sans un plan adéquat pourrait entraîner des révisions coûteuses.
La conception d’un produit logiciel présente souvent deux livrables clés pour obtenir une vue complète de son architecture :
Le HLD (High-Level Design) offre une vue globale en décrivant les services ou microservices, leurs objectifs et leurs interactions. Cette étape clé dans le processus de développement est cruciale pour la conception globale du logiciel. En ce qui concerne les produits avec des bases de données, le HLD spécifie la technologie utilisée, les tables, les principaux champs et est souvent accompagné d’un schéma d’architecture. Cette approche méthodique garantit une compréhension approfondie et un alignement précis avec les objectifs du projet, facilitant ainsi le passage à la phase suivante du développement logiciel.
Le LLD (Low-Level Design) est plus détaillé, abordant les aspects logiques des services, leurs entrées et sorties avec leurs formats et syntaxes. Pour le code, il inclut les entrées des fonctions et des exemples de comportement attendu. Il est également possible de générer automatiquement la documentation du code via des outils spécifiques. En ce qui concerne les bases de données, le LLD précise les types de données, les tailles maximales, et peut inclure des visuels pour l’interface utilisateur, s’ils existent.
c) L’étape de développement
Les équipes de développement créent des logiciels prêts à être déployés, répondant aux exigences et aux retours. Cette phase du SDLC se concentre sur la production de code dans le(s) langage(s) spécifié(s) par les documents de conception haute et basse. Comme on peut s’y attendre, cette phase représente la plus longue du SDLC. Cependant, sa durée est réduite lorsque les phases de planification et de conception du produit sont menées avec précision, détail et exactitude. La création du logiciel est un processus quelque peu artistique qui va au-delà de l’écriture de code. Le code s’exécute sur une infrastructure impliquant généralement des serveurs, des réseaux ou une plateforme d’hébergement gérée (comme Azure App Service ou AWS Elastic Beanstalk).
Les bonnes pratiques
- Utiliser les pipelines CI/CD ;
- Se servir d’outils comme Bitbucket (service de gestion de développement logiciel et hébergement web) ;
- Avoir recours au DevOps et DevSecOps : ces pratiques éliminent la séparation habituelle entre développeurs et ingénieurs en infrastructure. Ces professionnels, intégrés à l’équipe de développement, prennent en charge divers aspects tels que les serveurs, réseaux, le pipeline CI/CD ou encore la sécurité.
d) L’étape de tests
Avant la livraison au client, il est impératif que l’équipe assure que le logiciel réponde aux exigences, respecte les délais, propose une expérience conviviale, et soit adaptable à des pics d’utilisation. La mise en place d’un cycle de vie de développement sécurisé, accompagné de tests de sécurité, est cruciale pour prévenir des coûts accrus en cas de problèmes détectés tardivement.
Voici quelques exemples de tests importants à réaliser :
- tests unitaires ;
- tests d’API ;
- tests de sécurité ;
- tests de performance
- tests d’intégration ;
- …
e) L’étape de déploiement
Le déploiement implique l’intégration du code produit dans divers environnements, garantissant que son comportement correspond aux attentes décrites dans le HLD et le LLD. Cette phase permet l’usage du déploiement continu dans le cadre d’un modèle DevOps – DevSecOps.
À la fin de cette phase, une fois le code transcrit, testé et mergé, le produit est mis à disposition des clients potentiels, prêt pour une utilisation totale. Une fois que le logiciel a été validé pour son usage prévu, il est remis au client. Selon la gestion du projet, cela peut être une étape finale ou un processus continu pendant le développement. Le logiciel est alors configuré dans un environnement réel, où le client réalise des tests d’acceptation par l’utilisateur (UAT) avant d’approuver son utilisation en environnement de production.
Les bonnes pratiques
- Les pipelines CI/CD pour faciliter le déploiement ;
- Utiliser des services d’hébergement dans le cloud (Google Cloud Platform, Amazon AWS, Microsoft Azure…).
f) L’étape de maintenance
La fiabilité demeure primordiale pour maintenir la qualité d’un produit ou d’un service. À ce stade, l’équipe met en place des outils tels que des analyses de sécurité en temps réel pour repérer toute anomalie éventuelle.
L’observabilité permet aux équipes de fournir un support efficace aux utilisateurs, les aidant à exploiter pleinement le produit.
Ces équipes gèrent les mises à jour pour intégrer de nouvelles fonctionnalités, résoudre des bogues, et traiter les failles de sécurité détectées via les retours utilisateurs ou la surveillance.
Bien que les gens perçoivent souvent le déploiement comme l’ultime étape de la livraison d’un logiciel, il marque en réalité le début de son utilité opérationnelle, nécessitant des révisions pour corriger des bugs ou intégrer de nouvelles fonctionnalités. Le fournisseur de logiciel propose généralement au client un accord de niveau de service (SLA) définissant la procédure en cas de problème. Des révisions majeures peuvent nécessiter un nouveau cycle de développement logiciel complet, soulignant l’importance de cette phase pour la gestion proactive de la performance et l’évolution continue du logiciel.
Les bonnes pratiques
- Utiliser des outils comme Jira Service Management pour gérer les demandes de support client.
Et la sécurité dans tout ça ?
La sécurité des applications a pris de l’importance récemment en raison des cyberattaques. Souvent confiée à des équipes spécialisées, elle est testée après la publication initiale, ce qui peut laisser des vulnérabilités non détectées en production pendant un an. Les tests et les corrections peuvent également prendre beaucoup de temps, entraînant des tensions entre les équipes de développement et de sécurité. Pour éviter cela, intégrer la sécurité à chaque phase du processus de développement est préconisé, un concept connu sous le nom de « Shift Left« , afin de créer un cycle de développement sécurisé (SSDLC).
Le SSDLC (Secure Software Development Life Cycle ou Cycle de Développement Logiciel Sécurisé en français) est une amélioration du SDLC en y intégrant tous les aspects importants de sécurité (en utilisant notamment le Threat Modeling ou encore la production de Secure Coding Checklist). Nous aborderons plus en détails le SSDLC dans un prochain billet.
Envie d’en découvrir plus sur le DevSecOps ? Téléchargez notre livre blanc !
III) Les différents modèles de sdlc
On distingue souvent deux méthodologies : d’une part, la méthodologie agile, caractérisée par sa flexibilité et son adaptation continue aux besoins changeants des utilisateurs ; d’autre part, la méthodologie du “cycle en V” (également appelée méthodologie waterfall), qui suit une approche linéaire avec des étapes de validation à chaque phase de développement. Ces deux approches présentent des avantages distincts, chacune adaptée à des contextes spécifiques. La méthodologie agile ajuste continuellement les logiciels pour mieux répondre aux évolutions des clients, tandis que la méthodologie du « cycle en V » offre une structure rigide, idéale pour des projets où les besoins sont bien définis dès le départ.
a) La méthodologie du cycle en V (ou en cascade)
De nombreuses organisations travaillent encore en “V”, avec une étape de validation à chaque phase de développement. Cette méthode est linéaire et les modifications sont difficiles à mettre en place. Moins adaptée en logiciel, le produit livré peut souvent devenir obsolète par rapport aux besoins initiaux.
b) La méthodologie Agile de type Scrum
L’adoption de méthodologies agiles, comme le Scrum, confère un avantage majeur en ajustant constamment les logiciels pour s’aligner sur les besoins évolutifs des clients et utilisateurs. Cette flexibilité favorise une réactivité accrue aux exigences changeantes du marché, permettant ainsi une adaptation continue aux évolutions de l’environnement. En outre, cette approche améliore l’interaction client, la compréhension des besoins, et favorise une livraison de produits adaptés.
Ainsi, cette approche améliore l’interaction client et la compréhension des besoins, favorisant une livraison de produits mieux adaptée. Par l’intégration du DevSecOps dans un système agile, on obtient un avantage crucial grâce à l’automatisation et à l’intégration continue. Cette démarche accélère significativement les cycles de développement et de déploiement, facilitant une livraison plus rapide des produits. En conséquence, cette efficacité contribue à améliorer le retour sur investissement (ROI) et à réduire le time to market.
La démarche agile s’adapte aux besoins changeants des utilisateurs au fil du temps. Elle permet de :
- Délivrer de la valeur régulièrement ;
- Tester et recueillir les retours utilisateurs à chaque cycle de développement ;
- Ajuster la solution tout au long du projet, dans une démarche dite “centrée-utilisateur”.
Ainsi, le cycle de vie du développement logiciel offre une structure solide pour appréhender les projets. En outre, il facilite la compréhension des besoins, permet une détection précoce des problèmes et assure une gestion efficace des coûts. En somme, cette approche établit un cadre robuste pour un développement logiciel réussi. Parallèlement, l’instauration de ce cadre favorise une communication fluide entre les parties prenantes du projet, optimisant ainsi la collaboration tout au long du processus de développement.
Nous détaillerons, dans un prochain article, les processus d’intégration continue et de déploiement continu, indispensables pour le bon développement logiciel. Retrouvez en attendant notre dernier article sur les avantages du DevSecOps !