Author: tziade
Date: Fri Mar 24 23:33:25 2006
New Revision: 2719

Modified:
   cookbook/trunk/recipe50.en.tex
Log:
save point, started translation

Modified: cookbook/trunk/recipe50.en.tex
==============================================================================
--- cookbook/trunk/recipe50.en.tex      (original)
+++ cookbook/trunk/recipe50.en.tex      Fri Mar 24 23:33:25 2006
@@ -3,6 +3,7 @@
 \include{macros}
 \status{draft}
 \author{Tarek Ziad�}
+\translator{Tarek Ziad�}
 
 \begin{document}
 
@@ -10,11 +11,165 @@
 functional testing}
 
 \begin{problem}
-Not translated in english yet.
+Coding, testing, documenting, coding, testing, coding, testing...
+
+The good pace of the different activities of a developer daily job is hard
+to find. In ends of projects, the rush and the stress often reduce the
+testing and the documenting parts, so the work can be finished on time. But
+this shortcut often leads to backdrafts later: end of projects are often
+periods where the code is highly refactored.
+
+This problem can be partly reduced with good practices explained in this
+recipe. They apply to Zope of course, but the principles are the same
+for other Python project.
 \end{problem}
 
 \begin{solution}
-Not translated in english yet.
-\end{solution}
+\section*{Understanding the developer duties}
+
+A developer has three duties:
+\begin{itemize}
+\item Coding;
+\item documenting;
+\item testing;
+\end{itemize}
+
+The first phase is of course TDD coding. The a cycle of functional tests
+is made. The the code might be changed, to add new features, changes, etc.
+Theses cycles are well documented and explained in methodologies like
+RUP (IBM Rational Unified Process). This is out of topic though, but
+interested readers can get complementary informations on Rational website:
+
+\url{http://www.rational.com}
+
+\section*{Creating the code}
+
+To create a new feature, the developer gets a feature request, made of
+functional specifications and sometimes technical specifications.
+
+Using this document, she creates the code following these steps:
+\begin{itemize}
+\item Transcripting in a reST document (doctest) the specifications;
+\item inserting code examples, that fullfills the features asked;
+\item coding the underlying code, so the examples in the document
+works for real.
+\end{itemize}
+
+\subsection*{Transcripting the need into a doctest file}
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+Transcrire en doctest les besoins exprim�s se fait en synth�tisant au maximum 
le
+cahier des charges, et en d�crivant la structure du paquet qui va �tre
+d�velopp�.
+
+Prenons l'exemple d'un module en charge de r�cup�rer des flux RSS pour les
+stocker dans des objets Python persistants, puis les rendre affichables dans
+l'application. Le d�veloppeur d�cide d'organiser son paquet en trois modules:
+\begin{itemize}
+\item \code{rssfetcher.py}: module en charge de la r�cup�ration des flux RSS;
+\item \code{rssobject.py}: module en charge de la cr�ation et du stockage
+des donn�es;
+\item \code{rssview.py}: module en charge de l'affichage des donn�es.
+\end{itemize}
+
+\noindent Il commence par �crire quatre fichiers doctests, qui expriment cette
+structure:
+\begin{itemize}
+\item \code{README.txt}
+\item \code{rssfetcher.txt}
+\item \code{rssobject.txt}
+\item \code{rssview.txt}
+\end{itemize}
+
+Le fichier \code{README.txt} d�crit en quelques phrases l'objectif du paquet,
+et pr�sente sa structure.
+
+\codetitle{Fichier README.txt}
+\begin{Verbatim}
+rssreader
+=========
+
+Ce paquet permet de pr�senter des flux rss. Il est organis� en trois
+composants:
+
+- rssfetcher: sait lire un flux RSS 1.0
+- rssobject: stocke le flux et fourni des m�thodes d'acc�s
+- rssview: sait afficher un flux dans le navigateur
+\end{Verbatim}
+
+\noindent Chaque module est pr�sent� � son tour dans un doctest.
 
+\codetitle{Fichier rssfetcher.txt}
+\begin{verbatim}
+rssfetcher
+==========
+
+Le module rssreader transforme un fichier XML au format RSS 1.0
+vers une structure Python exploitable. Il est invoqu� avec l'URL
+d'un flux et renvoi une liste contenant les entr�es du flux.
+\end{verbatim}
+
+A ce stade, le d�veloppeur n'a pas encore �crit de code, mais
+dispose d'une sp�cification technique et architecturelle exploitable.
+
+\subsection*{Ins�rer des exemples de codes}
+
+Sur la base de ces fichiers textes, le d�veloppeur peut commencer
+� pr�parer le d�veloppement des modules, en explicitant la face
+visible de ces derniers, c'est � dire les API qui seront utilis�es
+dans d'autres modules.
+
+\codetitle{Modification du fichier rssfetcher.txt}
+\begin{verbatim}
+rssfetcher
+==========
+
+Le module rssfetcher transforme un fichier XML au format RSS 1.0
+vers une structure Python exploitable. Il est invoqu� avec l'URL
+d'un flux et renvoi une liste contenant les entr�es du flux.
+
+Il fourni une fonction `fetchFeed(source)` qui renvoie une structure Python
+en fonction d'une URL ou d'un fichier ::
+
+    >>> from rssfetcher import fetchFeed
+    >>> fetchFeed('tests/rss.xml')
+    [{'Subject': 'entry one', 'content': "le contenu est ici"}]
+
+\end{verbatim}
+\begin{codenotes}
+\item Le paquet doit pr�voir dans un sous r�pertoire un fichier
+�chantillon \code{rss.xml}, contenant un flux utilis� pour les tests.
+\end{codenotes}
+
+\noindent Ce principe est appliqu� pour l'ensemble des modules du paquet,
+susceptibles de fournir des fonctionnalit�s.
+
+\subsection*{D�velopper les fonctionnalit�s}
+
+Le doctest pr�c�dent ne peut bien s�r fonctionner que si l'impl�mentation
+est r�alis�e. Le d�veloppeur con�oit donc le module \code{rssfetcher.py}
+jusqu'� ce que le test du doctest passe. Ce d�veloppement n�cessitera
+certainement la cr�ation d'autres tests unitaires, qui seront
+con�us classiquement dans des classes dans le sous-r�pertoire de \code{tests}.
+
+Lorsque tous les modules sont con�us, \code{README.txt} contient un exemple
+complet d'utilisation, qui simule g�n�ralement quelques directives ZCML
+et quelques �changes avec le publisher.
+
+\section*{Maintenir et faire �voluer le code}
+
+L'�volution du paquet, que ce soit dans le cadre d'une correction, ou
+d'une modification, doit se faire de la m�me mani�re: les fichiers textes
+sont revus en premiers, puis le code est modifi� en cons�quence.
+
+Les corrections de bogues sont trait�s d'une mani�re particuli�re:
+un test unitaire qui reproduit le probl�me est ajout� dans les classes de
+tests, et le code invoqu� corrig�. Ajouter ces tests dans les doctests
+d�nature leur objectif secondaire: servir de documentation.
+
+Cependant, si il est explicitement demand� que les bugfix soient document�s,
+et facilement lisibles, un doctest \code{bugfix.txt} peut �tre ajout�.
+Ce n'est pas le cas pour Zope 3 par exemple, car le couple tracker+svn fourni
+une bonne tracabilit� des bugfix.
+\end{solution}
 \end{document}
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to