Accueil > GitHub Copilot : retour d’expérience d’un expert
Eric Vernié

GitHub Copilot : retour d’expérience d’un expert

GitHub Copilot : retour d’expérience d’un expert

GitHub Copilot a été développé par GitHub et OpenAI, et les professionnels le qualifient d’« outil révolutionnaire pour les développeurs », car il combine l’Intelligence Artificielle et la programmation collaborative afin d’améliorer l’efficacité et la qualité du code.

GitHub Copilot accélère le développement en proposant des suggestions en temps réel lorsque vous écrivez du code. Il adapte le plus souvent ces suggestions en fonction du contexte et de votre style de codage. Il permet de se concentrer sur des aspects plus créatifs du développement tout en proposant l’automatisation de tâches répétitives. Enfin il est disponible pour plusieurs Environnements de développement, tels que Visual Studio Code, Visual Studio, JetBrains et Neovim.

Ayant utilisé en 2021 la version en préversion, qui était selon moi un outil de complétion de code amélioré, est-ce que cette nouvelle version basée sur le modèle GPT4 va tenir toutes ses promesses et réellement nous apporter l’efficacité citée plus haut ? Sera-t-elle à la hauteur ?

Pour profiter au mieux des possibilités de GitHub Copilot, il faut se fixer un objectif atteignable et qui aura une réelle utilité. Pour les uns, cela sera d’améliorer le code, de réduire la dette technique, de refactoriser du code, de corriger des bugs et pour les autres d’apprendre de nouvelles plateformes, de nouveaux langages, d’ajouter des fonctionnalités, etc. GitHub Copilot a été entraîné sur des milliards de lignes de codes provenant des repos GitHub publics ; il y a de quoi faire.

Mon objectif est double :

  • Apprendre un nouveau langage, en l’occurrence Python, afin de me mettre à niveau par rapport à l’équipe avec laquelle je travaille.
  • Sur un sujet qui aura une réelle utilité pour l’équipe.

Si vous souhaitez vous familiariser avec GitHub Copilot, voici le lien qui vous permettra d’obtenir une licence d’essai (bien démarrer avec GitHub Copilot – Documentation GitHub). Sinon, il existe des licences individuelles, Business et Entreprise.

 

Utilisation de GiHub Copilot

 

Dans cet article, nous allons utiliser GitHub Copilot avec Visual Studio Code. Voici ce qu’il propose :

  • Suggestions en ligne :
    • Au fur et à mesure que vous écrivez du code, Copilot fournit des suggestions en ligne pour vous aider à coder plus efficacement.
    • Acceptez les suggestions à l’aide de la touche de tabulation.
    • Vous pouvez également utiliser des commentaires de code pour spécifier le type de suggestions que vous recherchez.

 

  • Caractéristiques du chat :
    • Copilot Chat vous permet d’interagir avec Copilot via une interface de chat.
    • Utilisez le chat pour demander de l’aide, générer ou refactoriser du code, produire des commentaires sur la documentation ou créer des tests unitaires.
    • Résolvez les erreurs ou posez des questions relatives à votre code.
    • Découvrez et configurez votre configuration VS Code à l’aide des fonctionnalités de chat.

 

  • Commandes :
    • /doc : ajouter de la documentation.
    • /explain : obtenir des explications sur le code.
    • /fix : proposer des correctifs pour le code sélectionné.
    • /tests : ajouter des tests
    • /help : accéder à Copilot Chat pour obtenir de l’aide

 

De l’importance de l’invite (Prompt)

 

Comme il est possible de lui écrire ou de lui parler en langage naturel, la précision de la demande est primordiale pour que GitHub Copilot vous suggère la meilleure réponse possible.

Les quelques principes de base suivants vous aideront dans cette tâche :

  • Concentrez toujours votre invite sur une tâche unique bien définie ou une question. Cette clarté est essentielle pour obtenir des réponses précises et utiles de GitHub Copilot.
  • Vérifiez que vos instructions sont explicites et détaillées. La spécificité conduit à des suggestions de code plus applicables et précises.
  • Tout en étant spécifiques, les invites doivent être concises et aller droit au but. Cet équilibre garantit la clarté sans surcharger Copilot ou compliquer l’interaction.
  • Utilisez des noms de fichiers descriptifs et gardez les fichiers associés ouverts. Cela fournit à GitHub Copilot un contexte riche, ce qui entraîne des suggestions de code plus adaptées.

Pour en savoir plus sur le sujet, consultez la documentation Microsoft : Introduction à l’ingénierie des invites avec GitHub Copilot – Training | Microsoft Learn

 

Présentation du projet

 

Le but du projet que nous prendrons en exemple est de valider un Json Web Token (JWT) lors de l’appel à une Api Rest, afin d’autoriser ou non l’exécution d’une méthode. La validation devra se faire au dehors de l’appel de la méthode, mais systématiquement avant chaque appel. Les étapes seront les suivantes :

  • Mettre en place de l’environnement de développement
  • Comprendre et créer une arborescence de projet Python
  • Créer et exécuter une API Rest
  • Ajouter du code pour la validation du Jeton
  • Ajouter des tests
  • Commenter le code et ajouter de la documentation au format Markdown

 

Environnement de développement

 

Pour que ce projet se déroule dans les meilleures conditions, j’ai utilisé avec Visual Studio Code un devcontainer réduit à sa plus simple expression.

Création d’un container contenant python version 3.11 et installation des extensions Copilot et rest-client

 

Une fois que le Devcontainer est créé, nous avons accès à l’environnement d’exécution de Python : pas la peine de l’installer sur son poste local.

L’environnement d’exécution de Python

 

Comprendre et créer une arborescence de projet Python

 

Je suis devant une feuille blanche : il n’y a encore aucun fichier dans mon projet, et comme je souhaite démarrer dans les meilleures conditions, mes premières demandes s’orienteront sur la découverte et la création de la structure de base d’un projet Python.

 

Q : Quelle est la structure typique d’un projet python ?

Quelle est la structure typique d'un projet python

 

Le résultat est plutôt satisfaisant, car non seulement il décrit la structure du projet, mais il communique également des informations essentielles quant à l’environnement Python lui-même.

Pour en apprendre plus, on pourrait lui poser les questions suivantes :

Q : Donne-moi des précisions sur l’environnement virtuel.

Q : Quelle est la bibliothèque la plus populaire pour faire des tests ?

Q : C’est quoi la commande pour installer les dépendances ?

Il est également possible de préciser vos intentions en utilisant des mots clés de Visual Studio Code.

Par exemple, je souhaiterais pouvoir demander à GitHub Copilot de créer l’arborescence du projet Python.

 

Q : @workspace /new Peux-tu me construire une arborescence typique d’un projet python avec les fichiers nécessaires ?

Peux-tu me construire une arborescence typique d'un projet python avec les fichiers nécessaires ?

 

Le fait de rajouter @workspace /new permet à Copilot de nous proposer directement une commande Visual Studio Code afin de créer la structure du projet (ce que je m’empresse de faire).

Une alternative est de lui poser la question.

 

Q : Existe-t-il un outil pour créer une structure de projet Python ?

Il vous répondra par l’affirmative :

pip install cookiecutter et cookiecutter https://github.com/audreyfeldroy/cookiecutter-pypackage.git

 

Créer et exécuter une API Rest

 

De ma feuille blanche, je pars sur de bonnes bases a priori ; je précise a priori, car il faudra toujours faire contrôler ce qui est généré par un œil expert surtout en phase d’apprentissage.

L’arborescence et les premiers fichiers nécessaires ont été créés, je vais pouvoir commencer à coder, ou plutôt je vais demander à GitHub Copilot de le faire pour moi.

 

Q : Quelle est la bibliothèque la plus populaire pour une API Rest ?

Vous noterez ici que je ne précise pas Python, car en toute logique l’outil est capable désormais de comprendre mes intentions, de savoir que c’est dans le contexte Python que je pose la question.

GitHub Copilot me répond que Flask-Restful est aujourd’hui la plus populaire. Merci Copilot, c’est tout ce que je voulais savoir ! J’ouvre alors mon fichier vide main.py

 

Q : Peux-tu m’écrire un point d’entrée Hello World ! avec Flask ?

Peux-tu m'écrire un point d'entrée Hello World ! avec Flask

 

Copilot nous fait une suggestion que l’on peut accepter ou pas. J’imagine que le code est correct, et cela ressemble à une structure de code que je connais déjà dans d’autres langages.

On notera que dans l’éditeur, certaines lignes sont soulignées : on peut demander à GitHub Copilot de corriger le problème ou de nous expliquer comment le faire.

corriger le problème ou de nous expliquer comment le faire

 

Il nous donne la réponse à laquelle nous pouvions nous attendre : c’est un problème de dépendances à installer. Mais surtout, il communique une information capitale lorsqu’on est en phase d’apprentissage : la ligne de commande à utiliser pour installer les dépendances. Ne perdons plus de temps !

la ligne de commande à utiliser pour installer les dépendances

 

Ajouter du code pour la validation du Jeton

 

C’est bien gentil le Hello World, mais est-ce que Copilot est capable d’aller un peu plus loin et de m’aider sur un vrai cas : celui de valider un Jeton de type JWT ?

Pour cela, il va falloir l’aider en lui expliquant clairement les intentions de manière précise, synthétique et courte. Par exemple, dans un fichier nommé decorator.py on y ajoute les commentaires suivants :

 

On laisse ouvert le fichier et on lui demande de nous proposer une solution.

 

Q : Ecrire un décorateur qui valide le jeton

Ecrire un décorateur qui valide le jeton

 

Non seulement il me propose la structure d’un Decorator Python, mais en plus, il me suggère dans sa réponse – en commentaire dans l’image ci-dessus – de créer une méthode qui décode un jeton JWT.

À cette étape, j’attire votre attention sur le fait que je ne connais pas du tout Python. En revanche, je sais comment est formé un jeton JWT. Je vais donc préciser ma demande, comme illustré ci-dessous.

 

Q : Ecrire une méthode qui décode un jeton JWT

Ecrire une méthode qui décode un jeton JWT

 

Basée sur mes recommandations, à première vue, la réponse me semble pertinente ; il y a un peu de peaufinage à faire, mais au moins elle fonctionne ! Et si tel n’est pas le cas, il suffit de demander à GitHub Copilot de nous expliquer pourquoi avec la commande /explain ou de nous proposer une correction avec la commande /fix.

Dans tous les cas, sur ce type de fonction critique, il faudra repasser çà la moulinette GitHub Copilot et lui demander par exemple :

 

Q : Est-ce que la bibliothèque Jose pour la validation d’un JWT est fiable ?

Est-ce que la bibliothèque Jose pour la validation d'un JWT est fiable

 

Ajouter des tests

 

Les tests unitaires font partie de la vie du développeur, c’est une tâche répétitive, pas toujours gratifiante pour certains. Demandons donc à GitHub Copilot de nous aider.

Dans le fichier qui contient le code, on invoque GitHub Copilot en lui précisant la commande /tests tout en ouvrant le fichier test_main.py créé auparavant et dans lequel nous voulons que les tests atterrissent.

Ajouter des tests

 

À la manière d’un merge, GitHub Copilot, vous propose d’insérer le test (à droite sur l’image ci-dessus) dans le fichier ciblé.

Ici je n’ai qu’une seule méthode, mais s’il y en avait plusieurs, GitHub Copilot génère l’ensemble des tests pour l’ensemble des méthodes.

Est-ce que le test proposé est suffisant ?

Sans doute pas, il faudra affiner un peu le code, mais pour une session d’apprentissage expresse d’un nouveau langage et de son environnement, je trouve qu’il est tout à fait pertinent comme binôme de programmation.

 

Ajouter de la documentation

 

Je finirai par une tâche qui nous incombe tous : documenter son code, mais que l’on repousse le plus souvent possible, sachant qu’en phase de développement la signature des méthodes peut changer.

Avec GiHub Copilot il suffit d’utiliser la commande /doc, afin d’ajouter les commentaires sur la ou sur les méthodes présentes dans le fichier de code.

Ajouter de la documentation

 

J’étais très sceptique à ce sujet, mais au même titre que le Copilot de Bing (ChatGPT), il faut vraiment l’expérimenter pour comprendre la puissance de GitHub Copilot dans ce domaine.

Ici je précise que je veux le résultat en français, car par défaut la réponse est en anglais. Il est bien évidemment possible dans les paramètres de lui préciser la langue par défaut.

D’ailleurs, nous pouvons nous demander si GitHub Copilot est plus pertinent dans la langue de Shakespeare ? Ayant écrit ce même exercice dans les deux langues, je n’ai pas constaté de différence. En revanche, ce qui est sûr, c’est que pour la même demande, GitHub Copilot peut vous suggérer deux réponses pas totalement identiques.

 

Enfin, cerise sur le gâteau, nous pouvons lui demander d’écrire de la documentation au format markdown, ce qui est toujours une sinécure.

Q : Peux-tu écrire dans le fichier markdown la documentation relative à la méthode validate_token #file decorator.py ?

Il ne faudra pas hésiter à reformuler la demande si la suggestion proposée n’est pas satisfaisante.

 

Q : Pourrais-tu y inclure plus de détails, par exemple, que c’est un décorateur et ajouter un exemple d’utilisation ?

Allez voir le résultat sur ce rRepo EricVernie/GHCDecorator (github.com), tout en gardant à l’esprit que 100% de la documentation et 90% du code ont été générés par GitHub Copilot.

 

Conclusion : mon avis sur GitHub Copilot

 

Est-ce que Copilot m’a convaincu ? La réponse est assurément oui. J’ai appris en quelques heures comment écrire, utiliser, installer, tester, débuguer, corriger du code Python, tout en restant dans mon éditeur favori. J’ai même été bluffé lors de la création et l’écriture de la documentation.

Est-ce qu’il faut lui faire une confiance aveugle ? Sans doute pas : il faut garder à l’esprit que GitHub Copilot est basé sur des milliards de lignes de code qui ne sont pas toutes exemptes de bugs. Nous sommes responsables de la qualité et de la sécurité de notre code, et il faudra toujours un œil expert pour vérifier la pertinence de ce que nous propose GitHub Copilot.

À noter : dans cet exercice, j’ai laissé volontairement quelques lignes de code proposées par Copilot qui me semblent problématique en termes de sécurité, si vous souhaitez y jeter un coup d’œil je ne peux que vous encourager à aller les découvrir sur ce repo : EricVernie/GHCDecorator (github.com)

Est-ce qu’en utilisant des méthodes plus traditionnelles j’aurais été aussi efficace, ou tout du moins aussi rapide à appréhender une nouvelle plateforme de développement ?

Aujourd’hui, je n’en suis plus si sûr, car en partant d’une page blanche, en moins de 24 heures, j’avais un environnement et du code opérationnel qui répondait à mes premières attentes.

Ce qui est sûr et que j’ai pu constater, c’est que GitHub Copilot apprendra de vous et la qualité des invites (Prompts) est primordiale. Votre expérience dans le développement est un plus, qui aidera GitHub Copilot à comprendre vos intentions.

Offres d'emploi consultant Cloud Paris Lyon Nantes Cellenza

Nos autres articles
Commentaires
Laisser un commentaire

Restez au courant des dernières actualités !
Le meilleur de l’actualité sur le Cloud, le DevOps, l’IT directement dans votre boîte mail.