LOG240 chapitre 1

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

Parmi les éléments suivants, lequel est considéré comme essentiel pour la maintenance du logiciel?

  • La compréhension du logiciel (correct)
  • L'utilisation des outils de débogage avancés
  • La rapidité d'exécution du code
  • La documentation exhaustive du code

Comprendre un logiciel, surtout s'il est de grande taille, peut généralement se faire rapidement et de manière exhaustive.

False (B)

Quand un mainteneur est confronté à un nouveau 'code base', quelle est la première étape cruciale à entreprendre?

  • Réécrire les parties du code qui semblent inefficaces
  • Documenter le code selon les normes de l'entreprise
  • Essayer de comprendre la structure et le fonctionnement du code existant. (correct)
  • Commencer immédiatement à corriger les bogues signalés

Quel est l'objectif principal de la compréhension d'un logiciel du point de vue de l'utilisateur?

<p>Comprendre le domaine d'affaire</p> Signup and view all the answers

Pour bien comprendre le fonctionnement d'un logiciel, il est essentiel de se faire un ______ du fonctionnement du logiciel à modifier.

<p>modèle mental</p> Signup and view all the answers

Quelle perspective de connaissance aide particulièrement à évaluer l'impact d'un changement logiciel sur sa qualité opérationnelle?

<p>La réaction logiciel - environnement technique (A)</p> Signup and view all the answers

Un gestionnaire de la maintenance, les analystes, les concepteurs et les programmeurs doivent avoir le même niveau de connaissance du logiciel.

<p>False (B)</p> Signup and view all the answers

Au cours de l'apprentissage d'un logiciel, qu'est-ce que le mainteneur se construit?

<p>Un modèle mental du logiciel (A)</p> Signup and view all the answers

Dans la taxonomie de Bloom, quelle compétence se situe au sommet de la pyramide, indiquant le niveau d'apprentissage le plus élevé?

<p>Créer (A)</p> Signup and view all the answers

Nommez une des stratégies de compréhension mentionnées dans le contenu.

<p>Approche descendante</p> Signup and view all the answers

L'approche descendante de compréhension logicielle implique de commencer par les détails de l'implémentation avant de comprendre les objectifs de haut niveau.

<p>False (B)</p> Signup and view all the answers

Dans l'approche descendante, quel est l'élément qui aide à émettre une hypothèse de haut niveau sur le fonctionnement du logiciel?

<p>Les balises (A)</p> Signup and view all the answers

Quelle est la caractéristique principale de l'approche ascendante de compréhension d'un logiciel?

<p>Reconnaître des patrons dans le code pour construire un modèle de plus haut niveau (C)</p> Signup and view all the answers

L'approche ______ de compréhension logicielle combine les approches descendante et ascendante.

<p>opportuniste</p> Signup and view all the answers

Citez une technique de lecture qui peut aider dans la compréhension d'un logiciel.

<p>Se fixer un but</p> Signup and view all the answers

Il est recommandé de lire les grands logiciels du début à la fin pour en comprendre le fonctionnement.

<p>False (B)</p> Signup and view all the answers

Dans la technique 'diviser pour régner' appliquée à la lecture de code, quelle est la première étape?

<p>Diviser le code en groupes liés (B)</p> Signup and view all the answers

Associez les facteurs suivants avec leur description:

<p>Domaine = Connaissance du problème que le logiciel cherche à résoudre. Programmation = Techniques de décomposition et modularité du code. Documentation = Documentation externe et interne pour comprendre le code. Organisation/Présentation = Application de patrons et indentations du code.</p> Signup and view all the answers

Quel facteur de compréhension du logiciel est directement affecté par la présence de termes et d'abréviations non standardisés?

<p>Programmation (D)</p> Signup and view all the answers

L'indentation du code est un facteur d'organisation et de présentation qui n'a pas d'impact sur la compréhension du logiciel.

<p>False (B)</p> Signup and view all the answers

Quel est le rôle principal du génie logiciel selon l'image présentée?

<p>S'assurer que les logiciels fonctionnent correctement. (C)</p> Signup and view all the answers

Un logiciel de qualité est toujours complexe.

<p>False (B)</p> Signup and view all the answers

Selon les lois de Lehman, qu'arrive-t-il à un programme qui n'est pas modifié dans un environnement réel?

<p>Il devient progressivement moins utile.</p> Signup and view all the answers

Selon les lois de Lehman, la complexité d'un logiciel augmente avec les modifications, sauf si des efforts sont faits pour la ______.

<p>réduire</p> Signup and view all the answers

Quelle est une conséquence de la modification ad-hoc des logiciels existants selon les lois de Lehman?

<p>Manque de temps, de ressources et d'argent. (B)</p> Signup and view all the answers

La rétro-ingénierie consiste à modifier un système existant pour améliorer ses performances.

<p>False (B)</p> Signup and view all the answers

Quel est le but de la rétro-ingénierie d'un programme?

<p>Comprendre le fonctionnement interne.</p> Signup and view all the answers

La rétro-ingénierie crée une ______ à un plus haut niveau d'abstraction.

<p>représentation</p> Signup and view all the answers

Associez les outils de rétro-ingénierie avec leur description :

<p>X-Ray = Outil d'analyse de code DA4Java = Outil pour l'analyse de dépendances en Java CodeCity = Visualisation de code sous forme de ville</p> Signup and view all the answers

Quel est l'objectif principal de la restructuration (refactoring) de code?

<p>Changer la structure interne sans altérer le comportement externe. (D)</p> Signup and view all the answers

La restructuration de code (refactoring) modifie le comportement externe d'un programme.

<p>False (B)</p> Signup and view all the answers

Nommez un outil utilisé pour la détection de code smells.

<p>SonarQube</p> Signup and view all the answers

Un "code smell" est une indication de problèmes potentiels dans le ______.

<p>code</p> Signup and view all the answers

Lequel des outils suivants est utilisé pour détecter les problèmes potentiels dans le code, appelés "code smells"?

<p>SonarQube (D)</p> Signup and view all the answers

L'utilisation d'outils de détection de code smells garantit que le logiciel sera exempt de tout bug.

<p>False (B)</p> Signup and view all the answers

Quel pourcentage des coûts globaux de développement logiciel est consacré à la maintenance, selon le contenu?

<p>50% à 75%</p> Signup and view all the answers

Jusqu'à ______ des efforts de maintenance sont consacrés juste à la compréhension du logiciel existant.

<p>60%</p> Signup and view all the answers

Quelle est une raison pour laquelle la documentation d'un logiciel n'est pas tenue à jour?

<p>Les développeurs originaux ont quitté le projet. (C)</p> Signup and view all the answers

Les coûts de maintenance des logiciels ont tendance à diminuer avec le temps.

<p>False (B)</p> Signup and view all the answers

Associez les outils suivants avec leur fonction respective :

<p>jDeodorant = Détection de code smells X-Ray = Rétro-ingénierie</p> Signup and view all the answers

Flashcards

La compréhension du logiciel

Essentielle pour la maintenance. Elle prend du temps et ne se fait pas d'un coup.

Objectifs de la compréhension

Comprendre le domaine, le changement demandé, ce qui est fait, ce qui doit changer, et les spécificités du logiciel pour modéliser mentalement son fonctionnement.

Les personnes qui doivent connaître un logiciel

Le gestionnaire de la maintenance, les analystes, les concepteurs, les programmeurs.

Le modèle mental

Une représentation mentale du logiciel qui accélère le raisonnement et la prédiction des actions.

Signup and view all the flashcards

Approche descendante

Commencer avec les éléments de haut niveau et comprendre progressivement les détails.

Signup and view all the flashcards

Approche ascendante

Reconnaître les patrons dans le programme et les regrouper pour obtenir un modèle de plus haut niveau.

Signup and view all the flashcards

Approche opportuniste

Une combinaison des approches descendante et ascendante, souvent utilisée en pratique.

Signup and view all the flashcards

Techniques de lecture

Se fixer un but, diviser en composants, faire des dessins, prendre des notes, exécuter avec un traceur

Signup and view all the flashcards

Diviser pour régner

Diviser le code en groupes liés, se concentrer sur un groupe, comprendre comment les éléments d'un groupe interagissent.

Signup and view all the flashcards

Programmation

Convention de noms cohérente, éviter synonymes, chiffres ou mélange de langues.

Signup and view all the flashcards

Commentaires Javadoc

Documenter les classes, champs et méthodes en répétant, expliquant et marquant le code.

Signup and view all the flashcards

Organisation et mise en page

Utiliser des niveaux, patrones et indenter le code avec structure, établir une norme de longueur d'instruction.

Signup and view all the flashcards

Le rôle du génie logiciel

Le rôle du génie logiciel est de produire des logiciels qui fonctionnent de manière fiable.

Signup and view all the flashcards

Les lois de Lehman

Les lois de Lehman décrivent comment les logiciels évoluent avec le temps.

Signup and view all the flashcards

Modification continue

Un programme doit être modifié, sinon il deviendra moins utile.

Signup and view all the flashcards

Complexité croissante

Un logiciel tend à devenir plus complexe avec le temps.

Signup and view all the flashcards

Solutions ad-hoc

Modification rapide de logiciels existants sans planification.

Signup and view all the flashcards

Conception non maintenue

La conception initiale se dégrade au fil des modifications.

Signup and view all the flashcards

Documentation à jour

La documentation est essentielle pour comprendre un logiciel.

Signup and view all the flashcards

Perte d'expertise

Les développeurs originaux quittent sans transmettre leur savoir.

Signup and view all the flashcards

Rétro-ingénierie

Analyser un programme pour comprendre son fonctionnement interne sans les spécifications d'origine.

Signup and view all the flashcards

Pas de modification

La rétro-ingénierie ne change pas le système, elle l'examine.

Signup and view all the flashcards

Refactoring

Processus de modification de la structure interne d'un programme sans changer son comportement externe.

Signup and view all the flashcards

Outils code smells

Outils pour détecter les problèmes (code smells) dans le code source.

Signup and view all the flashcards

Réusinage

Action d'améliorer le code sans en changer le comportement extérieur.

Signup and view all the flashcards

Détection code smells

Identifier les zones à problèmes d'un code.

Signup and view all the flashcards

Augmentation des coûts

Les coûts de maintenance augmentent avec le temps.

Signup and view all the flashcards

Study Notes

  • Objectif : Améliorer la maintenance des logiciels.
  • La présentation porte sur la compréhension du logiciel, chapitre 3, présentée par Dr. Alain April à Montréal, le 11 septembre 2016.

Sujets du Chapitre 3

  • Rôle de la compréhension d'un logiciel.
  • Objectifs de la compréhension du logiciel.
  • Besoins de compréhension du mainteneur.
  • Exploration des modèles de compréhension et leur utilisation.
  • Le modèle mental.
  • Stratégies de compréhension et leurs différences.
  • Techniques de lectures.
  • Facteurs ayant un impact sur la compréhension.

La Compréhension du Logiciel

  • Essentielle pour la maintenance.
  • La compréhension d'un logiciel prend du temps et n'est pas instantanée.
  • La compréhension d'un grand logiciel peut être impossible en totalité.

Situation

  • Un nouveau "code base" est abordé.
  • L'effort de maintenance décroît après le développement initial.

Objectifs de la Compréhension

  • Comprendre le domaine d'affaire du point de vue de l'utilisateur.
  • Comprendre le changement demandé.
  • Comprendre l'état actuel du logiciel.
  • Anticiper les changements futurs.
  • Comprendre les spécificités des composants du logiciel.
  • Développer un modèle mental du fonctionnement du logiciel à modifier.
  • Le rôle du génie logiciel est de s'assurer qu'un logiciel fonctionne et qu'il soit de qualité.
  • La complexité du logiciel est également un facteur déterminant dans la compréhension.

Perspectives de la Connaissance

  • Connaissance du domaine d'affaire : supporte l'estimation et guide les choix d'algorithmes, méthodes, outils et personnel.
  • Effet de l'exécution : confirme la réflexion du changement sur le comportement désiré.
  • Relation cause à effet : précise la portée du changement et prédit les effets secondaires.
  • Réaction logiciel/environnement technique : évalue l'impact d'un changement logiciel sur sa qualité opérationnelle.
  • Support à la décision : appuie les processus techniques et de gestion pour les décisions.

Les Besoins d'information

  • Plusieurs personnes doivent connaître le logiciel à différents niveaux.
  • Le gestionnaire en maintenance, les analystes, concepteurs, et programmeurs.

Le Modèle Mental

  • Le mainteneur développe un modèle mental du logiciel durant l'apprentissage.
  • Un modèle mental accélère un raisonnement correct.
  • Il permet de prédire plus facilement ce qui se passe au cours de certaines actions.
  • Le modèle mental est constamment évolué.
  • La Taxonomie de Bloom
  • Plus votre pyramide d'analyse des activités est grande, meilleur est votre apprentissage.

Stratégies de Compréhension

  • Approche descendante.
  • Approche ascendante.
  • Approche opportuniste.
  • Ces approches aident le mainteneur à se former un modèle mental d'un logiciel.

Approche Descendante

  • Le mainteneur commence par les éléments de haut niveau qui décrivent le logiciel.
  • Par exemple, ce qui se passe quand on exécute une requête.
  • La compréhension des détails se fait ensuite : structures de données, flux de traitement, lectures/écritures à la base de données.
  • Cette approche utilise des balises.
  • Des exemples de balises internes du programme sont : commentaires, noms de variables, déclarations, indentation.
  • Des exemples de balises externes au programme sont : manuel, d'exigences, d'architecture, représentations graphiques, imprimés/algorithmes de références.
  • C'est une approche itérative.
  • On fait des hypothèses de haut niveau avec l'aide de balises ; les hypothèses sont confirmées et raffinées progressivement.

Approche Ascendante

  • C'est une approche itérative.
  • Le programmeur reconnaît les patrons dans le programme.
  • À chaque itération, ces patrons sont regroupés afin de fournir un modèle de plus plus haut niveau.

Approche Opportuniste

  • Approche itérative, combinant les approches descendantes et ascendantes.
  • Fréquemment utilisée en pratique.
  • Le mainteneur a souvent déjà une base de connaissances.

Techniques de Lecture

  • Définir un but.
  • Petits logiciels: du début vers la fin.
  • Grands logiciels : par composants.
  • Faire des dessins.
  • Prendre des notes.
  • Exécuter avec un traceur.

Diviser pour Régner (Technique de Lecture)

  1. Diviser le code en groupes liés.
  2. Se concentrer sur un groupe.
  3. Comprendre comment les éléments interagissent les uns avec les autres.

Exercice

  • Former des équipes de 5 ou 6 personnes.
  • Développer une stratégie en quatre étapes pour apprendre rapidement le fonctionnement et la structure d'une application.
  • Identifier le niveau taxonomique de Bloom employé à chaque étape.
  • Afin de mieux comprendre le code, il peut être restructuré ou réusiné (refactoring) pour le simplifier sans modifier son comportement externe.
  • Il existe aussi des outils de détection de "code smells" qui peuvent aider à identifier des problèmes potentiels dans le code.
  • SonarQube : https://www.sonarqube.org/
  • PDM : https://pmd.github.io/
  • CheckStyle : http://checkstyle.sourceforge.net/
  • jDeodorant : https://github.com/tsantalis/JDeodorant

Facteurs de compréhension

  • Domaine : problème, application et système.
  • Programmation : décomposition, granularité et dissimulation de l'information.
  • Documentation : externe et interne.
  • Organisation/Présentation : indentation, espacements et patron.
  • Outils : statiques et dynamiques.

Points Importants pour la Programmation

  • Utiliser des conventions de noms claires (10 à 16 caractères).
  • Utiliser des abréviations connues (dictionnaire).
  • Éviter les synonymes, les chiffres et le mélange de langues.
  • Préférer un même nom pour les concepts répétitifs.
  • Utiliser des abréviations signifiantes pour les boucles (i,j,k à l'intérieur ; descriptifs à l'extérieur).
  • Clarifier les variables d'états (if flag=0, vs if punctuation = '.').
  • Utiliser des booléens explicites (erreur='true').
  • Éviter les "Magic Numbers".
  • Consulter les conventions de noms établies.

Bonnes Pratiques

  • Se concentrer sur son métier et intérêts.
  • Consulter les ressources suivantes :
  • Livre "Clean Code" de Robert C. Martin.
  • Ressources "Tout sur le code" de Steve McConnell.
  • Site web de Microsoft (Rob Caron).
  • Présentation de Patrick Guio.

Complexité

  • Si le code d'un collègue semble trop complexe, il faut simplifier ce code.
  • Valider les valeurs McCabe.
  • Utiliser son jugement et plus d'une mesure !

Documentation

  • Externe : cas de tests, documents d'exigences, plans de tests, modèles de données, spécifications de composants.
  • Interne : commentaires, code source.

Commentaires

  • Utiliser Javadoc avant class, field et method.
  • Suivre les bonnes pratiques pour les commentaires:
    • Répétition du code.
    • Explication du code.
    • Marquage du code.
    • Description de l'intention du code.
    • Information générale.
    • Indenter le code avec la structure.

Organisation et Mise en Page

  • Utiliser des niveaux de logique de codage / patrons.
  • Identer le code (avec une norme ou un outil spécifique).
  • Établir une norme pour les longueurs de ligne (exemple).

Résumé du Chapitre 3

  • Les objectifs de la compréhension ont été énumérés.
  • Les perspectives des connaissances requises sont posées.
  • Les modèles et stratégies de compréhension sont comparées.
  • Les techniques de lecture d'un logiciel sont données.
  • Présentation des principaux facteurs d'impact sur la compréhension.
  • Les lois de Lehman indiquent que les logiciels doivent constamment être modifiés et mis à jour et que la complexité croissante est une réalité à gérer.
  • La rétro-ingénierie permet d'analyser un programme sans les spécifications originales, afin de comprendre son fonctionnement interne et d'identifier ses composants.
  • Des outils de rétro-ingénierie comme X-Ray, DA4Java et CodeCity existent.
  • La rétro-ingénierie ne modifie ni ne crée de système, mais permet d'examiner et de comprendre le système actuel.
  • Les coûts de maintenance continuent d'augmenter et peuvent représenter entre 50% et 75% des coûts globaux de développement logiciel.
  • Jusqu'à 60% des efforts de maintenance sont consacrés à la compréhension du logiciel existant.
  • Catalogue de restructuration de Martin Fowler : https://www.refactoring.com/
  • Les logiciels existants sont fréquemment modifiés de manière ad hoc en raison du manque de temps et de ressources.
  • Une bonne conception initiale n'est pas toujours maintenue, conduisant à du code spaghetti et des dépendances non gérées.
  • La documentation n'est pas toujours mise à jour, et les développeurs originaux peuvent quitter l'entreprise avec leurs connaissances.

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Related Documents

More Like This

Software Maintenance and Laws Quiz
12 questions
Software Maintenance Problems in Chapter 5
16 questions
Software Maintenance and Development
0 questions
Use Quizgecko on...
Browser
Browser