Adaptive software development
# Adaptive software development

L'Adaptive software development (ASD) est une méthode de développement rapide d'applications proposée par Jim Highsmith (en).

L'Adaptive Software permet de personnaliser des outils informatiques en fonction de demandes spécifiques en s'appuyant sur l'industrialisation du développement informatique et la production automatisée de code informatique. Il s'agit d'une façon de concevoir des logiciels ou des applications informatiques.

L'Adaptive Software n'est lié ni à une technique spécifique, ni à une méthode spécifique, ni à un langage de programmation spécifique. Il ne s'agit pas de configuration ou de paramétrage d'un progiciel, mais d'un mode de production industriel permettant de produire un logiciel unique en fonction de besoins spécifiques.

## Histoire de la production automatisé de code informatique

On distingue trois formes principales de production automatisée de code informatique :

### La transformation de code

La transformation de code consiste à traduire un code informatique d'un langage de programmation informatique dans un autre.

La génération de code informatique est historiquement liée aux compilateurs qui sont des logiciels qui transforment un programme écrit dans un langage de programmation dit de "haut niveau" en code source pouvant être exécuté par un ordinateur (1er compilateur en 1952). La principale raison de cette génération de code est de simplifier la création de programmes informatique en donnant aux développeurs informatiques un accès à des langages de programmation structurés. Ces langages possèdent une syntaxe et une grammaire plus facilement utilisable par des humains qu’une suite d’instruction destinées directement à une machine.

### La production de contenu par templates (modèles de page)

La génération de code informatique a ensuite évoluée avec des outils de templates pour générer des sites web. Le but de ces outils est de produire le code informatique qui permet à un navigateur d'afficher une page Web. Ces outils remplacent des parties de la template avec du contenu stocké dans des fichiers ou dans une base de données. Ces outils utilisent des langages permettant d’appliquer des règles de gestion de mise en page des données. Les mécanismes de templates peuvent être utilisés dans l'Adaptive Software comme tout autre moyen de production de code informatique, mais ils ne sont pas suffisant pour créer des programmes informatiques complets. Ils sont utilisés dans la production de contenus statiques comme les sites Web ou les blogs.

### La production d'applications à partir d'une modélisation

Il s'agit de créer du code informatique à partir d'un modèle d'abstraction. Les applications informatiques sont créées par la traduction d'une modélisation (autre qu'un langage de programmation informatique) dans un langage de programmation informatique. Ce processus pour produire des applications informatiques est appelé Model Driven Software Develoment (MDSD). Le code généré par le MDSD est difficilement modifiable par un humain. Lorsque le code généré a été modifié manuellement, le modèle n’est plus consistant avec le code et l’outil de génération risque de ne plus pouvoir être utilisé.

On notera qu'avec le développement de l'Intelligence Artificielle, la prochaine forme de production automatisée de code informatique sera l’auto adaptive software qui consistera pour un programme informatique à se modifier lui-même sans modélisation $humaine^,.$

## Adaptive Software et méthodologie

La finalité de l'Adaptive Software est de favoriser la production d'applications informatiques centrées sur les demandes des utilisateurs et sur la capacité à faire évoluer ces applications facilement.

L'Adaptive Software n'est pas une méthode en ce sens qu'il s'agit de produire une application informatique et non pas uniquement de décrire un processus de gestion de projet (au sens large du terme) ou un cadre méthodologique.

L'Adaptive Software n'est pas dépendant d’une méthode spécifique. Par exemple, la façon de prendre en compte et de spécifier les besoins ou le cycle de vie de l'application n'ont pas d'incidence directe pour pouvoir ou non relever de l'Adaptive Software.

Le seul critère méthodologique pour relever de l'Adaptive Software est d'être capable de prendre en compte les besoins des utilisateurs pour modifier une application informatique.

## Adaptive Software, technologies et langage de programmation

L'Adaptive Software n'est donc pas lié ni à une technologie spécifique, ni à un langage de programmation spécifique.

L'Adaptive Software se base sur la production automatisée de code informatique pour pouvoir qualifier le mode de production des applications informatiques d'industriel. L'industrialisation de la production est le principal critère technique permettant pour une application de relever ou on de l'Adaptive Software.

## Principaux composants de l'Adaptive Software

Afin d'industrialiser la production d'applications informatiques, il est nécessaire pour faire de l'Adaptive Software de disposer des éléments suivants dans la chaîne de production :

* Modélisateur : langages et outils permettant de modéliser une application informatique
* Usine logicielle : ensemble des programmes qui permettent de produire de façon automatisée du code informatique
* Atelier de génie logiciel (AGL) : outils permettant à un humain de modifier l'application
* Usine de livraison : ensemble des programmes et processus permettant d’industrialiser le packaging et le déploiement des applications informatiques

On retrouve également les outils traditionnellement utilisés pour le développement informatique soit pour l'aspect méthodologique, soit pour l'aspect technique, mais ceux-ci ne relèvent pas au sens propre de l'Adaptive Software.

## L'industrialisation de la production de code

Afin de pouvoir prétendre qu'un logiciel ou une application informatique a été conçu en Adaptive Software, les points suivants doivent être remplis :

* une partie significative du code informatique (> 50%) est produit par des logiciels et non pas par des humains ;
* le code produit par l'usine Logicielle ne doit pas être différent et distinguable de celui produit par un humain ;
* dans un logiciel conçu en Adaptive Software, le code produit par l'usine logicielle peut être modifié par un humain. Le code produit par un humain peut être modifié par l'usine logicielle ;
* dans un logiciel conçu en Adaptive Software, le logiciel produit n'a pas besoin de l'usine logicielle pour fonctionner.

La personnalisation d'une application informatique par paramétrage (souvent utilisée dans les progiciels) n'entre pas dans le cadre de l’Adaptive Software. Le programme informatique n’est pas modifié par le paramétrage, il reste inchangé mais permet de modifier ou d’activer certaines fonctionnalités déjà existantes par paramétrage. Ces changements restent limités à ce qui a été prévu initialement lors de la conception du logiciel. La modification de fonctionnalités par paramétrage peut poser des problèmes de performance.

La partie industrialisée de la production d'une application informatique ne peut pas être constituée d'un assemblage manuel de composants ou de portion de code existant.

L'Adaptive Software est une forme de model driven software development (MDSD) en ce sens que l'on se base sur un modèle conceptuel pour produire une application, mais en diffère en ce sens que la désynchronisation éventuelle entre le modèle et le code produit ne doit pas empêcher l'utilisation ultérieure de l'usine logicielle. Contrairement au MDSD, on ne cherche pas à produire l'intégralité d'une application informatique à partir d'un modèle, ce qui oblige à avoir des modèles conceptuels très complexes, mais uniquement certaines parties. On peut prendre l'analogie avec une chaîne de montage dans l'industrie automobile où humains et robots interviennent successivement lors de la production, sur une chaine de production d'Adaptive Software, humains et usine logicielle interviennent successivement pour produire et faire évoluer une application informatique. Il s'agit bien d'une interaction continue entre humain et machine pour produire un logiciel.

