L'objet de cet exercice est de réaliser une classe ChaineCryptee
qui permettra de chiffrer/déchiffrer une chaîne de caractères (composée de lettres majuscules et d'espace).
Le chiffrement utilise une méthode par décalage.
La valeur du décalage représente la clé de chiffrement.
Par exemple, une clé de valeur trois transformera un 'A'
en 'D'
.
La classe ChaineCryptee
disposera
- des attributs pour la chaîne en clair et le décalage,
- un constructeur pour initialiser les instances à partir d'une chaîne en clair et du décalage,
- la méthode
String decrypte()
qui retourne la chaîne en clair, - la méthode
String crypte()
qui retourne la chaîne chiffrée, Vous pourrez utilisez pour cela la méthodedecaleCaractere
, - la possibilité d'initialiser une instance à partir d'une chaîne cryptée et d'un décalage.
Pour éviter l'ambiguïté au niveau du constructeur, vous utiliserez le modèle de conception Fabrication.
Pour cela,
- créez les méthodes de classe
ChaineCryptee deCryptee(String, int)
etChaineCryptee deEnClair(String, int)
, - rendez le constructeur privé. La création des instances se fait maintenant à l'aide des deux méthodes de classe.
- créez les méthodes de classe
De plus, le projet sera géré avec Maven et vous utiliserez une approche pilotée par les tests pour la réalisation, i.e. écrivez toujours un test avant le code et pensez au refactoring. Le framework de tests devra être JUnit 4 (ou 5 si vous préférez). Vous rédigerez votre code source en respectant les conventions de codage du guide de stype Google. Enfin, la prise en compte des contraintes se fera par de la gestion d’erreurs et des exceptions.
Il pourra éventuellement être nécessaire de configurer le proxy (http://wwwcache.uvsq.fr:3128) pour accéder au dépôt Maven.
À chaque étape, validez vos modifications avec git
et si nécessaire, exécutez le cycle maven adapté pour vérifier vos manipulations.
- Quelles conventions utilise Maven pour l’arborescence des répertoires ?
RÉPONDRE ICI
- Examinez le projet Maven ainsi que le fichier de description et répondez aux questions suivantes :
- Dans quel répertoire se trouvent les fichiers sources du projet ? Les sources des tests ?
RÉPONDRE ICI
- Quelles sont les coordonnées du projet ?
RÉPONDRE ICI
- À quoi sert la propriété
project.build.sourceEncoding
?RÉPONDRE ICI
- Quelles versions des sources et de la JVM sont utilisés ?
RÉPONDRE ICI
- Quelle version de JUnit est configurée ? À quoi sert la balise
scope
?RÉPONDRE ICI
- À quoi sert la section
pluginManagement
?RÉPONDRE ICI
- Dans quel répertoire se trouvent les fichiers sources du projet ? Les sources des tests ?
- Modifiez la configuration du projet de la façon suivante :
- fixez la version des sources et des .class pour utiliser la version 17 de Java
- utilisez la dernière version stable de JUnit 4 (cf. MVNRepository)
- Ajoutez un fichier
.gitignore
adapté aux projets Maven (cf. A collection of .gitignore templates) et ajoutez-y les fichiers et répertoires de votre IDE. - Quelle commande Maven permet de :
- créer un
jar
du projet ?RÉPONDRE ICI
- lancer les tests ?
RÉPONDRE ICI
- supprimer tous les fichiers issus de la compilation ?
RÉPONDRE ICI
- créer un
- Ajoutez une classe
ChaineCryptee
et une classeChaineCrypteeTest
dans les répertoires et packages appropriés. Supprimez les classes d'exempleApp
etAppTest
. - Énumérez une liste de cas de tests à réaliser en n'oubliant pas les cas d'erreur.
RÉPONDRE ICI
- Pour chaque cas de test,
- écrivez le test JUnit correspondant dans la classe de test,
- vérifiez qu’il échoue,
- implémentez la fonctionnalité dans la classe,
- vérifiez que le test passe,
- appliquez un étape de refactoring sur les tests et la classe si nécessaire.
- Comment se comporte votre classe si la chaîne passée au constructeur est
null
? Vous pouvez utiliser le débogueur pour identifier le problème (s'il y a un problème) au niveau decrypte
.RÉPONDRE ICI
- ajoutez un test pour prendre en compte la chaîne
null
, - si nécessaire, modifiez la classe pour faire passer le test
- ajoutez un test pour prendre en compte la chaîne
- Changez la représentation interne de la classe : seule la chaîne cryptée est stockée (plus la chaîne en clair).
- effectuez les modifications nécessaires sans changer l'interface de la classe (les tests ne seront donc pas impactés).
- Modifiez le POM pour intégrer la vérification des conventions de codage avec
checkstyle
en utilisant les conventions Google. - Ajoutez une méthode
main
qui démontre quelques fonctionnalités de la classe, puis modifiez le POM pour que le jar généré soit exécutable (cf. Apache Maven JAR Plugin) - Modifiez la méthode
main
pour que les différents affichages se fassent à l'aide de la bibliothèque de loggingSLF4J
- En utilisant le plugin assembly (ou le plugin shade), générez une archive du projet contenant ses dépendances (uber-jar)