A design methodology for reliable software systems

✒ Enzo SandrĂ© · 📆 03/12/2021 · 📐 Architecture · #ïžâƒŁ Façonnage de code

đŸ‘” Encore un papier de Barbara Liskov. J’ai dĂ©jĂ  parlĂ© d’elle dans un post prĂ©cĂ©dent (lien Ă  la fin). Dans ce papier de 1972 extrĂȘmement actuel, elle nous explique comment produire des logiciels fiables, car testĂ©s, donc testables. Le raisonnement est long, mais rĂ©munĂ©rateur pour qui le suit jusqu’au bout.

🐛 Elle constate d’abord que le dĂ©bogage intensif n’a jamais rien rĂ©solu. Il faut des tests automatisĂ©s couvrant l’ensemble des cas utiles.

🧼 Elle ajoute qu’il serait trop complexe d’obtenir des preuves formelles qu’un logiciel complexe fonctionne, Ă  cause du nombre trop grand d’états. Des preuves informelles peuvent suffire Ă  condition de structurer le programmes correctement, afin qu’ils soient le plus testables et prĂ©visibles possibles.

✔ La testabilitĂ© est donc, pour Barbara Liskov, une question de design.

✂ L’idĂ©e de dĂ©couper le programme en modules est bonne, mais insuffisante. Un dĂ©coupage bancal ajoute plus de complexitĂ© qu’il n’en masque.

2ïžâƒŁ Elle donne deux rĂšgles, tirĂ©es des travaux de Dijkstra et Parnas, dĂ©jĂ  Ă©voquĂ©s ici :

👉 S’appuyer sur le principes des machines virtuelles de Parnas, oĂč chaque niveau d’abstraction s’appuie sur celui immĂ©diatement en dessous pour rĂ©aliser des oĂ©prations plus complexes et proches du mĂ©tier.

👉 Faire de la programmation structurĂ©e, sans goto donc. L’abolition du goto qui est Ă©vidente pour nous en 2021 Ă©tait encore une bataille rangĂ©e en 1972.

đŸ”Ș La combinaison de ces deux rĂšgles permet une indĂ©pendance des modules par le dĂ©couplage.

✹ On obtient ainsi un programme qu’il est possible de tester comme suit :

👉 Chaque module est individuellement testĂ© par un ensemble de tests X.

👉 Chaque assemblage de modules complet est testĂ© par un ensemble de tests Y.

➕ GrĂące au design qu’elle recommande, le nombre de cas de tests nĂ©cessaires n’est pas X*Y, mais bien X+Y pour atteindre une couverture satisfaisante, ce qui est Ă  la portĂ©e des dĂ©veloppeurs.

SOURCE

Liskov, Barbara. “A design methodology for reliable software systems.” AFIPS ’72 (Fall, part I) (1972). DOI: 10.1145/1479992.1480018

Enzo Sandré


DOIs: 10.1145/1479992.1480018