WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Demain, tous développeurs?

( Télécharger le fichier original )
par Romain GODARD
Ecole Sciences-U Lyon - Master 2012
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

 

ECOLE SCIENCES-U - LYON

Master II - Expert en Ingénierie Informatique

 

Demain, tous développeurs?

Mémoire de fin d'études 2011-2012

 

GODARD Romain

 

ECOLE SCIENCES-U - LYON

Master II - Expert en Ingénierie Informatique

 

Demain, tous développeurs?

Mémoire de fin d'études 2011-2012

 

GODARD Romain

Remerciements

En préambule à ce mémoire, je souhaitais adresser mes remerciements les plus sincères aux personnes qui m'ont apporté leur aide et qui ont contribué à l'élaboration de ce mémoire ainsi qu'à la réussite de cette formidable année scolaire.

Je tiens à remercier sincèrement Monsieur Gevrin, Madame Huin et Monsieur Bouiche (professeurs et directeur de ma formation) qui m'ont permis de cadrer mon sujet, de m'apporter de l'aide sur les axes de développement et qui m'ont orienté sur des pistes de recherches.

Mes remerciements s'adressent également à Monsieur Villard, mon tuteur en entreprise, qui m'a permis de m'épanouir énormément dans mon milieu professionnel durant cette année chargée au niveau scolaire.

Une reconnaissance spéciale à monsieur Bendraou, mon professeur de génie logiciel lors de ma licence, qui a eu des conseils avisés à mon égard.

Je n'oublie pas mes parents pour leur contribution, leur soutien et leur patience malgré la distance.

J'adresse mes plus sincères remerciements à tous mes proches et amis, qui m'ont toujours soutenu et encouragé au cours de la réalisation de ce mémoire et qui m'ont toujours supporté même dans les moments les plus difficiles.

Et un énorme merci à la classe de master EII avec qui nous avons passé deux très bonnes années de joie, de rires, de soutiens, de conseils et d'aides.

Merci à tous et à toutes.

Résumé

Actuellement plusieurs outils permettent la création de logiciels, de sites web, de bases de données et d'interfaces graphiques sans avoir aucune connaissance en programmation. Avec les logiciels il existe des outils de modélisation de systèmes qui vont permettre de générer le code de l'application. La création d'interfaces graphiques peut se faire via le système WYSIWYG ("What You See Is What You Get" "ce que tu vois c'est ce que tu obtiens") basé sur du glisser-déposer : on choisit quel type d'élément on veut mettre en place et il suffit de le sélectionner et de le positionner dans la fenêtre de conception. Pour ce qui est de la conception de sites Internet, il y a ce qu'on appelle des CMS (Content Management System ou Système de Gestion de Contenu) et des éditeurs de sites qui vont nous permettre de concevoir et mettre à jour des sites web ou des applications multimédia en utilisant également le WYSIWYG. Les bases de données peuvent, quant à elles, se gérer facilement via des SGBD (Système de Gestion de Base de Données), qui sont eux très explicites quand à la création, modification et suppression d'éléments de la base : de simples clics de souris et un clavier sont suffisants pour gérer une base de données.

Cependant ces systèmes ne permettent pas encore de développer quelque chose de robuste, entièrement fonctionnel et sécurisé. Ils vont permettre de créer des applications basiques avec quelques petites fonctionnalités dans le meilleur des cas, mais dans le pire des cas ce ne sera qu'une simple interface inexploitable.

Néanmoins, l'évolution des technologies, les manières de développement et la démocratisation des moyens énumérés plus haut peuvent laisser imaginer de bons présages pour l'avenir. Ces outils seraient accessibles par tous, faciles d'usage et ils permettraient surtout d'avoir un résultat final des plus aboutis. Avec les possibilités du web 2.0, il est possible d'imaginer, non pas un développement individuel où chacun fait sa propre application (un peu comme les macros Excel dans les entreprises), mais plutôt un développement collaboratif et participatif où chacun pourrait apporter sa pierre et son savoir à l'édifice. L'apparition des SaaS (Software as a Service) et du Cloud Computing, vont peut-être permettre le développement de logiciels à l'image du développement des sites web, où l'on aurait un développement participatif et collaboratif au travers du web.

Mots clefs : WYSIWYG, CMS, modélisation, interfaces graphiques, glisser-déposer, fenêtre de conception, éditeurs de sites, bases de données, web 2.0, applicatif, logiciel, SGBD, participatif, collaboratif, SaaS, Cloud computing, développement.

Abstract

Currently several tools allow the creation of softwares, websites, databases and graphical interfaces without any programming knowledge. Concerning softwares there are systems modeling tools that allow to generate the application code. Creating graphical user interfaces can be done via a WYSIWYG system ("What You See Is What You Get") based on the drag and drop : we choose what type of elements we want to be set up, simply by selecting it and positioning it in the design window. Regarding websites conceptions, there are CMS (Content Management System) and websites editors that will allow us to design and update websites or multimedia applications using the WYSIWYG too. Databases can be managed easily via DBMS (DataBase Management System), which are themselves very explicit about creation, modification and removal of elements of the database, simple mouse clicks and keyboard are good enough to manage a database.

However these systems don't allow to develop something robust, fully functional and secure yet. They allow to create applications with few basic features in the best case, in the worst case it will be a simple interface unusable.

However, technological evolutions, ways of development and democratization of means listed above can be good omens for the future, when these tools will be accessible by all of us, easy to use and will allow to have a final result the most accomplished as possible. Without going up to this tools that everyone will not use, we can imagine, with what the Web 2.0 showed, not a development where everyone make their own application each of its side (like the Excel macros in companies) but rather a collaborative and participatory development where everyone can bring its own contribution and knowledge to the conception. The emergence of SaaS (Software as a Service) and Cloud Computing, maybe will allow the development of software like the development of websites, where we would have a collaborative and participatory development through the web.

Key words : WYSIWYG, CMS, modeling, graphical interfaces, drag and drop, design windows, websites editors, databases, Web 2.0, application, software, DBMS, participatory, collaborative, SaaS, Cloud Computing, development.

Table des matières

REMERCIEMENTS IV

RÉSUMÉ V

ABSTRACT VI

TABLE DES MATIÈRES VII

TABLE DES MATIÈRES DES ILLUSTRATIONS IX

I. INTRODUCTION 1

1. HISTOIRE DU GUI (GRAPHICAL USER INTERFACE, INTERFACE UTILISATEUR GRAPHIQUE) 1

A. Les premiers pas 1

B. Les stations de travail adoptent le GUI 2

C. La micro s'empare à son tour des interfaces à fenêtres 2

2. LE LOGICIEL 2

A. Le déploiement 2

B. L'évolution des langages de programmation 3

C. Les interfaces utilisateurs 3

D. Les principales tendances dans la fabrication du logiciel 4

E. Le Génie Logiciel (GL) 5

3. PROBLÉMATIQUE 5

II. ETAT DE L'ART 7

1. LE LOGICIEL 7

A. Ingénierie Dirigée par les Modèles (IDM ou MDE) MDE : Model-Driven Engineering 8

B. Les IHM (Interface Homme-Machine) 25

2. WEB 26

3. LES SYSTÈMES DE GESTION DE BASES DE DONNÉES (SGBD) 27

III. NOUS POUVONS ÊTRE TOUS DÉVELOPPEURS 31

1. LE LOGICIEL 31

A. La génération de code 31

B. La génération d'interfaces graphiques 37

2. LES SITES WEB 39

A. Le CMS (Content Management System, Système de Gestion de Contenu) 40

B. Les éditeurs de sites 42

3. LA SIMPLICITÉ D'UTILISATION D'UNE BASE DE DONNÉES 44

IV. NOUS NE POUVONS PAS TOUS ÊTRE DÉVELOPPEURS 49

1. LE LOGICIEL 49

A. Le MDA présente ses faiblesses 49

B. Le DSML et ses limites 50

C. L'UML 51

D. Les éditeurs graphiques WYSIWYG et leurs limites 53

2. LES SITES WEB 54

A. Les limites des CMS 54

B. Les faiblesses des éditeurs de site web 55

3. LA CONSTRUCTION D'UNE BASE DE DONNÉES NÉCESSITE UN APPRENTISSAGE 55

A. Un processus de conception à assimiler 55

B. La sécurité 56

C. Un vocabulaire à connaitre et un apprentissage à faire 58

V. ET DEMAIN? 59

1. DES DÉVELOPPEURS BASIQUES? 59

2. TOUS DÉVELOPPEURS WEB? 59

A. Des nouveaux développeurs Web 59

B. Développer c'est partager l'information 63

C. Du contenu et du flux 64

D. Le Web participatif 65

E. On parle déjà de web 3.0 66

3. TOUS DÉVELOPPEURS DE LOGICIELS? 67

4. L'HYPER CONNECTIVITÉ 68

5. L'HISTOIRE NOUS DIS QUE OUI? 68

6. EST-CE QUE ÇA APPORTERAIT QUELQUE CHOSE? 69

7. ET LES BASES DE DONNÉES QU'EN FAIT-ON? 69

8. LE DÉVELOPPEUR DE "BASE" SERA TOUJOURS LÀ. 70

9. ET SI C'ÉTAIT TOUT AUTRE CHOSE? 70

A. Programmation par langage naturel écrit 70

B. Programmation par langage naturel parlé 71

VI. CONCLUSION 73

VII. TRAVAUX CITÉS 75

VIII. BIBLIOGRAPHIE 76

IX. ANNEXES 78

1. ANNEXE 1 : DIAGRAMMES UML 78

2. ANNEXE 2 : LE CODE SOURCE GÉNÉRÉ PAR VISUAL EDITOR 82

3. ANNEXE 3 : EXEMPLE D'UNE GÉNÉRATION DE CODE 83

Table des matières des illustrations

FIGURE 1 : LE MACINTOSH 1

FIGURE 2 : EVOLUTION DE LA PRODUCTIVITÉ DEPUIS 50 ANS 4

FIGURE 3 : CONSTAT DES PROJETS EN GÉNIE LOGICIEL 7

FIGURE 4 : EVOLUTION DE CES CHIFFRES 7

FIGURE 5 : EVOLUTION DU NOMBRE DE LIGNES DE CODE 8

FIGURE 6 : UN EXEMPLE DE MODÈLE, LA PIPE SELON MAGRITTE 10

FIGURE 7 : UN EXEMPLE DE MÉTA-MODÈLE 11

FIGURE 8 : UNE ARCHITECTURE À 4 NIVEAUX 12

FIGURE 9 : NIVEAUX DE MODÉLISATION, EXEMPLE DU JEU D'ÉCHEC 13

FIGURE 10 : PLUSIEURS VUES SUR UN MÊME MODÈLE 14

FIGURE 11 : ABSTRACTION ET SÉPARATION DES PRÉOCCUPATIONS, L'EXEMPLE DE GOOGLE MAPS 15

FIGURE 12 : LES TROIS TYPES DE MODÈLES DE MDA 17

FIGURE 13 : EXEMPLE D'UTILISATION DES MODÈLES DU MDA POUR RÉALISER UNE APPLICATION 17

FIGURE 14 : DSML 19

FIGURE 15 : HISTORIQUE DE L'UML 20

FIGURE 16 : L'ENSEMBLE DES DIAGRAMMES UML 22

FIGURE 17 : QUELQUES MODÈLES D'ÉLÉMENT UML 23

FIGURE 18 : MÉTHODE DE DÉVELOPPEMENT UML 24

FIGURE 19 : APERÇU DE LA PARTIE GRAPHIQUE DE VISUAL EDITOR SOUS JAVA 26

FIGURE 20 : APERÇU DE LA PARTIE SOURCE DE VISUAL EDITOR SOUS JAVA 26

FIGURE 21 : L'APPROCHE BASE DE DONNÉES 28

FIGURE 22 : ARCHITECTURE D'UN SGBD 28

FIGURE 23 : ETAPE 1, LE POINT DE VUE FONCTIONNEL (USE CASE) 32

FIGURE 24 : ETAPE 2, DIAGRAMME DE CLASSE 33

FIGURE 25 : ETAPE 3, DIAGRAMME DE SÉQUENCE 33

FIGURE 26 : ETAPE 4, GÉNÉRER DU CODE VIA LA MODÉLISATION 34

FIGURE 27 : UN EXEMPLE DE NOTES. 35

FIGURE 28 : EXEMPLE D'UN PROJET AVEC UN DSML 36

FIGURE 29 : RETOMBÉES ÉCONOMIQUE, SOURCE METACASE 2009 37

FIGURE 30 : LA PALETTE 38

FIGURE 31 : UN EXEMPLE DE CONCEPTION EN DRAG AND DROP 39

FIGURE 32 : RÉSULTAT LORSQUE L'ON EXÉCUTE LE PROGRAMME 39

FIGURE 33 : UN EXEMPLE D'UTILISATION DU CMS 40

FIGURE 34 : LA PARTIE ADMINISTRATION DU CMS 41

FIGURE 35 : UN EXEMPLE DE CE QUI EST STOCKÉ DANS LA BASE DE DONNÉES 41

FIGURE 36 : SAISIE DIRECTEMENT DANS L'INTERFACE 42

FIGURE 37 : UN EXEMPLE D'ÉDITEUR DE SITE AVEC DES BOUTONS D'ÉDITION 43

FIGURE 38 : UN EXEMPLE DE PLATEFORME ONLINE AVEC DU DRAG AND DROP 44

FIGURE 39 : UNE DES NOMBREUSE INTERFACE DES SGBD 44

FIGURE 40 : LE CODE SQL LORSQUE LA TABLE A ÉTÉ CRÉÉE 45

FIGURE 41 : CRÉATION D'UNE TABLE 45

FIGURE 42 : SPÉCIFICATION DES COLONNES 46

FIGURE 43 : REMPLISSAGE DES CHAMPS DE LA TABLE. 46

FIGURE 45 : EVOLUTION DU NOMBRE DE SITE CONSULTABLE DEPUIS 1995 60

FIGURE 46 : EVOLUTION DU NOMBRE D'ARTICLE DE WIKIPÉDIA EN FRANCE 63

FIGURE 48 : EVOLUTION DU NOMBRE DE COMPTE FACEBOOK DANS LE MONDE 64

FIGURE 47 : AUGMENTATION DU NOMBRE DE BLOG DANS LE MONDE, SOURCE TECHNORAITI 65

FIGURE 49 : LES INTERNAUTES DU WEB DEVIENNENT ACTEURS 66

FIGURE 50 : DIAGRAMME DE CAS D'UTILISATION 78

FIGURE 51 : DIAGRAMME D'ACTIVITÉ 78

FIGURE 52 : DIAGRAMME DE CLASSE 79

FIGURE 53 : DIAGRAMME DE COLLABORATION 79

FIGURE 54 : DIAGRAMME D'ÉTATS/TRANSITIONS 79

FIGURE 55 : DIAGRAMME D'OBJETS 80

FIGURE 56 : DIAGRAMME DE SÉQUENCES 80

FIGURE 57 : DIAGRAMME DE COMPOSANTS 81

FIGURE 58 : EXEMPLE DE GÉNÉRATION DE CODE 83

I. Introduction

"Moi aussi je peux jouer ?". Petite phrase très commune chez les enfants dans la cour de récréation désirant participer à un simple jeu avec leurs camarades, afin de pouvoir s'épanouir et éventuellement apprendre une nouvelle discipline. La similitude peut être de mise avec le monde informatique et plus particulièrement tous ces logiciels qui existent à profusion. Beaucoup de personnes, hors du monde informatique, m'ont déjà demandé "mais comment on créé un logiciel ?". Cette question, qui peut paraitre anodine, montre bien que le monde informatique est omniprésent dans la vie de tous les jours, et que chacun se montre très curieux sur ces logiciels qu'on utilise quasiment quotidiennement (pour ne pas dire tous les jours). Et bien sûr qui dit logiciel dit interface graphique...

1. Histoire du GUI (Graphical User Interface, Interface Utilisateur Graphique)

A. Les premiers pas

C'est du côté de Palo Alto (Etat-Unis), dans le laboratoire de recherche de Xerox Parc, qu'une révolution informatique va intervenir. En 1973, Xerox conçoit l'Alto, c'est une révolution dans le domaine informatique car c'est la première station à combiner une interface graphique avec des fenêtres, et l'utilisation de la souris. Malheureusement Xerox ne prend pas le risque de commercialiser sa machine qui est en totale rupture avec le marché. Xerox la diffusera seulement sur ses sites pour pouvoir tester le concept, et commercialisera le Xerox Star (qui reprend les grandes lignes de l'Alto) seulement en 1981.

Figure 1 : Le Macintosh

Aujourd'hui tout le monde est au courant, c'est Apple qui fait triompher cette nouvelle interface révolutionnaire avec son projet Lisa (le nouveau micro-ordinateur de la marque), ceci c'est grâce à Steve Jobs (suite à sa visite au Xerox Parc) qui va pousser Apple à développer une interface similaire à l'Alto. Lisa est commercialisé en 1983 mais c'est un échec car les performances sont décevantes et la machine coûte 9995 dollars. L'arrivée du Macintosh en 1984 rencontrera quant à lui le succès avec la même interface (totalement intégrée à l'OS) que sur Lisa. Apple se différencie ainsi de la concurrence des constructeurs d'ordinateurs de bureau qui sont tous alignés sur le standard IBM PC et MS/DOS.

B. Les stations de travail adoptent le GUI

Ainsi tous les constructeurs vont équiper leur machine du système à fenêtre. Apollo Computer lance son Display Manager dès 1981, Sun Microsystems avec son interface SunTools, qui s'exécute sur son système d'exploitation SunOS, James Gosling and David Rosenthal développent NeWS, une interface révolutionnaire car elle est basée sur une évolution orientée objet de Postscript (langage d'impression exploité notamment sur les imprimantes lasers), il n'y aura pas de suite à cette expérience.

Mais les initiatives des industries convergent vers un même standard : le X Window. Le X Window a été développé en 1984 par le MIT (Massachusets Institute of Technology) et est également connu sous le nom de X11. Il est composé d'un logiciel serveur, d'un module client et d'un protocole de communication pour permettre l'échange de l'un vers l'autre. X11 va conduire à une génération de terminaux graphiques haute résolution qui sont capables d'exécuter ce client X. Les machines Unix par exemple disposeront d'une interface graphique et d'une ergonomie semblable.

C. La micro s'empare à son tour des interfaces à fenêtres

Par la suite les fournisseurs de micro-ordinateurs grand public se sont mis à développer ces interfaces graphiques grâce à la génération des processeurs 16/32 bits. On peut citer l'AmigaOS créé par Commodore, le TOS de Atari ST, BeOS créé par Jean-Louis Gassée ou encore le NextSTEP créé par Steve Jobs.

Ces interfaces graphiques ont permis le développement du logiciel.

2. Le logiciel

A. Le déploiement

La miniaturisation guide le rythme d'évolution de la technologie du matériel mais c'est le déploiement logiciel qui détermine la pénétration des ordinateurs dans les activités qu'elles soient industrielles ou intellectuelles. Le logiciel a complètement transformé l'ordinateur. Il est passé de l'étape d'un outil pouvant dans la théorie solutionner un problème à un outil qui le résout dans la pratique. Le matériel est au logiciel ce que les instruments sont à la musique. Léonard De Vinci avait défini la musique comme "modelage de l'invisible", sa définition est d'autant plus adaptée pour décrire un logiciel.

Les progrès du matériel ont été énormes et ils le sont tout autant pour le logiciel. La grande majorité des logiciels avait été inventée 15 ans seulement après que Von Neuman ait définit l'architecture des machines. Les programmeurs attendaient même des machines bien plus puissantes pour pouvoir progresser. Pour s'en convaincre il suffit de regarder les dates d'apparition des langages : Fortran en 1957, Lisp en 1959, Cobol en 1960, Basic en 1964,... Il en a été de même pour les OS où les fonctions qu'un programme pouvaient exécuter en 1966 sous l'OS des IBM 360 étaient quasiment les mêmes que celles de l'OS/390 en 1995.

Les tous premiers programmes des ordinateurs ont été conçus par des mathématiciens et des scientifiques car ils croyaient que c'était du travail logique et simple. Mais le logiciel s'est révélé bien plus délicat à développer qu'ils ne l'avaient pensés. A l'époque les ordinateurs étaient têtus, ils faisaient ce qui été écrit plutôt que ce qui était voulu. Les programmeurs sont donc apparus, ils n'étaient ni mathématiciens, ni scientifiques mais étaient engagés dans une nouvelle histoire avec les ordinateurs.

B. L'évolution des langages de programmation

Les prémices des langages de programmation sont aussi vieilles que le calculateur digital. Il a donc fallu inventer des notations symboliques (un langage), ces notations sont ensuite traduites en code binaire par des autres programmes (un compilateur). Le langage qui a été le plus influent est le Fortran (développé en 1954 et 1957 par John Backus & co. chez IBM). A l'époque, il n'était pas certain que le compilateur puisse suivre la machine afin de produire du code efficace. Pourtant l'objectif a été atteint et Fortran est encore utilisé de nos jours. Mais Fortran avait des contraintes inutiles, des limitations dans les structures de données et des carences dans le contrôle logique du programme. Dans une moindre mesure on peut considérer que les nouveaux langages ont vu le jour pour solutionner les défauts de Fortran.

Malgré toutes les tentatives pour sortir un langage universel par un comité (Cobol), une organisation commerciale (PL/I), une personne (Pascal), ou par le ministère de la Défense américaine (ADA) celles-ci ont échoué et ont ouvert la voie à d'innombrables langages dont seulement une toute petite dizaine est aujourd'hui utilisée.

A l'inverse du matériel, les forts progrès du logiciel ne viennent pas d'une seule et même technologie mais d'un ensemble de paramètres (structures de contrôle des programmes, environnement de programmation, outils de programmation, etc). Malgré cela, certains continuent de coder dans des langages qui datent de plus de 30 ans (Fortran).

"Je parle en espagnol à Dieu, en italien aux femmes, en français aux hommes et en allemand à mon cheval" disait Charles Quint, il n'y a pas de langage idéal en informatique chacun fait selon ses sensations.

C. Les interfaces utilisateurs

Un programme permet à l'ordinateur de se transformer en un outil adapté à un usage particulier (fabrication d'un avion, traitement de texte, etc). L'interface va servir d'intermédiaire entre l'utilisateur et le logiciel, on parle d'IHM (Interface Homme Machine). Avant on concevait l'interface utilisateur en dernier, désormais cela se fait en premier ainsi chacun peut s'approprier "son" ordinateur. Bien sûr cela reste une illusion, mais cette illusion est la métaphore simplifiée que chacun se construit pour expliquer les actions du système ou pour provoquer de nouvelles actions.

La majorité des principes et des périphériques sont développés pour perfectionner cette métaphore, c'est quelque chose qui est devenue commun dans la programmation. Le principe le plus important est sans conteste le WYSIWYG ("What You See Is What You Get") c'est à dire ce que l'ont voit sur l'écran est une représentation fidèle de la métaphore de l'utilisateur. Un utilisateur veut un carré ? Il obtient un carré. Chaque utilisation du carré entraîne une modification prévisible du système, en tout cas du point de vue de l'utilisateur. Les éléments de cette métaphore qui sont les plus employés sont les fenêtres, les icônes, les menus, etc.

Grâce à cela une nouvelle génération de logiciel a émergé afin de facilité la tâche de l'utilisateur.

D. Les principales tendances dans la fabrication du logiciel

Sans le logiciel, les ordinateurs et les matériels de communication ne pourraient pas fonctionner. Au tout début, les coûts et les temps de développement des programmes ainsi que la productivité des programmeurs n'étaient pas des données critiques : Si une machine coûtait 2 millions de dollars, est-ce que c'était important que le logiciel en coûte 200 000 dollars ? L'arrivée des PC a bouleversé cette donne. En effet, la baisse des prix du matériel a mit en lumière le coût des logiciels.

La mesure de la productivité du logiciel est une question très discutée. En utilisant la méthode des points de fonction inventée par Allan Albrecht, chercheur chez IBM, vers la fin années 70, on obtient la courbe suivante sur les 50 dernières années :

Figure 2 : Evolution de la productivité depuis 50 ans

Comme on peut le voir la courbe est en constante baisse depuis la création des premiers logiciels, il y a donc peu de chance de voir la productivité progresser considérablement dans les années à venir. Les besoins en logiciel sont tels qu'on a vu apparaitre de nouvelles idées et de nouvelles approches pour la programmation de logiciel : le génie logiciel.

E. Le Génie Logiciel (GL)

Le terme de software engineering (Génie logiciel en français) a vu le jour à la sortie de deux conférences du comité scientifique de l'OTAN (à Garmisch, en Allemagne, du 7 au 11 octobre 1968, et à Rome, en Italie, du 27 au 31 octobre 1969).

Le génie logiciel est "une science de génie industriel qui étudie les méthodes de travail et les bonnes pratiques des ingénieurs qui développent des logiciels. Le génie logiciel s'intéresse en particulier aux procédures systématiques qui permettent d'arriver à ce que des logiciels de grande taille correspondent aux attentes du client, soient fiables, aient un coût d'entretien réduit et de bonnes performances tout en respectant les délais et les coûts de construction", selon Wikipédia. Son but est de maximiser les durées de vie et les qualités des logiciels en minimisant les coûts et les délais.

On retrouve la productivité au coeur du développement des technologies de l'information et par conséquent au coeur de l'activité des ingénieurs informaticiens. Ainsi se dégagent deux aspects complémentaires :

· Perfectionner la productivité des codeurs et des équipes qui réalisent le programme. Tout ceci grâce à plusieurs méthodes, outils, facilités d'emploi et un savoir-faire qui forment un tout homogène.

· Accroître le nombre d'ingénieurs pouvant réaliser des programmes, où même éventuellement permettre à un usager traditionnel de faire son propre programme dont il a besoin (comme par exemple les tableurs qui ont vu le jour dans les années 80 grâce à la micro informatique).

C'est ce dernier point qui va être le fil conducteur de ce mémoire.

3. Problématique

L'idée de savoir si de simples usagers étaient capables de réaliser eux-mêmes des programmes m'est venue l'an dernier lors d'un projet où je devais développer une application de production et de gestion de stocks en Java. Pour ce faire, j'ai dû développer une IHM mais j'ai été confronté à un problème : je n'avais pas toutes les compétences pour en réaliser une qui soit, entre autres, ergonomique et visuellement attractive.

En faisant des recherches sur Internet, j'ai trouvé un plug-in pour Eclipse (environnement de développement libre) nommé WindowsBuilderPro qui permet de créer des GUI sans écrire la moindre ligne de code.

Ainsi je me suis demandé, est-ce que de tels outils ne pourraient pas se généraliser dans l'avenir afin que chacun puisse créer son propre logiciel? En condenser, demain, serons-nous tous développeurs de programmes (et/ou sites web)?

Après avoir fait un état des lieux de l'existant, je vous expliquerai de quel manière nous pouvons déjà tous êtres développeurs, puis pourquoi finalement nous ne pouvons pas l'être tous avant de savoir dans quelle mesure cette problématique peut être légitime.

Il ne faut pas perdre des yeux que dans ce sujet je parle de personnes qui n'ont aucune connaissance en programmation et qui dans le futur pourraient être amenées à créer un logiciel, un site web ou une base de données. Tout au long de ce mémoire j'essaierai de répondre à la problématique en distinguant bien ces trois notions que sont le logiciel, le site web et la base de données dont la conception fait partie du métier de développeur.

II. Etat de l'art

Dans cette partie, nous allons passer en revue tout ce qui va nous permettre de développer un programme (ou un site web) sans écrire une seule ligne de code. Comme expliquer dans la problématique je distinguerai bien le logiciel, le site web et la base de données.

1. Le logiciel

Le logiciel contrôle le monde, il est présent absolument partout : processus métiers (administrative etc.), gouvernement, l'industrie (Usines, chaines de fabrication), transports, défense, finance, santé, édition, médias, nouvelles technologies du web, commerce électronique, et bien plus encore.

Le logiciel a des enjeux aussi bien politiques qu'économiques, d'autant plus que si un problème survient à cause d'un logiciel les conséquences peuvent être très lourdes :

· Therac 25, de 1985 à 1987 : 6 patients irradiés, 2 morts

· Ariane 5 vol 88/501, en 1996 : le vol est détruit au bout de 37 secondes et a coûté 850 millions de dollars

· Mars Climate Orbiter & Mars Polar Lander sont détruits en 1999

· Le projet d'informatisation de la bourse de Londres a été abandonné au bout de 4 ans et a coûté 100 millions de livres

Figure 3 : Constat des projets en Génie Logiciel

Figure 4 : Evolution de ces chiffres

The Standish Group montre qu'en 2009 seulement 32% des projets en génie logiciel respectent toutes les spécifications prévues au départ et que 24% ne voient pas la fin. Bien que le taux de succès reste en constante hausse, le taux d'échec est quant à lui aléatoire :

Aujourd'hui les logiciels sont de plus en plus complexes car ils ont plusieurs préoccupations, points de vue et aspects. Ces points de vues sont noyés dans le code, il est donc impossible de les isoler. Les applications sont également de plus en plus larges et le nombre de lignes de code ne cesse d'augmenter, selon Wikipédia et Source Line Of Code (SLOC) Windows XP c'est 40 millions de lignes de codes, ceci complique grandement la communication ente les différents intervenants.

Figure 5 : Evolution du nombre de lignes de code

Le logiciel c'est également des besoins qui évoluent en cours de route, on a donc des besoins de variabilité. Pour répondre à ces problématiques et à l'évolution permanente des technologies, il est apparu, entre autres, l'ingénierie dirigée par les modèles.

A. Ingénierie Dirigée par les Modèles (IDM ou MDE) MDE : Model-Driven Engineering

L'Ingénierie Dirigée par les Modèles (IDM) est une méthodologie/vision de développement de logiciels qui met l'accent sur la création de modèles (ou l'abstraction) plus proche du concept du domaine concerné plutôt qu'orienté informatique ou algorithmique.

Un paradigme de modélisation pour IDM est considéré comme efficace si ses modèles ont un sens par rapport au point de vue de l'utilisateur et peut servir de base pour l'implémentation de systèmes.

Les principes de l'IDM :


· P1 : «Models as first class entities»


· P2 : Montée en abstraction


· P3 : Séparation des préoccupations


· P4 : Modèles productifs (Vs. Contemplatifs)

P1 : Les modèles comme des entités de première classe

Avec l'IDM on veut passer du "tout objet" au "tout modèle", c'est-à-dire modéliser au lieu de coder. Il y a un changement d'état d'esprit : on était dans le "coder une fois, lancer partout" désormais on veut "modéliser une fois, générer partout".

Le modèle objet a atteint ses limites, les concepts objets sont plus proches de l'implémentation que du domaine métier (Gabriel, 2002) et (Nierstrasz, 2010).

Avec le concept de l'objet il est difficile de raisonner et de communiquer (code) car les aspects qu'ils soient fonctionnels ou pas sont noyés dans des lignes de codes. Le défi est donc de s'orienter vers une expertise métier et avoir un bon langage de modélisation.

La définition d'un modèle : "A Model represents reality for the given purpose ; the model is an abstraction of

reality in the sense that it cannot represent all aspects of reality. This allows us to deal with the world in a simplified manner, avoiding the complexity,danger and irreversibility of reality" (Rothenber, 1989)

Traduction : un modèle représente une réalité pour un sujet donné. Le modèle est une abstraction de la réalité dans le sens où il ne peut pas représenter tous les aspects de la réalité. Cela nous permet de traiter le problème de manière simplifiée en évitant la complexité, les dangers et l'irréversibilité de la réalité.

La définition de la modélisation : "in the broadest sense, is the cost-effective use of something in place of something else for some cognitive purpose. It allows us to use something that is simpler, safer or cheaper than reality instead of reality for some purpose" - (Rothenber, 1989)

Traduction : au sens large, c'est l'utilisation rentable de quelque chose à la place d'une autre dans un but cognitif. Elle nous permet d'utiliser quelque chose qui est plus simple, plus sûre ou moins chère que de la réalité.

Il faut cependant faire attention au débat qui dit que l'abstraction est la même chose que la simplification car ce n'est pas le cas. En effet, la modélisation simplifie la compréhension et la communication autour du problème mais elle ne simplifie pas le problème lui-même.

Figure 6 : Un exemple de modèle, la pipe selon Magritte

Pour être productifs, les modèles doivent être utilisés par des machines, on a donc besoin d'un langage précis pour les définir, on appelle ceci Méta-Modèle.

D'après l'OMG (Object Management Group. : Association de professionnels de l'informatique orientée objet ayant défini la norme Corba, ainsi que l' OMA 1(*)et les ORB2(*)) a "metamodel is a model that defines the language for expressing a model". Traduction : un Méta-Modèle est un modèle qui définit un langage pour définir un modèle.

Pour Seidewitz, a «metamodel makes statements about what can be expressed in the valid models of a certain modeling language». Traduction : un méta-modèle fait des déclarations sur ce qui peut être exprimé en modèles valides de certains langages de modélisation.

La relation entre un modèle et son méta-modèle est une relation "conforme à". Un modèle est conforme à son méta-modèle si les éléments et les relations entre ces éléments sont définis dans le méta modèle

Conforme à

Représente

Méta-modèle

Modèle

Système

Figure 7 : Un exemple de méta-modèle

Les langages utilisés pour exprimer les méta-modèles ont eux-mêmes un modèle qu'on appelle méta-méta-modèle et qui se trouve être traditionnellement auto-descriptif. C'est en particulier le cas pour MDA (voir plus loin). Un méta-modèle réflexif est exprimé dans le même langage de modélisation qu'il décrit. Les principaux langages de méta-modélisation existants sont MOF (pour Meta-Objet Facilities), EMOF (pour Essential MOF), CMOF (pour Complete MOF) et ECore défini par IBM et utilisé dans le framework de modélisation d'Eclipse EMF (Eclipse Modeling Framework).

La spécification de MOF adopte une architecture de méta-modélisations à quatre couches :

M0 : Ce niveau représente le système réel à modéliser.

Exemple : Jeu d'échecs dans la figure ci après.

M1 : Ce niveau est composé du modèle représentant le système réel à modéliser.

Exemple : modèle de jeu d'échecs via un DSL (Domain Specific Langage)

M2 : Dans ce niveau on trouve le méta-modèle décrivant le langage de modélisation.

Exemple : méta-modèle du DSL de jeu d'échecs.

M3 : Un niveau qui comporte le méta-méta-modèle décrivant le langage de méta-modélisation.

Exemple : Ecore, MOF.

Figure 8 : Une architecture à 4 niveaux

On retrouve ces couches dans la figure 9, qui illustre un système de jeu d'échec. L'échiquier est situé au niveau M0, chaque élément de ce système est modélisé au niveau M1. Dans ce niveau on retrouve le modèle qui représente l'échiquier, les pièces sont modélisées par une classe nommée pièce et qui a certains attributs décrivant la pièce, même chose pour le plateau et les cases. Ensuite on retrouve le méta-modèle au niveau M2, ce dernier représente le langage de modélisation et il est conforme à un méta-méta-modèle. Ce méta-méta-modèle est situé dans le niveau M3, il est conforme à lui-même et représente le langage de méta-modélisation.

Figure 9 : Niveaux de modélisation, exemple du jeu d'échec

P2 : Abstraction

L'abstraction c'est ignorer les détails insignifiants et ressortir des détails les plus importants. Pour rappel l'importance c'est décider de ce qui est signifiant et de ce qui ne l'est pas, cela dépend directement de l'utilisation visée du modèle. Pour le Larousse l'abstraction c'est l' "Opération intellectuelle qui consiste à isoler par la pensée l'un des caractères de quelque chose et à le considérer indépendamment des autres caractères de l'objet."

Les modèles permettent de s'abstraire de certains détails qui ne sont pas indispensables pour comprendre le système selon un point de vue donné. Pour rappel le but du génie logiciel c'est l'amélioration de la productivité via l'augmentation du niveau d'abstraction.

Les langages de 3ème génération ( Fortran, COBOL, Simula, APL, etc.) ont amélioré la productivité du développeur par 450% (Jones, 2006), alors que l'introduction des langages orientés objets n'ont pas fait autant. Par exemple Java est 20% plus productif que le BASIC. Les langages de programmation arrivent aujourd'hui à leur limite en terme d'abstraction. Ainsi le défi c'est d'assurer la transformation/transition vers le niveau le plus bas et de choisir le bon niveau d'abstraction.

P3 : Séparation des préoccupations

La séparation des préoccupations est indispensable dans le cas d'applications complexes. Plusieurs aspects et/ou points de vue signifient que nous avons plusieurs métiers (sécurité, communication, GUI, QoS,..), mais un point de vue concerne un modèle.

Figure 10 : Plusieurs vues sur un même modèle

Chaque vue peut être exprimée en utilisant un langage de modélisation différent. Il y a du coup plusieurs intervenants dans la boucle. Le défis de l'IDM est d'intégrer des vues et d'assurer une cohérence entre ces vues.

Vue plan

Vue satellite

Vue trafic

Un autre niveau d'abstraction

Street view

Figure 11 : Abstraction et séparation des préoccupations, l'exemple de Google Maps


· P4 : Modèle productifs

La modélisation reste un investissement qu'il faudra rentabiliser. On se dirige vers de plus en plus de code généré automatiquement à partir des modèles.

Les défis des modèles productifs consistent en des langages de modélisation proche du métier et précis, des générateurs de code fiable, intégration du code généré à partir de plusieurs vues vers un seul système, génération du comportement, définition de la chaine de transformation (raffinement) modèle vers code.

Les promesses de l'IDM sont donc :

· Gérer la complexité : les applications sont de plus en plus énormes (Windows 2000 c'est 40 millions de lignes de code) et ne peuvent pas être gérées par un seul développeur.

· Meilleure communication : le code n'est pas toujours compréhensible pour les développeurs qui ne l'ont pas produits, on peut difficilement communiquer avec du code. Comme il y a souvent plusieurs dizaines de personnes sur un projet cela permet d'avoir un langage commun et universel (monde). Avec l'apparition de nouvelles façons de travailler (outsourcing, sous-traitance,...) la communication y apparait comme très importante.

· Pérenniser un savoir-faire : de part la durée de certains projets. Les projets peuvent durer plusieurs années donc ce ne sont pas toujours les mêmes personnes qui travaillent dessus. Du coup il y a un besoin de capitaliser un savoir-faire indépendant du code et des technologies. On veut capturer le métier sans se soucier des détails techniques.

· Augmenter la productivité : On génère du code à partir de modèles et on maîtrise la variabilité c'est-à-dire que nous avons une vision ligne de produits où l'on veut un modèle générique pour un produit avec plusieurs variantes.

Exemple de NOKIA qui a vendu 1,1 milliard de téléphones portables avec des milliers de versions logiciels alors que le délai de mise sur le marché n'est que de 3 mois.

Ainsi se pose la question suivante : Quel langage utiliser pour modéliser, méta modéliser (créer de nouveaux langages) ? Pour cela nous allons voir deux approches :

· L'approche MDA : utilisation d'un ensemble de standards fournis par l'OMG3(*) i.e. MOF4(*), UML.

· L'approche DSML (Domain-Specific Modeling Languages)

L'approche MDA (Model-Driven Architecture)

L'approche MDA est une vision promue par l'OMG depuis 2001 (Soley, 2001), qui se base sur les modèles. La principale idée est qu'un modèle indépendant de la plate-forme (Platform Independent Model, PIM) définit l'ensemble des fonctionnalités du système à développer. Le PIM va quand à lui être traduit en modèle PSM (Platform Specific Model) c'est-à-dire en modèle qui est spécifique à la plate-forme. Le PSM va être utilisé par la suite pour générer le code de la plate-forme cible. On entend aussi parler de CIM (Computational Independent Model), il est encore plus abstrait que le PIM et il est indépendant de tout système informatique selon l'OMG. Il est là pour expliquer ce que le système devra réellement faire.

Figure 12 : Les trois types de modèles de MDA

En résumé, les modèles CIM décrivent les exigences sur le logiciel (services rendus, environnement d'exécution, procédés métiers exploitants). Les modèles PIM décrivent la conception abstraite du logiciel (abstraction par la définition d'une machine conceptuelle), les modèles PSM décrivent l'exploitation d'une plate-forme (choix d'une machine d'exécution).

Attention, le CIM n'est pas une abstraction du PIM, c'est-à-dire que les exigences ne sont pas une abstraction de la conception abstraite, sauf si on suit le principe de raffinement. Le PIM est une abstraction du PSM, c'est-à-dire que la conception abstraite est une abstraction de la conception concrète. Le CIM et le PIM se recouvrent, c'est à dire que les exigences du CIM doivent être supportées par la conception, de même que le PIM et le PSM se recouvrent, c'est-à-dire que la conception concrète doit être conforme à la conception abstraite.

*

Figure 13 : Exemple d'utilisation des modèles du MDA pour réaliser une application

* PDM pour Plateform Description Model. Il correspond à un modèle de transformation du PIM vers un PSM d'implémentation. L'architecte doit choisir une ou plusieurs plateformes pour l'implémentation du système avec les qualités architecturales désirées. Ce modèle propre à la plate-forme est utile pour la transformation du PIM en PSM. La démarche MDA est ainsi basée sur le détail des modèles dépendants de la plate-forme. Il représente les particularités de chaque plate-forme. Il devrait être fourni par le créateur de la plate-forme.

Le MDA s'appuie sur plusieurs standards :

· Grâce au MOF, tous les méta-modèles sont homogènes (diagramme de classe)

· Grâce à UML, il existe un langage de modélisation très généraliste et ciblant plusieurs niveaux d'abstraction (voir la partie dédiée à l'UML).

· Grâce à OCL, il est possible de préciser des contraintes d'exploitation des modèles

· Grâce à AS, il est possible de modéliser finement des comportements

· Grâce à XMI, il existe un format unique de sauvegarde des modèles vers XML

· Grâce à SPEM, les procédés de développement sont modélisables

· Grâce à QVT, les transformations sont modélisables.

L'approche DSML (Domain-Specific Modeling Languages)

Dans le monde du génie logiciel, un DSML est un langage de modélisation dédié à un domaine précis.

A l'inverse du MDA qui utilise des méthodologies de modélisation généraliste, la modélisation spécifique à un domaine (DSM) lui utilise une méthodologie qui est centrée sur un domaine spécifique et qui a pour but de perfectionner la productivité. L'idée c'est de baisser l'espace de conception afin d'avoir dans la plupart des cas une seule gamme de produit par organisation. Ainsi le niveau d'abstraction des modèles est élevé et la génération totale de l'implémentation sera sur mesure pour l'organisation, d'où le gain de productivité.

Le principe de la modélisation DSM est simple, et réside dans la notion de langage de modélisation spécifique à un domaine (Domain-Specific Modeling Language ou DSML). On rassemble l'ensemble des connaissances du domaine d'application dans un langage de modélisation qui lui est dédié, on en fait des modèles et à partir de ces modèles on génère du code.

L'approche DSML fait partie d'un environnement complet avec un générateur de code et un environnement d'exécution (framework) pour former les DSM.

Figure 14 : DSML

L'UML (Unified Modeling Language)

Entre 1989 et 1994 : le nombre de méthodes orientées objet est passé de 10 à plus de 50, où chacune proposait son propre langage de modélisation. Toutes ces méthodes avaient pourtant d'énormes points communs (objets, méthodes, paramètres, ...). Au milieu des années 90, UML est l'accomplissement de la fusion de précédents langages de modélisation objet : Booch, OMT, OOSE principalement issus des travaux de Grady Booch, James Rumbaugh et Ivar Jacobson. Les principales influences de l'UML sont :

· Booch : Catégories et sous-systèmes

· Embley : Classes singletons et objets composites

· Fusion : Description des opérations, numérotation des messages

· Gamma, et al. : Frameworks, patterns, et notes

· Harel : Automates (Statecharts)

· Jacobson : Cas d'utilisation (use cases)

· Meyer : Pré- et post-conditions

· Odell : Classification dynamique, éclairage sur les événements

· OMT : Associations

· Shlaer-Mellor : Cycle de vie des objets

· Wirfs-Brock : Responsabilités (CRC)

Figure 15 : Historique de l'UML

Aujourd'hui, UML est le langage de modélisation orienté objet (OO) le plus connu et le plus utilisé et s'applique à plusieurs domaines tels que : OO, RT, Déploiement, Requirement,... Peu d'utilisateurs connaissent le standard, ils ont une vision outillée d'UML (Vision Utilisateur) où 5% ont une forte compréhension, 45% une faible compréhension, 50% aucune compréhension.

Il y a trois utilisations possibles d'UML :

· Comme un langage pour faire des croquis, esquisses, ébauches... (explorer)

Probablement la manière dont UML est le plus utilisé aujourd'hui : pouvoir échanger, communiquer rapidement autour d'une idée où les modèles ne sont pas forcément à 100% complets. Ses objectifs sont d'analyser, réfléchir et décider (brainstorming)

· Comme un langage de spécification de modèles, patrons... (spécifier). On spécifie ici, des modèles complets, prêts à être codés, utilisés pour prendre des décisions poussées de design, des modèles issus du Reverse Engineering (afin de réfléchir dessus, d'améliorer la conception, de casser des dépendances, etc.). Il y a également une possibilité de faire du round-trip engineering (Génération de code et Reverse engineering)

· Comme langage de programmation (produire). Ici, on veut tout mettre dans le modèle, le modèle UML devient alors la source du code afin de pouvoir générer et compiler du code à partir du modèle.

C'est ce dernier point qui va nous intéresser.

La génération de code conduit à plus de productivité (la structure d'une centaine de classes, d'opérations, ... sont générés en un seul clic). Il y a également moins d'erreurs car le savoir faire est codé dans les générateurs de code.

Les principes d'un générateur de code consistent en :

· un ensemble de règles décrivant la correspondance entre concepts du modèle et concepts du langage (Java par exemple, voir ci-après).

· paramétrages d'option (dans certains cas/outils)

o Choix des constructions dans le langage cible (Vector ou ArrayList en JAVA)

o Générer les accesseurs et les constructeurs

o Implanter les méthodes abstraites

· Un moteur de génération de code avec en input le modèle et en output le code.

Voici à titre d'exemple quelques règles sur la génération de code UML 2 vers JAVA :

· Une classe UML correspond à une classe JAVA ayant le même nom.

· Une interface UML correspond à une interface JAVA ayant le même nom

· Si une classe UML est associée à une autre et que l'association est navigable, il y a alors un attribut dans la classe JAVA qui va correspondre à la classe UML. Le nom de cet attribut correspond au nom du rôle de l'association. Si l'association spécifie une cardinalité supérieure à 1, alors l'attribut de JAVA est une ArrayList.

· Une opération d'une classe UML correspond une opération d'une classe JAVA ayant le même nom, ainsi que les noms des éventuels paramètres.

Cette liste est non exhaustive, il existe encore beaucoup de principes mais qui ne seraient pas pertinents ici.

UML se décompose en trois sous ensemble :

· En vue

· En diagramme

· En modèles d'élément

Les vues :

· des cas d'utilisation : montrent les besoins de chaque acteur du système

· logique : montrent comment les besoins des acteurs peuvent être satisfaits

· d'implémentation : montrent les dépendances entre les modules

· des processus : montrent la vue temporelle et technique

· de déploiement : montrent la position géographique et l'architecture des éléments

Les diagrammes :

Ils sont au nombre de treize, représentant différents aspects du système.

Figure 16 : L'ensemble des diagrammes UML

Je vais vous présenter succinctement les principaux diagrammes UML

Point de vue fonctionnel :

Cas d'utilisation : OMG définit le cas d'utilisation par une "représentation d'un ensemble de séquences d'actions qui sont réalisées par le système et qui produit un résultat observable intéressant pour un acteur particulier".

Point de vue statique :

Diagramme de classes : va représenter les classes qui interviennent dans le système.

Diagramme d'objets : représente la vue statique d'un ensemble d'instance de classe

Point de vue dynamique :

Diagramme de séquences : représente les interactions entre les objets dans la réalisation du processus de l'application

Diagramme de collaboration/communication : il possède les mêmes constituants que le diagramme de séquences mais il met davantage l'accent sur les objets impliqués dans l'interaction que sur l'aspect temporel des échanges.

Diagramme d'état/transition : description d'un objet aux changements de son environnement.

Diagramme d'activité : modélise les traitements effectués par une opération.

Point de vue déploiement :

Diagramme de composants : sert à montrer le lien entre les différents composants d'une application

Les modèles d'élément :

Ce sont les briques des diagrammes. Ce sont tous les éléments qui vont permettre de concevoir les diagrammes.

Figure 17 : Quelques modèles d'élément UML

La méthode de développement UML respecte un processus strict. Après avoir lu le cahier des charges, il y a établissement en parallèle le diagramme de cas d'utilisation (UC) et de classes (seulement avec les attributs). A partir du diagramme de UC on établit les diagrammes de séquences d'analyses et d'activités. On peut ainsi peaufiner le diagramme de classes avec les opérations et finir par les diagrammes de séquences de conception.

Figure 18 : Méthode de développement UML

Classes d'analyse

Classes de conception

Activités

Séquence de conception

Séquences d'analyses

Cas d'utilisation

En parallèle

Cahier des charges

B. Les IHM (Interface Homme-Machine)

L'exemple de Visual Editor pour Java

Tout ce que l'on a vu jusqu'à maintenant concernait la conception pure de logiciel, mais sans un brin d'IHM, les logiciels ne seraient utilisables que par une petite partie de personnes. Ainsi, toujours dans l'idée de s'abstenir de programmer, de nombreux éditeurs d'IHM existent. J'ai choisi de vous expliquer le fonctionnement de l'un d'entre eux : Visuel Editor qui est un plug-in pour Eclipse (environnement de développement).

L'éditeur graphique Visual Editor (VE) permet de développer rapidement des interfaces graphiques basées sur SWING/SWT (bibliothèque graphique pour JAVA). L'éditeur graphique génère un code Java standard de bonne qualité qui peut être modifié par la suite. Les évènements des objets graphiques peuvent également être générés avec VE. Il est aussi possible de gérer les modèles abstraits pour les objets complexes tels que les Jtable ou encore les Jlist. La prise en main de VE est intuitive, par exemple la gestion des layouts (mise en page) permet de définir des structures graphiques complexes d'objets imbriqués avec les containers (conteneurs). Le code généré n'a pas un format spécifique à Eclipse VE, un simple éditeur comme notepad++, peut suffire pour continuer un développement.

VE est divisé en deux fenêtres, l'une montrant les composants de Java dans une fenêtre de conception, et l'autre montrant la source associée. Dans la fenêtre de conception ce sont des représentations graphiques (boutons, label, layout,...). Lorsque vous modifiez les composants dans la fenêtre de conception, la source est mise à jour. Inversement, lorsque vous modifiez les fichiers source, la fenêtre de conception est mise à jour afin de refléter les modifications que vous apportez. Ce cycle de déclenchement des fenêtres de conception et de la source est conçu de telle sorte que l'éditeur visuel pour Java peut être utilisé non seulement comme un outil pour générer du code, mais comme un éditeur pour montrer l'effet de modifications du code source au cours du développement. Une fois que vous apportez des modifications à votre fichier dans un autre éditeur, vos changements seront reflétés dans la fenêtre de conception de VE.

VE montre par défaut la fenêtre de conception dans un onglet "Design" et la source dans un onglet "source". La fenêtre de conception est une surface WYSIWYG qui vous permet de composer l'interface graphique que vous construisez, tandis que le volet source affiche le contenu du fichier Java. La fenêtre de conception dispose d'une palette sur la gauche qui vous permet de contrôler la sélection des composants. A tout moment vous pouvez utiliser l'option Annuler dans le menu d'édition ou de l'action afin d'annuler une modification.

Bien sûr VE n'est pas le seul éditeur graphique pour JAVA, on peut également citer WindowsbuilderPro ou encore Jbuilder.

Figure 19 : Aperçu de la partie graphique de Visual Editor sous JAVA

Figure 20 : Aperçu de la partie source de Visual Editor sous JAVA

Pour la source, voir l'Annexe 2.

3. Web

Concernant la partie Web, beaucoup de sites proposent de créer son site web en cinq minutes sans la moindre connaissance en programmation. Ces sites s'adaptent aux besoins des utilisateurs et permettent de créer un site dynamique, un blog, un site e-commerce - ou les 3 à la fois - sans aucune connaissance technique.

L'ambition de ces sites est d'assouvir les besoins des utilisateurs. Ils travaillent pour leur faire profiter des dernières avancées technologiques à des prix accessibles, voire gratuits. Parallèlement, ils concentrent leur activités afin d'élaborer des solutions Web complètes et faciles à configurer sachant que la majorité de leurs clients ne sont pas des informaticiens professionnels.

Beaucoup proposent des "extras" comme par exemple une collection de logiciels ou l'utilisation d'un serveur sécurisé.

Les espaces clients deviennent de plus en plus ergonomiques et leur permettent de pouvoir configurer facilement un nom de domaine ou gérer un compte email POP3 par exemple. Beaucoup d'utilisateurs ne sont pas des professionnels de la création de sites, ainsi ces sites conçoivent des applications de telle manière que n'importe qui sachant surfer sur le net puisse instinctivement utiliser ces programmes en ligne.

Ces sites proposent d'enregistrer des noms de domaine qui sont de moins en moins cher (<10€/an) avec des solutions d'hébergements consistants (vaste espace disque, trafic inclus considérable, collection gratuite de logiciels...).

Ces sociétés se développent après avoir acquis, pendant des années, de l'expérience et de la maturité en tant que fournisseurs de produits et services à la pointe de l'innovation. Ils ciblent les petites et moyennes entreprises ainsi que les particuliers soucieux d'un service de qualité à bon prix.

Ces sites investissent énormément pour construire les plus grands et plus modernes centres de calcul. Surpassant tous les standards de sécurité, d'alimentation, de connectivité, de hardware et de performance, les sites web se trouvent entre de bonnes mains. Leurs équipes de maintenance surveillent en permanence l'activité des serveurs, garantissant ainsi une disponibilité réseau proche de 100%.

Parmi ces sites on peut citer Jimbo ou Prestashop pour faire des sites de e-commerce, Joomla ou Drupal qui sont des CMS (on y reviendra plus tard dans ce mémoire) afin de faire de la gestion de contenu, et des plates-formes en ligne comme OneAndOne ou Wix pour élaborer n'importe quel type de site et bien sûr sans oublier l'utilisation des blogs et des wikis qui ont explosé au milieu des années 2000 et qui permettent de poster régulièrement des billets, ou faire de la modification de contenu. On a dénombré pas moins de 156 millions de blogs début 2011.

4. Les systèmes de gestion de bases de données (SGBD)

Sans les bases de données la programmation web et applicatif ne servirait à rien. En effet, nous aurions seulement de simples interfaces où l'on ne pourrait pas stocker (ou remonter) des données. Par exemple, une identification sur un site ne serait pas possible. Le métier de programmeur ne se limite donc pas simplement aux développements de logiciels, mais il faut également qu'il sache créer et gérer une base de données.

Une base de données (BDD) est une collection de données structurées sur des entités (objets, individus) et des relations dans un contexte (applicatif) particulier. Un système de gestion de base de données (SGBD) est un (ensemble de) logiciel(s) qui facilite la création et l'utilisation de bases de données. Les données sont définies, administrées et gérées en utilisant des langages fondés sur des modèles de données.

Figure 21 : L'approche base de données

L'objectif du SGBD est de faciliter le partage de grands volumes de données entre différents utilisateurs/applications. Il doit garantir la cohérence et l'intégrité des données en cas d'erreurs de programmation, d'accès concurrents, de pannes, d'accès non autorisés, etc. Il doit également garantir des performances d'accès sur des grands volumes de données pour un grand nombre de clients.

Un SGBD a trois fonctions principales. Il doit, tout d'abord, représenter et structurer l'information. Ceci par le biais d'une description de la structure de données (ex : employés, âge, noms,...), d'une description de contraintes logiques sur les données (ex : 0 < Age < 150, ...) et d'une vue, c'est-à-dire une réorganisation (virtuelle) de données pour des besoins spécifiques. Un SGBD doit ensuite gérer l'intégrité des données. Pour cela il y a une vérification des contraintes, une exécution transactionnelle des requêtes (mise à jour) et une gestion de la concurrence multiutilisateurs et des pannes. La dernière fonction principale d'un SGBD est le traitement et l'optimisation de requêtes.

Figure 22 : Architecture d'un SGBD

Nous avons également trois types d'utilisateurs pour un SGBD. Tout d'abord il y a l'utilisateur final (end user) qui accède à la base de données par des formes d'écran, des formes applicatives ou, pour les plus experts, des requêtes SQL5(*). Ensuite il y a le développeur d'application qui va construire le schéma conceptuel, définir/gérer le schéma logique et les vues et concevoir/implémenter des applications qui accèdent à la base de données. Le dernier type d'utilisateur d'un SGBD est l'administrateur de base de données que l'on appelle DBA (DataBase Administrator). Le DBA gère le schéma physique et règle les performances, charge/organise la base de données (BDD) et gère la sécurité et la fiabilité.

De nombreux SGBD existent sur le marché dans lesquels on peut citer : Ingres, Oracle, Access, MySQL, PostgreSQL ou encore Progress.

III. Nous pouvons être tous développeurs

1. Le logiciel

A. La génération de code

Nous allons voir deux exemples de projet qui vont permettre de générer du code via l'ingénierie dirigée par les modèles. Pour rappel l'idée est de générer du code à partir de modèles que nous allons au préalable créer. Comme vu dans l'état de l'art, il y a deux langages de modélisation: le MDA via l'UML et le DSML. Nous allons traiter un exemple pour chacun, et voir que créer un programme peut être à la portée de tous, et ce même dès aujourd'hui.

Exemple d'un projet avec UML

Nous allons traiter le cas d'une application que nous appellerons "QCM".

QCM est une application de passages d'examens de type "questions à choix multiples" en ligne et possède deux aspects :

· Système côté enseignants

· Système côté étudiants

Ainsi, les professeurs peuvent, à partir de fichiers XML ou en revisitant les anciens QCM, créer des QCMs pour évaluer le niveau de leurs étudiants.

Les étudiants de leur côté, sont prévenus par l'administration qu'un compte leur est affecté sur le programme et leur fournis leur identifiant afin de procéder à la validation de celui-ci.

Ces jeunes diplômants peuvent ainsi, lorsqu'ils entrent dans la période de passage d'un QCM d'un des modules suivis, se connecter au site et passer leur examen en ligne pendant un temps défini par le créateur du QCM.

Une fois la date de passage du QCM arrivée à échéance, les notes peuvent être récoltées par le professeur et s'il le désire, envoyées aux étudiants. Les étudiants peuvent, quant à eux, visualiser les réponses aux QCMs qu'ils ont passé et savoir où ils ont commis des erreurs.

Pour traiter ce sujet, nous avons les étapes classiques d'un projet : recueil des besoins, modélisation, etc. Les modèles vont nous permettre de générer du code. A la fin du projet nous avons une synchro entre le code et les modèles, sous prétexte que le code n'ait pas été modifié par un développeur.

Dans un premier temps, dans un souci de communication nous commençons par un diagramme de Use Case (ou cas d'utilisation), qui est très parlant pour tout le monde.

Figure 23 : Etape 1, le point de vue fonctionnel (Use Case)

Dans notre cas, tout accès à QCM nécessite une authentification. Il y a deux types d'authentification : soit professeur, soit étudiant. Un professeur pourra créer un QCM, gérer les notes et collecter des réponses. Un étudiant pourra quant à lui passer un QCM et le consulter.

La deuxième étape consiste à passer au point de vue structurel avec des diagrammes de classes. Cela va permettre de présenter les classes et les interfaces du système ainsi que les différentes relations entre celles-ci. Avec ceci nous avons des "classes" et des "associations" au lieu de "widget", "menu", "champs". Il y également une notation graphique sans aucun lien avec le domaine, l'utilisateur manit ainsi des noms qui lui parlent, ce n'est pas du code incompréhensible qu'il doit manipuler.

Figure 24 : Etape 2, diagramme de classe

Ensuite vient le point de vue comportemental via le diagramme de séquences, qui permet à l'utilisateur d'avoir une représentation graphique des interactions entre les acteurs et le système selon un ordre chronologique.

Figure 25 : Etape 3, diagramme de séquence

Par le biais de ces trois étapes, nous avons fait le strict minimum niveau modélisation pour pouvoir générer du code. Cela se fait par un simple clic :

Figure 26 : Etape 4, générer du code via la modélisation

Nous avons même plusieurs choix de langage concernant la génération. Nous nous en tiendrons au Java. Vous pouvez voir un exemple de génération de code en Annexe 3 concernant la partie Utilisateurs de l'application. Seulement nous pouvons voir sur cette annexe, qu'avec cette technique, le corps des méthodes reste vide. Pour cela, il y a deux solutions : soit spécifier le corps des opérations avec les activités et actions UML 2.0 soit associer des notes aux opérations contenant le code des opérations.

Figure 27 : Un exemple de notes.

L'association de notes nécessitent des connaissances en programmation, nous ne l'expliquerons pas davantage.

L'idée, avec le diagramme d'activité c'est de pouvoir en faire pour chaque opération du diagramme de séquence. Ainsi chaque action du diagramme de séquence saura quand se déclencher et quand s'arrêter. Le tout pourra être ainsi interprété par le générateur de code et être retranscrit.

Beaucoup d'outils UML permettent la génération de code tels que :


· EclipseUML


· JDeveloper


· MagicDraw UML


· ModelSphere


· Objecteering


· PowerAMC


· QDesigner


· Visual Paradigm


· Visual UML

Ces outils permettent la création de langage de modélisation et de suite outillée dans leur environnement respectif (Eclipse par exemple). Ils permettent de créer des modèles et des méta-modèles, générer des bibliothèques permettant la manipulation de modèles. Tout ceci grâce à des facilités dédiées (transformation, éditeur graphique, vérificateur de contraintes, ...).

Exemple d'un projet avec DSML (Domain Specific Modeling Language)

Dans le projet DSML nous allons ici traiter le cas d'une application dans le domaine de la téléphonie mobile. Le projet est de faire une application pour s'enregistrer à une conférence depuis son téléphone portable.
Nous sommes ici dans un domaine métier propre. Il est délimité, ce qui sous entend qu'on a un grand besoin de productivité, d'où l'utilisation du DSML. Si on doit faire une similitude avec UML, on peut dire que le DSML s'apparente à un diagramme d'activité enrichi. Tout projet DSML commence par un noeud initial, chaque étape est modélisée sous une forme graphique compréhensible. Pour chacune d'elle il y a aussi la possibilité de donner l'étape suivante en fonction du choix de l'utilisateur. Pour mettre un terme à une suite d'instructions on met un noeud final qui va marquer la fin de l'activité en cours.

Figure 28 : Exemple d'un projet avec un DSML

Dans un projet avec DSML les modèles sont accessibles et sont faits par des experts métier et pas forcément des développeurs/analystes. En effet, c'est un langage avec peu de concepts, tout est graphique et donc beaucoup plus compréhensible. Le niveau d'abstraction est meilleur, donc il y a une utilisation de concepts propres au domaine de modélisation.

Les générateurs de code intègrent directement les librairies du Framework/plateforme d'exécution. Ainsi on a 100% du code généré avec peu de maintenance à faire car tout le savoir-faire est dans les générateurs.

L'utilisation de DSML a conduit à beaucoup de "success stories" telles que :

· Nokia qui est de 300% à 1000% plus productif. David Narraway, chef de projet chez Nokia "UML and other methods and technologies say nothing about mobile phones. We are looking for more".

· US Air Force 300% plus productif

· Alcatel Lucent plus de 300% plus productif, et a développé plusieurs DSMLs pour leurs clients.

Figure 29 : Retombées économique, Source MetaCase 2009

Nous avons avec les DSML un time-to-market plus court, un feedback plus rapide avec les clients, une réduction des coûts (si répétition + plusieurs variantes). Le nombre de participants au projet devient potentiellement plus grand donc une réduction des coûts de formation. David Narraway "Nokia case showed that the domain knowledge contained in the modeling language produced faster learning curve for new employees or transferred personnel. Before, a new developer becomes productive after 6 months. 2 weeks with the DSML".

B. La génération d'interfaces graphiques

Comme nous l'avons vu dans l'état de l'art il existe de nombreux éditeurs graphiques se basant sur le drag and drop (glisser et déposer). Le principe est très simple : nous avons à disposition une palette qui liste l'ensemble des représentations graphiques, on choisit l'élément que l'on veut mettre dans la fenêtre de conception. Pour cela il suffit de sélectionner l'élément, maintenir enfoncer la souris et le glisser dans la partie conception. Ainsi nous avons un rendu visuel, et le code associé généré automatiquement.

Figure 30 : La palette

Pour montrer la simplicité de la manipulation, nous allons créer une fenêtre de Test. Cette fenêtre demandera notre âge, proposera un champ pour entrer notre réponse et un bouton pour la valider.

Nous avons donc trois champs à mettre en place : la question, le champ de réponse et le bouton de validation. La question est matérialisée par un Label, le champ de réponse par un TextFiel et le bouton de validation par un Button. Il suffit simplement de choisir ces trois éléments et de les glisser sur la fenêtre de conception.

Il est donc très accessible et très simple de pouvoir créer une IHM pour un logiciel, sans avoir aucune connaissance en programmation.

Figure 31 : Un exemple de conception en drag and drop

Figure 32 : Résultat lorsque l'on exécute le programme

2. Les sites web

Comme nous l'avons vu dans l'état de l'art, nous avons plusieurs moyens de créer des sites web en n'ayant aucune connaissance en programmation. Nous avons deux grands types de conception : par CMS pour faire de la gestion de contenu ou par des éditeurs de sites qui vont nous permettre de créer n'importe quel type de site. Nous avons parlé également de sites e-commerce, de blogs, de wikis, etc. Je n'en parlerai volontairement pas dans cette partie car les processus de conception se rapprochent grandement de ce qui se fait soit pour les CMS soit pour les éditeurs de sites.

A. Le CMS (Content Management System, Système de Gestion de Contenu)

Le but d'un CMS est de proposer à l'utilisateur de pouvoir modifier le contenant et le contenu d'un site Internet sans avoir de connaissances techniques complexes (HTML, FTP, PHP, etc.). Un CMS va apporter à l'utilisateur une autonomie, même s'il n'est pas familiarisé avec la technique. Il va pouvoir également faire de la maintenance et faire vivre son site.

Un CMS est composé de deux parties : le front office et le back office.

Concernant la partie front office, le but est d'utiliser simplement des styles centralisés (couleurs, polices, attributs, etc) afin de pouvoir modifier à un seul endroit l'aspect général de toutes les pages de l'application.

Figure 33 : Un exemple d'utilisation du CMS

Concernant la partie back office (partie étant réservée à l'utilisateur de manière sécurisée), elle permet la modification ou la création d'une page en saisissant son contenu et en affectant les styles aux différents blocs de textes (paragraphes, mots...) qui composent la page. Cette action se fait via un outil similaire à un traitement de texte, il suffit donc de savoir écrire avec un clavier. Il faut simplement enregistrer la manipulation et le changement apparait en ligne.

Figure 34 : La partie administration du CMS

Le CMS est une solution qui permet de gérer de manière autonome son site sans aucune connaissance en développement web. Cependant certains CMS ne gèrent que des pages statiques, il a donc fallu que les CMS intègrent des possibilités de liberté, pour l'utilisateur, presque infinie tant sur le côté contenu que contenant.

Pour avoir du contenu dynamique il faut donc une base de données. Une base de données est le coeur de toute application (internet ou pas).

Figure 35 : Un exemple de ce qui est stocké dans la base de données

Les CMS mettent à disposition de l'utilisateur des pages d'édition permettant de gérer le contenu des tables de la base de données en modification/création et suppression. La saisie se fait directement dans l'interface du site.

Le véritable backoffice d'une application internet consiste à mettre à disposition de l'administrateur, des pages d'édition permettant de gérer le contenu de leurs bases de données (tables) en modification, création, suppression, etc. Ce qui est généralement proposé permet la saisie directement dans l'interface du site.

Figure 36 : Saisie directement dans l'interface

Concernant le contenant (configuration libre de l'affichage, avec un gabarit dynamique, des styles dynamiques, des menus dynamiques), la personnalisation va nous permettre d'affecter de nombreux éléments comme le gabarit général des pages, les styles de l'application, ainsi que les contenus latéraux, ou encore la barre supérieure de liens vers les pages principales.

"Avec Joomla, il y une grande possibilité de création où les articles sont faciles à mettre en pages. Le petit plus de l'aide en ligne est vraiment appréciable pour une débutante". Noémie VIANA, lors de la création d'un site internet dans le cadre de ses études.

B. Les éditeurs de sites

Beaucoup de solutions online, ou pas, existent sur le marché qui permettent de réaliser des sites sans coder une seule ligne de code. Le principe est très proche des CMS mais en beaucoup plus intuitif. Parmi les sites on peut citer Wix, Weebly, Synthasite, Google Sites, Sprout ou encore One And One. Ces éditeurs de sites permettent de créer de manière très simple des sites internet très sophistiqués. L'intégration de contenu y est très bien pensée. De la page web au widget en passant par l'en-tête d'un site, ils permettent, entre autres de mettre du flash un peu partout.

Ces éditeurs peuvent être très utiles, surtout pour les auto-entrepreneurs qui souhaitent montrer la vitrine de leurs prestations mais qui n'ont pas forcément la connaissance pour faire du développement web ou même les moyens de faire appel aux services d'un développeur. Pour ces personnes, ce sont d'excellents outils pour pallier à ce problème.

Suivant les éditeurs on trouve souvent deux possibilités de conception de site : soit en choisissant un modèle vierge, soit en choisissant un modèle préexistant (qui en général sont faits en fonction d'un secteur d'activité, d'un thème,..). Ils disposent le plus souvent d'un éditeur drag and drop intuitif où ont lieu toutes les créations, que ce soit pour le texte, les photos, les cartes ou même encore les vidéos.

"Ce qui m'a plu avec ce genre de site c'est la gratuité, la facilité de prise en main, lorsque l'on souhaite cependant prendre le temps de s'y consacrer. Il y a la possibilité de prendre un modèle si l'on ne veut pas y consacrer trop de temps ou d'énergie, ou par manque de confiance en soi dans le domaine informatique. Mais aussi le choix de créer un site du début à la fin." Tommy ZIELINSKI, fondateur d' HAJIME FORMATION qui a créé son site avec wix.fr : http ://www.hajimeformation.com.

Boutons d'édition

Figure 37 : Un exemple d'éditeur de site avec des boutons d'édition

On peut glisser et déposer les différents item sur la page du site

Figure 38 : Un exemple de plateforme online avec du drag and drop

4. La simplicité d'utilisation d'une base de données

Comme nous l'avons vu dans l'état de l'art le nombre de logiciel proposant un SGBD est conséquent. Beaucoup d'entre eux proposent de créer des bases de données de la plus simple des manières avec des interfaces intuitives et très pratiques pour les débutants.

Figure 39 : Une des nombreuse interface des SGBD

On peut ainsi créer une base très facilement en lui donnant le nom que l'on veut.

Il y a 2 endroits importants, signalés par des numéros sur la capture d'écran :

1. Liste des bases : c'est la liste des bases de données. Le nombre entre parenthèses, c'est le nombre de tables qu'il y a dans la base.

Sur la capture d'écran ci-dessus, il y a donc 2 bases : information_schema, qui contient 28 tables, et mysql, qui contient 23 tables.

2. Créer une base : pour créer une nouvelle base de données, il faut rentrer un nom dans le champ du formulaire et cliquer sur "Créer".

Nous allons ainsi créer une base Test pour la suite de la démonstration. Pour toutes créations/modifications/suppressions le code SQL apparaît, cela peut permettre aux débutants de commencer à apprendre le SQL, et aux plus avertis de voir certaines erreurs de syntaxes lorsqu'ils programment.

Figure 40 : Le code SQL lorsque la table a été créée

Ainsi nous avons notre base, mais elle est dépourvue de tables. C'est ce que nous allons faire. Les créations de tables sont tout aussi simples que la création de bases. En général, il suffit de cliquer sur le nom de la base afin de se placer à l'intérieur, et la plupart du temps il est mentionné "Create Table" ou " Créer une nouvelle table sur la base XXX" (ici Test). Suivant les SGBD, la création de table peut se faire en plusieurs étapes : nom de la table, et renseignement du nombre de colonnes et ensuite spécification de chaque colonne, alors que d'autres peuvent tout proposer en même temps.

Figure 41 : Création d'une table

Figure 42 : Spécification des colonnes

Nous avons ainsi créé une table aussi simplement que possible sans écrire une seule ligne de code.

Désormais nous avons notre base et notre table, mais sans donnée cela ne sert à rien. De manière analogue à la création de table, il faut sélectionner la bonne base, ainsi que la table dans laquelle nous souhaitons insérer les données. En général, il est mentionné "create data" ou "insérer". Ainsi le logiciel va proposer les différents champs de la table à remplir.

Figure 43 : Remplissage des champs de la table.

On peut ainsi le faire plusieurs fois de suite, afin d'avoir plusieurs données dans la table.

Dans cette table, le petit crayon et la croix, suivant les SGBD, sont des items plus ou moins identiques : Le crayon va permettre de modifier la ligne correspondante en identifiant les informations à modifier. C'est la même interface qu'en Figure 43 et les changements peuvent être faits très facilement ; La croix va quant à elle permettre de supprimer un enregistrement d'un simple clic.

Une notation analogue est disponible pour les modifications et suppressions de table.

Autant dire que la gestion d'une base de données est à la portée de n'importe quel individu.

IV. Nous ne pouvons pas tous être développeurs

1. Le logiciel

A. Le MDA présente ses faiblesses

A. La question sur les outils

Pour rappel le but du MDA est de générer presque automatiquement les modèles PSM depuis les PIM. Mais tout cela n'est possible que pour quelques rares environnements techniques. En effet, le problème est que la technologie sous-jacente change très rapidement et le temps que les mappages automatiques se soient mis en place pour une plate-forme donnée, la technologie aura changée. De plus, pour que tout le monde y ait accès, la démarche MDA devrait être adaptée à plusieurs plates-formes, or ce n'est pas le cas. Ainsi, un utilisateur qui acquière un outil MDA se limite à travailler sur certaines plates-formes, donc il n'y aurait pas de plates-formes hétérogènes.

Chaque éditeur respecte le MDA à sa manière à l'instar de CORBA 6(*). CORBA est une norme très complète pour les architectures distribuées, cependant les outils supportant CORBA ne l'étaient pas autant. Du coup les éditeurs implémentaient leur propre vision de CORBA, et ainsi les différents ORB7(*) fonctionnaient mal ensemble. Ainsi ce scénario pourrait se répéter avec le MDA. Les outils seront différents et le passage d'un modèle d'un outil à un autre pourrait être délicat malgré le XMI. Par le passé, les stratégies d'intégration d'outils ont énormément échoué, il est donc fort possible que ça se reproduise avec le MDA.

B. Le MDA est trop compliqué

Une vision erronée du MDA est que les développeurs ont des compétences en modélisation. En effet, les développeurs créent rarement des diagrammes UML, ne sachant pas forcément à quoi correspondent les treize diagrammes UML.

Une approche par les modèles ne permet qu'à peu de personnes d'avoir les compétences pour modéliser complètement les systèmes. Le MDA nécessite forcément l'implication de professionnels de la modélisation, mais ces personnes sont rares dans les petites structures et chez les industriels. Du coup on peut vite faire le raccourci : MDA est seulement une approche destinée aux grands projets. Cette remarque peut nous faire penser aux similitudes qu'il y a eu avec CORBA, cette norme qui était très compliquée à mettre en place, la répartition des implémentations CORBA a diminué au profit de procédés plus aisés tels que .net ou J2EE.

C. La distinction des modèles

Le MDA différencie les objets de la plate-forme à laquelle ils sont rattachés de ceux qui en sont indépendants. Cependant cette indépendance ne reste qu'un objectif. Derrière ce concept se cache une vérité bien plus complexe. On peut se demander où se trouve la limites entre les modèles ? L'OMG n'a pas donné de définition du terme plate-forme, ainsi la limite qui sépare les modèles PIM et PSM n'est pas franche tant que la définition n'est pas spécifiée. Pour le moment, comme nous l'avons vu dans l'état de l'art, la seule définition c'est qu'un PIM n'est pas un PSM, même si l'idée de PDM aide à affiner cette définition. Cependant, bien que CIM soit apparue, l'objectif reste quand même, au travers de mise en oeuvre (en cas de logique métier conservée), d'identifier ce qui est stable. Les progrès du MDA ne permettent pas à tout le monde de l'utiliser car son utilisation est très souvent destinée à la recherche et aux sociétés impliquées dans la définition de cette norme

B. Le DSML et ses limites

Bien que les DSML offrent des gains en terme de sûreté et d'expressivité, leur développement n'est pas si aisé. Leur implémentation exige une forte connaissance du domaine auquel ils appartiennent mais également une expertise dans le développement de langage. Avoir cette double compétence est très rare. Développer un DMSL est donc souvent mis de côté dans les entreprises et les projets de développement de DSML restent souvent à l'étape d'une librairie. De manières analogues, il existe d'autres entraves à l'utilisation de DSML comme le coût de développement, la définition du domaine et les propriétés du langage.

A. Coût de développement

Prouver la rentabilité d'un développement DSML est difficile, car il faudrait pouvoir comparer le travail réalisé avec un langage généraliste et cela peut vite être très onéreux. (Herndon & Berzins, 1988), (Batory, Thomas, & Sirkin, 1994), (Gray & Karsai., 2003) ont montré que les DSML généraient quand même des bénéfices mais que ceci restaient très difficile à démontrer.

B. Problèmes liés au domaine

Comme nous l'avons vu, la définition d'un DSML n'est pas simple. En faisant une analogie avec les DSL7(*) et plus particulièrement COBOL8(*) (dont certains pensent qu'il est fait pour les applications commerciales alors que d'autres pensent qu'il rend flou la notion de domaine d'application), il apparaît ainsi que la particularité du domaine est simplement une question de degré. (Van Deursen, Klint & Visser, 2000) montrent que l'ambiguïté des DSML provient de l'imprécision de la définition des domaines. Certains définissent les DSML comme un ensemble de systèmes, ce qui sous entend qu'un domaine est réduit aux programmes qu'il contient. Cette idée est très réductrice car les intervenants et leurs besoins peuvent entrer dans la définition des domaines.

(Wile, 2004) a fait une étude sur l'introduction des DSML sur une communauté d'utilisateurs. En se basant sur des réalisations concrètes il démontre trois types de soucis dans la conception, le développement et l'adoption du DSML : technologique, organisationnel et social. Le rôle organisationnel des personnes qui utiliseront ce langage apparait très important tout comme leur expérience. En effet, ces deux points participent à la définition du domaine et a donc une incidence sur la conception du langage. Et pourtant les utilisateurs sont souvent délaissés lorsque l'on parle de DSML. Le langage et les besoins de l'entreprise sont donc en inadéquation, et il y a donc une difficulté de mise en place de cette approche dans le processus de développement.

Parfois, il peut être avantageux d'avoir différents DSML pour différents utilisateurs (un pour les novices et un pour les experts par exemple) pour spécifier un aspect isolé de l'application. Cette orientation pose la difficulté centrale de la composition DMSL au sein d'un domaine, qui est aujourd'hui un thème de recherche autour des DSML.

C. Propriétés du langage

Une autre source de problème est le langage lui-même, surtout en cas de maintenance de d'évolutivité du langage. (Van Deursen & Klint, Little Languages : Little Maintenance, 1998) considèrent que l'évolutivité du langage et la maintenance sont des points faibles de l'approche DSML. Concernant l'évolutivité du langage, on peut avoir, par exemple, une nouvelle fonction ou un nouveau type de donnée. Pour avoir cela il faudrait donc adapter le compilateur et c'est une compétence qui peut ne pas être présente au sein d'une entreprise ou d'un particulier.

Mais le point le plus important contre l'utilisation des DSML est l'effet "Tour de Babel". Quand les développeurs programment leurs propres langages, la confusion est très vite totale. La solution pourrait être de développer de nouveaux langages pour tous les domaines, mais cette idée poserait vite des problèmes d'interopérabilité et de réutilisation d'infrastructures et/ou d'outils.

C. L'UML

A. Les limites

L'UML est devenu très complexe et trop large car on ne veut pas tout utiliser dans UML (notamment les diagrammes) et parce que les liens entre les vues ne sont pas toujours évidentes. En utilisant l'UML on utilise un concept qui est proche de la technologie d'implémentation (i.e. OO avec classes, interfaces, héritages, etc) alors qu'avec les DMSL on est déjà plus proche du domaine métier (i.e. Formulaire, Client, connecteur, communication, message, etc.). Par définition, un non initié sera plus à l'aise sur un sujet qu'il désire travailler ou qu'il "maitrise" plutôt que de travailler sur un outil qui dépend d'une technologie d'implémentation. De plus, avec l'UML il est vraiment très difficile d'atteindre les 100% de code généré à partir des modèles UML. Il y a un peu une relation de causes à effets avec le fait qu'UML n'arrive pas à s'imposer.

B. L'UML peine à s'imposer

Aujourd'hui l'enthousiasme qu'a suscité UML à son commencement s'est vite heurté aux réalités industrielles. Due notamment aux rachats des principaux offreurs d'outils UML par IBM. Cela a conduit à en réduire considérablement le nombre, et a fait d'IBM le principal fournisseur d'outils UML. Malgré cela on trouve quand même d'autres fournisseurs comme Atego (suite d'outils Artisan) ou encore No Magic (outils simples et complets), mais qui restent des "poids plumes" comparés au géant.

Un autre signe de faiblesse d'UML est qu'il existe très peu de grands projets open source susceptibles de rassembler une très grande communauté de développeurs autour d'UML comme avec GNU par exemple. Bien sûr comme nous l'avons vu dans l'état de l'art, il existe plusieurs outils UML open source, mais la majorité d'entre eux sont de simples modeleurs graphiques qui ne proposent pas tous les diagrammes UML du standard. Malgré tout on peut quand même citer le projet Papyrus dont le but est de proposer un outil industriel complet de MBE (Model Based Engineering), avec Eclipse, avec une notion de modèles qui est centrale, respectant le standard UML.

C. Ce n'est pas innée

Navigabilité mono directionnelle

Héritage

Comme nous l'avons vu dans la Partie 1, pouvoir générer du code grâce aux diagrammes UML, nécessite un processus à suivre. La première action à faire, après la lecture d'un cahier des charges, c'est d'élaborer les cas d'utilisation et par la suite le diagramme de classe. Bien qu'il ne soit pas facile d'élaborer un diagramme d'utilisation on peut quand même concevoir que sa conception soit à la portée de tout le monde. En revanche la conception d'un diagramme de classes est d'une tout autre nature. En effet, un diagramme de classes est composé de plusieurs items. Il est composé de classes, et une classe se définit par son nom, ses attributs et ses méthodes. Demander à quelqu'un de concevoir les attributs et les méthodes d'une classe, c'est comme si on lui parlait une langue inconnue. De plus, pour faire un diagramme de classes, il faut mettre des relations entre les classes Comment expliquer à un non initié que les deux flèches suivantes ne veulent pas dire la même chose, et que les différencier est ô combien important ?

Ces deux flèches ne sont qu'une petite partie de la subtilité que pose la navigabilité dans les diagrammes de classes.

Mais admettons qu'un utilisateur de base arrive à se dépatouiller comment faire un diagramme de classes cohérent et robuste Il n'aura dans ce cas que le corps des méthodes, et il lui faut continuer avec un diagramme de séquences et d'activités. Dans ces deux diagrammes, en plus des symboles qu'il faut connaitre et qui sont aussi subtiles que les relations des diagrammes de classes, il faut avoir des connaissances sur la boucle if-then-else pour pouvoir différencier et pouvoir traiter les différents cas possibles Il faut donc des connaissances sur les réactions du système, d'où des connaissances en informatique solides. On ne peut pas faire de l'UML dans le but de générer du code pour une application robuste sans connaissance en informatique. Et même pour un développeur, une formation en modélisation est primordiale pour pouvoir assimiler les diagrammes, les symboles et toutes les subtilités que la modélisation présente.

D. Les éditeurs graphiques WYSIWYG et leurs limites

Bien que l'approche WYSIWYG soit séduisante, simple et agréable pour l'utilisateur de base qui l'utilise, elle présente quand même certaines faiblesses.

· Le WYSIWIG est destiné à un et un seul support majeur (une seule mise en forme).

· Tout est "vu" avec le WYSIWYG, on a un seul contenu monolithique : il n'est pas possible de faire un contenu dynamique en fonction des options que l'on peut choisir sur l'interface. Comme la traduction du WYSIWYG le désigne ("ce que tu vois c'est ce que tu obtiens"), on a un contenu statique.

· Dans les interfaces graphiques, on doit souvent mettre des informations non publiées telles que des commentaires, des méta données, etc. Ceci est très difficile à faire avec un éditeur graphique malgré certaines solutions mais qui restent très limitées, peu ergonomiques et destinées à des usages prédéfinis (fenêtres de propriétés, bulle de commentaires, etc).

· Le WYSIWYG favorise le résultat final de la partie graphique, on privilégie donc la forme plutôt que la structuration du contenu.

· Avec les éditeurs graphiques, l'utilisateur va s'occuper de la forme pour avoir un résultat final plaisant. Cependant, on connait la surcharge cognitive et la perte de temps que cela entraine, il faudrait donc un WYSIWYG pauvre mais du coup il n'aurait pas la même finalité pour avoir un rendu ergonomique.

· Bien que parfois les éditeurs soient lents, ils ne pénalisent pas pour autant le développement. Dans ces éditeurs il manque souvent quelques objets graphiques, et quand bien même ils sont présents toutes les caractéristiques d'un objet ne s'affichent pas forcément. Il est donc nécessaire de faire des modifications dans le code.

· Si on reprend notre exemple de la partie 1 (l'IHM qui nous demande notre âge), on a une interface simple qui a mis en forme ce qu'on lui demandait, mais il y a aucun traitement de l'information. Que se passe-t-il lorsqu'on appuie sur le bouton valider ? Si on rentre une chaine de caractères, que se passe-t'il? Ce sont des problèmes qu'un éditeur graphique ne peut pas gérer. Pour régler ces problématiques il faut avoir des connaissances en programmation et aller coder les différents évènements nécessaires aux endroits adéquats.

· Quand j'ai voulu reprendre un projet existant utilisant des IHM, il m'est souvent arrivé, lorsque je lançais l'éditeur graphique, que ce dernier ne reconnaisse pas les objets et affiche une erreur. C'est aussi une limite avec les éditeurs graphiques : dès que l'on passe d'un éditeur à l'autre les formes ne sont pas forcements reconnues.

En conclusion, l'éditeur graphique WYSIWYG peut permettre à n'importe qui de faire de jolies fenêtres, ergonomiques, etc. Mais s'il faut le rendre fonctionnel, il est impératif d'avoir des connaissances en programmation dans le langage dédié, sinon la fenêtre ne restera qu'une fenêtre inexploitable. L'éditeur graphique WYSIWYG est en revanche très utile pour les développeurs désirant gagner du temps à coder une IHM sans faire un travail rébarbatif.

2. Les sites web

A. Les limites des CMS

A. Les limites posées par l'hébergeur

Si on veut utiliser un CMS pour gérer un site web il faut être vigilant sur l'hébergeur. En effet, beaucoup d'hébergeurs ne tolèrent pas les scripts PHP qui sont utiles au fonctionnement des CMS (SPIP chez Free).

B. Pas de catalogue de bibliothèque chez les CMS

Les CMS ne savent pas gérer un catalogue de bibliothèque en ligne. Même si certains modules permettent aux CMS de gérer un annuaire de sites, les catalogues ne peuvent être réalisés avec un CMS.

C. Connaissances et assistance technique

Si nous n'avons aucune connaissance en programmation et graphisme, la modification des graphismes, templates, modèles ou encore squelette ne peut être possible sur le CMS. Le site ainsi obtenu n'est pas personnalisé et laissé à l'affichage par défaut. Les CMS sont très proches les uns des autres (en se présentant généralement sous trois colonnes) ce qui paradoxalement rend la prise en main difficile.

D. Longévité d'un CMS et taille de la communauté

C'est le succès et la taille des communautés utilisatrices d'open source qui conditionnent la longévité d'un CMS.

E. Compétence

La majorité des critiques que l'on peut faire envers les CMS sont généralement dues à une absence de compétences dans le domaine technique au sein d'une entreprise qui choisit d'administrer son site par un CMS. Par exemple, les termes workflow ou templates ne sont pas des mots du quotidien mais ils doivent être maîtrisés avec le CMS. De plus, avec un CMS, il faut définir quels sont les objectifs de communication que l'on veut mettre en place sur le site, et déterminer les rôles des responsables des sites.

B. Les faiblesses des éditeurs de site web

Avec ces éditeurs, ces sites sont vite limités malgré leur simplicité d'utilisation. De plus, certains rendus ne sont pas très plaisants. Les mises à jour ne sont pas toujours dynamiques et il faut très souvent modifier chaque page manuellement pour modifier le site. La conception de nos sites web reste très limitée et décevante, et comparée à des sites qui sont codés à la main elle reste vraiment très banale.

"Difficulté à associer son nom de domaine. Site web flash, c'est le terme je crois, donc pas facile pour le référencement, et pas facile aussi pour lire sur les tablettes ou smartphones.
Mise en page approximative, ou qui change (décalage de la page vers la droite dans mon cas)."
Tommy ZIELINSKI, fondateur d' HAJIME FORMATION qui a créé son site avec wix.fr. www.hajimeformation.com.

3. La construction d'une base de données nécessite un apprentissage

Bien que nous ayons vu dans la première partie du développement que la création d'une base de données reste assez simple via seulement quelques clics, ce n'est pas le cas s'il faut une base de données robuste, optimisée et sécurisée.

A. Un processus de conception à assimiler

Les bases de données sont organisées en tables composées de colonnes et de lignes. Très souvent, voire quasiment tout le temps, nous avons besoin de plusieurs tables. Par exemple une table pour les produits, une pour les commandes et une autre pour les clients.

A la construction des tables dans le SGBD on peut rencontrer deux types de problèmes :

· Où placer certaines informations? (par exemple une adresse de livraison faut-il la mettre dans la table commande ou dans la table client ?)

· Prévoir des tables de jonctions intermédiaires (une table des interprétations est nécessaire entre la table film et la table acteur).

Il faut donc passer par une étape préalable de conception. Ce processus se décompose ainsi :

· Définir les objectifs de la base de données : cette étape aide à préparer les étapes suivantes.

· Recherche et organisation des informations nécessaires : on réunit tous les types de données que l'on souhaite stocker.

· Répartition des informations dans les tables : on répartit les informations en entités ou sujets. Les sujets seront des tables

· Conversion des éléments en colonnes : choix des informations à stocker dans la table.

· Définition des clés primaires : afin d'identifier de manière unique chaque enregistrement de la table.

· Définition des relations entre les tables : permet de montrer de quelle manière les données d'une table sont reliées à celles d'une autre.

· Affinassions de la structure : pour analyser la conception et faire de la recherche d'erreur

· Application des règles de normalisation : pour vérifier si les tables sont bien structurées, et éventuellement apporter des modifications.

L'étape de conception est donc importante et n'est pas à la portée de tout le monde, cela nécessite donc un apprentissage. Sans connaissance on ne peut pas passer par cette étape qui est vraiment très importante.

B. La sécurité

Après avoir créé sa base de données, on oublie souvent une partie fondamentale qui est la sécurité. Les bases de données sont situées sur des serveurs ce qui implique de faire un requêtage en passant par un réseau. Qui dit réseau dit forcément risque.

"Le risque majeur pour les entreprises en termes d'attaque est l'injection de code SQL", rappelle ainsi Jean-Paul Ballerini, expert technique pour IBM ISS.

"Ce peut aussi être un moyen, en maitrisant le SGBD, de prendre la main sur le système d'exploitation et de créer des comptes avec des droits administrateur afin de se connecter ensuite directement. Les vulnérabilités ne sont pas seulement au niveau de l'applicatif, mais aussi de l'OS", poursuit-il. Il faut donc qu'une base de données soit sécurisée, et pour cela il faut :

A. Connaitre son besoin

La sécurité d'une BDD passe par une réflexion sur comment et qui va l'utiliser et par quel moyen de connexion (directement ou pas un applicatif). Il est très important de faire un état des lieux afin de mettre en place la politique de sécurité la plus adaptée.

"La connexion d'un SGBD avec un progiciel, qui nécessite une méthode d'interconnexion spécifique, peut avoir pour effet d'abaisser le niveau de sécurité. Les équipes sécurité et intégration, dont les missions ne sont pas forcément en accord, doivent souvent trouver un accord", Alexis Caurette, consultant pour Devoteam.

La sécurité ce n'est pas simplement de se prémunir contre d'éventuelles attaques, c'est aussi pouvoir préserver la confidentialité, la sauvegarde, l'auditabilité, la traçabilité et l'intégrité des données. Une politique dépend de ce que l'on veut garantir et dépend de ce que l'on a identifié.

B . Une sécurité en amont

Une BDD est très souvent une partie d'un projet beaucoup plus global. Il faut donc penser que la sécurité doit être faite pour l'ensemble des éléments et surtout s'il y a utilisation d'un applicatif pour accéder à la base. La BDD peut être protégée, mais si l'applicatif est vulnérable, il peut ouvrir des portes et un SGBD ne pourra pas faire de différence entre une connexion qui est légitime et une qui ne l'est pas (un attaque par le biais d'un frontal web par exemple).

C. Supervision

Il faut qu'il y ait un suivi des indicateurs de la BDD pour déceler des anomalies, anticiper une interruption et pouvoir agir rapidement en cas d'anomalie. La plupart des SGBD ont un système de supervision, c'est ensuite à l'utilisateur de mettre les filtres nécessaires.

D. Sensibiliser les DBA (DataBase Administrator, administrateur de la base de données)

La performance ne doit pas être le seul souci du DBA, il faut aussi qu'il soit sensible à la sécurité, aux risques et à la criticité des contenus. En effet, un DBA peut être amené à surveiller plusieurs bases en même temps et pourrait ne pas avoir les bons réflexes.

E. Durcir le socle système

Une BDD repose sur une couche système. Il faut donc durcir fortement la politique de sécurité de la couche système. En effet, une BDD ne pourra pas se défendre contre un individu qui aurait des droits administrateur sur un OS. Le durcissement consiste en une limitation des services(qu'il soit réseau ou système), la segmentation des droits de chacun, l'application d'une politique de privilèges et faire une authentification avec des mots de passe.

F. Renforcer la couche BDD

De manière analogue au système, les correctifs qui servent pour la sécurité doivent être mis en place pour les BDD.

"Les éditeurs ont fait des progrès très significatifs dans ce domaine. Il y a encore 4 ans, avec une configuration par défaut, le niveau de sécurité était faible avec l'ouverture de nombreux services et une authentification minimale. Entre Oracle 8 et 9, puis entre les versions 9 et 10, il y a un véritable fossé en termes de sécurité", commente Alexis Caurette.

G. Gestion des comptes

Avec les comptes, la politique du privilège doit être appliquée : si un utilisateur a uniquement besoin de consulter des données, il ne doit pas avoir des droits en écriture sur la base.

H. Méthodes d'accès

Une entrée sur la BDD doit être autorisée selon certaines méthodes. C'est ici que le filtrage se fait. Par exemple, si une connexion se produit depuis un site web, alors seulement le DBA et l'application pourront accéder à la base. Par contre, ce filtrage se complexifie si on intègre la base avec un PGI (Progiciel de Gestion Intégré) ou un client lourd présent sur plusieurs postes. Après le filtrage il y a l'intervention des gestions de profils, des gestions des utilisateurs et de la gestion d'évolution des droits. On dresse ainsi une cartographie des données et des habilitations afin de pouvoir définir les populations accédant à la BDD et de pouvoir définir aussi quelles parties sont autorisées à accéder.

I. Chiffrer les flux de données

Les réponses aux requêtes doivent être cryptées lorsqu'elles circulent sur le réseau. Pour cela il faut écouter le trafic réseau, les flux seront cryptés entre la base et les composants.

La sécurité des bases de données est très importante et consistante. Une connaissance accrue en sécurité et réseau est donc importante, ce qui n'est pas accessible à tous et nécessite donc un apprentissage. Sans connaissance, on ne peut pas passer par cette étape qui est vraiment très importante.

C. Un vocabulaire à connaitre et un apprentissage à faire

La conception d'une BDD va nécessiter au préalable la conception d'un MCD9(*). Pour faire une analogie avec l'UML, c'est comme un diagramme de classes mais qui représente les tables de la base. Donc d'une manière analogue à l'UML, cette modélisation n'est pas innée, il faut tout un apprentissage car la conception d'un MCD n'est pas du tout intuitive. Un MCD fait intervenir énormément de vocabulaire technique qui est très important dans la conception d'une base de données. Un exemple : il est indispensable d'avoir dans une base de données la clef primaire10(*), et très peu de personnes non initiées à la conception des BDD, pourraient en donner la définition. On pourrait également citer les clefs étrangères11(*) quasiment toutes aussi importantes pour la structure de la base et dont un non initié ignorerait l'existence en cas de conception. Mais aussi, un peu comme avec UML, les relations entre les tables, les cardinalités, les identifiants, etc.

Bien qu'il existe des SGBD intuitifs et faciles d'utilisation, ils permettront seulement de créer de simples tables à priori qui n'auraient pas de relations entre elles alors qu'elles le devraient. Si on désire concevoir une base de données robuste et sécurisée, il est indispensable d'avoir des connaissances techniques dans la gestion des BDD.

V. Et Demain?

1. Des développeurs basiques?

Nous avons vu que pour créer une application robuste, viable, pérenne et sécurisée il faut une bonne connaissance métier et un apprentissage sur certaines bases (voire plus) de la programmation. Il faut également que le programme soit de qualité avec une complémentarité des fonctionnalités, une précision des résultats, fiable, minimisant les pannes, facilité et flexibilité de son utilisation (cette liste est bien sur non exhaustive). Cependant, pour faire des créations d'applications, de sites web, de bases de données, d'interfaces graphiques simplistes c'est à ce jour, à la portée de n'importe quel individu. Il peut à sa guise faire son programme par l'intermédiaire de diagrammes, faire son site par l'intermédiaire de différentes applications, sa base de données en seulement quelques clics et son interface à coup de glisser-déposer. Si on entend alors développeur dans son sens le plus simpliste du terme alors oui demain nous serons tous développeurs, et nous pouvons même dire que c'est déjà le cas.

Mais le ferons-nous vraiment tous ? C'est pour cela que j'ai décidé d'aller un peu plus loin dans l'analyse.

2. Tous développeurs Web?

Aujourd'hui chacun de nous peut être développeur web dans le sens où, en passant par des CMS et des plate-formes online, les sites peuvent se faire via de simples glisser-déposer sur une fenêtre d'édition ou de simples clics de souris. La possibilité de créer un site web sans aucune connaissance en programmation est déjà aujourd'hui d'une très grande facilité, malgré l'existence de certaines limites que nous avons pu voir dans la deuxième partie de ce mémoire. Mais vu le développement du web depuis le début des années 2000, on peut se demander si le sens de développeur aura un autre sens demain.

A. Des nouveaux développeurs Web

Un tournant dans l'histoire du web a été marqué en 2001 avec l'explosion de la bulle internet. Les gens pensaient à ce moment là que le web était une technologie surévaluée alors qu'en fait non. De plus, l'histoire a montré que lorsqu'une bulle se forme et éclate par la suite cela annonce une révolution industrielle. Cela se caractérise même au moment où une technologie en pleine expansion est prête à entrer dans une nouvelle phase. C'est aussi à ce moment, que les prétendants arrivent à bout de souffle alors que les points forts de la technologie en question pointent le bout de leur nez, et c'est à partir de ce moment que l'on commence à voir ce qui distingue l'un de l'autre. C'est ce qui s'est passé pour le web.

Le concept de "web 2.0" a vu le jour lors d'un brainstorming entre O'Reilly et Medialive International. C'est Dale Dougherty (membre d'O'Reilly et pionner du web) qui a noté que le web n'avait jamais eu aussi d'importance car il apparaissait de nouveaux sites et de nouvelles applications avec des innovations sans précédentes de manière très régulière.

Figure 44 : Evolution du nombre de site consultable depuis 1995

A la fin de ce brainstorming on a différencié les sites et services dits "web 1.0" de ceux du "web 2.0". Par exemple, les sites personnels sont devenus les blogs et un équivalent de mp3.com est Napster. La différence ne s'est pas non plus arrêtée aux simples sites mais aussi aux grandes familles de services liées au web. Par exemple la spéculation des noms de domaines a laissé place au référencement, les systèmes de gestion de contenu au wiki (popularisé par Wikipédia), etc.

Le concept de web 2.0 concerne deux aspects : l'un technique et l'autre orienté vers la communication et le partage :

· Au niveau technique cela correspond aux interfaces enrichies avec notamment AJAX, Flash, etc, afin d'avoir une interface simple à utiliser et ergonomique.

· Au niveau communication cela correspond aux partages et à la diffusion d'information via les portails communautaires, les blogs, RSS, etc. Avec le Web 2.0 on a une volonté de mettre l'utilisateur au coeur du processus pour qu'ils devienne acteur.

Le web 2.0 utilise des technologies existantes et sûres, ce n'est donc pas une révolution en soi mais plutôt une succession d'évolutions :

· Structure de l'information des données à valeur ajoutée : Désormais nous pouvons relier les informations, partager ou agréger des services et du contenu, refondre les interfaces,... Tout ceci grâce à un ensemble de technologies comme le web sémantique qui permet à la machine d'assimiler le contenu des pages. Ainsi, de part les espaces collaboratifs, il est possible de personnaliser sa pratique de l'internet et participer, à sa manière, au développement du web.

· Une interactivité toujours plus grande : Avec les nouvelles interfaces des sites, les utilisateurs peuvent avoir accès à de nouvelles fonctionnalités, AJAX notamment va permettre la fluidité des pages (car lors d'une modification il ne va pas recharger la page). Il y a également l'introduction de l'audio et de la vidéo. Le drag and drop devient possible, c'est un peu comme une navigation à la Windows. En somme, le nouveau web devient de plus en plus interactif.

· Interopérabilité : Avec le web 2.0 il y a l'apparition d'architectures plus flexibles. Mais également des protocoles de communication beaucoup plus ouverts (Web Services) avec REST et SOAP. L'interopérabilité est également plus poussée, de même que les interfaces utilisateurs qui sont nettement améliorées (niveau ergonomique et sémantique) et permettent une plus grande souplesse d'utilisation.

· Modularité : Les applications et services que l'on peut trouver sur les différents sites peuvent être recombinés comme l'on désire avec d'autres fonctionnalités pour aboutir à de nouvelles applications ou de nouveaux services : on parle de mashups. Tout ceci est rendu possible grâce aux web services. Les mashups vont ajouter des couches beaucoup plus pratiques et fonctionnelles, ainsi l'utilisateur peut consulter différents services via un portail unique.

· Montée en puissance des applications bureautique en ligne : L'avenir des applications ne sont plus sur les postes utilisateurs mais en ligne. En effet, on se dirige de plus en plus vers des applications online qui pour beaucoup existent déjà aujourd'hui : comme les outils de gestion de projet, suite bureautique, client email, etc. On peut également citer dans ce domaine les deux géants du moment que sont Google Docs de Google et Office Live de Microsoft. On peut même imaginer d'ici quelques années, la fin des applications de bureau au profit des applications accessibles de partout et sur tous les supports, pour avoir plus de mobilité.

· Une mutation perpétuelle de service : Parlons un peu des versions beta. Les versions beta ne sont plus une étape vers une version figée. C'est désormais une version stable d'un service. La mettre en ligne va générer du "buzz" et, il y aura ainsi des beta testeurs, qui vont permettre de faire évoluer le service. Ceci est rendu possible grâce aux comportements des internautes sur cette version beta. C'est ainsi que le service va évoluer petit à petit pour arriver à une version robuste et dans l'attente des internautes.

· Une démarche open source à travers le développement participatif : L'infrastructure du web repose beaucoup sur des méthodes de production individuelle de l'open source. Ces méthodes émanent de l'intelligence collective. On peut dire que les utilisateurs sont, dans ce nouveau web, des co-développeurs.

D'après Wikipédia, nous sommes rentrés dans l'ère du WEB 2.0 en octobre 2004 après la première conférence Web 2.0. Ceci grâce à O'Reilly, Batelle et Dougherty. Ils définissent le web 2.0 de la manière suivante :

"The Web as platform data as the driving force network effects created by an " architecture of participation" innovation in assembly of systems and sites composed by pulling together features from distributed independent developers (a kind of "open source" development) lightweight business models enabled by content and service syndication the end of the software adoption cycle ("the perpetual beta") software above the level of a single device, leveraging the power of " The Long Tail"

Il est de plus très intéressant de noter que (toujours dans le même article Wikipedia) : "An earlier usage of the phrase Web 2.0 was as a synonym for " Semantic Web", and indeed, the two concepts complement each other. The combination of social networking [...] with the development of tag-based folksonomies and delivered through blogs and wikis creates a natural basis for a semantic environment."

Par ailleurs, Scot Mc Nealy, l'ex PDG de SUN, déclare le 24 février 2006, à l'occasion des vingt-quatre ans de la société :

"The biggest industry trend in the IT sector is the move from the Internet world to the participation age [...] With regard to the move away from the "Internet age" to the participation age, in which instant messaging, blogging, e-mail and podcasting are the norm, McNealy said this move was a good and positive thing and would enhance all forms of media.".

Nous pouvons faire quelques commentaires de ces définitions.

La première conférence Web 2.0 a fait apparaître le terme de "architecture of participation". Elle décrit particulièrement le processus de développement open source. Ce terme s'applique également à la création de contenu (licence "creative commons") et pas seulement aux programmes.

Lors de cette conférence est également apparu le terme de « Data-driven». Bien que le terme semble trop technique, ce n'est pas dans le sens où l'utilisateur manipule la data mais dans le sens où il manipule un contenu. Si l'utilisateur devait manipuler la data il ne pourrait rien en faire et ne "participerait pas". Par exemple, il ne participe pas autour d'une BDD relationnelle de chiffres statistiques, mais il participe autour du contenu décrivant ces données.

Concernant le terme "Semantic Web", il est un peu "surdimensionné". En effet, sémantique signifie sens et qui dit sens dit interprétation. Or, le web est incapable d'interpréter le sens du contenu, c'est bien l'utilisateur qui l'interprète. On peut donc rapprocher sémantic de structuration de données, comme les billets de blog, les flux RSS ou encore les wikis. On pourrait donc parler de Structure Web.

Il y est mentionné également le terme de "participation age" comme les blogs, l'e-mail, les réseaux sociaux, etc. Le nouveau web c'est donc l'âge de la participation et les conséquences atteignent nos activités quotidiennes, nos entreprises et même nos démocraties grâce à l'esprit participatif de chacun.

Figure 45 : Evolution du nombre d'article de Wikipédia en France

B. Développer c'est partager l'information

Le web 2.0 permet le partage de l'information fondé sur l'ouverture des BDD permettant d'être utilisées par tout le monde. Pour le Web 2.0, on parle de "glocalisation12(*)", on peut partager, créer, trouver et organiser l'information de manière personnelle, et cette information est globalement accessible.

Ce sont ces utilisateurs de base qui créent les contenus (flux RSS, échanges de fichier, portails communautaires, blogs, etc). Le nouvel internaute devient acteur et rédacteur du développement du web.

Avec ces nouvelles formes de partage qui ont vu le jour, il y a l'apparition de création de communautés et de réseaux sociaux. Le web devient partie prenante de la vie d'un citoyen, et plus seulement comme outil de recherche. Les bouleversements sont déjà tous là que ce soit au niveau artistique, économique, communication ou même encore politique.

Figure 46 : Evolution du nombre de compte facebook dans le monde

En 2003, on parlait de web 2.0 pour l'évolution technologique. Il devait faire évoluer Internet, en mettant l'utilisateur final au coeur du processus, afin de lui proposer de nouvelles applications qui lui permettent de personnaliser sa pratique d'Internet. Comme vu plus haut ce sont les flux RSS (afficher sur une même page des informations de sources différentes) et les espaces collaboratifs (Wikipédia, réseaux sociaux) qui sont très en vogue. Avec l'explosion des blogs au milieu des années 2000, ont émergé des internautes qui sont devenus acteurs, spectateurs et commentateurs. Ce n'est pas une démarche commerciale mais bien une démarche de partage d'idées, de documents, etc. Abraham Lincoln disait "Gouvernement du peuple par le peuple et pour le peuple", avec ce nouveau web ça serait "le Web par le peuple, pour le peuple". Mais tout ceci a été possible grâce à l'informatique libre et gratuite. Ainsi la triple casquette des nouveaux utilisateurs web, les rendent capable de créer leur site personnel de manière autonome

C. Du contenu et du flux

On a l'impression d'être revenu aux années 1993-1995 où l'on chattait en IRC, faisait des rencontres, échanges de bons procédés, etc. On avait l'impression que tout cela avait disparu avec le boom commercial d'Internet. Mais les blogs son apparus et ont permis l'émergence d'une nouvelle communauté humaine complètement interactive. Par exemple, on pourrait appeler les réseaux sociaux, des groupes d'intérêts c'est-à-dire des personnes qui ne se seraient jamais rencontrées dans la vraie vie et qui partagent, grâce aux accès faciles à l'information, des intérêts communs.

Nous sommes vraiment donc dans l'ère du contenu, où l'on subit un flux continuel d'informations. Nous structurons même notre vie par rapport à lui, ceci à cause de nos actions tant individuelles que collectives (ces flux provenant d'autres personnes autour de nous), grâce à nos commentaires, un blog, etc. On pourrait parler de collaboration. Mais la collaboration se veut structurée et "travailleuse" (travailler avec d'autres - à une oeuvre commune, Larousse), or avec ces flux d'informations, qui sont énormes, il n'est pas possible d'avoir une collaboration structurée. On est plus dans la participation que la collaboration.

Figure 47 : Augmentation du nombre de blog dans le monde, source Technoraiti

D. Le Web participatif

Comme nous l'avons dit, les nouvelles communautés du Web 2.0 sont apparues avec les blogs, réseaux sociaux et wiki. Désormais, on peut simplement modifier du contenu, commenter, créer des articles, etc. Cette nouvelle démarche fait énormément évoluer les relations entre les individus, où chacun est à la fois acteur, auteur et lecteur. On n'est plus dans un système collaboratif mais bien participatif.

Pour en arriver là beaucoup d'étapes ont été franchies. Les outils, les sites Web, les intranets et même les extranets ont suivi ces évolutions progressivement. On dénombre cinq étapes :

· Publication

· Interaction

· Echange

· Collaboration

· Participation

Ces étapes sont comme des poupées russes, la publication étant la plus petite.

Comme nous l'avons dit plus haut le participatif est non structuré, il est de plus transversal, d'égal à égal et hétérarchique13(*). Ce qui est paradoxal, c'est que les outils collaboratifs et structurés ont eu du mal à s'imposer dans les organisations qui pourtant elles le sont. Peut-être que l'être humain n'aime pas travailler de manière structurée. Cette non structuration entraine un petit "chaos" dans les organisations (le trop plein de fichiers Excel présents sur les réseaux d'entreprises par exemple). On pourrait alors se demander si c'est une situation immuable. Le retour d'expérience du web 2.0 et son adoption en grand nombre par les utilisateurs nous indiquent que non : c'est une évolution inéluctable.

Nous sommes rentrés dans l'ère du web participatif. De part son usage il modifie les relations de groupes et, qui sait peut-être plus tard, il finira par bousculer les relations hiérarchiques dans notre société. On pourra peut-être voir l'émergence des forces vives et créatrices de chacun.

Nous en sommes peut-être à l'étape ultime du web participatif au niveau organisation et création de valeur. Il créera peut-être ses propres règles et ses propres usages. Nous n'en sommes qu'au début, il faut tout construire et peut-être tout modifier (on parle déjà d'Entreprise 2.0 et de Démocratie 2.0).

E. On parle déjà de web 3.0

Internet sera présent partout, c'est le principe de "cloud computing" (de Rosnay, 2009) c'est-à-dire on ne veut plus de stockage sur une machine en local mais bien sur un serveur distant. Et des sociétés commencent à proposer des solutions disponibles sur le cloud (CBS, 2009). On parlera aussi de web 3.0 pour tous ces objets qu'on utilise tous les jours et qui risquent fortement d'avoir demain un accès à internet (réfrigirateur, radio-réveil,etc). Ce serait un monde où tout se passerai sur le cloud, nos terminaux ne seront justes que des consommateurs de service.

On peut donc considérer que le développeur Web de demain peut avoir une tout autre signification que celui qu'il a actuellement. Vu que désormais chaque utilisateur peut modifier à sa convenance son site, participer aux partages de l'information, la création de communauté, c'est peut-être ça le Web du futur où chacun y sera à sa manière développeur.

Figure 48 : Les internautes du web deviennent acteurs

3. Tous développeurs de logiciels?

Nous avons pu voir que si nous voulons être tous développeurs d'applications, il faut passer par de la génération de code et de la modélisation. Qui dit modélisation dit ingénierie dirigée par les modèles (IDM). Nous avons quasiment notre réponse dans le nom de ce concept. Il fait intervenir le mot ingénierie, qui est, on le rappelle, l'art de l'ingénieur. Etre ingénieur ce n'est pas innée, cela s'apprend, donc de part ce premier point nous ne serons pas tous développeurs de logiciels.

Si l'on souhaite quand même s'approprier l'IDM, nous avons deux approches (comme déjà vu) : le MDA et le DSML.

Concernant le MDA il présente plusieurs problèmes, notamment le changement de plates-formes, comment fera un non initié s'il doit changer de plate-forme ? De plus, nous avons vu que le MDA utilisait l'UML pour le langage de modélisation. Or, UML nécessite un processus très strict si l'on veut générer du code utile et fonctionnel. L'UML est un langage à part entière et comme tout langage (que ce soit écrit ou parlé) il faut un apprentissage pour l'utiliser et le comprendre. Une approche par les modèles ne permet qu'à peu de personnes d'avoir les compétences pour modéliser complètement les systèmes. Il nécessite forcément l'implication de professionnels.

Le DSML quant à lui implique une forte connaissance du domaine auquel il appartient mais surtout une expertise dans le développement de langage. Comme pour l'IDM, qui dit expert dit une petite partie des gens concernés.

Pour faire un logiciel, il y a aussi toute la partie interface utilisateur à créer. Comme nous l'avons vu, il est bien sûr très simple de les créer, cela peut donner un rendu satisfaisant au premier regard. En revanche, sans connaissance en programmation, il est impossible de le rendre fonctionnel. Malgré certains outils, comme Windev, qui vont proposer des options selon les modèles graphiques que nous mettons en place, mais il est impossible d'avoir toutes les possibilités.

Bien que l'on tende justement vers des outils de ce calibre à l'avenir, il est encore prématuré de dire si un outil pourra exister de façon simple, et qui proposera en plus de l'éditeur graphique, de pouvoir faire un logiciel pouvant répondre à différentes attentes (de l'utilisateur final). En revanche, avec l'apparition SaaS (Software as a Service) et du Cloud-Computing qui voient désormais le logiciel comme un service en ligne et non plus comme une application de bureau, on peut très bien imaginer un développement collaboratif et participatif, comme ce que l'on a vu pour les sites web. Chacun pourrait apporter sa pierre à l'édifice et participer ainsi au développement de ces nouveaux logiciels qui risquent très fortement de se développer d'ici quelques années. Il ne faudrait surtout pas non plus oublié que l'on soit dans un monde hyper connecté si l'on veut être tous développeurs. Avoir les outils qu'il faut pour l'être c'est bien mais il faut également avoir les moyens.

4. L'hyper connectivité

Nous avons montré ce qu'il faudrait pour être développeur. Mais maintenant interrogeons-nous sur comment on peut l'être TOUS. Bien sûr, exit tous les programmes techniques qui vont nous permettre de développer. Il faut quelque chose de simple et inéluctable, et je pense que le monde hyper connecté vers lequel on se dirige va nous permettre cela. Selon une étude du cabinet Gartner 14(*)(publiée le 11 août 2011) il a été vendu 429 millions de téléphones portables dans le monde lors du deuxième trimestre de cette même année. Les ventes mobiles enregistrent une hausse de 16.5% alors que la vente de smartphones connaît une croissance de 74%. Duncan Stewart, Directeur de Deloitte Research, Centre de recherches mondial du cabinet Deloitte15(*) nous explique que "l'augmentation du nombre de ménages possédant plusieurs tablettes a été phénoménal. Il a fallu plusieurs décennies avant que plus de 5% des ménages possèdent plus d'un téléphone, d'une voiture, d'une radio ou d'un téléviseur. Dans le cas des ordinateurs personnels et des téléphones cellulaires, il a fallu attendre plus de 10 ans. Pour les tablettes, on attendra moins de trois ans." D'après le cabinet DisplaySearch il y a eu 72,7 millions de tablettes vendus dans le monde en 2011 (+256% par rapport à 2010), soit 3 fois plus que les netbooks et talonnant les PC portables (187 millions). Ceci nous montre bien que ces objets portatifs vont gagner en nombre et en personnes les possédants. Ainsi à terme, il est fort probable que chacun de nous en possède et puisse participer, de manière quasiment inconsciente (car ces objets vont rentrés dans les moeurs), au développement participatif auquel on faisait référence plus haut.

5. L'histoire nous dis que oui?

Pour rappel, la programmation informatique a commencé dans les années 1950, où les programmes informatiques étaient des inscriptions sur des cartes en carton perforé. La programmation consistait à percer des trous dans le carton. En 1970, c'est l'apparition de la programmation structurée qui a simplifié le travail des programmeurs et qui a permis la création de programmes traitant un plus grand nombre de tâches tout en étant beaucoup plus complexe. L'apparition des IHM, entre 1980 et 1990, a complètement démocratisé le développement d'applications qui n'est désormais plus réservé aux professionnels mais également aux personnes n'ayant que peu de formation.

Comme nous l'avons vu le développeur de nos jours est beaucoup plus multi tâches qu'avant. Il ne va pas seulement se spécifier que dans la création de code, il peut faire partie d'un aspect beaucoup plus fonctionnel. Il n'a pas qu'un seul domaine de compétence et pas non plus qu'un seul domaine technique. Le développeur est aujourd'hui un homme avec plusieurs cordes à son arc aussi variées que possible.

Avec le recul nous voyons bien que sur des cycles de 20 ans, le métier de développeur change du tout au tout. Il faut s'attendre à ce qu'à l'horizon de 2030, le métier de développeur évolue encore énormément. On commence déjà à ressentir les prémices de ce changement : les projets sont de taille de plus en plus importante, et nécessitent donc d'avoir des personnes qui collaborent en fonction de leur spécialisation. De plus en plus, le développeur doit comprendre les besoins, le business et le contexte du client. Il n'est plus uniquement un "faiseur de code", le métier qui consiste à simplement écrire que du code est destiné à disparaitre, et d'autant plus que, comme nous l'avons vu, des outils et interfaces d'automatisation peuvent fortement l'aider dans l'aspect technique.

Le développeur du futur devra donc avoir des compétences en communication, des capacités d'écoute et de synthèse et se préoccuper de la facilité de l'utilisation du programme. De plus, l'univers sera de plus en plus mondialisé, et la programmation y sera proche du langage naturel, les outils de développement conviviaux et simples à utiliser.

6. Est-ce que ça apporterait quelque chose?

C'est une question assez importante que l'on pose ici. En effet, se demander si demain nous serons tous développeurs peut paraitre justifier, on peut également se demander si ça pourrait servir à quelque chose. Si on admet que chacun sera développeur demain, une chose est sure c'est qu'il ne le sera pas à 100% de son temps. Effectivement, quelqu'un qui développe pendant 100% de son temps ça sous-entend qu'il délaisse son domaine dans la société à laquelle il appartient. Chaque entreprise serait alors une unique DSI, ce qui n'est vraiment pas envisageable. Par contre, quelle entreprise n'a pas connu une personne de la comptabilité, des ressources humaines, de QHSE,... n'arrivant pas à remonter des données et demandant au service informatique un coup de main pour l'aider ? Cela arrive quotidiennement dans chaque société. Dans le futur on pourrait imaginer que, par le biais de nos outils, ses demandes n'existeraient plus car chacun serait capable de résoudre ces problèmes. On pourrait même imaginer qu'en fin de projet, où les délais sont très court, un transfert de ressources (vers la DSI) au sein de l'entreprise, soit fait afin de clôturer le projet dans les délais prévus.

Mais en essayant de rester dans un cadre assez réaliste, il est possible que le terme "développeur" ait un nouveau sens d'ici quelques années puisque désormais chaque utilisateur peut modifier à sa convenance son site, participer aux partages de l'information, créer des communautés, etc. Et pour pouvoir continuer ce partage et cette évolution chaque internaute sera utile et chacun apportera à sa manière son savoir. Ce serait une espèce d'intelligence collective où chacun apporte à sa manière sa plus value.

En revanche, il est vrai que si on entend développeur dans le même sens qu'aujourd'hui, il est difficile de penser que le fait d'être tous développeurs soit possible et apporte vraiment quelque chose à l'avenir. Notre environnement et nos technologies évoluent, il faut que notre vocabulaire évolue avec lui.

7. Et les bases de données qu'en fait-on?

Nous avons vu que concernant le développement web c'est l'ère du contenu et du flux continuel d'informations. La définition que je donne et qui je pense sera celle de demain, est que les développeurs web seront des développeurs collaboratifs et participatifs. Ainsi, la base de données est complètement invisible pour lui, il n'aura pas besoin de la gérer car elle le sera en back office.

Comme nous avons fait une analogie avec le développement applicatif et le développement web, nous pouvons ici faire de même. Dans le sens où, si on se dirige également vers du développement logiciel participatif et collaboratif la vision de la base de données sera complètement invisible pour le développeur.

Le problème c'est que, comme vu dans la partie 2 du développement, une gestion de base de données nécessite une connaissance accrue en conception et de solides connaissances en sécurité et réseau. Autrement dit, pour réaliser une base de données sécurisée, bien conçue et fiable il faut des connaissances techniques et si demain nous sommes amenés à être tous développeurs, ce n'est pas avec de la technique mais bien avec des choses simples et accessibles de tous.

La gestion en back office de ces bases de données se fera par des personnes dédiées et formées pour. De même que les outils mis à la disposition de ces "nouveaux" développeurs doivent être eux-mêmes développés, et ceci nécessite des personnes ayant eu des formations en programmation (que ce soit pour la partie applicative, la partie web où la partie base de données).

8. Le développeur de "base" sera toujours là.

Il est fort probable que nous soyons tous développeurs plus tard, ceci grâce à des outils simples d'utilisation, ergonomiques, sécurisés, viables, etc. Mais doit-on rappeler que pour que ces outils existent il faut qu'il y ait quelqu'un derrière qui puisse les créer ? Le métier de développeur, qu'on peut appeler "de base", sera a priori, toujours là. Quoiqu'il arrive nous aurons besoin de ces personnes pour que les développeurs, qu'on peut appeler "dépendants", puissent utiliser les outils qui sont mis à leur disposition. Pour aller vers le développement participatif et collaboratif de chacun d'entre nous, il faudra qu'il y ait ces deux types de développeurs.

A moins que l'on fasse totalement fausse route ?

9. Et si c'était tout autre chose?

A. Programmation par langage naturel écrit

Il existe plusieurs langages de programmation qui permettent de mettre en avant leur capacité à traduire du langage naturel. On peut citer Hypertalk, Perl ou encore Supernova.

Le langage humain est vaste et contient beaucoup de mots donc il va falloir utiliser seulement une petite partie afin de "réduire la complexité" du problème et de sorte d'avoir des performances acceptables. Contrairement à d'autres langages de programmation qui sont basés sur les états, ces langages sont basés sur les paragraphes qui contiennent de nombreuses déclarations imbriquées et en ignorant certains mots (le, et,...). Par exemple: 1- Je veux une fenêtre. 2- Le titre de la fenêtre est bonjour. Ces langages utilisent différentes règles notamment la PVC (Pronom Verbe Classe). P pour "je", V pour "veux" et C pour "fenêtre". Ainsi il y a une distinction des différentes données.

Ainsi ces langages peuvent faciliter le développement, et être compris par un très grand nombre de personnes. Une personne qui n'a pas de base en programmation sera moins rebutée si elle parle comme avec une personne à la machine. C'est ce qui a fait le succès de Hypercard à la fin des années 1980 et début 1990 car il proposait de créer de manière simple des interfaces graphiques à la souris.

B. Programmation par langage naturel parlé

Et si Apple n'avait pas ouvert de nouvelles opportunités avec son système de reconnaissance vocale, Siri ? On peut imaginer un système qui va permettre à des utilisateurs de trouver des données ou même des informations sur un sujet par commandes vocales. Ceci permettrait d'avoir une toute nouvelle interaction entre l'homme et la machine qui serait basée sur la voix. Son évolution, on peut l'imaginer un peu comme on a pu le voir avec le web, c'est-à-dire qu'au début, le système de reconnaissance vocale pourra interpréter de simples requêtes (comme le fait SIRI déjà). Et plus tard, pourquoi pas, avoir quelque chose de beaucoup plus complet où l'interaction serait quasi instantanée, où l'on pourrait tout demander au système, comme par exemple ouvrir une application, aller sur tel site, etc. Tout en imaginant qu'à terme on pourrait lui demander : "Je veux le logiciel "X" avec telle, telle et telle option", sans même toucher un ordinateur. Mais là, on entre un peu dans un autre débat qui pourrait tout à fait être le sujet d'un autre mémoire.

Conclusion

Il est vraiment très difficile de répondre dès aujourd'hui à notre problématique. En effet, pour répondre nous nous sommes basés sur ce que l'informatique nous a apporté depuis le début, sur l'évolution des logiciels et des manières de développement.

Concernant la partie logiciel, nous avons montré qu'il est possible, pour un non initié, de faire des outils simples grâce à des logiciels de glisser-déposer qui sont faciles et intuitifs, ou via des outils de modélisation qui vont générer du code (si encore il a certaines bases en modélisation). Mais ces outils ne vont pas permettre de réaliser des logiciels robustes ayant énormément de fonctionnalités.

Concernant la partie web, nous avons pu voir que via les CMS et les éditeurs de sites web il est actuellement très simple de faire un site.

La différence se fait surtout au niveau de l'évolution de chacun. Même si ces deux domaines ont évolué de manière exponentielle, le web a mis l'utilisateur final au coeur du processus de génération de contenus et de services. Et si on ne respecte pas encore à la lettre la définition du développeur web, on est tous développeurs dans une certaine mesure. Mais au vu : de l'évolution des procédés et des technologies, de la démocratisation du web, du monde hyper connecté vers lequel nous nous dirigeons et ce que l'évolution nous a montré, on peut d'ores et déjà dire, que demain nous serons tous développeurs web. Et je pense fortement que la définition de développeur va être amenée à changer. En effet, on entendra désormais par développeur web tout le côté collaboratif et participatif que nous avons vu dans ce mémoire. Il est plus qu'envisageable que chacun de nous (seul impératif : avoir un accès à internet) soit considéré comme des développeurs à part entière en participant et en collaborant au futur monde hyper connecté d'Internet.

En revanche le scepticisme est de mise concernant le côté applicatif. En effet, être développeur de logiciel est, comme nous l'avons vu, très compliqué. Il faut avoir de bonnes notions, un savoir-faire énorme qui touche à plusieurs domaines et encore plus aujourd'hui qu'hier. Malgré l'existence d'outils de générateurs de code et d'éditeurs graphiques, nous avons pu voir que pour pouvoir développer une application digne de ce nom il fallait quand même avoir un certain bagage de connaissances en programmation et en modélisation. Cependant, avec l'apparition du Cloud Computing et du SaaS, nous pourrions très bien imaginer une évolution "à la web". Celle-ci ouvrirait les portes à une sorte de développement collaboratif où, au début, chaque "vrai" développeur pourrait apporter sa pierre à l'édifice et, à l'image du web, avoir, à terme, un utilisateur de base qui devient acteur du développement d'application. Cela pourrait être possible, peut être, en essayant de ne pas réimplanter les IDE dans les navigateurs, mais en repensant la façon de développer, en s'appuyant sur ce qui a fait la force du web.

Concrètement, pour que l'on soit tous développeurs il faut un monde hyper connecté, où chacun apporte quelque chose sur un sujet commun (on peut imaginer que pour un SaaS, un utilisateur de base explique ce qu'il faudrait améliorer ou pas) afin que ce soit collaboratif et par la suite participatif. Et surtout, qu'il n'y ait en aucune façon, une part technique, car cela réduirait le nombre de personnes capables de l'interpréter. C'est une condition sine qua non. Bien qu'il y aura toujours les développeurs de base pour la partie technique, il y aura également de nouveaux types de développeurs pour une partie peut être plus collaborative et participative. Un peu à l'image d'une relation client-fournisseur, où le client intervient directement dans le développement.

Les langages ont permis une abstraction plus élevée, ainsi un développeur peut se focaliser sur une fonctionnalité en se détachant des détails techniques de son implémentation (en tous cas, ils tendent vers cela). Tant qu'il n'y a pas de contraintes techniques particulières et que d'autres "vrais" développeurs sont là pour mettre à disposition ces outils, une nouvelle catégorie de développeurs peut se permettre une meilleure connaissance de leur domaine.

Mais on peut aussi également penser que comme l'histoire des langages de programmation est liée à celle de l'informatique, de la technologie et même à celle de la téléphonie, on verra peut-être des changements encore utopique pour nous. Par exemple, au niveau de l'interface, il sera peut-être possible de commander des ordinateurs "à la voix" en utilisant le "langage naturel".

Et dire que Minority Report est déjà obsolète...

Travaux cités

Batory, D., Thomas, J., & Sirkin, M. (1994). Reengineering a Complex Application.

Gabriel, R. P. (2002). Objects have failed. Openning OOPSLA.

Gray, J., & Karsai., G. (2003). Proceedings of the 36th.

Herndon, R., & Berzins, V. (1988). The Realizable Benefits of a Language.

Jones, C. (2006). Software Productivity Research (SPR).

Nierstrasz, O. (2010). Ten Things I hate about Object Oriented Programming. ECOOP.

Rothenber, J. (1989). The nature of modeling.

Soley, R. (2001). MDA Guide. Récupéré sur OMG : www.omg.org

Van Deursen, A., & Klint, P. (1998). Little Languages : Little Maintenance.

Van Deursen, A., Klint, P., & Visser, J. (2000). Domain-specific languages : An annotated bibliography.

Wile, D. (2004). Lessons learned from real DSL experiments. Science of Computer.

Bibliographie

Application du modèle MDA (Model-Driven Architecture) dans le développement du logiciel - VO Duc An - 2007

Approche langage au développement logiciel : Application au domaine des services de Téléphonie sur IP - Fabien Latry - 2007

Bases de données - Bernd Amann - 2012

Conception d'une base de données - Cyril Gruau - 2005

De la réutilisabilité des applications à celle des modèles métiers: apport pour l'ingénierie des modèles - Pierre Crescenzo et Philippe Lahire - 2010

Développement d'Applications à Grande Echelle par Composition de Méta-Modèles - Germàn Eduardo VEGA BAEZ - 2005

Développement logiciel orienté paradigme de conception : la programmation dirigée par la spécification - Damien Cassou - 2011

End-User Modeling Défis du Génie de la Programmation et du Logiciel, journées nationales du GDR GPL - Albert Patrick (IBM, Paris), Blay-Fornarino Mireille (I3S, Sophia-Antipolis), Collet Philippe (I3S, Sophia-Antipolis), Combemale Benoit (IRISA, Rennes), Dupuy-Chessa Sophie (LIG, Grenoble), Front Agnès (LIG,Grenoble), Grost Anthony (ATOS, Lille), Lahire Philippe (I3S, Sophia-Antipolis), Le Pallec Xavier (LIFL,Lille), Ledrich Lionel (ALTEN Nord, Lille), Nodenot Thierry (LIUPPA, Pau) et Pinna-Dery Anne-Marie (I3S,Sophia-Antipolis) et Rusinek Stéphane (Psitec, Lille) - 2010

Etat de l'art sur le développement logiciel dirigé par les modèles - Samba Diaw, Rédouane Lbath , Bernard Coulette - 2008

Génération de Code & Reverse Engineering - Cours de Reda Bendraou

Génie Logiciel - Cours de Reda Bendraou

Ingénierie Dirigée par les Modèles (IDM) État de l'art - Benoît Combemale - 2008

Ingénierie dirigée par les modèles Model Driven Architecture - Laurent Pérochon - 2008

Journée sur l'ingénierie dirigée par les modèles - Lille 7-8 juin 2011

L'INGÉNIERIE DIRIGÉE PAR LES MODÈLES : Un bilan critique Journées NEPTUNE - Telecom ParisTech Paris, 17-18 mai 2011

L'approche Model-Driven Architecture, crédible pour développer un progiciel de gestion intégré - Xavier Moghrabi -2003

Le génie logiciel et l'IDM :une approche unificatrice par les modèles - Jean-Marc Jézéquel, Sébastien Gérard, Benoit Baudry - 2006

Les classes et la génération de code sous Bouml - Bruno Pagès - 2007

Les Design Patterns - Cours de Reda Bendraou

Les Patterns pour l'Ingénierie des Systèmes d'Information Produit - Lilia GZARA - 2000

Ligne de Produits Logiciel et variabilité des modèles - cours de Philippe Lahire

Lignes de Produits Logiciels - cours de Tewfik Ziadi

Manipulation de Lignes de Produits Logiciels : une approche dirigée par les modèles - Tewfik Ziadi, Jean-Marc Jézéquel - 2005

Manipulation de Lignes de Produits Logiciels : une approche dirigée par les modèles - Tewfik Ziadi, Jean-Marc Jézéquel - 2005

Model-Driven Engineering: Des Principes aux Concepts Avancés - Cours de Reda Bendraou

Modélisation en Interaction Homme-Machine et en Système d'Information : A la croisée des chemins - Sophie DUPUY-CHESSA - 2011

Modélisation O-O avec UML - Cours de Reda Bendraou

Service-Oriented Computing from the User Perspective - Nassim LAGA - 2010

UML, le langage de modélisation objet unifié - Laurent Piechocki - 2009

Une approche pour améliorer la réutilisabilité des modèles métiers - Pierre Crescenzo et Philippe Lahire - 2005

Utiliser Kemeta pour transformer les modèles - Sébastien Mosser - 2009

Annexes

1. Annexe 1 : Diagrammes UML

Figure 49 : Diagramme de cas d'utilisation

Figure 50 : Diagramme d'activité

Figure 51 : Diagramme de classe

Figure 52 : Diagramme de collaboration

Figure 53 : Diagramme d'états/transitions

Figure 54 : Diagramme d'objets

Figure 55 : Diagramme de séquences

Figure 56 : Diagramme de composants

2. Annexe 2 : Le code source généré par Visual Editor

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);

layout.setHorizontalGroup(

layout.createParallelGroup(Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(41)

.addGroup(layout.createParallelGroup(Alignment.LEADING)

.addComponent(jLabel2, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE)

.addComponent(jLabel3))

.addGap(44)

.addGroup(layout.createParallelGroup(Alignment.TRAILING, false)

.addComponent(jButton1, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addComponent(login, Alignment.LEADING)

.addComponent(mdp, Alignment.LEADING)))

.addGroup(layout.createSequentialGroup()

.addGap(138)

.addGroup(layout.createParallelGroup(Alignment.LEADING)

.addComponent(jLabel4, GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)

.addComponent(jLabel1, GroupLayout.DEFAULT_SIZE, 291, Short.MAX_VALUE))))

.addContainerGap(21, GroupLayout.PREFERRED_SIZE))

);

layout.setVerticalGroup(

layout.createParallelGroup(Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(71)

.addComponent(jLabel1)

.addGap(18)

.addGroup(layout.createParallelGroup(Alignment.BASELINE)

.addComponent(jLabel2)

.addComponent(login, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))

.addGap(18)

.addGroup(layout.createParallelGroup(Alignment.BASELINE)

.addComponent(jLabel3)

.addComponent(mdp, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))

.addPreferredGap(ComponentPlacement.UNRELATED)

.addComponent(jLabel4)

.addGap(30)

.addComponent(jButton1)

.addContainerGap(58, Short.MAX_VALUE))

);

3. Annexe 3 : Exemple d'une génération de code

Figure 57 : Exemple de génération de code

public abstract class Utilisateur {

private long _numero;

private String _motDePasse;

public void afficherMenu() {

throw new UnsupportedOperationException();

}

public static int connexion(long aNumero, String aMotDePasse) {

throw new UnsupportedOperationException();

}

}

public class Etudiant extends Utilisateur {

private String _nom;

private String _prenom;

private String _mail;

public Module[] _module = new Module[0];

public ReponseQCM[] _reponseQCM = new ReponseQCM[0];

public void passerQCM(long aIdQCM) {

throw new UnsupportedOperationException();

}

public ReponseQCM recupererReponse(long aIdQCM) {

throw new UnsupportedOperationException();

}

}

public class Professeur extends Utilisateur {

private String _nom;

private String _prenom;

public Module _module;

public QCM[] _qCM = new QCM[0];

}

* 1 Object Management Architecture: désigne une structure de management d'objets

* 2 Object Request Broke: s'apparente à une tuyauterie permettant les échanges de messages entre objet

* 3 Object Management Group : est une association américaine à but non lucratif créée en 1989 dont l'objectif est de standardiser et promouvoir le modèle objet sous toutes ses formes.

* 4 Meta-Object Facility : est un standard de l' Object Management Group s'intéressant à la représentation des méta modèles et leur manipulation. Le langage MOF s'auto-définit.

* 5 Structured Query Language est un langage informatique normalisé servant à effectuer des opérations sur des bases de données

* 6 Common Object Request Broker Architecture, est une architecture logicielle, pour le développement de composants et d' Object Request Broker où ORB.Corba est un standard maintenu par l' Object Management Group.

* 7 Domain specific language(langage dédié) est un langage de programmation dont les spécifications sont dédiées à un domaine d'application précis.

* 8 COmmon Business Oriented Language est un langage de programmation de troisième génération, c'est langage commun pour la programmation d'applications de gestion.

* 9 Modèle Conceptuel de Données: contrainte qui garantit l' intégrité référentielle entre deux tables.

* 10 Champs permettant d'identifier un enregistrement de façon unique

* 11 Contrainte qui garantit l' intégrité référentielle entre deux tables.

* 12 Combinaison de global et de local. C'est un concept alliant les tendances globales aux réalités locales.

* 13 Interdépendance entre les membres plutôt qu'une structure ascendante

* 14 Entreprise américaine de conseil et de recherche dans le domaine des techniques avancées

* 15 Cabinets d'audit et de conseil






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Soit réservé sans ostentation pour éviter de t'attirer l'incompréhension haineuse des ignorants"   Pythagore