
\section{Développement d'un logiciel}

\begin{frame}{\large \insertsection}
    \begin{block}{Méthode pour écrire du code}
    \begin{itemize}
    \item comprendre le travail à faire (fonctionnalité/classe à implémenter)
    \item découper en étapes et les ordonner
    \item implémenter (coder, compiler, tester) étape par étape
    \end{itemize}
  \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
    \begin{block}{Conseils sur le développement en équipe}
    \begin{itemize}
    \item faire le point régulièrement : travail fait, travail à faire
    \item répartir le travail de façon à éviter les conflits (fichiers différents)
    \item commits réguliers, branches si nécessaire
    \item faire attention à respecter le cahier des charges et la conception
    \end{itemize}
  \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
  \begin{block}{Programmation en binômes}
    \begin{itemize}
    \item principe : 
    \begin{itemize}
    \item un secrétaire + un relecteur \textbf{sur une même machine}
    \item les deux participent activement
    \item changer les rôles fréquemment
    \end{itemize}

    \item intérêts :
    \begin{itemize}
    \item moins d'erreurs
    \item réflexions complémentaires
    \item motivation, convivialité (ou pas, mais bon…)
    \end{itemize}

    \item[$\rightarrow$] à utiliser quand le travail n'est pas complètement trivial 
    \\(donc tout le temps pour les projets L3)
    \end{itemize}
  \end{block} 
\end{frame}



\begin{frame}{\large \insertsection}
  \begin{block}{Tests unitaires}
    \begin{itemize}
    \item souvent : test "avec un printf" $\rightarrow$ pas bien
    \item principe des tests unitaires :
    \begin{itemize}
    \item écrire des petites fonctions de test en même temps que le code
    \item compiler toutes les fonctions de test dans un programme de test
    \item exécuter le programme de test
    \item vérification et non-régression automatiques
    \item attention : détection d'erreurs $\neq$ preuve
    \end{itemize}
    \item[$\rightarrow$] à utiliser pour les modules de base (traitement de données) voire plus
    \end{itemize}
  \end{block} 
\end{frame}



\begin{frame}{\large \insertsection}
  \begin{block}{Programmation par pseudo-code}
    \begin{itemize}
    \item principe :
    \begin{itemize}
    \item commencer par écrire le pseudo-code de l'algo en commentaire
    \item traduire chaque ligne de pseudo-code en code réel
    \item laisser le pseudo-code en commentaire
    \end{itemize}
    \item intérêt :
    \begin{itemize}
    \item code plus facile à écrire
    \item code plus facile à relire 
    \end{itemize}
    \item[$\rightarrow$] très utile quand le code à écrire n'est pas trivial 
    \end{itemize}
  \end{block} 
\end{frame}



\begin{frame}{\large \insertsection}
  \begin{block}{Gestion d'erreurs}
    \begin{itemize}
    \item assertions
    \item logs
    \item codes de retour, variables d'état
    \item exceptions
    \item[$\rightarrow$] problème difficile
    \item[$\rightarrow$] se mettre d'accord sur la façon de faire au début du projet
    \end{itemize}
  \end{block} 
\end{frame}



\begin{frame}{\large \insertsection}
  \begin{block}{Conventions de code}
    \begin{itemize}
    \item formatage du code, nommage des variables…
    \item conventions à définir et à respecter au niveau du projet
    \item permet d'avoir un code plus facile à lire
    \item utiliser des conventions classiques ou les expliciter dans la documentation
    \end{itemize}
  \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
  \begin{block}{Exemple de conventions de code C++}
    \begin{itemize}
    \item notation dromadaire
    \item un nom de classe commence par une majuscule : \\ 
    \mintinline{c++}{class Event ... }
    \item préfixe \mintinline{c++}{_} pour les attributs : \\ 
    \mintinline{c++}{std::string _summary;}
    \item préfixe \mintinline{c++}{ptr} pour les pointeurs : \\
    \mintinline{c++}{icalcomponent * _ptrIcal;}
    \item un nom de fonction commence par un verbe : \\ 
    \mintinline{c++}{void updateDataFromIcal();} \\
    \mintinline{c++}{icalcomponent * getPtrIcal() const;}
    \item maximum 80 caractères par ligne
    \item …
    \end{itemize}
  \end{block} 
\end{frame}






\begin{frame}{\large \insertsection}
  \begin{block}{Quelques outils de développement à décider}
    \begin{itemize}
    \item langages, bibliothèques…
    \item outils de compilation, test, déploiement
    \item outils de gestion de code source (svn, git…)
    \item outils de gestion de projets (redmine, trac, github, sourceforge…)
    \end{itemize}
  \end{block} 
\end{frame}

