Conception de logiciels - Software design

La conception logicielle est le processus par lequel un agent crée une spécification d'un artefact logiciel destiné à accomplir des objectifs , en utilisant un ensemble de composants primitifs et soumis à des contraintes . La conception de logiciels peut faire référence à « toute l'activité impliquée dans la conceptualisation, le cadrage, la mise en œuvre, la mise en service et, finalement, la modification de systèmes complexes » ou « l'activité suivant la spécification des exigences et avant la programmation , comme … [dans] un processus de génie logiciel stylisé. "

La conception de logiciels implique généralement la résolution de problèmes et la planification d'une solution logicielle . Cela comprend à la fois une conception de composant et d' algorithme de bas niveau et une conception d' architecture de haut niveau .

Aperçu

La conception de logiciels est le processus consistant à envisager et à définir des solutions logicielles à un ou plusieurs ensembles de problèmes. L'une des principales composantes de la conception logicielle est l' analyse des exigences logicielles (SRA). SRA fait partie du processus de développement logiciel qui répertorie les spécifications utilisées en génie logiciel . Si le logiciel est "semi-automatisé" ou centré sur l'utilisateur , la conception du logiciel peut impliquer une conception de l'expérience utilisateur produisant un storyboard pour aider à déterminer ces spécifications. Si le logiciel est entièrement automatisé (c'est-à-dire sans utilisateur ou interface utilisateur ), une conception de logiciel peut être aussi simple qu'un organigramme ou un texte décrivant une séquence planifiée d'événements. Il existe également des méthodes semi-standards telles que le langage de modélisation unifié et les concepts de modélisation fondamentaux . Dans les deux cas, une certaine documentation du plan est généralement le produit de la conception. De plus, une conception logicielle peut être indépendante de la plate-forme ou spécifique à la plate-forme , en fonction de la disponibilité de la technologie utilisée pour la conception.

La principale différence entre l'analyse logicielle et la conception est que le résultat d'une analyse logicielle consiste en des problèmes plus petits à résoudre. De plus, l'analyse ne doit pas être conçue de manière très différente entre les différents membres ou groupes de l'équipe. En revanche, la conception se concentre sur les capacités, et donc plusieurs conceptions pour le même problème peuvent exister et existeront. Selon l'environnement, la conception varie souvent, qu'elle soit créée à partir de frameworks fiables ou mise en œuvre avec des modèles de conception adaptés . Les exemples de conception incluent les systèmes d'exploitation, les pages Web, les appareils mobiles ou même le nouveau paradigme du cloud computing.

La conception de logiciels est à la fois un processus et un modèle. Le processus de conception est une séquence d'étapes qui permet au concepteur de décrire tous les aspects du logiciel de construction. Les compétences créatives, l'expérience passée, le sens de ce qui fait un « bon » logiciel et un engagement global envers la qualité sont des exemples de facteurs de succès critiques pour une conception compétente. Il est important de noter, cependant, que le processus de conception n'est pas toujours une procédure simple ; le modèle de conception peut être comparé aux plans d'un architecte pour une maison. Il commence par représenter la totalité de la chose qui doit être construite (par exemple, un rendu tridimensionnel de la maison) ; lentement, la chose est affinée pour fournir des conseils pour la construction de chaque détail (par exemple, la plomberie). De même, le modèle de conception qui est créé pour le logiciel fournit une variété de vues différentes du logiciel informatique. Les principes de conception de base permettent à l'ingénieur logiciel de naviguer dans le processus de conception. Davis suggère un ensemble de principes pour la conception de logiciels, qui ont été adaptés et étendus dans la liste suivante :

  • Le processus de conception ne doit pas souffrir d'une « vision en tunnel ». Un bon concepteur doit envisager des approches alternatives, en jugeant chacune en fonction des exigences du problème, des ressources disponibles pour faire le travail.
  • La conception doit être traçable au modèle d'analyse. Étant donné qu'un seul élément du modèle de conception peut souvent être relié à plusieurs exigences, il est nécessaire de disposer d'un moyen de suivre la manière dont les exigences ont été satisfaites par le modèle de conception.
  • Le design ne doit pas réinventer la roue. Les systèmes sont construits à l'aide d'un ensemble de modèles de conception, dont beaucoup ont probablement déjà été rencontrés. Ces modèles doivent toujours être choisis comme une alternative à la réinvention. Le temps est court et les ressources sont limitées ; le temps de conception doit être investi dans la représentation d'idées (vraiment nouvelles) en intégrant des modèles qui existent déjà (le cas échéant).
  • La conception doit « minimiser la distance intellectuelle » entre le logiciel et le problème tel qu'il existe dans le monde réel. C'est-à-dire que la structure de la conception du logiciel doit, dans la mesure du possible, imiter la structure du domaine du problème.
  • La conception doit présenter une uniformité et une intégration. Un dessin est uniforme s'il apparaît parfaitement cohérent. Afin d'atteindre ce résultat, des règles de style et de format doivent être définies pour une équipe de conception avant le début du travail de conception. Une conception est intégrée si l'on prend soin de définir les interfaces entre les composants de conception.
  • La conception doit être structurée pour s'adapter au changement. Les concepts de conception discutés dans la section suivante permettent à une conception d'atteindre ce principe.
  • La conception doit être structurée pour se dégrader en douceur, même lorsque des données, des événements ou des conditions de fonctionnement aberrants sont rencontrés. Un logiciel bien conçu ne doit jamais « bombarder » ; il doit être conçu pour s'adapter à des circonstances inhabituelles, et s'il doit mettre fin au traitement, il doit le faire de manière gracieuse.
  • Le design n'est pas le codage, le codage n'est pas le design. Même lorsque des conceptions procédurales détaillées sont créées pour les composants du programme, le niveau d'abstraction du modèle de conception est supérieur à celui du code source. Les seules décisions de conception prises au niveau du codage doivent porter sur les petits détails de mise en œuvre qui permettent de coder la conception procédurale.
  • La qualité de la conception doit être évaluée au fur et à mesure de sa création, et non après coup. Une variété de concepts de conception et de mesures de conception sont disponibles pour aider le concepteur à évaluer la qualité tout au long du processus de développement.
  • La conception doit être revue pour minimiser les erreurs conceptuelles (sémantiques). Il y a parfois une tendance à se concentrer sur les minuties lorsque la conception est revue, manquant la forêt pour les arbres. Une équipe de conception doit s'assurer que les principaux éléments conceptuels de la conception (omissions, ambiguïté, incohérence) ont été traités avant de se préoccuper de la syntaxe du modèle de conception.

Concepts de conception

Les concepts de conception fournissent au concepteur de logiciels une base à partir de laquelle des méthodes plus sophistiquées peuvent être appliquées. Un ensemble de concepts de conception fondamentaux a évolué. Ils sont les suivants :

  1. Abstraction - L'abstraction est le processus ou le résultat de la généralisation en réduisant le contenu informationnel d'un concept ou d'un phénomène observable, généralement afin de ne retenir que les informations pertinentes pour un objectif particulier. C'est un acte de représentation des caractéristiques essentielles sans inclure les détails ou explications de fond.
  2. Raffinement - C'est le processus d'élaboration. Une hiérarchie est développée en décomposant une déclaration de fonction macroscopique par étapes jusqu'à ce que les déclarations du langage de programmation soient atteintes. A chaque étape, une ou plusieurs instructions d'un programme donné sont décomposées en instructions plus détaillées. L'abstraction et le raffinement sont des concepts complémentaires.
  3. Modularité - L'architecture logicielle est divisée en composants appelés modules.
  4. Architecture logicielle - Elle fait référence à la structure globale du logiciel et à la manière dont cette structure assure l'intégrité conceptuelle d'un système. Une bonne architecture logicielle donnera un bon retour sur investissement par rapport au résultat souhaité du projet, par exemple en termes de performances, de qualité, de calendrier et de coût.
  5. Hiérarchie de contrôle - Une structure de programme qui représente l'organisation d'un composant de programme et implique une hiérarchie de contrôle.
  6. Partitionnement structurel - La structure du programme peut être divisée horizontalement et verticalement. Les partitions horizontales définissent des branches distinctes de la hiérarchie modulaire pour chaque fonction principale du programme. Le partitionnement vertical suggère que le contrôle et le travail doivent être répartis de haut en bas dans la structure du programme.
  7. Structure de données - Il s'agit d'une représentation de la relation logique entre les éléments individuels de données.
  8. Procédure logicielle - Elle se concentre sur le traitement de chaque module individuellement.
  9. Cacher les informations - Les modules doivent être spécifiés et conçus de manière à ce que les informations contenues dans un module soient inaccessibles aux autres modules qui n'ont pas besoin de telles informations.

Dans son modèle objet, Grady Booch mentionne l'abstraction, l'encapsulation, la modularisation et la hiérarchie comme principes fondamentaux de conception de logiciels. L'acronyme PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) est parfois utilisé pour désigner ces quatre principes fondamentaux.

Considérations sur la conception

De nombreux aspects doivent être pris en compte dans la conception d'un logiciel. L'importance de chaque considération doit refléter les objectifs et les attentes pour lesquels le logiciel est créé. Certains de ces aspects sont :

  • Compatibilité - Le logiciel est capable de fonctionner avec d'autres produits conçus pour l'interopérabilité avec un autre produit. Par exemple, un logiciel peut être rétrocompatible avec une ancienne version de lui-même.
  • Extensibilité - De nouvelles fonctionnalités peuvent être ajoutées au logiciel sans modifications majeures de l'architecture sous-jacente.
  • Modularité - le logiciel résultant comprend des composants indépendants bien définis, ce qui permet une meilleure maintenabilité. Les composants pourraient ensuite être mis en œuvre et testés isolément avant d'être intégrés pour former un système logiciel souhaité. Cela permet la division du travail dans un projet de développement logiciel.
  • Tolérance aux pannes - Le logiciel est résistant et capable de récupérer après une panne de composant.
  • Maintenabilité - Une mesure de la facilité avec laquelle des corrections de bogues ou des modifications fonctionnelles peuvent être accomplies. Une maintenabilité élevée peut être le produit de la modularité et de l'extensibilité.
  • Fiabilité ( durabilité du logiciel ) - Le logiciel est capable d'exécuter une fonction requise dans des conditions définies pendant une période de temps spécifiée.
  • Réutilisabilité - La capacité d'utiliser tout ou partie des aspects du logiciel préexistant dans d'autres projets avec peu ou pas de modification.
  • Robustesse - Le logiciel est capable de fonctionner sous contrainte ou de tolérer des entrées imprévisibles ou invalides. Par exemple, il peut être conçu avec une résilience aux conditions de faible mémoire.
  • Sécurité - Le logiciel est capable de résister et de résister aux actes et influences hostiles.
  • Convivialité - L' interface utilisateur du logicieldoit être utilisable pour son utilisateur/public cible. Les valeurs par défaut des paramètres doivent être choisies de manière à ce qu'elles soient un bon choix pour la majorité des utilisateurs.
  • Performances - Le logiciel exécute ses tâches dans un délai acceptable pour l'utilisateur et ne nécessite pas trop de mémoire.
  • Portabilité - Le logiciel doit être utilisable dans un certain nombre de conditions et d'environnements différents.
  • Évolutivité - Le logiciel s'adapte bien à l'augmentation des données ou des fonctionnalités ajoutées ou du nombre d'utilisateurs.

Langage de modélisation

Un langage de modélisation est un langage artificiel qui peut être utilisé pour exprimer des informations, des connaissances ou des systèmes dans une structure définie par un ensemble cohérent de règles. Ces règles sont utilisées pour l'interprétation des composants au sein de la structure. Un langage de modélisation peut être graphique ou textuel. Voici des exemples de langages de modélisation graphique pour la conception de logiciels :

Modèles de conception

Un concepteur ou un architecte de logiciel peut identifier un problème de conception qui a été visité et peut-être même résolu par d'autres dans le passé. Un modèle ou un modèle décrivant une solution à un problème courant est appelé modèle de conception . La réutilisation de tels modèles peut aider à accélérer le processus de développement logiciel.

Technique

La difficulté d'utiliser le terme « conception » en relation avec un logiciel est que, dans un certain sens, le code source d'un programme est la conception du programme qu'il produit. Dans la mesure où cela est vrai, la « conception de logiciel » fait référence à la conception de la conception. Edsger W. Dijkstra a qualifié cette superposition de niveaux sémantiques de « nouveauté radicale » de la programmation informatique, et Donald Knuth a utilisé son expérience dans l'écriture de TeX pour décrire la futilité d'essayer de concevoir un programme avant de le mettre en œuvre :

T E X aurait été un échec complet si je l'avais simplement spécifié et n'avais pas pleinement participé à sa mise en œuvre initiale. Le processus de mise en œuvre m'a constamment conduit à des questions imprévues et à de nouvelles idées sur la façon dont les spécifications d'origine pourraient être améliorées.

Usage

La documentation de conception de logiciel peut être revue ou présentée pour permettre aux contraintes, aux spécifications et même aux exigences d'être ajustées avant la programmation informatique . La refonte peut intervenir après examen d'une simulation programmée ou d'un prototype . Il est possible de concevoir un logiciel en cours de programmation, sans plan ni analyse des besoins, mais pour des projets plus complexes, cela ne serait pas considéré comme faisable. Une conception distincte avant la programmation permet aux concepteurs multidisciplinaires et aux experts en la matière (PME) de collaborer avec des programmeurs hautement qualifiés pour un logiciel à la fois utile et techniquement solide.

Voir également

Les références

^ Roger S. Pressman (2001). Génie logiciel : l'approche d'un praticien . McGraw-Hill. ISBN 0-07-365578-3.