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, donc en les composant.

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 Unix des commandes et utilitaires simples (quasi tous livrés avec le système d'exploitation, tels que sort et grep). Les pipes fournissent la glu car offrent 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 traitement 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 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 # stocke 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 ou si on souhaite peaufiner, par exemple en ajoutant une modeste interface utilisateur ou la capacité de détecter des erreurs voire d'y réagir correctement, 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 (le script réalisé n'étant pas compatibles avec certaines) 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. Se ce n'est pas possible le développement d'un programme spécifique est théoriquement souhaitable et une épopée commence.