ECOM-1FO

Le projet eCOM consiste à concevoir et développer une application d’échange en ligne (commerce électronique, échanges de services…). suite ...

=Organisation=

Acronymes
Les enseignants : Les réalisations :
 * DD : Didier Donsez (didier.donsez@imag.fr)
 * SC : Sybille Caffiau (sybille.caffiau@imag.fr)
 * TR : Thomas Ropras (thomas.ropars@imag.fr)
 * DCS : Dossier de Conception Système
 * SAS : Schéma d'Architecture Système

Groupes eCOM-RICM 2016-2017
Les groupes sont imposés par les enseignants et seront donnés lors de la première séance.


 * Groupes eCOM-RICM 2015-2016
 * Groupes eCOM-RICM 2014-2015

Sujets 2016-2017
Vous devez choisir le domaine d'application dans lequel va s'inscrire votre projet. Des sujets sont interdits :
 * les sites de ventes de livres, CD, chaussures, alcool
 * les sites pornographiques

Votre projet ne doit pas nécessairement être un site commercial mais doit respecter les contraintes :
 * gestion de compte utilisateur (login propriétaire ou login OAuth)
 * envoi de mails
 * une transaction (transactions ACID) avec retours en arrière possible
 * (May) accès aux ressources externes

Planning des séances
La partie IHM et la partie Système sont menées en parallèle pendant toute la durée du projet. Pendant toutes les séances vous travaillerez en groupe, il est donc obligatoire pour tous les étudiants d'être présents à toutes les séances. Celles-ci sont composées :
 * du cours (CM)
 * du travail encadré (TD) : séance pendant lequel l'enseignant vous accompagnera pour la réalisation d'une étape de votre projet
 * du travail en autonomie : séance réservée au travail d'ECOM pendant laquelle vous travaillez entre étudiants
 * de permanences : séances pendant lesquelles vous pouvez demander l'aide d'un enseignant pour vous aidez à avancer. Ces séances sont également l'occasion pour vos enseignants de faire le point avec vous sur votre avancé, vous devez donc IMPERATIVEMENT signaler votre lieu de travail si vous n'êtes pas dans les salles prévues par ADE (par email à SC et TR).

An cas d’incohérence de planning avec ADE ; suivre ADE.
 * 13/09 08H00-11H15 : Introduction 1H00 (DD) ([[Media:presentationEcomSeance1-2016.pdf|transparents]]), CM Définition des besoins 2H00 (SC)
 * 13/09 15h45-18h30 : CM JavaEE & EJB 3h00 Cours JavaEE EJB (DD)


 * 20/09 08H00-11H15 : Tuto création de comptes AWS/Azure/Google, github, installation de webhook 1h30 (DD), Travail en autonomie (1H30)
 * 20/09 15h45-18h30: TD Besoins utilisateur (SC)


 * 27/09 08H00-11H15 : CM HTTP & Servlets/JSP 3h00 (DD)
 * 27/09 15h45-18h30 : Install JavaEE (Glassfish, JBossAS, Apache TomEE) 2h00 (DD), Travail en autonomie (1h00)


 * 04/10 08H00-11H15 : CM Conception IHM 1H00 (SC), TD Conception IHM 2H00 (SC)
 * 04/10 15h45-18h30 : Tutoriel EJB, Tutoriel Servlet/JSP/REST/WS 3h00 (DD)


 * 11/10 08H00-11H15 : Permanence Système (DD) + IHM (SC)
 * 11/10 15h45-18h30 : Travail en autonomie


 * 18/10 08H00-11H15 : Soutenance Conception (SC, TR, DD)
 * 18/10 15h45-18h30 : Permanence Système (TR) + IHM (SC)


 * 25/10 08H00-11H15 : Permanence Système (TR) + IHM (SC)
 * 25/10 115h45-18h30 : Travail en autonomie


 * 08/11 08H00-11H15 : Permanence Système (TR) + IHM (SC)
 * 08/11 15h45-18h30 : Travail en autonomie


 * 15/11 08H00-11H15 : Permanence Système (TR) + IHM (SC)
 * 15/11 15h45-18h30 : Travail en autonomie


 * 29/11 08H00-11H15 : Permanence Système (TR) + IHM (SC)
 * 29/11 15h45-18h30 : Travail en autonomie


 * 06/12 08H00-11H15 : Permanence Système (TR) + IHM (SC)


 * 13/12 08H00-11H15 : Soutenances finales (SC, TR, DD)

Modalités d’évaluation
La note d’ECOM est obtenue par l’addition de notes obtenues tout au long de la réalisation du projet, elle peut être différente pour chaque membre du groupe en fonction du travail fourni et constaté par les enseignants. Attention : elle repose sur la qualité du travail fourni autant que sur la quantité.
 * présentation soutenance conception (3 pts) : note affectée sur la présentation (qualité des slides, discours...), les réponses aux questions
 * présentation soutenance finale (3 pts) : note affectée sur la présentation (qualité des slides, discours...), les réponses aux questions
 * conception (5 pts) : note obtenue à partir des livrables de conception, de la prise en compte des remarques faites par les enseignants pendant la soutenance de conception, du travail fourni (et observé) et du contenu de la soutenance de conception
 * développement (5 pts) : note obtenue à partir de la qualité et quantité du code réalisé, la démo de la soutenance finale. En particulier, seront observés, la qualité de l'architecture de l'application, la qualité et robustesse du code et la mise en place des principaux concepts de la technologie JEE.
 * suivi de projet (4 pts) : cette note est obtenue par rapport aux livrables (qualité, livraison dans les délais...), la mise en place et bonne utilisation des outils collaboratifs, l'intégration continue, Livraison en continue, le contenu de la soutenance finale

Soutenances
Deux soutenances sont prévues : Dans les deux cas, les soutenances doivent présenter les parties GL, Système et IHM.
 * soutenance de conception le 18 Octobre 2016
 * soutenance de fin de projet le 13 Décembre 2016

Soutenance de conception

 * Salle :
 * Durée totale : 30 minutes
 * Utilisez des transparents pour présenter votre projet.

Vous devez présenter les étapes de conception réalisées et les résultats (choix techniques…). De plus, nous vous rappelons que pour le dimanche minuit, vous devez avoir rendu accessibles les livrables.

Contenu attendu dans votre présentation( à avoir au minimum dans vos slides) :

Pour la partie GL
 * Organisation de l'équipe (roles, ...)
 * Méthodologie de travail
 * Planning (envisagé)
 * Choix technologiques

Pour la partie Système
 * Architecture systeme du service
 * Nombre de Beans (diagramme de classe, type, ...)
 * Extensions réalisées et envisagées
 * Etat d'avancement dans les développements

Pour la partie IHM
 * Résultats de l’analyse de l’existant
 * Utilisateurs cibles, contexte d’utilisation et objectifs utilisateurs (ie objectifs de l’IHM)
 * Maquettes de la v0 et squelette du site (pour la plateforme cible)

Ordre de passage :

Respectez l'ordre établi. Faites attention au temps. Vous disposez de 30 minutes par soutenance pour : votre présentation et les questions. Vous devrez gérer le temps. Les remarques (d’amélioration) qui seront faites pendant cette soutenance par les enseignants devront être prises en compte pour la version finale (pris en compte dans la note finale).

//A compléter lorsque les groupes seront faits

ATTENTION : Si vous voulez modifier l'un des plannings, vous devez : Les modifications ne sont acceptées que jusqu'au dimanche précédent la soutenance.
 * trouver un autre groupe avec qui échanger
 * vous assurer que tous les membres de ce groupe acceptent l'échange
 * envoyer un mail à SC et DD pour informer du changement (avec le chef de projet de l'autre groupe en copie)

Soutenance de fin de projet

 * Salle :
 * Durée totale : 30 minutes
 * Utilisez des transparents pour présenter votre projet. Lors de votre passage vous devez présenter une démo PRÉPARÉE.

Arrivez avec l'application démarrée (on ne perd pas de temps) et 1 ou 2 scénarios (de test)
 * Préparez vous 30 minutes avant votre soutenance pour démarrer les instances Windows Azure (ou autre plateforme de Cloud de votre choix) avec le service développé.
 * Les démonstrations peuvent être faites sur vos machines personnelles cependant le service eCOM doit IMPERATIVEMENT s'exécuter sur une ou plusieurs instances de machines virtuelles sur le Cloud de votre choix

Contenu attendu dans votre présentation( à avoir au minimum dans vos slides) :
 * une présentation globale du projet
 * le processus de conception (illustré)
 * des évaluations
 * le bilan (pédagogique ET du projet/individuel ET groupe)
 * le temps consacré à la conception
 * le temps consacré au développement
 * les principales difficultés rencontrées

Ordre de passage :

Respectez l'ordre établi. Faites attention au temps. Vous disposez de 30 minutes par soutenance pour : votre présentation et les questions. Vous devrez gérer le temps. Les remarques (d’amélioration) qui seront faites pendant cette soutenance par les enseignants devront être prises en compte pour la version finale (pris en compte dans la note finale).

//A compléter lorsque les groupes seront faits

ATTENTION : Si vous voulez modifier l'un des plannings, vous devez : Les modifications ne sont acceptées que jusqu'au dimanche précédent la soutenance.
 * trouver un autre groupe avec qui échanger
 * vous assurer que tous les membres de ce groupe acceptent l'échange
 * envoyer un mail à SC et TR pour informer du changement (avec le chef de projet de l'autre groupe en copie)

Livrables
Deux rapports doivent être rédigés pour la partie Système : un document de conception système et un document d'évaluation système. Ces documents doivent être accessibles depuis le wiki (ils peuvent même être directement édités sur le wiki).

Vous pouvez ajouter les livrables que vous jugez utiles pour présenter le travail que vous avez réalisé. Pour ces livrables : numérotez les

Rendus
Chaque livrable est numéroté (détails du livrable ci-dessous) LX, sous une forme à respecter. Certains ont une date de rendu à respecter. Ci-dessous le résumé de ces contraintes :
 * L1 : 13/09 minuit : Email à SC et DD
 * L2 : 16/10 minuit : Wiki
 * L3 : 16/10 minuit : Wiki
 * L4 : 16/10 minuit : Wiki
 * L5 : ?
 * L6 : 16/10 minuit : Wiki
 * L7 : 16/10 minuit : Wiki
 * L8 : en continu : Wiki
 * L9 : en continu : Wiki
 * L10 : 12/12 minuit : Lien Git sur Wiki
 * L11 : 12/12 minuit : Lien sur Wiki
 * L12 : 13/12 lors du passage : Tableaux complétés et imprimés
 * L13 : 16/10 minuit : Lien Git sur Wiki
 * L14 : 12/12 minuit : Lien Git sur Wiki

Contenu
'L1. Composition des groupes et sujet'. Le sujet doit être validé par vos enseignants dès le premier jour du projet. Envoyez une description dans un corps de mail à DD et SC. Cette description doit contenir : un paragraphe descriptif du sujet dans lequel est particulièrement explicité l'adéquation du sujet et les requis (quelques lignes) 'L2. Dossier de conception Système'. Le Dossier de Conception Système (DCS) a pour but de permettre à toute personne de connaitre les principaux composants JEE de votre application ECOM. Cette connaissance doit pouvoir être acquise rapidement, sans avoir à entrer dans les détails de l'implémentation. Le DCS doit donc être de taille relativement limitée (5 à 10 pages, 20 pages au grand maximum). Le DCS est centré sur un schéma d'architecture système (SAS). Pour chaque composant et lien du SAS, le DCS doit fournir :
 * les membres du projet
 * le nom du chef de projet
 * le nom du scrum master
 * les rôles envisagés par chaque membre
 * le titre du sujet
 * Une description fonctionnelle : La description fonctionnelle d'un composant fait apparaître les attributs qui le composent, ainsi que les méthodes qu'il fournit. Attributs et méthodes seront associés à une courte description. Les besoins liées à la persistence ou aux aspects transactionnels peuvent également être explicités.
 * Une description d'implantation JEE : La description d'implantation décrit l'implantation du composant ou du lien dans l'environnement JEE. Un composant peut être implanté par un programme Java externe (client léger / client lourd JEE), par un servlet, par un bean ou par un objet POJO. Dans ces derniers cas, il faut préciser les caractéristiques des beans / POJO (local / distribué, session / évenementiel, stateful / stateless, etc). Un lien peut être implanté par une relation JEE, ou bien par conservation de référence de bean.

Le dossier de conception système doit être disponibles depuis votre page wiki.

'L3. Analyse des besoins'. Questionnaire et son analyse pour définir les besoins utilisateurs que doit satisfaire votre application.

L4.Maquette.

L5.SRS.

L6.Diagramme UML.

L7.Modèle de tâches.

L8.Scrum (waffle ou autre).
 * (Ils peuvent si vous le souhaiter être directement édités sur le wiki)
 * Le rapport de charge (benchmark) doit être (MUST) disponible sur le wiki.
 * Le rapport sur les métriques logicielles doit être (MUST) disponible sur le wiki.

L9.Journal.

L10.Dépôt Git. Votre code source doit être accessible en ligne avec un lien depuis votre fiche de suivi sur le wiki.

L11.Application en ligne.

'L12. Auto-évaluation de la quantité de travail réalisée'. IHM : [[media:System-Usability-ScaleLogicielComplet.pdf]] et [[media:EvalEfficacite.pdf]] Système : [[Media:FicheEval20152016-GROUPE-THEME.doc]]

'L13. Diapos de votre présentation de conception'.

'L14. Diapos de votre présentation finale'.

=Réalisations attendues=

Conduite et suivi de projet
Le projet eCOM est très court en durée. Vous utiliserez la méthodologie Scrum pour la conduite du projet dans chaque groupe. Vous pouvez vous inspirer de la méthode Lean Startup pour livrer rapidement votre application. Vous devez choisir un Scrum Master (unique ou tournant) : justifiez votre choix et la durée du sprint (justifiez votre choix). Vous devez prévoir :
 * product backlog
 * sprint backlog
 * sprint planning
 * démos
 * rétrospectives

Pensez à créer un wiki qui regroupera l'ensemble de vos documentations. Cela doit être une documentation Agile !!!!

(May) mettre en place des "poker planning"

Ces 2 premiers critères sont fixes !!!

Selon les principes de la méthodologie Agile, vous devez composer votre travail en fonctionnalités. Chacune fera l’objet d’une conception (système et IHM) et d’un développement. Conception ET développement constituent l’ensemble des réalisations attendues.

Conception système
La conception système est composée de deux réalisations principales : le modèle de donnée : il est vivement conseillé de définir le modèle de données aussi tôt que possible et d"en discuter avec les enseignants. le schéma d'architecture système (SAS) : ce schéma doit faire apparaître les composants qui vont constituer l'application, ainsi que les liens entre les beans. Un lien depuis un composant A vers un (ou plusieurs) composant(s) B signifie qu'une interaction peut avoir lieu depuis A vers B. Un lien peut être monovalué ou multivalué, monodirectionnel ou multidirectionnel.

Développement système
Pour chaque fonctionnalités conçues, le développement système sera réalisé en deux étapes.

Les étapes
Etape 1 : La première consiste à définir le cœur de l'application, c'est-à-dire le modèle de données et la logique métier, puis à réaliser un premier prototype qui démontre une bonne maîtrise des EJB (session et entity beans, annotations JAX-RS). L'application RESTful est seulement accessible par l'intermédiaire de clients type curl, jmeter, .... Il n'est pas demandé, de réaliser une interface web pour interagir avec l'application. L'application doit cependant offrir deux modes d’utilisation (administrateur et consommateur) et exécuter certaines requêtes avec des garanties transactionnelles.

Etape 2 : La seconde étape consiste à compléter le premier prototype (étape 1) avec les objectifs suivants :
 * Développement d'une interface Web basée sur le modèle MVC (SPA ou non) ;
 * Modification de la configuration de déploiement pour la haute disponibilité (HA) :
 * 1) Base de données externe (MySQL, Oracle, HSQL ...) en cluster (réplication)
 * 2) Mise en place de 2 frontends load balancer HAProxy en mode SSL terminaison (instructions)
 * Amélioration des fonctionnalités. En particulier, considérez les points suivants :
 * Renseignement de la notice relative à la protection de la vie privée.
 * Gestion de la concurrence et de la reprise sur panne avec des transactions ACID
 * Gestion asynchrone et transactionnelle de l'envoi des courriels via JMS et des EJBTimer (voir http://ecom.ow2.org/xwiki/bin/view/Main/fremail)
 * Gestion asynchrone et transactionnelle de l'envoi de SMS via JMS et des EJBTimer (fournisseurs SMS)


 * Ajout éventuel de fonctionnalités non prioritaires. De façon facultative, vous pourrez ajouter au prototype précédent quelques unes des fonctionnalités suivantes :
 * Gestion de l'internationalisation (i18n) des applications web et mobiles. Remarque : vous pouvez utiliser les principes et outils appris dans l'UE Communication Langagière.
 * Gestion des contenus multimedia (photos, videos, docs ...) avec Apache Jackrabbit
 * Stockage externalisé des contenus multimedia par des Content Delivery Networks (Amazon S3, Azure ...)
 * Suivi du click stream avec des Filters en vue d'une analyse Big Data avec Spark (Click Analytics, Recommender System).
 * Intégration de Memcached
 * Gestion rudimentaire d'une interface vocale avec un serveur vocal VoiceXML.
 * Utilisation de OAuth ou OpenID pour le login
 * Utilisation de services tiers via leurs APIs (voir le catalogue de Mashape)
 * Chat avec un opérateur du helpdesk (texte et/ou audio avec WebRTC)
 * Gestion d'un cloud privé avec OpenStack avec Fuel
 * Conditionnement de l'application mobile avec Apache Cordova
 * Traduction automatique et à la volée des champs des produits (nom, description, commentaires et avis) en fonction de la langue de l'usager, au moyen d'un service tiers (AxiMAG par exemple).

Remarque: certaines fonctionnalités sont assez indépendantes du noyau du projet : elles peuvent être mis en place dès le départ de l'étape 1.

Le déploiement en continu
Dès le démarrage, votre projet devra être géré selon les principes du DevOps : chaque version devra être déployé sur votre infrastructure de production en minimum de temps et sans interuption de services. Vous devez mettre en place des procédures de mise à jour des artifacts de l'application en mode rolling update et fast rollback (lien).

Remarques pour la mise en ligne : NE COMMITEZ JAMAIS vos credentials Cloud (AWS, Azure, Google ...) DANS UN DEPOT PUBLIC !!!!!

Votre compte serait utilisé pour créer plusieurs centaines de VMs et vous serez lourdement facturés (bitcoins, DDoD, ...) !

Vous devez obligatoirement mettre en place les points suivants dès le démarrage du projet :
 * Déploiement et retrait de l'application sur/de la plateforme cloud publique ou privée (UFR, Amazon, Azure, Google)
 * Performances (résultat du injection de charge avec Apache JMeter, Gatling, OW2 CLIF, BlazeMeter.com) : Astuce: utiliser les images Docker.
 * Reprise sur panne simple et alerte des ops avec Monit (ie relance simple du serveur en cas de "plantage").
 * Supervision des VMs du système déployé avec un de ces systèmes : Telegraf + InfluxDB + Grafana.
 * Rolling update (Blue-Green Deployment)
 * Fast forward (en cas de panne).

Vous devez optionnellement mettre en place les points suivants:
 * Déploiement avec Docker (dockerfile et docker-compose) pour l'application eCom (utiliser Glassfish).
 * Préparation d'images Docker
 * Injection de pannes avec Netflix Simian Army
 * Déploiement de l'application eCOM distribuée sur plusieurs VM CoreOS ou Ubuntu Core avec Vagrant et VirtualBox, Azure, Amazon EC2, Google's Compute Engine ...
 * Supervision des VMs du système déployé avec un de ces systèmes : Nagios, Shinken, Icinga, Filters, Tomcat Valves, Glimpse, Ganglia, Elastic Search, ...
 * Validation des services REST avec Swagger

Conception
La conception de la partie IHM du projet sera principalement composée :
 * Des modèles (tâches, IHMA)
 * De la charte graphique
 * De l'explication des choix de conception faits

Développement
Vous êtes libres des technologies à utiliser pour le développement de la partie IHM de l'application. Cependant, vous devez être capable de justifier vos choix. La partie IHM doit être distincte du noyau fonctionnel. Les codes de la partie présentation et du contenu de l'IHM doivent également être séparés. Veuillez aux noms que vous attribuerez. Les "zones" définies dans vos IHMA doivent être facilement identifiables dans le code que vous réalisez (ex : ID des DIV).

L'IHM des utilisateurs différents peut être gérée différemment. Par exemple, l'IHM de l'administrateur de l'application peut être une Interface en ligne de commande (pour l'initialisation du catalogue du service, l'ajout de nouveaux produits). Vous pouvez utiliser l'interface EJB facade directement ou bien une interface RESTful en utilisant directement Curl).

=Documentation=

Transparents de cours

 * Cours JEE/EJB(NDP) [[Media:EJB-ECOM2010.pdf]]
 * Cours JEE tiers presentation (SCB) : url
 * Cours GWT (SCB) : url
 * Cours maven (DD) : url
 * Cours versionning (DD) : url
 * Cours subversion (DD) : url
 * Cours forge (DD) : url
 * Cours http (DD) : url
 * Cours servlet (DD) : url
 * Cours IHM (SC) : [[Media:Cours2015-2016RICM.pdf]]
 * Annexe Cours IHM (SC) : [[Media:Annexe1-HeuristiqueNielsen.pdf]], [[Media:Annexe2-KMADe.pdf]], [[Media:Annexe3-Placement.pdf]], [[Media:Annnexe4-Accesssibilité.pdf]]

Doc utiles
http://proton.inrialpes.fr/~depalma/ecom/liens/liens.html
 * Transformation UML vers Relationnel
 * Guide d'administration de Glassfish 4
 * Tutorial JavaEE 7 (sources des exemples)
 * API JavaEE 7
 * Java EE Platform Specification
 * JPA implementation patterns
 * Présentation sur le Cloud Computing : http://erods.liglab.fr/icar2013/programme.html
 * Documentation et Training Kit sur Windows Azure : http://www.microsoft.com/en-us/download/details.aspx?id=8396
 * Documentation de Roboconf
 * Exemple avec LAMP http://roboconf.net/en/user-guide/lamp-example-part-1.html
 * Bootstrap

Quelques livres et technologies
REMARQUE: les livres sur JavaEE se periment très vite avec l'évolution de la spécification

JavaEE

 * Arun Gupta, Java EE 7 Essentials, Enterprise Developer Handbook, O'Reilly Media, August 2013 (+ 200 exemples de projets Maven)
 * Antonio Goncalves, Beginning JavaEE 7, APress, 2013, (examples pour Glassfish 4)
 * Peter A. Pilgrim, Java EE 7 Developer Handbook, Packt, 2013, ISBN 139781849687942
 * Mick Knutson, Java EE6 Cookbook for securing, tuning, and extending enterprise applications, Packt Publishing, June 2012
 * Holly Cummins and Timothy Ward, Enterprise OSGi in Action, March, 2013, 400 pages, ISBN: 9781617290138, http://www.manning.com/cummins/ (chapitre 2, chapitre 10)
 * Debu Panda, Reza Rahman, Ryan Cuprak, and Michael Remijan, EJB 3 in Action, Second Edition, March 2014, ISBN: 9781935182993, (source code of examples)
 * Andrew Lee Rubinger, Bill Burke, Enterprise JavaBeans 3.1, 6th Edition, O'Reilly Media, Final Release Date: September 2010, Pages

REST

 * The RESTful CookBook, How to do stuff RESTful, http://restcookbook.com
 * Bill Burke, RESTful Java with JAX-RS 2.0, 2nd Edition, Designing and Developing Distributed Web Services, Publisher: O'Reilly Media, Final Release Date: November 2013 (source code of examples)

Responsive Web Design

 * Matthew Carver, The Responsive Web, Manning, October 2014, ISBN: 9781617291241 http://www.manning.com/carver/ (source code)

AngularJS

 * Brad Green, Shyam Seshadri, AngularJS, Pub OReilly http://shop.oreilly.com/product/0636920028055.do (source code)

Bootstrap

 * Jake Spurlock, Bootstrap, Responsive Web Development, Pub: O'Reilly Media, http://shop.oreilly.com/product/0636920027867.do (source code)

Tests unitaires

 * Selenium

Intégration en Continue

 * Jenkins

Continuous Delivery

 * https://continuousdelivery.com/

Misc

 * Eric Ries, The Lean Startup, http://theleanstartup.com/

Questionnaires pour les sites web

 * [[Media:Questionnaire copy.pdf]]

Questionnaire SUS (évaluation de la satisfaction)

 * 
 * [[Media:System-Usability-ScaleLogicielComplet.pdf]]