Galerie de cartes mentales Chapitre 4 Carte mentale de l'ingénierie de conception
Chapitre 4 Carte mentale de l'ingénierie de conception. Cette carte mentale comprend un aperçu de l'ingénierie de conception logicielle, des principes de conception logicielle, de la conception de l'architecture logicielle, de la technologie de conception au niveau des composants, des spécifications de conception et de la révision de la conception.
Modifié à 2023-11-14 21:39:57This is a mind map about bacteria, and its main contents include: overview, morphology, types, structure, reproduction, distribution, application, and expansion. The summary is comprehensive and meticulous, suitable as review materials.
This is a mind map about plant asexual reproduction, and its main contents include: concept, spore reproduction, vegetative reproduction, tissue culture, and buds. The summary is comprehensive and meticulous, suitable as review materials.
This is a mind map about the reproductive development of animals, and its main contents include: insects, frogs, birds, sexual reproduction, and asexual reproduction. The summary is comprehensive and meticulous, suitable as review materials.
This is a mind map about bacteria, and its main contents include: overview, morphology, types, structure, reproduction, distribution, application, and expansion. The summary is comprehensive and meticulous, suitable as review materials.
This is a mind map about plant asexual reproduction, and its main contents include: concept, spore reproduction, vegetative reproduction, tissue culture, and buds. The summary is comprehensive and meticulous, suitable as review materials.
This is a mind map about the reproductive development of animals, and its main contents include: insects, frogs, birds, sexual reproduction, and asexual reproduction. The summary is comprehensive and meticulous, suitable as review materials.
Chapitre 4 Projet de conception
Présentation de l'ingénierie de conception de logiciels
Présentation de l'ingénierie de conception de logiciels
L'analyse des exigences logicielles résout le problème de « quoi faire », tandis que le processus de conception de logiciels résout le problème de « comment le faire »
La conception logicielle est le processus de transformation des exigences logicielles en représentation logicielle. Elle se compose principalement de deux étapes : l'étape de conception de l'architecture logicielle et la conception au niveau des composants.
Tâches de conception de logiciels
À l'aide d'une approche de conception, les informations sur les exigences logicielles représentées par les modèles de données, fonctionnels et comportementaux dans le modèle d'analyse logicielle sont transmises à la phase de conception, ce qui aboutit à la conception de données/classes, à la conception d'architecture, à la conception d'interfaces et à la conception au niveau des composants.
Conception de données/classes : transformez le modèle de classe d'analyse en implémentation de classe et en structures de données requises pour l'implémentation logicielle
Le contenu détaillé des données décrit dans les classes, les objets de données et les relations définis dans le CRC et le dictionnaire de données constitue la base des activités de conception de données.
Le processus de conception des données comprend les deux étapes suivantes :
Premièrement, la sélection d'une représentation logique pour les objets de données déterminés lors de la phase d'analyse des exigences nécessite une analyse algorithmique de différentes structures afin de sélectionner la solution de conception la plus efficace ;
Ensuite, identifiez les modules de programme qui fonctionnent sur les structures de données logiques nécessaires pour limiter ou étendre l'impact des décisions individuelles de conception de données.
Conception architecturale : la conception architecturale définit la structure globale du logiciel
La conception architecturale définit la structure globale du logiciel, qui se compose de composants logiciels, d'attributs visibles de l'extérieur et des relations entre eux.
Les représentations de conception architecturale peuvent être dérivées de spécifications de système, de modèles d'analyse et d'interactions de sous-systèmes définis dans le modèle d'analyse.
Conception d'interface : la conception d'interface décrit comment communiquer au sein du logiciel, entre le logiciel et les systèmes collaboratifs, et entre les collègues logiciels.
La conception d’interface comprend principalement trois aspects :
Concevoir des interfaces entre les modules logiciels
Concevoir des interfaces entre les modules et d'autres producteurs et consommateurs d'informations non humaines (tels que des entités externes)
L'interface entre le concepteur (utilisateur) et l'ordinateur
Conception au niveau des composants : la conception au niveau des composants transforme les éléments structurels de l'architecture logicielle en une description procédurale des composants logiciels.
La conception au niveau des composants transforme les éléments structurels de l'architecture logicielle en descriptions procédurales des composants logiciels.
Les informations obtenues à partir des modèles basés sur les classes, des modèles de flux et des modèles comportementaux constituent la base de la conception des composants.
Objectifs de conception de logiciels
Dans le processus de conception de logiciels, nous devons prêter une attention particulière aux facteurs de qualité du logiciel.
Les objectifs du processus de conception de logiciels McGlanghlin sont :
1) La conception doit mettre en œuvre toutes les exigences explicites décrites dans le modèle d'analyse et doit répondre à toutes les exigences implicites attendues par l'utilisateur.
2) La conception doit être lisible et compréhensible, ce qui la rend facile à programmer, à tester et à maintenir à l'avenir.
3) La conception doit commencer du point de vue de la mise en œuvre et donner une image complète du logiciel liée aux données, aux fonctions et aux comportements.
Normes techniques pour la conception des mesures
1) La structure conçue doit être une structure hiérarchique pour établir le contrôle entre les composants logiciels.
2) La conception doit être modulaire, divisant logiquement le logiciel en composants qui remplissent des fonctions ou sous-fonctions spécifiques.
3) La conception doit inclure à la fois l'abstraction des données et l'abstraction des processus.
4) La conception doit établir des modules dotés de caractéristiques fonctionnelles indépendantes.
5) La conception doit établir des interfaces qui réduisent les connexions complexes entre le module et l'environnement externe.
6) La conception doit être capable d'établir une méthode pilotable et reproductible basée sur les informations obtenues à partir de l'analyse des exigences logicielles.
processus de conception de logiciels
1) Élaborer un cahier des charges
2) Architecture et conception d'interface
3) Conception de données/classes
4) Conception au niveau des composants (processus)
5) Rédiger les documents de conception
6) Revue de conception
principes de conception de logiciels
Abstraction et raffinement progressif
L'abstraction est une stratégie de base pour contrôler la complexité à mesure que l'échelle de conception de logiciels augmente progressivement.
Le processus d'abstraction va du spécifique au général. Le concept de niveau supérieur est l'abstraction du concept de niveau inférieur, et le concept de niveau inférieur est le raffinement et le raffinement du concept de niveau supérieur.
Chaque étape du processus de génie logiciel est une description concrète de l'interprétation d'un niveau d'abstraction supérieur.
Les principales méthodes d'abstraction dans la conception de logiciels sont : l'abstraction de processus et l'abstraction de données.
L'abstraction de processus (également appelée abstraction fonctionnelle) signifie que toute opération qui complète une fonction clairement définie peut être traitée comme une entité unique par l'utilisateur, bien que cette opération soit en réalité complétée par une série d'opérations de niveau inférieur.
L'abstraction des données fait référence à la définition des types de données et des opérations appliquées aux objets de ce type, et limite la plage de valeurs des objets. Les données ne peuvent être modifiées et observées qu'à travers ces opérations.
Rechercher progressivement le raffinement
Affinement étape par étape, décomposant le processus de résolution de problème en plusieurs étapes ou étapes, chaque étape étant plus affinée et plus proche de la solution du problème que l'étape précédente.
L'abstraction permet aux concepteurs de décrire les processus et les données tout en ignorant les détails de bas niveau, tandis que le raffinement aide les concepteurs à révéler les détails de bas niveau au cours du processus de conception.
Modulaire
La modularisation, c'est-à-dire la division d'un logiciel en composants plus petits, indépendants mais interdépendants selon des principes prescrits, est en réalité un processus de décomposition et d'abstraction du système.
Un module est une collection d'objets de programme tels que des descriptions de données et des instructions exécutables. Il est nommé individuellement et est accessible par son nom.
Par exemple, processus. Fonctions, sous-programmes, macros, etc.
informations cachées
Les détails d'implémentation de chaque module doivent être masqués des autres modules
Les informations (y compris les données et les procédures) contenues dans le bloc ne peuvent pas être utilisées par d'autres modules qui n'ont pas besoin de ces informations.
Grâce au masquage des informations, des restrictions d'accès aux détails du processus et aux structures de données locales du module peuvent être définies et appliquées.
Fonctionnellement indépendant
Indépendance fonctionnelle : l'indépendance fonctionnelle est le résultat direct de concepts tels que la modularité, l'abstraction, la dissimulation d'informations et la localisation. L'indépendance fonctionnelle peut être obtenue en développant des modules fonctionnellement spécifiques et en évitant les interactions excessives avec d'autres modules.
L’importance de l’indépendance fonctionnelle
Les fonctionnalités sont séparées et les interfaces sont simplifiées, ce qui rend le logiciel plus facile à développer
Étant donné que les effets secondaires provoqués par la modification de la conception ou la modification du codage sont limités, la propagation des erreurs est réduite et la réutilisation des modules devient possible, rendant ainsi le logiciel plus facile à maintenir et à tester.
L'indépendance fonctionnelle peut être mesurée par deux indicateurs : la cohésion et le couplage
La cohésion est une mesure du degré d'intégration des éléments d'un module les uns avec les autres.
La cohésion générale du module est divisée en sept types
1) Cohésion fortuite (cohésion accidentelle) : Un module qui sépare les mêmes segments de code de programme qui ne présentent pas clairement de fonctions indépendantes dans plusieurs modules est appelé module de cohésion fortuite.
2) Cohésion logique : fait référence à un module qui exécute un ensemble de tâches logiquement liées. Lorsque le module est appelé, les paramètres de contrôle transmis au module déterminent la fonction que le module doit exécuter.
3) Convergence temporelle : signifie que toutes les tâches d'un module doivent être exécutées dans le même laps de temps. Par exemple, module d'initialisation et module de terminaison
4) Cohésion des processus : fait référence à un module accomplissant plusieurs tâches, et ces tâches doivent être exécutées selon une procédure spécifiée (procédurale)
5) Cohésion de la communication : signifie que tous les éléments de traitement d'un module sont concentrés dans une zone d'une certaine structure de données
6) Cohésion séquentielle : fait référence à un module remplissant plusieurs fonctions, et ces fonctions doivent être exécutées séquentiellement
7) Cohésion fonctionnelle : fait référence au fait que toutes les parties d'un module travaillent ensemble pour remplir une fonction spécifique, sont étroitement liées et sont indissociables.
Le couplage est une mesure de l'indépendance relative entre les modules (à quel point ils sont connectés les uns aux autres)
Généralement, il existe sept types de méthodes de couplage possibles entre modules.
1) Couplage de contenu : si un module accède directement aux données internes d'un autre module ; ou si un module ne passe pas à l'autre module par l'entrée normale ; ou si deux modules ont une partie du code du programme se chevauchent ou si un module a plusieurs entrées ; Ensuite, le couplage de contenu se produit entre les deux modules
2) Couplage public : Si un groupe de modules accède tous au même environnement de données commun, le couplage entre eux est appelé couplage public. L'environnement de données publiques peut être une structure globale de données, une zone de communication partagée, une zone de couverture publique de la mémoire, etc.
3) Couplage externe : lorsque les modules sont connectés via un environnement extérieur au logiciel (tel qu'un couplage E/S du module à un périphérique, un format ou un protocole de communication spécifique), on parle de couplage externe.
4) Couplage de contrôle : si les paramètres transmis d'un module à un autre module contiennent des informations de contrôle et que les informations de contrôle sont utilisées pour contrôler la logique d'exécution dans le module de réception, on parle de couplage de contrôle.
5) Couplage de balises : une partie d'une structure de données (telle qu'une sous-structure d'une certaine structure de données) est transmise entre deux modules via une table de paramètres, qui est le couplage de balises.
6) Couplage de données : seules les données simples sont transférées entre deux modules via des tables de paramètres, appelées couplage de données.
7) Couplage indirect : S'il n'y a pas de relation directe entre deux modules, c'est-à-dire qu'aucun d'eux ne dépend de l'autre et peut fonctionner indépendamment, ce couplage est appelé couplage indirect.
Plus les connexions entre modules sont étroites, plus il y a de connexions, plus le couplage est élevé et plus leur indépendance fonctionnelle est faible.
Plus la connexion entre les différents éléments d’un module est étroite, plus sa cohésion est élevée.
Les modules ayant une forte indépendance fonctionnelle doivent être des modules à forte cohésion et à faible couplage.
Conception d'architecture logicielle
L'architecture logicielle se concentre sur une ou plusieurs structures d'un système, y compris les composants logiciels, les propriétés visibles de l'extérieur de ces composants et les relations entre eux.
Bass propose trois raisons clés pour lesquelles l'architecture est importante :
① Faciliter la communication entre les parties prenantes
②Facile à une prise de décision précoce dans la conception du système
③Abstraction transmissible au niveau du système
processus de développement de l'architecture
Architecture logicielle commune
Structure hôte unique k
Structure C/S (Client/Serveur)
Structure B/S (Navigateur/Serveur)
style d'architecture logicielle
La grande majorité peut être classée parmi un nombre relativement restreint de styles architecturaux.
Chaque style décrit une catégorie de système, qui comprend :
① Certains composants qui implémentent les fonctions requises par le système (tels que les bases de données, les modules informatiques)
②Un ensemble de « connecteurs » utilisé pour connecter des composants pour « la communication, la coordination et la coopération »
③ Définir les contraintes du système sur la façon dont les composants sont intégrés
④ Modèle sémantique qui permet aux concepteurs de comprendre les propriétés de l'ensemble du système et d'analyser les propriétés connues
architecture centrée sur les données
Certaines données (comme un fichier ou une base de données) sont stockées au centre de la structure et sont fréquemment utilisées, ajoutées, supprimées ou modifiées par d'autres composants.
architecture de style de flux de données
Cette structure convient aux données d'entrée devant être transformées en données de sortie par une série de composants de calcul ou de traitement.
Architecture de style appel et retour
Ce style permet à un concepteur de logiciels de concevoir une architecture très facile à modifier et à étendre.
Contient : une architecture de style programme/sous-programme principal et une architecture de style appel de procédure à distance
Il y a quelques concepts à comprendre ici :
Profondeur de la structure du programme : Le nombre de niveaux de la structure du programme est appelé la profondeur de la structure. La profondeur de la structure reflète dans une certaine mesure la taille et la complexité de la structure du programme.
La largeur de la structure du programme : le nombre maximum de modules au même niveau dans la hiérarchie est appelé largeur de la structure
Fan-in et fan-out de module : la fan-out représente le nombre d'autres modules qu'un module appelle (ou contrôle) directement. Le fan-in est défini comme le nombre de modules qui appellent (ou contrôlent) un module donné. De multiples sortances signifient que de nombreux modules subordonnés doivent être contrôlés et coordonnés. Les modules multi-fan-in sont généralement des modules publics.
Architecture de style orientée objet
Méthodes permettant aux composants du système d'encapsuler des données et de manipuler des données
L'interaction et la coordination entre les composants sont transmises via des messages
architecture de style hiérarchique
Dans cette structure, différents niveaux sont définis et chaque niveau effectue des opérations plus proches des instructions machine que le niveau externe.
Évaluer des architectures alternatives
Pour la même exigence logicielle, différentes structures logicielles seront dérivées en raison des différents principes des différentes méthodes de conception.
Différentes structures logicielles pour un même problème
ATAM (méthode d'analyse des compromis d'architecture)
1) Définir des scénarios d'application (scénarios) : exprimer le système du point de vue de l'utilisateur à travers des diagrammes de cas d'utilisation
2) Dériver les exigences, les contraintes et la description de l'environnement : cela fait partie de l'ingénierie des exigences pour garantir que toutes les préoccupations des clients sont répertoriées.
3) Décrire le style architectural capable de gérer les situations et les exigences ci-dessus
4) Évaluer chaque performance du système individuellement. Les performances pour la conception d'architecture comprennent : la fiabilité, les performances, la sécurité, la maintenabilité, la flexibilité, la testabilité, la portabilité, la réutilisabilité et l'interopérabilité, etc.
5) Pour différentes formes architecturales, évaluer la sensibilité de ces performances mentionnées à l'étape 4. Cela peut être évalué de cette manière : apporter quelques petites modifications à l'ensemble de l'architecture, analyser et déterminer s'il y a des changements sensibles dans les performances d'appel. Les performances fortement affectées par les modifications architecturales sont appelées points sensibles.
6) Évaluez les architectures proposées à l'étape 3 à travers l'analyse de sensibilité à l'étape 5. La méthode décrite par SEI est la suivante : Lorsque les points sensibles d'une architecture sont déterminés, nous devons trouver les facteurs qui nécessitent le plus de points de compromis dans le système (points de compromis). Le facteur de compromis signifie que la modification de ce contenu dans l'architecture entraînera des changements sensibles dans les performances du système. Par exemple, les performances d'un système avec une structure client-serveur sont étroitement liées au nombre de serveurs dans le système (par exemple, augmenter le nombre de serveurs améliorera les performances du système dans une certaine mesure)... Dans dans ce cas, le nombre de serveurs est ce point d'équilibre dans l'architecture.
Lors de la conception d'une architecture logicielle, vous pouvez vous référer aux règles suivantes :
(1) Améliorer la structure du logiciel et améliorer l'indépendance des modules
(2) Profondeur, largeur, sortance et entrée appropriées du module
(3) La portée de jugement du module doit être dans sa portée de contrôle
(4) S'efforcer de réduire la complexité des interfaces des modules
(5) Concevoir un module avec une seule entrée et une seule sortie
(6) La fonctionnalité du module doit être prévisible et la taille du module doit être modérée.
(7) Généralement, il est préférable qu'un module contienne environ 30 à 50 instructions.
(8) Une structure logicielle bien conçue présente généralement une diffusion plus élevée au niveau de la couche supérieure, une diffusion moindre au niveau de la couche intermédiaire et une diffusion élevée au niveau de la couche inférieure.
technologie de conception au niveau des composants
Dans les méthodes d'analyse et de conception structurées, les composants sont souvent appelés modules.
Dans l'analyse et la conception orientées objet, les composants sont appelés classes. Dans les méthodes de développement basées sur les composants, les composants sont appelés composants.
Au cours de la phase de conception au niveau des composants, les travaux suivants sont principalement réalisés :
Déterminer l'algorithme utilisé pour chaque composant, sélectionner un outil approprié pour exprimer le processus algorithmique et rédiger une description procédurale détaillée du composant.
Déterminer les structures de données utilisées en interne par chaque composant
À la fin de la conception au niveau des composants, les résultats ci-dessus doivent être écrits dans la spécification de conception au niveau des composants et transformés en un document formel par examen, qui servira de base pour l'étape suivante (étape de codage).
Méthode de programmation structurée
Une définition plus populaire est : « Si les blocs de code d'un programme sont connectés uniquement via les trois structures de contrôle de base que sont la séquence, la sélection et la boucle, et que chaque bloc de code n'a qu'une seule entrée et une seule sortie, alors le programme est dit structuré. . de"
Avec le développement de nouvelles méthodes et technologies de développement de logiciels telles que l'orientation objet et la réutilisation de logiciels, une approche de développement plus réaliste et plus efficace peut être une combinaison organique de méthodes descendantes et ascendantes.
Représentation graphique
Organigramme du programme
Les organigrammes de programme sont indépendants de tout langage de programmation, relativement intuitifs, clairs et faciles à apprendre et à maîtriser.
Afin d'utiliser des organigrammes pour décrire des programmes structurés, vous devez limiter les organigrammes à seulement cinq structures de contrôle de base.
Diagramme NS
Nassi et Shneiderman ont proposé un outil de description graphique conforme aux principes de la programmation structurée, appelé diagramme en boîte, également appelé diagramme N-S.
Cinq structures de contrôle de base
TAMPON
PAD est l'abréviation de Problem Analysis Diagram, qui a évolué à partir de l'organigramme du programme.
Cinq structures de contrôle de base
Table de décision
Lorsque l'algorithme contient plusieurs sélections de conditions imbriquées, il est difficile de le décrire clairement à l'aide d'organigrammes de programme, de diagrammes N-S ou de PAD.
Cependant, les tableaux de décision peuvent exprimer clairement la correspondance entre des combinaisons complexes de conditions et les actions à entreprendre.
L'avantage de la table de décision est qu'elle peut décrire toutes les règles de traitement de manière concise et sans ambiguïté.
Cependant, la table de décision représente la logique statique, qui est le résultat possible sous une certaine combinaison de valeurs de condition. Elle ne peut pas exprimer la séquence de traitement, ni la structure de la boucle.
Langage de conception PDL
PDL (Program Design Language) est un langage utilisé pour décrire la conception de l'algorithme et les détails de traitement des composants fonctionnels, appelé langage de conception.
C'est une sorte de pseudo-code. D'une manière générale, les règles de grammaire du pseudocode sont divisées en « grammaire externe » et « grammaire interne »
La syntaxe étrangère doit être conforme aux règles grammaticales des instructions couramment utilisées dans les langages de programmation généraux.
La grammaire interne peut utiliser des phrases simples, des expressions et des symboles mathématiques courants en anglais pour décrire les fonctions qu'un programme doit exécuter.
Exemples d'utilisation du PDL
Fonctionnalités PDL
1. Il existe une syntaxe fixe externe aux mots-clés qui fournit toutes les structures de contrôle structurées, les descriptions de données et les fonctionnalités des composants. Les mots-clés appartenant à la grammaire étrangère constituent un ensemble de vocabulaire limité qui peut segmenter structurellement le texte PDL et le rendre facile à comprendre. Afin de distinguer les mots-clés, il est stipulé que les mots-clés doivent être en majuscules et les autres mots en minuscules.
2. La grammaire interne utilise le langage naturel pour décrire les caractéristiques du traitement. La syntaxe interne est relativement flexible, tant qu'elle est écrite clairement, il n'y a pas lieu de s'inquiéter des erreurs grammaticales, afin que les gens puissent se concentrer sur la description de la logique de l'algorithme.
3. Il existe des mécanismes de description de données, notamment des structures de données simples (telles que les scalaires et les tableaux) et complexes (telles que les listes chaînées et les structures hiérarchiques).
4. Il existe une définition de sous-programme et un mécanisme d'appel pour exprimer les descriptions d'interface de différentes manières.
Spécifications de conception et revues de conception
les spécifications de conception
examen de la conception
Le but ultime de la conception de logiciels est d'obtenir la meilleure solution
« Meilleure » signifie que parmi toutes les solutions candidates, la solution capable d'atteindre une productivité, une fiabilité et une maintenabilité plus élevées est sélectionnée en fonction des conditions d'économie des coûts de développement, de réduction de la consommation de ressources et de raccourcissement du temps de développement.
Contenu de la revue de conception
Traçabilité : c'est-à-dire analyser la structure du système et la structure des sous-systèmes du logiciel pour confirmer si la conception du logiciel couvre toutes les exigences logicielles identifiées et si chaque composant du logiciel peut être retracé jusqu'à une certaine exigence.
Interface : analysez la connexion entre les différentes parties du logiciel et confirmez si l'interface interne et l'interface externe du logiciel ont été clairement définies. Si le composant répond aux exigences de cohésion élevée et de faible couplage. Si la portée du composant se situe dans sa plage de contrôle.
Risque : Confirmez si la conception du logiciel peut être mise en œuvre à temps dans les conditions techniques existantes et dans les limites du budget.
Praticité : confirmer si la conception du logiciel est pratique pour la solution aux besoins
Clarté technique : Confirmer que la conception du logiciel est exprimée sous une forme qui peut être facilement traduite en code
Maintenabilité : du point de vue de la maintenance du logiciel, confirmez si la conception du logiciel prend en compte la commodité d'une maintenance future.
Qualité : confirmer si la conception du logiciel présente de bonnes caractéristiques de qualité
Diverses options : Vérifiez si vous avez envisagé d’autres options et quels sont les critères de comparaison des différentes options ?
Limites : évaluer si les limitations du logiciel sont réalistes et conformes aux exigences
Autres questions spécifiques : évaluation de la documentation, testabilité, processus de conception, etc.
Il existe deux types d’examen : l’examen formel et l’examen informel.
Outre les développeurs de logiciels, l'examen formel invite également des représentants des utilisateurs et des experts du domaine à participer, généralement sous la forme d'une défense.
Les évaluations informelles sont plus ou moins de nature peer-to-peer et ne sont pas limitées dans le temps ou dans le format.