coo poo 1 3 5 organisation

1.3.5 organisation

1 Organisation horizontale et verticale.

  Dans une application ancienne, tout est linéaire c'est à dire vertical.

  Dans une application orientée objets moderne, certaines parties communes sont horizontales appelables par tous.

  Ce sont traditionnellement les lectures, écritures, transcodages, calculs généraux. Par exemple les calculs de dates, calculs de primes, sont dans les modules généralisés. Dans RTGE 96: on met les lectures, les calculs et les mises en forme dans des modules horizontaux qui permettent à toutes les lignes de profiter du résultat de leur travail.

  Dans une grande entreprise: la production, la division géographique, la division par branche sont verticales mais le marketing, la comptabilité, la recherche et développement sont horizontales. Dans RTGE folio 1 les lectures et calculs sont horizontaux et les totalisations sont verticales en cascade.

  Ce qui devient horizontal (profitable par tous) est orienté objets. (objet calcul, objet lecture). Ce qui reste vertical est découpé par tâches (et pas par type de donnée). A défaut de découpage par types de données (BF1/BF5) en différentes classes successives (BD1/BD2), le découpage par tâches en ordre chronologique (TF1,TG1,TA1) est mieux que pas de découpage du tout.

  Un objet exécute une fonction. L'objet BF1 exécute la lecture pour charger la base des folios de synthèse la base BF1.

 

2 Facilité de planification, gestion de projets,

    Intégration, développement en parallèle, division des tâches, ventilation des tâches, affectation des tâches aux ressources, décomposition du travail vers différentes équipes de développement, suivi de l'avancement des travaux, tests d'intégration, mise en oeuvre.

    Puisque l'application est déjà divisée en modules bien définis grâce à la conception orientée objets, on peut, plus facilement affecter des modules aux personnes, des tâches aux ressources, des travaux aux équipes. On peut plus rapidement développer les modules indépendants en parallèle au lieu de les faire en séquence. Il devient plus facile de suivre le degré d'avancement des travaux dans chaque module séparément.

    Puisque les modules sont bien identifiés il devient plus facile de les intégrer on ne risque pas d'en oublier. Ils sont déjà testés et validés individuellement on n'attend pas la fin pour découvrir les erreurs dans un module. Puisque les modules sont bien structurés, on peut facilement les disposer dans une échelle de temps pour faire une planification. S'il y a des contraintes de priorité, on peut mieux faire des études de PERT et des dessins de GANTT ou des Work Breakdown Structures.

    En somme on peut faire beaucoup de choses à partir d'un système bien structuré modulaire, bien orienté objets (chaque objet ayant ses données et ses procédures) car sinon, si l'application était en vrac (la base B19 en vrac, les paramètres de la B13 en vrac non séparés, les traitements de la C200 linéaires en vrac) comme avant en 95 alors il serait difficile de ventiler logiquement du vrac sur des personnes, des ressources, sur un PERT et un planning, on serait obligé d'effectuer un découpage un peu arbitraire. Alors que si l'application est déjà découpée en objets il suffit de suivre les lignes de découpage des objets pour affecter des tâches aux personnes, aux périodes de temps, aux étapes de développement.


 

 

 

Découpage de la base

 

avant découpage

 

après découpage

une bdr

   

une bdr + 6 BDO

pour découper le système de comptabilité de gestion et tableaux de bords qui présentent les résultats des groupes d'exploitations on sépare synthèse et détails d'une part puis période d'analyse et comparaisons d'autre part

ce qui nous donne six bases objets hiérarchiques en dessous de la base relationnelle existante
ainsi on peut les confier à plusieurs personnes et/ou développer en plusieurs étapes

 

Découpage des paramètres

avant découpage

 

après découpage

une table B13

 

15 tables paramètres

 

  Passage d'un bloc massif à une décomposition orientée objets

                         

3 Facilité d'intégration, mise en oeuvre, livraison:

   Lorsqu'il y a une quinzaine de modules il est facile de les compter, de les livrer de les mettre en exploitation, de ne pas en oublier.

Lorsqu'il y a une procédure algorithmique linéaire, c'est plus problématique pour ne pas oublier quelque chose, une query qui traine, un data, un load, un synonym, un view.

   Evidemment quand les composants bien rangés, classifié, groupés par classes, par sous classes, par objets comme des boîtes imbriquées, il est plus facile de les manipuler, livrer, intégrer, d'en faire le suivi et la gestion.

   Quand il y a un grand nombre d'éléments à gérer il ne faut pas se tromper, il ne faut pas oublier, il faut une classification, un rangement, une structuration, une hiérarchie, une organisation en somme un système orienté objets. Comme pour la nomenclature de pièces d'avions, de trains, de voitures, il faut beaucoup d'ordre et d'organisation hiérarchique pour les composants logiciels.

   La technologie orientée objets améliore les performances de la programmation mais aussi des autres travaux: la gestion de projets, la planification, la mise en oeuvre, les tests, l'intégration, la communication, la coordination, le suivi, la gestion des composants, la livraison, le contrôle, en somme la COO POO c'est la façon industrielle de produire du logiciel.

 


 

4 Normalisation, standardisation

Si on ne normalise pas l'intérieur d'une procédure cela veut dire qu'au début de la procédure on explique au réalisateur ce qu'il trouve en entrée (les tables données et paramètres en entrée ) puis on explique au réalisateur ce qu'il doit donner en sortie (la maquette d'état en sortie ). Dans ce cas, il a libre cours de décider des tables intermédiaires (nature, nombre, description, colonnes, noms de colonnes , emplacements, organigramme, c'est à dire toute l'analyse organique)

Un fois qu'il a fait et que c'est juste, si on veut faire évoluer ou corriger, modifier, débugger on est obligé de refaire tout le cheminement intellectuel de son analyse organique pour être capable d'intervenir au bon endroit sans détruire tout le reste. Cela (chercher à comprendre le cheminement de la pensée d'un autre) est long, fastidieux, aléatoire et source de perte de temps et de fiabilité.

Solution: au lieu de donner au développeur l'entrée et la sortie d'une grosse procédure comme la constitution d'un folio qui contient 90 queries, on ferait mieux de diviser la grosse tâche en 4 petites tâches puis de donner au développeur la description avec entrée-traitement-sortie de chacune des 4 petites tâches nommées lecture,calculs,totaux,misenforme.

     Ainsi on a déjà dès le départ décidé des tables intermédiaires, de leur nature de leur nombre, des colonnes, de leurs noms, de leur emplacements. De cette manière, une fois que le travail est fait il n'y a aucun problème pour vérifier la conformité. On est sûr que ça marche. Les différents travaux donnés à différentes personnes se ressemblent.

     Maintenant quand on donne à cinq personnes le développement cela donne en sortie un seul style compréhensible par tous et exprimé dès le départ par la documentation qui décrit les solutions techniques retenues. A chaque moment où il y a une décision à prendre entre plusieurs solutions, une solution est choisie ensemble dès le départ et sur tous les folios c'est standardisé d'après le même moule.

     Lorsqu'on a compris un folio on a compris tous les folios. C'est facile à maintenir. Les noms de queries et de colonnes sont normalisés, c'est beaucoup plus facile à lire à mémoriser et à écrire. Il faut normaliser la méthode, la technique, les noms de queries, data, colonnes, forms, tables.

Standardisation des ,noms de queries et de tables:

Tables finales:  TF1 TF2 TF5 TF6

queries finales: TF1 TF2 TF5 TF6

niveau groupe:   TG1 TG2 TG5 TG6

niveau centre:   TA1 TA2 TA5 TA6

Cohérence

Cohérence horizontale entre folio 1 et folio 5 pour les taux.

                      entre folio 2 et folio 6 pour les écarts et variations

Cohérence verticale entre les niveaux siège, groupe et centre.

Harmonisation

Harmonisation horizontale entre toutes les lecture, tous les calculs, tous les totaux, toutes les mises en formes du RTGE et RMGE. Cela ressemble un peu à de la programmation massivement parallèle: on fait tout en même temps: toutes les lectures, tous les folios et tout RTGE et RMGE.

Centrallisation

    Au lieu que l'organigramme des folios 1 2 5 6 soit fait par plusieurs personnes chacun dans son coin, l'analyse organique est fait par tous sur un document unique. Ainsi tout le monde sait lire le dessin commun et parle le même language. Il n'y a qu'un seul organigramme pour tout le RTGE-RMGE.

 


 

Conclusion pour la normalisation: l'analyse orientée objets (décomposer une grosse procédure en quatres procédures plus petites lecture, calcul, totaux, misenforme avec entrée-traitement-sortie pour chacune des petites procédures) permet d'introduire la normalisation et standardisation des noms et des méthodes à l'intérieur de tous les folios (1,2,5,6) du RTGE 1996 et permet de profiter des avantages de la normalisation et standardisation: fiabilité, ergonomie, facilité d'intervention, de debugging, évolutivité, facilité d'explication, de compréhension.

    Lorsqu'on explique le système orienté objets déjà divisé en 4 étapes  c'est facile d'expliquer les étapes une à une qui font des traitements simples avec des entrées et sorties bien définies.

    Le but du jeu est d'obtenir une procédure qui marche mais qui soit aussi facile et rapide à débugger à maintenir, à faire évoluer. Donc il ne faut pas laisser de black box.

    Si on donne à dix programmeurs une analyse floue, ils vont faire dix black box et on se retrouve à la fin avec un énorme black box composé de dix styles différents dont on ne connait pas le mécanisme interne. C'est opaque.

    Donc pour que la programmation déléguée soit claire, il faut mettre des lumières aux étapes comme des lampadaires sur la route périodiquement, ici ce sont des tables permanentes bien définies qui empêchent une programmation sauvage grâce à leur rôle normalisateur de check-points.

   Si une programmation est non conforme à la norme (même si c'est juste) cela embrouille le reste des personnes amenées à intervenir sur le système.

 

   S'il n'y a pas de norme, chacun écrit selon son inspiration, et quand il y a un bug personne ne sait résoudre parceque chacun connaît son petit bout de code et personne ne connaît l'ensemble de l'application, on ne sait pas d'où vient le bug et même la personne qui a fait le bug ne sait pas que c'est elle qui l'a fait et les autres personnes ne peuvent pas intervenir rapidement à l'intérieur du code.

    Lorsqu'il y a un bug, il peut venir de n'importe où, il peut resurgir bien loin de l'endroit où il a été commis et il est très difficile de retracer son cheminement à travers toute l'application si on n'en connaît pas tous les moindres recoins.

    Pour être capable de débugger une grande application complexe il faut la connaître à fond et si on ne l'a pas écrite soi même il faut que ceux qu'il en ont écrit différentes parties aient respecté une certaine norme une certaine standardisation, un certain mécanisme commun pour qu'un personne qui débugge ou modifie puisse travailler dans un environnement bien connu.

 

   Si tout est normalisé alors chaque intervenant qui comprend la norme peut comprendre un folio qui respecte la norme.

   Si rien n'est normalisé alors chaque personne qui comprend un folio doit passer du temps pour accéder à un autre folio.

   Si deux personnes différentes développent deux parties d'un même folio de façon non standardisée, les deux parties peuvent être incohérentes et faire des bugs. Il faut imposer des normes communes pour garantir la cohérence entre les différentes parties d'un même système.

   Dans RTGE orienté objets la norme passe par les tables permanentes à l'entrée et à la sortie de chaque étape.

Ces tables permanentes préfabriquées servent à garantir la qualité du logiciel.


 

Dans la conception orientée objets la normalisation facilite la vérification à la sortie d'une étape:

étape lectures: vérifier que toutes les lignes sont lues

      que toutes les colonnes à remplir sont remplies.

étape calculs: vérifier de les taux,écarts,variations sont bons

étape totaux: vérifier que les totaux sont bien faits

étape misenforme: vérifier que la forme est juste.

Sans normalisation, standardisation et décomposition en objets on ne peut que vérifier le début et la fin (l'édition de l'état) sans voir clairement le milieu de la grosse procédure.

Avec la normalisation, standardisation et la décomposition en étapes, on peut vérifier de façon plus sûre plus ergonomique les résultats des calculs et queries.

 

Exemples.

Normalisations des noms à travers les folios 1 2 5 6

     

folio 1         BD1  BS1  TF1  TG1  TA1

folio 2         BD2  BS2  TF2  TG2  TA2

folio 5         BD5  BS5  TF5  TG5  TA5

folio 6         BD6  BS6  TF6  TG6  TA6

 

Normalisation de la méthode de programmation: on généralise la même méthode de programmation sur tous les folios:

la même méthode pour

la lecture: BF1 RTGE, BF5 RTGE, BF1 RMGE, BF5 RMGE

le calcul:  BD1 RTGE, BD2 RTGE, BD5 RTGE, BD6 RTGE, BD1 RMGE, BD5 RMGE

les totaux: BS1 RTGE, BS2 RTGE, BS5 RTGE, BS6 RTGE, BS1 RMGE, BS5 RMGE

la mise en forme:

            TF1 RTGE, TF2 RTGE, TF5 RTGE, TF6 RTGE, TF1 RMGE, TF5 RMGE

            TG1 RTGE, TG2 RTGE, TG5 RTGE, TG6 RTGE, TG1 RMGE, TG5 RMGE

            TA1 RTGE, TA2 RTGR, TA5 RTGE, TA6 RTGE, TA1 RMGE, TA5 RMGE

 

    

      Normalisation de la méthode de programmation