Podcast
Questions and Answers
Parmi les éléments suivants, lequel est considéré comme essentiel pour la maintenance du logiciel?
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.
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?
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?
Quel est l'objectif principal de la compréhension d'un logiciel du point de vue de l'utilisateur?
Pour bien comprendre le fonctionnement d'un logiciel, il est essentiel de se faire un ______ du fonctionnement du logiciel à modifier.
Pour bien comprendre le fonctionnement d'un logiciel, il est essentiel de se faire un ______ du fonctionnement du logiciel à modifier.
Quelle perspective de connaissance aide particulièrement à évaluer l'impact d'un changement logiciel sur sa qualité opérationnelle?
Quelle perspective de connaissance aide particulièrement à évaluer l'impact d'un changement logiciel sur sa qualité opérationnelle?
Un gestionnaire de la maintenance, les analystes, les concepteurs et les programmeurs doivent avoir le même niveau de connaissance du logiciel.
Un gestionnaire de la maintenance, les analystes, les concepteurs et les programmeurs doivent avoir le même niveau de connaissance du logiciel.
Au cours de l'apprentissage d'un logiciel, qu'est-ce que le mainteneur se construit?
Au cours de l'apprentissage d'un logiciel, qu'est-ce que le mainteneur se construit?
Dans la taxonomie de Bloom, quelle compétence se situe au sommet de la pyramide, indiquant le niveau d'apprentissage le plus élevé?
Dans la taxonomie de Bloom, quelle compétence se situe au sommet de la pyramide, indiquant le niveau d'apprentissage le plus élevé?
Nommez une des stratégies de compréhension mentionnées dans le contenu.
Nommez une des stratégies de compréhension mentionnées dans le contenu.
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.
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.
Dans l'approche descendante, quel est l'élément qui aide à émettre une hypothèse de haut niveau sur le fonctionnement du logiciel?
Dans l'approche descendante, quel est l'élément qui aide à émettre une hypothèse de haut niveau sur le fonctionnement du logiciel?
Quelle est la caractéristique principale de l'approche ascendante de compréhension d'un logiciel?
Quelle est la caractéristique principale de l'approche ascendante de compréhension d'un logiciel?
L'approche ______ de compréhension logicielle combine les approches descendante et ascendante.
L'approche ______ de compréhension logicielle combine les approches descendante et ascendante.
Citez une technique de lecture qui peut aider dans la compréhension d'un logiciel.
Citez une technique de lecture qui peut aider dans la compréhension d'un logiciel.
Il est recommandé de lire les grands logiciels du début à la fin pour en comprendre le fonctionnement.
Il est recommandé de lire les grands logiciels du début à la fin pour en comprendre le fonctionnement.
Dans la technique 'diviser pour régner' appliquée à la lecture de code, quelle est la première étape?
Dans la technique 'diviser pour régner' appliquée à la lecture de code, quelle est la première étape?
Associez les facteurs suivants avec leur description:
Associez les facteurs suivants avec leur description:
Quel facteur de compréhension du logiciel est directement affecté par la présence de termes et d'abréviations non standardisés?
Quel facteur de compréhension du logiciel est directement affecté par la présence de termes et d'abréviations non standardisés?
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.
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.
Quel est le rôle principal du génie logiciel selon l'image présentée?
Quel est le rôle principal du génie logiciel selon l'image présentée?
Un logiciel de qualité est toujours complexe.
Un logiciel de qualité est toujours complexe.
Selon les lois de Lehman, qu'arrive-t-il à un programme qui n'est pas modifié dans un environnement réel?
Selon les lois de Lehman, qu'arrive-t-il à un programme qui n'est pas modifié dans un environnement réel?
Selon les lois de Lehman, la complexité d'un logiciel augmente avec les modifications, sauf si des efforts sont faits pour la ______.
Selon les lois de Lehman, la complexité d'un logiciel augmente avec les modifications, sauf si des efforts sont faits pour la ______.
Quelle est une conséquence de la modification ad-hoc des logiciels existants selon les lois de Lehman?
Quelle est une conséquence de la modification ad-hoc des logiciels existants selon les lois de Lehman?
La rétro-ingénierie consiste à modifier un système existant pour améliorer ses performances.
La rétro-ingénierie consiste à modifier un système existant pour améliorer ses performances.
Quel est le but de la rétro-ingénierie d'un programme?
Quel est le but de la rétro-ingénierie d'un programme?
La rétro-ingénierie crée une ______ à un plus haut niveau d'abstraction.
La rétro-ingénierie crée une ______ à un plus haut niveau d'abstraction.
Associez les outils de rétro-ingénierie avec leur description :
Associez les outils de rétro-ingénierie avec leur description :
Quel est l'objectif principal de la restructuration (refactoring) de code?
Quel est l'objectif principal de la restructuration (refactoring) de code?
La restructuration de code (refactoring) modifie le comportement externe d'un programme.
La restructuration de code (refactoring) modifie le comportement externe d'un programme.
Nommez un outil utilisé pour la détection de code smells.
Nommez un outil utilisé pour la détection de code smells.
Un "code smell" est une indication de problèmes potentiels dans le ______.
Un "code smell" est une indication de problèmes potentiels dans le ______.
Lequel des outils suivants est utilisé pour détecter les problèmes potentiels dans le code, appelés "code smells"?
Lequel des outils suivants est utilisé pour détecter les problèmes potentiels dans le code, appelés "code smells"?
L'utilisation d'outils de détection de code smells garantit que le logiciel sera exempt de tout bug.
L'utilisation d'outils de détection de code smells garantit que le logiciel sera exempt de tout bug.
Quel pourcentage des coûts globaux de développement logiciel est consacré à la maintenance, selon le contenu?
Quel pourcentage des coûts globaux de développement logiciel est consacré à la maintenance, selon le contenu?
Jusqu'à ______ des efforts de maintenance sont consacrés juste à la compréhension du logiciel existant.
Jusqu'à ______ des efforts de maintenance sont consacrés juste à la compréhension du logiciel existant.
Quelle est une raison pour laquelle la documentation d'un logiciel n'est pas tenue à jour?
Quelle est une raison pour laquelle la documentation d'un logiciel n'est pas tenue à jour?
Les coûts de maintenance des logiciels ont tendance à diminuer avec le temps.
Les coûts de maintenance des logiciels ont tendance à diminuer avec le temps.
Associez les outils suivants avec leur fonction respective :
Associez les outils suivants avec leur fonction respective :
Flashcards
La compréhension du logiciel
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
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
Les personnes qui doivent connaître un logiciel
Le gestionnaire de la maintenance, les analystes, les concepteurs, les programmeurs.
Le modèle mental
Le modèle mental
Signup and view all the flashcards
Approche descendante
Approche descendante
Signup and view all the flashcards
Approche ascendante
Approche ascendante
Signup and view all the flashcards
Approche opportuniste
Approche opportuniste
Signup and view all the flashcards
Techniques de lecture
Techniques de lecture
Signup and view all the flashcards
Diviser pour régner
Diviser pour régner
Signup and view all the flashcards
Programmation
Programmation
Signup and view all the flashcards
Commentaires Javadoc
Commentaires Javadoc
Signup and view all the flashcards
Organisation et mise en page
Organisation et mise en page
Signup and view all the flashcards
Le rôle du génie logiciel
Le rôle du génie logiciel
Signup and view all the flashcards
Les lois de Lehman
Les lois de Lehman
Signup and view all the flashcards
Modification continue
Modification continue
Signup and view all the flashcards
Complexité croissante
Complexité croissante
Signup and view all the flashcards
Solutions ad-hoc
Solutions ad-hoc
Signup and view all the flashcards
Conception non maintenue
Conception non maintenue
Signup and view all the flashcards
Documentation à jour
Documentation à jour
Signup and view all the flashcards
Perte d'expertise
Perte d'expertise
Signup and view all the flashcards
Rétro-ingénierie
Rétro-ingénierie
Signup and view all the flashcards
Pas de modification
Pas de modification
Signup and view all the flashcards
Refactoring
Refactoring
Signup and view all the flashcards
Outils code smells
Outils code smells
Signup and view all the flashcards
Réusinage
Réusinage
Signup and view all the flashcards
Détection code smells
Détection code smells
Signup and view all the flashcards
Augmentation des coûts
Augmentation des coûts
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)
- Diviser le code en groupes liés.
- Se concentrer sur un groupe.
- 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.