Académique Documents
Professionnel Documents
Culture Documents
07 ARCHITECTURES APPLICATIVES
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Ce qu’il faut savoir
Typologie des
applications et Typologie et
Cartographie Qualification des flux
applicative
Architecture en Architectures
couches d'échange
Contraintes de
Patrons d'architecture
l'architecte
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
1
28/12/2018
ARCHITECTURES APPLICATIVES
Les différentes vues
Vue métier
Les processus métier et leurs
activités, l’organisation
Vu
Vue fonctionnelle
Les fonctions du SI supportant les
processus métier
Vue applicative
Les blocs applicatifs, les
messages, les données
Vue technique
Les matériels,les logiciels, les
technologies
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Rôle de l'architecte
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
2
28/12/2018
ARCHITECTURES APPLICATIVES
Organisation simplifiée de l’entreprise
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Choix à faire !
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
3
28/12/2018
ARCHITECTURES APPLICATIVES
Couches applicatives
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Couches applicatives détaillés
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
4
28/12/2018
ARCHITECTURES APPLICATIVES
Modèle Client-Serveur
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Modèle Client-Serveur Où placer les couches applicatives ?
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
5
28/12/2018
ARCHITECTURES APPLICATIVES
Architecture 1-tiers (mainframe)
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Architecture 1-tiers (client autonome)
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
6
28/12/2018
ARCHITECTURES APPLICATIVES
Architecture 2-tiers (client lourd)
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Architecture 3-tiers (client léger)
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
7
28/12/2018
ARCHITECTURES APPLICATIVES
Architecture n-tiers
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Exemple avec Java EE pour 4 tiers
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
8
28/12/2018
ARCHITECTURES APPLICATIVES
Exemple avec Java EE
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Composants
Propriétés
> Identification : nom unique, référencé dans un annuaire
> Indépendance : utilisable tout seul
> Réutilisation : utilisable dans différents contextes
> Intégration : combinable avec d’autres composants
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
9
28/12/2018
ARCHITECTURES APPLICATIVES
Composants distribués
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Composants distribués: RMI (Remote Method Invocation)
Le RMI permet d'appeler du code à distance. Plus précisément, nous allons exposer
une partie du code sur le client au travers d'interfaces. L'implémentation proprement
dite se trouvera du côté du serveur et le rôle de RMI sera de faire le nécessaire afin de
lier les interfaces aux implémentations distantes.
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
10
28/12/2018
ARCHITECTURES APPLICATIVES
Composants distribués: CORBA (Common Object Request Broker Architecture)
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Composants distribués: SOAP (Simple Object Access Protocol)
SOAP permet d’échanger des structures de données complexes en XML avec les
Namespaces, et la spécification XML Schéma (WSDL)
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
11
28/12/2018
ARCHITECTURES APPLICATIVES
Composants distribués: REST (Restfull API)
Consommer un WebService REST revient à appeler une simple URL en http (Post ou
Get) , le serveur renvoie sa réponse, la plupart du temps en XML
HTTP verb Resource
GET http://
api.openweathermap.org/data/2.5/weather?q=London,uk
Web
Client Server
12
28/12/2018
+ Une API mal « designée » (complexe et non affordante) ne sera pas utilisée
rapidement par les développeurs
+ Une Open API mal « designée » ne sera pas utilisée par les développeurs
> Les « puristes » : API RESTful issus de la littérature de référence (Roy Fielding,
Leonard Richardson, Martin Fowler, spécifications HTTP…)
> Les « pragmatiques » : Bonnes pratiques utilisées par les API des « Géants du
Web »
13
28/12/2018
REST : PRINCIPE
request
scoping
HTTP verb Resource
elements
GET http://
api.openweathermap.org/data/2.5/weather?q=London,uk
Web
Client Server
11
14
28/12/2018
+ Niveau 0 : État basique avec des XML dans tous les sens
4
1
2 5
15
28/12/2018
NIVEAU 1 - RESSOURCES
1/2
NIVEAU 1 - RESSOURCES
2/2
1 2
16
28/12/2018
NIVEAU 1 - RESSOURCES
Noms vs verbes
> On utilise des noms concret pour décrire les ressources de l’API.
SOAP/RPC/EJB… RESTful
1/2
Multiples resources
Utilisation sémantiquement correcte des verbes HTTP
Utilisation correcte des code de réponse
17
28/12/2018
2/2
1
3 5
18
28/12/2018
Codes retour
> Utilisation d’une collection de la structure d’erreur Json suivante
{ "error": "description_courte",
"error_description": "description longue, Human-readable",
"error_uri": "URI vers une description détaillée de l'erreur sur le portail
developper"
}
Codes retour
> Utilisation des STATUS CODES HTTP
HTTP Verb HTTP Status code Description
Basic success code. Works for the general case. Especially used on successful
200 OK.
first GET requests, or PUT/PATCH updated content.
Indicates that a resource was created. Typically responding to PUT and POST
201 Created.
request.
Indicates that the request has been accepted for processing. Typically
SUCCESS 202 Accepted. responding to an asynchronous processing call (for a better UX and good
performances).
The request succeeded but there’s really nothing to show. Usually sent after a
204 No Content.
successful DELETE.
206 Partial
The returned resource is incomplete. Typically used with paginated resources.
Content.
19
28/12/2018
Either it doesn’t make sense to call such a method on this resource or the authenticated user doesn’t have the right to do it.
POST /users/8000
405 Method not allowed. < 405 Method Not Allowed
< {"error":"method_does_not_make_sense", "error_description":"How would you even post a person?"}
There’s nothing to send that matches the Accept-* headers of the request. For example, you requested a resource in XML and
the resource is only available in JSON. This also works for i18n
GET /users
Accept: text/xml
406 Not Acceptable.
Accept-Language: fr-fr
< 406 Not Acceptable
< Content-Type: application/json
< {"error": "not_acceptable", "available_languages":["us-en", "de", "kr-ko"]}
Erreurs
> Utilisation des STATUS CODES HTTP
HTTP Status
HTTP Verb Description
code
The request call is right, but a problem is encountered. The client can’t
really do anything about that, so we suggest to return a 500 status code.
SERVER GET /users
500 Internal
ERROR < 500 Internal server error
server Error.
< Content-Type: application/json
< {"error":"server_error", "error_description":"Oops! Something went
wrong... "}
20
28/12/2018
3
1
4
2
21
28/12/2018
GET /clients/007
< 200 Ok
< { "id":"007", "firstname":"James",...}
< Link : <https://api.fakecompany.com/v1/clients>;; rel="self"; method:"GET",
<https://api.fakecompany.com/v1/addresses/42>;; rel="addresses"; method:"GET",
<https://api.fakecompany.com/v1/orders/1234>;; rel="orders"; method:"GET"
22
28/12/2018
Supports de HATEOAS
> Neuf Formats majeurs
+ Collection+JSON - http://amundsen.com/media-types/collection/format/
+ UBER - https://rawgit.com/mamund/media-types/master/uber-hypermedia.html
+ ALPS - http://alps.io/
+ HAL - http://stateless.co/hal_specification.html
+ Siren - https://github.com/kevinswiber/siren
+ Hydra - http://www.markus-lanthaler.com/hydra/
+ JSON-LD - http://json-ld.org/
+ json:api - http://jsonapi.org/
+ Mason - https://github.com/JornWildt/Mason
> « Cachabilité »
+ Les données d’une réponse à une requête peuvent être implicitement ou explicitement marquée comme « cachables » ou
pas, notamment à des fins d’optimisation des transferts réseau.
23
28/12/2018
Pluriel vs singulier
> Collection de ressources : /v1/users
> Instance d’une ressource : /v1/users/007
Casse
> Casse URL
+ spinal-case
POST /v1/specific-orders
24
28/12/2018
Pagination
> doit être gérée sur toutes les ressources de l’API
GET https://api.fakecompany.com/v1/customers?range=60-72
Pagination du 60 au 72ème customers
Filtres
> Limitation du nombre de ressources récupérées lors d’un appel en spécifiant des
valeurs attendues
GET
https://api.fakecompany.com/v1/offers?status=open,pending&price<1000&days=Saturday,Su
nday
< 200 OK
> Récupération des offers ayant les attributs status égal à « open » ou « pending »,
price inférieur à « 1000 » et days contenant « Saturday » ou « Sunday »
25
28/12/2018
Tris
> Ordonnancement des résultats de requête d’une collection : sort / dsc
> Exemples : Récupération des customers par ordre décroissant sur les attributs age,
puis marital_status puis par ordre alphabétique sur l’attribut name.
GET
https://api.fakecompany.com/v1/customers?sort=age,marital_status,name&desc=age,marita
l_status
< 200 OK
Recherche
Recherche par ressource
GET https://api.fakecompany.com/v1/offers/search?destination=gadeloupe,Ile*
< 200 Ok
< { "count" : 5,
"query" : "destination=Gadeloupe,Ile*",
"suggestions" : ["Guadeloupe", "ile Galápagos"],
"results" : [...] }
CURL –X GET \
-H "Accept: application/json" \
https://api.fakecompany.com/v1/search?q=running+paid
< [...]
26
28/12/2018
Cross-Domain
> CORS
+ L’utilisation du Cross-Domain est un prérequis pour toute API, lorsque que le consommateur
se situe sur un autre domaine que celui de l’API, ce qui est principalement vrai sur les SPA
> JSONP
+ En pratique CORS n’est pas (ou très mal) supporté par les anciens navigateur (IE 7,8,9).
+ Si votre API est à destination d’internet avec des utilisateurs finaux il sera nécessaire
d’implémenter JSONP en fallback de la mise en œuvre CORS
◦ Pas de négociation de contenu via les entête HTTP
◦ Toute les requête sont en GET, la méthode doit être spécifié en query-string
◦ Le body de la requête ne peux pas être utiliser pour acheminer les données, tout doit-être
passé via la query-string
POST /orders /orders.jsonp?method=POST&callback=foo
Versioning
> Dans l’URL, à la racine
+ GET /v1/orders
27
28/12/2018
SSL (Secure Socket Layer) – qui a posé les bases de TLS (Transfer Layer Security) – apporte,
avec TLS, les propriété suivantes à HTTP :
> Confidentialité
+ Le message est chiffré et ne peut pas être déchiffré par une tierce partie qui accèderait à son contenu
> Intégrité
+ Le contenu du message n’a pas été modifié dans l’intervalle de sa transmission entre les deux parties (émetteur et receveur)
> Authentification
+ Au niveau de la couche de transport – pas au niveau applicatif
Tous les appels à l’API (et aux provider d’authentification et d’habilitation) sont réalisés sur
HTTPS
Les ressources « Privées » qui manipulent les données liées à un utilisateur final
> Ex: /customers, /carts, /payments…
> Les enjeux consistent
+ à tracer l’application appelante
+ à vérifier que l’API manipule bien les données de l’utilisateur connecté
> Solution
+ Utiliser le flow OAuth2 adéquate
28
28/12/2018
OAuth propose
> à la fois un mode d’autorisation d’accès direct entre deux parties,
+ un client et un fournisseur de service (serveur),
> et entre trois partie :
+ client, partenaire (application), fournisseur de service (serveur).
> On parle de :
+ 2-legged OAuth
+ 3-legged Oauth
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
OAuth 1, première mouture du protocole, est l’objet d’un mémo publié par l’IETF à titre
d’information – et non pas de standardisation - dans la RFC 5849
> OAuth 1 n’est donc pas un standard Internet IETF (The Internet Engineering Task Force
(IETF®)
OAuth 2
> Est un standard IETF défini par la RFC 6749, à l’état «Proposed Standard » depuis Oct.
2012, et en attente de standardisation officielle.
> Rend obsolète OAuth v1
+ "This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC
5849. »
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
29
28/12/2018
Fédération d’identité
> OpenID Connect est l’extension de OAuth2, pour normaliser la partie « authentification ».
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
OAuth 1 OAuth 2
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
30
28/12/2018
Authentification + Autorisation
https://accounts.google.com/o/oauth2/auth?
scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email&
client_id=MY_API_KEY&
redirect_uri=https://www.myapp.fr/oauthcallback&
response_type=token
https://www.myapp.fr/oauthcallback#access_token=ya29.AHES6ZR_PPB0uVI24crULdOi3-
7w8nnAiDsSu6XsedBUYmQ&token_type=Bearer&expires_in=3600
Validation du token
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.AHES6ZR_PPB0uVI24crULdOi3-
7w8nnAiDsSu6XsedBUYmQ
{
"user_id": "115021724827002762647",
"scope": "https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/userinfo.email",
"expires_in": 3331,
"email": "achantalou@octo.com"
}
{
"id": "115021724827002762647",
"email": "achantalou@octo.com",
"verified_email": true,
"name": "Antoine Chantalou",
"given_name": "Antoine", "family_name": "Chantalou",
"link": "https://plus.google.com/115021724827002762647",
"picture": "https://lh3.googleusercontent.com/-yAm1YDs-
qoc/AAAAAAAAAAI/AAAAAAAAAIA/InzouodiMoU/photo.jpg",
"gender": "male",
"birthday": "0000-05-10", "locale": "fr", "hd": "octo.com" }
61
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
OAUTH2 : IMPLÉMENTATION
Librairies
> De nombreuses librairies implémentant OAuth 2.0 code serveur ou client, existent
pour les principales technologies du marché.
> Ces librairies sont notamment référencées sur le site d’OAuth à l’adresse suivante :
+ http://oauth.net/2/
> NodeJS
+ NodeJS OAuth 2.0 Provider
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
31
28/12/2018
Filtres et quotas
• Etre capable de filtrer les applications autorisées à consommer des ressources, par client_id (API key)
• Mettre en place des règles de quotas "fair use" afin de maitriser la scalabilité du socle et se prémunir des appels tiers qui
sont trop nombreux (bugs, attaque DoS/DDoS,…)
• limiter le nb d’appels par client_id (et IP source si appel serveur)
-> Front Nginx/Apache ou Firewall Applicatif ou API Management
OWASP
• Le Top 10 OWASP des failles sde sécurité doivent être adressée
• cf. https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
• Pas de mots de passes stockés en base, mais des hash asymétriques des “salted” passwords, via des algorithmes comme MD5
(bien) ouSHA-256/512 (mieux).
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
Phishing - Une application tierce (3rd-Party) native, ou javascript tente de Les informations de l’utilisateur : login, password, PIN, etc. ne doivent
récupérer les informations personnelles de l’utilisateur (login, mot pas être connues par les applications tierces -> utilisation de OAuth2
de passe…)
- Technique utilisée par des fraudeurs pour obtenir des OAuth2 :
renseignements personnels dans le but de perpétrer une Les informations de login, password sont présents uniquement sur
usurpation d'identité. les ST
L’authentification et l’autorisation des applications tierces reste à la
main dans la DSI via paramétrage
Portail développeur (avec validation)
“Man-in-the-Middle” MITM - L’application redirige l’utilisateur sur un “faux” site, ou les Ou paramétrage manuel sur le provider OAuth2
ou HDM informations login/password peuvent être récupérées (api_key/client_id + redirect_uri pour les application JS)
• Difficile à remarquer par l’utilisateur en pleine écran, sans Utilisation systématique de HTTPS
barre d’adresse
DoS / DDoS - Une attaque par déni de service « Denial Of Service attack » est - Front-end
une attaque ayant pour but de rendre indisponible un service, Firewall applicatif
d'empêcher les utilisateurs légitimes d'un service de l'utiliser. (ou Plate-forme d’API Management)
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
32
28/12/2018
SOAP vs REST
An addition with SOAP
Request Documentation (WSDL)
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope <wsdl:definitions targetNamespace="http://axis.test.com"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://axis.test.com"
xmlns:intf="http://axis.test.com"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
<soapenv:Body> xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ns0:additionner <!--WSDL created by Apache Axis version: 1.3
Built on Oct 05, 2005 (05:23:37 EDT)-->
xmlns:ns0="http://axis.test.com" <wsdl:message name="additionnerRequest">
<wsdl:part name="valeur1" type="xsd:int"/>
<wsdl:part name="valeur2" type="xsd:int"/>
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encod </wsdl:message>
ing/"> <wsdl:message name="additionnerResponse">
<valeur1 xsi:type="xsd:int">40</valeur1> <wsdl:part name="additionnerReturn" type="xsd:long"/>
</wsdl:message>
<valeur2 xsi:type="xsd:int">2</valeur2> <wsdl:portType name="Calculer">
</ns0:additionner> <wsdl:operation name="additionner" parameterOrder="valeur1
valeur2">
</soapenv:Body> <wsdl:input message="impl:additionnerRequest"
</soapenv:Envelope> name="additionnerRequest"/>
<wsdl:output message="impl:additionnerResponse"
name="additionnerResponse"/>
Response </wsdl:operation>
</wsdl:portType>
<wsdl:binding name="CalculerSoapBinding" type="impl:Calculer">
<soapenv:Envelope <wsdlsoap:binding style="rpc"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="additionner">
xmlns:xsd="http://www.w3.org/2001/XMLSchema" <wsdlsoap:operation soapAction=""/>
<wsdl:input name="additionnerRequest">
<wsdlsoap:body
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
<soapenv:Body> namespace="http://axis.test.com" use="encoded"/>
<ns1:additionnerResponse </wsdl:input>
xmlns:ns1="http://axis.test.com" <wsdl:output name="additionnerResponse">
<wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encod namespace="http://axis.test.com" use="encoded"/>
ing/"> </wsdl:output>
<additionnerReturn href="#id0" /> </wsdl:operation>
</ns1:additionnerResponse> </wsdl:binding>
<wsdl:service name="CalculerService">
<multiRef <wsdl:port binding="impl:CalculerSoapBinding" name="Calculer">
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" <wsdlsoap:address
id="id0" soapenc:root="0" location="http://localhost:8080/TestWS/services/Calculer"/>
</wsdl:port>
</wsdl:service>
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encod </wsdl:definitions>
ing/"
xsi:type="xsd:long">42</multiRef>
</soapenv:Body>
</soapenv:Envelope>
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
SOAP vs REST
SOAP limitations Not T2M No ATAWAD
1 2
◉ Slow security (VPN) ◉ SPA, native mobile apps
◉ Bad DX need Json REST APIs
◉ Bad TTFAC ◉ A REST Façade is always
required in front of SOAP
servers
Performances
6 issues SIX 3
Interop issues
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
33
28/12/2018
SOAP VS REST
Web Giants : API means REST
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Composants distribués: MicroService
> Simples
> Scalables
> Composables
> Facilement déployables
> Technos hétérogènes
> Facilement testables
> Mappent une organisation
humaine
> Application résiliente
> Des enjeux business
> Des use cases
> Des business rules
> Un référent par domaine
> Une approche par expérience utilisateur
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
34
28/12/2018
ARCHITECTURES APPLICATIVES
Applications n-tiers: Problématiques
Problématiques :
> Complexité
> Conception des composants et des applications
> Développement des composants et des applications
> Gestion des aspects transverses : sécurité, disponibilité, communication,
persistance, transactions…
> Interopérabilité des composants
> Administration des composants et des applications
> Sécurisation de bout en bout des applications
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Serveurs d’application & frameworks de développement
Frameworks de développement
> Cadres pour la conception et le développement de composants (déployés sur SA) et
d'applications à base de composants
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
35
28/12/2018
ARCHITECTURES APPLICATIVES
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Patrons de d’architecture
MVC
MVW
Patrons
MVVM
d’architecture Clean Architecture
logiciel
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
36
28/12/2018
ARCHITECTURES APPLICATIVES
Patrons de d’architecture: MVC (Modèle-Vue-Contrôleur)
Le patron MVC est le premier à avoir été défni en 1979 par Trygve Reenskaug pour les
applications SmallTalk. Néanmoins, c’est un patron qui est aujourd’hui rarement utilisé
tel que pour les frameworks d’application parce que la séparation des responsabilités
n'est pas complète.
Dans ce patron la répartition des responsabilités est faite entre trois parties:
> Le modèle contient la logique métier et l’état courant de l’interface durant le cycle
dialogue avec l’utilisateur. Il peut être aussi simple qu’une valeur entière ou aussi
complexe qu’un service nécessitant plusieurs niveaux de traitement avec
persistance des données.
> La vue porte toute la logique de présentation. Son travail consiste à afcher les
données du domaine et à recevoir des interactions de l'utilisateur. La partie vue peut
évidemment être composée de plusieurs « fenêtres » graphiques différentes. La vue
ne gère pas les interactions avec les utilisateurs mais les délègue à un autre
composant : le contrôleur.
> Le contrôleur reçoit les interactions de l’utilisateur de la vue et les traite en modifant
le modèle. Le code à l’intérieur du contrôleur correspond essentiellement à du code
de liaison (glue code) entre la vue et le modèle
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Patrons de d’architecture: MVC (Modèle-Vue-Contrôleur)
Une fois le modèle modifé, il est nécessaire d'afcher les données mises à jour vers
l'utilisateur.
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
37
28/12/2018
ARCHITECTURES APPLICATIVES
Patrons de d’architecture: MVP
Une manière d'améliorer MVC est de réduire le couplage entre la vue et le modèle. Si
nous établissons une règle selon laquelle toutes les interactions entre la vue et le
modèle doivent passer par le contrôleur, le contrôleur devient le lieu unique pour la
mise en œuvre de la logique de présentation et la vue est déchargée de toute logique.
Le contrôleur devient alors une présentation.
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Patrons de d’architecture: MVP
Chaque vue à son propre presenter qui communique avec un ou plusieurs Model
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
38
28/12/2018
ARCHITECTURES APPLICATIVES
Patrons de d’architecture: MVVM
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Patrons de d’architecture: MVW (Model-View-Whatever)
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
39
28/12/2018
ARCHITECTURES APPLICATIVES
Patrons de d’architecture: Clean architecture
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Patrons de d’architecture: Onion architecture
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
40
28/12/2018
ARCHITECTURES APPLICATIVES
Infrastructures logicielles
Exemples :
> Serveur web
> Serveur de bases de données
> Annuaire
> Serveur de fichiers
> Serveur d'applications
> Middleware (solution d'intégration)
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Architecture des flux et echanges d'informations
Exemples de flux
> Transfert de fichier
> Partage de fichier
> Appel de procédure distant
> Requête sur une base de données
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
41
28/12/2018
ARCHITECTURES APPLICATIVES
Périmètre
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Granularité / Fréquence
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
42
28/12/2018
ARCHITECTURES APPLICATIVES
Granularité / Fréquence
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
ARCHITECTURES APPLICATIVES
Architecture des flux
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
43
28/12/2018
08 OUTILS D’ANALYSE ET
D’IMPLÉMENTATION
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
Débogage Performance
Usine de Qualité de
développement code/couverture
Tests
Sécurité
unitaires/intégrations
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
44
28/12/2018
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
Il y a de nombreux outils de tests unitaires, avec la famille xUnit occupant une place
prépondérante.
Dans le monde Java, JUnit est le standard de facto, bien que TestNG soit aussi un
framework de test unitaire populaire avec un certain nombre de fonctionnalités
innovantes.
Pour les applications C#, le framework NUnit propose des fonctionnalités similaires à
celles fournies par JUnit, comme le fait Test::Unit pour Ruby. Pour C/C++, il y
a CppUnit, et les développeurs PHP peuvent utiliser PHPUnit.
Ces outils peuvent aussi être utilisés pour les tests d'intégration, les tests fonctionnels,
les tests web et ainsi de suite. De nombreux outils de tests web, comme Selenium,
WebDriver, et Watir, génèrent des rapports compatibles xUnit.
Les outils xMock permettent de mocker des objets pour simuler certains comportement
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
45
28/12/2018
Les tests de performance sont très importants dans le cycle de vie et surtout la
validation des logiciels.
On pourra distinguer deux familles d’outils: outils de tests de charge et outils de tests
de profiling.
> Test de charge: pour simuler des utilisateurs qui utilisent l'application. Dans cette
catégorie :
+ jmeter,
+ Opensta
+ grinder
> Profiling: pour mesurer le temps passé dans les différents appels de méthodes.
Dans cette catégorie :
+ jprobe,
+ jprofiler,
+ Netbeans Profiler,
+ viusalVM
+ Yourkit.
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
SonarQube est un logiciel open-source permettant d’analyser la qualité du code source d'un
projet de développement dans de multiples langages (JAVA, Javascript, PHP, C# …).
La couverture de code donne une indication sur les parties de votre application qui ont été
exécutées pendant les tests. Alors que ce n'est pas en soit une indication suffisante sur la
qualité du test.
Cobertura est un outil de couverture de code open source pour Java et Groovy qui est
simple d'utilisation et s'intègre parfaitement à la fois dans Maven et Jenkins.
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
46
28/12/2018
L’audit de code a pour but de rechercher des vulnérabilités dans le code source d’une
application. Ces vulnérabilités sont de plusieurs types : erreurs de conception et
erreurs de développement.
Il existe des outils analysant le code source afin d'y détecter des erreurs de
programmation ou même des problèmes de sécurité.
> FindBug
> PMD pour java
> FxCop pour dotNET
> IBM Rational AppScan Source
> HP Fortify
> SonarSource
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
C’est une usine logicielle, contenant des outils pour le développement et permettant
d’automatiser tout ce qui peut l’être et ce dans le processus de construction logiciel.
Elle joue un rôle important dans l’industrialisation des développements : c’est la clé de
voûte de l’intégration continue. Elle permet aussi de construire les livrables sous forme
de versions de/des applications.
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
47
28/12/2018
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
TESTS MANUELS
TESTS IHM
TESTS DE
SERVICES
TESTS
UNITAIRES
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
48
28/12/2018
◉ Tester quoi ?
> Un bout d’une application
> Une application isolée
> Les interactions entre applications
> Une fonctionnalité métier fournie par plusieurs applications
> Les fonctions d’un SI (création de VM…)
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
POURQUOI TESTER ?
◉ Préserver la qualité
> Les tests mettent en évidence les régressions
◉ Améliorer la productivité
> Les tests évitent de reproduire les mêmes erreurs aux mêmes endroits
> Les tests automatisés doivent être fréquemment rejoués, mitigeant la loi
du « Defect Cost Increase »
◉ Réduire les phases de recette et leur faire apporter plus de valeur
> Des tests automatisés filtrent des bugs avant la phase de recette, elle
peut alors se concentrer sur les cas plus compliqués qui n’étaient pas
testés jusque là
◉ Assurer la bonne implémentation des fonctionnalités
> Par la collaboration des équipes fonctionnelles et techniques sur la
définition des tests validant une fonctionnalité
> Les développements s’articulent autour de ces tests
Loi du « Defect Cost Increase » : Plus un bug est détecté tard plus il devient difficile à corriger
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
49
28/12/2018
Foncti
onnel
Développe
Admin
ur
Tests de performance
Tests unitaires
Tests de disponibilité
Tests d’intégration
Tests de sécurité
Techni
que
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
OÙ TESTER ?
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
50
28/12/2018
TESTS ET SERVICES
◉ Pour les architectures de services, il est vital de tester les interactions entre
applications, cela demande de bien s’outiller et d’être rigoureux
◉ Pour les tests bouchonnés chaque application doit fournir des bouchons
couvrant les cas représentatifs
◉ Des environnements de recette mal gérés ralentissent les projets et créent
des frictions
> Il faut monitorer les environnements
> Les applications doivent être opérationnelles : les projets doivent être
responsabilisés
> Leur utilisation doit être régulée
o Cycle de vie des données
◉ Pour des applications avec des cycles de vie différents il faut multiplier les
environnements; l’automatisation est alors primordiale
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
Synoptique
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
51
28/12/2018
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
MÉTRIQUES
GÉNIE LOGICIEL ET QUALITÉ LOGICIELLE 2018-2019 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL
52