mercredi 2 avril 2008

Logiciel

Le logiciel désigne la partie à première vue immatérielle de l'informatique, l'organisation et le traitement de l'information : les programmes. On s'est en effet vite rendu compte que des machines techniquement très avancées pour leur époque, comme la Bull Gamma 60, restaient invendables tant qu'on n'avait pas de programmes à livrer pour les rendre immédiatement opérationnelles. IBM lança entre 1968 et 1973 une sorte d'ancêtre du logiciel libre avec son ordinateur 1130, politique qui assura à celui-ci par effet boule de neige un succès immédiat et planétaire, mais les conclusions d'un procès antitrust lui interdirent de distribuer bénévolement du logiciel.

Le monde des mainframes classe les logiciels en catégories suivantes :

  • systèmes d'exploitation ;
  • bases de données, comme DB2, Ingres ou Oracle ;
  • programmes de communication, comme NCP ou RSCS ;
  • moniteurs de télétraitement ;
  • systèmes transactionnels, comme CICS ou openUTM ;
  • systèmes de temps partagé, utilisés pour le calcul ou le développement ;
  • compilateurs traduisant les langages en instructions machine et appels système ;
  • tout le reste entrait en une catégorie nommée Logiciels applicatifs.

Plus simplement on distingue généralement trois types de logiciels (par ordre de proximité du matériel) :

On classe aussi les logiciels en libre et propriétaire, bien que les deux soient parfois panachés à des degrés divers. Certains ont une fonction bureautique ou multimédia comme par exemple les jeux vidéo. Certains logiciels ont acquis des noms connus de tous.

Le noyau du système d'exploitation crée le lien entre le matériel et le logiciel. Un logiciel, quand il est fourni sous sa forme binaire, serait utilisable uniquement avec un système d'exploitation donné (car il en utilise les services), et ne fonctionnerait que sur un matériel spécifique (car il en utilise le code d'instructions). Une conception plus récente, depuis le milieu de années 1980, consiste à distribuer les logiciels tous binaires confondus, et à les munir d'un système de licences par jetons ou tokens permettant l'usage de N copies simultanées du logiciel sur le réseau, tous matériels confondus. Cette approche est majoritaire dans le monde UNIX.

À l'initiative de Richard Stallman et du GNU, à partir de 1985, une mouvance de programmeurs refuse cette logique propriétaire et ceux-ci se muent en concepteurs inventifs pour se lancer dans le développement d'outils et de bibliothèques système libres et compatibles avec le système UNIX. C'est pourtant le projet indépendant Linux, initié par Linus Torvalds, basé sur les travaux et les outils du GNU, qui aboutira dans la création d'un système d'exploitation complet et libre appelé GNU/Linux.

Une bonne partie des logiciels actuels fonctionnent dans un environnement graphique pour interagir avec l'utilisateur. La diversité des systèmes informatiques a fait apparaître une technique visant à combiner le meilleur de chacun de ces univers : l'émulateur. Il s'agit d'un logiciel permettant de simuler le comportement d'un autre système dans celui que l'on utilise,

  • soit pour qu'une machine semble être une autre (voir IBM 1130),
  • soit pour simuler le comportement d'un système d'exploitation (par exemple DOS ou Windows sous GNU/Linux).

Le terme anglais est software, à l'origine un jeu de mot entre hardware (« quincaillerie », pour désigner le matériel) et l'opposition soft/hard (mou/dur), opposition entre le matériel (le dur) et l'immatériel (le mou). Les traductions françaises matériel et logiciel rendent parfaitement cette opposition et cette complémentarité.

Le logiciel réalise normalement une fonction attendue de ses utilisateurs. Néanmoins, des effets secondaires (parfois nommés par contresens de traduction effets de bord) existent. Parfois même, certains logiciels sont destinés à nuire, comme les virus informatiques, nommés en anglais, par analogie avec software : malware (qu'on pourrait traduire par le néologisme nuisiciel, ou logiciel malveillant).

La création des logiciels

Un projet informatique s'inscrit dans un cycle de développement qui définit les grandes étapes de la réalisation (planification), de la manière dont on passe d'une étape à l'autre (modèle incrémental, en V, en spirale, méthode up, extreme programming, etc.). Pour les petits projets (ou les petites équipes de développement), cette réflexion est souvent négligée (on se répartit les modules et chacun développe dans son coin). Ceci est une cause fréquente d'erreurs (bogues) et de non-conformité (le produit final n'est pas conforme aux attentes de l'utilisateur). Mais même les énormes projets, avec beaucoup de moyens, sont victimes de cette négligence ; ainsi, l'échec du premier vol d'Ariane 5 fut dû à un problème de logiciel, etc. Un projet peut alors intégrer une approche de la qualité et de la sûreté de fonctionnement des systèmes informatiques afin de contrôler autant que possible le produit final.

Un projet comprend les étapes suivantes (selon le modèle incrémental) :

  • l'établissement d'un cahier des charges qui définit les spécifications auxquelles devra répondre le logiciel ;
  • la définition de l'environnement d'exécution (architecture informatique) :
    • type(s) d'ordinateur sur lequel le logiciel doit fonctionner (station de calcul, ordinateur de bureau, ordinateur portable, assistant personnel, téléphone portable, guichet automatique de banque, ordinateur embarqué dans un véhicule ;
    • type et version du(des) système(s) d'exploitation sous-jacent ;
    • périphériques nécessaires à l'enregistrement des données et à la restitution des résultats (capacité de stockage, mémoire vive, possibilités graphiques...) ;
    • nature des connexions réseau entre les composants (niveau de confidentialité et de fiabilité, performances, protocoles de communication...) ;
  • la conception de l'application et de ses constituants, et notamment de l'interactivité entre les modules développés : structure des données partagées, traitement des erreurs générées par un autre module... : c'est le domaine du génie logiciel ;
  • la mise en place d'une stratégie de développement :
    • répartition des tâches entre les développeurs ou les équipes de développement, qui vont assurer le codage et les tests ;
  • le plan de test du logiciel, pour s'assurer qu'il remplit bien la mission pour laquelle il a été écrit, dans toutes les conditions d'utilisation qu'il pourra normalement rencontrer, mais aussi dans des cas limites.

Après chacune de ces phases, on peut avoir une étape de recette, où le client va valider les choix et les propositions du maître d'œuvre.

La phase de programmation consiste à décrire le comportement du logiciel à l'aide d'un langage de programmation. Un compilateur sert alors à transformer ce code écrit dans un langage informatique compréhensible par un humain en un code compréhensible par la machine, le résultat est un exécutable. On peut également, pour certains langages de programmation, utiliser un interpréteur qui exécute un code au fur et à mesure de sa lecture, sans nécessairement créer d'exécutable. Enfin, un intermédiaire consiste à compiler le code écrit vers du bytecode. Il s'agit également d'un format binaire, compréhensible seulement par une machine, mais il est destiné à être exécuté sur une machine virtuelle, un programme qui émule les principales composantes d'une machine réelle. Le principal avantage par rapport au code machine est une portabilité théoriquement accrue (il « suffit » d'implanter la machine virtuelle pour une architecture donnée pour que tous les programmes en bytecode puissent y être exécutés), portabilité qui a fait, après sa lenteur, la réputation de Java. Il convient de noter que ces trois modes d'exécution ne sont nullement incompatibles. Par exemple, OCaml dispose à la fois d'un interpréteur, d'un compilateur vers du bytecode, et d'un compilateur vers du code natif pour une grande variété de processeurs. Une fois écrit (et compilé si nécessaire), le code devient un logiciel.

Pour des projets de grande amplitude, nécessitant la collaboration de beaucoup de programmeurs, voire de plusieurs équipes, on a souvent recours à une méthodologie commune (par exemple MERISE) pour la conception et à un atelier de génie logiciel (AGL) pour la réalisation.

Au cours de la programmation et avant la livraison du produit final, le programme est testé afin de vérifier qu'il fonctionne bien (y compris dans des cas d'utilisation en mode dégradé) et qu'il est conforme aux attentes de l'utilisateur final. Les tests intermédiaires permettent de s'assurer que chaque module de code réalise correctement une fonction : ce sont les tests unitaires. Les tests finals qui vérifient le bon enchaînement des modules et des traitements sont des tests d'intégration.

Pour certaines applications demandant un haut niveau de sûreté de fonctionnement, les tests sont précédés d'une étape de vérification, où des logiciels spécialisés effectuent (généralement sur le code source, mais parfois aussi sur le code compilé) un certain nombre d'analyses pour vérifier partiellement le bon fonctionnement du programme. Il n'est toutefois pas possible (et des théorèmes mathématiques montrent pourquoi), de garantir la parfaite correction de tout logiciel par ce moyen et la phase de test reste donc nécessaire. Elle se complète aussi, lorsqu'il s'agit d'une évolution d'une application existante, de nombreux tests automatisés de non-régression. Les tests non plus ne pouvant pas garantir totalement l'absence d'erreurs, il est bon de les compléter par des phases de vérification par relecture : des techniques existent pour essayer de rendre cette vérification exhaustive.

Statistiques : la création d'un logiciel est une tâche ardue ; environ 31% des projets informatiques sont abandonnés avant d'être terminés, plus de 50% des projets coûtent le double du coût initialement estimé et seulement 15% des projets finissent dans les temps et selon le budget défini. Les besoins de seule maintenance de l'existant peuvent prendre jusqu'à 50% des effectifs d'une équipe chargée d'un logiciel (or, c'est là une fonction pénible, ingrate, peu valorisante et qui rebute et démotive souvent les bons programmeurs).

Toutefois avec l'utilisation de méthodes comme la méthode UP ou l'extreme programming, ces statistiques ont tendance à s'améliorer. Notamment, grâce à un développement par itérations successives où les phases d'analyse, de conception, de réalisation et de test se répètent plusieurs fois pendant la durée de vie du projet et produisent à chaque fois un produit exécutable. Le client peut après chacune des itérations "tester" le produit et donner son avis. Ces méthodes permettent ainsi une meilleure gestion des coûts et surtout de la qualité tout en réduisant fortement les risques de non conformité avec les souhaits du client.

Traitement de l'information

L'information, pour être traitée, doit être :
représentée par un codage :
on utilise un système de numération
binaire, où l'élément unitaire informationnel est le bit (contraction de l'anglais binary digit : chiffre binaire). Les bits sont généralement regroupés par huit, pour constituer des octets (ou bytes). Un octet peut être représenté par la séquence des bits qui le constituent (par exemple : 00101110) ou par une paire de valeurs hexadécimales (pour le même exemple : 2E), plus compact. Le choix du binaire ne résulte pas de la mystique, mais tout simplement d'utiliser de simples circuits de commutation, qui ont de très larges tolérances et par conséquent de faibles coûts ;
on représente la structuration de l'information pour permettre des échanges entre composants logiciels et entre composants matériels. Pour cela, on définit des langages et des formalismes de représentation.
stockée dans des systèmes permanents (mémoires dites de masse) ou non (mémoires dites volatiles).

Échanges de données : protocoles et normes

Les protocoles définissent une manière de procéder, notamment pour codifier la façon dont deux entités communiquent (modules ou couches logicielles, périphériques, etc.). On parle notamment de protocole de communication lorsqu'on veut définir des mécanismes de contrôle sur la manière dont l'échange d'information est réalisé.

Un protocole peut ainsi définir :

  • un langage de description d'instructions et de données graphiques (exemple : AGP) ;
  • un standard de commandes et de flux d'information pour une mémoire de masse (exemples : SCSI, FireWire, IDE, Serial ATA) ;
  • des échanges entre le processeur et des cartes d'extension (exemples : PCI, PCI Express, ISA) ;
  • des modalités de transfert d'information entre périphériques (exemple : USB) ou sur un réseau TCP/IP, Internet, ATM, X.25) ;
  • des commandes entre un client et un serveur (exemples : POP3, IMAP, HTTP, FTP …) ;
  • des échanges de données informatisés spécifiques (exemples : EDI, EAI, X.400, X.500).

Certains protocoles sont définis par des normes pour permettre l'interopérabilité des matériels ou de logiciels les mettant en œuvre. D'autres normes définissent, toujours dans le domaine de l'échanges de données :

  • des langages de représentation d'information sans pour autant définir la manière dont cette information peut être échangée (exemples : ASN.1, XML) ;
  • des architectures de réseaux (exemples : Modèle OSI, WiFi, Ethernet, Token-Ring).

Stockage des données

En matière de stockage d'information, on distingue le dispositif permettant de l'enregistrer physiquement (périphériques et composants) de la manière dont on structure et représente l'information pour faciliter son traitement.

Mémoire de masse
Mémoire volatile
Organisation des données en vue du stockage

La distribution de matériels et logiciels informatique

Historiquement l'informatique a été distribuée (revendue) par les grands constructeurs qui traitaient en direct avec leurs clients ; la plupart de ceux-ci étant des grands comptes ou des organismes publics. Au fur et à mesure de la baisse des prix des systèmes, le marché s'est élargi, obligeant les constructeurs à se structurer pour mieux diffuser leur produit et à s'appuyer sur des partenaires. Ces partenaires étaient au départ mono-marque et travaillaient souvent sous la forme d'agent semi-exclusif puis ils se sont transformés au fil du temps en revendeurs indépendants multi-marques.

Aujourd'hui la distribution des produits informatiques est faite sous la forme de multiples canaux de distribution, parmi lesquelles on compte la vente directe, le e-commerce, les chaînes de revendeurs, les groupements de revendeurs, la vente par correspondance.

Les grossistes informatiques ont un rôle clef dans la distribution informatique et sont un point de passage quasi obligé pour les sociétés qui ont choisi la vente indirecte (par un réseau de revendeurs). Les grossistes, qu'ils soient généralistes ou spécialisés, adressent la multitude de petits points de vente ou les sociétés de service pour lesquelles l'activité de négoce représente un volume d'activité faible.

La France compte environ 40 000 sociétés informatiques et télécoms dont près de 15 000 ont une activité de distribution.

Il faut noter que si le nombre de sociétés distribuant des produits informatique ne cessent de s'étendre cela l'est beaucoup plus au profit de la distribution structurée visant le grand public que des revendeurs indépendants dont le nombre ne cesse de décroitre et dont l'activité se tourne de plus en plus vers la notion de société de service informatique comme les SSII

Différentes catégorie d’ordinateurs

Les ordinateurs peuvent devisés en quatre catégories :

Les ordinateurs de poche :

Ils présentent la forme prémetive d’un ordinateur car leur champs d’application est limité (calcul ; stockage simple …) la calculatrice est un exemple de ce type d’ordinateur


Les micros – ordinateurs :

Ce sont les plus répondus au marché informatique, ils sont très utilisés on bureautiques a cause de leurs performance moyenne.



Les minis – ordinateurs :

Il sont plus puissant que les micros ordinateurs, vitesse de traitement et capacité de stockage, il permet d’exécuter plusieurs taches en même temps, en dit que se sont des systèmes multi taches.



Les super ordinateurs :

Ce sont des ordinateurs très puissant, ils reflètent le niveau technologie des pays qui les possède, ils sont comptés au bous de doits a travers le monde, parmi les quelle le super ordinateur CRAY 1