web-dev-qa-db-fra.com

Qu'entendons-nous par "conception" dans le génie logiciel?

J'ai lu sur différentes méthodologies logicielles. Chaque méthode a une phase de conception dans une certaine mesure, plus ou moins.

Je ne suis pas clair sur ce que nous entendons en concevant. Cela signifie-t-il écrire votre processus de pensée sur la manière dont vous allez coder la fonctionnalité? Ou c'est une façon de dire ce que vous avez codé ou de coder.

Le monde où je suis le plus confus est le monde réel, qui est différent de mettre vos pensées dans des documents et de dire que cela fonctionnera. Puisque les détails de codage peuvent changer, je ne sais pas quel est le point d'avoir une conception avant de coder.

6
Huzaifa

Tout d'abord, le design est, à mon avis, un processus de préparation/de réflexion sur le projet/logiciel/application, de sorte qu'il est cohérent, accomplissant les objectifs, répondant aux exigences. La conception contribue également à rendre le processus de production de logiciels plus efficace (car il s'agit de certaines choses vraiment fondamentales dans le projet, comment elles devraient travailler, etc.).

Wikipedia dit:

La conception du logiciel est un processus de résolution de problèmes et de planification pour une solution logicielle . Une fois que l'objectif et les spécifications des logiciels sont déterminés, les développeurs de logiciels concevèrent ou emploient des concepteurs pour développer un plan pour une solution. Il comprend des problèmes de mise en œuvre de composants et d'algorithme de bas niveau ainsi que la vue architecturale .

Ce qui signifie que vous faites un plan avant de créer la structure (dans ce cas: logiciel).

Et pourquoi nous concevons-nous, puis implémentons-nous, même si beaucoup de choses changent? Veuillez consulter la photo suivante (Source: - http://www.agilemodeling.com/essays/costofchange.htm ) qui clarifie ce qui clarifie le meilleur (au moins je le pense):

enter image description here

6
Tadeck

L'intention d'une conception logicielle est d'échouer pas cher et d'échouer tôt. Lors de la conception de votre implémentation, vous êtes obligé de penser à des choses au début. Il est toujours moins cher de savoir que vous avez commis une erreur dans une phase de conception que de réaliser que 80% du travail que vous avez effectué sans conception doit être réintégré en raison d'une faille de conception.

D'autres avec plus d'expérience que vous aurez également la possibilité d'examiner votre conception avant de passer du temps à mettre en œuvre votre solution et de signaler toutes les erreurs de haut niveau dans votre système.

Cela donne également à ceux qui entrent dans vos chaussures à l'avenir la capacité de lire quelque chose documenté plutôt que d'essayer de déterminer votre code.

Bien sûr, en fonction de la granularité de votre conception, certaines choses peuvent changer, mais l'architecture globale reste de même environ 90% du temps (avec suffisamment d'expérience).

4
Demian Brecht

Bonne question! (Bien que ce soit plus approprié pour les programmeurs.stackexchange)

J'habandais beaucoup ce point aussi; Comment pouvez-vous concevoir un programme avant d'être codé? Je veux dire que vous ne savez pas ce que vous allez écrire après tout!

Eh bien, pour moi, cela revient à une noisette que de nombreux grands artisans de notre industrie ont échoé;

Un bon programmeur dit 'Je peux résoudre ce problème "et écrit 100 lignes de code. Un excellent programmeur dit "J'ai déjà vu ce problème avant" et réutiliser le code qu'ils ont écrit la dernière fois.

La conception d'un programme est assise, en pensant aux divers problèmes du domaine de problème et de travailler de manière générale comment vous pourriez résoudre ce problème, ou comment vous l'avez résolu auparavant, et (plus j'ai trouvé récemment) Quand décider ce qui est important et ce qui n'est pas.

Je suppose que ce que je conduis est que la conception consiste à visualiser la plus grande image; Mais c'est difficile à faire jusqu'à ce que vous soyez là au moins une fois.

Pour utiliser une métaphore, tout programmeur peut écrire un programme qui mélange de farine et d'eau; Mais il faut une meilleure compréhension pour faire un système qui gâte un gâteau.

Ok, mauvaise métaphore - mais j'espère que vous voyez ce que je conduis.

4
Russ Clarke

La conception du logiciel est une étape d'une méthodologie logicielle qui, lorsqu'elle est exécutée en résulte une définition claire de la manière dont le problème est le mieux résolu. La conception peut aller dans différentes itérations jusqu'à sa fin. La conception peut couvrir différents aspects du système telles que l'architecture de solution, la structure d'application, la conception de la base de données, les techniques d'intégration, etc. L'entrée de la conception est la planification et l'analyse livrables. La conception du logiciel n'est pas uniquement appliquée sur le système en général mais également à chaque composant individuel du système. La conception du logiciel doit être le programme de procédure étape par étape. Différentes méthodologies Placez des activités de conception dans différentes phases et appelez-leur des noms différents.

Une signification de la conception de logiciels peut être trouvée dans (parmi beaucoup d'autres) http://fr.wikipedia.org/wiki/software_design

http://c2.com/cgi/wiki?whaticoftwaredesign

Je trouve ce dessin animé très agréable: http://www.cs.utexas.edu/users/dsb/cs378/

3
NoChance

Le glossaire standard de l'IEEE de terminologie d'ingénierie logicielle (IEEE STD 610.12-1990) définit la conception logicielle comme "le processus de définition de l'architecture, des composants, des interfaces et d'autres caractéristiques d'un système ou d'un composant" et "le résultat de [ce dernier processus" . En substance, c'est l'analyse des exigences pour produire une sorte de description de ce que vous avez l'intention de construire. Le résultat final des activités de conception équivaut à des plans pour la construction d'un bâtiment.

La conception est généralement décomposée dans une description de haut niveau (ou de niveau supérieur) du système identifiant divers composants et comment les composants interagissent les uns avec les autres ainsi qu'une description plus détaillée de chacun de ces composants qui leur permettent d'être construits.

Lorsque vous parlez de conception à n'importe quel niveau, vous commencez à penser à des concepts tels que la distribution (quels composants effectueront les tâches et où ces composants seront localisés), traitement de la concurrence et des tâches, des données et des événements, de la manutention des erreurs et de la tolérance aux erreurs. , persistance des données, interaction et présentation. Vous considérez également les attributs de qualité (tels que la maintenabilité, la qualification, la portabilité, la robustesse) du système et ses composants.

La manière dont vous approchez la conception dépend de la méthodologie de processus que vous utilisez pour construire le système. Par exemple, dans un cycle de vie séquentiel, vous effectuez généralement "Big Design Up-Front" (BDUF), où vous prenez vos exigences et produit une conception de haut niveau, finalisez-la (pour la plupart), utilisez-la pour créer détaillé concevoir et mettre en œuvre cette conception. Dans une méthodologie plus itérative et incrémentielle, vous devez prendre en compte toutes les exigences connues, mais vous concentrez vos efforts sur la conception (puis de la mise en œuvre) d'un sous-ensemble de ces fonctionnalités à un moment donné, en évolution de votre produit et de sa conception comme vous ajoutez des fonctionnalités supplémentaires.

Les approches et techniques spécifiques que vous utilisez pour concevoir votre système varieront également en fonction de ce que le système est. Par exemple, concevoir un site Web pour votre équipe locale de la Little League, concevez une application Web pour Amazon et la conception de logiciels qui contrôlent les aéronefs sont tous très différents en termes de formalité et de ce dont vous avez besoin pour le document officiellement. Les spécificités des intrants, activités et sorties font partie des activités de conception doivent être spécifiées dans la documentation de la planification de votre projet (à nouveau, pourraient varier en formalité d'accords verbaux à une spécification importante, en fonction du type de projet).

3
Thomas Owens

Qu'est-ce que la conception?

Il y a une certaine variabilité à ce que les gens comprendront sous la rubrique de conception. Je pense que cela inclut la structure des systèmes et la structure de code.

La structure du système est la photo macroscopique de la solution complète à ressembler. Vous pensez à travers la solution et faites une liste des choses que vous savez que vous aurez besoin. Par exemple, un besoin commun est un magasin de données. Vous devez alors décider des détails, quel genre de banque de données? A-t-il besoin d'être une base de données, de quoi d'une source de données persistante, de fichiers plats, etc. Vous pesez sur les besoins du projet contre les avantages de chaque implémentation afin de choisir celui qui correspondra mieux à vos besoins.

La structure de code fait également partie de la conception. L'architecture globale et peut-être même des suggestions sur quel type d'abstractions à rester à l'écart ou à utiliser. Devrait-il être structuré comme un système cohésif. Devrait-il être divisé en composants indépendants qui doivent travailler ensemble. Comment la structure de code sera-t-elle exécutée dans un environnement multi-processus, est-ce que même une préoccupation? Sera-t-il multi-threadé à la place ou avons-nous à craindre de distribuer la charge de travail sur différents serveurs? Ce sont le genre de questions avec qui vous commencez.

Pourquoi vient-il avant de coder?

Cela ne vient pas toujours avant de coder, ou du moins la conception finale ne le fait pas. Parfois, vous devez prototyper pour déterminer si une conception fonctionnera. Le prototypage choisit essentiellement une conception que vous pensez fonctionner car vous ne pouvez pas ou ne ferez pas l'analyse pendant la phase de conception. Cela ne signifie pas que toutes les questions doivent être répondues à l'avant. La conception peut être un processus itératif, autant que le code d'écriture. Vous devez comprendre cependant que certaines décisions ont un impact beaucoup plus large et d'essayer de les changer plus tard seront extrêmement chers. Déplacement d'un programme monolithique à un composant ou SOA serait extrêmement coûteux. Décider de modifier les langues est une décision extrêmement coûteuse. Lorsque vous prenez des décisions de conception, vous devez être conscient du coût associé à la reproduction de ces décisions. plus tard sur la ligne.

2
dietbuddha

La plupart des méthodologies ont des phases différentes dans le cycle de vie logiciel. Tout dépend de la méthodologie que vous choisissez. Cependant, l'essentiel de la plupart d'entre eux est la planification, la conception, le codage, la mise en œuvre/le déploiement, puis la maintenance. Mais vous devrez examiner chaque différent pour ce que leur valeur.

1
Apollo SOFTWARE

La conception consiste à penser à la manière dont vous structurez votre projet: quels sous-systèmes, composants, modules, mais aussi quels classes, fonctions et variables qu'il sera composée. Avant de commencer à écrire du code, vous faites une sorte de conception dans votre tête, peut-être sur la fonction ou la classe, et peut-être que c'est très fin, mais vous ne pouvez rien écrire sans avoir de conception dans votre esprit.

La conception effectuée dans la phase de conception est normalement au niveau du système, où vous décidez quel type de sous-systèmes de votre produit comprendra (par exemple Web + serveur de base de données) ou sur les composants principaux (comme une gestion de l'utilisateur, audio. traitement, abstraction de la base de données, etc.). Ces abstractions de haut niveau aideront à diviser les responsabilités, aident à planifier le projet et à fournir la structuration principale du code à écrire.

Mais la conception n'est pas nécessairement une phase spécifique, c'est quelque chose qui se fait sur et sur différents niveaux d'abstraction. Et comme vous l'avez souligné, vous apprendrez beaucoup lorsque vous codez et certaines parties de la conception devraient avoir à changer, ce qui convient parfaitement. Et les principales abstractions, celle que j'ai mentionnées auparavant, qui sont définies pendant la phase de conception, sont généralement sur une abstraction suffisamment élevée pour ne pas être affectée par des problèmes au niveau du code.

1
inflagranti

Dans mon expérience, la conception est l'une des phases les plus importantes du développement de logiciels, spécialement conçue pour les grands projets.

Wikipedia définit la conception logicielle comme suit:

La conception du logiciel est un processus de résolution et de planification de problèmes pour une solution logicielle. Une fois que l'objectif et les spécifications des logiciels sont déterminés, les développeurs de logiciels concevèrent ou emploient des concepteurs pour développer un plan pour une solution. Il comprend des problèmes de mise en œuvre de composants et d'algorithme de bas niveau ainsi que de la vue architecturale.

J'ai vu courir dans tant de problèmes même lorsque le chemin semblait assez simple et assez clair au début. Le temps passé sur la conception enregistre votre temps en vous permettant de prévoir les problèmes que vous pourriez rencontrer pendant le développement.

0
Atul Goyal

Être réductionniste, et de le prendre aussi simple que possible mais pratique, vous pouvez penser Analyse, conception et mise en œuvre en tant que chaîne de Actions.

L'analyse est que lorsque vous pensez simplement aux aspects globaux de votre projet, sans réfléchir plate-forme spécifique. Par exemple, devriez-vous utiliser des services Web ou non. Voulez-vous forcer vos utilisateurs à utiliser leur email au lieu du nom d'utilisateur ou non? Combien de temps la période d'essai devrait être? Quelles passerelles de paiement devriez-vous soutenir? Ce sont des questions d'analyse, qui n'ont rien à voir avec la chaîne de plate-forme et de la programmation.

Lorsque vous avez pris vos décisions, la prochaine étape est à concevoir ou pour choisir un langage de programmation, une plate-forme (Linux, Windows, iOS), de choisir des modèles de conception, de penser à l'architecture globale de votre Projet (comme créer une couche d'accès aux données, etc.). Conception n'est pas abstrait de la plate-forme.

Ensuite, vous donnez vos documents de conception aux développeurs et devraient transformer ces documents en code réel.

0
Saeed Neamati