Please enable JavaScript.
Coggle requires JavaScript to display documents.
20- Ingénierie Logicielle - Coggle Diagram
20- Ingénierie Logicielle
Ingénierie Logicielle
1.1. Définition et Importance
1.1.1. Définition: Discipline de conception, développement, maintenance et gestion des logiciels de manière systématique et structurée.
1.1.2. Importance: Amélioration de la qualité des logiciels, réduction des coûts de développement, satisfaction des besoins des utilisateurs.
Cycle de Vie du Développement Logiciel (SDLC)
2.1. Modèles de Développement
2.1.1. Cascade
2.1.1.1. Définition: Modèle séquentiel avec des phases distinctes.
2.1.1.2. Phases: Analyse des exigences, conception, implémentation, tests, déploiement, maintenance.
2.1.2. Agile
2.1.2.1. Définition: Approche itérative et incrémentale avec des cycles courts (sprints).
2.1.2.2. Principes: Collaboration, adaptation aux changements, livraison rapide.
2.1.3. DevOps
2.1.3.1. Définition: Fusion des processus de développement et d'exploitation pour une livraison continue.
2.1.3.2. Pratiques: Intégration continue (CI), livraison continue (CD), automatisation.
2.2. Phases du SDLC
2.2.1. Analyse des Exigences
2.2.1.1. Définition: Collecte et documentation des besoins des utilisateurs.
2.2.1.2. Outils: Interviews, questionnaires, user stories.
2.2.2. Conception
2.2.2.1. Conception Système: Architecture globale du système.
2.2.2.2. Conception Détail: Conception des composants individuels.
2.2.3. Implémentation
2.2.3.1. Codage: Écriture du code source en utilisant des langages de programmation.
2.2.3.2. Outils: IDE, gestionnaires de versions (Git).
2.2.4. Tests
2.2.4.1. Tests Unitaires: Vérification des plus petites unités de code.
2.2.4.2. Tests d'Intégration: Vérification de l'interaction entre les composants.
2.2.4.3. Tests Systèmes: Vérification du système complet.
2.2.4.4. Tests d'Acceptation: Vérification que le système répond aux exigences des utilisateurs.
2.2.5. Déploiement
2.2.5.1. Déploiement Initial: Installation du système en environnement de production.
2.2.5.2. Mises à Jour: Déploiement des modifications et des corrections.
2.2.6. Maintenance
2.2.6.1. Corrective: Correction des bugs et des problèmes.
2.2.6.2. Adaptive: Adaptation aux changements d'environnement.
2.2.6.3. Perfective: Amélioration des fonctionnalités et des performances.
2.2.6.4. Préventive: Prévention des problèmes futurs.
Méthodologies de Développement
3.1. Méthodes Agiles
3.1.1. Scrum
3.1.1.1. Définition: Cadre Agile utilisant des itérations de 2 à 4 semaines (sprints).
3.1.1.2. Rôles: Product Owner, Scrum Master, Équipe de Développement.
3.1.1.3. Artéfacts: Backlog produit, backlog sprint, incrément.
3.1.1.4. Cérémonies: Planification du sprint, mêlée quotidienne (daily scrum), revue de sprint, rétrospective de sprint.
3.1.2. Kanban
3.1.2.1. Définition: Méthodologie Agile basée sur la visualisation du flux de travail.
3.1.2.2. Principes: Limitation du travail en cours (WIP), amélioration continue.
3.1.2.3. Outils: Tableaux Kanban, cartes Kanban.
3.2. Méthodes Traditionnelles
3.2.1. Modèle en V
3.2.1.1. Définition: Extension du modèle en cascade avec des phases de test parallèles aux phases de développement.
3.2.1.2. Phases: Spécification, conception, implémentation, vérification, validation.
3.2.2. RAD (Rapid Application Development)
3.2.2.1. Définition: Modèle axé sur le développement rapide avec des prototypes fonctionnels.
3.2.2.2. Phases: Planification, prototypage, construction rapide, tests, mise en production.
3.3. Modèles Hybrides
3.3.1. Agile-Waterfall
3.3.1.1. Définition: Combinaison des approches Agile et Cascade.
3.3.1.2. Application: Utilisation de Cascade pour les phases de planification et de conception, et Agile pour le développement et les tests.
Gestion de Projet
4.1. Planification de Projet
4.1.1. Définition des Objectifs: Objectifs clairs et mesurables.
4.1.2. Échéancier: Calendrier des tâches et des livrables.
4.1.3. Ressources: Allocation des ressources humaines et matérielles.
4.2. Suivi et Contrôle
4.2.1. Suivi de l'Avancement: Mesure de la progression par rapport au plan.
4.2.2. Gestion des Risques: Identification, analyse et mitigation des risques.
4.2.3. Communication: Communication régulière avec les parties prenantes.
4.3. Méthodologies de Gestion de Projet
4.3.1. PMP (Project Management Professional)
4.3.1.1. Définition: Standard de gestion de projet reconnu internationalement.
4.3.1.2. Phases: Initiation, planification, exécution, suivi et contrôle, clôture.
4.3.2. Prince2 (Projects IN Controlled Environments)
4.3.2.1. Définition: Méthodologie axée sur la gestion et l'organisation des projets.
4.3.2.2. Principes: Justification continue, apprentissage par l'expérience, rôles et responsabilités définis.
Conception Logicielle
5.1. Principes de Conception
5.1.1. SOLID
5.1.1.1. Single Responsibility: Une classe doit avoir une seule responsabilité.
5.1.1.2. Open/Closed: Les entités doivent être ouvertes à l'extension mais fermées à la modification.
5.1.1.3. Liskov Substitution: Les sous-classes doivent pouvoir être substituées aux classes de base.
5.1.1.4. Interface Segregation: Les interfaces spécifiques sont préférables aux interfaces générales.
5.1.1.5. Dependency Inversion: Dépendre des abstractions plutôt que des implémentations.
5.1.2. DRY (Don't Repeat Yourself)
5.1.2.1. Définition: Éviter la duplication de code.
5.1.3. KISS (Keep It Simple, Stupid)
5.1.3.1. Définition: Simplicité du design pour faciliter la compréhension et la maintenance.
5.2. Modélisation UML (Unified Modeling Language)
5.2.1. Diagrammes de Cas d'Utilisation: Représentation des interactions entre les utilisateurs et le système.
5.2.2. Diagrammes de Classes: Représentation des classes et des relations entre elles.
5.2.3. Diagrammes de Séquence: Représentation des interactions entre les objets au fil du temps.
5.2.4. Diagrammes d'Activité: Représentation des flux de travail et des processus.
5.3. Design Patterns (Patrons de Conception)
5.3.1. Création
5.3.1.1. Singleton: Assurer qu'une classe n'a qu'une seule instance.
5.3.1.2. Factory: Créer des objets sans spécifier la classe exacte.
5.3.2. Structure
5.3.2.1. Adapter: Permettre l'utilisation de classes incompatibles.
5.3.2.2. Composite: Composer des objets en structures arborescentes.
5.3.3. Comportement
5.3.3.1. Observer: Définir une relation de dépendance un-à-plusieurs.
5.3.3.2. Strategy: Définir une famille d'algorithmes interchangeables.
Qualité Logicielle
6.1. Assurance Qualité (QA)
6.1.1. Définition: Processus pour garantir que les produits logiciels répondent aux exigences de qualité.
6.1.2. Activités: Revue de code, tests, audits.
6.2. Tests Logiciels
6.2.1. Tests Unitaires: Vérification des plus petites unités de code.
6.2.2. Tests d'Intégration: Vérification de l'interaction entre les composants.
6.2.3. Tests Fonctionnels: Vérification des fonctionnalités du logiciel par rapport aux spécifications.
6.2.4. Tests de Performance: Vérification de la réactivité et de la stabilité sous charge.
6.2.5. Tests de Régression: Vérification que les modifications n'ont pas introduit de nouveaux bugs.
6.3. Outils de Tests
6.3.1. JUnit: Framework de tests unitaires pour Java.
6.3.2. Selenium: Outil pour les tests fonctionnels des applications web.
6.3.3. JMeter: Outil pour les tests de performance.
6.4. Métriques de Qualité
6.4.1. Couverture du Code: Pourcentage de code exécuté lors des tests.
6.4.2. Complexité Cyclomatique: Mesure de la complexité du code.
6.4.3. Densité des Défauts: Nombre de défauts par unité de taille du logiciel.
Maintenance et Évolution
7.1. Types de Maintenance
7.1.1. Corrective: Correction des bugs et des erreurs.
7.1.2. Adaptive: Adaptation aux changements d'environnement.
7.1.3. Perfective: Amélioration des fonctionnalités et des performances.
7.1.4. Préventive: Prévention des problèmes futurs.
7.2. Gestion de la Configuration
7.2.1. Définition: Processus de suivi et de contrôle des modifications du logiciel.
7.2.2. Outils: Git, Subversion.
7.3. Refactoring
7.3.1. Définition: Restructuration du code sans modifier son comportement externe.
7.3.2. Objectifs: Améliorer la lisibilité, réduire la complexité, faciliter la maintenance.
7.4. Gestion des Versions
7.4.1. Numérotation des Versions: Système pour identifier les différentes versions du logiciel.
7.4.2. Branching et Merging: Stratégies pour gérer les branches de développement et les fusions.
Sécurité Logicielle
8.1. Principes de Sécurité
8.1.1. Confidentialité: Protection des données contre l'accès non autorisé.
8.1.2. Intégrité: Protection des données contre les modifications non autorisées.
8.1.3. Disponibilité: Garantie que les systèmes et les données sont disponibles pour les utilisateurs autorisés.
8.2. Techniques de Sécurité
8.2.1. Cryptographie: Utilisation de techniques de chiffrement pour protéger les données.
8.2.2. Authentification: Vérification de l'identité des utilisateurs.
8.2.3. Autorisation: Contrôle des accès aux ressources.
8.3. Gestion des Vulnérabilités
8.3.1. Détection des Vulnérabilités: Utilisation d'outils pour identifier les failles de sécurité.
8.3.2. Correction des Vulnérabilités: Mise à jour et patching des logiciels.
8.4. Outils de Sécurité
8.4.1. OWASP ZAP: Outil pour les tests de sécurité des applications web.
8.4.2. Nessus: Scanner de vulnérabilités.
8.4.3. Metasploit: Framework pour les tests de pénétration.
Documentation
9.1. Types de Documentation
9.1.1. Documentation Utilisateur: Guides et manuels pour les utilisateurs finaux.
9.1.2. Documentation Développeur: Guides et références pour les développeurs.
9.1.3. Documentation Technique: Description détaillée de l'architecture, des algorithmes et des interfaces.
9.2. Outils de Documentation
9.2.1. Javadoc: Outil de documentation pour Java.
9.2.2. Doxygen: Outil de documentation pour C++, Java, et d'autres langages.
9.2.3. Markdown: Langage de balisage léger pour la rédaction de documents.
9.3. Bonnes Pratiques
9.3.1. Mise à Jour Régulière: Maintenir la documentation à jour avec les modifications du logiciel.
9.3.2. Clarté et Précision: Rédiger de manière claire et précise pour faciliter la compréhension.
9.3.3. Structure et Organisation: Organiser la documentation de manière logique et facile à naviguer.