Quelle est la différence entre la conception de logiciels et le génie logiciel ?


Plusieurs bonnes réponses, déjà, mais permettez-moi de faire quelques distinctions supplémentaires.

Et permettez-moi de commencer en disant que la "conception" se produit à plusieurs niveaux du développement de systèmes & logiciels.


En commençant par le haut vers le bas :

Ingénierie : Il existe une variété de définitions dans les dictionnaires, mais globalement, cela revient à résoudre un problème - ce qui se termine généralement par la construction & le déploiement de quelque chose (qu'il s'agisse d'un pont, d'un système informatique, d'un produit, d'un ouvrage hydraulique, d'une usine chimique, peu importe).

Ingénierie des systèmes : La grande image, y compris le concept d'opérations, l'architecture, l'intégration, la gestion de l'équipe de conception & le processus - souvent décomposée davantage en :

  • Analyse des besoins
  • Architecture des systèmes : La grande image technique. Toutes les pièces majeures (par exemple, le matériel, les logiciels, le réseau), les spécifications fonctionnelles de chaque pièce, les interfaces. Et généralement la conception de haut niveau (par exemple,. sélection des technologies clés, approche et plan de test, processus de conception/construction à appliquer).
  • Intégration des systèmes : Mettre toutes les pièces ensemble, et faire en sorte que les choses fonctionnent comme un système.
  • Gestion de l'ingénierie des systèmes : Planification, attribution des tâches, supervision, etc.

Génie logiciel : Le processus global d'architecture, de conception, de construction, de test et de déploiement de logiciels. Au sein du génie logiciel, les choses se décomposent en :

  • Architecture logicielle : La grande image du logiciel - le concept global du système (par exemple, centré sur la base de données, piloté par les événements par rapport à la grande boucle), les principaux sous-systèmes logiciels (par exemple, les serveurs Web, les serveurs de base de données, le nivellement de la charge), les flux de données et de contrôle, la sélection de la technologie (par exemple, quel type de base de données), les principaux modules, les interfaces, l'architecture des données et de la base de données (en particulier pour les données partagées entre les sous-systèmes).
  • Conception de haut niveau : Ajout de quelques détails à l'architecture. Algorithmes et heuristiques clés.(sélectionner et/ou concevoir), évaluation et sélection des technologies, normes et processus de conception/documentation/test, spécifications détaillées pour chaque module, peut-être approche de haut niveau pour les modules clés.
  • Conception du logiciel : Conception détaillée pour chaque pièce du logiciel. Par exemple, la définition de toutes les variables et structures de données, la définition de chaque fonction dans un module, les algorithmes et heuristiques, les flux de données et de contrôle dans un module - généralement au niveau du tableau blanc, ou de l'organigramme, ou du pseudo-code. (Pensez-y comme le plan détaillé d'un chapitre de livre.) Certaines personnes adoptent l'approche suivante : " écrire la documentation en premier. "
  • Codage : Écrire réellement le code.
  • Documentation
  • Tests unitaires
  • Tests d'intégration
  • Déploiement (dans un système) ou conditionnement (par exemple, d'un produit, pour la livraison et l'installation).

Maintenant, tous ces éléments ne s'appliquent pas à un projet spécifique. Si l'on construit un tout nouveau système de transaction - vous devez faire tout cela. Si l'on écrit un outil logiciel destiné à être déployé sur des ordinateurs portables Windows - alors il n'y a pas beaucoup d'ingénierie des systèmes, et l'on passe directement à l'ingénierie logicielle (au niveau des systèmes, l'environnement est déjà spécifié, et il se peut que l'on n'ait pas besoin de faire plus que d'établir les exigences environnementales de base - comme quels GPU doivent être pris en charge, les exigences minimales en matière de mémoire & d'espace disque).