📊 Software Engineering
Quand on me demande quel est mon métier, la réponse la plus simple qui me vient est "je produis des logiciels".
Le développement logiciel est le processus de création de programmes informatiques et englobe l'ensemble des activités nécessaires pour transformer une idée en un logiciel fonctionnel.
Ces activités sont généralement découpées en plusieurs phases :
- Analyse
- Architecture / Conception
- Construction / Programmation / Développement
- Recette / Validation
- Déploiement
📊 Software Engineering¶
Il existe un nom pour désigner la science qui s'intéresse aux pratiques de développement logiciel : le génie logiciel, ou Software Engineering en anglais.
Le génie logiciel étudie la répartition de ces phases dans le temps, mais aussi les méthodes de travail et les pratiques mises en œuvre lors de la création des programmes.
L'objectif est d'industrialiser les processus permettant d'obtenir des solutions logicielles de qualité (fiables, robustes et efficaces) qui répondent aux besoins des utilisateurs, quelle que soit l'ampleur ou la complexité du logiciel.
Knowledge Areas (Domaines de connaissances)¶
Le « Software Engineering Book of Knowledge » (aka. SWEBOK) référence 15 domaines de connaissances pour le génie logiciel
- Exigences du logiciel (« Software requirements »)
- Conception du logiciel (« Software Design »)
- Construction du logiciel (« Software Construction »)
- Test du logiciel (« Software Testing »)
- Maintenance du logiciel (« Software Maintenance »)
- Gestion de la configuration du logiciel (« Software Configuration Management »)
- Management du génie logiciel (« Software Engineering Management »)
- Processus du génie logiciel (« Software Engineering Process »)
- Modèles et méthodes du génie logiciel (« Software Engineering Models and Methods »)
- Qualité du logiciel (« Software Quality »)
- Pratique professionnelle du génie logiciel (« Software Engineering Professional Practice »)
- Principes économiques du génie logiciel (« Software Engineering Economics »)
- Bases informatiques (« Computing Foundations »)
- Bases mathématiques (« Mathematical Foundations »)
- Bases d'ingénierie (« Engineering Foundations »)
Ce livre est disponible gratuitement sur internet :
- http://swebokwiki.org/Chapter_1:_Software_Requirements
- https://www.computer.org/education/bodies-of-knowledge/software-engineering
L'objectif de codifier les connaissances professionnelles devrait servir :
- de guide aux professionnels du développement de logiciels dans l'exercice de leur métier
- à élaborer des cursus d'apprentissage pour les organismes académiques ou de formation professionnelle
- à établir des programmes de certification ou d'accréditation professionnelle
Opinion
Cette approche du logiciel ne me correspond pas, que je la trouve trop élitiste, théorique et abstraite.
Le génie logiciel est une discipline scientifique qui englobe la théorie, la méthodologie et la pratique autour de la production de logiciels. Il est nécessaire d'obtenir une certification ou une norme pour se targuer de l'appartenance à ce domaine d'ingénierie.
Le développement logiciel¶
Le développement logiciel est un domaine plus pragmatique, plus restreint, concentré sur la mise en œuvre technique, où l'accent est mis sur les activités permettant de transformer une idée en un logiciel fonctionnel. Les compétences mises en œuvre lors du développement logiciel incluent :
Analyse des besoins¶
Comprendre les besoins des utilisateurs et les traduire en spécifications techniques précises.
Développement logiciel / Maîtrise des langages de programmation¶
Écrire le code source du logiciel en utilisant des langages de programmation appropriés. Connaître et savoir utiliser un ou plusieurs langages de programmation adaptés aux types de logiciels développés.
Conception logicielle¶
Comprendre les principes de la conception logicielle et savoir les appliquer pour créer des logiciels robustes, évolutifs et maintenables. Définir l'architecture du logiciel, les modules, les interfaces et les algorithmes qui le composent.
Tests et validation¶
Vérifier que le logiciel répond aux spécifications et qu'il fonctionne correctement sans bogues.
Résolution de problèmes¶
Avoir une capacité d'analyse et de résolution de problèmes efficace pour identifier et corriger les bugs logiciels.
Déploiement et maintenance¶
Installer le logiciel dans son environnement de production et assurer sa maintenance et son évolution au fil du temps.
Communication et collaboration¶
Savoir communiquer efficacement avec les utilisateurs, les parties prenantes et les autres membres de l'équipe de développement.
Apprentissage continu¶
Rester à jour avec les dernières technologies et tendances du développement logiciel.