TP5

publicité
Faculté
des Sciences
Master 2 FSIL
Fiabilité Logicielle 1
TP-Bilan Fiabilité 1
Département Informatique et Interactions
Année 2016-2017
Ce dernier TP permet de faire un bilan de l’U.E. Fiabilité 1 et reprend l’ensemble des
notions vues en cours.
1
Travail à effectuer
Ce Tp est à rendre idéalement par groupe de 4 étudiants avant le 3 novembre 10h. Le rendu
comprend vos sources java (tests compris), et un rapport en pdf répondant aux différentes
questions (et pouvant contenir des approfondissements, et/ou explications techniques). Ce
travail sera noté et comptera pour 60% pour votre note de TP de l’U.E. Comme il contient
un travail non nulle de développement, il est intéressant de se partager/distribuer les
tâches de travail dans le groupe. Enfin, ce travail est un bon exercice pour réviser pour
l’examen du jeudi 3 novembre 10h.
2
Classe Date
Le but de ce TP est de donner une traduction de la classe python date du module datetime
en Java. Le but est bien entendu de ne pas utiliser l’api Date, Calendar ou autre
java.time de java, sauf pour la fonction date.today().
L’ensemble des fonctions de l’objet date est à implémenter, à l’exception de l’attribut
de classe date.resolution, les méthodes date.timetuple(), date.strftime(format) et
date. format (format), ainsi que la surcharge des opérateurs (non disponible en java).
L’ensemble des fonctionnalités attendues est donc le suivant :
• Accès aux attributs de classe min, max.
• Accès aux méthodes de classe today(), fromtimestamp(), et fromordinal().
• Accès aux attributs d’instance year, month, day.
• Accès aux méthodes d’instance replace(year, month, day), toordinal(), weekday(), isoweekday(), isocalendar(), isoformat(), str (), ctime().
La spécification de chaque méthode est donnée par la page de documentation python3
https://docs.python.org/3.3/library/datetime.html#datetime.date. Votre classe
java doit reprendre les même fonctionnalités que l’objet python date, mais pas forcément
sous la même forme (changement du nombre de fonctions et des arguments attendus). La
fonction python str () au .toString() en java.
Pour information, le calendrier grégorien proleptique est le calendrier gréorien (celui
actuellement en vigueur dans la grande majorité du monde) étendu de sorte que toute
date passée et future appartient aussi au calendrier grégorien. Dans ce calendrier, seules
les années multiples de 4 mais non multiple de 100, et les années multiples de 400 sont
bissextiles (contiennent un 29 février). Enfin, une méthode simple pour calculer le jour de
la semaine est donnée dans l’article wikipédia Determination of the day of the week .
Votre travail si vous l’acceptez1 est le suivant :
1. Écrivez l’interface publique de votre classe java Date en transcrivant les fonctionnalités de l’objet python date en java. Vous prendrez soin à suivre les conventions
usuelles de nommage pratiquées en java, et à convertir les Error python en Exception
java équivalente, quitte à créer des exception spécifiques si nécessaires.
2. Selon le principe du test en boı̂te noir, pour chaque fonction publique de votre
classe, déterminez les classes d’équivalences permettant de définir une suite de test.
Donnez une suite de tests et valeurs attendues en retour correspondant aux classes
d’équivalences que vous avez choisies (pensez aux bornes lors du choix des valeurs).
Vous pouvez bien-entendu utiliser python pour obtenir les résultats attendus des tests
(voir section 3).
3. Implémentez vos tests sous JUnit et votre classe java Date. Selon le principe du
Test Driven Development, il est intéressant d’avoir un retour direct des tests en
ajoutant les fonctionnalités attendues au fur et à mesure de l’implémentation des
tests. Votre classe java doit être la seule classe testée, vous mockerait avec jmockit
les comportements externes ou non-déterministes.
4. Une fois que tous vos tests passent, notez et analysez le taux de couverture donné
par l’outil Emma. Selon le principe du test en boı̂te blanche, ajoutez des tests
si nécessaires afin d’augmenter votre taux de couverture. Dans votre rapport, vous
ferez apparaitre ces cas de tests comme tests ajoutés afin d’augmenter la couverture.
5. Ajoutez des annotations java de l’outil Checker Framework (fiche analyse statique
de code java) pour augmenter davantage la fiabilité de votre classe. Modifiez votre
classe si les résultats du checker ne vous conviennent pas. Terminez par une analyse
statique de votre programme par un outil suggéré dans la fiche prévue à cet effet,
et commentez le résultat.
1
sachant que vous n’avez pas le choix si vous voulez être noté.
2
3
Résultats des tests
Après avoir installé l’environnement python (déjà installé par défaut sur les machines de
TP et certaines distributions linux), il vous suffit de lancer l’invite de commande 2 python
pour tester le comportement attendu des différentes fonctions.
Par exemple :
>>> from datetime import *
>>> date.fromordinal(1)
datetime.date(1, 1, 1)
>>> date.fromordinal(32)
datetime.date(1, 2, 1)
>>> date.fromordinal(32).ctime()
’Thu Feb 1 00:00:00 0001’
>>> date(2016,10,17)
datetime.date(2016, 10, 17)
>>> date(2016,10,17).toordinal()
736254
>>> print(date.fromtimestamp(1476709390))
2016-10-17
>>> date(2016,13,13)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: month must be in 1..12
>>> date(2016,10,17).replace(year=2016,month=12)
datetime.date(2016, 12, 17)
De plus, vous pouvez utiliser la commande unix date -u -d @timestamp pour vérifier
les résultats attendus de vos tests. Par exemple date +%s donne le timestamp actuel, et
date -u -d @1476709390 vous donne la date correspond au timestamp 1476709390.
4
Rendu
Après avoir vérifié que le nom des membres du groupes apparait dans votre travail, vous
déposerez votre fichier .zip dans le dossier correspondant au cours sur Amétice (ouverture
prochaine).
Dans le cas où le dépôt amétice n’est pas possible, vous enverrez vos fichiers par mail
à [email protected].
2
Vous pouvez aussi passer par un environnement graphique comme idle.
3
Téléchargement