2.1. L’activité de réutilisation

Les recherches qui s’intéressent à la conception de logiciels et aux processus de réutilisation montrent que l’activité des concepteurs de programmes informatiques connaît souvent une organisation opportuniste et que certains phénomènes de réutilisation de solutions ou de raisonnement par analogies ont lieu. Alors que beaucoup d’études s’intéressant aux situations de conceptions rendent peu compte de l’exploitation de solutions antérieures en se centrant sur des raisonnements amenant à l’élaboration de solutions provenant de connaissances génériques « stockées en mémoire », il semble que, dans ce contexte précis de la conception logicielle, l’élaboration d’une solution se base souvent sur l’évocation de connaissances génériques et sur la récupération de représentations externes ou internes de solutions développées pour des problèmes analogues (Détienne, 1996 ; Burkhardt et Détienne, 1995 ; Détienne et Burkhardt, 2001 ; Guindon, 1990 ; Visser et Hoc, 1990). Dans l’objectif de réduire les coûts de développement, la recherche en génie logiciel a permis de proposer aux concepteurs des composants logiciels réutilisables, aptes à être récupérés et modifiés en fonction du contexte. Ces outils de réutilisation préconisent une approche descendante, c’est-à-dire allant des composants logiciels réutilisables à haut niveau d’abstraction au développement de programmes ad hoc. Or Détienne (op. cit.) et Burkhardt et Détienne (op. cit.) montrent, dans leurs études empiriques, que la réutilisation de solutions existantes entraîne des processus descendants mais aussi ascendants, c’est-à-dire depuis des solutions ad hoc vers des solutions génériques. Par ailleurs, contrairement à l’idée généralement admise dans la communauté informatique qu’il faut organiser et présenter les composants réutilisables de manière formelle et abstraite, les études empiriques de (Burkhardt et Détienne, op. cit.) montrent que les concepteurs ont besoin de recourir aux exemples, fortement contextualisés. Dans une étude de Rosson et Carroll (1993), les auteurs montrent que les concepteurs ne réutilisent pas les classes de programmes existantes, mais plutôt l’application-exemple disponible, car elle leur fournit des informations implicites supplémentaires, en particulier sur le contexte. La réutilisation de solutions en situations de conception mobilise des mécanismes étudiés par le champ de recherche du raisonnement à partir de cas : étude de la situation cible, récupération d’une situation source, comparaison des deux, mesure de leur similarité, puis proposition d’une issue à la situation cible inspirée de la situation source, « résolution » de la situation cible et enfin transformation de la situation cible « résolue » en nouvelle situation source. Mais le raisonnement par analogies s’intéresse classiquement aux situations plutôt bien définies, avec une solution. Or dans le cas des situations de conceptions ce n’est pas le cas, la situation est ouverte et mal définie. En génie logiciel, il existe une classification des situations de réutilisation basée sur le type d’élément réutilisé et le type d’activité dans laquelle intervient la réutilisation. Elle propose trois types de réutilisation : l’extraction de code d’une application existante, la spécialisation de composants issus d’une librairie et l’héritage de classes. Détienne (1991, 2001) a quant à elle proposé une classification des situations de réutilisation selon le type d’épisodes de réutilisation et en particulier selon que l’épisode de réutilisation commence dès l’élaboration du code source ou non. Elle différencie les épisodes de « new code reuse » et de « old code reuse ». Un épisode de réutilisation de « new code reuse » débute lors de l’élaboration du code source. Pendant la conception du programme, le développeur anticipe et élabore une solution à un problème et envisage de la réutiliser pour d’autres problèmes similaires. Dans ce cas les deux solutions peuvent être deux instances d’une même solution parente ou avoir seulement une relation d’analogie. Dans le cas d’un épisode de réutilisation de « old code reuse », le concepteur récupère et adapte une solution développée par le passé pour une situation similaire. Dans ce cas, Détienne (op. cit.) suppose que les processus mis en jeu concernent surtout la mise en relation des deux solutions pour pouvoir concevoir la nouvelle, et elle distingue les cas où la réutilisation se fait de sa propre expérience ou de celle d’autres concepteurs. Avec cette classification, l’objectif de Détienne est de proposer une assistance à la réutilisation qui soit adaptée à la situation de réutilisation.