đŽ Je continue de dĂ©couvrir lâimmense David Parnas, au travers dâun second article, sur la maniĂšre de concevoir des logiciels afin quâils soient facile Ă Ă©tendre et Ă rĂ©duire selon les impĂ©ratifs client. Il date de 1979, câest lâinformation la plus dingue vu lâactualitĂ© du papier.
RĂšgles de design
đ Parnas donne 4 rĂšgles permettant de garder une grande souplesse dans le design des logiciels :
1ïžâŁ Commencer par un monolithe. CrĂ©er un module Ă chaque dĂ©cision de design importante afin dâencapsuler cette dĂ©cision et de rendre facile le changement si elle sâavĂ©rait peu judicieuse.
2ïžâŁ Lister les Ă©lĂ©ments qui sont susceptibles de changer. Sâassurer quâils sont absents des interfaces des modules que lâon conçoit.
3ïžâŁ Ne pas subdiviser son programmes en Ă©tapes dâun traitement. PrivilĂ©gier la conception par « machines virtuelles », oĂč chaque module masque la complexitĂ© de la couche infĂ©rieure en ne laissant filtrer que ce qui est utile Ă des tĂąches plus Ă©levĂ©es.
4ïžâŁ Ne crĂ©er de dĂ©pendances que si elles sont utiles. Parnas entend par lĂ que :
1) A est plus simple parce quâil utilise B.
2) B nâest pas plus complexe si A lâutilise.
3) Il existe un programme utile incluant B, mais pas A
4) Il nây a aucun programme utile contenant A, mais pas B.
Coûts de fonctionnement et de changement
đ» Nous connaissons tous la dynamique qui lie mĂ©moire et CPU, de sorte que toute optimisation de lâun coĂ»te de lâautre.
Le mĂȘme type de relation existe entre coĂ»t de fonctionnement et coĂ»t du changement. Je reviens sur le papier de Parnas postĂ© il y a une semaine, car il rĂ©vĂšle des trĂ©sors nouveaux Ă chaque lecture.
đ Un logiciel gĂ©nĂ©rique diffĂšre dâun logiciel flexible. Le premier rĂ©pond Ă plusieurs cas dâusage sans changement, alors que le second ne rĂ©pond quâĂ un cas dâusage mais peut ĂȘtre facilement adaptĂ© pour en couvrir dâautres.
đ La gĂ©nĂ©ricitĂ© a un surcoĂ»t de fonctionnement (le logiciel est forcĂ©ment plus gros), mais un coĂ»t de changement nul.
đ La flexibilitĂ© a nâa aucun surcoĂ»t de fonctionnement, mais possĂšde un coĂ»t de changement dĂ©pendant de la qualitĂ© de lâimplĂ©mentation.
đ° Le choix entre gĂ©nĂ©ricitĂ© et flexibilitĂ© est (normalement) purement stratĂ©gique et Ă©conomique. Ce quâun logiciel gagne dâun cĂŽtĂ© il le perd de lâautre. Câest une consĂ©quence probablement indĂ©passable de la VIIIĂšme loi de Lehman : dans ce complexe dâinteractions homme-machine, tout est gouvernĂ© par des boucles de rĂ©troaction.
SOURCE
Parnas, David. (1979). Designing Software for Ease of Extension and Contraction. Software Engineering, IEEE Transactions on. SE-5. 128- 138. 10.1109/TSE.1979.234169.
Enzo Sandré
DOIs: 10.1109/TSE.1979.234169