<?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>www.knebler.de &#187; Artikel</title>
	<atom:link href="http://www.knebler.de/category/artikel/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.knebler.de</link>
	<description>Admin Blog</description>
	<lastBuildDate>Sun, 06 Nov 2011 06:27:12 +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>WordPress Performance verbessern</title>
		<link>http://www.knebler.de/artikel/wordpress-performance-verbessern/</link>
		<comments>http://www.knebler.de/artikel/wordpress-performance-verbessern/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 20:41:45 +0000</pubDate>
		<dc:creator>knebler</dc:creator>
				<category><![CDATA[Artikel]]></category>

		<guid isPermaLink="false">http://www.knebler.de/wordpress/?p=245</guid>
		<description><![CDATA[Vor einiger Zeit wurde auf Noupe.com ein Artikel zum Thema WordPress-Performance veröffentlicht &#8211; 13 Great WordPress Speed Tips &#38; Tricks for MAX Performance. Im folgenden findet ihr eine kleine Zusammenfassung des Artikels (und 2 zusätzliche Tipps von mir ): 1.WordPress stets aktuell halten- gerade der Sprung von einer älteren Version auf die neuen 2.7er-Versionen von [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Vor einiger Zeit wurde auf Noupe.com ein Artikel zum Thema WordPress-Performance veröffentlicht &#8211; 13 Great WordPress Speed Tips &amp; Tricks for MAX Performance. Im folgenden findet ihr eine kleine Zusammenfassung des Artikels (und 2 zusätzliche Tipps von mir <img src='http://www.knebler.de/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ):</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">1.WordPress stets aktuell halten- gerade der Sprung von einer älteren Version auf die neuen 2.7er-Versionen von WordPress kann die Performance stark steigern</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">2.Unnötige PlugIns entfernen und benötigte stets aktuell halten- selbst wenn man die Funktionalität eines PlugIns nicht nutzt kostet jedes installierte PlugIn Rechenzeit weil WordPress z.B. prüfen muss ob es aktiviert ist, etc. &#8211; von daher sollte man keine PlugIns installieren die man nicht nutzt. Installierte PlugIns sollte man stets aktuell halten &#8211; alleine schon wegen potentieller Sicherheitslücken und zum Teil besserer Performance.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">3.Die Menge an ausgeführten PHP-Code und Datenbankabfragen reduzieren &#8211; man sollte nach Möglichkeit unnötige Datenbankabfragen und die Ausführung von Datenbankabfragen verhindern indem man z.B. auf statisches HTML ausweicht (siehe auch 7. !)</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">4.Die Datenbank optimieren und reparieren &#8211; man sollte immer darauf achten, dass die WP-Datenbank sowohl optimiert als auch repariert ist. Ich empfehle hierfür das WP-Optimize PlugIn (siehe 14.).</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">5.Nutzung eines Image-Hosting Services &#8211; wenn man das nötige Kleingeld dafür übrig hat, sollte man CSS-Dateien, JavaScript-Dateien und Bilder auf einen Dienst wie Amazon S3 auslagern. Das reduziert einerseits die Bandbreite die auf dem eigenen Server verbraucht wird als auch die Prozessorlast auf dem eigenen Server.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">6.Optimiere alle Bilder &#8211; man sollte alle Bilder die man auf der Seite benutzt optimieren. Dafür gibt es z.B. Online-Dienste wie smushit.com oder auch Shrink-O-Matic (eine Adobe-AIR Anwendung) die Bilder ohne sichtbaren Qualitätsverlust verkleinern können.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">7.WP-SuperCache nutzen &#8211; das WP-SuperCache PlugIn reduziert die Serverlast drastisch indem es einen Großteil der Seite als statische HTML-Seiten erzeugt und diese ausliefert statt jedes mal die Datenbank abzufragen.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">8.PHP Speedy WP benutzen &#8211; dieses PlugIn bindet PHP Speedy in WP ein &#8211; eine Bibliothek die die zu übertragende Datenmenge durch Kompression stark verringert. ACHTUNG! Das PlugIn arbeitet nicht ohne Anpassungen mit WP SuperCache zusammen! Am besten lest ihr den Artikel auf Noupe für mehr Details!</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">9.WP CSS &#8211; diese PlugIn komprimiert CSS Dateien und liefert diese aus statt der normalen Version</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">10.DB Cache &#8211; speichert Ergebnisse von Datenbankabfragen im Dateisystem zwischen</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">11.Nutzung der AJAX Libraries API- diese API ist ein Angebot von Google die es erlaubt die â€großenâ€ JavaScript-Frameworks (jQuery, prototype, dojo, usw.) von den Google-Servern aus einzubinden statt sie auf dem eigenen Server zu hosten. Dies hat den Vorteil, dass die Google-Server im Allgemeinen besser ans Internet angebunden sind als die eigenen Â Außerdem speichern Browser die Bibliothek zwischen &#8211; was ein Vorteil ist wenn viele Seiten diesen Mechanismus nutzen da die Bibliothek nur einmal geladen wird</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">12.Die Anzahl Datenbank-Queries und die Seitenladezeit anzeigen- wenn man seine WP-Installation optimiert sollte man sich diese Werte anzeigen lassen um ggf. sofort zu sehen was die Optimierungen bringen (mehr Infos + Code findet sich bei Noupe)</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">13.Optimize DB nutzen- dieses PlugIn bietet eine ähnliche Funktionalität wie das weiter oben erwähnte WP-Optimize.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">14.WP-Optimize nutzen- dieses PlugIn kann einerseits die Datenbank optimieren aber zusätzlich noch ein paar Dinge mehr. Das PlugIn kann z.B. Artikel-Revisionen löschen, Spam-Kommentare aus der Datenbank entfernen, uvm.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">15.Anzahl Artikel-Revisionen reduzieren- In den neueren Versionen legt WordPress bei Ã„nderungen an Artikeln Kopien der Artikel in der Datenbank an. Dies ist nützlich um z.B. bequem einen älteren Stand eines Artikels wiederherzustellen wenn man z.B. aus Versehen einen Teil gelöscht hat oder Ã„hnliches. Das Problem ist, dass WP standardmässig bis zu 10 Versionen eines Artikels in der Datenbank anlegt und dadurch sehr viel â€œMüllâ€ in der Datenbank entsteht. Daher empfehle ich das Revision Control PlugIn. Mit ihm kann man das Revisionsmanagement bequem in der Admin-Oberfläche von WP konfigurieren (an-/abschalten, Anzahl der Revisionen für Seiten und Artikel festlegen). Durch weniger Revisionen wird die Datenbank entlastet.</div>
<p>WordPress erfreut sich von Version zu Version immer größere Beliebtheit. Leider sieht man auch immer heufiger Blogs die aus sicht der Geschwindigkeit zu wünschen übrig lassen. Die Ursach hierfür liegt meistens am Blog selber. Es gibt einige Punkte die beachtet werden sollten.</p>
<ol>
<li>WordPress stets aktuell halten, ab Version 2.7  wurde die Performens deutlich gesteigert.</li>
<li>Nur wirklich benötigte PlugIns verwenden und stets aktuell halten. &#8220;Weniger ist meist mehr&#8221;, da  jedes installierte PlugIn Rechenzeit kostet.</li>
<li>PHP-Code und Datenbankabfragen reduzieren,  oder Seiten nur über einen Cach bedienen.</li>
<li>Die Mysql Datenbank per cron immer optimieren und reparieren lassen.</li>
<li>Nur optimierte  Bilder verwenden, Bilder sollten nur die benötigt Größe haben, Tip Blogdesk hilft hierbei.</li>
<li>WP-Cache nutzen, ab Version 2.8 ist dieser besser als  WP-SuperCache. Beide PlugIns reduziert die Serverlast drastisch.</li>
</ol>
<p>8.PHP Speedy WP benutzen &#8211; dieses PlugIn bindet PHP Speedy in WP ein &#8211; eine Bibliothek die die zu übertragende Datenmenge durch Kompression stark verringert. ACHTUNG! Das PlugIn arbeitet nicht ohne Anpassungen mit WP SuperCache zusammen! Am besten lest ihr den Artikel auf Noupe für mehr Details!</p>
<p>9.WP CSS &#8211; diese PlugIn komprimiert CSS Dateien und liefert diese aus statt der normalen Version</p>
<p>10.DB Cache &#8211; speichert Ergebnisse von Datenbankabfragen im Dateisystem zwischen</p>
<p>11.Nutzung der AJAX Libraries API- diese API ist ein Angebot von Google die es erlaubt die großenJavaScript-Frameworks (jQuery, prototype, dojo, usw.) von den Google-Servern aus einzubinden statt sie auf dem eigenen Server zu hosten. Dies hat den Vorteil, dass die Google-Server im Allgemeinen besser ans Internet angebunden sind als die eigenen Â Außerdem speichern Browser die Bibliothek zwischen &#8211; was ein Vorteil ist wenn viele Seiten diesen Mechanismus nutzen da die Bibliothek nur einmal geladen wird</p>
<p>12.Die Anzahl Datenbank-Queries und die Seitenladezeit anzeigen- wenn man seine WP-Installation optimiert sollte man sich diese Werte anzeigen lassen um ggf. sofort zu sehen was die Optimierungen bringen (mehr Infos + Code findet sich bei Noupe)</p>
<p>13.Optimize DB nutzen- dieses PlugIn bietet eine ähnliche Funktionalität wie das weiter oben erwähnte WP-Optimize.</p>
<p>14.WP-Optimize nutzen- dieses PlugIn kann einerseits die Datenbank optimieren aber zusätzlich noch ein paar Dinge mehr. Das PlugIn kann z.B. Artikel-Revisionen löschen, Spam-Kommentare aus der Datenbank entfernen, uvm.</p>
<p>15.Anzahl Artikel-Revisionen reduzieren- In den neueren Versionen legt WordPress bei Ãnderungen an Artikeln Kopien der Artikel in der Datenbank an. Dies ist nützlich um z.B. bequem einen älteren Stand eines Artikels wiederherzustellen wenn man z.B. aus Versehen einen Teil gelöscht hat oder Ãhnliches. Das Problem ist, dass WP standardmässig bis zu 10 Versionen eines Artikels in der Datenbank anlegt und dadurch sehr viel Müll in der Datenbank entsteht. Daher empfehle ich das Revision Control PlugIn. Mit ihm kann man das Revisionsmanagement bequem in der Admin-Oberfläche von WP konfigurieren (an-/abschalten, Anzahl der Revisionen für Seiten und Artikel festlegen). Durch weniger Revisionen wird die Datenbank entlastet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.knebler.de/artikel/wordpress-performance-verbessern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>freiesMagazin 06/2009 erschienen</title>
		<link>http://www.knebler.de/artikel/freiesmagazin-062009-erschienen/</link>
		<comments>http://www.knebler.de/artikel/freiesmagazin-062009-erschienen/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 07:22:00 +0000</pubDate>
		<dc:creator>knebler</dc:creator>
				<category><![CDATA[Artikel]]></category>

		<guid isPermaLink="false">http://www.knebler.de/wordpress/artikel/freiesmagazin-062009-erschienen/</guid>
		<description><![CDATA[Inhalte der Ausgabe 06/2009 sind Mobiles Linux mit Moblin Debian 5.0-Installation mit einer Braillezeile Die Vorgeschichte von Linux Der Mai im Kernel-Rückblick Toribash &#8211; Kampf mit (der) Physik Erfahrungsbericht: OpenOffice.org 3.0 Keine Angst vor awk &#8211; ein Schnelleinstieg AVR-Mikrocontroller unter Linux ECDL/ICDL wagt sich an OpenOffice.org Rezension: Just for Fun &#8211; The Story of an [...]]]></description>
			<content:encoded><![CDATA[<p>Inhalte der <a title="http://www.freiesmagazin.de/ftp/2009/freiesMagazin-2009-06.pdf" href="http://www.freiesmagazin.de/ftp/2009/freiesMagazin-2009-06.pdf" target="_blank">Ausgabe</a> 06/2009 sind</p>
<p>Mobiles Linux mit Moblin<br />
Debian 5.0-Installation mit einer Braillezeile<br />
Die Vorgeschichte von Linux<br />
Der Mai im Kernel-Rückblick<br />
Toribash &#8211; Kampf mit (der) Physik<br />
Erfahrungsbericht: OpenOffice.org 3.0<br />
Keine Angst vor awk &#8211; ein Schnelleinstieg<br />
AVR-Mikrocontroller unter Linux<br />
ECDL/ICDL wagt sich an OpenOffice.org<br />
Rezension: Just for Fun &#8211; The Story of an Accidental Revolutionary<br />
Das Ende des Programmierwettbewerbs<br />
Veranstaltungskalender und Leserbriefe</p>
<p>
Das <a title="http://www.freiesmagazin.de/" href="http://www.freiesmagazin.de/" target="_blank">freiesMagazin</a> berichtet monatlich über Wissenswertes und Neues aus den Welten Freier Software, Open Source und Linux. Was 2005 als loser Newsletter begann, reifte mit der Zeit durch Akzeptanz und Teilnahme der Linux-Community zum regelmäßig erscheinenden Magazin. Getreu dem Motto â€žder Community etwas an Wissen, Spaß und Freude zurückzugebenâ€œ laden wir auch weiterhin Autoren zum Wissensaustausch ein.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.knebler.de/artikel/freiesmagazin-062009-erschienen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wie baue ich eine OCI Modul für PHP5 und Apache2?</title>
		<link>http://www.knebler.de/artikel/wie-baue-ich-eine-oci-modul-fur-php5-und-apache2/</link>
		<comments>http://www.knebler.de/artikel/wie-baue-ich-eine-oci-modul-fur-php5-und-apache2/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 08:47:30 +0000</pubDate>
		<dc:creator>knebler</dc:creator>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[SuSE]]></category>
		<category><![CDATA[oci]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[RPM]]></category>

		<guid isPermaLink="false">http://www.knebler.de/stage/?p=193</guid>
		<description><![CDATA[Benötigt wird: Bei SuSE 10.X autoconf php5-5.X apache2-mod_php5-5.X php5-pdo-5.2.0-10 php5-devel-5.X php5-pear-5.X instant client for Oracle http://www.oracle.com/technology/tech/oci/instantclient/index.html) instantclient-basic-linux-*.zip und instantclient-sdk-linux-*.zip http://pecl.php.net/get/oci8 (oci8-1.2.3.tgz) Anlegen von mkdir /opt/oracle Auspacken der Zip-Dateien in den Ordner /opt/oracle/instantclient_10_2 Link anlegen cd /opt/oracle/instantclient_10_2 ln -s libclntsh.so.10.1 libclntsh.so Test ob Oracle vorhanden: echo $ORACLE_HOME Anlegen der Pfade in der Datei /etc/profile ORACLE_HOME=/opt/oracle/instantclient_10_2 LD_LIBRARY_PATH=$ORACLE_HOME [...]]]></description>
			<content:encoded><![CDATA[<p>Benötigt wird:</p>
<p>Bei SuSE 10.X</p>
<ul>
<li>autoconf</li>
<li>php5-5.X</li>
<li>apache2-mod_php5-5.X</li>
<li>php5-pdo-5.2.0-10</li>
<li>php5-devel-5.X</li>
<li>php5-pear-5.X</li>
<li>instant client for Oracle <a href="http://www.oracle.com/technology/tech/oci/instantclient/index.html">http://www.oracle.com/technology/tech/oci/instantclient/index.html</a>)</li>
<li>instantclient-basic-linux-*.zip und instantclient-sdk-linux-*.zip</li>
<li><a href="http://pecl.php.net/get/oci8">http://pecl.php.net/get/oci8</a> (oci8-1.2.3.tgz)</li>
</ul>
<p>Anlegen von mkdir /opt/oracle</p>
<p>Auspacken der Zip-Dateien in den Ordner /opt/oracle/instantclient_10_2<br />
Link anlegen<br />
cd /opt/oracle/instantclient_10_2<br />
ln -s libclntsh.so.10.1 libclntsh.so</p>
<p>Test ob Oracle vorhanden:<br />
echo $ORACLE_HOME</p>
<p>Anlegen der Pfade in der Datei /etc/profile</p>
<p>ORACLE_HOME=/opt/oracle/instantclient_10_2<br />
LD_LIBRARY_PATH=$ORACLE_HOME<br />
export ORACLE_HOME<br />
export LD_LIBRARY_PATH</p>
<p>Der gleiche Eintrag muss auch noch in<br />
/etc/init.d/apache2</p>
<p>Tip: vom System abmelden und wieder anmelden</p>
<p>cd /opt/oracle/<br />
wget http://pecl.php.net/get/oci8<br />
pear5 install oci8-1.2.3.tgz</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-Meldung &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
10 source files, building<br />
running: phpize<br />
Configuring for:<br />
PHP Api Version: 20041225<br />
Zend Module Api No: 20060613<br />
Zend Extension Api No: 220060519<br />
Please provide the path to ORACLE_HOME dir. Use &#8216;instantclient,/path/to/instant/client/lib&#8217;<br />
if you&#8217;re compiling against Oracle Instant Client [autodetect] :<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-Meldung &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Eingeben von: instantclient,/opt/oracle/instantclient_10_2</p>
<p>Nach der Installation:<br />
Die Datei /etc/php5/conf.d/oci.ini anlegen mit dem Inhalt:</p>
<p>; comment out next line to disable oci extension in php<br />
extension=oci8.so</p>
<p>Test der Installation:<br />
php /usr/share/doc/packages/php5/test.php5 | grep oci8</p>
<p>Apache2 Restarten</p>
<p>Testseite anlegen und ausführen:</p>
<p>Da wir keine tnsnamesora verwenden ändert sich der Aufruf:</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-Meldung &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
<span style="color: #0000ff;">&lt; ?php</span></p>
<p><span style="color: #0000ff;">$conn = OCILogon(&#8220;dbuser&#8221;, &#8220;dbpasswd&#8221;, &#8220;//dbserver.host.net/DB&#8221;);</span></p>
<p><span style="color: #0000ff;">$query = &#8216;select table_name from user_tables&#8217;;</span></p>
<p><span style="color: #0000ff;">$stid = OCIParse($conn, $query);<br />
OCIExecute($stid, OCI_DEFAULT);<br />
while ($succ = OCIFetchInto($stid, $row)) {<br />
foreach ($row as $item) {<br />
echo $item.&#8221; &#8220;;<br />
}<br />
echo &#8221;<br />
\n&#8221;;<br />
}</span></p>
<p><span style="color: #0000ff;">OCILogoff($conn);</span></p>
<p><span style="color: #0000ff;">?&gt;</span><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-Meldung &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Links:</p>
<p>http://www.oracle.com/technology/tech/php/index.html</p>
<p>http://en.opensuse.org/Howto_build_oci8_extension_module_for_php</p>
]]></content:encoded>
			<wfw:commentRss>http://www.knebler.de/artikel/wie-baue-ich-eine-oci-modul-fur-php5-und-apache2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Concurrent Version Management (CVS)</title>
		<link>http://www.knebler.de/artikel/cvs/concurrent-version-management-cvs/</link>
		<comments>http://www.knebler.de/artikel/cvs/concurrent-version-management-cvs/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 06:55:21 +0000</pubDate>
		<dc:creator>knebler</dc:creator>
				<category><![CDATA[CVS]]></category>

		<guid isPermaLink="false">http://www.knebler.de/stage/artikel/cvs/concurrent-version-management-cvs/</guid>
		<description><![CDATA[CVS wird zur Softwareversionsverwaltung eingesetzt. Mehrere Entwickler können gleichzeitig an einem Projekt arbeiten. Die Sourcen werden zentral im sogenannten Repository verwaltet, jeder Entwickler arbeitet mit einer lokalen Kopie. CVS-Ablaufplan &#160; CVS-Vorteile Alle Entwickler arbeiten mit den Richtigen Quellen. Es entsteht eine Ãœbersicht der Projekte und dessen Status. Der Programmiercode wird Dokumentiert. Die Qualitätskontrolle wird vereinfacht. [...]]]></description>
			<content:encoded><![CDATA[<p>CVS wird zur Softwareversionsverwaltung eingesetzt. Mehrere Entwickler können gleichzeitig an einem Projekt arbeiten. Die Sourcen werden zentral im sogenannten Repository verwaltet, jeder Entwickler arbeitet mit einer lokalen Kopie.</p>
<p>
<u>CVS-Ablaufplan</u></p>
<p><img height="238" alt="cvs" src="http://www.knebler.de/wordpress/wp-content/uploads/2008/04/cvs-3.gif" width="450" /></p>
<p>&nbsp;</p>
<p><u>CVS-Vorteile</u></p>
<ul>
<li>Alle Entwickler arbeiten mit den Richtigen Quellen.</li>
<li>Es entsteht eine Ãœbersicht der Projekte und dessen Status.</li>
<li>Der Programmiercode wird Dokumentiert.</li>
<li>Die Qualitätskontrolle wird vereinfacht.</li>
<li>Anwendungen werden besser programmiert.</li>
</ul>
<p><u>CVS-Nachteile</u></p>
<ul>
<li>Es müssen Regeln für die Programmierung aufgestellt werden.</li>
<li>Es müssen Regeln für den Umgang mit CVS erarbeitet werden.</li>
<li>Es müssen Schulungen für Anwender und Administratoren durchgeführt werden.</li>
<li>Neue Software muß eingeführt werden.</li>
</ul>
<p><u>CVS Befehlsübersicht</u></p>
<ul>
<li><strong>Checkout</strong>: Projektname (Modulname)</li>
<li><strong>Import</strong>: Projektname (Modulname)</li>
<li><strong>Add</strong>: Eine neue Datei oder ein neues Verzeichnis zum Repository hinzufügen.</li>
<li><strong>Get</strong>: Eine lokale Kopie des Repositories anlegen.</li>
<li><strong>Commit</strong>: Ã„nderungen ins Repository eintragen.</li>
<li><strong>Diff</strong>: Unterschiede zwischen lokaler Kopie und Repository anzeigen.</li>
<li><strong>Log</strong>: CVS Log Information anzeigen.</li>
<li><strong>Rdiff</strong>: Eine Sammlung von Diffs zur Anzeige von Versionsunterschieden erzeugen.</li>
<li><strong>Status</strong>: Status der lokalen Dateien im Vergleich zum Repository anzeigen.</li>
<li><strong>Update</strong>: Die lokale Kopie des Repositories aktualisieren.</li>
</ul>
<p><u>CVS-Clients</u></p>
<ol>
<li>WIN-CVS CVS client für Windows, Macintosh and UnixÂ´</li>
<li>TortoiseCVS rechte Mause</li>
<li>gCVS</li>
<li>CVS client für Windows, Macintosh and Unix</li>
<li>jCVS</li>
<li>CVS Java client.</li>
<li>CVSweb </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.knebler.de/artikel/cvs/concurrent-version-management-cvs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SVN-Server</title>
		<link>http://www.knebler.de/artikel/svn-server-2/</link>
		<comments>http://www.knebler.de/artikel/svn-server-2/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 17:35:00 +0000</pubDate>
		<dc:creator>knebler</dc:creator>
				<category><![CDATA[Artikel]]></category>

		<guid isPermaLink="false">http://www.knebler.de/stage/artikel/svn-server-2/</guid>
		<description><![CDATA[SVN einrichten http://lug.zhwin.ch/wiki/index.php/SVN_einrichten Subversion aus Linux Usergroup der Zuercher Hochschule Winterthur, der freien Wissensdatenbank Subversion (abgek\ufffdrzt als SVN) ist ein Programm zur Versionsverwaltung, \ufffdhnlich CVS. Die Bedienung von Subversion ist sehr an diejenige von CVS angelehnt, jedoch bietet es diesem gegen\ufffdber einige Vorteile und Verbesserungen. Zum Beispiel ist es m\ufffdglich Dateien und Verzeichnisse umzubenennen, wobei [...]]]></description>
			<content:encoded><![CDATA[<p>SVN einrichten<br />
<a href="http://lug.zhwin.ch/wiki/index.php/SVN_einrichten">http://lug.zhwin.ch/wiki/index.php/SVN_einrichten</a></p>
<p>Subversion<br />
aus Linux Usergroup der Zuercher Hochschule Winterthur, der freien Wissensdatenbank<br />
Subversion (abgek\ufffdrzt als SVN) ist ein Programm zur Versionsverwaltung, \ufffdhnlich CVS. Die Bedienung von Subversion ist sehr an diejenige von CVS angelehnt, jedoch bietet es diesem gegen\ufffdber einige Vorteile und Verbesserungen. Zum Beispiel ist es m\ufffdglich Dateien und Verzeichnisse umzubenennen, wobei die History erhalten bleibt. Mit cvs2svn existiert auch ein Konverter, der CVS-Repositories nach SVN umwandeln.</p>
<p><a href="http://lug.zhwin.ch/wiki/index.php/Subversion">http://lug.zhwin.ch/wiki/index.php/Subversion</a></p>
<p>Buch:<br />
<a href="http://svnbook.red-bean.com/">http://svnbook.red-bean.com/</a></p>
<p>Software:<br />
<a href="http://subversion.tigris.org/">http://subversion.tigris.org/</a></p>
<p>weiter&#8230;</p>
<p>Installation und Konfiguration von Subversion ber mod_dav_svn</p>
<p>Subversion untersttzt zwei verschiedene Server-Varianten: Den eigenstndigen Serverprozess svnserve und das Modul mod_dav_svn fr den Webserver Apache.</p>
<p>&nbsp;</p>
<p>Voraussetzung:</p>
<p>1. Apache-2-Webserver.<br />
2. Apache-Modul mod_authz_svn.so und mod_dav_svn.so</p>
<p>Die Module mssen von Apache geladen werden. Bei Suse besser ber Yast einbinden. Auszug aus der Konfiguration</p>
<p>#SVN ModuleLoadModule dav_svn_module modules/mod_dav_svn.so</p>
<p>LoadModule authz_svn_module modules/mod_authz_svn.so</p>
<p>Einrichten des SVN im Apache Webserver:</p>
<pre>
# project repository files for musterprojekt START
&lt;location&gt;
DAV svn
SVNPath /srv/svn/repos/musterprojekt
AuthType Basic
AuthName "Subversion Repository for musterprojekt"
AuthUserFile /srv/svn/user_access/musterprojekt_AuthUserFile
AuthGroupFile /srv/svn/user_access/musterprojekt_AuthGroupfile
# Limit access to certain people
&lt;limitexcept&gt;
           Require group musterprojekt_committers
&lt;/limitexcept&gt;
# Limit read access to certain people
&lt;limit&gt;
           Require group musterprojekt_committers
           Require group musterprojekt_readers
&lt;/limit&gt;
&lt;/location&gt;
# project repository files for musterprojekt ENDE
</pre>
<p>ber diese Eintr wird festgelegt, wo das Repositories liegt und wer es wie benutzen darf</p>
<p>Bevor der Webserver neu gestartet wird mssen die Verzeichnisse und Gruppen angelegt werden.</p>
<p>Anlegen von Projekten:======================</p>
<p>1. cd /srv/svn/repos<br />
2. svnadmin create projektname<br />
3. chown -R wwwrun:www projektname/{dav,db,locks}<br />
4. touch /srv/svn/user_access/projektname_AuthGroupfile<br />
5. touch /srv/svn/user_access/projektname_AuthUserFile<br />
6. chown root:www /srv/svn/user_access/projektname_AuthGroupfile<br />
7. chown root:www /srv/svn/user_access/projektname_AuthUserFile<br />
8. chmod 644 /srv/svn/user_access/projektname_AuthGroupfile<br />
9. chmod 644 /srv/svn/user_access/projektname_AuthUserFile<br />
10. htpasswd2 /srv/svn/user_access/projektname_AuthUserFile username<br />
11. Berechtigungen anlegen in /srv/svn/user_access/projektname_AuthGroupfile Lesen Schreiben</p>
<p>Zugriff auf das RepositoryNachdem der Apache-Server mit der genderten Konfiguration neu gestartet wurde, kann mit dem normalen Subversion-Client svn auf die Repositories zugegriffen werden. Allerdings muss als Protokoll http oder (falls konfiguriert) https verwendet werden:</p>
<p><a href="http://localhost/repos">http://localhost/repos</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.knebler.de/artikel/svn-server-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CVS Befehlsübersicht</title>
		<link>http://www.knebler.de/artikel/cvs/cvs-befehlsuebersicht-2/</link>
		<comments>http://www.knebler.de/artikel/cvs/cvs-befehlsuebersicht-2/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 07:15:30 +0000</pubDate>
		<dc:creator>knebler</dc:creator>
				<category><![CDATA[CVS]]></category>
		<category><![CDATA[SuSE]]></category>

		<guid isPermaLink="false">http://www.knebler.de/stage/howto/suse/cvs-befehlsuebersicht-2/</guid>
		<description><![CDATA[Checkout: Projektname (Modulname) Import: Projektname (Modulname) Add: Eine neue Datei oder ein neues Verzeichnis zum Repository hinzufügen. Get: Eine lokale Kopie des Repositories anlegen. Commit: ï¿½nderungen ins Repository eintragen. Diff: Unterschiede zwischen lokaler Kopie und Repository anzeigen. Log: CVS Log Information anzeigen. Rdiff: Eine Sammlung von Diffs zur Anzeige von Versionsunterschieden erzeugen. Status: Status der [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight: bold">Checkout:</span> Projektname (Modulname)</p>
<p><span style="font-weight: bold">Import:</span> Projektname (Modulname)</p>
<p><span style="font-weight: bold">Add:</span> Eine neue Datei oder ein neues Verzeichnis zum Repository hinzufügen.<br />
<span style="font-weight: bold">Get:</span> Eine lokale Kopie des Repositories anlegen.</p>
<p><span style="font-weight: bold">Commit:</span> ï¿½nderungen ins Repository eintragen.</p>
<p><span style="font-weight: bold">Diff:</span> Unterschiede zwischen lokaler Kopie und Repository anzeigen.</p>
<p><span style="font-weight: bold">Log:</span> CVS Log Information anzeigen.</p>
<p><span style="font-weight: bold">Rdiff:</span> Eine Sammlung von Diffs zur Anzeige von Versionsunterschieden erzeugen.</p>
<p><span style="font-weight: bold">Status:</span> Status der lokalen Dateien im Vergleich zum Repository anzeigen.</p>
<p><span style="font-weight: bold">Update:</span> Die lokale Kopie des Repositories aktualisieren.</p>
<p class="poweredbyperformancing">Powered by <a href="http://scribefire.com/">ScribeFire</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.knebler.de/artikel/cvs/cvs-befehlsuebersicht-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Partimage</title>
		<link>http://www.knebler.de/artikel/partimage-2/</link>
		<comments>http://www.knebler.de/artikel/partimage-2/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 07:14:37 +0000</pubDate>
		<dc:creator>knebler</dc:creator>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[Kurztipps]]></category>
		<category><![CDATA[SuSE]]></category>

		<guid isPermaLink="false">http://www.knebler.de/stage/artikel/partimage-2/</guid>
		<description><![CDATA[Partimage beinhaltet zwei Teile den Server und den Client. Der Client wird auf dem System gestarte, welche gesichert werden soll. Der Server wird auf dem Server mit den Datenbereichen gestartet. Das Textmenü am Server wie am Client ist einfach aber übersichtlich angeordnet. Der Server kann je nach Leistung mehrere Clients bedienen. Alle Verbindungen können auch [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">Partimage beinhaltet zwei Teile den Server und den Client. Der Client wird auf dem System gestarte, welche gesichert werden soll. Der Server wird auf dem Server mit den Datenbereichen gestartet. Das Textmenü am Server wie am Client ist einfach aber übersichtlich angeordnet. Der Server kann je nach Leistung mehrere Clients bedienen. Alle Verbindungen können auch verschlüsselt übertragen werden. Alle Parameter für den Server und den Client finden sich in der Readme Datei. Es ist einfacher den Client zu sichern wenn über eine NotCD gestartet wird. Im Internet finden sich diverse NotCDâ€™s als Iso-Images.</p>
<p class="MsoNormal">Die Software arbeite reibungslos und sehr schnell, auch das zurückspielen der Daten ist zuverlässig und schnell.<span>  </span>Ich verwende die Software schon seid 3 Jahren und bis sehr zufrieden. Im Notfall wird eine schnelle und einfache Methode immer bevorzugt.</p>
<p class="poweredbyperformancing">Powered by <a href="http://scribefire.com/">ScribeFire</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.knebler.de/artikel/partimage-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remote-Zugriff mit NoMachine NX</title>
		<link>http://www.knebler.de/artikel/remote-zugriff-mit-nomachine-nx/</link>
		<comments>http://www.knebler.de/artikel/remote-zugriff-mit-nomachine-nx/#comments</comments>
		<pubDate>Tue, 26 Jun 2007 11:58:50 +0000</pubDate>
		<dc:creator>knebler</dc:creator>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[SuSE]]></category>

		<guid isPermaLink="false">http://www.knebler.de/stage/artikel/remote-zugriff-mit-nomachine-nx/</guid>
		<description><![CDATA[NX ist eine Remote-Desktop-Software der italienischen Firma NoMachine, die mit Ausnahme der zentralen Client- und Serverapplikation unter der GNU GPL steht. Mit NX kann man den Bildschirminhalt eines entfernten Computers auf einen lokalen Rechner (auch betriebssystemübergreifend) übertragen und damit arbeiten, als säße man direkt davor. (Quelle: wikipedia) FreeNX Server HOWTO für openSUSE Einrichten des FreeNX [...]]]></description>
			<content:encoded><![CDATA[<p>NX ist eine Remote-Desktop-Software der italienischen Firma NoMachine, die mit Ausnahme der zentralen Client- und Serverapplikation unter der GNU GPL steht. Mit NX kann man den Bildschirminhalt eines entfernten Computers auf einen lokalen Rechner (auch betriebssystemübergreifend) übertragen und damit arbeiten, als säße man direkt davor. (Quelle: wikipedia)</p>
<p>FreeNX Server HOWTO für openSUSE </p>
<p>Einrichten des FreeNX Servers<br />Zur Installation der FreeNX Serverkomponente steht für aktuelle Versionen wie SUSE Linux 10.x im Online Repository oder auf den verfügbaren CD Images ein RPM-Paket bereit. Dies kann mit Hilfe von YaST oder mittels RPM installiert werden. Achtung den Client nicht vergessen.</p>
<p>Nachdem der Server und ein Client per RPM beziehungsweise YaST installiert wurde, ist die Konfiguration zur Nutzung denkbar einfach. </p>
<p>1) Um sich zu vergewissern, dass tatsächlich die richtige Server Software installiert wurden, kann man als Root User die lokale RPM Datenbank mit folgendem Kommando abfragen: </p>
<p>linux:/ # rpm -q FreeNX</p>
<p>FreeNX<br />Sollte auf die RPM Abfrage hin kein Package Name ausgegeben werden, ist das Package noch nicht installiert. Wenn wir im Beispiel &#8220;FreeNX-0.4.4-4&#8243; angegeben wird, sind schon alle Vorbedingungen für die Konfiguration des installierten Servers erfüllt. </p>
<p>2) Zur Konfiguration wird das (mitinstallierte) Programm nxsetup genutzt. </p>
<p>linux:/ # nxsetup &#8211;install &#8211;setup-nomachine-key &#8211;clean<br />Die Optionen bedeuten im Folgenden: </p>
<p>&#8211;install Installiert die für den Betrieb der Server Software notwendigen Dateien und richtet einen lokalen Benutzern Account für NX ein. </p>
<p>&#8211;setup-nomachine-key Diese Option ermöglicht den Aufbau einer verschlüsselten Verbindung mit einem bereits vorhandenen, mitgelieferten und dem Nomachine NX-Client bereits bekannten, SSH-Schlüssel. Dies bedeutet weniger Sicherheit, erleichtert jedoch die Konfiguration des Clients. Um einen neuen Schlüssel zu generieren und zu verteilen, sollte man sich zunächst mit grundlegenden Zusammenhängen der Public-Key Kryptographie vertraut machen. </p>
<p>&#8211;clean Vor der Installation werden eventuell bereits vorhandene Konfigurations- dateien entfernt. </p>
<p>Mittels des Programms &#8216;nxserver&#8217; kann neven der Konfigurationn des NX-Servers auch dessen Status Status abgefragt werden: </p>
<p>linux:/ # nxserver &#8211;status<br />NX&gt; 100 NXSERVER &#8211; Version 1.4.0-44 OS (GPL)<br />NX&gt; 110 NX Server is running<br />NX&gt; 999 Bye<br />Für den nxserver müssen die lokalen Benutzerkonten konfiguriert werden, welche sich über einen Client (wie z.B. KNX) anmelden können. </p>
<p>linux:/ # nxserver &#8211;adduser &lt;Benutzername&gt;</p>
<p>Achtung: Das Passwort sollte nicht neu gesetzt werden.</p>
<p>Der NX Server wird in der Nomachine-Terminologie als Node bezeichnet. Weitere Möglichkeit zu dessen Konfiguration bietet die Konfigurationsdatei /etc/nxserver/node.conf </p>
<p>3) Die Funktion des NX Servers kann nun mit einem lokal installierten Client getestet werden. Im Beispiel wird der KDE Client KNX genutzt. </p>
<p>News Update:</p>
<p>NoMachine hat eine neue Generation der Terminal-Server-Software NoMachine NX<br />
freigegeben.<br />Gegenüber der letzten Version kommt NoMachine NX 3.0.0 mit zahlreichen Ã„nderungen und Neuerungen. Unter anderem ist es ab sofort möglich, lokale Desktops mit anderen Nutzern zu teilen. Durch Session-Shadowing gestattet die Applikation auch mehreren Nutzern, auf eine und dieselbe Session zuzugreifen. Eine weitere Neuerung stellt die Möglichkeit dar, Vorgänge durch Skripte auszuführen. Ferner haben die Entwickler nach eigenen Angaben viele Bereiche der Applikation verbessert und zahlreiche Unzulänglichkeiten beseitigt. </p>
<p>
<p class="poweredbyperformancing">Powered by <a href="http://scribefire.com/">ScribeFire</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.knebler.de/artikel/remote-zugriff-mit-nomachine-nx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CVS Befehlsübersicht</title>
		<link>http://www.knebler.de/artikel/cvs/cvs-befehlsuebersicht/</link>
		<comments>http://www.knebler.de/artikel/cvs/cvs-befehlsuebersicht/#comments</comments>
		<pubDate>Tue, 19 Jun 2007 11:00:00 +0000</pubDate>
		<dc:creator>knebler</dc:creator>
				<category><![CDATA[CVS]]></category>

		<guid isPermaLink="false">http://www.knebler.de/wordpress/?p=50</guid>
		<description><![CDATA[CVS Befehlsübersicht
Checkout: Projektname (Modulname)
Import: Projektname (Modulname)]]></description>
			<content:encoded><![CDATA[<p>Checkout: Projektname (Modulname)</p>
<p>Import: Projektname (Modulname)</p>
<p>Add: Eine neue Datei oder ein neues Verzeichnis zum Repository hinzufï¿½gen.<br />
Get: Eine lokale Kopie des Repositories anlegen.</p>
<p>Commit: ï¿½nderungen ins Repository eintragen.</p>
<p>Diff: Unterschiede zwischen lokaler Kopie und Repository anzeigen.</p>
<p>Log: CVS Log Information anzeigen.</p>
<p>Rdiff: Eine Sammlung von Diffs zur Anzeige von Versionsunterschieden erzeugen.</p>
<p>Status: Status der lokalen Dateien im Vergleich zum Repository anzeigen.</p>
<p>Update: Die lokale Kopie des Repositories aktualisieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.knebler.de/artikel/cvs/cvs-befehlsuebersicht/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testmethoden für den Softwaretest</title>
		<link>http://www.knebler.de/artikel/testmethoden-fuer-den-softwaretest/</link>
		<comments>http://www.knebler.de/artikel/testmethoden-fuer-den-softwaretest/#comments</comments>
		<pubDate>Tue, 12 Jun 2007 18:00:00 +0000</pubDate>
		<dc:creator>knebler</dc:creator>
				<category><![CDATA[Artikel]]></category>

		<guid isPermaLink="false">http://www.knebler.de/wordpress/?p=119</guid>
		<description><![CDATA[Allgemeines &#160; Bei immer komplexeren Produkten spielt besonders im Software-Engineering der Test eine wichtige Rolle. Dort werden bis zu 40% der gesamten Projektdauer dem Testen gewidmet. &#160; Ziele &#160; Â Â Â  * Ziel des Testens ist es, ein Programm mit der Absicht auszuführen Fehler zu finden. Â Â Â  * Ein Testobjekt sollte nicht vom Entwickler selbst, sondern [...]]]></description>
			<content:encoded><![CDATA[<h3 class="MsoNormal" style="margin: 0cm 0cm 0pt">Allgemeines</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Bei immer komplexeren Produkten  spielt besonders im Software-Engineering der Test eine wichtige Rolle. Dort  wer<span class="highlight">den</span> bis zu 40% der gesamten Projektdauer dem  Testen gewidmet.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h3 class="MsoNormal" style="margin: 0cm 0cm 0pt">Ziele</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â  </span>* Ziel des Testens ist es, ein Programm mit  der Absicht auszuführen Fehler zu fin<span class="highlight">den</span>.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â  </span>* Ein Testobjekt sollte nicht vom  Entwickler selbst, sondern von anderen, wenn möglichst unabhängigen, Personen  getestet wer<span class="highlight">den</span>, <span class="highlight">den</span>n  der Entwickler findet prinzipiell immer weniger Fehler in seinem eigenen  Programm als externe Personen.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â  </span>* Tests sollte man unter der Annahme  planen, dass Fehler gefun<span class="highlight">den</span> wer<span class="highlight">den</span> können.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â  </span>* Ein Fehler in einem Modul weist oft auf  weitere Fehler in diesem oder anderen Modulen hin.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â  </span>* Testziele in Bezug auf die Anforderungen:</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â Â Â Â Â Â  </span>1. Jede Anforderung muss getestet  wer<span class="highlight">den</span>, ansonsten ist das Testen unvollständig.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â Â Â Â Â Â  </span>2. Ungenügendes bzw. exzessives Testen  soll vermie<span class="highlight">den</span> wer<span class="highlight">den</span>.  Es soll zwar jede Anforderung getestet wer<span class="highlight">den</span>, aber  die Anzahl der Testfälle <span class="highlight">für</span> einzelne Anforderungen  sollte nicht zu groß sein.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â Â Â Â Â Â  </span>3. Geeignete Komplexität beim Testen.  Die Anzahl der Testfälle, der Anforderungen und der Links zwischen Anforderungen  und Testfällen sollte ausgewogen sein.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h3 class="MsoNormal" style="margin: 0cm 0cm 0pt">Abgrenzung</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">In ihrem Selbstverständnis sind  Tests klar abzugrenzen von</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â </span><span>Â Â  </span>*  der klassischen Verifikation, welche einen Korrektheitsbeweis verwendet,</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â  </span>* dem einfachen Experiment oder  Ausprobieren, in der Fachsprache des Software-Testens als &#8220;Try&#8221; (engl. <span class="highlight">für</span> Versuch) bezeichnet.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h3 class="MsoNormal" style="margin: 0cm 0cm 0pt">Ursache-Wirkungs-Analyse</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Bei dieser Methode wer<span class="highlight">den</span> Ursachen und Wirkungen jeder Teilspezifikation i<span class="highlight">den</span>tifiziert. Eine Ursache ist dabei eine einzelne  Eingabebedingung oder eine Ã„quivalenzklasse von Eingabebedingungen; eine Wirkung  ist eine Ausgabebedingung oder eine Systemtransformation.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Die folgen<span class="highlight">den</span> Arten von Abhängigkeiten zwischen Ursachen wer<span class="highlight">den</span> dabei unterschie<span class="highlight">den</span>:</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â  </span>1. Exklusive Abhängigkeit: Die Anwesenheit  einer Ursache schließt andere Ursachen aus.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â  </span>2. Inklusive Beziehung: Mindestens eine von  mehreren Ursachen liegt vor (z.B. ist eine Ampel immer grün, gelb oder rot â€“  oder rot und gelb zusammen. Wenn sie funktioniert und eingeschaltet ist).</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â  </span>3. One-and-only-one-Beziehung: Es liegt  genau eine von mehreren Ursachen vor (z.B. männlich oder weiblich oder Zwitter).</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â  </span>4. Requires-Abhängigkeit: Die Anwesenheit  einer Ursache ist Voraussetzung <span class="highlight">für</span> das Vorhan<span class="highlight">den</span>sein einer anderen (z.B. Alter &gt; 21 und Alter &gt;  18).</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â  </span>5. Maskierungsabhängigkeit: Eine Ursache  verhindert, dass eine andere Ursache eintreten kann.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Entscheidungstabellen-basierter  Test</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Hier wer<span class="highlight">den</span> die Testfälle auf Basis von Entscheidungstabellen  ermittelt, indem Regeln spezifiziert wer<span class="highlight">den</span>, die  Bedingungskombinationen mit <span class="highlight">den</span> zugehörigen  Aktionen verknüpfen. Die Methode ähnelt der Ursache-Wirkungs-Analyse.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h3 class="MsoNormal" style="margin: 0cm 0cm 0pt">Strukturorientierte <span class="highlight">Testmetho</span><span class="highlight">den</span></h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Strukturorientierte <span class="highlight">Testmetho</span><span class="highlight">den</span> bestimmen  Testfälle auf Basis des Softwarequellcodes.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Software-Module enthalten Daten,  die verarbeitet wer<span class="highlight">den</span>, und Kontrollstrukturen, die  die Verarbeitung der Daten steuern. Entsprechend unterscheidet man Tests, die  auf dem Kontrollfluss basieren, und Tests, die Datenzugriffe als Grundlage  haben.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h4 class="MsoNormal" style="margin: 0cm 0cm 0pt">Kontrollflussorientierte Tests</h4>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Kontrollflussorientierte Tests  beziehen sich auf logische Ausdrücke der Implementierung. Datenflussorientierte  Kriterien konzentrieren sich auf <span class="highlight">den</span> Datenfluss der  Implementierung. Genau genommen konzentrieren sie sich auf die Art und Weise in  welcher Hinsicht die Werte mit ihren Variablen verbun<span class="highlight">den</span> sind und wie diese Anweisungen die Durchführung der  Implementierung beeinflussen.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Die kontrollflussorientierten  Kriterien wer<span class="highlight">den</span> in vier weitere Kriterien  unterteilt.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â  </span>* Ãœberdeckung von Anweisungen (C0)</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â  </span>* Kantenüberdeckung (C1)</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â  </span>* Bedingungsüberdeckung</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>Â Â Â  </span>* Pfadüberdeckung</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><strong>Alle orientieren sich am  Kontrollflussgraphen des Programms. </strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h4 class="MsoNormal" style="margin: 0cm 0cm 0pt">Anweisungsüberdeckungstest (C0  -Test)</h4>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Beim Anweisungsüberdeckungstest  wer<span class="highlight">den</span> alle Knoten des Kontrollflussgraphen von  mindestens einem Testfall abgedeckt, d.h., jede Anweisung im Quelltext wird  mindestens einmal ausgeführt. Der C0-Test hat <em>keine praktische Bedeutung</em>, da er ein zu  schwaches Kriterium <span class="highlight">für</span> eine sinnvolle  Testdurchführung darstellt.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h4 class="MsoNormal" style="margin: 0cm 0cm 0pt">Zweigüberdeckungstest (C1 -Test)</h4>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Hier wer<span class="highlight">den</span> die Testfälle so spezifiziert, dass alle Zweige  (Kanten) des Kontrollflussgraphen mindestens einmal durchlaufen wer<span class="highlight">den</span>.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Auch diese Methode hat Nachteile:</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Oft ist es schwierig,  Programmzweige zu durchlaufen, da bestimmte Betriebssystemzustände oder  schwierig zu erzeugende Datenkonstellationen erforderlich sind. Zudem wer<span class="highlight">den</span> Kombinationen von Zweigen und komplexe Bedingungen  nicht angemessen berücksichtigt.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Schließlich wer<span class="highlight">den</span> Programmschleifen nicht ausreichend getestet, da ein  einzelner Durchlauf durch <span class="highlight">den</span> Schleifenkörper von  abweisen<span class="highlight">den</span> Schleifen und eine einzelne  Wiederholung von nicht abweisen<span class="highlight">den</span> Schleifen <span class="highlight">für</span> die Zweigüberdeckung ausreichend ist.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h4 class="MsoNormal" style="margin: 0cm 0cm 0pt">Einfacher  Bedingungsüberdeckungstest (C3A -Test)</h4>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Hier wird die Struktur der  Entscheidungen innerhalb des Testlings <span class="highlight">für</span> die  Testfallermittlung herangezogen. Dabei wird gefordert, die Testfälle so zu  bestimmen, dass die Auswertung jeder Teilentscheidung einmal <span class="highlight">den</span> Wert wahr und einmal <span class="highlight">den</span>  Wert falsch ergibt.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Dies berücksichtigt jedoch nicht,  dass Bedingungen oft aus geschachtelten logischen Verknüpfungen von  Teilentscheidungen bestehen. Dadurch wer<span class="highlight">den</span>  Fehlersituationen maskiert: Bei â€žoderâ€œ &#8211; Verknüpfungen reicht es, wenn die erste  Teilbedingung wahr ist, bei â€žundâ€œ â€“ Verknüpfungen, wenn die erste Bedingung  falsch ist, um <span class="highlight">den</span> weiteren Kontrollfluss  festzulegen. Fehler in <span class="highlight">den</span> anderen Bedingungsteilen  wer<span class="highlight">den</span> nicht erkannt. Daher garantiert der einfache  Bedingungsüberdeckungstest nicht einmal eine Zweigüberdeckung.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h4 class="MsoNormal" style="margin: 0cm 0cm 0pt">Mehrfach-Bedingungsüberdeckungstest(C3B / C3C-Test)</h4>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Der minimale  Mehrfach-Ãœberdeckungstest verlangt, dass neben <span class="highlight">den</span>  Teilentscheidungen und der Gesamtentscheidung auch alle zusammengesetzten  Teilentscheidungen gegen wahr und falsch geprüft wer<span class="highlight">den</span>.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Der modifizierte  Bedingungsüberdeckungstest verlangt darüber hinaus Testfälle, die demonstrieren,  dass jede Teilentscheidung <span class="highlight">den</span> Wahrheitswert der  Gesamtentscheidung unabhängig von <span class="highlight">den</span> anderen  Teilentscheidungen beeinflussen kann.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Der wesentliche Nachteil ist der  extrem hohe Testaufwand: Bei n Teilentscheidungen ergeben sich 2n Testfälle.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h4 class="MsoNormal" style="margin: 0cm 0cm 0pt">Pfad-Ãœberdeckungstests (C2  -Test)</h4>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Beim Pfadüberdeckungstest  wer<span class="highlight">den</span> sämtliche unterschiedlichen Pfade des  Testlings in mindestens einem Testfall durchlaufen. In der Regel ist dies  allerdings nicht durchführbar, da es sehr häufig unendlich viele Pfade gibt â€“  bedingt durch Schleifen ohne feste Wiederholungszahl. Ein weiteres Problem ist  die Nichtausführbarkeit eines Teils der aus dem Kontrollflussgraphen  konstruierbaren Pfade. Ein Beispiel da<span class="highlight">für</span>: Steht im  Programmcode zunächst â€žWenn Bedingung A dann Zweig 1 sonst Zweig 2â€œ und später  â€žWenn Bedingung A dann Zweig 3 sonst Zweig 4â€œ, dann können Pfade, die Zweig 1  und Zweig 4 enthalten, nicht ausgeführt wer<span class="highlight">den</span>.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Der Pfadüberdeckungstest hat  daher keine praktische Bedeutung.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h4 class="MsoNormal" style="margin: 0cm 0cm 0pt">Datenflussorientierte Tests  (z.B. <span class="highlight">für</span> Java)</h4>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Datenflussorientierte <span class="highlight">Testmetho</span><span class="highlight">den</span> basieren auf  dem Datenfluss, also dem Zugriff auf Variablen. Sie sind besonders geeignet  <span class="highlight">für</span> objektorientiert entwickelte Systeme.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span class="highlight">Für</span>  die datenflussorientierten Tests gibt es unterschiedliche Kriterien, welche im  Folgen<span class="highlight">den</span> beschrieben wer<span class="highlight">den</span>.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h4 class="MsoNormal" style="margin: 0cm 0cm 0pt">All defs-Kriterium</h4>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span class="highlight">Für</span>  jede Definition (all defs) einer Variablen wird eine Berechnung oder Bedingung  getestet. <span class="highlight">Für</span> je<span class="highlight">den</span>  Knoten und jede Variable muss ein definitionsfreier Pfad zu einem Element  getestet wer<span class="highlight">den</span>. Die Fehlererkennungsrate liegt bei  diesem Kriterium bei ca. 24%.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h4 class="MsoNormal" style="margin: 0cm 0cm 0pt">All p-uses-Kriterium</h4>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Die â€žp-usesâ€œ dienen zur Bildung  von Wahrheitswerten innerhalb eines Prädikates (predicate-uses). Die  Fehlererkennungsrate liegt bei diesem Kriterium bei ca. 34%. Es wer<span class="highlight">den</span> insbesondere Kontrollflussfehler erkannt.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h4 class="MsoNormal" style="margin: 0cm 0cm 0pt">All c-uses Kriterium</h4>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Unter dem â€žc-uses-Kriteriumâ€œ wird  die Berechnung von Werten innerhalb eines Ausdrucks verstan<span class="highlight">den</span>. Dieses Kriterium deckt ca. 48% aller c-uses-Fehler  auf. Es i<span class="highlight">den</span>tifiziert insbesondere  Berechnungsfehler.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Wegen ihrer Kompliziertheit sind  die Techniken zur datenflussorientierten Testfallermittlung nur werkzeuggestützt  einsetzbar. Da es aber kaum Werkzeuge gibt (JUnit), haben sie zurzeit kaum  praktische Relevanz.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<h3 class="MsoNormal" style="margin: 0cm 0cm 0pt">JUnit</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">JUnit ist ein Framework zum  Testen von Java-Programmen, das besonders <span class="highlight">für</span>  automatisierte Unit-Tests einzelner Units (meist Klassen oder Metho<span class="highlight">den</span>) geeignet ist. Es basiert auf Konzepten, die  ursprünglich unter dem Namen SUnit <span class="highlight">für</span> Smalltalk  entwickelt wur<span class="highlight">den</span>.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">Ein JUnit-Test kennt nur zwei  Ergebnisse: Entweder der Test gelingt (dann ist er â€žgrünâ€œ) oder er misslingt  (dann ist er â€žrotâ€œ). Das Misslingen kann als Ursache einen Fehler (Error) oder  ein falsches Ergebnis (Failure) haben, die beide per Exception signalisiert  wer<span class="highlight">den</span>. Der Unterschied zwischen <span class="highlight">den</span> bei<span class="highlight">den</span> Begriffen liegt  darin, dass Failures erwartet wer<span class="highlight">den</span>, während  Errors eher unerwartet auftreten. Technisch wer<span class="highlight">den</span>  Failures mittels einer speziellen Exception namens â€žAssertionFailedErrorâ€œ  signalisiert, während alle übrigen Exceptions vom JUnit-Framework als Error  interpretiert wer<span class="highlight">den</span>.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><a href="http://www.junit.org/index.htm">http://www.junit.org/index.htm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.knebler.de/artikel/testmethoden-fuer-den-softwaretest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

