Principes de base de la conception de logiciels

La conception de logiciels est un processus pour transformer les exigences des utilisateurs en une forme appropriée, ce qui aide le programmeur dans le codage et la mise en œuvre de logiciels.

Pour évaluer les besoins des utilisateurs, un document SRS (Software Requirement Specification) est créé, tandis que pour le codage et la mise en œuvre, des exigences plus spécifiques et détaillées en termes de logiciel sont nécessaires. La sortie de ce processus peut être directement utilisée dans l'implémentation dans les langages de programmation.

La conception logicielle est la première étape du SDLC (Software Design Life Cycle), qui déplace la concentration du domaine du problème au domaine de la solution. Il essaie de spécifier comment répondre aux exigences mentionnées dans SRS.

Niveaux de conception de logiciels

La conception logicielle donne trois niveaux de résultats:

  • Architectural Design - La conception architecturale est la version la plus abstraite du système. Il identifie le logiciel comme un système avec de nombreux composants interagissant les uns avec les autres. À ce niveau, les concepteurs se font une idée du domaine de solution proposé.
  • High-level Design- La conception de haut niveau divise le concept de conception architecturale de «composant unique-entité multiple» en une vue moins abstraite des sous-systèmes et des modules et décrit leur interaction les uns avec les autres. La conception de haut niveau se concentre sur la façon dont le système et tous ses composants peuvent être mis en œuvre sous forme de modules. Il reconnaît la structure modulaire de chaque sous-système et leur relation et interaction entre eux.
  • Detailed Design- La conception détaillée concerne la partie mise en œuvre de ce qui est considéré comme un système et ses sous-systèmes dans les deux conceptions précédentes. Il est plus détaillé sur les modules et leurs implémentations. Il définit la structure logique de chaque module et leurs interfaces pour communiquer avec d'autres modules.

La modularisation

La modularisation est une technique permettant de diviser un système logiciel en plusieurs modules discrets et indépendants, qui sont censés être capables d'exécuter des tâches de manière indépendante. Ces modules peuvent fonctionner comme des constructions de base pour l'ensemble du logiciel. Les concepteurs ont tendance à concevoir des modules de manière à ce qu'ils puissent être exécutés et / ou compilés séparément et indépendamment.

La conception modulaire suit involontairement les règles de la stratégie de résolution de problèmes «diviser pour conquérir», car il y a de nombreux autres avantages liés à la conception modulaire d'un logiciel.

Avantage de la modularisation:

  • Les petits composants sont plus faciles à entretenir
  • Le programme peut être divisé en fonction des aspects fonctionnels
  • Le niveau d'abstraction souhaité peut être introduit dans le programme
  • Les composants à forte cohésion peuvent être réutilisés
  • Une exécution simultanée peut être rendue possible
  • Souhaité du point de vue de la sécurité

Concurrence

À l'époque, tous les logiciels sont destinés à être exécutés séquentiellement. Par exécution séquentielle, nous entendons que l'instruction codée sera exécutée l'une après l'autre, ce qui implique qu'une seule partie du programme est activée à un moment donné. Disons qu'un logiciel a plusieurs modules, alors un seul de tous les modules peut être trouvé actif à tout moment de l'exécution.

Dans la conception de logiciels, la concurrence est mise en œuvre en divisant le logiciel en plusieurs unités d'exécution indépendantes, comme des modules, et en les exécutant en parallèle. En d'autres termes, la concurrence permet au logiciel d'exécuter plus d'une partie de code en parallèle les unes par rapport aux autres.

Il est nécessaire que les programmeurs et les concepteurs reconnaissent ces modules, qui peuvent être exécutés en parallèle.

Exemple

La fonction de vérification orthographique du traitement de texte est un module logiciel, qui fonctionne avec le traitement de texte lui-même.

Couplage et cohésion

Lorsqu'un logiciel est modulaire, ses tâches sont divisées en plusieurs modules en fonction de certaines caractéristiques. Comme nous le savons, les modules sont un ensemble d'instructions assemblées afin d'accomplir certaines tâches. Ils sont cependant considérés comme une seule entité mais peuvent se référer les uns aux autres pour travailler ensemble. Il existe des mesures permettant de mesurer la qualité d'une conception de modules et leur interaction entre eux. Ces mesures sont appelées couplage et cohésion.

Cohésion

La cohésion est une mesure qui définit le degré d'intra-fiabilité au sein des éléments d'un module. Plus la cohésion est grande, meilleure est la conception du programme.

Il existe sept types de cohésion, à savoir -

  • Co-incidental cohesion -Il s'agit d'une cohésion non planifiée et aléatoire, qui pourrait être le résultat de la décomposition du programme en modules plus petits dans un souci de modularisation. Parce qu'il n'est pas planifié, il peut prêter à confusion pour les programmeurs et n'est généralement pas accepté.
  • Logical cohesion - Lorsque des éléments classés logiquement sont rassemblés dans un module, on parle de cohésion logique.
  • Temporal Cohesion - Lorsque des éléments du module sont organisés de manière à être traités à un moment similaire, on parle de cohésion temporelle.
  • Procedural cohesion - Lorsque des éléments du module sont regroupés, qui sont exécutés séquentiellement afin d'effectuer une tâche, on parle de cohésion procédurale.
  • Communicational cohesion - Lorsque des éléments de module sont regroupés, qui sont exécutés séquentiellement et travaillent sur les mêmes données (informations), on parle de cohésion communicationnelle.
  • Sequential cohesion - Lorsque des éléments du module sont regroupés parce que la sortie d'un élément sert d'entrée à un autre et ainsi de suite, on parle de cohésion séquentielle.
  • Functional cohesion - Il est considéré comme le plus haut degré de cohésion et il est très attendu. Les éléments du module en cohésion fonctionnelle sont regroupés car ils contribuent tous à une seule fonction bien définie. Il peut également être réutilisé.

Couplage

Le couplage est une mesure qui définit le niveau d'interdépendance entre les modules d'un programme. Il indique à quel niveau les modules interfèrent et interagissent les uns avec les autres. Plus le couplage est bas, meilleur est le programme.

Il existe cinq niveaux de couplage, à savoir -

  • Content coupling - Lorsqu'un module peut accéder directement, modifier ou faire référence au contenu d'un autre module, on parle de couplage au niveau du contenu.
  • Common coupling- Lorsque plusieurs modules ont un accès en lecture et en écriture à certaines données globales, on parle de couplage commun ou global.
  • Control coupling- Deux modules sont dits couplés en contrôle si l'un d'eux décide de la fonction de l'autre module ou modifie son flux d'exécution.
  • Stamp coupling- Lorsque plusieurs modules partagent une structure de données commune et travaillent sur une partie différente de celle-ci, on parle de couplage de timbres.
  • Data coupling- Le couplage de données se produit lorsque deux modules interagissent l'un avec l'autre au moyen de la transmission de données (en tant que paramètre). Si un module transmet la structure de données en paramètre, le module récepteur doit utiliser tous ses composants.

Idéalement, aucun couplage n'est considéré comme le meilleur.

Vérification de la conception

Le résultat du processus de conception de logiciel est la documentation de conception, des pseudo codes, des diagrammes logiques détaillés, des diagrammes de processus et une description détaillée de toutes les exigences fonctionnelles ou non fonctionnelles.

La phase suivante, qui est la mise en œuvre du logiciel, dépend de toutes les sorties mentionnées ci-dessus.

Il devient alors nécessaire de vérifier la sortie avant de passer à la phase suivante. Plus une erreur est détectée tôt, mieux c'est ou elle pourrait ne pas être détectée avant le test du produit. Si les résultats de la phase de conception sont sous forme de notation formelle, alors leurs outils associés pour la vérification doivent être utilisés, sinon une revue de conception approfondie peut être utilisée pour la vérification et la validation.

Grâce à une approche de vérification structurée, les examinateurs peuvent détecter les défauts qui pourraient être causés par l'ignorance de certaines conditions. Un bon examen de la conception est important pour une bonne conception, précision et qualité du logiciel.