Chapitre 1 : Génie logiciel
Dans le domaine du développement de logiciels, le génie logiciel fait référence à une approche basée sur l'ingénierie. Dans le processus de développement de logiciels, un praticien connu sous le nom d'ingénieur logiciel met en pratique le processus de conception technique.
Malgré le fait que les expressions « programmeur » et « codeur » soient synonymes d'« ingénieur logiciel », elles ne font référence qu'à la composante construction du travail normal d'un ingénieur logiciel.
Un ingénieur logiciel est responsable de l'application d'un processus de développement logiciel, qui comprend la définition, la mise en ouvre, les tests, la gestion et la maintenance des systèmes logiciels, ainsi que la création et la mise à jour du processus de développement par l'application du processus.
Ce n'est que dans les années 1960 que le génie logiciel a été reconnu comme un sous-domaine distinct de l'ingénierie.
On pensait que le développement du génie logiciel serait un processus difficile. Les problèmes comprenaient des logiciels qui n'étaient pas terminés du tout ou qui dépassaient le budget, dépassaient les délais, nécessitaient un débogage et une maintenance importants et ne répondaient pas aux exigences des clients. Parfois, le logiciel n'était même jamais terminé.
En 1968, l'Organisation du Traité de l'Atlantique Nord (OTAN) a accueilli la toute première conférence sur le génie logiciel, au cours de laquelle des sujets concernant les logiciels ont été abordés. Afin de faciliter la création de logiciels, des lignes directrices et les méthodes les plus efficaces ont été élaborées.
Un certain nombre de sources différentes ont été citées comme étant à l'origine du terme « génie logiciel ». « Computers and Automation » a publié une liste de services fournis par les entreprises dans l'édition de juin 1965 de la publication. Le mot a été utilisé de manière plus officielle dans le numéro d'août 1966 de Communications of the Association for Computing Machinery (Volume 9, numéro 8) dans l'article « President's Letter to the ACM Membership » écrit par Anthony A. Oettinger. En plus de cela, il est lié au nom d'une conférence de l'OTAN qui s'est tenue en 1968 et qui a été dirigée par le professeur Friedrich L. Bauer. Alors que les missions Apollo étaient en cours, Margaret Hamilton a fourni une description du domaine du « génie logiciel » afin de donner de la crédibilité aux activités qui étaient effectuées. Le terme « crise logicielle » était couramment utilisé pour décrire la situation à l'époque. Frederick Brooks et Margaret Hamilton prononceront des discours liminaires lors des sessions plénières de la 40e Conférence internationale sur le génie logiciel (ICSE 2018), qui se tiendra pour commémorer le demi-siècle du domaine du « génie logiciel ».
Le Software Engineering Institute (SEI) a été créé en 1984 en tant qu'installation de recherche et de développement soutenue par le gouvernement fédéral. Son siège social est situé sur le campus de l'Université Carnegie Mellon à Pittsburgh, en Pennsylvanie, aux États-Unis d'Amérique.
Le programme de traitement logiciel de SEI a été créé par Watts Humphrey dans le but de comprendre et de gérer efficacement le processus de génie logiciel. Le modèle d'intégration du modèle de maturité des capacités pour le développement (CMMI-DEV) a été développé à la suite des niveaux de maturité des processus initialement introduits. Ce modèle décrivait la manière dont le gouvernement des États-Unis analyse les capacités de ses équipes de développement de logiciels.
Le Software Engineering Body of Knowledge (SWEBOK) est une compilation des meilleures pratiques contemporaines en génie logiciel qui ont été compilées par le sous-comité ISO/IEC JTC 1/SC 7 et publiées. Ces meilleures pratiques sont universellement reconnues. Il est généralement admis que le génie logiciel est l'une des catégories les plus importantes d'ordinateurs.
Les définitions importantes du génie logiciel sont les suivantes :
Encore moins officiellement, l'expression a également été utilisée comme suit :
L'expression « génie logiciel » a été popularisée par Margaret Hamilton alors qu'elle travaillait sur le programme Apollo. Le travail devrait être considéré aussi sérieusement que d'autres contributions à l'essor de la technologie, et le terme « ingénierie » a été choisi pour reconnaître que cela devrait être le cas. Hamilton fournit l'utilisation suivante du terme :
C'était la première fois que quelqu'un entendait parler de ce terme, du moins pas dans notre monde, lorsque je l'ai inventé pour la première fois. C'était une blague depuis un certain temps. Ils aimaient se moquer de moi parce que j'avais des notions aussi extrêmes. Le jour où l'un des experts en matériel les plus respectés a partagé avec tout le monde lors d'une réunion qu'il a convenu avec moi que le processus de construction de logiciels devrait également être considéré comme une discipline d'ingénierie, tout comme le processus de construction de matériel, a été un jour qui restera longtemps dans les mémoires. Nous avions gagné son acceptation et celle des autres dans la salle comme étant dans un domaine d'ingénierie à part entière, et ce n'était pas parce qu'il acceptait le nouveau « terme » en soi ; c'était plutôt parce que nous avions mérité leur acceptation.
Il y a un désaccord important parmi les critiques sur la définition du génie logiciel ou la légitimité du génie logiciel en tant que sujet au sein de l'ingénierie. David Parnas a déclaré que le génie logiciel est, en réalité, un type d'ingénierie ou d'ingénierie en général. Ce n'est pas le cas, selon Steve McConnell, mais il pense que cela devrait l'être. L'affirmation selon laquelle la programmation est à la fois un art et une science a été faite par Donald Knuth. En ce qui concerne les États-Unis d'Amérique, Edsger W. Dijkstra a affirmé que les termes génie logiciel et ingénieur logiciel avaient été utilisés de manière excessive.
Le processus d'éligibilité, d'analyse, de spécification et de validation des exigences logicielles est ce que l'on appelle l'ingénierie des exigences. Il existe trois options pour la configuration logicielle requise : domaine, non fonctionnel et fonctionnel.
Les comportements prévus, souvent appelés sorties, sont décrits par les exigences fonctionnelles. Des préoccupations telles que la portabilité, la sécurité, la maintenabilité, la fiabilité, l'évolutivité, les performances, la réutilisation et la flexibilité sont des exemples de types de choses spécifiées par des exigences non fonctionnelles. Ces restrictions peuvent être divisées en plusieurs catégories : contraintes d'interface, contraintes de performances (y compris la vitesse de réaction, la sécurité et l'espace de stockage), contraintes d'exploitation, contraintes de cycle de vie (y compris la portabilité et la maintenabilité) et contraintes économiques. Il est nécessaire d'avoir une compréhension du fonctionnement du système ou du programme afin d'exprimer adéquatement les besoins non fonctionnels. Dans le contexte des projets, les exigences de domaine font référence aux caractéristiques associées à une catégorie ou à un domaine particulier.
Le processus de développement de plans de haut niveau pour les logiciels est considéré comme un exemple de conception de logiciels. Il y a des moments où le design est décomposé en niveaux :
La programmation, également connue sous le nom de codage, les tests unitaires, les tests d'intégration et le débogage sont les étapes typiques de la création de logiciels. Ces étapes sont nécessaires pour mettre la conception en action. « Les tests de logiciels sont liés, mais distincts, aux tests de logiciels informatiques, » dépannage »
Dans la plupart des cas, c'est le programmeur qui est responsable des tests pendant cette phase. L'objectif de ces tests est de s'assurer que le code fonctionne conformément à sa conception et de déterminer quand le code est prêt à passer au niveau de test suivant.
L'objectif des tests logiciels est de fournir aux parties prenantes des informations sur la qualité des logiciels testés. Ceci est accompli par une enquête empirique et technique menée.
Lorsque les tests sont spécifiés d'une manière distincte de la construction, ils sont souvent effectués par des ingénieurs de test ou des techniciens d'assurance qualité plutôt que par les programmeurs chargés de les écrire. En plus d'être réalisée au niveau du système, elle est considérée comme une composante de la qualité du programme.
Le processus d'étude des programmes informatiques en ce qui concerne un élément particulier, tel que la performance, la robustesse ou la sécurité, est appelé analyse de programme.
La maintenance logicielle est le processus qui consiste à fournir un support pour un logiciel après sa publication. Il peut inclure, sans s'y limiter, des aspects tels que la correction d'erreurs, l'optimisation, la suppression de fonctionnalités qui ne sont pas utilisées ou qui sont supprimées, et l'amélioration de fonctionnalités déjà présentes.
Dans la plupart des cas, l'entretien représente entre quarante et quatre-vingts pour cent du coût total du projet.
Avoir une connaissance pratique de la programmation informatique est nécessaire pour poursuivre une carrière d'ingénieur logiciel. En 2004, l'IEEE Computer Society a produit le SWEBOK, qui a maintenant été publié sous...