# Usine logicielle

Une usine logicielle (ou software factory en anglais) dans son sens large n'est pas un framework - ce sens serait trop restrictif et se référerait au "Software Factory" de Microsoft.
Par extension on a ensuite aussi parlé d'« Usine d’IA » (“AI factory”).
Ces termes sont tous deux utilisés pour décrire une approche automatisée et très organisée de la production de logiciels ou de solutions d’intelligence artificielle, inspirée de la notion d'usine dans le monde réel.
Dans cette optique, l'organisation est découpée à la manière des taches répétitives qui sont automatisées dans une chaîne de production. Ces taches sont par exemple le lancement régulier de la compilation, des tests unitaires, le déploiement.

## Présentation

* une « usine logicielle » est constituée d'un ensemble de frameworks (avec une notion de « composabilité » et d'orchestration des services applicatifs), de librairies d'ateliers de génie logiciel et d'outils dont certains sont fournis clés en main par un éditeur. Les outils majeurs d'une usine logicielle comprennent notamment ceux qui permettent la gestion du cycle de vie d'un projet. Les projets deviennent managés avec par exemple des tableaux de bord.
* L'usine d'IA est le stade suivant (devenu nécessaire au développement d'IA de plus en plus complexes à des couts abordables, selon Marco Iansiti et Karim Lakhani (professeurs à l'Université Harvard) dans leur livre Competing in the Age of AI. Elle est une infrastructure en grande partie numérique et logicielle, une sorte d'équivalent plus immatériel, d'usine classique, mais destiné à produire des IA en série. C'est une installation de fabrication de pointe, conçue pour alimenter et faire progresser les applications d’intelligence artificielle.
Elle permettra par exemple :
* l'automatisation de la production de code informatique, d'algorithmes, avec des approches de construction modulaire ;
* l'industrialisation de l’IA, via l'industrialisation de la collecte et du traitement de données, la production éventuelle de donnée synthétique ;
* l'automatisation des procédures de vérification (recherche de bugs, correctifs...).
Construire et exploiter une usine d’IA passe généralement par l'établissement ou le renforcement d'un système strict et systématique mais évolutif de collecte, tri, nettoyage, étiquetage et éventuelle transformation, intégration ou agrégation de données plus ou moins hétérogènes... (dans le « pipeline de données »). Ces données traitées sont ensuite transférées (in situ ou non) vers un magasin de données afin de les rendre disponibles et utiles pour la suite du process.
Vient le stade du développement, de la construction et de l'entrainement d'algorithmes (apprentissage machine) et de modèles complexes à partir de ces données. Ces opérations se font dans l'équivalent d'un laboratoire (plafeforme d'expérimentation). L'usine pour cela s'appuiera sur :
* l'apprentissage supervisé ;
* L'apprentissage non supervisé (qui recherche des regroupements naturels dans les données non étiquetées, et les structures cachées pour l'observateur humain ;
* l'apprentissage par renforcement.
Après une phase de test, les données, algorithmes et logiciels peuvent alors être mises à disposition d'utilisateurs (qui pourraient être d'autres IA), via des interfaces de type API.
"Tout cela permet à une équipe de développement agile de construire une nouvelle application en quelques semaines, voire quelques jours." selon Iansiti et Karim Lakhani.

## Environnement numérique

L'usine logicielle ne se limite pas aux environnements .Net ou Java. Il existe des solutions sur les technologies C++, PHP ou autres.