LOG240 Cours 4
30 Questions
1 Views

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

Quelle est la définition la plus précise de la réingénierie de logiciel?

  • Changer complètement la fonctionnalité d'un logiciel existant.
  • Créer un nouveau logiciel à partir de zéro.
  • Modifier ou reconstituer un logiciel sans en changer les fonctionnalités fondamentales. (correct)
  • Supprimer les bugs d'un logiciel.

La réingénierie de logiciel est principalement utile pour ajouter de nouvelles fonctionnalités à un logiciel existant.

False (B)

Dans le contexte de la réingénierie, que signifie le terme 'rétro-ingénierie'?

Analyser un logiciel pour comprendre sa conception

Une forte dépendance entre les modules d'une application rend l'application difficile à ______ et à faire évoluer.

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

Faites correspondre les objectifs suivants de restructuration aux bénéfices attendus:

<p>Récupérer des informations utiles = Augmentation de la productivité de compréhension Faciliter la conversion vers une autre plateforme = Compétitivité des coûts Identifier la duplication de code = Augmentation de la productivité lors de changements Optimiser le logiciel = Satisfaction de la clientèle</p> Signup and view all the answers

Dans quelle situation la réingénierie de logiciel est-elle particulièrement appropriée?

<p>Lorsqu'un logiciel requiert une maintenance importante et est mal documenté. (A)</p> Signup and view all the answers

La restructuration de logiciel implique toujours des modifications des fonctionnalités du logiciel.

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

Quel est l'un des risques majeurs que la réingénierie contribue à réduire par rapport au remplacement complet d'un logiciel?

<p>risque d'échec</p> Signup and view all the answers

La réingénierie des processus d'affaires vise à rendre les processus plus efficaces et ______.

<p>économiques</p> Signup and view all the answers

Quel est le principal objectif de l'abstraction des fonctionnalités dans la réingénierie logicielle?

<p>Savoir ce que le programme fait du point de vue de l'utilisateur. (C)</p> Signup and view all the answers

L'utilisation de la mémoire cache n'a pas d'influence sur la performance d'un logiciel.

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

Qu'est-ce que le 'nombre de bris de structure' (Bs) mesure dans le flot de contrôle?

<p>complexité du code</p> Signup and view all the answers

L'amélioration des processus d'affaires dépend beaucoup de nouvelles ______ qui soutiennent ces processus.

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

Quelle analyse permet d'évaluer le couplage entre différents modules d'une application?

<p>Analyse des dépendances. (D)</p> Signup and view all the answers

Les langages interprétés sont généralement plus rapides que les langages compilés.

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

Qu'est-ce qu'un graphe d'appel représente dans l'analyse d'un logiciel?

<p>Relations entre unités logicielles</p> Signup and view all the answers

Identifier les composants ______ est l'un des principaux objectifs de la réingénierie de logiciel.

<p>problématiques</p> Signup and view all the answers

Parmi, les choix suivants, lequel représente une étape de la réingénierie de logiciel?

<p>Analyse du code source. (B)</p> Signup and view all the answers

La priorité de la documentation est de modifier le code afin d'améliorer la structure existante.

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

Quel est le but de la mesure 'Tct' (Total d'appel) dans le graphe d'appel?

<p>nombre d'appels d'unités</p> Signup and view all the answers

Le modèle ______ est le modèle le plus simple pour la réingénierie des données.

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

Quel est l’objectif de l’utilisation des getters et setters?

<p>Cacher l’accès des variables (C)</p> Signup and view all the answers

Selon le cours LOG530, que signifie le terme réusiner (refactoring) de code?

<p>Réarranger le code afin d’améliorer sa structure. (B)</p> Signup and view all the answers

Une bonne réingénierie ne demande pas un investissement monétaire.

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

La mesure de flott de contrôle (Bs) détermine quoi?

<p>Bris de structure</p> Signup and view all the answers

Lors d’une réingénierie, une structure de code trop complexe peut être simplifié en plusieurs ______ plus petites.

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

Associez les outils de réingénierie à leur description:

<p>Compositional Refactoring = automatise certaines étapes de refactoring. AutoRefactor = normaliser le code Java pour fournir du code plus petit. Structure101 = permet de naviguer vers le code correspondant dans l’IDE.</p> Signup and view all the answers

Pourquoi y-a-t’il des options à utiliser lors de la compilation?

<p>Pour varier les niveaux d’optimisation (B)</p> Signup and view all the answers

Est-ce l’opération d’écriture est plus performante que l’opération de lecture d’un disque?

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

Nommez un algorithme performant de tri:

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

Flashcards

Qu'est-ce que la réingénierie ?

Examiner un objet pour le refaire sous une autre forme.

Objectifs réingénierie logicielle

Transformer un logiciel existant pour améliorer sa performance, son évolutivité et sa maintenabilité.

Restructuration du logiciel

Une technique de réingénierie réorganisant un logiciel sans changer sa fonctionnalité.

Rétro-ingénierie du logiciel

Analyser un logiciel pour comprendre ses données, sa conception et ses spécifications.

Signup and view all the flashcards

Abstraction des fonctionnalités

Le mainteneur s'intéresse à ce que fait le programme, du point de vue de l'utilisateur.

Signup and view all the flashcards

Abstraction des données

Comprendre les données utilisées et les opérations qu'elles subissent.

Signup and view all the flashcards

Réingénierie des processus d'affaires

Vise à améliorer l'efficacité et l'économie des processus d'affaires.

Signup and view all the flashcards

Principaux objectifs réingénierie

Récupérer des informations, faciliter la conversion, améliorer la documentation et identifier les composants problématiques

Signup and view all the flashcards

Analyse des dépendances

Permet d'évaluer le couplage des différents modules d'une application.

Signup and view all the flashcards

Nombre de bris de structure (Bs)

Nombre d'arcs qui se croisent dans le graphe de contrôle violant ainsi les principes de la programmation structurée

Signup and view all the flashcards

Total d'appel (Tct)

Mesure le nombre de fois qu'une unité logiciel appelle d'autres unités. Tct fait la somme des appels répétitifs.

Signup and view all the flashcards

Longueur de l'énoncé d'une variable (Ls)-

Ls est la moyenne des caractères des variables utilisées dans un programme.

Signup and view all the flashcards

L'optimisation

Rendre le programme le plus rapide possible en économisant les ressources.

Signup and view all the flashcards

Bonne pratique d'itération

Privilégier l'organisation colonnaire lors des itération

Signup and view all the flashcards

Study Notes

Amélioration de la Maintenance du Logiciel : Réingénierie

  • Le chapitre porte sur la réingénierie du logiciel, présenté par Dr. Alain April à Montréal le 27 septembre 2016.
  • Les sujets abordés incluent les concepts de réingénierie, les niveaux d'abstraction, le but et les objectifs, ainsi que les techniques de réingénierie.
  • Les techniques de réingénierie comprennent la redocumentation, la rétro-ingénierie, la restructuration et l'optimisation.

Introduction à la Réingénierie

  • La réingénierie consiste à étudier un objet pour le refaire sous une autre forme, comme re-conceptualiser, re-développer ou re-fabriquer.
  • C’est un processus applicable à plusieurs disciplines, pas uniquement à la technologie.
  • La réingénierie peut concerner du matériel (voitures, électronique) ou de l'humain (savoir-faire, "business process reengineering").

Objectifs de la Réingénierie Logicielle

  • La réingénierie logicielle vise à transformer un logiciel existant pour améliorer sa performance, son évolutivité et sa maintenabilité.
  • Habituellement, la réingénierie implique peu ou pas de changements fonctionnels.

Historique du Domaine de la Réingénierie

  • Les logiciels des années 70 ne disparaissent pas facilement.
  • Dans les années 1980, de nouvelles architectures sont apparues.
  • Dans les années 1990, de nombreuses publications sur la rétro-ingénierie ont été produites.
  • Le bug de l'an 2000 a vu l'arrivée d'outils de réingénierie automatiques.
  • Des options de restructuration sont apparues dans les environnements de développement Java et .net.

Intérêt du Domaine de la Réingénierie

  • La réingénierie réduit le risque d’échec lors du remplacement d'un logiciel patrimonial.
  • Les problèmes de connaissance des règles d’affaires et le manque de ressources compétentes sont des facteurs importants.
  • Le coût de la réingénierie est souvent inférieur à celui du remplacement complet d'un logiciel.

Taxonomie de la Réingénierie

  • La réingénierie logicielle englobe des activités telles que la restructuration, la maintenance logicielle et la rétro-ingénierie.
  • La rétro-ingénierie comprend le recouvrement de la conception, la redocumentation, et la re-conceptualisation.
  • Elle inclut également la rétro-ingénierie des données et des processus.

Réingénierie des Processus d'Affaires

  • Elle vise à refondre les processus d'affaires pour les rendre plus efficaces et économiques.
  • Elle dépend de l'introduction de nouvelles technologies qui soutiennent les processus de l'entreprise.
  • Elle enclenche la nécessité de réingénierie des logiciels patrimoniaux qui supportent les processus d'affaire de l'entreprise.

La Réingénierie du Logiciel

  • Elle consiste à modifier ou reconstituer un logiciel sans nécessairement changer sa fonctionnalité.
  • L'objectif est d'adapter le logiciel aux nouvelles technologies ou de mieux l'intégrer à un processus d'affaires.
  • Par exemple, adapter un logiciel pour lire un code à barres ou migrer vers une librairie graphique mieux maintenue.
  • La réingénierie est appropriée lorsqu'un logiciel requiert beaucoup de maintenance ou n'est pas bien documenté.
  • Elle vise à réduire les coûts de maintenance et à améliorer l'intégration à un processus d'affaires.

Restructuration du Logiciel

  • Technique de réingénierie qui réorganise un logiciel sans modifier sa fonctionnalité.
  • Les objectifs incluent l'amélioration de la maintenabilité, de la structure et de la performance du logiciel.

Rétro-ingénierie du Logiciel

  • Analyse d'un logiciel pour comprendre ses données, sa conception et ses spécifications.
  • Extraction d'informations utiles, comme la création d'un diagramme de classe à partir du code source.
  • Souvent une étape de la réingénierie réalisée avec des logiciels-outils (Visual Paradigm, Omondo, etc.).

Cours LOG530 sur la Réingénierie du Logiciel

  • Le cours couvre les principes de la réingénierie logicielle, abordant différentes techniques théoriques et pratiques à divers niveaux d'un logiciel.
  • À la fin du cours, l'étudiant devra être capable de proposer des solutions concrètes pour la réingénierie, de gérer la transformation d'un système patrimonial et d'utiliser les outils de support.
  • Les concepts abordés incluent la maintenance du logiciel, les exigences des systèmes modernes, les stratégies de transformation, et les approches centrées sur les règles d'affaires.

Niveaux d'Abstraction dans la Réingénierie

  • Abstraction des fonctionnalités: le mainteneur s'intéresse à ce que le programme réalise du point de vue des utilisateurs.
  • Abstraction des données: comprendre les données et les opérations qu'elles subissent.
  • Abstraction des processus: comprendre les processus concurrents et distribués.

Niveaux d'Abstractions du Logiciel

  • La réingénierie implique une restructuration fonctionnelle, passant par la rétro-ingénierie pour repenser le concept et respécifier les besoins.
  • L'ingénierie, quant à elle, raffine le concept en reconceptualisant les besoins pour l'implémentation.

Principaux Objectifs de la Réingénierie

  • Récupérer des informations utiles et faciliter la conversion vers une autre plateforme.
  • Améliorer la documentation et identifier la duplication de code.
  • Optimiser le logiciel et identifier les composants réutilisables.
  • Réduire l'effort de maintenance et augmenter la qualité de service.

Étapes de la Réingénierie

  • Comprend l'analyse du code existant, la restructuration (refactoring), et la comparaison des mesures avant et après pour évaluer l'amélioration.

Techniques de la Réingénierie : Arbre Syntaxe Abstraite (ASA)

  • Nécessite l’analyse ASA (Arbre Syntaxe Abstraite)
  • Cette approche s'effectue en plusieurs étapes: dépendances, flux de contrôle, flux de données et modèle de données.
  • La documentation et la qualité du code source sont également calibrées pour améliorer le code source.

Les Dépendances dans la Réingénierie

  • L'analyse des dépendances permet d'évaluer le couplage des différents modules d'une application.
  • Un fort couplage rend l'application difficile à maintenir et à faire évoluer.
  • Une matrice de dépendances illustre le couplage entre les composants, idéalement faible.

Le Graphe de Flux de Contrôle

  • Suite de l'analyse ASA (Arbre Syntaxe Abstraite), on passe à la création d'un graphe de flux de contrôle.

Exemple de Flux de Contrôle

  • Un algorithme simple pour calculer la somme des nombres positifs dans une liste.
  • Le graphe de flux de contrôle permet d'évaluer la complexité cyclomatique d'un module.

Le Graphe de Flux de Données

  • Identifie comment les données sont utilisées et modifiées à travers le programme.

Graphe de Flux de Données (Variable d'intérêt)

  • Le graphe illustre le flux pour une variable spécifique, montrant où elle est définie, utilisée, et détruite.

Modèles de Données

  • Ils sont créés après la construction de l'ASA, venant après l'identification des dépendances et des différents flux

Modèles de Données (Conceptuel)

  • Modèles ERD conceptuels recueillant des informations à partir des exigences de l'entreprise.
  • Les entités et les relations sont modélisées autour des besoins de l'entreprise sans tenir compte de la conception de la base de données.

Modèles de Données (Logique)

  • Recueillent aussi des informations à partir des exigences, mais sont plus complexes que le modèle conceptuel en définissant les types de colonnes.

Modèles de Données (Physique)

  • Représente le modèle de conception réel d'une base de données relationnelle.
  • L'utilisation précise du type de données est nécessaire pour les colonnes d'entités et les mots réservés doivent être évités.

D'autres Modèles

  • D'autres modèles existent dans le processus de rétroingénierie pour compléter l'analyse du code source.

Types de Mesures

  • Mesures du flot de contrôle, du graphe d'appel, de définition et de dépendance des données, des expressions, de la documentation, des routines et des classes, ainsi que des fichiers.

Mesure du Flot de Contrôle : Bs

  • Bs, ou le nombre de bris de structure, mesure le nombre d'arcs qui se croisent dans le graphe de contrôle, violant les principes de la programmation structurée.
  • L'objectif est d'atteindre un Bs de zéro pour une méthode donnée.

Mesure du Graphe d'Appel : Total d'Appel (Tct)

  • Tct mesure le nombre de fois qu'une unité logicielle appelle d'autres unités, additionnant les appels répétitifs.

Mesure de Définition de Données : PriAtt

  • PriAtt est le nombre d'attributs privés d'une classe, reflétant l'encapsulation.

Mesure des Expressions : Ds

  • Ds représente le nombre d'énoncés déclaratifs dans le code.

Mesure de la Documentation : Ls

  • Ls est la longueur moyenne des caractères des énoncés de variables, indiquant potentiellement la clarté des noms.

Ls : Exemple

  • Ls est la moyenne du nombre de caractères des variables « index » et « increment », calculée comme (5 + 9) / 2 = 7.0.

Quelques Exemples de Restructuration Simple

  • Ces exemples de restructuration ont pour but de démontrer différents scénarios pour la réingénierie

La Restructuration : Simplification de Conditions

  • Simplification de conditions complexes pour améliorer la lisibilité. Exemple: remplacement de if not (A > B and (C < D or not (E > F) ) ) par if (A <= B and (C >= Dor E > F).

Restructuration d'un Logiciel Spaghetti

  • Le code "spaghetti" est à éviter à tout prix et est un bon candidat pour la réingénierie.

Exemples d'Améliorations de Code

  • Autre exemples d'amelioration de code sont: scinder une grande classe, briser le code en morceaux logiques, convertir le code afin d'appliquer des patrons de conception ou généraliser des types.

La Réingénierie (Restructurer/Refactoring)

  • La maintenance quotidienne tend à dégrader la structure du logiciel, le rendant plus difficile à modifier et à tester.
  • Les programmes peuvent être restructurés automatiquement et les conditionnelles simplifiées, notamment avec l'IDE.

Quelques Plugins Eclipse

  • Plugins pour Eclipse comme "Compositional Refactoring" et "AutoRefactor" aident à améliorer et normaliser le code Java.
  • "Structure101" affiche les diagrammes UML dans l'EDI.

Refactoring pour IntelliJ

  • Le menu Refactor dans IntelliJ IDEA permet de prévisualiser les changements avant de les appliquer, facilitant le refactoring du code.

L'Optimisation

  • L'optimisation inclut l'utilisation du compilateur, des opérations d'entrées/sorties efficaces, une bonne gestion de la mémoire, et le choix judicieux des algorithmes.

L'Optimisation avec le Compilateur

  • Le compilateur GCC offre des options pour varier les niveaux d'optimisation, comme la performance (-O1 à -O3) ou la taille de l'exécutable (-Os).

L'Optimisation des Opérations d'Entrées/Sorties

  • Elles sont coûteuses en termes de performance, notamment l'accès aux disques rotatifs et aux bases de données.
  • Il est donc conseillé d'adopter des structures de données qui réduisent le nombre d'accès.

L’Utilisation de la Mémoire (Optimisation)

  • Il faut bénéficier au maximum de la mémoire cache, qui est plus rapide.

Langages Interprétés vs Compilés (Optimisation)

  • Les langages compilés (C++) sont plus rapides mais moins portables, tandis que les langages de bytecode (Java) sont portables, mais moins rapides.

Algorithmes Utilisés (Optimisation)

  • Utiliser les algorithmes de hautes performances comme QuickSort et MergeSort

Studying That Suits You

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

Quiz Team

Related Documents

Description

Ce chapitre explore la réingénierie du logiciel, couvrant les concepts, les niveaux d'abstraction, le but et les objectifs. Il présente aussi les techniques de réingénierie telles que la redocumentation, la rétro-ingénierie, la restructuration et l'optimisation. La réingénierie vise à améliorer la performance du logiciel.

More Like This

Use Quizgecko on...
Browser
Browser