La littérature offre un large éventail de définitions du service logiciel, toutes
dépendantes d’un point de vue particulier et il n’y a toujours pas de consensus autour
d’une définition unique [Jones2005].
“Un service est un comportement défini par contrat qui peut être réalisé et fourni par n’importe quel composant afin d’être utilisé par n’importe quel composant, sur la seule base du contrat. ”
Bieber and Carpenter [Bieber2002].
“Service : Les moyens par lesquels les besoins d’un consommateur sont liés aux capacités d’un fournisseur.”
[MacKenzie et al 2006].
“Un service, au sens SOA, est une fonctionnalité exposée ayant trois propriétés : (1) le contrat d’interface vers le service est indépendant de la plate-forme, (2) le service localisé et invoqué dynamiquement, (3) le service s’auto-suffit, c’est-à-dire que le service maintient son propre état.”
Sayed Hashimi [Hashimi2003].
Nous proposons une définition qui se veut plus générale et qui fait intervenir à la fois le
point de vue du consommateur, et celui du fournisseur de service :
“Un service est une spécification de fonctionnalités pouvant être rendues par des fournisseurs s’y conformant. Le cadre d’utilisation d’un service par des consommateurs est défini par un contrat stipulant en outre un ensemble de propriétés extra-fonctionnelles.”
Cette définition distingue la spécification fonctionnelle d’un service, pivot permettant à
deux entités d’interagir et utilisé comme base commune lors de la conception logicielle de
consommateurs et fournisseurs, du contrat qui est propre à chaque fournisseur et qui n’a
de sens qu’une fois les entités liées.
II.1.1 Objectifs
Aujourd’hui les entreprises proposant des solutions dans le domaine des technologies
de l’information font face à une augmentation importante de la complexité des systèmes
informatiques. Il est courant que des infrastructures ou des ressources historiquement
indépendantes qui ont été acquises grâce à des fusions ou suite au rachat d’autres
entreprises, doivent être gérées par la même entreprise. Ces systèmes devraient pouvoir
être intégrés aisément, et interconnectés sans générer un problème de multiplication des
interfaces dû à des liaisons point à point [Channabasavaiah2003]. Ce type d’entreprise a
acquis au fil du temps un large éventail d’applications patrimoniales (legacy software)
aussi bien que des applications développées indépendamment qu’elle souhaiterait pouvoir
réutiliser facilement. L’intégration de tels systèmes est une tâche complexe et coûteuse
[Lee et al 2003] qui pourtant devient de plus en plus fréquente. L’approche à services
(SOC) s’est rapidement imposée durant ces dernières années comme une solution à ce
problème d’hétérogénéité.
La notion de service offre une granularité « à gros grain ». La logique des applications
est encapsulée et masquée derrière le service qui rend cette logique accessible à travers
des opérations dites « métier » (liées à un domaine particulier) de plus haut niveau,
exposées par le fournisseur de service aux consommateurs de ce service. En outre
l’approche à services permet de découpler les systèmes qui deviennent des
consommateurs et fournisseurs de service s’articulant autour de l’interface d’échange
qu’est le service. Ce couplage faible lié au masquage de l’hétérogénéité, en plus de
faciliter l’intégration et l’interconnexion de systèmes, offre de nouvelles possibilités et
permet de répondre aux besoins de nombreux autres domaines, tels que les applications
émergentes décrites dans l’introduction de cette thèse. Construire des applications
participant à une intelligence ambiante implique l’intégration d’objets communicants
hétérogènes. De plus ce genre d’applications présente des besoins importants en ce qui
concerne l’évolutivité et la flexibilité. Les objets de l’internet des choses sont en constante
évolution, que ce soit d’un point de vue matériel -le remplacement d’un objet physique- ou
logiciel -la mise à jour du logiciel pilotant ou utilisant l’objet-. C’est pour cela qu’un
système ciblant de telles infrastructures doit être suffisamment flexible pour supporter
l’évolution. Il en va de même pour les applications de taille importante comme les
serveurs d’applications qui, grâce à l’approche à services peuvent devenir modulaires et
proposer des offres « à la carte » [Desertot2006].
A la différence des systèmes monolithiques robustes mais peu flexibles et difficilement
maintenables ou évolutifs, la modularité [Parnas1975, Fabry1976] permet de gagner en
flexibilité tout en gérant efficacement les problèmes liés à l’évolution des logiciels. Un
système monolithique, c’est-à-dire d’un seul bloc, ne peut évoluer qu’en un tout tandis que
chaque module composant une application orientée services peut évoluer de manière
indépendante. Du fait du couplage faible entre ces modules orientés service, les
applications construites suivant l’approche à services peuvent ainsi évoluer brique par
brique.
La granularité « à gros grain » améliore significativement la maintenabilité et par
conséquent diminue les coûts de maintenance des applications construites selon
l’approche à services. L’approche à services s’est également révélée être un moyen efficace
pour réduire les coûts de développements et accélérer la production d’applications et ainsi
le retour sur investissement grâce aux principes de réutilisation et de composition. Dans
la lignée de l’approche à composants, l’approche à services favorise la réutilisation de
briques logicielles et prône la construction d’applications par composition de briques
existantes.
II.1.2 Des objets aux services
L’approche à services peut être vue comme le successeur et le prolongement des
approches à objets et composants, comme le montre la Figure 6 inspirée de l’analyse de
Racoon [Racoon 1997]. Cette analyse a montré que les tendances du génie logiciel
suivaient une évolution en forme de vagues successives. Chaque vague est représentative
d’une hausse de l’intérêt pour une approche particulière avant que cette dernière devienne
mature et laisse la place à la prochaine vague. Dans cette interprétation [Donsez2006],
l’approche à services s’est développée avec l’essor du modèle B2B (Business-to-business)
et des EAI (Intégration des applications d’entreprise) avant que ses concepts ne se voient
appliqués aux interactions M2M.
Les approches à objets et composants précédant l’approche orientée service prônent la
réutilisation de briques logicielles par le principe d’encapsulation. Les systèmes devenant
de plus en plus complexes et coûteux à développer il est préférable de réutiliser des
composants existants dits « sur l’étagère » (COTS pour Component/Commercial
Off-The-Shelf en anglais).
La réutilisabilité de briques logicielles déjà développées constitue un enjeu majeur du
génie logiciel. Il y a plus d’une dizaine d’années, l’approche objet [Gamma et al 1995]
donnait un premier élément de réponse à cette problématique. Les objets ont apporté un
ensemble de principes de conception
3parmi lesquels l’encapsulation : l’interface est
indépendante et séparée de ses mises en œuvre.
module objet composant
service ???
1990 1980 2000 2010instruction
In té rê t Temps client-serveur WWW EAI B2B M2MFigure 6. Vagues et tendances du génie logiciel [Donsez2006]
L’approche à composants est ensuite apparue définissant à travers le concept de
composant des regroupements cohérents et réutilisables d’objets [Szyperski1998]. Objets
et composants partageaient alors des motivations communes : l’encapsulation de la
logique et de propriétés accessibles par des interfaces bien spécifiées dans le but de
faciliter la réutilisation de logiciels.
Comme l’était le composant pour l’objet, le service est une montée en abstraction par
rapport au concept de composant [Dodani2004, FAROS2006]. Un service peut-être rendu
par un ou plusieurs objets ou composants dont les fonctionnalités sont encapsulées et
accessibles à travers une interface. De la même manière que dans l’approche à
composants, un service se présente alors comme une boîte opaque. Les interfaces et les
données exhibées par le service sont exprimées en termes métiers et permettent d’accéder
au contenu de ces boîtes par des opérations de haut niveau. Ce sont ces interfaces
également appelées spécifications de service qui sont au centre de l’approche à services et
qui permettent la réutilisation de services existants.
3 Parmi les principes de conception orientés objet, nous pouvons aussi citer l'abstraction (un objet possède un type de données et un comportement bien spécifié), le polymorphisme (capacité de prendre des formes différentes à l’exécution), l'héritage (possibilité d’enrichir un objet avec des extensions), l'identité (capacité de distinguer un objet parmi les autres).
II.1.3 De l’interface au contrat de service
Un service est défini par sa spécification, à laquelle il se conforme. Cette spécification se
résume souvent à une interface dite fonctionnelle, c’est-à-dire une interface exposant les
fonctionnalités rendues par le service. Néanmoins, même si la pratique pourrait le laisser
penser, un service (tout comme un composant), ne se définit pas du seul point de vue des
fonctionnalités. Un service peut spécifier en plus de ses propriétés fonctionnelles des
propriétés extra-fonctionnelles qui ne concernent pas directement ses fonctionnalités.
C’est le cas par exemple de la sécurité ou de la qualité de service : elles n’affectent pas
directement les fonctionnalités du service mais font tout de même partie de la définition
du service. Ce sont ces propriétés extra-fonctionnelles qui permettent, entre-autres, à un
consommateur de différencier deux prestataires de services similaires d’un point de vue
fonctionnel. Prenons l’exemple du tirage de photographies numériques en ligne. Plusieurs
prestataires proposent ce service. Toutefois, même si les fonctionnalités (qui dans cet
exemple sont le téléchargement de photos, leur traitement, leur impression et la livraison
à domicile) sont les mêmes, les offres se différencient autrement. Elles ne seront pas
forcément identiques concernant plusieurs aspects extra-fonctionnels : le tarif, la qualité
du papier photo, les délais de traitement et d’impression, la possibilité de suivi de la
livraison, l’ergonomie du site web, etc.
A partir de ce constat, nous pouvons déduire la règle d’équivalence suivante :
“Deux prestataires fournissent un service équivalent si et seulement si leurs propriétés fonctionnelles et extra-fonctionnelles sont équivalentes.”