Le génie logiciel s'intéresse à la manière de développer efficacement des logiciels.
Le génie logiciel vise à résoudre les problèmes pratiques qui surviennent lors du développement de logiciels, tandis que l'informatique concerne davantage les principes théoriques utilisés dans les logiciels.
Un bon ingénieur logiciel doit posséder une solide formation en informatique et de bonnes compétences pratiques dans des domaines tels que la programmation informatique.
Le logiciel est généralement développé en équipe, où les personnes ont des rôles et des responsabilités différents.
Le développement de logiciels implique de prendre en compte les caractéristiques fonctionnelles et non fonctionnelles souhaitées décrites.
Il existe plusieurs catégories de logiciels, notamment les logiciels d'application, les logiciels système et les logiciels embarqués.
Les ingénieurs logiciels doivent comprendre les processus de génie logiciel, les activités spécifiques telles que les tests, et les outils logiciels.
Les compétences non techniques telles que la communication et la résolution de problèmes sont importantes pour réussir dans le rôle d'ingénieur logiciel.
Un cadriciel de processus de génie logiciel est utilisé pour définir le modèle de processus logiciel ou le modèle SDLC qui sera employé pour créer une solution logicielle.
La plupart des modèles SDLC utilisent des phases ou des activités de cadriciel standard. Les quatre phases courantes sont l'initialisation, l'élaboration, la construction et le déploiement.
Les modèles SDLC diffèrent en termes de rigidité et du nombre d'actions de génie logiciel qu'ils spécifient comme devant être accomplies dans le cadre du processus de développement logiciel.
Une catégorie majeure de modèles de processus est celle des modèles de processus traditionnels, qui sont généralement prescriptifs, séquentiels et peuvent ne pas convenir aux projets dont les exigences évoluent rapidement.
Une deuxième catégorie majeure de modèles de processus est celle des modèles de processus Agile, qui sont moins rigides, permettant de sauter ou d'accélérer des activités pour livrer une solution de projet plus rapidement et d'intégrer les retours des utilisateurs tôt dans le processus.
Dans le développement logiciel, les développeurs utilisent l'architecture logicielle pour visualiser et évaluer le système dans son ensemble avant de passer à la conception des composants.
En plus des activités génériques du cadriciel, il existe d'autres activités qui traversent l'ensemble du processus de développement logiciel mais ne font pas partie des étapes de construction principales elles-mêmes, telles que la communication et la formation, la gestion et la planification des risques, la gestion de la configuration et du contenu logiciel, la gestion de la qualité logicielle (SQM), la gestion de l'architecture et l'ingénierie de la sécurité logicielle.
Les ingénieurs logiciels doivent comprendre les différents modèles et leurs différences. Certains des modèles de processus logiciel populaires incluent le modèle en cascade, le modèle en V, le modèle incrémentiel, le modèle de prototypage, le modèle en spirale, le modèle de processus unifié et les modèles de processus Agile (tels que Scrum et DevOps, entre autres).
Les tests sont une partie essentielle de la construction de solutions logicielles réussies.
Pour assurer la qualité, le logiciel passe par différents niveaux de tests, tels que les tests unitaires, les tests d'intégration et les tests système, et il est soumis à différentes approches de test, telles que les tests d'acceptation, les tests d'utilisabilité, les tests de charge, les tests de performance et les tests de sécurité. Chaque test remplit une fonction importante.
Le développement piloté par les tests est un processus dans lequel les développeurs écrivent des tests unitaires avant d'écrire du code. Bien que contre-intuitif, cela peut aider à clarifier les exigences, à faciliter la détection précoce des bogues et même à améliorer la conception et la qualité du code.
Alors que les tests unitaires se concentrent sur les différentes unités ou parties d'une solution logicielle, les tests système se concentrent sur le produit logiciel complet et entièrement intégré. Les systèmes peuvent être manuels ou automatisés.
Les tests d'acceptation sont utilisés pour déterminer que le système logiciel fonctionne comme spécifié dans les exigences. Ayant lieu après les tests système, ils sont généralement effectués par le client, le donneur d'ordre ou un autre utilisateur final du logiciel.
Les tests d'utilisabilité testent l'interface utilisateur en recueillant les commentaires d'un petit groupe d'utilisateurs représentatifs du public cible.
Lors du développement de logiciels, les développeurs utilisent des outils tels que des compilateurs, des débogueurs, des profileurs, des environnements de développement intégrés (IDE), des systèmes de gestion de versions et des systèmes de suivi des bogues.
Pour résoudre les problèmes qui surviennent couramment dans le développement d'un système logiciel, les développeurs utilisent des solutions réutilisables appelées patrons d'architecture et patrons de conception.
La refactorisation est une technique de restructuration d'une portion de code existante sans en modifier la fonctionnalité.
Le logiciel à code source ouvert est fourni avec son code source. Des exemples de projets à code source ouvert sont Linux, Android, NetBeans IDE, Eclipse IDE et le langage de programmation C#.
Que vous utilisiez simplement un logiciel ou que vous en créiez un, il est important de comprendre les licences afin de savoir ce que vous pouvez ou ne pouvez pas faire avec le logiciel.
Les ingénieurs logiciels doivent respecter un code de déontologie qui guide leur travail et les solutions qu'ils produisent.
Le groupe de travail conjoint ACM/IEEE-CS a produit un Code de déontologie et de pratique professionnelle en génie logiciel qui stipule que les ingénieurs logiciels s'engagent à faire de l'analyse, de la spécification, de la conception, du développement, des tests et de la maintenance des logiciels une profession bénéfique et respectée.
Le génie logiciel et le développement de solutions logicielles sont en constante évolution. À mesure que la technologie change, certaines des méthodes de codage des logiciels évoluent également.