Article de reference

Logiciel

Logiciel écrit en langage JavaScript Les logiciels (SW) sont constitués de programmes informatiques qui donnent des instructions à l' exécution d'un ordinateur . Les logiciels c...

Page semi-protégée
Logiciel écrit en langage JavaScript

Les logiciels (SW) sont constitués de programmes informatiques qui donnent des instructions à l' exécution d'un ordinateur . Les logiciels comprennent également les documents de conception et les spécifications.

L'histoire du logiciel est étroitement liée au développement des ordinateurs numériques au milieu du XXe siècle. Les premiers programmes étaient écrits en langage machine, spécifique au matériel. L'introduction des langages de programmation de haut niveau en 1958 a permis d'utiliser des instructions plus lisibles par l'humain, simplifiant ainsi le développement logiciel et assurant une meilleure portabilité entre les différentes architectures informatiques . Un logiciel écrit dans un langage de programmation est exécuté par un compilateur ou un interpréteur sur le matériel de l'architecture. Au fil du temps, les logiciels sont devenus complexes, notamment grâce aux progrès réalisés dans les domaines des réseaux , des systèmes d'exploitation et des bases de données .

Les logiciels peuvent généralement être classés en deux grandes catégories :

  1. les systèmes d'exploitation , qui gèrent les ressources matérielles et fournissent des services aux applications
  2. logiciel d'application , qui effectue des tâches spécifiques pour les utilisateurs

L'essor du cloud computing a introduit un nouveau modèle de distribution de logiciels : le logiciel en tant que service (SaaS). Dans le SaaS, les applications sont hébergées par un fournisseur et accessibles via Internet .

Le développement logiciel comprend plusieurs étapes : conception , programmation , tests , mise en production et maintenance . L’assurance qualité et la sécurité sont des aspects essentiels du développement logiciel, car les bogues et les failles de sécurité peuvent entraîner des pannes système et des atteintes à la sécurité. Par ailleurs, les questions juridiques telles que les licences logicielles et les droits de propriété intellectuelle jouent un rôle important dans la distribution des logiciels.

John Wilder Tukey en 1958. Les premiers ordinateurs programmables, apparus à la fin des années 1940, étaient programmés en langage machine . Le langage machine est difficile à déboguer et non portable d'un ordinateur à l'autre. Initialement, les ressources matérielles étaient plus coûteuses que les ressources humaines . À mesure que les programmes se complexifiaient, la productivité des programmeurs devenait un facteur limitant. L'introduction des langages de programmation de haut niveau en 1958 a permis de masquer les détails du matériel et d'exprimer les algorithmes sous-jacents dans le code. Parmi les premiers langages figurent Fortran , Lisp et COBOL .

Types

Un schéma illustrant l'interaction de l' utilisateur avec un logiciel d'application sur un ordinateur de bureau classique . La couche logicielle d'application interagit avec le système d'exploitation , qui communique ensuite avec le matériel . Les flèches indiquent le flux d'informations.

Il existe deux principaux types de logiciels :

  • Les systèmes d'exploitation sont « la couche logicielle qui gère les ressources d'un ordinateur pour ses utilisateurs et leurs applications ». Un système d'exploitation remplit trois objectifs principaux :
    • Répartition des ressources entre différentes applications, en décidant quand elles recevront du temps d'unité centrale de traitement (CPU) ou de l'espace en mémoire .
    • Fournir une interface qui masque les détails d'accès au matériel (comme la mémoire physique) afin de simplifier la tâche des programmeurs.
    • Il offre des services communs, tels qu'une interface d'accès aux périphériques réseau et disque. Cela permet à une application de s'exécuter sur différents matériels sans avoir besoin d'être réécrite.
  • Les logiciels d'application s'exécutent sur le système d'exploitation et utilisent les ressources de l'ordinateur pour réaliser une tâche. Il existe de nombreux types de logiciels d'application, car la gamme de tâches réalisables avec les ordinateurs modernes est très vaste. Les applications représentent la majorité des logiciels et nécessitent l' environnement fourni par un système d'exploitation, et souvent d'autres applications, pour fonctionner.
Comparaison des solutions matérielles et logicielles sur site, de l'infrastructure en tant que service (IaaS), de la plateforme en tant que service (PaaS) et du logiciel en tant que service (SaaS)

Les logiciels peuvent également être catégorisés selon leur mode de déploiement . Les applications traditionnelles sont achetées avec une licence perpétuelle pour une version spécifique du logiciel, téléchargées et exécutées sur le matériel appartenant à l'acheteur. L'essor d' Internet et du cloud computing a permis l'émergence d'un nouveau modèle, le logiciel en tant que service (SaaS), dans lequel le fournisseur héberge le logiciel (généralement construit sur une infrastructure ou des plateformes louées ) et en propose l'utilisation aux clients, souvent moyennant un abonnement . Dès 2023, les produits SaaS, généralement distribués via une application web , étaient devenus le principal mode de distribution d'applications pour les entreprises.

Développement et maintenance

Diagramme illustrant un cycle de vie de développement logiciel traditionnel datant de 1988. Les chiffres représentent le coût typique de chaque phase.

Les entreprises de logiciels visent à livrer un produit de haute qualité dans les délais et le budget impartis. L'estimation des efforts de développement logiciel est souvent imprécise, ce qui constitue un défi majeur. Le développement logiciel commence par la conception du projet, l'évaluation de sa faisabilité, l'analyse des besoins métier et la conception du logiciel . La plupart des projets logiciels accélèrent leur développement en réutilisant ou en intégrant des logiciels existants, qu'il s'agisse de logiciels commerciaux sur étagère (COTS) ou de logiciels libres . L'assurance qualité logicielle repose généralement sur une combinaison de revues de code manuelles effectuées par d'autres ingénieurs et de tests logiciels automatisés . En raison des contraintes de temps, les tests ne peuvent pas couvrir tous les aspects des fonctionnalités prévues du logiciel ; les développeurs se concentrent donc souvent sur les fonctionnalités les plus critiques. Des méthodes formelles sont utilisées dans certains systèmes critiques pour la sécurité afin de prouver la correction du code, tandis que les tests d'acceptation utilisateur contribuent à garantir que le produit répond aux attentes des clients. Il existe diverses méthodologies de développement logiciel , allant de l'exécution séquentielle de toutes les étapes à des modèles concurrents et itératifs. Le développement logiciel est piloté par les exigences des utilisateurs potentiels, contrairement à la maintenance, qui est pilotée par des événements tels qu'une demande de modification.

Il arrive fréquemment que des logiciels soient mis sur le marché de manière incomplète, faute de temps ou de financement pour l'équipe de développement. Malgré les tests et l'assurance qualité , la quasi-totalité des logiciels contiennent des bogues qui empêchent le système de fonctionner comme prévu. La maintenance logicielle post-mise en production est indispensable pour corriger ces bogues dès leur détection et assurer la compatibilité du logiciel avec l'évolution de l'environnement. De nouvelles fonctionnalités sont souvent ajoutées après la mise en production. Au fil du temps, le niveau de maintenance se restreint progressivement avant d'être totalement interrompu lors du retrait du produit du marché. Avec le temps , un logiciel devient un logiciel « legacy » et peut rester utilisé pendant des décennies, même si plus personne ne sait comment le réparer. Sur l'ensemble du cycle de vie du produit, la maintenance logicielle représente environ 75 % du coût total de développement, voire plus.

La réalisation d'un projet logiciel requiert diverses expertises, non seulement en programmation, mais aussi en tests, rédaction de documentation, gestion de projet , conception graphique , expérience utilisateur , support utilisateur, marketing et levée de fonds.

Qualité et sécurité

La qualité logicielle se définit par la conformité aux exigences spécifiées et aux attentes des clients. La qualité est un terme générique qui peut désigner le comportement correct et efficace d'un code, sa réutilisabilité et sa portabilité , ou encore sa facilité de modification. Il est généralement plus rentable d'intégrer la qualité au produit dès sa conception plutôt que de tenter de l'ajouter ultérieurement au cours du développement. Un code de meilleure qualité réduit le coût total de possession pour les fournisseurs et les clients, car il est plus fiable et plus facile à maintenir . Les défaillances logicielles dans les systèmes critiques peuvent entraîner des dommages graves, voire mortels. Selon certaines estimations, le coût d'un logiciel de mauvaise qualité peut représenter entre 20 et 40 % du chiffre d'affaires. Malgré l'objectif des développeurs de livrer un produit parfaitement fonctionnel, la quasi-totalité des logiciels contiennent des bogues.

L'essor d'Internet a considérablement accru le besoin de sécurité informatique , car il a permis à des acteurs malveillants de mener des cyberattaques à distance. Si un bug crée un risque pour la sécurité, on parle de vulnérabilité . Des correctifs logiciels sont régulièrement publiés pour corriger les vulnérabilités identifiées, mais celles qui restent inconnues ( failles zero-day ) ainsi que celles qui n'ont pas été corrigées demeurent exploitables. Le potentiel d' exploitation des vulnérabilités par des acteurs malveillants varie, et le risque réel dépend de la nature de la vulnérabilité ainsi que de la valeur du système concerné. Si certaines vulnérabilités ne peuvent être utilisées que pour des attaques par déni de service (DoS ) compromettant la disponibilité d'un système, d'autres permettent à l'attaquant d' injecter et d'exécuter son propre code ( logiciel malveillant ), à l'insu de l'utilisateur. Pour contrer les cyberattaques, tous les logiciels du système doivent être conçus pour résister aux attaques externes et s'en remettre. Malgré les efforts déployés pour assurer la sécurité, une part importante des ordinateurs sont infectés par des logiciels malveillants.

Encodage et exécution

Langages de programmation

Voici le code source d'un programme informatique en C. Les lignes grises sont des commentaires qui expliquent le programme aux humains. Une fois compilé et exécuté , il affichera « Hello, world! ».

Les langages de programmation sont le format dans lequel les logiciels sont écrits. Depuis les années 1950, des milliers de langages de programmation différents ont été inventés ; certains sont utilisés depuis des décennies, tandis que d’autres sont tombés en désuétude. Certaines définitions classent le code machine — les instructions exactes directement implémentées par le matériel — et le langage assembleur — une alternative plus lisible par l’humain au code machine, dont les instructions peuvent être traduites un à un en code machine — comme des langages de programmation. Les programmes écrits dans les langages de programmation de haut niveau utilisés pour créer des logiciels partagent quelques caractéristiques principales : la connaissance du code machine n’est pas nécessaire pour les écrire, ils peuvent être portés sur d’autres systèmes informatiques et ils sont plus concis et plus lisibles par l’humain que le code machine. Ils doivent être à la fois lisibles par l’humain et capables d’être traduits en instructions non ambiguës pour le matériel informatique.

Compilation, interprétation et exécution

L'invention des langages de programmation de haut niveau a été simultanée à celle des compilateurs nécessaires à leur traduction automatique en code machine. La plupart des programmes ne contiennent pas toutes les ressources nécessaires à leur exécution et dépendent de bibliothèques externes . Une des fonctions du compilateur est de lier ces fichiers de manière à ce que le programme puisse être exécuté par le matériel. Une fois compilé, le programme peut être enregistré sous forme de fichier objet , et le chargeur (composante du système d'exploitation) peut alors prendre ce fichier et l'exécuter comme un processus sur le matériel informatique. Certains langages de programmation utilisent un interpréteur au lieu d'un compilateur. Un interpréteur convertit le programme en code machine à l'exécution , ce qui les rend 10 à 100 fois plus lents que les langages compilés.

Questions juridiques

Responsabilité

la responsabilité des produits logiciels est considérablement réduite par rapport à celle des autres produits.

Licences

Blender , un logiciel libre

Depuis le milieu des années 1970, les logiciels et leur code source sont protégés par le droit d'auteur , qui confère au titulaire des droits le droit exclusif de copier ce code. Les idées ou algorithmes sous-jacents ne sont pas protégés par le droit d'auteur, mais sont parfois considérés comme un secret commercial et protégés par des accords de confidentialité, notamment . Le droit d'auteur d' un logiciel appartient souvent à la personne ou à l'entreprise qui l'a financé ou créé (selon les contrats passés avec les employés ou les sous-traitants ayant contribué à son développement). Certains logiciels sont dans le domaine public et leur utilisation, leur copie, leur partage et leur modification ne sont soumis à aucune restriction ; les logiciels développés par le gouvernement des États-Unis en sont un exemple notable . Les logiciels libres et open source permettent également une utilisation, un partage et une modification libres, éventuellement sous certaines conditions. L'utilisation de certains logiciels est régie par un contrat ( licence logicielle ) rédigé par le titulaire des droits d'auteur et imposé à l'utilisateur. Les logiciels propriétaires sont généralement vendus sous une licence restrictive qui limite leur utilisation et leur partage. Certaines licences de logiciels libres exigent que les versions modifiées soient publiées sous la même licence, ce qui empêche la vente ou la distribution du logiciel sous des restrictions propriétaires.

Brevets

Les brevets confèrent à l'inventeur une licence exclusive et limitée dans le temps pour un produit ou un procédé novateur. Les idées relatives aux fonctionnalités potentielles d'un logiciel ne sont pas protégées par la loi ; ce sont les implémentations concrètes qui relèvent du droit d'auteur . Dans certains pays, l'obtention d'un brevet logiciel peut également être conditionnée par l'existence d'un effet physique sur l'invention revendiquée. Les brevets logiciels ont toujours suscité la controverse . Avant l'arrêt State Street Bank & Trust Co. v. Signature Financial Group, Inc. de 1998 , les brevets logiciels n'étaient généralement pas reconnus aux États-Unis. Dans cette affaire, la Cour suprême a statué que les processus métier pouvaient être brevetés. Les demandes de brevet sont complexes et coûteuses, et les litiges en matière de brevets peuvent faire grimper le prix des produits. Contrairement aux droits d'auteur, les brevets ne s'appliquent généralement que dans le pays où ils ont été délivrés.

Impact

Les simulations générées par ordinateur constituent l'une des avancées rendues possibles par les logiciels.

L’ingénieur Capers Jones écrit que « les ordinateurs et les logiciels transforment profondément tous les aspects de la vie humaine : l’éducation, le travail, la guerre, les loisirs, la médecine, le droit et bien d’autres choses encore » . Ils sont devenus omniprésents dans la vie quotidienne des pays développés . Dans de nombreux cas, les logiciels augmentent les fonctionnalités des technologies existantes, comme les appareils électroménagers et les ascenseurs . Les logiciels ont également donné naissance à des technologies entièrement nouvelles, telles qu’Internet , les jeux vidéo , les téléphones mobiles et le GPS [ . De nouveaux modes de communication, notamment le courrier électronique , les forums , les blogs , le microblogage , les wikis et les médias sociaux , ont été rendus possibles par Internet bien supérieure à celle de n’importe quelle bibliothèque papier, est désormais accessible en quelques clics sur le Web . La plupart des professionnels de la création utilisent désormais des outils logiciels tels que la conception assistée par ordinateur (CAO) , la modélisation 3D , la retouche d’images numériques et l’animation par ordinateur . Presque tous les dispositifs complexes sont contrôlés par logiciel.