Spécification des exigences

Introduction

Ce chapitre décrit les exigences du projet «Les colons de Catane». Il suit la norme IEEE 830-1998.

Avant-propos

Ce document permet de spécifier les différentes exigences et requis du projet "Les colons de Catane". Ces exigences devront être respectées afin de permettre la mise en place d’un logiciel durable et faciliter la phase de développement.

Définitions, acronymes et abréviations

Aucune jusqu’à présent.

Public visé et suggestions de lecture

Le public visé par cette spécification comprend les développeurs de l’application, les personnes responsibles du game design ainsi que les personnes chargées des tests.

Portée du projet

Les colons de Catane est un jeu passionnant, véritable succès parmi les jeux de société contemporains. Sorti en 1995 sous le nom "Les Colons de Catane", ce jeu de société reste l’un des plus vendus dans le monde et insufflé un véritable renouveau dans le monde des jeux de stratégie et de plateau.

Le système logiciel à produire est une version simplifiée du jeu de plateau Les colons de Catane, qui sera désigné par le terme "Les colons de Catane" dans le présent document.

Objectif du logiciel

L’objectif est de permettre à des joueurs à travers le monde de pouvoir organiser et réaliser des parties en ligne du jeu Les colons de Catane.

Références

  1. IEEE Standard 830-1993: IEEE Recommended Practice for Software Requirements Specifications

Vue d’ensemble

Le reste de ce document contient une description globale du système logiciel Les colons de Catane (section Description générale, les exigences fonctionnelles spécifiques (section Exigences fonctionnelles) et les exigences non-fonctionnelles du système (voir Exigences non-fonctionnelles.

Description générale

Perspectives du produit

Vous avez l’âme d’un colon et vous avez toujours eu envie de développer votre civilisation en récoltant des ressources et construisant des routes et des villes ? Il sera désormai possible de le faire en ligne via un appareil connecté.

Les colons de Catane est un jeu de plateau, de gestion et de stratégie « à l’allemande » où l’objectif est de développer ses colonies en construisant des routes, des villes et surtout en récoltant des ressources. Grâce à son plateau qui se construit à chaque début de partie, la rejouabilité est très bonne, car chaque partie sera différente avec des ressources placées à des endroits différents. Vous allez ensuite devoir récolter les bonnes ressources pour réussir à acquérir le plus de points possible pour être le premier à arriver à un nombre de points défini. Ce jeu est fait pour être joué entre 3 et 4 joueurs Ainsi, "Les colons de Catane" est une version électronique en ligne du jeu de plateau.

Bien que le système soit distribué et organisé en différents composants, les joueurs doivent le percevoir comme un seul logiciel. La figure Figure 1 présente l’architecture globale du logiciel. Un joueur crée un salon en interagissent avec un client Web, qui utilise le protocole HTTP pour communiquer avec (au maximum) le serveur de jeu. Une fois le salon composé de 3 à 4 joueurs il est alors possible de déclencer une partie. Les serveurs utilisent le protocole TCP/IP à l’aide d’une librairie Websocket pour communiquer avec le serveur de jeu et permettre des intéractions plus spontanées entre les joueurs.

diagram
Figure 1. UML Diagramme de déploiement

Fonctionnalités du produit

Le logiciel Les colons de Catane doit assurer plusieurs fonctions principales :

  1. Création de jeu : Permette aux joueurs de créer une partie et se découvrir entre eux.

  2. Le jeu : permettre aux joueurs de jouer à Les colons de Catane jusqu’à la victoire de l’un d’entre eux.

Les fonctions secondaires du logiciel :

  1. Permettre aux joueurs de configurer différents paramètres dans leur partie.

  2. Permettre aux joueurs d’inviter leurs amis à rejoindre une partie.

  3. Permettre aux joueurs de se reconnecter à une partie lors d’une perte de connexion

Les fonctions annexes du logiciel :

  1. Permettre au créateur de la partie d’administrer sa partie

  2. Permettre aux joueurs d’organiser des tournois.

Caractéristiques et classes d’utilisateurs

Le logiciel Les colons de Catane n’a qu’une seule classe d’utilisateurs : les joueurs. Les joueurs peuvent avoir différents niveaux : débutants, intermédiaires ou experts. Cependant, indépendamment de leur niveau, les joueurs doivent utiliser la même interface utilisateur pour jouer les uns contre les autres.

Par la suite dans une version future du projet certains joueurs, notamment les créateurs d’un lobby, auront plus de responsabilités au cours d’une partie en cours. Ils seront considérer comme administrateur de leur partie.

Environnement opérationnel

Le logiciel Les colons de Catane doit fonctionner sur tout système d’exploitation populaire et récent : Linux, Windows, ou MacOS.

Il doit également possible de déployer l’application serveur au sein d’un container comme Docker.

Le client Web devra fonctionner sur tout navigateur Web récent : Firefox, Chrome, Safari, ou Edge. L’application web devra être un minimum responsive pour être utilisable par des appareils ayant un écran de taille moyenne comme les tablettes numériques.

Contraintes de conception et de mise en œuvre

Langages de programmation

  1. Le serveur de jeu doit être développé en Java (version ≥ 11), en utilisant le Framework Spring.

  2. Le client doit être développé en NodeJS (version ≥ 18.12.1), en utilisant le Framework Vue.js.

Langage de conception

  1. Les documents sur le développement du logiciel doivent être écrits dans le format Asciidoc.

  2. Les diagrammes UML d’analyse, conception et mise en œuvre devront être réalisés en PlantUML.

Conception

Aucune contrainte de conception.

Mise en œuvre

  1. Les tests dynamiques doivent utiliser JUnit (version >= 5.0) et Jasmine (version >= 3.5.0).

  2. Le code doit journaliser ses principales opérations en utilisant https://www.slf4j.org [SLF4J].

Outils de construction

  1. Tous les artefacts logiciels doivent utiliser un outil de construction : Maven et npm pour NodeJs.

Outils de développement

  • Système de contrôle de version distribué Git.

  • Les interface de développement VS Code ou Intellij IDEA.

  • La plateforme de conteneurisation Docker.

  • L’application pour tester l’API Rest: Postman.

Bibliothèques et composants logiciels

  • Pour les requêtes à l’API depuis le front: Axios.

  • Pour le design et les feuilles de style de l’application: Tailwind

  • Pour toutes les données devant être protégées: Bcrypt

  • Pour éviter qu’une personne mal intentionné manipule une game en cours sans y faire réellement partie: JWT

Vérification

  1. Les doubles tests doivent être utilisés pour tester chaque composant indépendamment.

  2. Chaque test unitaire doit décrire son intention.

Documentation utilisateur

Aucune documentation utilisateur n’est requise pour la première version du logiciel.

Hypothèses et dépendances

Aucun jusqu’à présent.

Exigences reportées

  • Le créateur d’un salon peut administrer son instance et les différents joueurs l’ayant rejoint tout au long de la partie

  • Les joueurs peuvent se reconnecter à une partie lors d’une perte de connexion ou fermeture d’une instance

  • Organisation de tournois communautaire entre plusieurs joueurs

Exigences en matière d’interface externe

Interfaces utilisateur

L’interface devra permettre d’être utilisable sur la plupart des écrans en mode paysage. Il devra être simple à comprendre. Pour cela le plateau de jeu lors d’une partie devra impérativement au centre de l’écran.

Le plateau de jeu à besoin d’un interface.

Interfaces matérielles

Le logiciel n’interagit pas directement avec un quelconque dispositif matériel.

Interfaces logicielles

La partie client du logiciel doit fonctionner sur des navigateurs web commun (chromium, firefox).

Interfaces de communication

Dans un premier temps afin de communiquer lors de la création d’un lobby le client et le serveur de jeu doivent utiliser le protocole HTTP. Une fois au sein d’une partie le client et le serveur de jeu doivent utiliser les WebSockets. En matière de sécurité les données ne devant pas identifier les utilisateurs aucune solution d’encryption ne sera nécessaire dans un premier temps.

Exigences fonctionnelles

Lister les salles d’attentes

Description et priorité

Cette fonctionnalité permet à un utilisateur sur la page principale du jeu de voir les différentes salles d’attentes disponibles afin qu’il puisse décider qu’elle partie il souhaite rejoindre.

Cette fonctionnalité est prioritaire

Il y a un risque d’erreur réseau si le nombre de salles d’attentes est important ou de nombreux utilisateurs accèdent à cette page le chargement et l’affichage des parties pourrait être perturbé. Le risque est estimé à 3 dû fait de la petite taille de l’user base qui utilisera ce programme.

Séquences de Stimulus/Réponse

L’utilisateur arrive sur le site et est tout de suite accueilli par une liste de salles d’attentes qu’il va pouvoir immédiatement rejoindre.

Il peut ainsi choisir entre rejoindre une salle d’attente de son choix ou patienter pour que nouvelles salles se créent.

Il a également la possibilité sur cette page d’être redirigé sur le système de création de salle d’attente.

Exigences fonctionnelles

  • REQ-1: Affichage de la liste complète des salles d’attentes disponibles.

  • REQ-2: Si aucune salle d’attente n’est disponible affiche un message pour le signaler à l’utilisateur.

  • REQ-3: L’utilisateur à la possibilité de rejoindre la salle d’attente de son choix.

Description sous la forme d’un cas d’utilisation

Item Description

#

1

Cas d’utilisation

Lister les salles d’attente

Alias

Affichage de la liste de salles d’attentes

Objectif contextuel

Pouvoir afficher toutes les salles d’attente joignables.

Portée

Joueur et serveur

Niveau

Tâche intermédiaire.

Condition de succès

Les salles d’attente sont affichées.

Condition d’échec

Les salles d’attentes ne sont pas affichées

Acteurs principaux:

Serveur

Acteurs secondaires

Joueur

Événement déclencheur

Le joueur lance l’application.

Priorité

Intermédiaire

Fréquence

A chaque fois que le joueur cherche à rejoindre une partie.

Pré-conditions

Aucune

Post-conditions

Aucune

Scénario nominal

Le joueur accède à l’application

Extensions

Afficher des informations sur ces salles d’attente.

Alternatives

Ne pas avoir de multiples salles d’attente.

Cas d’utilisation supérieur

Aucun

Cas d’utilisation subordonnés

Aucun

Objectif de performance

à compléter

Problèmes ouverts

  • à compléter

  • à compléter

Échéancier

Version 1.0

Contraintes

à compléter

Annexes

à compléter

Créer une salle d’attente

Description et priorité

Permet à un utilisateur de créer une nouvelle salle d’attente.

Cette priorité est prioritaire. Il faut au moins une salle d’attente pour organiser une partie et que d’autres joueurs rejoignent.

Risque : Un acteur mal intentionné peut facilement créer pleins de salles d’attentes pour déranger voir même surcharger le serveur en ouvrant plusieurs instances.

Séquences de Stimulus/Réponse

Le joueur sur la page des salles d’attente ouvre le menu de création de salle d’attente. Il peut ainsi créer une salle d’attente que d’autres joueurs pourront rejoindre.

Une fois que le nombre de joueur requis présent, la partie démarre.

Exigences fonctionnelles

  • REQ-1: Un utilisateur peut créer une nouvelle salle d’attente via l’interface de l’application web. Cette salle d’attente devra être visible par les autres joueurs sur l’interface de l’application web sur la page des salles d’attente.

  • REQ-2: Le créateur de la salle d’attente est automatiquement inclus dans la salle d’attente qu’il vient de créer. Une salle d’attente à donc forcément au minimum un joueur qui est son créateur.

  • REQ-3: Le créateur de la salle d’attente peut décider de démarrer une partie au bout d’un certains temps si trois joueurs ont rejoint.

  • REQ-4: Si tous les joueurs quittent la salle d’attente avant que la partie soit lancé alors cette dernière doit être supprimé et ne plus être affiché sur la page des salles d’attente.

Description sous la forme d’un cas d’utilisation

Item Description

#

1

Cas d’utilisation

Créer une salle d’attente.

Alias

Créer un lobby.

Objectif contextuel

Pouvoir créer une nouvelle salle d’attente.

Portée

Joueur et serveur

Niveau

Tâche intermédiaire.

Condition de succès

Une nouvelle salle d’attente est créée avec son créateur dedans.

Condition d’échec

La salle d’attente n’est pas créée ou le créateur n’est pas inclu dedans.

Acteurs principaux:

Joueur

Acteurs secondaires

Serveur

Événement déclencheur

Le joueur lance la création d’une salle d’attente.

Priorité

Intermédiaire

Fréquence

A chaque fois que le joueur crée une partie.

Pré-conditions

Aucune

Post-conditions

Aucune

Scénario nominal

Le joueur accède à l’application et décide de créer une partie.

Extensions

  1. Configurer la partie :

    • définir le nombre de points de victoires à atteindre pour remporter la partie

    • définir le nombre de joueurs

    • ajouter un nom à la salle d’attente

  2. Inviter ses amis

Alternatives

Ne pas avoir de multiples salles d’attente.

Cas d’utilisation supérieur

Aucun

Cas d’utilisation subordonnés

Aucun

Échéancier

Version 1.0

Contraintes

Ne pas déjà être dans une salle d’attente.

Rejoindre une salle d’attente

Description et priorité

Permet de rejoindre une salle d’attente disponible.

Priorité intermédiaire.

Risque : Un acteur mal intentionné peut facilement se connecter avec pleins de compte pour saturer les salons voir même surcharger les serveurs.

Séquences de Stimulus/Réponse

Le joueur sélectionne une salle d’attente et la rejoint, une fois qu’elle est pleine, la partie commence avec les joueurs qui sont dedans.

Exigences fonctionnelles

  • REQ-1: Le joueur est inclus dans la salle d’attente.

  • REQ-2: Il voit les autres joueurs et sera dans la partie quand elle démarrera.

Description sous la forme d’un cas d’utilisation

Item Description

#

1

Cas d’utilisation

Rejoindre une salle d’attente

Alias

Rejoindre un lobby

Objectif contextuel

Pouvoir rejoindre une des salles d’attentes disponible

Portée

Joueur et serveur

Niveau

Tâche intermédiaire.

Condition de succès

Le joueur est inclus dans la salle d’attente et une couleur lui est attribué

Condition d’échec

Le joueur ne parvient pas à rejoindre sa salle d’attente.

Acteurs principaux:

Joueur

Acteurs secondaires

Serveur

Événement déclencheur

Le joueur rejoint une salle d’attente

Priorité

Intermédiaire

Fréquence

A chaque fois que le joueur essaye de rejoindre une salle d’attente.

Pré-conditions

La salle d’attente n’est pas pleine, le joueur n’est pas déjà dans la salle d’attente.

Post-conditions

Aucune

Scénario nominal

Le joueur rejoint une salle d’attente, il lui est attribué une couleur unique parmi les participants de la salle d’attente.

Extensions

Afficher des informations de cette salle d’attente.

Alternatives

Ne pas avoir de multiples salles d’attente, chaque personne arrivante est ajouté dans une unique partie.

Cas d’utilisation supérieur

Aucun

Cas d’utilisation subordonnés

Aucun

Objectif de performance

à compléter

Problèmes ouverts

  • à compléter

  • à compléter

Échéancier

Version 1.0

Contraintes

La salle d’attente ne peut pas contenir plus de 4 joueurs.

Annexes

à compléter

Lancement de la partie

Description et priorité

Lance la partie lorsque la salle d’attente est pleine.

Priorité maximale.

Séquences de Stimulus/Réponse

Lorsque la salle d’attente est pleine, la partie s’inialise.

Une fois la partie initialisée, les joueurs jouent chacun leur tour.

Exigences fonctionnelles

  • REQ-1: Les joueurs sont inclu dans la partie.

  • REQ-2: Le plateau s’initialise.

  • REQ-3: L’ordre de passage des tours est défini.

  • REQ-4: Chaque joueur place deux colonies et deux routes dans leur ordre de passage.

  • REQ-5: Chaque joueur reçois les ressources en contact avec leur deuxième colonie.

Description sous la forme d’un cas d’utilisation

Item Description

#

1

Cas d’utilisation

Lancement de la partie

Alias

Lancement de la partie

Objectif contextuel

Démarrer la partie

Portée

Joueur et serveur

Niveau

Tâche intermédiaire.

Condition de succès

La partie démarre

Condition d’échec

La partie ne démarre pas

Acteurs principaux:

Joueur

Acteurs secondaires

Serveur

Événement déclencheur

4 joueurs sont présents dans la salle d’attente ou 3 joueurs sont présent depuis 5 minutes.

Priorité

Maximale

Fréquence

A chaque lancement de partie

Pré-conditions

3 ou 4 joueurs sont dans la salle d’attente

Post-conditions

La partie peut se dérouler.

Scénario nominal

3 à 4 joueurs sont dans une salle d’attente

Extensions

La partie peut être lancée à 3 joueurs si les joueurs sont tous prêts.

Alternatives

Le lancement est déclenché par le créateur du salon, si l’unanimité des joueurs sont prêts ou si un certain temps s’est écoulé.

Cas d’utilisation supérieur

Aucun

Cas d’utilisation subordonnés

Aucun

Objectif de performance

Limiter le temps d’attente des joueurs.

Problèmes ouverts

  • à compléter

  • à compléter

Échéancier

Version 1.0

Contraintes

La salle d’attente comporte entre 3 et 4 joueurs.

Annexes

à compléter

Jouer son tour

Description et priorité

Le joueur joue lorsque c’est son tour.

Priorité Maximale.

Séquences de Stimulus/Réponse

On indique au joueur que c’est à son tour de jouer, une fois terminé on indique au joueur suivant que c’est à son tour ou on annonce la fin de la partie si un joueur à gagné.

Exigences fonctionnelles

  • REQ-1: Un résultat de jet de dé est donné.

  • REQ-2: Les ressources sont distribuées ou on applique la règle du voleur.

  • REQ-3: Un compte a rebou est lancé avant que le tour se termine.

  • REQ-4: Le joueur peut placer des routes, collonies, villes ou acheter des cartes développement.

  • REQ-5: Le joueur peut initier des échanges.

  • REQ-6: Le joueur termine son tour.

Description sous la forme d’un cas d’utilisation

Item Description

#

1

Cas d’utilisation

Déroulement d’un tour

Alias

Actions d’un tour

Objectif contextuel

Comportement d’un tour de jeu, et actions d’un joueur.

Portée

Joueur et serveur

Niveau

Tâche intermédiaire.

Condition de succès

Le joueur joue et finit son tour.

Condition d’échec

Le joueur ne peut pas jouer.

Acteurs principaux:

Joueur

Acteurs secondaires

Serveur

Événement déclencheur

C’est le tour du joueur

Priorité

Maximale

Fréquence

De manière répétée jusqu’à la fin de la partie.

Pré-conditions

La partie n’est pas finie.

Post-conditions

Le joueur suivant joue ou la partie finie.

Scénario nominal

  1. Un compte à rebours est initié, il définit la durée maximale d’un tour.

  2. Le joueur n’est pas présent le T

Extensions

Aucune

Alternatives

Aucune

Cas d’utilisation supérieur

Aucun

Cas d’utilisation subordonnés

Aucun

Objectif de performance

Maximiser ses constructions ou cartes de développement pour obtenir un maximum de points de victoire.

Échéancier

Version 1.0

Contraintes

???

Fin de la partie

Description et priorité

La partie se termine lorsqu’un joueur à gagné.

Priorité intermédiaire.

Séquences de Stimulus/Réponse

Un joueur a atteins le nombre de point nécessaire à la victoire.

Exigences fonctionnelles

  • REQ-1: La partie s’arrête et le vainqueur est annoncé.

  • REQ-2: Un tableau des scores est affiché.

  • REQ-3: Les joueurs peuvent revenir sur la page d’accueil ou initier une nouvelle salle d’attente avec ces mêmes joueurs.

Description sous la forme d’un cas d’utilisation

Item Description

#

1

Cas d’utilisation

Fin de partie

Alias

Fin

Objectif contextuel

La partie est fini, un joueur a gagné

Portée

Joueur et serveur

Niveau

Tâche intermédiaire.

Condition de succès

Fin de la partie, les scores sont affichés

Condition d’échec

La partie ne se termine pas.

Acteurs principaux:

Joueur

Acteurs secondaires

Serveur

Événement déclencheur

Un joueur a obtenu le nombre de points de victoire défini.

Priorité

Intermédiaire

Fréquence

Une fois par partie.

Pré-conditions

Un joueur a obtenu le nombre de points de victoire défini ou tous les participants ont été indiqués comme absents (déconnectés).

Post-conditions

La partie est supprimée.

Scénario nominal

  1. Un joueur termine son tour: S’il obtient le nombre de points de victoires nécessaires, il est alors déclaré vainqueur. La partie est donc terminée. Les participants sont alors averti de la victoire de ce joueur et que la partie est terminée.

  2. Tous les participants ont été marqués comme absent (tag déconnecté). La partie est clôturée par le serveur. Aucun joueur n’est déclaré vainqueur.

Extensions

  1. Afficher le tableau des scores.

  2. Proposer de lancer une revanche.

Alternatives

Partie infinie.

Cas d’utilisation supérieur

Aucun

Cas d’utilisation subordonnés

Aucun

Objectif de performance

à compléter

Problèmes ouverts

  • à compléter

  • à compléter

Échéancier

Version 1.0

Contraintes

à compléter

Exigences non-fonctionnelles

Exigences de performance

  1. Le jeu doit être jouable, ce qui signifie que les utilisateurs doivent avoir un retour rapide de leurs actions et que les retards dus aux problèmes de communication/connexion doivent être correctement tenus.

  2. Le serveur de jeu doit pouvoir être paramètrable pour modifier les ports sur lesquels il écoute.

  3. Le client Web doit pouvoir s’exécuter sur un ordinateur personnel ou une tablette ne possédant très peu de RAM.

Exigences de sécurité

Les règles du jeux doivent être contraintes par le serveur pour ne pas permettre de triche. Toute la logique doit être continuellement vérifier côté serveur. Il ne faut pas faire confiance au client.

Les joueurs n’ayant besoin d’aucun compte pour jouer, il faut prévenir des acteurs malveillants qui pourraient essayer de jouer à leur place en envoyant des reqûetes directement au serveur à l’aide de logiciels tiers pour nuire à l’expérience de jeu. Pour éviter cela il faudra que chaque joueur au sein d’une partie soit identifiable à l’aide d’un Token (JWT) unique propre à lui. De ce fait, si le serveur réalise une action, il devra s’assurer qu’elle provienne bien de ce joueur. Avec cette méthode, il sera impossible d’altérer directement via l’API les actions d’un autre joueur pendant une partie. Si un utilisateur lance plusieurs instances de client, chaque instance au sein d’une partie devra posséder un identifiant (token) unique. Nous pouvons ainsi sécuriser une partie en cours tout en permettant au joueur de n’avoir aucun compte.

On utilisera HTTPS dès que possible pour la communication client - serveur.

La transmission et le stockage d’informations sensibles doit être fait de manière sécurisé en utilisant la librairie Bcrypt.

Le stockage des données permettant d’identifier directement un utilisateur doit respecter les règlementations locales tel que le RGPD.

Attributs de qualité logicielle

Extensibilité

Le logiciel devra respecter toutes les bonnes pratiques qui permettent son extensibilité.

Maintenabilité

  1. Le logiciel doit être lisible et facile à maintenir.

  2. La source Java doit respecter les directives de Google : https://google-styleguide.googlecode.com/svn/trunk/javaguide.html.

Règles métier

Énumérez tous les principes de fonctionnement du produit, tels que les personnes ou les rôles qui peuvent remplir telle ou telle fonction dans des circonstances spécifiques. Il ne s’agit pas d’exigences fonctionnelles en soi, mais elles peuvent impliquer certaines exigences fonctionnelles pour faire respecter les règles.

Autres exigences

Annexe A : Glossaire

Définissez tous les termes nécessaires pour interpréter correctement le SRS, y compris les acronymes et les abréviations. Vous pouvez créer un glossaire distinct couvrant plusieurs projets ou l’ensemble de l’organisation, et vous contenter d’inclure les termes spécifiques à un seul projet dans chaque SRS.

Annexe B : Modèles d’analyse

Voir le chapitre [domain] (analyse du domaine) pour plus de détails.

En option, inclure tout modèle d’analyse pertinent, tel que des diagrammes de flux de données, des diagrammes de classe, des diagrammes d’état-transition ou des diagrammes entité-relation.