--- 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 : ```cpp class Event ... ``` - préfixe _ pour les attributs : ```cpp std::string _summary ; ``` - préfixe ptr pour les pointeurs : ```cpp 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](https://github.com) - 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