plomberie

Une définition du Jargon Français.
Aller à : Navigation, rechercher

nom féminin.  [Unix]. Art de réaliser du logiciel par sélection et interconnexion de logiciels existants, chacun chargé d'une partie du travail. Implique peu (idéalement pas) de développement proprement dit, donc cela produit aussi peu de nouveau code source que possible. Par extension cela désigne également les moyens techniques assurant l'interconnexion, ainsi qu'un résultat (un ensemble logiciel réalisé ainsi).

Dès les années 1970 cela désignait le fait d'employer sous un shell des commandes et utilitaires simples (quasi tous livrés avec le système d'exploitation, tels que sort et grep). Le shell fournit la glu car offre moyen de rediriger les sorties d'un programme vers les entrées d'un autre.

On décompose ainsi un traitement en isolant ses composantes puis en les assignant chacune à un programme générique modeste et bien circonscrit donc maîtrisé. Ces programmes génériques sont interconnectés par de la plomberie simple, ou bien, lorsque les traitements nécessaires sont jugés trop difficiles à décomposer ainsi, par de véritables programmes ad hoc d'ordinaire rédigés grâce à un langage de glu offrant moyen, au prix d'un développement, de s'affranchir de certaines limites des outils génériques.

En évitant cette approche on risque de tout intégrer en réalisant from scratch une merveille optimale et facile à maintenir (c'est rare), ou bien (plus probablement) une usine à gaz.

L'utilité extrême de la plomberie constitue l'une des principales caractéristiques d'Unix. Voir aussi KISS.

Dans certains contextes ce terme est ce que la porcelaine dissimule (ou plutôt frontalise).

Att.png Rien à voir avec plomber et déplomber, qui concernent la protection.

Voir aussi canal (sens 2), pipeline, pipe, tube. De plus la commande « tee » (raccord en T) dédouble une sortie.

Exemple

Sous un shell Unix:

$ echo -e "toto\ntiti\ntata\ntutu\ntiti" > monfichier
$ cat monfichier    # montre le contenu du fichier nommé « monfichier »
toto
titi
tata
tutu
titi
$ sort monfichier   # trie le contenu du fichier (sans le modifier) et présente le résultat
tata
titi
titi
toto
tutu
$ sort < monfichier # équivalent à la commande précédente, mais on ne laisse pas le 
# programme « sort » accéder au fichier, on demande au shell de lui communiquer son contenu (il est ainsi certain que sort ne pourra le modifier)
tata
titi
titi
toto
tutu
$ sort < monfichier | uniq -c # « uniq -c » dénombre
      1 tata
      2 titi
      1 toto
      1 tutu
$ sort < monfichier | uniq -c | sort -r # [[tri]]
      2 titi
      1 tutu
      1 toto
      1 tata
$ sort < monfichier |uniq -c|sort -r > monresultat # envoi le résultat dans un fichier nommé « monresultat »
$ cat monresultat # montre le contenu du fichier nommé « monresultat »
      2 titi
      1 tutu
      1 toto
      1 tata

Outillage disponible

Afin d'abréger une commande fréquemment employée avec certaines options, on peut définir un alias de shell qui, si nécessaire, profitera d'une plomberie simple.

Si on prend ensuite conscience qu'un traitement simple est nécessaire on pourra réaliser une fonction de shell.

Si le traitement se complique un peu ou si on souhaite peaufiner, par exemple en ajoutant une modeste interface utilisateur ou une capacité à détecter et rapporter des erreurs, mieux vaut la remplacer par un script de shell (ou fichier batch).

Si la maintenance adaptative fait trop grossir ce dernier ou s'il doit fonctionner sur plusieurs familles de systèmes on le transformera en script de langage de glu.

Si l'affaire se complique encore il sera parfois possible, d'ordinaire au prix de sacrifices, de remplacer tout cela par un paramétrage ou une macrocommande, voire une extension, d'un progiciel existant adapté. C'est l'approche aujourd'hui adoptée par le gros des utilisateurs professionnels.

Sinon le développement d'un programme spécifique est théoriquement souhaitable et une épopée commence.