Le développement logiciel est-il une discipline d'ingénierie?

16

Le développement logiciel peut-il être considéré comme de l'ingénierie? Si non, quelles sont les choses qui lui manquent pour être qualifiée de discipline d'ingénierie? À cela se cette question sur le débordement de pile sur la différence entre un programmeur et un ingénieur logiciel .

Il y a le Software Engineering Institute à l'Université Carnigie Mellon qui prescrit et maintient les normes CMMI. Est-ce quelque chose qui transformera le développement en ingénierie?

Vaibhav Garg
la source

Réponses:

20

Est-ce que l'ingénierie de développement logiciel? Si non, quelles sont les choses qui lui manquent pour être ainsi qualifié?

Oui, le génie logiciel 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 concevoir, de construire, d'entretenir, de rechercher et d'améliorer les structures, machines, outils, systèmes, composants, matériaux , processus, solutions et organisations. " Le résultat de l'ingénierie logicielle est un système logiciel qui peut améliorer la vie des gens et peut impliquer une combinaison de connaissances scientifiques, mathématiques, économiques, sociales ou pratiques.

En termes de vision, académique et professionnelle, cela varie. Les programmes de génie logiciel 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 le génie logiciel comme une discipline d'ingénierie, tandis que d'autres ne le font pas - c'est vraiment un jeu d'enfant.

Le meilleur livre sur ce sujet est le développement de logiciels professionnels de Steve McConnell: programmes plus courts, produits de meilleure qualité, projets plus réussis, carrières améliorées . Il examine le génie logiciel en tant que profession, l'évolution d'un métier à une profession, la science du développement logiciel, la différence entre le génie logiciel et le génie logiciel (appliquer les pratiques d'ingénierie aux logiciels par rapport aux ingénieurs qui créent des logiciels, avec une étude de cas qui comprend mon alma mater ), la certification et les licences, et l'éthique.

Glenn Vanderburg a une série de conférences appelées "Real Software Engineering" qui a donné entre 2010 et 2015 lors d'un certain nombre de conférences, ainsi que deux conférences connexes, "Craft, Engineering, and the Essence of Programming" (données en 2011 en tant que keynote at RailsConf) and "Craft and Software Engineering" (donné en 2011 à QCon Londres). Je pense que ces discussions sont un argument assez complet pour expliquer pourquoi le génie logiciel est une discipline d'ingénierie.

Un argument, que Vanderburg soulève brièvement dans ses entretiens, est celui avancé par Jack W. Reeves en 1992 (et revu à nouveau en 2005) sur ce qu'est la conception de logiciels et comment le code est le résultat des activités de conception en génie logiciel ( c'est aussi discuté sur le wiki C2). Une fois que vous vous éloignez des anciennes écoles de pensée où la spécification et la modélisation sont la conception de logiciels et que le code est la conception de logiciels, certaines des relations entre le génie logiciel et d'autres disciplines de l'ingénierie deviennent plus évidentes. Certaines différences et les raisons de ces différences deviennent encore plus apparentes lorsque vous voyez que l'économie du développement logiciel est très différente de celle de nombreuses autres disciplines - la construction est bon marché (presque gratuite, dans de nombreux cas), tandis que la conception est la partie coûteuse.

Est-ce que [CMMI] va transformer le développement en ingénierie?

Non. CMMI est un cadre d'amélioration des processus qui fournit aux organisations des conseils sur les types d'activités utiles lors de la création 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 ou méthodologie de processus) n'est qu'un outil unique - son utilisation ne vous fera pas passer magiquement d'un développeur à un ingénieur. Cependant, ne pas suivre une sorte de processus est, à mon avis, le signe d'un projet qui n'est pas un projet d'ingénierie.

Aussi, quelle est votre opinion sur les cours / certificats en génie logiciel?

C'est seulement autant de valeur que d'autres y mettent. Il y a des cours utiles et des cours inutiles. Il existe des certificats précieux et des certificats qui ne valent pas le papier sur lequel ils sont imprimés. Il y a beaucoup de facteurs, de qui approuve ou accrédite le cours ou qui délivre le certificat à votre industrie d'emploi actuelle à votre emploi actuel et où vous voulez aller.

Thomas Owens
la source
9

Issu d'une formation d'ingénieur typique, mais faisant carrière dans le développement de logiciels, je vois de grandes similitudes entre les deux mondes. Mis à part peut-être 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 du développement d'un produit physique. Au moins, je pense que cela ne devrait pas être très différent.

Que vous conceviez un avion ou une application logicielle, pour les deux vous devez:

  • faire des dessins
  • définir des sous-systèmes et des composants
  • faire des prototypes
  • spécifier et exécuter des tests
  • etc.

J'ai lu quelque part dans une autre réponse que la conception de logiciels est différente parce que vous ne concevez pas tout avant de commencer la programmation. Eh bien, dans une moindre mesure, c'est également le cas lorsque vous concevez un produit physique. La conception, le prototypage et les tests sont un processus itératif.

De plus, lorsque les projets logiciels augmentent en taille, il devient plus important de définir des sous-systèmes, des composants et des interfaces clairs, ce qui est également similaire à la conception de produits complexes tels qu'un avion.

C'est pourquoi je considère le développement de logiciels comme de l'ingénierie.

Roy
la source
2
Merci d'avoir partagé votre expérience, de nombreux "développeurs" n'ont aucune idée de ce qu'est réellement l'ingénierie. À votre santé!
LeWoody
7

Je dirais que le génie logiciel existe bel et bien.

L'ingénierie implique l'application systématique de connaissances scientifiques à la résolution de problèmes. La complexité des problèmes qui sont abordés aujourd'hui ne sont pas si différents de ceux abordés par un ingénieur électricien dans la création d'un circuit ou un ingénieur chimiste dans la conception d'un processus de fabrication ou un ingénieur mécanique dans la création d'un appareil.

Le fait qu'il existe également une approche pratique de l'application des plans existants (développement dans ce cas) est simplement similaire au fait que dans d'autres domaines, quelqu'un d'autre exécute ces plans (par exemple, le travailleur de la construction).

Il est vrai que la plupart des développeurs réalisent également des tâches d'ingénierie logicielle, et que notre formation n'est souvent pas en programmation mais plutôt en génie logiciel. Nous nous salissons donc les mains, contrairement à un ingénieur civil.

Cependant, la capacité d'appliquer un langage et un programme de programmation ne fait pas de celui-ci un ingénieur: j'ai rencontré ma part de développeurs qui n'ont pas une vraie compréhension des complexités et des problèmes en dehors de leur morceau de 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 mènent des recherches scientifiques pour fournir de nouvelles pratiques est à nouveau un signe qu'il existe une chose telle que l'ingénierie.

Uri
la source
5

Non, ce n'est pas de l'ingénierie. Nous ne sommes pas si scientifiques et nous n'avons à passer aucun de ces tests d'ingénierie d'État. En fait, il est illégal de vous appeler un "ingénieur" logiciel à certains endroits en raison de ce manque de tests.

Brian Knoblauch
la source
En fait, cela dépend de l'endroit où vous vivez. Au Québec, vous ne pouvez pas vous appeler ingénieur logiciel à moins d'avoir un diplôme d'ingénieur, de réussir des examens, etc ...
Kena
Veuillez fournir une preuve, s'il vous plaît.
Thomas Owens
1
Le voici, de la FAQ de l'Ordre des ingénieurs. oiq.qc.ca/cgi-bin/…
Kena
2
Cela dépend de ce que vous faites. Il existe des diplômes en génie logiciel qui se qualifient pour la désignation P. Eng. Si vous construisez un logiciel pour contrôler les centrales nucléaires ou envoyez quelqu'un à mars, vous devrez probablement être ingénieur.
tloach
Les raisons pour lesquelles la plupart des sociétés d'ingénierie ne reconnaissent pas la SE sont politiques et économiques: très peu d'universités délivrent un diplôme officiellement en génie logiciel. Au mieux, vous pouvez y faire une mineure ou faire une maîtrise.
Uri
5

À mon humble avis, le terme `` génie logiciel '' a été inventé pour essayer de mieux décrire la gamme de choses qu'un développeur fait, plutôt que d'être simplement un `` programmeur '' (qui a des connotations d'un processus mécanique avec peu de réflexion ou de créativité).

Personnellement, je préfère l'analogie émergente d'un développeur en tant qu '«artisan», défendu entre autres par les programmeurs pragmatiques.

Historiquement, les gens ont essayé d'analogier la création de logiciels avec la fabrication. Je pense que Jack Reeves a fait un assez bon argument pour discréditer cette idée dans son article What Is Software Design .

johnstok
la source
Mais la fabrication n'est qu'un domaine d'ingénierie. Arguments selon lesquels le développement de logiciels! = Fabrication sont intéressants, mais ne sont pas directement pertinents pour un argument sur la question de savoir si le développement de logiciels fait partie de l'ingénierie. La conception des avions n'est pas exactement comme la fabrication non plus, mais les deux sont des domaines d'ingénierie.
MarkJ
5

De Wiki:

Ingénierie:

Le génie logiciel est l'application d'une approche systématique, disciplinée et quantifiable au développement, à l'exploitation et à la maintenance des logiciels, et à l'étude de ces approches; c'est-à-dire l'application de l'ingénierie aux logiciels.

Développement de logiciels

Le développement de logiciels est l' ensemble des activités qui aboutissent à des produits logiciels. Le développement de logiciels peut inclure la recherche, le nouveau développement, la modification, la réutilisation, la réingénierie, la maintenance ou toute autre activité qui aboutit à des produits logiciels. [1]

En particulier, la première phase du processus de développement logiciel peut impliquer de nombreux départements, dont le marketing, l'ingénierie, la recherche et développement et la gestion générale.

Ils sont donc assez similaires et peuvent également signifier la même chose.

Ólafur Waage
la source
1
Mon nom de fonction contient en fait "ingénieur en développement logiciel" ... vraiment confus maintenant: s
fretje
4

De Dictionary.com: en · gi · neer · ing / ˌɛndʒəˈnɪərɪŋ /

–Nom 1. l'art ou la science de l'application pratique des connaissances des sciences pures, comme la physique ou la chimie, comme dans la construction de moteurs, ponts, bâtiments, mines, navires et usines chimiques.

Je dirais que la création de logiciels est l'application pratique des mathématiques et de l'informatique, et potentiellement de tout autre nombre de sciences pures en fonction de l'application.

[EDIT] FWIW, je ne m'appelle pas ingénieur logiciel, mais développeur de logiciels, donc je n'ai aucun intérêt personnel à cela.

tvanfosson
la source
3

À mon avis, un ingénieur logiciel et un développeur de logiciels sont deux choses différentes.

Je vois un ingénieur logiciel comme quelqu'un qui fait de la planification, comme le cycle de vie du développement, les exigences / spécifications, etc ... Fondamentalement, un ingénieur logiciel s'occupe de beaucoup de documentation. Cela peut être accompli par un développeur de logiciels et / ou un chef de projet.

Un développeur de logiciels serait plus proche d'un programmeur mais avec plus de compétences dans d'autres domaines comme la gestion de bases de données, etc.

Une chose intéressante à évoquer est l' architecture . Quelqu'un qui est également impliqué dans la détermination du matériel / logiciel nécessaire pour le cycle de vie du projet.

avgbody
la source
Je crois que le développement de logiciels est l'une des catégories en génie logiciel.
LeWoody
1

Je vais aller avec "Non" ici. Mon frère est ingénieur en mécanique, et il décrit l'ingénierie comme "L'art d'être bon marché":

"Les ingénieurs sont plus soucieux de faire avancer les choses le plus rapidement possible, au moindre coût possible, avec le moins de matériaux possible. "

En réaction, j'en suis venu à décrire le développement logiciel (pas le génie logiciel - ce sont vraiment deux domaines distincts) comme "L'art d'être efficace":

"Les développeurs sont plus soucieux de faire avancer les choses le plus rapidement possible, au moindre coût possible, avec le moins de répétitions possible. "

La différence se trouve dans la dernière partie de ces phrases.

Lieutenant Frost
la source
Bonne vue sur le concept de "Engineering", drôle et vrai.
Je lui ferai savoir que quelqu'un d'autre est d'accord avec lui - il devrait être content. : D
2
Je dois être en désaccord avec cela au moins dans certains cas. Je connais des gens qui travaillent pour l'industrie aéronautique et la NASA qui mettraient beaucoup de propriétés avant le bon marché. Un ingénieur sait bien équilibrer les besoins.
Uri
Cela ressemble à une opinion terriblement blasée pour moi. Pouvez-vous confirmer les faits?
Jeremy
Attendez ... je suis confus. Dont l'opinion semble blasée? Le mien ou celui de mon frère?
1

Est-ce que l'ingénierie de développement logiciel?

Non. Être ingénieur signifie que votre projet suit une chronologie de cause à effet - vous suivez les codes du bâtiment, donc votre bâtiment ne tombe pas (ou du moins vous ne pouvez pas être blâmé s'il le fait). En écrivant un logiciel, vous pouvez suivre toutes les directives en cours (et il y en a tellement de différentes!) Et il peut toujours se bloquer / planter / donner de mauvaises réponses (sauf si vous êtes impliqué dans le domaine remarquablement petit de l'écriture de programmes prouvables à côté - langages fonctionnels sans effet).

David Hicks
la source
2
Je vis à quelques kilomètres du pont de 35 W qui a échoué de façon catastrophique il y a environ un an et demi. Être ingénieur ne veut pas dire que vous êtes immunisé contre les fous.
David Thornley
Je serais d'accord avec David. Je pense que tant dans le logiciel que dans la construction, vous pouvez suivre une méthodologie scientifique de «cause à effet». Cela ne signifie pas non plus que l'un soit à l'abri des problèmes.
Jeremy
Peut-être que la différence est qu'il est plus facile de tester un code risqué?
kleineg
1

Je vois un ingénieur (mécanique, structure, logiciel) comme quelqu'un qui conçoit le produit à l'avance en fonction des besoins compris et une compréhension de quoi et comment appliquer les matériaux pour répondre à ce besoin.

Par exemple, vous pouvez souvent voir un ingénieur en structure rechercher différentes résistances de l'acier et appliquer des règles de physique pour calculer les matériaux requis et comment ils doivent être mis en œuvre. L'ingénierie structurelle est un excellent exemple car vous vous retrouvez toujours avec un plan (spécification) de ce que vous allez construire avant de construire. Cela ne se produit pas toujours avec les logiciels.

Pour moi, la différence d'un ingénieur logiciel et d'un programmeur est que l'ingénieur est capable de construire la spécification de ce qui sera produit avant d'écrire du code, où un programmeur écrit simplement le code sur la base des spécifications de quelqu'un d'autre, ou est l'un de ceux programmeurs du Far West qui écrit du code sans spécifications. De plus, l'ingénieur a son diplôme.

Je compare la différence entre un travailleur de la construction et un ingénieur en structure à la différence entre un programmeur et un ingénieur logiciel.

Pour clarifier, je n'ai qu'un diplôme universitaire, donc je ne peux pas m'appeler ingénieur.

Jeremy
la source
1
Il n'est pas toujours possible de proposer une spécification avant le codage, et je peux faire valoir que le codage est la conception du produit. Dans les logiciels, la fabrication de copies d'un produit fini est triviale.
David Thornley
Je dirais que le codage avant une conception bien pensée laisse la conception se produire comme effet secondaire de l'évolution du code. Le design peut venir avant ou après le code. Vous concevez, puis implémentez la conception via du code ou implémentez le code, puis réalisez ce que votre conception réellement une fois le code terminé (et souvent vous pouvez simplement regarder un logiciel et savoir quel ordre a été suivi). Vous ne pouvez jamais coder sans certaines spécifications car vous n'auriez rien à coder. Cela ne signifie pas que la spécification est écrite. C'est peut-être juste dans votre tête.
Jeremy
Vous distinguez le design de l'écriture de code, et ce ne sont pas deux choses différentes. L'écriture de code est une conception de bas niveau. "Laisser le design se produire comme un effet secondaire ..." n'est généralement pas la bonne phrase: le design se produit malgré tout comme un effet secondaire. Cela s'applique en particulier lorsque les exigences d'origine sont ambiguës, sous-déterminées ou flexibles, ce qui est l'état normal dans ce domaine.
David Thornley
1

Je ne considérerais pas le terme "ingénierie" comme le plus approprié pour décrire le développement logiciel, pour 2 raisons principales:

  • Il véhicule de nombreuses idées, concepts et soi-disant «règles d'or» provenant d'anciennes disciplines d'ingénierie telles que l'ingénierie industrielle, civile, navale ou mécanique. Je parle de règles dans la division du travail, les processus de production, les normes de qualité ... Ces plus souvent que marginalement appliquent aux logiciels.

  • Il ne parvient pas à décrire de manière satisfaisante ce que la programmation a plus que les autres disciplines (et je pense qu'elle a beaucoup plus et beaucoup différent), et quels nouveaux défis les développeurs doivent affronter au jour le jour par rapport à leurs homologues du traditionnel domaines d'ingénierie. La nature virtuelle et immatérielle du logiciel joue un rôle énorme à cet égard.

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 connaissons depuis qu'ils ont été mesurés, il est grand temps que nous reconnaissions le développement comme un animal entièrement nouveau, le code comme un matériau vraiment spécial et le cycle de vie des applications comme un type de cycle de production totalement différent, et nous arrêtons désespérément d'essayer leur appliquer de vieilles recettes.

guillaume31
la source
0

Oui, il faut pouvoir appliquer des normes et des principes pour arriver à un produit décent. Ce qui le rend difficile, c'est l'état d'esprit du client (c'est juste du code - cela ne devrait pas coûter si cher à changer), l'extrême difficulté à codifier ce que le produit doit faire en code machine (langage parlé / écrit à coder) 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-le à deux équipes. Lorsque vous pouvez obtenir la même chose (sans que les équipes se parlent), vous êtes assez proche de l'ingénierie.

D'autres domaines de l'ingénierie ont également des pénalités et un examen et une approbation rigides. Responsabilité.

Jim
la source
0

Le génie logiciel n'est pas de l'ingénierie. À mon avis, la différence réside dans la quantité de créativité impliquée. En 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 de faire passer ce nombre de voitures de ce côté de la rivière à l'autre côté).

J'en déduis:

  1. le nombre de voies de circulation dont j'ai besoin (en utilisant un calcul standard défini par le gouvernement);
  2. les charges que je devrai supporter (en utilisant des calculs définis par le gouvernement)
  3. les matériaux que je dois utiliser pour supporter ces charges (en utilisant soit des matériaux standard, que je peux obtenir auprès d'un certain nombre de fournisseurs différents, soit des matériaux non standard, dont je dois ensuite prouver qu'ils auront les bonnes propriétés).

Ensuite, je dois faire approuver et vérifier la conception par un tiers (une autre entreprise) pour m'assurer que j'ai fait mes calculs correctement.

Ensuite, lorsque le pont sera effectivement construit, les travaux seront effectués par des personnes qualifiées de manière standard. Ils feront un travail qu'ils ont fait des centaines, voire des milliers de fois auparavant.

Ne vous méprenez pas, chaque projet de génie civil est différent, mais il semble que chaque fois que je développe une nouvelle application / site Web, les choses se font différemment.

Matthew Farwell
la source
0

Oui, je suppose que le développement est un sous-ensemble de l'ingénierie:

  • L'ingénierie logicielle comprend la spécification initiale ("de quel type de logiciel avons-nous besoin ici?"), Qui précède sans doute le développement
  • L '«ingénierie» pourrait également inclure, par exemple, la définition du processus d'assurance de la qualité, qui est certainement lié au développement, mais aussi sans doute hors du champ de la «construction» elle-même.

Code Complete définit la «construction» comme étant synonyme de codage et de débogage (et de commentaires), également avec une conception détaillée au préalable et avec des tests unitaires et d'intégration par la suite. Le chapitre 1, Bienvenue dans la construction de logiciels (PDF) commence par énumérer de nombreux sujets dans le cycle de vie global du développement logiciel (y compris la définition des problèmes, l'architecture logicielle, la maintenance corrective, etc.), puis dit:

Comme le montre la figure, la construction consiste principalement en codage et débogage, mais implique également une conception détaillée, une planification de la construction, des tests unitaires, l'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 logiciel, il comporterait des discussions bien équilibrées sur toutes les activités du processus de développement. Parce qu'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 des sujets connexes. Si ce livre était un chien, il nuancerait jusqu'à la construction, remuerait la queue lors de la conception et des tests, et aboyerait dans les autres activités de développement.

ChrisW
la source
0

Le développement logiciel est de l'ingénierie.

Quelques arguments avancés par d'autres pour expliquer pourquoi le génie logiciel ne répond pas aux normes d'ingénieur:

Certains disent que les ingénieurs sont chargés de concevoir des «choses» pour le bien public - les ICBM, les réservoirs, etc. sont-ils dans le bien public? Certains diraient oui (une bonne offensive est une bonne défense), d'autres diraient non. Cependant, je ne pense pas que quiconque soit en désaccord avec le fait que le gars qui conçoit le système de ciblage de chars de prochaine génération est un ingénieur. Le bien public peut être subjectif. En tout cas, beaucoup de logiciels sont dans l'intérêt public, donc le point est sans objet dans les deux cas.

D'autres disent que les ingénieurs conçoivent qu'ils ne construisent pas. J'ai vu plusieurs commentaires de type «les ingénieurs mécaniciens ne soudent pas». Je dirais que les ingénieurs mécaniciens produisent des plans - des conceptions détaillées que quelque chose d' autre implémente. Si un ingénieur en mécanique produit un plan et le transmet à une machine CNC, cela ne fait-il plus d'eux un ingénieur en mécanique - parce qu'une machine a effectué la mise en œuvre à la place d'une personne? Je dirais que le code source est un plan détaillé qui est envoyé à une machine qui fait l'implémentation et je ne vois pas en quoi cela est différent d'un code MechE alimentant une machine CNC. Et nous avons maintenant des imprimantes 3D, cela signifie-t-il la fin des ingénieurs mécaniciens? Sont-ils maintenant des développeurs mécaniques?

La licence est l'autre sujet que je vois venir. Actuellement, seules quelques juridictions octroient des licences aux ingénieurs logiciels. Il n'y a (jusqu'à présent) aucune licence à l'échelle des États-Unis pour les ingénieurs logiciels (je pense que seul le Texas le fait). Certains ont utilisé cela comme une raison pour affirmer que l'ingénierie logicielle ne devrait pas être appelée ingénierie. Le PE pour les ingénieurs logiciels arrive. Mais à un niveau plus philosophique, le simple fait que certains législateurs des États choisissent (ou non) d'appeler l'ingénierie de développement logiciel n'a aucun effet sur la réalité.

erick
la source