title: "Projets, CM2"
date: 2016-05-18
Conception d’un logiciel
Quoi-qu’est-ce ?
- « plan du code » (diagrammes de classes...)
- au début du projet, permet de prévoir le code à écrire
- pendant le projet, permet de suivre l’avancée du projet
- à la fin du projet, permet de documenter le code (maintenance)
$\rightarrow$ doit correspondre aux fonctionnalités prévues et au code réel
En pratique
- représentation graphique + explications
- si possible, utiliser un formalisme classique (UML)
- utiliser plusieurs niveaux d’abstraction (vue d’ensemble, vues détaillées)
## Étape de conception
- étape très importante, à faire avant le développement
- évite ”d’avoir à tout casser” au cours du développement
- permet de répartir le travail et de planifier plus finement
Quelques conseils
- faire simple, logique, classique (MVC, design patterns...)
- granularité : ne pas trop détailler sauf si important/incertain/complexe
- vérifier a priori que la conception permet d’implémenter les fonctionnalités prévues dans le cahier des charges
Développement d’un logiciel
## Méthode pour écrire du code
- comprendre le travail à faire (fonctionnalité/classe à implémenter)
- découper en étapes et les ordonner
- implémenter (coder, compiler, tester) étape par étape
## Conseils sur le développement en équipe
- faire le point régulièrement : travail fait, travail à faire
- répartir le travail de façon à éviter les conflits (fichiers différents)
- commits réguliers, branches si nécessaire
- faire attention à respecter le cahier des charges et la conception
## Programmation en binômes
- principe :
- un secrétaire + un relecteur sur une même machine
- les deux participent activement
- changer les rôles fréquemment
- intérêts :
- moins d’erreurs
- réflexions complémentaires
- motivation, convivialité (ou pas, mais bon...)
- à utiliser quand le travail n’est pas complètement trivial (donc tout le temps pour les projets L3)
Tests unitaires
- souvent : test « avec un printf » $\rightarrow$ pas bien
- principe des tests unitaires :
- écrire des petites fonctions de test en même temps que le code
- compiler toutes les fonctions de test dans un programme de test
- exécuter le programme de test
- vérification et non-régression automatiques
- attention : détection d’erreurs $\neq$ preuve
$\rightarrow$ à utiliser pour les modules de base (traitement de données) voire plus
## Programmation par pseudo-code
- principe :
- commencer par écrire le pseudo-code de l’algo en commentaire
- traduire chaque ligne de pseudo-code en code réel
- laisser le pseudo-code en commentaire
- intérêt :
- code plus facile à écrire
- code plus facile à relire
$\rightarrow$ très utile quand le code à écrire n’est pas trivial
## Gestion d’erreurs
- assertions
- logs
- codes de retour, variables d’état
- exceptions
$\rightarrow$ problème difficile
$\rightarrow$ se mettre d’accord sur la façon de faire au début du projet
## Conventions de code
- formatage du code, nommage des variables...
- conventions à définir et à respecter au niveau du projet
- permet d’avoir un code plus facile à lire
- utiliser des conventions classiques ou les expliciter dans la documentation
## Exemple de conventions de code C++
- notation dromadaire
un nom de classe commence par une majuscule :
class Event ...
- préfixe _ pour les attributs :
cpp
std::string _summary ;
préfixe ptr pour les pointeurs :
icalcomponent * _ptrIcal ;
- un nom de fonction commence par un verbe :
cpp
void updateDataFromIcal();
icalcomponent * getPtrIcal() const ;
maximum 80 caractères par ligne
...
Quelques outils de développement à décider
- langages, bibliothèques...
- outils de compilation, test, déploiement
- outils de gestion de code source (git, svn...)
- outils de gestion de projets (github, redmine, trac, sourceforge...)
Gestion de code source avec git
TODO
Gestion de projets avec github
TODO
Travail à réaliser
## Au début du projet
- créez des comptes et un dépôt sur github
- faire une conception prévisionnelle du logiciel
- faire un planning prévisionnel (et les tickets correspondant sur github)
## Tout au long du projet
- utiliser git pour réaliser le projet (code, documentations, cahier des charges...)
- utiliser github pour suivre le déroulement du projet
- faire le point régulièrement pour mettre à jour la conception du logiciel et la répartition du travail