lundi 24 février 2025

Algorithmes, architectures, technologies pour les logiciels

La conception des logiciels inclut des choix relatifs à leurs algorithmes, architectures, technologies. Leur objectif est que les logiciels répondent au mieux aux caractéristiques attendues.

Les logiciels sont proposés sur le marché ou utilisés en interne. Les choix portent sur tous les logiciels de l’entreprise ou sur une partie d’entre eux.

Les algorithmes à choisir ou à concevoir sont parfois très complexes. Ils sont standard ou sur mesure.

Leur objectif est que les logiciels fournissent des réponses pertinentes dans les délais prévus, que leurs temps de traitement soient optimisés, compte tenu des caractéristiques de leur environnement technique d'exécution. On cherche à réduire le nombre des opérations élémentaires à réaliser, ainsi que la taille mémoire nécessaire, sans dégrader la pertinence des résultats.

Le choix des algorithmes est fondamental dans des domaines tels que l'IA, la sécurité numérique, la recherche. Les logiciels d’intelligence artificielle sont en général fondés sur une association d’algorithmes : apprentissage automatique, raisonnement automatisé, exploration d’arborescences (GOFAI – good old-fashioned artificial intelligence). 

Compression/décompression

Les algorithmes de compression/décompression sont choisis sur la base des taux de compression, de la qualité de la compression(avec ou sans perte dinformation), du temps de compression attendus.

Chiffrement/déchiffrement

Les algorithmes de chiffrement/déchiffrement se caractérisent par la difficulté à les casser, leur consommation de puissance machine, leur rapidité.

Optimisation

Des algorithmes comme minimax, l'élagage alpha-bêta, permettent de résoudre, ou d’aider à résoudre, des problèmes d’optimisation combinatoire. Ils se caractérisent par exemple par la complétude de la recherche arborescente, la pertinence de la réponse trouvée au regard du délai de recherche.

La complexité est parfois trop grande pour qu'il soit possible d'explorer toutes les possibilités de choix dans un délai acceptable. Des algorithmes comme ceux de Las Vegas, de Monte Carlo, d'Atlantic City, permettent dans une partie des cas de trouver des solutions acceptables dans le délai attendu.

Reconnaissance de l'image, des sons

Les critères de choix des algorithmes de reconnaissance de l'image, des sons… sont en général relatifs au pourcentage d’erreurs (faux positifs ou faux négatifs).

La reconnaissance des images s'appuie sur le deep learning.

Traitement du langage naturel

Des algorithmes sont utilisés pour le traitement du langage naturel : analyse sémantique, traduction dans un autre langage naturel, dialogue automatique, génération automatique de textes, correction orthographique, syntaxique, recherche d'informations dans les textes, classification des textes...

Ils peuvent nécessiter l’utilisation de dictionnaires, de grammaires. Certains d’entre eux s’appuient sur des modèles de langage.

Ils se heurtent aux ambiguïtés, à la polysémie, aux dépendances par rapport au contexte, à l’inexistence d’une grammaire exhaustive, d’une syntaxe parfaitement définie, d’un lexique fermé.

Ils se caractérisent par la pertinence des réponses : nombre d’erreurs, qualité de la traduction, des textes générés

Raisonnement automati

Les algorithmes utilisés se caractérisent par la pertinence des réponses, le nombre d’erreurs de raisonnement…

Modélisation mathématique des données

Les algorithmes d'apprentissage automatique permettent à un logiciel de calculer automatiquement un modèle, c’est-à-dire les paramètres à appliquer pour une fonction (entraînement), à partir d'un ensemble de données (observations, résultats attendus…). L’apprentissage est supervisé ou non.

L'apprentissage automatique est appliqué à des réseaux de neurones artificiels. Des choix sont à faire sur l’architecture de ces réseaux : nombre de neurones, de couches, réseaux convolutifs...

Si le réseau est multicouches, l'apprentissage est dit profond (deep learning).

Les algorithmes se caractérisent par la pertinence de l’apprentissage, évaluée à partir de tests du modèle obtenu.

Simulation numérique

Les fonctions de simulation de vol, par exemple, fonctionnent sur la base d'un modèle de vol fondé sur les équations de l'aérodynamique.

Jeux numériques

Des algorithmes de recherche arborescente sont utilisables pour les jeux.

Le programme AlphaGo utilise des algorithmes de deep learning.

Pilotage des robots, des moyens de transport

Le pilotage des véhicules autonomes a besoin d'algorithmes de traitement de l'image (pour analyser son environnement), de décision relative aux itinéraires, au pilotage (arbres de décision...).

Un logiciel de grande taille est en général difficile à développer, à maintenir, à faire évoluer. Un des objectifs des choix d’architecture des logiciels est de les structurer en composants, internes ou d’origine externe, de façon qu’ils soient plus maîtrisables, qu’une mise au point progressive soit possible, que les composants présentent une bonne cohésion fonctionnelle et soient faiblement couplés, que des composants standard soient utilisables.

Chaque composant à développer est susceptible d'être affecté à une équipe, ou une personne.

Des architectures, des composants logiciels standard sont fournis avec les OS, ou avec des frameworks, comme Hadoop, les serveurs d'applications.

Architectures monolithiques

Ce type d'architecture est classiquement retenu pour les logiciels de petite taille. Un seul programme traite toutes les fonctions attendues, gère les données.

Architectures en appels et retours

Architectures logicielles fondées sur le découpage d'une fonctionnalité en sous-fonctionnalités, puis en sous-sous-fonctionnalités...

Architectures orientées services (SOA)

Dans ces architecturesles composants logiciels sont structurés en éléments fournissant des services à d'autres composants, ou à des utilisateurs (applications front end). Les interfaces d’utilisation des services sont indépendantes de la structure interne des composants. Les services sont publiés. Des fonctions de recherche des services sont mises à disposition. Des protocoles sont mis à disposition pour l'invocation du service (connexion et interaction). A chaque service est associé un contrat, définissant les fonctionnalités offertes, les temps de réponse garantis. Les composantsappartiennent à l'entreprise ou sont mis à sa disposition par des tiers, fonctionnent sur le même équipement ou sur des équipements différents.

La cohérence interne de l'architecture est forte. Un format d'échange pivot est souvent utilisé par l'entreprise, par exemple XML.

Architectures orientées événements

Dans ces architectures, un composant ayant réalisé une activité crée un événement, et le transmet à un gestionnaire d’événements. Le gestionnaire le transmet de façon asynchrone, aux composants qui se sont abonnés à ce type d’événements. Les composants intéressés analysent les événements créés et les traitent s’il y a lieu.

Les composants ne répondent pas directement à des sollicitations d’autres composants, comme dans les architectures SOA.

Architectures orientées objets

Dans les architectures orientées objet, les composants logiciels sont des objets, c’est-à-dire des « briques » logicielles rassemblant la descriptiontechnique des données relatives à un sujet et les traitements (méthodes) réalisés à partir de ces données. Ce sont des entités identifiables, encapsulées, fournissant des services. Des patrons de conception (design patterns), des frameworks sont utilisables pour construire le logiciel. Ce type d’architecture réduit les délais et les coûts de développement, les coûts de maintenance.

Par rapport aux autres types d'architectures des logiciels, les architectures orientées objets facilitent la réutilisation, permettent un cycle de vie itératif, la structuration du logiciel, un haut niveau d'abstraction, offrent des facilités d'extension. Elles sont modulaires.

Architectures en couches

Les fonctions des logiciels sont souvent réparties en couches. Les couches supérieures appellent des fonctions des couches inférieures. Ce type d’architecture facilite les modifications du logiciel.

Pour un logiciel applicatif, les couches correspondant aux architectures trois tiers sont par exemple :

– présentation (entrées/sorties, interaction physique et logique, contrôle du dialogue) ;

– opérations arithmétiques et logiques ;

– stockage et accès aux données permanentes.

Pour un OS, les couches sont par exemple :

– interface utilisateur, interpréteur de commandes permettent à l’utilisateur d’accéder aux fonctions qui lui sont offertes ;

– allocation des ressources (planification du travail) ;

– gestion des fichiers ;

– organisation des entrées/sorties ;

– gestion de la mémoire ;

– noyau : gestion des processus, gestion des interruptions, allocation du CPU.

Architectures orientées agents

Dans ces architectures les composants logiciels sont des agents. Elles sont adaptées aux architectures SOA, aux systèmes nécessitant une prise de décision distribuée (souvent sous incertitude), à la planification et l’ordonnancement en temps réel, aux robots autonomes coopératifs, aux jeux vidéo massivement multijoueurs. 

Microservices

Style d'architecture logicielle, à base de petits services autonomes, peu couplés entre eux. Évolution de l’architecture orientée services.

Il est en général prévu que chaque microservice gère ses données de façon indépendante. Cela complexifie considérablement le maintien en cohérence des données fonctionnellement associées. Le principe de cohérence absolue (« absolute consistency ») des SGBD est mis en cause, remplacé par un principe de cohérence finale (« eventual consistency »).

Langages de programmation

Les programmes sources sont écrits directement, ou générés automatiquement à partir d’un langage synthétique, d’outils s’appuyant sur l’IA. Des langages de programmation sont à choisir. Un bon langage doit être clair, concis, sûr (fiable, robuste, peu sujet à erreurs), modulaire, portable, efficace, facile à maintenir et à tester, productif, performant. L’existence d’une bibliothèque de composants logiciels est un atout. La nature du langage a un impact sur le nombre d’erreurs de programmation, sur la difficulté de compréhension d’un programme existant.

Il existe actuellement plus de 600 langages de programmation. Le choix du langage dépend notamment des caractéristiques des programmes à écrire (nature des fonctions, taille des programmes, environnement d'exécution cible), de la culture technique de l’organisation, des autres choix d’architecture et de conception.

Le langage choisi doit permettre d’écrire simplement et naturellement les instructions correspondant aux spécifications des programmes, aux algorithmes définis, d’en assurer facilement la mise au point et la maintenance/évolution ultérieure. Il doit offrir des possibilités de paramétrisation, de modularisation, de regroupement « naturel » des traitements et des données, cohérent, avec le moins de couplages possibles. En général le code doit être réutilisable.

Les langages Python, C++, C, Java étaient les plus populaires en mai 2025 (Index TIOBE).

Des solutions low code et no code sont utilisées.

Aucun commentaire:

Enregistrer un commentaire