<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>muvik-multigrid &#187; DocString</title>
	<atom:link href="http://www.muvik.de/tag/docstring/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.muvik.de</link>
	<description>open source - engineering - programming</description>
	<lastBuildDate>Wed, 28 Jul 2010 07:56:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Kurztipp 5: Python-Code mit DocStrings testen</title>
		<link>http://www.muvik.de/2010/05/05/kurztipp-5-python-code-docstrings-testen/</link>
		<comments>http://www.muvik.de/2010/05/05/kurztipp-5-python-code-docstrings-testen/#comments</comments>
		<pubDate>Wed, 05 May 2010 09:00:13 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Kurztipps]]></category>
		<category><![CDATA[DocString]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=540</guid>
		<description><![CDATA[Heute im Fokus: Testen von Funktionen mit den DocStrings. Auch unter Programmierern sind Stammtischgespräche verbreitet. Je nach Bewusstseinszustand vertritt der eine oder andere sogar die Meinung, dass der überwiegende Anteil der Zeit beim Entwickeln einer Software auf das Debuggen, Fehlersuchen und Testen verwendet wird. Auch wenn das wahr sein sollte, besteht für Python-Programmierer keinen Grund [...]]]></description>
			<content:encoded><![CDATA[<img class="cat-img-wide" alt="Viktors Kurztipp" src="http://muvik.de/categorie_images/viktorskurztipp.gif" title="Viktors Kurztipp zu diversen Themen" width="443" height="98" />
<p class="preview">Heute im Fokus: Testen von Funktionen mit den DocStrings. </br><br />
Auch unter Programmierern sind Stammtischgespräche verbreitet. Je nach Bewusstseinszustand vertritt der eine oder andere sogar die Meinung, dass der überwiegende Anteil der Zeit beim Entwickeln einer Software auf das Debuggen, Fehlersuchen und Testen verwendet wird. Auch wenn das wahr sein sollte, besteht für Python-Programmierer keinen Grund zur Unruhe, denn es gibt das <a href="http://docs.python.org/library/doctest.html" target="_blank">doctest</a>-Modul, welches das Testen von Python-Code leichter macht.</p>
<p><span id="more-540"></span></p>
<p>In dem Artikel &#8220;<a href="http://www.muvik.de/2010/03/26/python-dokumentation-mit-docstring/">Python Dokumentation mit DocString</a> bin ich bereits auf die DocStrings und die Möglichkeiten, welche diese bieten etwas eingegangen. Ganz beiläufig hieß es dabei (Zitat): </p>
<blockquote><p>Somit ergeben sich folgende Vorteile für Anwender und Coder:</p>
<ul>
<li>&#8230;</li>
<li>Beispiele in DocStrings können zum Veranschaulichen und Testen verwendet werden.</li>
</ul>
</blockquote>
<p>Dieser Aussage möchte ich heute anhand eines kleinen Beispiels mehr Inhalt geben. Zumindest was das &#8220;Testen&#8221; angeht.
</p>
<h3>Szenario</h3>
<p>Die modulare Entwicklung von Software birgt etliche Vorteile, von denen an dieser Stelle besonders eine ganz wichtig ist. Zum Einen steigert die modulare Methode die Übersichtlichkeit und erleichtert das Verstehen der kleineren Bausteine im Vergleich zum großen Ganzen. Der größte Vorteil ist jedoch der enorme Zeitgewinn. An jedem Modul kann ein anderer Programmierer sich die Finger wund tippen. Am Ende werden die voll funktionsfähigen Einzelmodule zusammengeführt und ergeben das endgültige Produkt. </p>
<p>Damit das Zusammenführen reibungslos vonstatten gehen kann, müssen die Einzelmodule zuvor eingehen getestet werden. An dieser Stelle kommen die DocStrings mit dem doctest-Module ins Spiel.</p>
<p>Einleitend in dieses Thema lässt sich die Funktion der Kombination aus DocString und doctest-Modul folgendermaßen zusammenfassen: Innerhalb des DocStrings wird der Python-Kommandozeilenaufruf nachgestellt und das zu erwartende Ergebnis angegeben.</p>
<p>An einem kleinen Beispiel wird dies deutlicher.</p>
<h3>Komplizierte Beispielfunktion</h3>
<p>Um den Kurztipp anschaulicher zu gestalten, habe ich mir eine sehr wichtige Funktion einfallen lassen <img src='http://www.muvik.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> :</p>
<pre class="brush:python">def addtwo(x):
    """Addiert zu jeder Zahl eine Zwei hinzu:

    >>> addtwo(3.0)
    5.0

    >>> addtwo(0.0)
    2.0
    """

    return x + 2.0</pre>
</p>
<p>Die Beispielfunktion erhöht jede Zahl x um zwei und gibt diese zurück. Damit mit Sicherheit klar ist, was sie tut, wird der Zweck und Sinn innerhalb eines DocStrings beschrieben. Zusätzlich wird die Funktion im DocString zwei Mal &#8220;aufgerufen&#8221; und das dazugehörige Ergebnis angegeben.</p>
<p>Die drei spitzen Klammern sollen hierbei die Python-Kommandozeile symbolisieren.</p>
<p>Wie erfolgt nun der Test, ob die Funktion auch das richtige Ergebnis liefert?</p>
<p>Das doctest-Modul führt die Anweisungen, vor denen der Python-Prompt (>>>) steht, aus und vergleicht das Ergebnis mit dem erwarteten Wert, welcher unterhalb des Prompts steht. In der Standardeinstellung liefert doctest nichts zurück, wenn beide Zahlen gleich sind, stimmen sie nicht überein, so gibt es eine Fehlermeldung:<br />
<code class="bash">> python -m doctest addtwo.py </code></p>
<p>Dieser Skriptaufruf hat keine Ausgabe zur Folge, weswegen man sich entspannen und davon ausgehen kann, dass die Funktion in Ordnung ist.</p>
<p>Möchte man auf etwas Feedback nicht verzichten, dann lässt sich das Skript auch mit einer ausführlichen Version starten:<br />
<code class="bash">> python -m doctest -v addtwo.py<br />
Trying:<br />
    addtwo(3.0)<br />
Expecting:<br />
    5.0<br />
ok<br />
Trying:<br />
    addtwo(0.0)<br />
Expecting:<br />
    2.0<br />
ok<br />
1 items had no tests:<br />
    addtwo<br />
1 items passed all tests:<br />
   2 tests in addtwo.addtwo<br />
2 tests in 2 items.<br />
2 passed and 0 failed.<br />
Test passed.</code></p>
<p>Und wenn etwas nicht richtig läuft, wenn zum Beispiel statt zwei nur eins hinzu addiert wird:<br />
<code class="bash">> python -m doctest -v addtwo.py<br />
Trying:<br />
    addtwo(3.0)<br />
Expecting:<br />
    5.0<br />
***************************************************<br />
File "addtwo.py", line 4, in addtwo.addtwo<br />
Failed example:<br />
    addtwo(3.0)<br />
Expected:<br />
    5.0<br />
Got:<br />
    4.0<br />
Trying:<br />
    addtwo(0.0)<br />
Expecting:<br />
    2.0<br />
***************************************************<br />
File "addtwo.py", line 7, in addtwo.addtwo<br />
Failed example:<br />
    addtwo(0.0)<br />
Expected:<br />
    2.0<br />
Got:<br />
    1.0<br />
1 items had no tests:<br />
    addtwo<br />
***************************************************<br />
1 items had failures:<br />
   2 of   2 in addtwo.addtwo<br />
2 tests in 2 items.<br />
0 passed and 2 failed.<br />
***Test Failed*** 2 failures.<br />
</code>
</p>
<h3>Fazit</h3>
<p>DocStrings in Kombination mit doctest stellen in meinen Augen eine praktische und leicht handhabbare Methode dar, um Module, Funktion und Klassen zu testen und gleichzeitig den Funktionsaufruf direkt im DocString und damit in der Dokumentation zu demonstrieren.</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/05/05/kurztipp-5-python-code-docstrings-testen/">Permalink</a> |
<a href="http://www.muvik.de/2010/05/05/kurztipp-5-python-code-docstrings-testen/#comments">keine Kommentare</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/05/05/kurztipp-5-python-code-docstrings-testen/&title=Kurztipp 5: Python-Code mit DocStrings testen">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/05/05/kurztipp-5-python-code-docstrings-testen/&title=Kurztipp 5: Python-Code mit DocStrings testen">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/05/05/kurztipp-5-python-code-docstrings-testen/&title=Kurztipp 5: Python-Code mit DocStrings testen">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/docstring/" rel="tag">DocString</a>, <a href="http://www.muvik.de/tag/python/" rel="tag">Python</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/05/05/kurztipp-5-python-code-docstrings-testen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

