From b168ab368a1bbe9fa630d89f329170e28d2ab8ff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Derrode?= <stephane.derrode@ec-lyon.fr>
Date: Thu, 24 Sep 2020 12:03:05 +0200
Subject: [PATCH] MAJ sujet BE #2

---
 seance2_4h/figures/spyder-tests.png    | Bin 41286 -> 0 bytes
 seance2_4h/figures/spyder-unittest.png | Bin 4633 -> 0 bytes
 seance2_4h/seance2_4h.md               | 134 ++++++++++++++++---------
 3 files changed, 89 insertions(+), 45 deletions(-)
 delete mode 100644 seance2_4h/figures/spyder-tests.png
 delete mode 100644 seance2_4h/figures/spyder-unittest.png

diff --git a/seance2_4h/figures/spyder-tests.png b/seance2_4h/figures/spyder-tests.png
deleted file mode 100644
index 6e0b0be2309ee3d7d989d878f04856c8b0ae2487..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 41286
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

diff --git a/seance2_4h/figures/spyder-unittest.png b/seance2_4h/figures/spyder-unittest.png
deleted file mode 100644
index e8760f1d8ee314fb4668179a565949dce8ed95ad..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4633
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

diff --git a/seance2_4h/seance2_4h.md b/seance2_4h/seance2_4h.md
index f028023..b998a3e 100644
--- a/seance2_4h/seance2_4h.md
+++ b/seance2_4h/seance2_4h.md
@@ -5,9 +5,9 @@
 # TD2 : Modélisation de formes géométriques
 
 
-Nous allons aborder dans ce TD le concept d'héritage de la programmation objet, et l'utilisation de tests unitaires pour guider le développement logiciel et améliorer sa qualité.
+Nous allons aborder dans ce TD le concept d'héritage de la programmation objet, et l'utilisation de tests unitaires pour améliorer la qualité du logiciel.
 
-Le but de ce TD est de concevoir un module pour manipuler des formes géométriques avec Python. Ce module sera utilisé dans les TDs suivants, donc les tests seront essentiels pour limiter les éventuels bugs. Vous commencerez par définir les classes et leurs attributs, puis par écrire les tests unitaires de votre module, et terminerez par l'implémentation des méthodes.
+Le but de ce TD est de concevoir un module pour manipuler des formes géométriques avec Python. Ce module sera utilisé dans les TDs suivants, donc les tests seront essentiels pour limiter les éventuels bugs. Vous commencerez par définir les classes et leurs attributs, puis implémenterez les méthodes, et les validerez avec des tests.
 
 
 ## Modélisation avec UML (1h)
@@ -40,73 +40,117 @@ __Exercice 3 -__ Complétez le diagramme UML avec ces méthodes. Les constructeu
 __Exercice 4 -__ Écrivez un squelette de code correspondant à votre diagramme UML, dans un fichier _formes.py_. Seuls les constructeurs devront être implémentés. À l'intérieur des autres méthodes, vous mettrez l'instruction `pass` de Python (qui ne fait rien mais vous rappelle que le code est inachevé).
 
 
-## Tests unitaires (1h)
-
-Il convient à présent de rédiger des tests, qui échoueront tant que chaque fonction ne sera pas implémentée et correcte. Dans la méthodologie _Test Driven Development_, on les écrit toujours avant le code, au début ils échouent tous, et à mesure de l'avancement du projet le nombre de tests passés avec succès augmente. Nous utiliserons le module _pytest_ présenté en cours.
+## Implémentation des méthodes (2h)
 
-### Installation de _pytest_
+Créez un fichier _test_formes.py_ dans le même dossier que _formes.py_ et initialisé avec le code suivant :
 
-Nous allons d'abord installer _pytest_, ainsi qu'un module permettant de lancer les tests depuis l'interface de Spyder. Ouvrez le terminal d'Anaconda (sous Windows, Menu Démarrer -> Anaconda -> Anaconda Prompt, sous Linux/Mac le terminal de base suffit). Exécutez-y la commande suivante :
+```python
+from formes import *
 
-```sh
-conda install -c spyder-ide spyder-unittest pytest
+def test_Rectangle():
+    r = Rectangle(10, 20, 100, 50)
+    str(r)
+    assert r.contient_point(50, 50)
+    assert not r.contient_point(0, 0)
+    r.redimension_par_points(100, 200, 1100, 700)
+    assert r.contient_point(500, 500)
+    assert not r.contient_point(50, 50)
+
+def test_Ellipse():
+    e = Ellipse(60, 45, 50, 25)
+    str(e)
+    assert e.contient_point(50, 50)
+    assert not e.contient_point(11, 21)
+    e.redimension_par_points(100, 200, 1100, 700)
+    assert e.contient_point(500, 500)
+    assert not e.contient_point(101, 201)
+
+if __name__ == '__main__':
+    test_Rectangle()
+    test_Ellipse()
 ```
 
-❗ Si vous rencontrez une erreur comme `conda: command not found`, c'est que l'exécutable `conda` n'est présent dans aucun des dossiers visités par le terminal (essayez `echo %PATH%` pour en afficher la liste sous Windows, et `echo $PATH` sous Linux/Mac). Sous Windows, vérifiez que vous ouvrez bien le terminal d'Anaconda (pas le terminal par défaut du système). Sous Linux/Mac, la commande `export PATH=~/anaconda3/bin:/usr/local/anaconda3/bin:/usr/anaconda3/bin:$PATH` va ajouter (temporairement) une liste de répertoires usuels à la liste de recherche.
+La commande `assert` de Python permet de spécifier une assertion (une condition qui doit toujours être vraie) à un point du programme. Elle sert avant un bloc de code à en documenter les prérequis, et après un bloc de code à en vérifier les résultats. Son échec signifie alors un bug du programme. `assert` reçoit une expression (comme ce qu'on passe à `if`), et vérifie son résultat :
 
-Une fois les modules installés, __redémarrez Spyder__ et créez un fichier _test_formes.py_ avec l'exemple de code suivant :
+* Si `True`, l'assertion est vraie donc pas de problème, `assert` ne fait rien.
+* Si `False`, l'assertion est fausse donc une exception `AssertionError` est déclenchée.
+* Si l'expression renvoie une autre valeur, celle-ci est convertie en booléen pour se ramener aux deux cas précédents.
 
-```python
-from formes import *
+La vérification de cette condition est faite une fois au moment de son exécution (l'assertion ne sera pas valide dans le reste du programme). Dans _test_formes.py_ on utilise `assert` pour tester une fonctionnalité qui n'est pas encore implémentée, l'exécution de ce fichier échouera tant que les méthodes de seront pas codées. À l'issue de cette partie, elle ne devra renvoyer aucune erreur !
+
+__Exercice 5 -__ Implémentez les méthodes d'affichage (`__str__`) de chacune des classes dans _formes.py_. Vous pourrez vérifier leur bon fonctionnement en exécutant _formes.py_ (bouton Run File - F5), puis par exemple avec une commande `print(Rectangle(0, 0, 10, 10))` dans la console IPython.
 
-def test_heritage():
-	assert issubclass(Rectangle, Forme)
-	assert issubclass(Ellipse, Forme)
+__Exercice 6 -__ Implémentez les méthodes d'accès getter/setter pour les champs privés de chacune des classes. Pour vérifier que les champs sont bien privés, le code suivant __doit__ échouer avec une erreur `AttributeError` :
+
+```python
+r = Rectangle(0, 0, 10, 10)
+print(r.__l, r.__h)
 ```
 
-__Exécutez ce fichier__ dans Spyder (même s'il ne fait rien), ce qui a pour effet d'initialiser le répertoire courant de Spyder à votre répertoire de travail. Allez ensuite dans le menu Run -> Run unit tests, pour configurer le module _spyder-unittest_.
+__Exercice 7 -__ Implémentez les méthodes `contient_point` des trois sous-classes. Vous vérifierez que les deux premiers `assert` des méthodes de test ne déclenchent pas d'erreur.
 
-<center><img src="figures/spyder-unittest.png" style="width:100%"/></center>
+__Exercice 8 -__ Implémentez les méthodes `redimension_par_points` de chacune des sous-classes. Le fichier _test_formes.py_ doit à présent s'exécuter sans problème.
 
+## Tests unitaires (1h)
 
-Sélectionnez _pytest_, vérifiez que le dossier indiqué correspond à votre dossier de travail (celui contenant les fichiers _formes.py_ et _test_formes.py_), et validez. Un nouvel onglet _Unit testing_ apparaît dans l'espace en haut à droite, avec un bouton _Run tests_. Lorsque vous cliquez dessus :
+Une fois développées, vos classes vont être utilisées pour des besoins que vous n'aviez pas forcément anticipés. Certains vont révéler des bugs, et vos classes seront amenées à évoluer, y compris pour acquérir de nouvelles méthodes. Les tests unitaires servent à documenter les cas d'utilisation supportés, et également à vous assurer qu'une modification de votre code n'a pas introduit un bug (une _régression_).
 
-* _pytest_ cherche (dans le dossier que vous venez de configurer) tous les fichiers de la forme _test\_\*.py_ et _\*\_test.py_.
-* Dans chacun de ces fichiers, _pytest_ exécute toutes les fonctions préfixées par `test`.
-* Chaque test qui s'exécute sans déclencher d'exception est considéré valide.
-* La fonction `test_heritage` dans le fichier _test_formes.py_ correspond à ces critères, donc elle est exécutée et son résultat contribue à un test "passé" (avec succès).
+On vous fournit une méthode de test plus exhaustive pour __Rectangle__ :
 
-<center><img src="figures/spyder-tests.png" style="width:100%"/></center>
+```python
+def test_Rectangle():
+    r = Rectangle(-20, -10, 40, 20)
+    assert r.contient_point(0, 0)
+    assert r.contient_point(-20, 0)
+    assert r.contient_point(0, -10)
+    assert r.contient_point(20, 0)
+    assert r.contient_point(0, 10)
+    assert not r.contient_point(-40, 0)
+    assert not r.contient_point(0, -20)
+    assert not r.contient_point(40, 0)
+    assert not r.contient_point(0, 20)
+    assert not r.contient_point(-40, -20)
+    assert not r.contient_point(40, -20)
+    assert not r.contient_point(40, 20)
+    assert not r.contient_point(-40, 20)
+    reference = str(r)
+    r.redimension_par_points(-20, 10, 20, -10)
+    assert str(r) == reference
+    r.redimension_par_points(20, 10, -20, -10)
+    assert str(r) == reference
+    r.redimension_par_points(20, -10, -20, 10)
+    assert str(r) == reference
+    r.redimension_par_points(-20, -10, 20, 10)
+    assert str(r) == reference
+```
 
-### Définition des tests
+__Exercice 9 -__ Exécutez ce test sur votre code, et corrigez les éventuels bugs. Représentez ensuite dans un logiciel de dessin (ex. https://app.diagrams.net/) le rectangle et les positions des points qui sont testés. Quels bugs sont visés par chacun de ces tests ?
 
-__Exercice 5 -__ Dans le fichier _test_formes.py_, ajoutez une fonction `test_Rectangle_contient_point()` qui instancie un __Rectangle__ avec des coordonnées de votre choix, et vérifie avec `assert` que la méthode `contient_point` renvoie le bon résultat pour différentes coordonnées. L'exécution du test doit échouer puisque votre code est encore vide.
+La rédaction de tests unitaires consiste souvent à anticiper les bugs courants, pour améliorer la qualité du logiciel dès sa conception. On cherche donc délibérément à provoquer des situations difficiles à gérer (ex. points _sur_ le bord du rectangle). De telles situations sont par exemple :
 
-Pour l'exercice suivant, on vous donne un exemple d'implémentation de la méthode `contient_point` pour la classe __Rectangle__. La classe __Forme__ a été omise pour réduire la taille du code (mais dans votre fichier elle devra bien être présente).
+* le choix de `<` ou `<=` dans le code
+* le traitement de valeurs négatives
+* les erreurs d'arrondis dans les opérations avec `float`
+* la gestion de valeurs nulles (ex. largeur ou hauteur)
 
-```python
-class Rectangle:
-	def __init__(self, x, y, l, h):
-		self.x = x
-		self.y = y
-		self.__l = l
-		self.__h = h
-	
-	def contient_point(self, x, y):
-		return self.x < x < self.__l or \
-		       self.y < y < self.__h
-```
+__Exercice 10 -__ Dessinez une ellipse dans votre logiciel de dessin, et représentez tous les points qu'il convient de tester avec `contient_point`. Pour chaque point (ou groupe de points), indiquez le type de bug qu'il vise en particulier. Implémentez ces tests dans _test_formes.py_.
 
-__Exercice 6 -__ Cette méthode est buggée. Comment la corriger ? Vos tests l'avaient-ils repéré ? Si ce n'est pas le cas, trouvez les coordonnées qui donnent un mauvais résultat et ajoutez-les en tests dans la fonction `test_Rectangle_contient_point`.
+__Exercice 11 -__ Dessinez une forme issue de votre troisième classe dans le logiciel de dessin, et choisissez les points qu'il faudra tester. Implémentez une nouvelle méthode de tests pour cette classe dans _test_formes.py_.
 
 
 
-## Implémentation des méthodes (2h)
+## Pour aller plus loin
+
+Lorsque votre programme utilise un grand nombre de tests unitaires, il est possible d'automatiser leur collecte, leur exécution, et l'affichage d'un rapport synthétique. On utilisera alors le module [_pytest_](https://docs.pytest.org/en/stable/) pour Python.
+
+❗ Son installation nécessite que vous ayez installé Anaconda pour l'utilisateur de la machine, et non global au système. Il suffit alors d'ouvrir un terminal d'Anaconda (sous Windows, Menu Démarrer -> Anaconda -> Anaconda Prompt, sous Linux/Mac le terminal de base suffit), et d'y lancer la commande suivante :
 
-__Exercice 7 -__ Implémentez les méthodes d'affichage (`__str__`) de chacune des classes. Il ne sera pas nécessaire d'écrire des tests pour ces méthodes.
+```sh
+conda install pytest
+```
 
-__Exercice 8 -__ Implémentez les méthodes d'accès getter/setter pour les champs privés de chacune des classes. À l'aide de [pytest.raises](https://docs.pytest.org/en/stable/assert.html#assertions-about-expected-exceptions), vous testerez le déclenchement d'erreurs si on essaie d'accéder directement aux attributs.
+Si vous rencontrez une erreur comme `conda: command not found`, c'est que l'exécutable `conda` n'est présent dans aucun des dossiers visités par le terminal (essayez `echo %PATH%` pour en afficher la liste sous Windows, et `echo $PATH` sous Linux/Mac). Sous Windows, vérifiez que vous ouvrez bien le terminal d'Anaconda (pas le terminal par défaut du système). Sous Linux/Mac, la commande `export PATH=~/anaconda3/bin:/usr/local/anaconda3/bin:/usr/anaconda3/bin:$PATH` va ajouter (temporairement) une liste de répertoires usuels à la liste de recherche.
 
-__Exercice 9 -__ Implémentez les méthodes `contient_point` des deux sous-classes restantes. Vous fournirez pour chacune une fonction de tests avec des jeux de coordonnées pertinents.
+__Exercice 12 -__ Vérifiez que _pytest_ est installé en exécutant la commande `import pytest` qui ne doit pas renvoyer d'erreur. Ensuite exécutez la commande `pytest.main()`. Combien de fichiers ont été "collectés" ? Combien de tests ont réussi ? Combien ont échoué ?
 
-__Exercice 10 -__ Implémentez les méthodes `redimension_par_points` de chacune des sous-classes. Vous fournirez également des tests validant leur fonctionnement quels que soient les points en entrée.
+__Exercice 13 -__ [pytest.raises](https://docs.pytest.org/en/stable/assert.html#assertions-about-expected-exceptions) permet de vérifier qu'un bloc de code déclenche une exception (`raises` ne fait rien si le code échoue, et échoue si le code ne déclenche pas d'exception). Lisez les exemples de la documentation et ajoutez des tests pour vérifier que les variables privées sont inaccessibles de l'extérieur de chaque classe.
-- 
GitLab