Le développement de logiciels peut-il être considéré comme ingénierie? Si non, quelles sont les choses qu'il manque pour être qualifiée de discipline d'ingénierie? Liée à ceci est cette question sur la pile débordement de la différence entre un programmeur et un ingénieur logiciel .
Il y a l'Institut d'ingénierie logicielle de l'Université Carnigie Mellon qui prescrit et maintient les normes du CMMI. Est-ce quelque chose qui va transformer le développement en ingénierie?
Est l'ingénierie de développement logiciel? Si non, quelles sont les choses qu'il manque pour être qualifiée ainsi?
Oui, l'ingénierie logicielle est une discipline d'ingénierie.
Wikipedia définit l'ingénierie comme "l'application des mathématiques, ainsi que des connaissances scientifiques, économiques, sociales et pratiques afin d'inventer, d'innover, de conception, de construction, de maintenance, de recherche et d'amélioration des structures, des machines, des outils, des systèmes , composants, matériaux, processus, solutions et organisations. " Le résultat de l'ingénierie du logiciel est un système logiciel qui peut améliorer la vie des personnes, et peut impliquer une combinaison de scientifiques, mathématiques, économiques, sociales ou pratiques. connaissance.
En ce qui concerne la manière dont elle est vue, académique et professionnelle, elle varie. Les programmes d'ingénierie logiciels peuvent être accrédités par ABET en tant que programmes d'ingénierie. Les ingénieurs logiciels peuvent être membres de l'IEEE. Certaines entreprises considèrent que l'ingénierie du logiciel était une discipline d'ingénierie, tandis que d'autres ne le font pas - c'est un coup de pouce, vraiment.
Le meilleur livre sur ce sujet est Développement de logiciels professionnels de Steve McConnell: des horaires plus courts, des produits de qualité supérieure, des projets plus réussis, des carrières améliorées . Il examine l'ingénierie logicielle en tant que profession, évolution d'un métier à une profession, la science du développement logiciel, la différence entre logiciel Ingénierie et logiciel Ingénierie ( Application des pratiques d'ingénierie aux logiciels par rapport aux ingénieurs qui construisent des logiciels, avec une étude de cas qui inclut mon alma mater ), la certification et la licence et l'éthique.
Glenn Vanderburg dispose d'une série de discussions appelé "Real Software Engineering" qui a donné entre 2010 et 2015 dans un certain nombre de conférences, ainsi que deux discussions connexes, "artisanat, ingénierie et essence de programmation "(donné en 2011 en tant que noton-note à Railsconf) et" Craft and Software Engineering "(donné en 2011 à Qcon London). Je pense que ces discussions sont un argument assez complet pour la raison pour laquelle l'ingénierie logicielle est une discipline d'ingénierie.
Un argument, que Vanderburg apporte brièvement ses discussions, est celui qui a été fait par Jack W. Reeves en 1992 (et revisité à nouveau en 2005) sur quelle conception logicielle est et comment le code est la production d'activités de conception de logiciels ( Ceci est également discuté sur le wiki C2 ). Une fois que vous vous êtes éloigné des écoles de pensée plus âgées où la spécification et la modélisation sont la conception de logiciels et dans la conception de logiciels, certaines des relations entre génie logiciel et autres disciplines d'ingénierie deviennent plus facilement apparentes. Certaines différences et les raisons de ces différences deviennent encore plus évidentes après avoir vu que l'économie de développement logiciel est considérablement différente de celle de nombreuses autres disciplines - la construction est peu coûteuse (presque libre, dans de nombreux cas), tandis que la conception est la partie coûteuse.
Est-ce que [CMMI] est-il quelque chose qui transformera le développement en ingénierie?
Non. CMMI est un cadre d'amélioration des processus qui fournit des conseils aux organisations sur les types d'activités utiles lors de la construction de logiciels. Les disciplines d'ingénierie ont généralement un processus d'ingénierie. Avoir un tel processus est important pour la réussite de projets de haute qualité. Cela dit, le CMMI (ou tout autre cadre de processus ou méthodologie) n'est qu'un seul outil - l'utilisation de cela ne vous fera pas passer par magie d'un développeur à un ingénieur. Cependant, ne pas suivre une sorte de processus est, à mon avis, un signe d'un projet qui n'est pas un projet d'ingénierie.
En outre, quelle est votre opinion sur les cours/certificats d'ingénierie logiciels?
Ce n'est que autant de valeur que d'autres personnes y consacrées. Il existe des cours utiles et il y a des cours inutiles. Il existe des certificats précieux et des certificats qui ne valent pas le papier qu'ils sont imprimés. Il y a beaucoup de facteurs, d'OMS approuve ou accrédent le cours ou qui publie le certificat à votre secteur d'emploi actuel à votre emploi actuel et où vous voulez aller.
Venant d'un contexte d'ingénierie typique, mais faisant une carrière dans le développement de logiciels, je vois des similitudes importantes entre les deux mondes. Outre peut-être de la définition exacte de l'ingénierie, je vois dans la pratique que le développement de logiciels n'est pas si différent de développer un produit physique. Au moins, je pense que cela ne devrait pas être très différent.
Que vous conceviez un aéronef ou une application logicielle, vous devez:
J'ai lu quelque part dans une autre réponse que la conception de logiciels est différente car vous ne concevez pas tout avant de commencer la programmation. En fait, dans une moindre mesure, c'est aussi le cas lorsque vous concevez un produit physique. La conception et le prototypage et les tests sont un processus itératif.
De plus, lorsque des projets logiciels augmentent en taille, il est plus important de définir des sous-systèmes, des composants et des interfaces clairs similaires à la conception de produits complexes tels qu'un aéronef.
C'est pourquoi je envisage de développer des logiciels d'ingénierie.
Je dirais qu'il y a en effet une telle chose comme génie logiciel.
L'ingénierie implique l'application systématique des connaissances scientifiques à la solution de problèmes. La complexité des problèmes abordés aujourd'hui n'est pas si différente de celle abordée par un ingénieur électrique dans la création d'un circuit ou un ingénieur chimique dans la conception d'un processus de fabrication ou d'un ingénieur mécanique dans la création d'un dispositif.
Le fait qu'il existe également une approche pratique de l'application des plans existants (développement dans cette affaire) est tout simplement similaire au fait que, dans d'autres domaines, quelqu'un d'autre exécute ces plans (par exemple, le travailleur du bâtiment).
Il est vrai que la plupart des développeurs portent également des tâches d'ingénierie logicielles et que notre éducation n'est souvent pas en programmation, mais plutôt dans l'ingénierie logicielle. Nous avons donc les mains sales alors qu'un ingénieur civil ne le ferait pas.
Cependant, la capacité d'appliquer un langage de programmation et un programme ne fait pas partie d'un ingénieur: j'ai rencontré ma part de développeurs qui manquent de véritable compréhension de la complexité et des problèmes en dehors de leur code actuel.
Quant à votre question concernant la CMU: l'application d'une norme ou d'une pratique (par exemple, CMMI) ne transforme pas automatiquement le travail d'une personne en ingénierie. Cependant, le fait qu'il existe des organisations qui exercent des recherches scientifiques pour fournir de nouvelles pratiques sont à nouveau un signe qu'il existe une telle chose que l'ingénierie.
Non, ce n'est pas l'ingénierie. Nous ne sommes pas si scientifiques et nous n'avons pas besoin de transmettre aucun de ces tests d'ingénierie de l'État. En fait, il est illégal de vous appeler un "ingénieur" logiciel à certains endroits en raison de ce manque de test.
IMHO Le terme "ingénierie logicielle" a été inventé pour tenter de mieux décrire la gamme de choses qu'un développeur fait, plutôt que d'être un "programmeur" (qui a des hélicoptères d'un processus mécaniste avec peu de pensée ou de créativité).
Personnellement, je préfère l'analogie émergente d'un développeur en tant que "artisan", défendu par les programmeurs pragmatiques, entre autres.
Historiquement, les gens ont essayé d'analoguer la création de logiciels avec la fabrication. Je pense que Jack Reeves a fait un très bon argument pour discréditer cette idée dans son article quelle est la conception logicielle .
De wiki:
Ingénierie :
L'ingénierie logicielle est l'application d'une approche systématique, disciplinée et quantifiable du développement, fonctionnement et maintenance du logiciel et l'étude de ces approches; C'est-à-dire l'application de l'ingénierie au logiciel.
Développement de logiciels
Le développement de logiciels est le ensemble d'activités qui entraîne des produits logiciels. Développement de logiciels peut inclure des recherches, des nouveaux développements, une modification, une réutilisation, une réingénierie, une maintenance ou toute autre activité donnant sur des produits logiciels. [ 1]
Surtout la première phase du processus de développement de logiciels peut impliquer de nombreux ministères, notamment le marketing, l'ingénierie, la recherche et le développement et la gestion générale.
Donc, ils sont assez similaires et peuvent aussi signifier la même chose.
De Dictionary.com: EN · GI · NEER · ING /ˌɛndʒənɪərɪŋ /
-Noun 1. L'art ou la science de l'application pratique de la connaissance des sciences pures, de physique ou de chimie, comme dans la construction de moteurs, de ponts, de bâtiments, de mines, de navires et de plantes chimiques.
Je dirais que la création de logiciels est l'application pratique des mathématiques et de l'informatique, et potentiellement tout autre nombre de sciences pures en fonction de l'application.
[Modifier] FWIW, je ne m'appelle pas un ingénieur logiciel, mais un développeur de logiciels, donc je n'ai pas de pieu personnel dans ce domaine.
À mon avis, un ingénieur logiciel et un développeur de logiciels sont deux choses différentes.
Je vois un ingénieur logiciel En tant que celui qui planifie, comme quel cycle de vie le développement prendra, faire des exigences/spécifications, etc. Fondamentalement, un logiciel L'ingénieur traite de beaucoup de documentation. Cela peut être accompli par un développeur de logiciels et/ou un gestionnaire de projet.
A Développeur de logiciel serait plus étroitement lié à un programmeur, mais avec plus de compétences dans d'autres domaines tels que la gestion de la base de données, etc.
Une chose intéressante à soulever est architecture. Quelqu'un qui est également impliqué dans la détermination du matériel/logiciel sera nécessaire pour le cycle de vie du projet.
Je vais aller avec "non" ici. Mon frère est un ingénieur en mécanique et décrit l'ingénierie comme "l'art d'être bon marché":
"Les ingénieurs sont plus préoccupés par la réalisation des choses aussi vite que possible, au coût le plus bas possible, avec le moins possible les matériaux possibles."
En réaction, je suis venu décrire le développement de logiciels (pas l'ingénierie logicielle - ils sont vraiment fondamentalement deux domaines distincts) comme "l'art d'être efficace":
"Les développeurs sont plus préoccupés par la réalisation des choses aussi vite que possible, au coût le plus bas possible, avec le moins de répétition possible possible."
La différence est dans la dernière partie de ces phrases.
Je vois un ingénieur (mécanique, structural, logiciel) comme une personne qui conçoit le produit Beforhand basé sur les besoins comprises et une compréhension de quoi et comment appliquer les matériaux pour accueillir ce besoin.
Par exemple, vous pouvez souvent voir un ingénieur structurel sur des forces d'acier différentes et appliquer des règles de physique pour calculer les matériaux nécessaires et comment ils devraient être mis en œuvre. L'ingénierie structurelle est un excellent exemple car vous vous retrouvez toujours avec un plan de plans (spécifications) de ce que vous allez construire avant de construire. Cela ne se produit pas toujours avec des logiciels.
Pour moi, la différence d'ingénieur logiciel et d'un programmeur est que l'ingénieur est capable de créer la spécification de ce qui sera produit avant de rédiger n'importe quel code, où un programmeur écrivait simplement le code en fonction de la spécification de quelqu'un d'autre. Les programmeurs sauvages ouest qui écrivent du code sans spécifications. De plus, l'ingénieur a son diplôme.
Je comparais la différence entre un ouvrier de la construction et un ingénieur structurel à la différence entre un programmeur et un ingénieur logiciel.
Pour clarifier, je n'ai qu'un diplôme d'études universitaire, je ne peux donc pas m'appeler un ingénieur.
Je ne considérerais pas le terme "ingénierie" comme le plus approprié pour décrire le développement de logiciels, pour 2 raisons principales:
Il transmet beaucoup d'idées anciennes, de concepts et de "règles dorées" originaires de disciplines ingénieurs traditionnelles telles que l'ingénierie industrielle, civile, navale ou mécanique. Je parle de règles en matière de division du travail, de processus de production, de normes de qualité ... ces plus souvent marginalement Appliquer au logiciel.
Il ne décrit pas de manière satisfaisante quelle programmation a plus que d'autres disciplines (et je crois que cela a beaucoup plus et beaucoup différent) et quels nouveaux développeurs défis ont à faire face au quotidien par rapport à leurs homologues en traditionnel. domaines énormément. La nature virtuelle et immatérielle du logiciel joue un rôle énorme dans ce domaine.
Le développement de logiciels a longtemps été considéré comme "juste une autre discipline d'ingénierie". Compte tenu des taux d'échec des projets logiciels que nous avons connus depuis qu'ils ont été mesurés, il est grand temps que nous reconnaissions Develoment en tant qu'animal entièrement nouvel nouvel animal, en tant que cycle de vie de matériau et d'application vraiment spécial comme un type de cycle de production totalement différent, et arrêtez d'essayer désespérément d'essayer appliquer d'anciennes recettes à eux.
Oui, il convient de pouvoir appliquer des normes et des principes pour arriver à un produit décent. Ce qui rend difficile, c'est la mentalité du client (c'est juste un code - cela ne devrait pas coûter autant de choses à changer), la difficulté extrême de codifier ce que le produit devrait faire dans le code de la machine (langue parlée/écrite au code) et quantifier " qualité". Votre définition de la qualité n'est pas la mienne.
C'est aussi la répétabilité. Prenez un ensemble d'exigences et donnez-la à deux équipes. Lorsque vous pouvez obtenir la même chose (sans que les équipes se parlent les unes aux autres), vous êtes assez proche de l'ingénierie.
D'autres domaines d'ingénierie ont également des sanctions et une critique rigide et une session. Responsabilité.
L'ingénierie logicielle n'est pas d'ingénierie. À mon avis, la différence est dans la quantité de créativité impliquée. Dans le génie civil, par exemple, il peut y avoir très peu ou pas de créativité. C'est une bonne chose.
Pour construire un pont, vous avez un ensemble de spécifications (j'ai besoin d'obtenir ce nombre de voitures de ce côté de la rivière de l'autre côté).
De cela, je peux déduire:
Ensuite, je dois obtenir le design approuvé et contrôlé par une tierce partie (une autre société) pour vous assurer que j'ai effectué correctement mes calculs.
Ensuite, lorsque le pont est effectivement construit, le travail sera effectué par des personnes qualifiées de manière standard. Ils feront du travail qu'ils ont fait des centaines, peut-être des milliers de fois auparavant.
Ne me trompez pas, chaque projet de génie civil est différent, mais cela semble chaque fois que je développe une nouvelle application/site Web, les choses se font différemment.
Le développement de logiciels est l'ingénierie.
Quelques arguments faits par d'autres pour la raison pour laquelle l'ingénierie logicielle ne répond pas à la norme d'ingénieur:
Certains disent que les ingénieurs sont dans les affaires de la conception de "choses" pour le bien public - sont les ICBM, les réservoirs, etc. dans le bien public? Certains diraient oui (une bonne infraction est une bonne défense) d'autres diraient non. Cependant, je ne pense pas que quiconque ne soit pas d'accord sur le fait que le gars qui conçoit le système de ciblage de réservoir de nouvelle génération est un ingénieur. Le bien public peut être subjectif. À tout prix, beaucoup de logiciels se trouvent dans le bien public de sorte que le point soit discuté de chaque sens.
D'autres disent des conceptions d'ingénieurs ils ne construisent pas. J'ai vu plusieurs "ingénieurs mécaniques ne soudés pas" de type commentaires. Je dirais que les ingénieurs mécaniques produisent des plans de plans - des conceptions détaillées qui quelque chose d'autre implémente. Si un ingénieur mécanique produit un plan directeur et des aliments sur une machine CNC qui ne les rend plus mécaniques - car une machine a fait la mise en œuvre au lieu d'une personne? Je dirais que le code source est un plan détaillé qui est dirigé vers une machine qui fait la mise en œuvre et que je ne vois pas comment est différent d'un code d'alimentation MECHE à une machine CNC. Et nous avons maintenant des imprimantes 3D, cela signifie-t-il la fin des ingénieurs mécaniques? Sont-ils maintenant des développeurs mécaniques?
La licence est l'autre sujet que je vois venir. Actuellement seulement quelques juridictions d'ingénieurs de logiciels de licence. Il n'y a pas (jusqu'à présent) aucune licence à l'échelle des États-Unis d'ingénieurs logiciels (je pense que seul Texas le fait). Certains ont utilisé cela comme une raison d'indiquer que l'ingénierie logicielle ne doit pas être appelée ingénierie. Le PE pour les ingénieurs logiciels arrive. Mais sur un niveau plus philosophique, simplement parce que certains législateurs de l'État choisissent (ou non) d'appeler l'ingénierie du développement logiciel n'ont aucun effet sur la réalité.
Oui, je suppose que le développement est un sous-ensemble d'ingénierie:
Code complète définit "la construction" comme étant synonyme de codage et de débogage (et commentant), également avec une conception détaillée avant la main et avec l'unité et l'intégration- tester après. Chapitre 1, Bienvenue sur la construction de logiciels (PDF) Démarre en répertoriant de nombreux sujets dans le cycle de vie global du développement logiciel (y compris la définition de problème, l'architecture logicielle, la maintenance corrective, etc.), puis dit, puis
Comme indique le chiffre, la construction est principalement codée et débogage mais implique également une conception détaillée, une planification de la construction, des tests d'unités, une intégration, des tests d'intégration et d'autres activités. S'il s'agissait d'un livre sur tous les aspects du développement de logiciels, cela comporterait des discussions bien équilibrées de toutes les activités du processus de développement. Comme il s'agit d'un manuel de techniques de construction, cependant, il met un accent déséquilibré sur la construction et ne touche que sur des sujets connexes. Si ce livre était un chien, il nuit à la construction, de la queue de la queue à la conception et à des tests et aboyer dans les autres activités de développement.