FR 3103594 A1 20210528 FR 1913263 A 20191126 L’invention concerne un système et un procédé pour la création assistée par ordinateur de code informatique. Figure à publier avec l’abrégé : figure 1 SYSTÈME ET PROCÉDÉ POUR LA CRÉATION ASSISTÉE PAR ORDINATEUR DE CODE INFORMATIQUE L’invention concerne un système et un procédé pour la création assistée par ordinateur de code informatique. L’écriture de code informatique est une activité qui demande une très grande rigueur, ce qui la rend longue et couteuse. Ceci est notamment dû au fait qu’un humain qui écrit du code informatique est incapable de soutenir un comportement rigoureux longtemps, tout comme il n’est pas apte à calculer juste, rapidement et longtemps. En revanche, on sait qu’une machine informatique ne connait pas ces limitations et est donc adaptée pour écrire du code informatique avec une célérité des milliers de fois plus élevée que celle de l’humain. On pourrait donc s’attendre à ce qu’aujourd’hui, la machine informatique remplace l’humain dans l’écriture de code informatique. Or, à ce jour, d’après le document suivant, Rinard, Martin. (2019). Borrowing big code to automate programming activities: technical perspective. Communications of the ACM. 62. 98-98. 10.1145/3306206, l’écriture de code informatique serait majoritairement basée sur la recherche en ligne de portions de codes informatiques existants (« snippets », en anglais) et sur leur adaptation manuelle au problème à résoudre. Pour des raisons évidentes, une telle approche est inefficace et couteuse, car elle génère des erreurs qui peuvent, en outre, se répliquer dans de nombreux logiciels dérivés. Il existe donc un besoin pour automatiser l’écriture de code informatique ou, à tout le moins, en diminuer la complexité pour l’humain. L’invention vise à pallier cet inconvénient. Ainsi l’invention propose un système et un procédé pour la création assistée par ordinateur de code informatique, qui décharge l’humain des tâches qui peuvent générer des erreurs. Ainsi, l’invention concerne un système pour la création assistée par ordinateur de code informatique comprenant : – au moins un premier système de mémorisation, dit base de données de routines, prévu pour stocker au moins une routine informatique, – au moins un terminal informatique prévu pour émettre au moins une requête de recherche, – des moyens de caractérisation de code informatique, et – des moyens de traitement de données, dans lequel, – les moyens de caractérisation sont configurés pour former, pour chaque routine informatique de la base de données de routines, un vecteur, dit vecteur de caractérisation, comprenant au moins un paramètre de caractérisation de la routine informatique, – les moyens de traitement de données sont configurés pour, – associer à chaque routine informatique, le vecteur de caractérisation correspondant, – calculer au moins une mesure de corrélation entre la requête de recherche et tout ou partie des vecteurs de caractérisation, et – restituer, à partir de la base de données de routines, au moins une routine informatique, dite routine informatique de retour, en fonction de la mesure de corrélation et d’au moins un premier seuil de corrélation. Dans une première mise en œuvre particulière, le système comprend en outre des moyens de conversion prévus pour convertir une requête, dite requête source, qui est exprimée dans un langage d’entrée vers la requête de recherche qui est exprimée en langage informatique, les moyens de conversion comprenant un processeur de langage et au moins un deuxième système de mémorisation, dit base de données de langage informatique, prévu pour stocker une pluralité de tuples, chaque tuple comprenant une instruction prédéterminée de langage informatique et au moins une expression prédéterminée du langage d’entrée, – le processeur de langage étant configuré pour rechercher, dans la base de données de langage informatique, au moins une instruction informatique qui concorde avec la requête source. Dans un exemple de la première mise en œuvre particulière, les moyens de caractérisation sont couplés à la base de données de langage informatique, pour alimenter la base de données de langage informatique à partir de tout ou partie des vecteurs de caractérisation. Dans une deuxième mise en œuvre particulière, les moyens de caractérisation mettent en œuvre au moins une méthode de caractérisation choisie parmi : l’analyse de complexité algorithmique et l’analyse dynamique de code. Dans un exemple de la deuxième mise en œuvre particulière, le paramètre de caractérisation est défini par : – le temps que met la routine informatique à produire un résultat, – l’espace mémoire utilisé par la routine informatique, ou – la consommation énergétique de la routine informatique. Dans un autre exemple de la deuxième mise en œuvre particulière, le paramètre de caractérisation est défini par des caractéristiques des entrées et/ou sorties de la routine informatique. Dans une troisième mise en œuvre particulière, les moyens de caractérisation sont compris dans le terminal informatique et/ou dans les moyens de traitement de données. Dans une quatrième mise en œuvre particulière, le système comprend en outre des moyens d’optimisation-réécriture de code informatique, et, lorsque la mesure de corrélation se trouve en deçà du premier seuil de corrélation, les moyens d’optimisation-réécriture de code informatique sont configurés pour optimiser automatiquement la routine informatique de retour à partir de la requête de recherche. Dans un exemple de la quatrième mise en œuvre particulière, le terminal comprend un environnement de développement intégré, dit IDE, adapté pour se connecter à la base de données de routines, le système étant en outre configuré pour, – créer un lien de filiation informatique entre la routine informatique de retour et une version optimisée de la routine informatique de retour, et – mettre automatiquement à jour au moins une routine informatique, dans l’IDE, à partir du lien de filiation informatique, lorsqu’une version optimisée de cette routine informatique est générée. Dans une cinquième mise en œuvre particulière, le système comprend en outre des moyens de génération automatique de code informatique par apprentissage automatique, et, lorsque la mesure de corrélation se trouve en deçà d’un second seuil de corrélation, lequel est inférieur au premier seuil de corrélation, les moyens de génération automatique de code informatique par apprentissage automatique sont configurés pour générer automatiquement une routine informatique, dans la base de données de routines, à partir de la requête de recherche. L’invention couvre également un procédé pour la création assistée par ordinateur de code informatique comprenant : – la fourniture d’au moins un premier système de mémorisation, dit base de données de routines, prévu pour stocker au moins une routine informatique, – la fourniture d’au moins un terminal informatique prévu pour émettre au moins une requête de recherche, – la fourniture de moyens de caractérisation de code informatique, et – la fourniture de moyens de traitement de données, – la fourniture de moyens de conversion prévus pour convertir une requête, dite requête source, qui est exprimée dans un langage d’entrée vers la requête de recherche qui est exprimée en langage informatique dans lequel, les moyens de conversion comprenant un processeur de langage et au moins un deuxième système de mémorisation, dit base de données de langage informatique, prévu pour stocker une pluralité de tuples, chaque tuple comprenant une instruction prédéterminée de langage informatique et au moins une expression prédéterminée du langage d’entrée, dans lequel, – on configure les moyens de caractérisation pour former, pour chaque routine informatique de la base de données de routines, un vecteur, dit vecteur de caractérisation, comprenant au moins un paramètre de caractérisation de la routine informatique, – on configure les moyens de traitement de données pour – associer à chaque routine informatique, le vecteur de caractérisation correspondant, – calculer au moins une mesure de corrélation entre la requête de recherche et tout ou partie des vecteurs de caractérisation, et – restituer, à partir de la base de données de routines, au moins une routine informatique, dite routine informatique de retour, en fonction de la mesure de corrélation et d’au moins un premier seuil de corrélation, – on configure le processeur de langage pour rechercher, dans la base de données de langage informatique, au moins une instruction informatique qui concorde avec la requête source, et dans lequel, – on couple les moyens de caractérisation à la base de données de langage informatique, pour alimenter la base de données de langage informatique à partir de tout ou partie des vecteurs de caractérisation. Dans une première mise en œuvre particulière, on met en œuvre, par les moyens de caractérisation, au moins une méthode de caractérisation choisie parmi : l’analyse de complexité algorithmique et l’analyse dynamique de code. Dans une deuxième mise en œuvre particulière, le paramètre de caractérisation est défini par : – le temps que met la routine informatique à produire un résultat, – l’espace mémoire utilisé par la routine informatique, ou – la consommation énergétique de la routine informatique. Dans une troisième mise en œuvre particulière, le paramètre de caractérisation est défini par des caractéristiques des entrées et/ou sorties de la routine informatique. Dans une quatrième mise en œuvre particulière, le procédé comprend en outre la fourniture de moyens d’optimisation-réécriture de code informatique, et dans lequel lorsque la mesure de corrélation se trouve en deçà du premier seuil de corrélation, les moyens d’optimisation-réécriture de code informatique sont configurés pour optimiser automatiquement la routine informatique de retour à partir de la requête de recherche. Dans une cinquième mise en œuvre particulière, le terminal comprend un environnement de développement intégré, dit IDE, adapté pour se connecter à la base de données de routines, le procédé étant en outre configuré pour, – créer un lien de filiation informatique entre la routine informatique de retour et une version optimisée de la routine informatique de retour, et – mettre automatiquement à jour au moins une routine informatique, dans l’IDE, à partir du lien de filiation informatique, lorsqu’une version optimisée de cette routine informatique est générée. Dans une sixième mise en œuvre particulière, le procédé comprend en outre la fourniture de moyens de génération automatique de code informatique par apprentissage automatique, et dans lequel, lorsque la mesure de corrélation se trouve en deçà d’un second seuil de corrélation, lequel est inférieur au premier seuil de corrélation, on configure les moyens de génération automatique de code informatique par apprentissage automatique pour générer automatiquement une routine informatique, dans la base de données de routines, à partir de la requête de recherche. D’autres buts, caractéristiques et avantages de l’invention apparaîtront à la lecture de la description suivante, qui se réfère aux figures annexées qui représentent des modes de réalisation préférentiels de l’invention, et que l’on donne uniquement à titre d’exemples non limitatifs. La figure 1 représente un système pour la création assistée par ordinateur de code informatique, selon l’invention. La figure 2 représente les moyens de conversion du système de la figure 1. La figure 3 représente un procédé pour la création assistée par ordinateur de code informatique, selon l’invention. Les figures ne respectent pas nécessairement les échelles, notamment en épaisseur, et ce à des fins d’illustration. Dans la figure 1, le système 100 pour la création assistée par ordinateur de code informatique comprend au moins un premier système de mémorisation, dit base de données de routines 110, au moins un terminal informatique 120, des moyens de caractérisation de code informatique 130 et des moyens de traitement de données 140. Dans l’exemple de la figure 1, un réseau de communication 10 interconnecte les différents éléments du système 100. Dans un exemple, le système de communication 10 est connu et du type filaire. Dans un autre exemple, le système de communication 10 est connu et du type sans fil. Ainsi, l’accès au système 100 peut s’effectuer, par exemple, grâce au réseau de communication 10, par une interface Web, un logiciel spécifique ou une interface de programmation applicative (« application programming interface », API, en anglais). Dans la description, on entend par système de mémorisation, un mode de stockage approprié pour des données informatiques. Par exemple, il peut s’agir d’une liste, d’un arbre, des tables ou toute autre structure de données appropriée. Dans une mise en œuvre particulière, le système de mémorisation utilise une base de données relationnelle dans laquelle les données sont structurées en tables, chaque table comportant un certain nombre de champs. Les champs peuvent être de différents types : booléens, numériques, chaînes de caractères, etc. Chaque table se compose d’un ensemble de tuples, dits enregistrements, chaque enregistrement correspondant à un ensemble de valeurs particulières des champs de la table. Pour rappel, un tuple est la généralisation du couple à un nombre quelconque d’éléments. Par exemple, les couples, les triplets, les quadruplets, etc. sont des tuples. Ainsi, on représente classiquement chaque table par une matrice à deux dimensions dans laquelle chaque colonne représente un champ et chaque ligne un enregistrement. Toutefois, on peut utiliser d’autres systèmes de mémorisation sans nécessiter de modifier substantiellement l’invention. Dans la figure 1, la base de données de routines 110 est prévue pour stocker au moins une routine informatique. Dans la description, on entend par routine informatique une entité informatique identifiée par au moins un nom et qui encapsule un ensemble d’instructions informatiques exprimées dans un langage informatique prédéterminé. De cette manière, on peut utiliser la routine informatique à volonté sans avoir à réécrire les instructions informatiques plusieurs fois. Par ailleurs, l’homme du métier du développement informatique sait que le bon usage des routines permet de structurer un programme informatique en le décomposant en différentes unités relativement indépendantes. De manière non limitative, une routine informatique selon l’invention peut être utilisée dans les différentes étapes du cycle de développement d’un logiciel. On entend par cycle de développement d’un logiciel, un ensemble structuré d’activités nécessaires pour développer un logiciel. Par exemple, ces activités peuvent comprendre la définition des spécifications, l’implémentation du logiciel (codage) ou les tests (de validation, unitaires, d’intégration, de qualification). Comme dans le cas d’une fonction mathématique, on peut paramétrer une routine informatique de façon à pouvoir l’utiliser à différentes reprises avec des variables différentes, nommées paramètres. Toutefois, on notera une certaine différence entre la fonction mathématique et la routine informatique. En effet, une fonction mathématique ne fait que calculer une grandeur à partir de valeur d’un ou de plusieurs paramètres. Tandis que, même si la routine informatique peut se contenter de réaliser un calcul et de fournir le résultat, elle peut aussi effectuer une action qui n’a plus rien à voir avec un calcul (par exemple, lecture ou écriture d’information), et, éventuellement, ne fournir aucun résultat. À titre d’illustration, on peut faire référence, par exemple, à la routine informatique ‘moyenne2entiers’, ci-dessous, qui permet de calculer la moyenne de deux entiers naturels x et y en utilisant le langage informatique C : int moyenne2entiers ( int x, int y) { int somme = 0.0   ; int moyenne = 0.0   ; somme = x + y +1   ; moyenne = somme / 2   ; return moyenne   ; } Dans cet exemple de routine informatique, les entiers naturels x et y sont représentés sur ‘8’ bits, soit 0 somme doit donc être représentée sur ‘16’ bits. De retour à la figure 1, le terminal informatique 120 est prévu pour émettre au moins une requête de recherche RR. Dans la description, on entend par terminal informatique, tout dispositif comportant une unité de calcul, comme un processeur. Un terminal informatique comprend au minimum un moyen de saisie, comme un clavier, un moyen de visualisation, comme un écran, et un moyen de communication, comme un modem. Dans un exemple, le terminal informatique 120 est un ordinateur, une tablette numérique, un téléphone intelligent ou un serveur informatique. Dans une mise en œuvre particulière, le système 100 comprend en outre des moyens de conversion 150 prévus pour convertir une requête, dite requête source RS, qui est exprimée dans un langage d’entrée vers la requête de recherche RR qui est exprimée en langage informatique. Dans l’invention, un utilisateur du terminal 120 fournit la requête source RS sous forme électronique ou numérique, par exemple oralement ou par écrit. Dans un exemple, le langage d’entrée est choisi parmi : le langage naturel, le langage mathématique, une série de mots-clés et leurs combinaisons. Ainsi, on pourrait formuler un exemple de requête source RS exprimé en langage naturel comme suit : « calculer la moyenne de deux entiers ». On pourrait aussi formuler un exemple de requête source RS exprimé en langage mathématique comme suit : « moyenne = (x+y)/2 ». On pourrait également formuler un exemple de requête source RS exprimé par une série de mots-clés comme suit : « entrée = {2;10} sortie = 6 ». Dans cet exemple, les mots-clés ‘entrée’ et ‘sortie’ permettent de définir, respectivement, des exemples de valeurs d’entrées et de sorties, attendues pour la routine recherchée. Dans un exemple de la mise en œuvre particulière, tel qu’illustré dans la figure 2, les moyens de conversion 150 comprennent un processeur de langage 151 et au moins un deuxième système de mémorisation, dit base de données de langage informatique 152. Dans cet exemple, la base de données de langage informatique 152 est prévue pour stocker une pluralité de tuples, chaque tuple comprenant une instruction prédéterminée du langage informatique et au moins une expression prédéterminée du langage d’entrée. Ainsi, on pourrait formuler un exemple de tuple comme suit : [moyenne ; mean] dans lequel l’expression « moyenne » correspond à l’expression prédéterminée du langage d’entrée, tandis que l’expression « mean » correspond à l’instruction prédéterminée du langage informatique. On pourrait aussi formuler un exemple de tuple comme suit : [transformée de Fourier inverse ; IFFT] dans lequel l’expression « transformée de Fourier inverse» correspond à l’expression prédéterminée du langage d’entrée, tandis que l’expression « IFFT» correspond à l’instruction prédéterminée du langage informatique. Par ailleurs, le processeur de langage 151 est configuré pour rechercher, dans la base de données de langage informatique 152, au moins une instruction informatique qui concorde avec la requête source RS. Dans une mise en œuvre particulière, le processeur de langage 151 génère une valeur de confiance pour chacune des possibilités de concordance. Dans ce cas, le processeur de langage 151 retourne seulement les instructions informatiques pour lesquelles le coefficient de confiance est supérieur à un seuil de confiance prédéterminé. De retour à la figure 1, les moyens de caractérisation 130 sont configurés pour former, pour chaque routine informatique de la base de données de routines110, un vecteur, dit vecteur de caractérisation, qui comprend au moins un paramètre de caractérisation de la routine informatique. Dans un exemple, on définit le paramètre de caractérisation par : — le temps que met la routine informatique à produire un résultat, — l’espace mémoire utilisé par la routine informatique, ou — la consommation énergétique de la routine informatique. Pour cela, dans une mise en œuvre particulière, les moyens de caractérisation 130 mettent en œuvre au moins une méthode de caractérisation de routines informatiques choisie parmi : l’analyse de complexité algorithmique et l’analyse dynamique de code. On entend par analyse de complexité algorithmique, l’étude formelle de la quantité de ressources nécessaires à l’exécution d’une routine informatique. Dans ce cas, par exemple, on pourra utiliser des méthodes connues dites d’analyse de complexité asymptotique ou d’analyse de complexité cyclomatique. Ces méthodes ont l’avantage de ne pas nécessiter l’exécution de la routine informatique que l’on analyse et sont donc indépendantes du matériel sur lequel s’exécute la routine informatique. Des outils connus comme CMT++ et CMTJava de la société Vérifysoft permettent d’évaluer la complexité d’une routine informatique grâce à l’utilisation de différentes métriques telles que la métrique de complexité de McCAbe ou la métrique de complexité d’Halstead. On entend par analyse dynamique de code, l’étude du comportement d’une routine informatique et les effets de son exécution sur son environnement. Contrairement à l’analyse de complexité algorithmique, cette méthode nécessite l’exécution de la routine informatique dans un environnement physique ou virtuel. Des outils connus dits de profilage de code (« profiling », en anglais), comme le compilateur ‘gcc’, le programme ‘gprof’ du paquet ‘binutils’, permettent de déterminer le temps d’exécution d’une routine informatique en prenant en considération les multiples facteurs qui influencent le temps d’exécution de la routine informatique comme les données du problème, l’algorithme utilisé, la vitesse du processeur, le nombre de processeurs, la taille et la vitesse d’accès à la mémoire, le temps de transfert, le langage de programmation, le compilateur, l’interpréteur, la charge de la machine, le système d’exploitation, le système de gestion des processus, la charge du réseau informatique, etc. D’autres outils connus comme PTCMP (« Parallel Turandot CMP », en anglais), Wattch, CACTI, permettent d’estimer la consommation énergétique d’une routine informatique. Dans un autre exemple, on définit le paramètre de caractérisation, en outre, par des caractéristiques des entrées et/ou sorties de la routine informatique, comme : la forme du spectre d’un signal, la taille, la structure, le type, la précision, etc. Dans ce cas, on pourra utiliser des outils connus de caractérisation de données. Dans une mise en œuvre particulière, les moyens de caractérisation 130 sont compris dans le terminal informatique 120 et/ou dans les moyens de traitement de données 140. Dans une autre mise en œuvre particulière, on couple les moyens de caractérisation 130 à la base de données de langage informatique 152, pour alimenter la base de données de langage informatique 152 à partir de tout ou partie des vecteurs de caractérisation. Dans un exemple, on utilise tout ou partie des paramètres de caractérisation comme des instructions prédéterminées du langage informatique. De retour à la figure 1, les moyens de traitement de données 140 sont configurés pour — associer à chaque routine informatique, le vecteur de caractérisation correspondant, — calculer au moins une mesure de corrélation entre la requête de recherche et tout ou partie des vecteurs de caractérisation, et — restituer, à partir de la base de données de routines 110, au moins une routine informatique, dite routine informatique de retour, en fonction de la mesure de corrélation et d’un moins un premier seuil de corrélation. Dans un exemple, les moyens de traitement de données 140 mettent en œuvre une mesure de corrélation sélectionnée dans un groupe qui comprend : le coefficient de corrélation du produit des moments de Pearson, le coefficient de corrélation de rang de Spearman, le tau de Kendall, le coefficient de concordance de Kendall, le gamma de Goodman et Kruskal, et le diamètre d’arbre de recouvrement minimal. Ainsi, dans l’invention, lorsque la mesure de corrélation se trouve au-delà du premier seuil de corrélation, alors les moyens du traitement de données 140 permettent de restituer la routine informatique de retour. Ce qui signifie que la base de données de routines 110 comprend au moins une routine qui correspond aux critères de la requête de recherche RR. Dans une mise en œuvre particulière de la figure 1, le système 100 comprend en outre des moyens d’optimisation-réécriture de code informatique 160. Dans ce cas, lorsque la mesure de corrélation se trouve en deçà du premier seuil de corrélation, les moyens d’optimisation-réécriture de code informatique sont configurés pour optimiser et réécrire automatiquement la routine informatique de retour à partir de la requête de recherche de manière à retourner une routine informatique de retour optimisée. Ce qui signifie que la base de données de routines 110 ne comprend pas de routine informatique qui correspond aux critères de la requête de recherche RR, mais s’en approche. En pratique, les moyens d’optimisation-réécriture de code informatique, qui sont de types connus, permettent d’obtenir une version optimisée de la routine informatique de retour, selon au moins un critère prédéterminé d’optimisation. Dans un exemple, le critère prédéterminé d’optimisation et choisi parmi : le temps d’exécution, la constance du temps d’exécution et la taille du code exécutable. Par exemple, les documents suivants décrivent des méthodes connues d’optimisation-réécriture : —Sumit Gulwani, Susmit Jha, Ashish Tiwari, and Ramarathnam Venkatesan. Synthesis of loop-free programs. In Proceedings of the 32Nd ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI ’11, pages 62–73, New York, NY, USA, 2011. ACM. —Eric Schkufza, Rahul Sharma, and Alex Aiken. Stochastic su- peroptimization. In Proceedings of the Eighteenth International Conference on Architectural Support for Programming Languages and Operating Systems, ASPLOS ’13, pages 305–316, New York, NY, USA, 2013. ACM. —Eric Schkufza, Rahul Sharma, and Alex Aiken. Stochastic program optimization. Commun. ACM, 59(2) :114–122, January 2016. À titre d’illustration, on peut utiliser ces méthodes d’optimisation-réécriture sur la routine informatique ‘moyenne2entiers’ décrite plus haut. Comme expliqué plus haut, cette routine informatique ne remplit par le critère selon lequel l’ensemble des variables sont représentées sur ‘8’, car elle passe par l’intermédiaire d’une variable représentée sur ‘16’ bits. Ainsi, à l’aide de ces méthodes d’optimisation-réécriture, on peut obtenir la routine informatique ‘moyenne2entiersSur8Bits’ qui est une version optimisée de la routine informatique qui n’utilise que des variables représentées sur ‘8’ bits, sans passer par une variable intermédiaire représentées sur ‘16’ bits : int moyenne2entiers Sur8 Bits ( int x, int y) { int somme SurHuitBits = 0.0 ; sommeSurHuitBits = ( x |y)-(( x^y )>> 1 )   ; return sommeSurHuitBits ; } Dans cet exemple de routine informatique optimisée, l’opérateur ‘|’ représente un « OU inclusif binaire », l’opérateur ‘^’ représente un « OU exclusif binaire » et l’opérateur ‘>> » représente un décalage de bits à droite. Par ailleurs, dans l’invention, les moyens d’optimisation-réécriture de code informatique sont, en outre, configurés pour créer un lien de filiation informatique entre la routine informatique de retour et la version optimisée de la routine informatique de retour. Ainsi, on peut déterminer, pour une routine informatique donnée, si elle possède au moins une version optimisée. Dans un exemple de cette mise en œuvre particulière, le terminal informatique 120 comprend un environnement de développement intégré, dit IDE (« integrated development environment », en anglais), qui est un outil de développement de logiciel. Dans la pratique, un IDE comprend un éditeur de texte destiné à la programmation, des fonctions qui permettent, par pression sur un bouton, de démarrer le compilateur ou l’éditeur de liens ainsi qu’un débogueur en ligne, qui permet d’exécuter ligne par ligne le programme en cours de construction. Dans l’invention, l’IDE est adapté pour se connecter à la base de données de routines 110. Dans ce cas, à partir du lien de filiation informatique mentionné plus haut, le système 100 est en outre configuré pour mettre automatiquement à jour au moins une routine informatique, dans l’IDE, lorsqu’une version optimisée de cette routine informatique est générée. Par exemple, on peut configurer le système 100 pour remplacer automatiquement, dans le programme informatique en cours de développement dans l’IDE, la routine informatique d’origine par la routine informatique de retour optimisée. Dans un autre exemple, le système 100 peut être configuré pour afficher un message dans l’IDE afin d’informer l’utilisateur de l’IDE de la disponibilité d’une version optimisée d’une routine informatique utilisée dans le programme informatique en cours de développement. Dans une autre mise en œuvre particulière de la figure 1, le système 100 comprend en outre des moyens de génération automatique de code informatique par apprentissage automatique 170. Dans cette mise en œuvre particulière, les moyens de génération automatique de code informatique par apprentissage automatique 170 permettent de résoudre les écueils de l’art antérieur dans lequel la génération de code informatique est basée sur l’utilisation de bibliothèques de fonctions existantes. Or, les fonctions proposées dans les bibliothèques sont parfois complexes à utiliser. En outre, il n’est pas simple de savoir qu’il existe une fonction qui réalise ce que le développeur informatique souhaite. Et il est encore plus difficile de trouver dans quelle bibliothèque elle se trouve. Ainsi, dans l’invention, on utilise l’apprentissage automatique pour générer le code informatique souhaité de la routine informatique. Dans l’art antérieur, on appelle souvent ce domaine « automatic programming   » ou « machine programming   » (en anglais) tel que défini dans le document suivant : Gottschlich, Justin & Solar-Lezama, Armando & Tatbul, Nesime & Carbin, Michael & Rinard, Martin & Barzilay, Regina & Amarasinghe, Saman & Tenenbaum, Joshua & Mattson, Tim. (2018). The three pillars of machine programming. 69-80. 10.1145/3211346.3211355. Cette définition couvre, par exemple, la programmation par les exemples ou la programmation génétique. Par exemple, les documents suivants décrivent des méthodes connues de génération automatique de code informatique par apprentissage automatique : – Becker, Kory & Gottschlich, Justin. (2017). AI Programmer : Autonomously Creating Software Programs Using Genetic Algorithms. - Gulwani, Sumit. (2011). Automating String Processing in Spreadsheets Using Input-Output Examples. ACM SIGPLAN Notices. 46. 317-330. 10.1145/1926385.1926423. – Devlin, Jacob & Uesato, Jonathan & Bhupatiraju, Surya & Singh, Rishabh & Mohamed, Abdel-Rahman & Kohli, Pushmeet. (2017). RobustFill: Neural Program Learning under Noisy I/O. - Rosales-Morales, Viviana Yarel & Alor-Hernández, Giner & García-Alcaraz, Jorge & Zatarain Cabada, Ramón & Barron Estrada, Maria. (2015). An analysis of tools for automatic software development and automatic code generation. Revista Facultad de Ingeniería Universidad de Antioquia. 2015. 75-87. 10.17533/udea.redin.n77a10. —Danilchenko, Yuri & Fox, Richard. (2012). Automated Code Generation Using Case-Based Reasoning, Routine Design and Template-Based Programming. 10.13140/2.1.1470.4641. —Liao, Haode & Jiang, Jun & Zhang, Yuxin. (2010). A Study of Automatic Code Generation. 10.1109/ICCIS.2010.171., —Nye, Maxwell & Hewitt, Luke & Tenenbaum, Joshua & Solar-Lezama, Armando. (2019). Learning to Infer Program Sketches. —Patel, Jyotirmay & Saxena, Aniket. (2017). DeepCoder: An Approach to Write Programs. - Balog, Matej & Gaunt, Alexander & Brockschmidt, Marc & Nowozin, Sebastian & Tarlow, Daniel. (2016). DeepCoder: Learning to Write Programs. —Yuri B. Danilchenko. 2012. Automatic code generation using artificial intelligence. ProQuest / UMI. Dans cette mise en œuvre particulière, lorsque la mesure de corrélation se trouve en deçà d’un second seuil de corrélation, lequel est inférieur au premier seuil de corrélation, les moyens de génération automatique de code informatique par apprentissage automatique 170 sont configurés pour générer automatiquement une routine informatique, dite routine informatique générée, dans la base de données de routines110, à partir de la requête de recherche. Ce qui signifie que la base de données de routines 110 ne comprend pas de routine informatique qui correspond aux critères de la requête de recherche RR, et aucun qui s’en approche. Dans une mise en œuvre particulière, les moyens de génération automatique de code informatique par apprentissage automatique 170 sont configurés pour générer automatiquement une routine informatique, en outre, à partir de tout ou partie de la base de données de routines 110. Comme illustré dans la figure 3, l’invention couvre aussi un procédé 200 pour la création assistée par ordinateur de code informatique. Le procédé 200 comprend : – la fourniture 210 de la base de données de routines 110, – la fourniture 220 d’au moins le terminal informatique 120, – la fourniture 230 des moyens de caractérisation 130, et – la fourniture 240 des moyens de traitement de données 140, – la fourniture 250 des moyens de conversion 150. En particulier, dans le procédé 200, on configure les moyens de caractérisation 130 pour former, pour chaque routine informatique de la base de données de routines 110, un vecteur, dit vecteur de caractérisation, qui comprend au moins un paramètre de caractérisation de la routine informatique, tel que décrit plus haut. Par ailleurs, on configure, comme décrit plus haut, les moyens de traitement de données 140 pour : – associer à chaque routine informatique, le vecteur de caractérisation correspondant, – calculer au moins une mesure de corrélation entre la requête de recherche et tout ou partie des vecteurs de caractérisation, et – restituer, à partir de la base de données de routines 110, au moins une routine informatique, dite routine informatique de retour, en fonction de la mesure de corrélation et d’au moins un premier seuil de corrélation. Ensuite, on configure, comme décrit plus haut, le processeur de langage 151 pour rechercher, dans la base de données de langage informatique 152, au moins une instruction informatique qui concorde avec la requête source. Enfin, on couple les moyens de caractérisation 130 à la base de données de langage informatique 152, comme décrit plus haut, pour alimenter la base de données de langage informatique 152 à partir de tout ou partie des vecteurs de caractérisation, comme décrit plus haut. Dans une mise en œuvre particulière, comme décrite plus haut, les moyens de caractérisation 130 mettent en œuvre au moins une méthode de caractérisation choisie parmi : l’analyse de complexité algorithmique et l’analyse dynamique de code. Dans un exemple, comme décrit plus haut, le paramètre de caractérisation est défini par : – le temps que met la routine informatique à produire un résultat, – l’espace mémoire utilisé par la routine informatique, ou – la consommation énergétique de la routine informatique Dans une autre mise en œuvre particulière, le paramètre de caractérisation est en outre défini par des caractéristiques des entrées et/ou sorties de la routine informatique, comme décrit plus haut. Dans une autre mise en œuvre particulière, le procédé 200 comprend la fourniture 260 des moyens d’optimisation-réécriture de code informatique 160, comme décrit plus haut. Dans ce cas, lorsque la mesure de corrélation se trouve en deçà du premier seuil de corrélation, les moyens d’optimisation-réécriture de code informatique sont configurés pour optimiser automatiquement la routine informatique de retour à partir de la requête de recherche, comme décrit plus haut. Dans un exemple de cette mise en œuvre particulière, le terminal informatique 120 comprend un environnement de développement intégré, dit IDE, adapté pour se connecter à la base de données de routines 110. Dans ce cas, le procédé 200 est, en outre, configuré pour mettre automatiquement à jour au moins une routine informatique, dans l’IDE, lorsqu’une version optimisée de cette routine informatique est générée, comme décrit plus haut. Dans une autre mise en œuvre particulière, le procédé 200 comprend en outre la fourniture 270 des moyens de génération automatique de code informatique par apprentissage automatique 170, comme décrit plus haut. Dans ce cas, lorsque la mesure de corrélation se trouve en deçà d’un second seuil de corrélation, lequel est inférieur au premier seuil de corrélation, on configure, comme décrit plus haut, les moyens de génération automatique de code informatique par apprentissage automatique 170 pour générer automatiquement une routine informatique, dite routine informatique générée, dans la base de données de routines 110, à partir de la requête de recherche. Dans une mise en œuvre particulière, les moyens de génération automatique de code informatique par apprentissage automatique 170 sont configurés pour générer automatiquement une routine informatique, en outre, à partir de tout ou partie de la base de données de routines 110. Système (100) pour la création assistée par ordinateur de code informatique comprenant : – au moins un premier système de mémorisation, dit base de données de routines (110), prévu pour stocker au moins une routine informatique, – au moins un terminal informatique (120) prévu pour émettre au moins une requête de recherche, – des moyens de caractérisation (130) de code informatique, et – des moyens de traitement de données (140), dans lequel, – les moyens de caractérisation sont configurés pour former, pour chaque routine informatique de la base de données de routines, un vecteur, dit vecteur de caractérisation, comprenant au moins un paramètre de caractérisation de la routine informatique, – les moyens de traitement de données sont configurés pour, – associer à chaque routine informatique, le vecteur de caractérisation correspondant, – calculer au moins une mesure de corrélation entre la requête de recherche et tout ou partie des vecteurs de caractérisation, et – restituer, à partir de la base de données de routines, au moins une routine informatique, dite routine informatique de retour, en fonction de la mesure de corrélation et d’au moins un premier seuil de corrélation. Système selon la revendication 1, comprenant en outre des moyens de conversion (150) prévus pour convertir une requête, dite requête source, qui est exprimée dans un langage d’entrée vers la requête de recherche qui est exprimée en langage informatique, les moyens de conversion comprenant un processeur de langage (151) et au moins un deuxième système de mémorisation, dit base de données de langage informatique (152), prévu pour stocker une pluralité de tuples, chaque tuple comprenant une instruction prédéterminée de langage informatique et au moins une expression prédéterminée du langage d’entrée, – le processeur de langage étant configuré pour rechercher, dans la base de données de langage informatique, au moins une instruction informatique qui concorde avec la requête source. Système selon la revendication 2, dans lequel les moyens de caractérisation sont couplés à la base de données de langage informatique, pour alimenter la base de données de langage informatique à partir de tout ou partie des vecteurs de caractérisation. Système l’une quelconque des revendications 1 à 3, dans lequel les moyens de caractérisation mettent en œuvre au moins une méthode de caractérisation choisie parmi : l’analyse de complexité algorithmique et l’analyse dynamique de code. Système selon la revendication 4, dans lequel le paramètre de caractérisation est défini par : – le temps que met la routine informatique à produire un résultat, – l’espace mémoire utilisé par la routine informatique, ou – la consommation énergétique de la routine informatique. Système selon la revendication 4 ou 5, dans lequel le paramètre de caractérisation est défini par des caractéristiques des entrées et/ou sorties de la routine informatique. Système selon l’une quelconque des revendications 1 à 6, dans lequel les moyens de caractérisation sont compris dans le terminal informatique et/ou dans les moyens de traitement de données. Système selon l’une quelconque des revendications 1 à 7, comprenant en outre des moyens d’optimisation-réécriture de code informatique (160), et dans lequel lorsque la mesure de corrélation se trouve en deçà du premier seuil de corrélation, les moyens d’optimisation-réécriture de code informatique sont configurés pour optimiser automatiquement la routine informatique de retour à partir de la requête de recherche. Système selon la revendication 8, dans lequel le terminal comprend un environnement de développement intégré, dit IDE, adapté pour se connecter à la base de données de routines, le système étant en outre configuré pour, – créer un lien de filiation informatique entre la routine informatique de retour et une version optimisée de la routine informatique de retour, et – mettre automatiquement à jour au moins une routine informatique, dans l’IDE, à partir du lien de filiation informatique, lorsqu’une version optimisée de cette routine informatique est générée. Système selon l’une quelconque des revendications 1 à 9, comprenant en outre des moyens de génération automatique de code informatique par apprentissage automatique (170), et dans lequel, lorsque la mesure de corrélation se trouve en deçà d’un second seuil de corrélation, lequel est inférieur au premier seuil de corrélation, les moyens de génération automatique de code informatique par apprentissage automatique sont configurés pour générer automatiquement une routine informatique, dans la base de données de routines, à partir de la requête de recherche. Procédé (200) pour la création assistée par ordinateur de code informatique comprenant : – la fourniture (210) d’au moins un premier système de mémorisation, dit base de données de routines, prévu pour stocker au moins une routine informatique, – la fourniture (220) d’au moins un terminal informatique prévu pour émettre au moins une requête de recherche, – la fourniture (230) de moyens de caractérisation de code informatique, et – la fourniture (240) de moyens de traitement de données, – la fourniture (250) de moyens de conversion prévus pour convertir une requête, dite requête source, qui est exprimée dans un langage d’entrée vers la requête de recherche qui est exprimée en langage informatique dans lequel, les moyens de conversion comprenant un processeur de langage et au moins un deuxième système de mémorisation, dit base de données de langage informatique, prévu pour stocker une pluralité de tuples, chaque tuple comprenant une instruction prédéterminée de langage informatique et au moins une expression prédéterminée du langage d’entrée, dans lequel, – on configure les moyens de caractérisation pour former, pour chaque routine informatique de la base de données de routines, un vecteur, dit vecteur de caractérisation, comprenant au moins un paramètre de caractérisation de la routine informatique, – on configure les moyens de traitement de données pour – associer à chaque routine informatique, le vecteur de caractérisation correspondant, – calculer au moins une mesure de corrélation entre la requête de recherche et tout ou partie des vecteurs de caractérisation, et – restituer, à partir de la base de données de routines, au moins une routine informatique, dite routine informatique de retour, en fonction de la mesure de corrélation et d’au moins un premier seuil de corrélation, – on configure le processeur de langage pour rechercher, dans la base de données de langage informatique, au moins une instruction informatique qui concorde avec la requête source, et dans lequel, – on couple les moyens de caractérisation à la base de données de langage informatique, pour alimenter la base de données de langage informatique à partir de tout ou partie des vecteurs de caractérisation. Procédé selon la revendication 11, dans lequel on met en œuvre, par les moyens de caractérisation, au moins une méthode de caractérisation choisie parmi : l’analyse de complexité algorithmique et l’analyse dynamique de code. Procédé selon la revendication 11 ou 12, dans lequel le paramètre de caractérisation est défini par : – le temps que met la routine informatique à produire un résultat, – l’espace mémoire utilisé par la routine informatique, ou – la consommation énergétique de la routine informatique. Procédé selon la revendication 12 ou 13, dans lequel le paramètre de caractérisation est défini par des caractéristiques des entrées et/ou sorties de la routine informatique. Procédé selon l’une quelconque des revendications 11 à 14, comprenant en outre la fourniture (260) de moyens d’optimisation-réécriture de code informatique, et dans lequel lorsque la mesure de corrélation se trouve en deçà du premier seuil de corrélation, les moyens d’optimisation-réécriture de code informatique sont configurés pour optimiser automatiquement la routine informatique de retour à partir de la requête de recherche. Procédé selon la revendication 15, dans lequel le terminal comprend un environnement de développement intégré, dit IDE, adapté pour se connecter à la base de données de routines, le procédé étant en outre configuré pour, – créer un lien de filiation informatique entre la routine informatique de retour et une version optimisée de la routine informatique de retour, et – mettre automatiquement à jour au moins une routine informatique, dans l’IDE, à partir du lien de filiation informatique, lorsqu’une version optimisée de cette routine informatique est générée. Procédé selon l’une quelconque des revendications 11 à 16, comprenant en outre la fourniture (270) de moyens de génération automatique de code informatique par apprentissage automatique, et dans lequel, lorsque la mesure de corrélation se trouve en deçà d’un second seuil de corrélation, lequel est inférieur au premier seuil de corrélation, on configure les moyens de génération automatique de code informatique par apprentissage automatique pour générer automatiquement une routine informatique, dans la base de données de routines, à partir de la requête de recherche.