<?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>Ersocon.net - Science Blog &#187; Testing-by-contract</title>
	<atom:link href="http://blog.ersocon.net/tag/testing-by-contract/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.ersocon.net</link>
	<description>Zend Framework, PHP, Java</description>
	<lastBuildDate>Sat, 08 Oct 2011 10:21:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Basics zu Äquivalenzklassen (Methoden zur Testfallreduzierung)</title>
		<link>http://blog.ersocon.net/basics-zu-aquivalenzklassen-pid9.html</link>
		<comments>http://blog.ersocon.net/basics-zu-aquivalenzklassen-pid9.html#comments</comments>
		<pubDate>Mon, 01 Feb 2010 22:36:54 +0000</pubDate>
		<dc:creator>ersocon</dc:creator>
				<category><![CDATA[Testmethoden]]></category>
		<category><![CDATA[Äquivalenzklasse]]></category>
		<category><![CDATA[Defensive testing]]></category>
		<category><![CDATA[Testfallermittlung]]></category>
		<category><![CDATA[Testing-by-contract]]></category>

		<guid isPermaLink="false">http://blog.ersocon.net/?p=9</guid>
		<description><![CDATA[Die Äquivalenzklassenbildung ist eine Technik, die zur Reduzierung der Anzahl an Testfällen verwendet wird. Hierbei werden die möglichen Werte einer Eingabegröße in Klassen eingeteilt. Dadurch kann durch eine relativ kleine Anzahl an Testfällen eine angemessene Testabdeckung erzielt werden. Eine Äquivalenzklasse besteht aus einer Menge an Daten, welche als äquivalent angesehen werden, d.h. sie liefern erwartungsgemäß [...]]]></description>
			<content:encoded><![CDATA[<p>Die Äquivalenzklassenbildung ist eine Technik, die zur Reduzierung der Anzahl an Testfällen verwendet wird. Hierbei werden die möglichen Werte einer Eingabegröße in Klassen eingeteilt. Dadurch kann durch eine relativ kleine Anzahl an Testfällen eine angemessene Testabdeckung erzielt werden.</p>
<p>Eine Äquivalenzklasse besteht aus einer Menge an Daten, welche als äquivalent angesehen werden, d.h. sie liefern erwartungsgemäß bei einem Test dieselben Ergebnisse. Jeder Datenwert innerhalb einer Äquivalenzklasse ist also so gut wie jeder andere. Die Datenwerte können dabei entweder aus tatsächlichen Wertebereichen, wie z.B. 0 bis 100, oder aus Mengen an Datensätzen bestehen. Für den Test bietet dies folgende Erkenntnisse (nachzulesen in <em>A Practitioner&#8217;s Guide to Software Test Design</em> &#8211; Copeland, L., 2003):</p>
<ol>
<li>Falls ein Testfall einer Äquivalenzklasse einen Fehler aufdeckt, so decken auch alle anderen Testfälle der Äquivalenzklasse den Fehler auf.</li>
<li>Falls ein Testfall einer Äquivalenzklasse keinen Fehler aufdeckt, so decken auch alle anderen Testfälle der Äquivalenzklasse keine Fehler auf.</li>
</ol>
<p>Interessant ist also die tatsächliche Wahl der äquivalenten Daten einer Äquivalenzklasse. Allgemein betrachtet ergeben sich zwei Möglichkeiten:</p>
<ol>
<li>Verwendung von gültigen Wertebereichen (Testing-by-contract)</li>
<li>Verwendung von ungültigen Wertebereichen (Defensive testing)</li>
</ol>
<p>Bei dem Testing-by-contract Ansatz geht man davon aus, dass der zu testende Softwareteil (auch Modul genannt) nur Eingabeparameter erhält, welche es verarbeiten kann. Zudem werden dem Modul unabhängig von der Eingabe Daten zur Verfügung gestellt, welche es zur fehlerfreien Verarbeitung der Eingabeparameter braucht. Entsprechend werden hierbei nur Äquivalenzklassen mit gültigem Wertebereich erstellt und durch ihre Repräsentanten getestet.</p>
<p>Äquivalenzklassen mit Daten außerhalb des zulässigen Bereichs werden hierbei nicht berücksichtigt, weil man evtl. davon ausgeht, dass die unzulässigen Bereiche nicht erreicht werden. Problematisch ist bei diesem Ansatz die Tatsache, dass Probleme auftreten könne, sobald ein unzulässiger Bereich in einem ausgelieferten Produkt tatsächlich erreicht wird (z.B. das Jahr 2000 bei einer 1985 geschriebenen Software). Um diesem Problem entgegenzuwirken, werden beim defensive-testing Ansatz auch unzulässige Bereiche zugelassen. Dies bedeutet, dass neben einer Äquivalenzklasse im gültigen Bereich auch mindestens eine Äquivalenzklasse für den ungültigen Bereich erstellt werden und durch einen Repräsentanten getestet werden muss. Die Anzahl nötiger Testfälle erhöht sich zwangsläufig.</p>
<p>Ein kleines Beispiel dazu:</p>
<p>Man hat ein Softwaremodul, das die Wurzelfunktion implementiert und nur ganze Zahlen im Bereich 0 bis 64 akzeptiert. Beim Testing-by-contract Ansatz benötigt man (grob betrachtet) zwei Äquivalenzklassen mit entsprechenden Repräsentanten. Eine davon nennen wir mal die Ganzzahl-Äquivalenzklasse und die andere Dezimal-Äquivalenzklasse. Wir gehen davon aus, dass die Ganzzahl-Äquivalenzklasse alle Eingabeparameter enthält, bei denen das Modul als Ergebnis eine Ganzzahl liefert, z.B. 4 oder 16. Hieraus wählen wir einen Repräsentanten, die 16, was dem ersten Testfall entspricht. Für die zweite Äquivalenzklasse nehmen wir entsprechend die 17, da hier bekannt ist, dass keine Ganzzahl als Ergebnis zu erwarten ist.</p>
<p>Beim defensive-testing werden nun weitere Äquivalenzklassen hinzugefügt. Wir erwarten z.B., dass das Modul bei der Eingabe einer negativen Zahl, einer Dezimalzahl oder einer Zahl größer 64 eine Fehlermeldung liefern muss. Mit der Bildung der entsprechenden Äquivalenzklassen (Negativ-Äquivalenzklasse, Dezimaleingabe-Äquivalenzklasse und Zugroßeeingabe-Äquivalenzklasse) erhält man drei weitere Testfälle: z.B. (-1|0,3|65) oder (-5|20,1|1200). Das erste Beispiel wird sicherlich öfter Anklang finden, da beim Testen versucht wird auch die Grenzbereiche (0/64) ausreichend zu testen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ersocon.net/basics-zu-aquivalenzklassen-pid9.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

