L'ingénierie logicielle est une discipline qui applique des méthodes et des outils d'ingénierie au développement, à la conception et à la maintenance des logiciels. Elle vise à créer des logiciels de grande qualité qui répondent aux besoins des utilisateurs, respectent les délais et les budgets.
Logiciel
Ensemble de programmes qui permettent à un système informatique de réaliser une tâche ou une fonction spécifique. Il est le résultat d'un programme et de son utilisation.
Modèle
Représentation simplifiée de la réalité, utilisée pour comprendre ou concevoir un système. On utilise des langages de modélisation pour les créer.
Processus
Une série d'étapes successives et organisées pour atteindre un objectif, comme le développement d'un logiciel.
Parties prenantes (Stakeholders)
Personnes ou groupes affectés par un projet de développement logiciel, qu'ils soient internes (ex: chef de projet) ou externes (ex: client, utilisateur final) à l'organisation.
Document de spécification des exigences logicielles (SRS)
Document décrivant les besoins du client que l'équipe de développement doit satisfaire pour que le logiciel soit un succès.
Le logiciel est partout autour de nous : dans nos ordinateurs, nos téléphones, les voitures, les avions et même les maisons. C'est un produit abstrait, créé pour résoudre des problèmes spécifiques pour des clients ou des utilisateurs. Comme tout produit, il doit être conçu de manière systématique et suivre un cycle de vie pour garantir sa qualité, sa fiabilité et sa capacité à être mis à jour.
Impacts positifs
Le logiciel a transformé notre monde. Il permet d'accélérer les traitements, de résoudre des problèmes complexes rapidement grâce à d'incroyables capacités de calcul et de stockage. Il a introduit de nouvelles activités de loisirs et a créé une nouvelle dimension sociale, facilitant la communication et l'accès à l'information.Impacts négatifs et risques
Malgré ses avantages, un logiciel de mauvaise qualité peut avoir des conséquences graves. Des erreurs logicielles ont déjà causé des catastrophes, comme le détournement d'une fusée spatiale (Mariner-1 en 1962), des accidents médicaux (accélérateur Therac-25 en 1985) ou même de fausses alertes de guerre (1983). Ces exemples montrent l'importance cruciale de la qualité logicielle.Le développement logiciel est une tâche complexe. Le logiciel est un produit abstrait, invisible et non concret, entièrement développé par des humains. Cette nature abstraite rend difficile la compréhension exacte des besoins du client et la mesure de la qualité. Les erreurs humaines sont une cause majeure de défaillance logicielle. De plus, les petites modifications peuvent avoir des conséquences importantes, et la technologie évolue si vite que les logiciels nécessitent des mises à jour constantes.
La crise logicielle
Dans les années 1960 et 1970, le monde du logiciel a connu une « crise ». Les projets dépassaient souvent les délais et les budgets, ne répondaient pas aux besoins des utilisateurs et étaient difficiles à utiliser ou à maintenir. Cette crise a mis en lumière la nécessité de méthodes plus structurées et rigoureuses pour le développement logiciel, donnant naissance à l'ingénierie logicielle.La qualité d'un logiciel est essentielle. L'Organisation Internationale de Normalisation (ISO) a établi plusieurs critères pour évaluer la qualité d'un logiciel :
- Adéquation fonctionnelle : Le logiciel doit être correct, complet et approprié aux fonctions attendues.
- Validité : Le logiciel doit être la bonne solution au problème du client et répondre à ses besoins réels.
- Facilité d'utilisation (Usability) : L'interface du logiciel doit être simple et facile à utiliser.
- Performance : Le logiciel doit avoir un bon temps de réponse, un bon débit et être fluide.
- Fiabilité : Le logiciel doit être tolérant aux pannes et produire des résultats corrects à chaque fois.
- Sécurité : Le logiciel doit protéger ses données et contrôler l'accès.
- Maintenabilité : Le logiciel doit être facile à corriger et à modifier.
- Portabilité : Le logiciel doit pouvoir être transféré et fonctionner sur différents environnements matériels ou logiciels.
- Compatibilité : Le logiciel doit pouvoir interagir avec d'autres logiciels de manière efficace.
Le Cycle de Vie du Développement Logiciel (SDLC) est un processus organisé en phases successives pour produire un logiciel de qualité. Il comprend généralement 7 phases :
- 1. Étude de faisabilité : On se demande pourquoi développer le logiciel, s'il existe de meilleures alternatives, quels sont les ressources et le budget nécessaires.
- 2. Spécification (Analyse des exigences) : On comprend les besoins du client et on décrit en détail ce que le logiciel doit faire (fonctionnalités, exigences de qualité, interface). On distingue les exigences fonctionnelles (ce que le logiciel fait) et non fonctionnelles (comment il le fait : fiabilité, sécurité, etc.).
- 3. Conception : On développe une solution concrète. Cela inclut une conception globale (définir les grands composants) et une conception détaillée (spécifier les détails de chaque composant).
- 4. Programmation : La conception est traduite en code informatique. C'est la phase de codage.
- 5. Validation et vérification : La validation s'assure que le logiciel répond aux besoins du client. La vérification s'assure que le logiciel respecte ses spécifications techniques.
- 6. Livraison : Le logiciel est remis au client.
- 7. Maintenance : Après la livraison, le logiciel est entretenu. Il peut s'agir de maintenance corrective (corriger les erreurs), adaptative (s'adapter aux changements d'environnement) ou perfective (améliorer les performances et les fonctionnalités).
Il existe différents modèles de cycle de vie, classés en trois types principaux : linéaires, itératifs et incrémentaux.
Modèles linéaires
Ces modèles suivent des étapes séquentielles.- Modèle en cascade : C'est le modèle le plus classique. Les phases se succèdent sans retour en arrière facile. Il est clair et bien documenté, idéal pour les grands projets aux exigences stables. Cependant, il est rigide et difficile à adapter aux changements.
- Modèle en V : Basé sur le modèle en cascade, il met l'accent sur les tests. Chaque phase de développement (spécification, conception) a une phase de vérification correspondante. Il assure une bonne qualité mais le retour utilisateur est tardif.
Modèles de prototypage
Ce modèle implique la création rapide d'un prototype pour valider les besoins du client. Il existe des prototypes jetables (pour comprendre les besoins) et des prototypes évolutifs (améliorés jusqu'au produit final). Il réduit les risques d'erreurs de spécification mais les décisions rapides peuvent être risquées.Modèles incrémentaux
Le logiciel est développé par petites additions successives. Chaque incrément est une version fonctionnelle minimale. Cela rend le développement moins complexe, l'intégration progressive et permet des livraisons anticipées. Cependant, il peut y avoir une perte du cœur original du logiciel ou des erreurs lors de l'intégration.Modèles itératifs (ex: Modèle en spirale)
Ces modèles impliquent un processus répétitif jusqu'à ce que le logiciel soit complet et le client satisfait. Le modèle en spirale, par exemple, inclut la consultation client, l'analyse des risques, la conception, l'implémentation et les tests, avec une planification pour le cycle suivant. Il est adapté aux logiciels critiques (militaires, médicaux) grâce à une meilleure gestion des risques, mais il est moins adapté aux petits projets.Modèles agiles
Les modèles agiles combinent les approches incrémentales et itératives. Ils sont conçus pour s'adapter à un environnement technologique instable et aux besoins changeants des clients. L'objectif est d'accélérer le développement en livrant des versions minimales, en intégrant les fonctionnalités de manière itérative et en plaçant la satisfaction du client au cœur du processus, avec des retours réguliers.A retenir :
- L'ingénierie logicielle est l'application de méthodes d'ingénierie au développement de logiciels de qualité.
- Le logiciel est omniprésent et a des impacts positifs (vitesse, résolution de problèmes) et négatifs (risques d'erreurs).
- Le développement logiciel est complexe en raison de sa nature abstraite, des erreurs humaines et de l'évolution technologique rapide.
- La « crise logicielle » a souligné la nécessité de processus structurés.
- La qualité logicielle est évaluée par des critères comme l'adéquation fonctionnelle, la fiabilité, la sécurité et la maintenabilité.
- Le Cycle de Vie du Développement Logiciel (SDLC) organise le développement en phases (faisabilité, spécification, conception, programmation, validation, livraison, maintenance).
- Il existe plusieurs modèles de SDLC (cascade, V, prototypage, incrémental, spirale, agile), chacun adapté à différents types de projets et de contraintes.
