Binôme :
- Luka LAFAYE DE MICHEAUX
- Alexandre CHIDIAC
La syntaxe MarkDown de ce document est compatible avec la syntaxe GitLab, qui est documentée dans https://docs.gitlab.com/ee/user/markdown.html
La première étape consiste à bien comprendre le système à étudier. Dans le cadre de l'exercice, cela consiste à lire attentivement l'énoncé. Cette lecture doit permettre de délimiter les contours du système à réaliser. La méthode générale consiste à retrouver les acteurs qui interagissent avec lui. Il est très important de fixer des frontières au problème. Ensuite, nous recherchons les fonctionnalités du système par la définition de ses cas d'utilisation. Dans le cadre de ce module, il s'agit de rechercher les principales fonctions attendues du système. Nous nous limitons aux cas d'utilisation pour atteindre les premiers objectifs indiqués dans le cahier des charges, en prenant en considération les simplifications énoncées dans le cahier des charges.
Pour réaliser le diagramme de cas d'utilisation à partir de l'analyse du texte :
- rechercher les acteurs, avec les potentielles relation de généralisation spécialisation,
- rechercher les fonctionnalités du système accessibles aux acteurs
Pour rappel, la documentation du langage pour écrire les diagrammes UML avec PlantUML est disponible à l'adress suivante :
Voici ci-dessous le diagramme de cas d'utilisation avec les cas d'utilisation les plus importants (code source).
Les priorités des cas d'utilisation sont choisies avec les règles de bon sens suivantes:
-
pour retirer une entité du système, elle doit y être. La priorité de l'ajout est donc supérieure ou égale à la priorité du retrait ;
-
pour lister les entités d'un type donné, elles doivent y être. La priorité de l'ajout est donc supérieure ou égale à la priorité du listage ;
-
il est a priori possible, c.-à-d. sans raison contraire, de démontrer la mise en œuvre d'un sous-ensemble des fonctionnalités du système, et plus particulièrement la prise en compte des principales règles de gestion, sans les retraits ou les listages ;
-
la possibilité de lister aide au déverminage de l'application pendant les activités d'exécution des tests de validation.
Par conséquent, les cas d'utilisation d'ajout sont a priori de priorité « HAUTE », ceux de listage de priorité « Moyenne», et ceux de retrait de priorité « basse ».
Voici les précondition et postcondition des cas d'utilisation de priorité HAUTE.
- précondition :
∧ pseudo de l'exécuteur bien formé (non null ∧ non vide)
∧ pseudo de l'exécuteur existe
∧ pseudo de l'exécuteur est administrateur \ ∧ pseudo bien formé (non null ∧ non vide)
∧ nom bien formé (non null ∧ non vide)
∧ prénom bien formé (non null ∧ non vide)
∧ courriel bien formé (respectant le standard RFC822)
∧ utilisateur avec ce pseudo inexistant - postcondition :
∧ utilisateur avec ce pseudo existant
∧ le compte de l'utilisateur est actif
-
précondition :
∧ pseudo de l'exécuteur bien formé (non null ∧ non vide)
∧ pseudo de l'exécuteur existe
∧ pseudo de l'exécuteur est administrateur -
postcondition :
∧ liste des utilisateurs affichée \
-
précondition :
∧ pseudo de l'exécuteur bien formé (non null ∧ non vide)
∧ pseudo de l'exécuteur existe
∧ pseudo de l'exécuteur est administrateur ∧ pseudo bien formé (non null ∧ non vide)
∧ utilisateur avec ce pseudo existe
∧ utilisateur avec ce pseudo n'est pas déjà bloqué -
postcondition :
∧ utilisateur avec ce pseudo est bloqué \
-
précondition :
∧ pseudo de l'exécuteur bien formé (non null ∧ non vide)
∧ pseudo de l'exécuteur existe
∧ pseudo de l'exécuteur est administrateur ∧ pseudo bien formé (non null ∧ non vide)
∧ utilisateur avec ce pseudo existe -
postcondition :
∧ utilisateur avec ce pseudo inexistant \
-
précondition :
∧ pseudo de l'exécuteur bien formé (non null ∧ non vide)
∧ pseudo de l'exécuteur existe
∧ pseudo de l'exécuteur n'est pas administrateur
∧ le compte n'est pas bloqué ∧ le compte est actif -
postcondition : le compte de l'exécuteur est désactivé
NB : l'opération est idempotente.
-
précondition :
∧ pseudo de l'exécuteur bien formé (non null ∧ non vide)
∧ pseudo de l'exécuteur existe
∧ le compte n'est bloqué
∧ le compte est désactivé -
postcondition : le compte de l'exécuteur est actif
-
précondition :
∧ pseudo de l'exécuteur bien formé (non null ∧ non vide)
∧ pseudo de l'exécuteur existe
∧ le compte n'est pas bloqué
∧ le compte est actif
∧ le nom du réseau social est bien formé (non null ∧ non vide)
∧ le nom du réseau social est disponible -
postcondition :
∧ le réseau social est créé
∧ l'exécuteur est modérateur de ce réseau social
∧ le réseau social est activé
∧ l'utilisateur créateur du réseau social est membre de ce dernier
-
précondition :
∧ pseudo bien formé (non null ∧ non vide)
∧ le réseau social existe
∧ l'utilisateur est moderateur de ce reseau social
∧ le message existe dans le réseau social -
postcondition :
∧ le message est modéré (caché, supprimé, ou marqué comme inapproprié)
-
précondition :
∧ pseudo de l'exécuteur bien formé (non null ∧ non vide)
∧ pseudo de l'exécuteur existe
∧ le compte de l'exécuteur est actif
∧ le nom du réseau social est bien formé (non null ∧ non vide)
∧ le réseau social existe
∧ l'exécuteur est modérateur du réseau social
∧ pseudo de l'utilisateur bien formé (non null ∧ non vide) ∧ utilisateur existe
∧ utilisateur n'est pas déjà dans le réseau social -
postcondition :
∧ l'utilisateur est membre du réseau social
-
précondition :
∧ pseudo bien formé (non null ∧ non vide)
∧ le réseau social existe
∧ l'utilisateur est moderateur de ce reseau social -
postcondition :
∧ le réseau social est fermé
∧ plus aucun utilisateur ne peut accéder au réseau social
-
précondition :
∧ pseudo bien formé (non null ∧ non vide)
∧ le réseau social existe \ ∧ l'utilisateur est moderateur de ce reseau social
∧ le membre existe dans le réseau social
∧ le membre n'est pas déjà bloqué -
postcondition :
∧ le membre est bloqué et ne peut plus interagir dans le réseau social
-
précondition :
∧ pseudo bien formé (non null ∧ non vide)
∧ le réseau social existe \ ∧ l'utilisateur est moderateur de ce reseau social
∧ le membre existe
∧ le membre est actuellement bloqué dans le réseau social -
postcondition :
∧ le membre est débloqué et peut de nouveau interagir dans le réseau social
-
précondition :
∧ pseudo bien formé (non null ∧ non vide)
∧ l'utilisateur est actif
∧ le réseau social existe et est ouvert -
postcondition :
∧ l'utilisateur est membre du réseau social
-
précondition :
∧ pseudo bien formé (non null ∧ non vide)
∧ l'utilisateur est membre actif du réseau social
∧ le contenu du message est bien formé (chaine de caractère non null ∧ non vide)
∧ le réseau social existe et est ouvert -
postcondition :
∧ le message est publié dans le réseau social
∧ le message est visible pour le modérateur, mais en attente de modération pour les autres membres du réseau social
-
précondition :
∧ pseudo bien formé (non null ∧ non vide)
∧ le membre est l'auteur du message
∧ le message existe et est visible -
postcondition :
∧ le message est caché et n'est plus visible aux membres du réseau social
-
précondition :
∧ pseudo bien formé (non null ∧ non vide)
∧ l'utilisateur est membre du réseau social -
postcondition :
∧ l'utilisateur n'est plus membre du réseau social
Décision | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T | T | T | T | T | T |
Pseudo de l'exécuteur existe | F | T | T | T | T | T | T | T | |
Pseudo de l'exécuteur est administrateur | F | T | T | T | T | T | T | ||
Pseudo bien formé (non null ∧ non vide) | F | T | T | T | T | T | |||
Nom bien formé (non null ∧ non vide) | F | T | T | T | T | ||||
Prénom bien formé (non null ∧ non vide) | F | T | T | T | |||||
Courriel bien formé (respectant le standard RFC822) | F | T | T | ||||||
Utilisateur avec ce pseudo inexistant | F | T | |||||||
Utilisateur avec ce pseudo existant | F | F | F | F | F | F | F | F | T |
Le compte de l'utilisateur est actif | F | F | F | F | F | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 2 | 2 | 2 | 3 | 1 | 1 |
Le jeu de test 7 comporte trois tests : non null, non vide, et adresse courriel bien formée. On aurait pu n'en faire qu'un en considérant la bibliothèque de validation RFC822 vérifie les deux premières conditions.
Décision | 1 | 2 | 3 | 4 |
---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T |
Pseudo de l'exécuteur existe | F | T | T | |
Pseudo de l'exécuteur est administrateur | F | T | ||
Liste des utilisateurs affichée | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 1 |
Décision | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T | T | T | T |
Pseudo de l'exécuteur existe | F | T | T | T | T | T | |
Pseudo de l'exécuteur est administrateur | F | T | T | T | T | ||
Pseudo bien formé (non null ∧ non vide) | F | T | T | T | |||
Utilisateur avec ce pseudo existe | F | T | T | ||||
Utilisateur avec ce pseudo n'est pas déjà bloqué | F | T | |||||
Utilisateur avec ce pseudo est bloqué | F | F | F | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 2 | 1 | 1 | 1 |
Décision | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T | T | T |
Pseudo de l'exécuteur existe | F | T | T | T | T | |
Pseudo de l'exécuteur est administrateur | F | T | T | T | ||
Pseudo bien formé (non null ∧ non vide) | F | T | T | |||
Utilisateur avec ce pseudo existe | F | T | ||||
Utilisateur avec ce pseudo est bloqué | F | F | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 2 | 1 | 1 |
Décision | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T | T | T |
Pseudo de l'exécuteur existe | F | T | T | T | T | |
Pseudo de l'exécuteur n'est pas administrateur | F | T | T | T | ||
Le compte n'est pas bloqué | F | T | T | |||
Le compte est actif | F | T | ||||
Le compte de l'exécuteur est désactivé | F | F | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 1 | 1 | 1 |
Décision | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T | T |
Pseudo de l'exécuteur existe | F | T | T | T | |
Le compte n'est pas bloqué | F | T | T | ||
Le compte est désactivé | F | T | |||
Le compte de l'exécuteur est actif | F | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 1 | 1 |
Décision | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T | T | T | T |
Pseudo de l'exécuteur existe | F | T | T | T | T | T | |
Le compte n'est pas bloqué | F | T | T | T | T | ||
Le compte est actif | F | T | T | T | |||
Le nom du réseau social est bien formé (non null ∧ non vide) | F | T | T | ||||
Le nom du réseau social est disponible | F | T | |||||
Le réseau social est créé | F | F | F | F | F | F | T |
L'exécuteur est modérateur de ce réseau social | F | F | F | F | F | F | T |
Le réseau social est activé | F | F | F | F | F | F | T |
L'utilisateur créateur du réseau social est membre | F | F | F | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 1 | 2 | 1 | 1 |
Décision | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T | T |
Le réseau social existe | F | T | T | T | |
L'utilisateur est moderateur de ce reseau social | F | T | T | ||
Le message existe dans le réseau social | F | T | |||
Le message est modéré | F | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 1 | 1 |
Décision | 1 | 2 | 3 | 4 |
---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T |
Le réseau social existe | F | T | T | |
L'utilisateur est moderateur de ce reseau social | F | T | ||
Le réseau social est fermé | F | F | F | T |
Plus aucun utilisateur ne peut accéder au réseau social | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 1 |
Décision | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T | T | T |
Le réseau social existe | F | T | T | T | T | |
L'utilisateur est moderateur de ce reseau social | F | T | T | T | ||
Le membre existe dans le réseau social | F | T | T | |||
Le membre n'est pas déjà bloqué | F | T | ||||
Le membre est bloqué dans le réseau social | F | F | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 1 | 1 | 1 |
Décision | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T | T | T |
Le réseau social existe | F | T | T | T | T | |
L'utilisateur est moderateur de ce reseau social | F | T | T | T | ||
Le membre existe dans le réseau social | F | T | T | |||
Le membre est actuellement bloqué dans le réseau social | F | T | ||||
Le membre est débloqué dans le réseau social | F | F | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 1 | 1 | 1 |
Décision | 1 | 2 | 3 | 4 |
---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T |
L'utilisateur est actif | F | T | T | |
Le reseau social existe et est ouvert | F | T | ||
L'utilisateur est membre du reseau social | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 1 |
Décision | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T | T |
L'utilisateur est membre actif du réseau social | F | T | T | T | |
Contenu du message bien formé (non null ∧ non vide) | F | T | T | ||
Le réseau social existe et est ouvert | F | T | |||
Le message est publié dans le réseau social | F | F | F | F | T |
Le message est visible pour le modérateur et en attente pour les autres | F | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 2 | 2 | 1 |
Décision | 1 | 2 | 3 | 4 |
---|---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T | T |
Le membre est l'auteur du message | F | T | T | |
Le message existe et est visible | F | T | ||
Le message est caché et n'est plus visible | F | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 2 | 1 |
Décision | 1 | 2 | 3 |
---|---|---|---|
Pseudo de l'exécuteur bien formé (non null ∧ non vide) | F | T | T |
L'utilisateur est membre du réseau social | F | T | |
L'utilisateur n'est plus membre du réseau social | F | F | T |
nombre de tests dans le jeu de tests | 2 | 1 | 1 |
Voici les listes des classes candidates et de leurs attributs:
MiniSocs
(mise en œuvre du patron de conception Façade) avec l'attributnom
pour le nom du système,Utilisateur
avec les attributspseudo
pour identifier de manière unique un utilisateur,nom
etprénom
, adressecourriel
, etetatCompte
pour l'état de son compte,ÉtatCompte
avec les énumérateursCOMPTE_ACTIF
etCOMPTE_DÉSACTIVÉ
,
Les seules opérations que nous connaissons déjà sont celles correspondant aux cas d'utilisation. Comme nous utilisons le patron de conception Façade, toutes les opérations des cas d'utilisation sont dans la Façade.
Donc, dans la classe MiniSocs
, voici les premières opérations (en
ignorant celles de priorité « basse ») :
ajouterUtilisateur
,désactiverCompte
,bloquerCompte
,listerUtilisateurs
.
Le diagramme de classes obtenu lors d'une analyse à partir de l'énoncé du problème est donné dans la figure qui suit. Dans ces diagrammes, les opérations ne sont pas mentionnées parce qu'il y en aurait trop.
Important: même dans les diagrammes de la conception détaillée, on ne montre pas les attributs traduisant des associations.
Pour rappel, la documentation du langage pour écrire les diagrammes UML avec PlantUML est disponible à l'adress suivante :
Version sans les notifications (source).
(source)
Dans la suite, plusieurs versions d'un même diagramme de séquence sont proposés :
- une version dite « recommandée » avec les barres d'activation,
- une version dite « simplifiée » sans les barres d'activation.
Pour rappel, la documentation du langage pour écrire les diagrammes UML avec PlantUML est disponible à l'adress suivante :
Version recommandée (source).
(source)
Version recommandée (source).
(source)
Version simplifiée (source).
(source)
Version recommandée (source).
(source)
Dans les diagrammes de machine à états, nous faisons le choix de faire apparaître les états de création et de destruction. Ces états sont transitoires, il est vrai, mais ils méritent cependant une attention particulière. L'état de création, en particulier, donne lieu, lors de la réalisation dans un langage de programmation orienté objet, à l'écriture d'une opération « constructeur » qui garantit que tous les attributs sont initialisés correctement dès la création d'une instance. Nous savons également qu'en Java la destruction se réalise en « oubliant » l'objet : un mécanisme de ramasse miettes détruit automatiquement les objets lorsqu'ils ne sont plus référencés. Il n'en est pas de même dans tous les langages, et par exemple en C++ qui ne possède pas de mécanisme de ramasse miettes, la destruction des objets peut s'avérer un casse tête ardu.
Les actions provoquées par des appels en provenance d'autres objets apparaissent sur les transitions. Nous avons gardé comme action interne uniquement les actions correspondant à des appels que l'objet fait seul ou fait de manière répétitive. Les constructeurs et destructeurs sont des exceptions (ils apparaissent en interne bien qu'étant déclenchés par un autre objet).
Diagramme (source).
(source)
Voici tous les attributs de la classe :
— final String pseudonyme
— String nom
— String prenom
— String courriel
— EtatCompte etatCompte
pseudonyme != null ∧ !pseudonyme.isBlank()
∧ nom != null ∧ !nom.isBlank()
∧ prenom != null ∧ !prenom.isBlank()
∧ EmailValidator.getInstance().isValid(courriel)
∧ etatCompte != null
Diagramme (source).
(source)
Voici tous les attributs de la classe :
— String contenu
— etatMessage etatMessage
— membre : Membre (association)
— moderateur : Moderateur (composition)
— reseauSocial : ReseauSocial (composition)
Voici toutes les operations de la classe :
— Constructeur
— Destructeur
contenu != null ∧ !contenu.isBlank()
∧ etatMessage == "accepté" ∨ etatMessage == "verification pending"
∨ etatMessage == "inappropriate" ∨ etatMessage == "hidden"
∨ etatMessage == "sent"
∧ membre != null
∧ moderateur != null
∧ reseauSocial != null
— String: pseudoParticulier
— utilisateur: Utilisateur (association)
— reseauSocial : ReseauSocial (composition)
—
pseudoParticulier != null ∧ !pseudoParticulier.isBlank()
public Utilisateur(final String pseudonyme, final String nom, final String prenom, final String courriel)
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
pseudonyme bien formé (non null ∧ non vide) | F | T | T | T | T |
nom bien formé (non null ∧ non vide) | F | T | T | T | |
prénom bien formé (non null ∧ non vide) | F | T | T | ||
courriel bien formé selon le standard RFC822 | F | T | |||
utilisateur (non null) | T | ||||
pseudonyme' = pseudonyme | T | ||||
nom' = nom | T | ||||
prénom' = prénom | T | ||||
courriel' = courriel | T | ||||
étatCompte' = actif | T | ||||
levée d'une exception | oui | oui | oui | oui | non |
nombre de tests dans le jeu de tests | 2 | 2 | 2 | 3 | 1 |
Trois tests dans le jeu de tests 5 pour non null, puis non vide, et enfin une chaîne de caractères qui n'est pas une adresse courriel.
public void desactiverCompte()
1 | 2 | |
---|---|---|
étatCompte non bloqué | F | T |
étatCompte' = désactivé | T | |
levée d'une exception | oui | non |
nombre de tests dans le jeu de tests | 1 | 2 |
Deux tests dans le jeu de tests 2 pour l'idempotence.
public Message(final String contenu, final Membre membre, final EtatMessage etat, final ReseauSocial rs)
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
contenu (non null ∧ non vide) | F | T | T | T | T |
membre (non null) | F | T | T | T | |
etat (non null) | F | T | T | ||
rs non null | F | T | |||
message non null | T | ||||
contenu' = contenu | T | ||||
etat' = etat | T | ||||
rs' = rs | T | ||||
membre' = membre | T | ||||
levée d'une exception | oui | oui | oui | oui | non |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 1 | 1 |
public void modifierStatutMessage(final EtatMessage etat)
1 | 2 | |
---|---|---|
etat (non null) | F | T |
etat' = etat | T | |
levée d'une exception | oui | non |
nombre de tests dans le jeu de tests | 1 |
1 | 2 | |
---|---|---|
message membre modérateur | F | T |
etat' = ACCEPTE | F | T |
levée d'une exception | non | non |
nombre de tests dans le jeu de tests | 1 | 1 |
public Membre(final String pseudoParticulier, final Utilisateur utilisateur, final ReseauSocial rs)
1 | 2 | 3 | 4 | |
---|---|---|---|---|
pseudoParticulier bien formé (non null ∧ non vide) | F | T | T | T |
utilisateur (non null) | F | T | T | |
rs (non null) | F | T | ||
membre not null | ||||
pseudoParticulier' = pseudoParticulier | ||||
utilisateur' = utilisateur | ||||
rs' = rs | ||||
levée d'une exception | oui | oui | oui | non |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 1 |
public void moderer(final Message m, EtatMessage etat)
1 | 2 | 3 | 4 | |
---|---|---|---|---|
m (non null) | F | T | T | T |
etat (non null) | F | T | T | |
exécutant de type Modérateur | F | T | ||
etat non null | T | |||
etat' = etat | T | |||
levée d'une exception | oui | oui | oui | non |
nombre de tests dans le jeu de tests | 1 | 1 | 1 | 1 |
public ReseauSocial(final String nom, boolean ouvert)
1 | 2 | 3 | |
---|---|---|---|
nom (non null ∧ non vide) | F | T | T |
ouvert | F | T | |
rs (non null) | |||
nom' = nom | T | T | |
ouvert' = ouvert | T | T | |
membres' (non null) | T | T | |
messages' (non null) | T | T | |
levée d'une exception | oui | non | non |
nombre de tests dans le jeu de tests | 2 | 1 | 1 |
public Membre getMembrefromUtilisateur(Utilisateur u)
1 | 2 | 3 | |
---|---|---|---|
u non null | F | T | T |
utilisateur associé à un membre sur le rs | F | T | |
renvoie null | T | F | |
renvoie membre | T | ||
levée d'une exception | oui | non | non |
nombre de tests dans le jeu de tests | 1 | 1 | 1 |
// Pb : deux membres peuvent avoir le mm rs
public Message getMessageFromId(double id)
1 | 2 | 3 | |
---|---|---|---|
id (non null) | F | T | T |
message avec id existe sur le rs | F | T | |
renvoie null | T | F | |
renvoie message | T | ||
levée d'une exception | oui | non | non |
nombre de tests dans le jeu de tests | 1 | 1 | 1 |
On vérifie aussi que l'id est incrémenté de 1 à chaque nouveau message... OK
public ajouterMembre(Utilisateur u, String pseudoParticulier, boolean mod)
| | 1 | 2 | 3 | 4 | 5 |
utilisateur (non null) | F | T | T | T | T |
pseudoParticulier (non null ∧ non vide) | F | T | T | T | |
pseudoParticulier disponible | F | T | T | ||
mod | F | T | |||
membre non null | T | T | |||
membre dans rs | T | T | |||
membre est modérateur | F | T | |||
levée d'une exception | oui | oui | oui | non | non |
nombre de tests dans le jeu de tests | 1 | 2 | 1 | 1 | 1 |
public Message ajouterMessage(String contenu, Membre m)
| | 1 | 2 | 3 | 4 |
contenu (non null ∧ non vide) | F | T | T | T |
membre non null | F | T | T | |
membre modérateur | F | T | ||
message' non null | T | T | ||
rs contient message' | T | T | ||
contenu' = contenu | T | T | ||
etat' = SENT | F | T | ||
etat' = VERIFICATION_PENDING | T | F | ||
levée d'une exception | oui | oui | non | non |
nombre de tests dans le jeu de tests | 2 | 1 | 1 | 1 |
public void creerReseauSocial(final String pseudoExec, final String nomReseau, final boolean ouvert, final String pseudoParticulier)
1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|
pseudoExec (non null ∧ non vide) | F | T | T | T | T | T |
Compte exec actif | F | T | T | T | T | |
nomReseau (non null ∧ non vide) | F | T | T | T | ||
pseudoParticulier (non null ∧ non vide) | F | T | T | |||
rs n'existe pas | F | T | ||||
rs non null | T | |||||
nomReseau' = nomReseau | T | |||||
ouvert' = ouvert | T | |||||
pseudoParticulier' = pseudoParticulier | T | |||||
rs contient moderateur nommé pseudoParticlier associé à utilisateur pseudoExec | T | |||||
Lancement d'une exception | oui | oui | oui | oui | oui | non |
Nombre de tests dans le jeu de tests | 2 | 1 | 2 | 2 | 1 | 1 |
Nous avons aussi testé avec ouvert = false... OK
public Membre ajouterMembreRS(final String pseudo, final String nomReseau, final String pseudoParticulier, final boolean mod)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
---|---|---|---|---|---|---|---|---|
pseudo (non null ∧ non vide) | F | T | T | T | T | T | T | T |
nomReseau (non null ∧ non vide) | F | T | T | T | T | T | T | |
pseudoParticulier (non null ∧ non vide) | F | T | T | T | T | T | ||
Compte exec actif | F | T | T | T | T | |||
rs non null | F | T | T | T | ||||
rs ouvert | F | T | T | |||||
l'utilisateur n'a pas de membre sur le rs | F | T | ||||||
pseudoParticulier' = pseudoParticulier | T | |||||||
rs contient membre pseudoParticlier | T | |||||||
mod' = mod | T | |||||||
Lancement d'une exception | oui | oui | oui | oui | oui | oui | oui | non |
Nombre de tests dans le jeu de tests | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 |
public void posterMessageRS(final String pseudo, final String contenu, final String nomReseau)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|
pseudo (non null ∧ non vide) | F | T | T | T | T | T | T | T | T |
contenu (non null ∧ non vide) | F | T | T | T | T | T | T | T | |
nomReseau (non null ∧ non vide) | F | T | T | T | T | T | T | ||
Compte exec actif | F | T | T | T | T | T | |||
rs non null | F | T | T | T | T | ||||
rs ouvert | F | T | T | T | |||||
utilisateur pseudo possède un membre sur le rs | F | T | T | ||||||
membre possédé est modérateur sur le rs | F | T | |||||||
message non null | T | T | |||||||
message posté dans rs | T | T | |||||||
contenu' = contenu | T | T | |||||||
etat' = SENT | F | T | |||||||
etat' = VERIFICATION_PENDING | T | F | |||||||
Lancement d'une exception | oui | oui | oui | oui | oui | oui | oui | non | non |
Nombre de tests dans le jeu de tests | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 1 |
public void modererMessage(final String pseudo, final double id, final String nomReseau, final EtatMessage etat)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
---|---|---|---|---|---|---|---|---|---|---|
pseudo (non null ∧ non vide) | F | T | T | T | T | T | T | T | T | T |
id positif | F | T | T | T | T | T | T | T | T | |
nomReseau (non null ∧ non vide) | F | T | T | T | T | T | T | T | ||
Compte exec actif | F | T | T | T | T | T | T | |||
rs non null | F | T | T | T | T | T | ||||
rs ouvert | F | T | T | T | T | |||||
message avec id existe | F | T | T | T | ||||||
utilisateur pseudo possède un membre sur le rs | F | T | T | |||||||
membre possédé est modérateur sur le rs | F | T | ||||||||
message non null | T | |||||||||
message reste posté dans rs | T | |||||||||
etat' = etat | T | |||||||||
Lancement d'une exception | oui | oui | oui | oui | oui | oui | oui | oui | oui | non |
Nombre de tests dans le jeu de tests | 2 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
public Utilisateur ajouterUtilisateur(final String pseudo, final String nom, final String prenom, final String courriel)
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
pseudo (non null ∧ non vide) | F | T | T | T | T |
nom (non null ∧ non vide) | F | T | T | T | |
prenom (non null ∧ non vide) | F | T | T | ||
Courriel bien formé (respectant le standard RFC822) | F | T | |||
utilisateur créé non null | |||||
pseudo' = pseudo | T | ||||
nom' = nom | T | ||||
prenom' = prenom | T | ||||
courriel'= courriel | T | ||||
minisocs contient utilisateur | T | ||||
Lancement d'une exception | oui | oui | oui | oui | non |
Nombre de tests dans le jeu de tests | 2 | 2 | 2 | 3 | 1 |
FIN DU DOCUMENT