Faculté
des Sciences
Master 2 FSIL
Fiabilit´
e Logicielle 1
TP-Bilan Fiabilit´e 1
D´epartement Informatique et Interactions
Ann´ee 2016-2017
Ce dernier TP permet de faire un bilan de l’U.E. Fiabilit´e 1 et reprend l’ensemble des
notions vues en cours.
1 Travail `a effectuer
Ce Tp est `a rendre id´ealement par groupe de 4 ´etudiants avant le 3 novembre 10h. Le rendu
comprend vos sources java (tests compris), et un rapport en pdf r´epondant aux diff´erentes
questions (et pouvant contenir des approfondissements, et/ou explications techniques). Ce
travail sera not´e et comptera pour 60% pour votre note de TP de l’U.E. Comme il contient
un travail non nulle de d´eveloppement, il est int´eressant de se partager/distribuer les
aches de travail dans le groupe. Enfin, ce travail est un bon exercice pour r´eviser 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 `a impl´ementer, `a l’exception de l’attribut
de classe date.resolution, les m´ethodes date.timetuple(),date.strftime(format) et
date. format (format), ainsi que la surcharge des op´erateurs (non disponible en java).
L’ensemble des fonctionnalit´es attendues est donc le suivant :
Acc`es aux attributs de classe min,max.
Acc`es aux m´ethodes de classe today(),fromtimestamp(), et fromordinal().
Acc`es aux attributs d’instance year,month,day.
Acc`es aux m´ethodes d’instance replace(year, month, day), toordinal(), week-
day(), isoweekday(), isocalendar(), isoformat(), str (), ctime().
La sp´ecification de chaque m´ethode est donn´ee par la page de documentation python3
https://docs.python.org/3.3/library/datetime.html#datetime.date. Votre classe
java doit reprendre les mˆeme fonctionnalit´es que l’objet python date, mais pas forc´ement
sous la mˆeme forme (changement du nombre de fonctions et des arguments attendus). La
fonction python str () au .toString() en java.
Pour information, le calendrier gr´egorien proleptique est le calendrier gr´eorien (celui
actuellement en vigueur dans la grande majorit´e du monde) ´etendu de sorte que toute
date pass´ee et future appartient aussi au calendrier gr´egorien. Dans ce calendrier, seules
les ann´ees multiples de 4 mais non multiple de 100, et les ann´ees multiples de 400 sont
bissextiles (contiennent un 29 f´evrier). Enfin, une m´ethode simple pour calculer le jour de
la semaine est donn´ee dans l’article wikip´edia Determination of the day of the week .
Votre travail si vous l’acceptez1est le suivant :
1. ´
Ecrivez l’interface publique de votre classe java Date en transcrivant les fonction-
nalit´es de l’objet python date en java. Vous prendrez soin `a suivre les conventions
usuelles de nommage pratiqu´ees en java, et `a convertir les Error python en Exception
java ´equivalente, quitte `a cr´eer des exception sp´ecifiques si n´ecessaires.
2. Selon le principe du test en boˆıte noir, pour chaque fonction publique de votre
classe, d´eterminez les classes d’´equivalences permettant de d´efinir une suite de test.
Donnez une suite de tests et valeurs attendues en retour correspondant aux classes
d’´equivalences que vous avez choisies (pensez aux bornes lors du choix des valeurs).
Vous pouvez bien-entendu utiliser python pour obtenir les r´esultats attendus des tests
(voir section 3).
3. Impl´ementez vos tests sous JUnit et votre classe java Date. Selon le principe du
Test Driven Development, il est int´eressant d’avoir un retour direct des tests en
ajoutant les fonctionnalit´es attendues au fur et `a mesure de l’impl´ementation des
tests. Votre classe java doit ˆetre la seule classe test´ee, vous mockerait avec jmockit
les comportements externes ou non-d´eterministes.
4. Une fois que tous vos tests passent, notez et analysez le taux de couverture donn´e
par l’outil Emma. Selon le principe du test en boˆıte blanche, ajoutez des tests
si n´ecessaires afin d’augmenter votre taux de couverture. Dans votre rapport, vous
ferez apparaitre ces cas de tests comme tests ajout´es 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´e de votre classe. Modifiez votre
classe si les r´esultats du checker ne vous conviennent pas. Terminez par une analyse
statique de votre programme par un outil sugg´er´e dans la fiche pr´evue `a cet effet,
et commentez le r´esultat.
1sachant que vous n’avez pas le choix si vous voulez ˆetre not´e.
2
3 R´esultats des tests
Apr`es avoir install´e l’environnement python (d´ej`a install´e par d´efaut sur les machines de
TP et certaines distributions linux), il vous suffit de lancer l’invite de commande 2python
pour tester le comportement attendu des diff´erentes 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´erifier
les r´esultats 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`es avoir v´erifi´e que le nom des membres du groupes apparait dans votre travail, vous
d´eposerez votre fichier .zip dans le dossier correspondant au cours sur Am´etice (ouverture
prochaine).
Dans le cas o`u le d´epˆot am´etice n’est pas possible, vous enverrez vos fichiers par mail
2Vous pouvez aussi passer par un environnement graphique comme idle.
3
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !