Utilisatrice:Eric.LEWIN/Programmation adossée à des exemples

La programmation adossée à des exemples est une approche de développement logiciel qui aide l'utilisateur à créer un logiciel en recontextualisant et en modifiant de petits exemples dans un ensemble plus vaste. Cette approche peut être facilitée par des outils permettant à un environnement de développement intégré ("EDI") d’afficher des exemples de code ou des documentations d’API relatives aux styles de programmation reconnus dans cet EDI. Les tactiques « d'emprunt » sont souvent utilisées à partir de sources en ligne, par les programmeurs délaissant l'EDI pour résoudre leur problème spécifique[1]. Le but d'une programmation adossée sur des exemples est de réduire le temps passé par les développeurs à la recherche en ligne. Idéalement, dans la programmation centrée sur les exemples, l’interface utilisateur s’intègre aux exemples de modules d’aide afin d’aider les programmeurs à ne pas quitter l’EDI. L’idée de ce type de « documentation instantanée » est de réduire les interruptions de programmation. [2] L'utilisation de cette fonctionnalité n'est pas limitée aux experts, car certains novices bénéficient des avantages d'une base de connaissances intégrée, sans recourir à de fréquentes recherches sur le Web ou à une navigation.

Contexte modifier

La croissance du web a fondamentalement changé la façon dont le logiciel est construit. L'augmentation considérable des ressources en informations et la démocratisation de l'accès et de la distribution sont les principaux facteurs dans le développement d'une programmation basée sur des exemples pour le développement de l'utilisateur final. Des didacticiels sont disponibles sur le web, accessibles en quelques secondes, ce qui élargit l’espace de ceux qui les écrivent : concepteurs, scientifiques ou amateurs. En 2012, 13 millions de programmes faisaient partie de leur travail, alors que seulement 3 millions d'entre eux étaient des programmeurs professionnels. Prévalence d'archives de codes en ligne, de la documentation, des blogs et des forums, tout ceci permet aux programmeurs de créer des applications en recherchant, modifiant et combinant de façon itérative des exemples.

L'utilisation du web fait partie intégrante d'une approche opportuniste de la programmation lorsque l'accent est mis sur la rapidité et la facilité de développement plutôt que sur la robustesse et la maintenabilité du code. Les programmeurs, novices et experts, utilisent couramment le web pour créer des prototypes, en faire une idée et les découvrir[3].

Pour développer rapidement des logiciels, les programmeurs écrivent souvent divers systèmes existants. Dans le cadre de ce processus, les programmeurs doivent souvent rechercher les composants appropriés et acquérir de nouvelles compétences. Ils ont donc commencé à utiliser le web à cette fin.

Lors du développement de logiciels, les programmeurs consacrent un cinquième de leur temps de programmation au web[3]. Ces gens utilisent le web pour accomplir plusieurs types d’activités. Les intentions d'utilisation du web varient en forme et en temps. Les programmeurs passent la plupart du temps à apprendre un nouveau concept, un temps moindre à revoir les détails d'un concept qu'ils connaissent déjà, et, sur une durée intermédiaire, ils utilisent le web pour clarifier leurs connaissances existantes.

La programmation adossée à un exemple essaie de résoudre le problème d'avoir à sortir de l'environnement de développement, pour chercher des références et des exemples au cours de la programmation. Par exemple, traditionnellement, pour trouver la documentation de l'API et des exemples de code, les programmeurs vont se rendre sur le site de référence du langage, ou interroger un moteur de recherche avec des requêtes spécifiques de l'interface de programmation[2]. Pour tenter d'apprendre une nouvelle fonctionnalité, les programmeurs utilisent des tutoriels en ligne, comme ressources d'apprentissage « en temps utile ». En outre, les programmeurs choisissent délibérément de ne pas se souvenir des syntaxes compliquées et d'utiliser plutôt le web comme une mémoire externe qui peut être consulté au moment de la nécessité[3].

Avantages modifier

Parmi les avantages d'une programmation adossée à des exemples, citons :

  • Prévention des erreurs d'utilisation [4] [5] ;
  • Réduction du temps de recherche d'exemples de code [1] [2] ;
  • Réduction du temps de recherche de la documentation API  ;
  • Clarification des connaissances existantes et rappel des détails oubliés .

Programmation émergente modifier

L'émergence peut être définie comme un processus par lequel des entités plus grandes, des modèles et des régularités se créent par le biais d'interactions entre des entités plus petites ou plus simples qui ne présentent pas elles-mêmes de telles propriétés. La grande quantité de code disponible publiquement sur le Web peut être utilisée pour trouver ce type de modèle et de régularité. En modélisant la manière dont les développeurs utilisent les langages de programmation dans leurs pratiques, il est possible de créer des algorithmes permettant de rechercher des idiomes communs et de détecter du code improbable[5].

Ce processus est limité à la quantité de code que les programmeurs sont disposés et capables de partager. Parce que les gens écrivent plus de code qu'ils n'en partagent en ligne, il y a beaucoup d'efforts dupliqués. Pour utiliser pleinement le pouvoir de la collectivité, il convient de réduire les efforts requis pour publier du code en ligne[6].

Exemples modifier

Blueprint [1]

Blueprint est un plugin pour Adobe Flash Builder qui ajoute automatiquement des requêtes au contexte du code, présente une vue, centrée sur le code, des résultats de la recherche, intègre l'expérience de recherche dans l'éditeur et conserve un lien entre le code copié et sa source. Il est conçu pour aider les programmeurs à effectuer des recherches sur le Web et leur permettre de se souvenir facilement des détails oubliés et de clarifier les connaissances existantes.

Il affiche les résultats d'un ensemble varié de pages Web permettant aux utilisateurs de parcourir et d'évaluer rapidement les résultats de recherche.

Blueprint est spécifique à une tâche, ce qui signifie qu'il recherchera spécifiquement des exemples dans le langage de programmation.

Redprint est un environnement de développement basé sur un navigateur pour PHP qui intègre des interfaces d'affichage spécifiques à l'API "exemple instantané" et "documentation instantanée". L'EDI prototype a été développé par Anant Bhardwaj, puis à l’Université de Stanford, en partant du principe que les exemples d’interfaces spécifiques aux tâches obligent les programmeurs à comprendre l’exemple de code trouvé. Redprint inclut donc également une interface de recherche spécifique à l’API[2]. L'interface de recherche spécifique à l'API recherche des exemples et de la documentation spécifiques à l'API.

Codex est une base de connaissances qui enregistre les pratiques courantes pour Ruby. Il utilise des données crowdsourcées issues de développeurs et recherche dans tous les codes, des exemples-type, d'une façon que, si quelqu'un code d'une manière étrange, Codex leur permet de savoir qu'ils sont en train de faire quelque chose d'inusuel.

Codex utilise des statistiques pour trouver du code mal écrit, un code syntaxiquement différent de celui qui est bien écrit, et avertir l'utilisateur. Il insère des annotations-modèle de façon à découvrir automatiquement les idiomes de programmation courants, et les annoter avec des métadonnées en utilisant le crowdsourcing. Il pratique la génération de bibliothèque pour construire un paquet utilitaire qui encapsule l'exemple pratique de logiciel émergent.

Un codelet est un bloc de code exemple, un widget d'assistance interactif qui aide l'utilisateur à comprendre et à intégrer l'exemple.

Recherche de code Bing [7]

Bing Code Search est une extension de Microsoft Visual Studio développée par une équipe composée de personnes de Visual Studio, Bing et Microsoft Research qui permet aux développeurs de rechercher des exemples de code et de la documentation dans Bing directement à partir d'IntelliSense.

Bing Code Search rassemble ses exemples de code à partir des ressources MSDN, StackOverflow, Dotnetperls et CSharp411.

Codota

Codota aide les développeurs à trouver des exemples de code Java typiques en analysant des millions d'extraits de code disponibles sur des sites tels que GitHub et StackOverflow . Codota classe ces exemples en fonction de critères tels que l'uniformité des modèles de codage, la crédibilité de l'origine et la clarté du code. Le plug-in Codota pour les IDE IntelliJ IDEA et Android Studio permet aux développeurs d'obtenir des exemples de code pour utiliser les API Java et Android sans avoir à quitter leur éditeur.

Voir également modifier

Références modifier

  1. a b et c Christopher Scaffidi, Joel Brandt, Margaret Burnett, Andrew Dove et Myers, SIG: end-user programming, , 1193–1996 p. (ISBN 9781450310161, DOI 10.1145/2212776.2212421)
  2. a b c et d Anant Bhardwaj, Date Luciano et Scott Klemmer, Redprint: integrating API specific "instant example" and "instant documentation" display interface in IDEs, , 21–22 p. (ISBN 9781450310147, DOI 10.1145/2046396.2046408)
  3. a b et c Joel Brandt, Philip Guo, Joel Lewenstein, Mira Dontcheva et Klemmer, Two studies of opportunistic programming: interleaving web foraging, learning, and writing code, , 1589–1598 p. (ISBN 9781605582467, DOI 10.1145/1518701.1518944)
  4. Stephen Oney et Joel Brandt, Codelets: linking interactive documentation and example code in the editor, , 2697–2706 p. (ISBN 9781450310154, DOI 10.1145/2207676.2208664)
  5. a et b Ethan Fast, Daniel Steffee, Lucy Wang, Joel Brandt et Bernstein, Emergent, crowd-scale programming practice in the IDE, , 2491–2500 p. (ISBN 9781450324731, DOI 10.1145/2556288.2556998)
  6. Thomas Lieber et Rob Miller, Programming with everybody: tightening the copy-modify-publish feedback loop, , 101–102 p. (ISBN 9781450315821, DOI 10.1145/2380296.2380342)
  7. Shiban, « Introducing Bing Code Search for C# », blogs.msdn.com (consulté le )

Liens externes modifier

[[Catégorie:Programmation informatique]] [[Catégorie:Interaction homme-machine]] [[Catégorie:Pages avec des traductions non relues]]