Article de reference

Développement logiciel

Le développement logiciel est le processus de conception, de création, de test et de maintenance d'applications logicielles visant à répondre à des besoins spécifiques des utili...

Le développement logiciel est le processus de conception, de création, de test et de maintenance d'applications logicielles visant à répondre à des besoins spécifiques des utilisateurs ou à des objectifs commerciaux. Ce processus est plus vaste que la simple programmation (écriture de code) , car il inclut la définition de l'objectif, l'évaluation de la faisabilité, l'analyse des exigences , la conception , les tests et la mise en production . Il fait partie du génie logiciel, qui comprend également la gestion organisationnelle , la gestion de projet , la gestion de la configuration et d'autres aspects.

Le développement logiciel fait appel à de nombreuses compétences et spécialisations, notamment la programmation , les tests , la documentation , la conception graphique , le support utilisateur , le marketing et la levée de fonds . Parmi les outils courants, on trouve les compilateurs , les environnements de développement intégrés (IDE) et les systèmes de contrôle de version .

Les modalités du processus de développement varient. Il peut s'appuyer sur une norme formelle et documentée , ou être adapté et évolutif selon les besoins du projet. Le processus peut être séquentiel, chaque phase majeure (conception, implémentation et test) étant achevée avant le début de la suivante. Cependant, une approche itérative, où les petits aspects sont conçus, implémentés et testés séparément, permet de réduire les risques et les coûts, tout en améliorant la qualité.

Méthodologies

Organigramme du modèle de prototypage évolutif , un modèle de développement itératif

Chacune des méthodologies disponibles est mieux adaptée à des types de projets spécifiques, en fonction de diverses considérations techniques, organisationnelles, de projet et d'équipe.

  • La méthode la plus simple est celle du « code et de la correction », généralement utilisée par un seul programmeur travaillant sur un petit projet. Après avoir brièvement réfléchi à l’objectif du programme, le programmeur le code et l’exécute pour vérifier son bon fonctionnement. Une fois le travail terminé, le produit est mis en production. Cette méthode est utile pour les prototypes, mais ne convient pas aux programmes plus complexes.
  • Dans le modèle en cascade descendant , les étapes de faisabilité, d'analyse, de conception , de développement, d'assurance qualité et de mise en œuvre se succèdent dans cet ordre. Ce modèle exige que chaque étape soit achevée avant de commencer la suivante, ce qui engendre des retards, et empêche toute révision des étapes précédentes, même si nécessaire.
  • Dans les processus itératifs , ces étapes s'entremêlent pour une flexibilité et une efficacité accrues, ainsi qu'une planification plus réaliste. Au lieu de réaliser le projet en une seule fois, on peut procéder étape par étape, composant par composant. Le développement itératif permet également aux développeurs de prioriser les fonctionnalités les plus importantes, et d'abandonner ultérieurement celles de moindre priorité si nécessaire. La méthode Agile , initialement conçue pour les projets de petite et moyenne envergure, vise à donner aux développeurs un meilleur contrôle sur les fonctionnalités qu'ils développent afin de réduire les risques de dépassement de délais ou de coûts. Parmi les dérivés de la méthode Agile, on trouve la programmation extrême (XP) et Scrum . Le développement de logiciels libres utilise généralement la méthodologie Agile avec une conception, un codage et des tests simultanés, en raison de son recours à un réseau distribué de contributeurs bénévoles.
  • Au-delà des méthodes agiles, certaines entreprises intègrent les opérations informatiques au développement logiciel ; on parle alors de DevOps ou de DevSecOps , incluant la sécurité informatique . Le DevOps comprend le développement continu, les tests , l’intégration du nouveau code dans le système de contrôle de version, le déploiement de ce nouveau code et, parfois, sa livraison aux clients. Cette intégration vise à fournir des services informatiques plus rapidement et plus efficacement.

Un autre axe de nombreuses méthodologies de programmation consiste à tenter de détecter les problèmes tels que les vulnérabilités de sécurité et les bogues le plus tôt possible ( tests en amont ) afin de réduire les coûts de leur suivi et de leur correction.

En 2009, on estimait que 32 % des projets logiciels étaient livrés dans les délais et le budget impartis, et avec toutes les fonctionnalités. 44 % supplémentaires étaient livrés, mais il manquait au moins une fonctionnalité. Les 24 % restants étaient annulés avant leur mise en production.

Cycle de vie

Le cycle de vie du développement logiciel décrit les phases typiques du processus de développement logiciel.

Faisabilité

Les sources d'idées de logiciels sont nombreuses. Elles peuvent provenir d'études de marché , notamment sur les données démographiques des clients potentiels, des clients existants, des prospects ayant refusé le produit, des équipes de développement interne ou encore de consultants externes. Les idées de logiciels sont généralement évaluées en premier lieu par le service marketing afin de déterminer leur faisabilité économique, leur adéquation aux canaux de distribution existants, leurs impacts potentiels sur les gammes de produits existantes, les fonctionnalités requises et leur adéquation aux objectifs marketing de l'entreprise. Lors de cette évaluation marketing, les hypothèses de coûts et de délais sont analysées. L'analyse de faisabilité estime le retour sur investissement du projet , son coût de développement et son calendrier. Sur la base de cette analyse, l'entreprise peut décider d'investir dans la poursuite du développement. Une fois la décision prise de développer le logiciel, l'entreprise s'attache à livrer le produit dans les délais et les coûts estimés, tout en garantissant un haut niveau de qualité (absence de bogues) et les fonctionnalités souhaitées. Cependant, la plupart des projets logiciels prennent du retard et il arrive que des compromis soient faits sur les fonctionnalités ou la qualité pour respecter les délais.

Analyse

L'analyse logicielle débute par une analyse des exigences afin de cerner les besoins métiers du logiciel. L'identification des besoins se heurte à la difficulté que représentent les besoins différents et incompatibles des utilisateurs actuels ou potentiels, leur méconnaissance de leurs propres besoins et leur évolution au cours du développement logiciel. L'analyse aboutit finalement à une spécification détaillée du produit, servant de base au travail des développeurs. Les analystes logiciels décomposent souvent le projet en objets plus petits, des composants réutilisables pour une meilleure rentabilité, une efficacité accrue et une fiabilité renforcée. Cette décomposition peut permettre une implémentation multithread , nettement plus rapide sur les ordinateurs multiprocesseurs .

Lors des phases d'analyse et de conception du développement logiciel, l'analyse structurée est souvent utilisée pour décomposer les exigences du client en éléments implémentables par les programmeurs. La logique sous-jacente du programme peut être représentée par des diagrammes de flux de données , des dictionnaires de données , du pseudocode , des diagrammes de transition d'état et/ou des diagrammes entité-association . Si le projet intègre un logiciel existant non modélisé, ce dernier peut être modélisé afin de garantir sa bonne intégration au nouveau logiciel.

Conception

La conception implique des choix relatifs à la mise en œuvre du logiciel, tels que les langages de programmation et les logiciels de base de données à utiliser, ou encore l'organisation du matériel et des communications réseau. La conception peut être itérative, les utilisateurs étant consultés sur leurs besoins par un processus d' essais et d'erreurs . Elle fait souvent intervenir des experts dans des domaines tels que la conception de bases de données , l'architecture d'interface et les performances des serveurs et autres matériels. Les concepteurs s'efforcent souvent de trouver des modèles dans les fonctionnalités du logiciel afin d'en extraire des modules distincts réutilisables grâce à la programmation orientée objet . Le modèle MVC (Modèle-Vue-Contrôleur) , interface entre l' interface utilisateur graphique et le système dorsal , en est un exemple .

Programmation

L'élément central du développement logiciel est la création et la compréhension du logiciel qui implémente la fonctionnalité souhaitée. Il existe différentes stratégies pour écrire le code. Un logiciel cohésif est composé de divers éléments indépendants les uns des autres. Le couplage, qui désigne l'interrelation de différents composants logiciels, est considéré comme indésirable car il complexifie la maintenance . Souvent, les programmeurs ne suivent pas les bonnes pratiques du secteur, ce qui engendre un code inefficace, difficile à comprendre ou dont la documentation fonctionnelle est insuffisante. Ces normes sont particulièrement susceptibles de ne plus être respectées en cas de délais serrés. Par conséquent, les tests, le débogage et la révision du code deviennent beaucoup plus difficiles. La refactorisation de code est une technique qui consiste à restructurer le code existant sans en modifier le comportement externe, souvent pour améliorer sa conception, sa lisibilité ou sa maintenabilité.

Depuis la popularisation des grands modèles de langage , le développement logiciel assisté par l'IA a été utilisé pour augmenter la programmation humaine en faisant gérer la syntaxe et écrire du code par une IA.

Essai

Rapport de couverture des tests dans Clover

Les tests consistent à s'assurer que le code s'exécute correctement et sans erreurs. Chaque développeur effectue le débogage de son propre code afin de confirmer que celui-ci fonctionne comme prévu. Il est notamment crucial que le logiciel s'exécute correctement pour toutes les entrées, même si le résultat est incorrect. Les revues de code par d'autres développeurs sont souvent utilisées pour examiner le nouveau code ajouté au projet et, selon certaines estimations, réduisent considérablement le nombre de bogues persistants après la fin des tests. Une fois le code soumis, l'assurance qualité – un service distinct composé de non-programmeurs dans la plupart des grandes entreprises – teste la conformité de l'ensemble du produit logiciel. Les activités de test peuvent également intervenir tout au long du cycle de vie du développement logiciel, selon la méthodologie utilisée. Les tests d'acceptation, basés sur les exigences logicielles initiales, sont un outil couramment employé à cet effet. Les tests de qualité incluent souvent des vérifications de résistance et de charge (afin de déterminer si le logiciel est robuste face à une utilisation intensive), des tests d'intégration (pour s'assurer que le logiciel est correctement intégré à d'autres logiciels) et des tests de compatibilité (pour mesurer les performances du logiciel sur différents systèmes d'exploitation ou navigateurs). Lorsque les tests sont écrits avant le code, on parle de développement piloté par les tests (TDD) .

Production

La production est la phase au cours de laquelle le logiciel est déployé auprès de l'utilisateur final. Pendant la production, le développeur peut créer des ressources de support technique pour les utilisateurs ou un processus pour corriger les bogues et les erreurs qui n'ont pas été détectés auparavant.Il pourrait également y avoir un retour aux phases de développement antérieures si les besoins des utilisateurs ont changé ou ont été mal compris.

Ouvriers

Programmeur au travail

Le développement logiciel est réalisé par des développeurs , généralement au sein d'une équipe. Une communication efficace entre les membres de l'équipe est essentielle à la réussite. Ceci est facilité si l'équipe est restreinte, habituée à travailler ensemble et située à proximité les uns des autres. La communication permet également d'identifier les problèmes plus tôt dans le développement et d'éviter les efforts redondants. De nombreux projets de développement s'assurent que plusieurs personnes connaissent chaque composant afin de prévenir le risque de perte de connaissances essentielles détenues par un seul employé. Le développement logiciel fait intervenir des professionnels de divers domaines, non seulement des programmeurs , mais aussi des chefs de produit qui définissent la stratégie et la feuille de route du produit, ainsi que des spécialistes des tests, de la documentation, du graphisme , du support utilisateur, du marketing et de la levée de fonds. Si les développeurs de logiciels propriétaires sont rémunérés, la plupart des contributeurs aux logiciels libres sont bénévoles. Ils peuvent également être rémunérés par des entreprises dont le modèle économique ne repose pas sur la vente de logiciels, mais sur autre chose, comme des services ou des modifications de logiciels libres.

Modèles et outils

Ingénierie logicielle assistée par ordinateur

L’ingénierie logicielle assistée par ordinateur (CASE) est un ensemble d’outils permettant l’ automatisation partielle du développement logiciel. La CASE permet aux concepteurs d’esquisser la logique d’un programme, qu’il s’agisse d’un programme à écrire ou d’un programme existant, afin de faciliter son intégration avec un nouveau code ou de le rétroconcevoir (par exemple, pour changer le langage de programmation ).

Documentation

La documentation se présente sous deux formes généralement distinctes : l’une destinée aux développeurs et l’autre mise à la disposition de l’utilisateur final pour l’aider à utiliser le logiciel. La plupart de la documentation pour développeurs se présente sous forme de commentaires de code pour chaque fichier, classe et méthode , couvrant l’ interface de programmation (API) – c’est-à-dire comment le logiciel est accessible par un tiers – et souvent les détails d’implémentation. Cette documentation est utile aux nouveaux développeurs pour comprendre le projet dès leurs débuts. En développement agile, la documentation est souvent rédigée en même temps que le code. La documentation utilisateur est plus fréquemment rédigée par des rédacteurs techniques .

Estimation des efforts

Une estimation précise est cruciale lors de l'étude de faisabilité et pour la livraison du produit dans les délais et le budget impartis. Le processus d'estimation est souvent délégué au chef de projet . L'estimation des efforts étant directement liée à la taille de l'application complète, elle est fortement influencée par l'ajout de fonctionnalités aux exigences : plus les exigences sont nombreuses, plus le coût de développement est élevé. Des aspects non liés aux fonctionnalités, tels que l'expérience des développeurs et la réutilisabilité du code, sont également essentiels à prendre en compte dans l'estimation . En 2019, la plupart des outils d'estimation du temps et des ressources nécessaires au développement logiciel étaient conçus pour les applications classiques et ne sont pas adaptés aux applications web ou mobiles .

environnement de développement intégré

Anjuta , un EDI C et C++ pour l'environnement GNOME

Un environnement de développement intégré (IDE) prend en charge le développement logiciel avec des fonctionnalités améliorées par rapport à un simple éditeur de texte . Les IDE incluent souvent la compilation automatisée , la coloration syntaxique des erreurs, l'assistance au débogage, l'intégration avec le contrôle de version et la semi-automatisation des tests.

Contrôle de version

Le contrôle de version est une méthode courante pour gérer les modifications apportées au logiciel. À chaque nouvelle version enregistrée, le logiciel sauvegarde tous les fichiers modifiés. Si plusieurs programmeurs travaillent simultanément sur le logiciel, il gère la fusion de leurs modifications. Le logiciel signale les conflits entre deux ensembles de modifications et permet aux programmeurs de les résoudre.

Modèle de vue

La matrice des points de vue et des perspectives de TEAF

Un modèle de vue est un cadre qui fournit les points de vue sur le système et son environnement , à utiliser dans le processus de développement logiciel . Il s'agit d'une représentation graphique de la sémantique sous-jacente d'une vue.

L’objectif des points de vue est de permettre aux ingénieurs de comprendre des systèmes très complexes et d’organiser les éléments du problème autour de domaines d’ expertise . Dans l’ ingénierie des systèmes à forte intensité physique, les points de vue correspondent souvent à des capacités et des responsabilités au sein de l’organisation d’ingénierie.

Fonctions de remise en forme

Les fonctions d’évaluation de la qualité sont des tests automatisés et objectifs visant à garantir que les nouveaux développements ne s’écartent pas des contraintes, des vérifications et des contrôles de conformité établis.

propriété intellectuelle

La propriété intellectuelle peut poser problème lorsque les développeurs intègrent du code ou des bibliothèques open source dans un produit propriétaire, car la plupart des licences open source utilisées pour les logiciels exigent que les modifications soient diffusées sous la même licence. En alternative, les développeurs peuvent choisir une solution propriétaire ou écrire leur propre module logiciel.