Arnaud Labourel
8 ou 15 avril 2019
Un programme propre :
Fonctionnel \(\neq\) propre.
Pourquoi faire attention à son code :
On passe plus du temps à lire du code qu’à en écrire.
\(\implies\) Coder proprement, c’est gagner du temps !
“Mal nommer un objet, c’est ajouter au malheur de ce monde”
En ce qui concerne NSI, le DIU EIL qui a été présenté par l’IA IPR, lors de la réunion organisée par l’UFR, permettra de former les stagiaires, notamment dans le domaine de l’IA. Les IA des stagiaires vont d’ailleurs être réalisées sous peu.
Autre exemple de programme mal écrit :
Programme légèrement refactoré :
i
, j
, …a1
, a2
, a3
, …rec
, res
, …temporary
, result
, …account_list
doit être une list
(et pas un set
ou un autre type)persons
et non person
.genymdhms
, …La plupart des langages (Python inclus) ont des conventions pour l’écriture des noms et la manière de coder les espaces.
Pour python c’est la PEP 8 !
Utilisation du snake case (casse de serpent) dans la plupart des cas :
words_separated_with_underscores
snake_case (commençant par une minuscule) : pour les méthodes, variables, attributs
Exemples : append
, length
, add_all
, …
ALL_CAPS : pour les constantes
Exemples : MAX_OVERFLOW
, TOTAL
, …
CamelCase (commençant par une majuscule) : pour les noms de classes
Exemples : Rectangle
, SmartCounter
, …
if
, else
, while
d’une ligne (qui appellent d’autres fonctionsrefactor \(\rightarrow\) extract \(\rightarrow\) method
pour extraire du code dans une fonction
Une fonction ne doit faire qu’une seule chose.
Pour cela, elle ne doit réaliser que des étapes de même niveau d’abstraction.
On décompose la fonction :
Pour faire la cuisine je dois (premier niveau d’abstraction) :
Pour choisir une recette, je dois (deuxième niveau d’abstraction):
Des noms :
Utilisez le refactor (Maj + F6 sur Pycharm par défaut) !
Éviter la duplication pour :
Besoin de commenter si le code n’est pas assez expressif.
\(\implies\) Rendre le code plus expressif.
Car il est impossible de maintenir des commentaires à jour.
Don’t comment bad code. Rewrite it.
Rechercher et caractériser les fonctions qu’un logiciel devrait avoir pour satisfaire les besoins de son utilisateur.
Hiérarchiser ces fonctions.
Utilisée pour créer mais aussi améliorer un logiciel (ou plus généralement un produit).
Fonction principale : la raison pour laquelle le logiciel est créé. Cette fonction peut être divisée en plusieurs fonctions simples.
Fonction contrainte : conditions que le produit doit vérifier mais qui ne sont pas sa raison d’exister (par exemple la sécurité).
Fonction complémentaire : ce qui facilite l’utilisation du logiciel, l’améliore ou le complète.
Un outil de l’analyse fonctionnelle : lister, décrire et hiérarchiser les fonctions.
Fonction principale :
Fonctions contraintes :
Fonctions complémentaires:
Livrable : produit destiné à la livraison : documentation, code, tests, etc…
Jalon : fin d’une étape ou évènement important.
Le début d’un projet et sa fin sont des jalons. On fixe des jalons intermédiaires pour mesurer l’avancée du projet.
Un jalon peut être un livrable lié à une date.
Développer un logiciel implique de :
Deux types de management pour y parvenir :
Méthode traditionnelle, inspirée par le BTP.
Passage d’une phase à l’autre uniquement quand la précédente est terminée et vérifiée.
Inconvénient : très peu réactif en cas d’erreur ou de modification nécessaire en cours de projet.
Un amélioration du modèle en cascade : limiter le retour aux étapes précédentes.
Standard depuis 1980.
Phase ascendante : renvoie de l’information sur la phase correspondante pour améliorer le logiciel.
Phase descendante : anticipation des attendus des étapes montantes.
Inconvénient : détache complètement la conception de la réalisation.
Objectifs :
Définition par le manifeste Agile (2001).
Exemples :
Git est un gestionnaire de versions décentralisé.
Objectif : gérer l’évolution du contenu d’une arborescence de fichiers.
Intérêts :
Un dépôt git est composé de trois zones distinctes :
Étapes du développement :
Un bon commit :
Démarrer un dépôt git :
Depuis Github : bouton “Clone or download” pour cloner le repo via SSH ou HTTPS.
Attention : initialisation du dépôt mais aucun fichier versionné pour l’instant.
Passer des fichiers de l’espace de travail à l’index :
Par exemple, pour ajouter tous les fichiers .py
:
Passer des fichiers de l’index au dépôt :
En ajoutant un message de commit :
Pour passer d’un coup du répertoire de travail au dépôt en ajoutant tout (attention à bien être sûr qu’on veut tout inclure dans le commit):
Connaître les changements à valider :
Afficher l’historique des commit de la branche :
Permettent de développer en parallèle.
Pour :
Créer une branche :
Se déplacer sur une branche :
Faire les deux d’un coup :
Voir les branches et sur laquelle on se trouve :
Pour récupérer sur la branche local sur laquelle vous vous trouvez, les modifications de la branches distante correspondante :
Attention la branche distante doit être dans un état descendant directement de votre dépôt local.
Pour envoyer les commit locaux de la branche courante sur la branche distante du même nom :
Pour spécifier quoi pousser où :
Lors du premier push, pour lier la branche distante et locale :
Théorisé par Kent Beck