<?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>Technical stuff &#187; Sebastian Bergmann</title>
	<atom:link href="http://www.tekkie.ro/tag/sebastian-bergmann/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tekkie.ro</link>
	<description>Requirements are like water. They&#039;re easier to build on when they&#039;re frozen.</description>
	<lastBuildDate>Sat, 26 Nov 2011 11:35:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>QQA in Software Projects with Sebastian Bergmann @ Dutch PHP Conference &#124; Part 2 &#124; Notes</title>
		<link>http://www.tekkie.ro/testing/qqa-in-software-projects-with-sebastian-bergmann-dutch-php-conference-part-2-notes/</link>
		<comments>http://www.tekkie.ro/testing/qqa-in-software-projects-with-sebastian-bergmann-dutch-php-conference-part-2-notes/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 10:32:57 +0000</pubDate>
		<dc:creator>Georgiana</dc:creator>
				<category><![CDATA[testing]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[Sebastian Bergmann]]></category>

		<guid isPermaLink="false">http://www.tekkie.ro/?p=255</guid>
		<description><![CDATA[-&#62; Continuous Integration &#8212;&#62; build automation [write build script to get latest code version; run tools to detect problems; run unit tests &#38; publish these results; package; deploy] &#8212;&#62; summary of the tools enumerated below can be found in this presentation: http://www.slideshare.net/sebastian_bergmann/continuous-integration-of-php-projects-4354597 -&#62; static code analysis &#8212;&#62; LOC [= lines of code] metric &#8212;&#62; CLOC [...]]]></description>
			<content:encoded><![CDATA[<p>-&gt; Continuous Integration<br />
&#8212;&gt; build automation [write build script to get latest code version; run tools to detect problems; run unit tests &amp; publish these results; package; deploy]<br />
&#8212;&gt; summary of the tools enumerated below can be found in this presentation: http://www.slideshare.net/sebastian_bergmann/continuous-integration-of-php-projects-4354597</p>
<p>-&gt; static code analysis<br />
&#8212;&gt; LOC [= lines of code] metric<br />
&#8212;&gt; CLOC [= comment LOC]<br />
&#8212;&gt; NCLOC [= non-comment LOC]<br />
&#8212;&gt; ELOC [= executable LOC]<br />
&#8212;&gt; welcome to phploc [ <a href="http://github.com/sebastianbergmann/phploc">http://github.com/sebastianbergmann/phploc</a> ]<br />
&#8212;&gt; demo phploc directly on PHPUnit</p>
<p>-&gt; code duplication<br />
&#8212;&gt; totally identical LOC<br />
&#8212;&gt; phptok some_file.php<br />
&#8212;&gt; phpcpd /path/to/your/project [ the <a href="http://github.com/sebastianbergmann/phpcpd">copy/paste detector</a> &gt;:) ]</p>
<p>-&gt; code complexity<br />
&#8212;&gt; cyclomatic complexity [count the # of branching points]<br />
&#8212;&gt; NPath complexity [count the # of possible execution paths]</p>
<p>-&gt; phpcs<br />
&#8212;&gt; the code sniffer <img src='http://www.tekkie.ro/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
&#8212;&gt; start here: <a href="http://github.com/sebastianbergmann/phpcs-sebastian">http://github.com/sebastianbergmann/phpcs-sebastian</a><br />
&#8212;&gt; allows for defining own sniffs; <a href="http://github.com/sebastianbergmann/phpcs-sebastian/blob/master/SebastianCodingStandard.php">demo sniff list</a></p>
<p>-&gt; pdepend<br />
&#8212;&gt; static analysis of PHP code<br />
&#8212;&gt; helps identify parts of app. which should be refactored</p>
<p>-&gt; build automation tools<br />
&#8212;&gt; ant, make, phing, rake<br />
&#8212;&gt; delve a bit into ant features<br />
&#8212;&gt; small ant config to pull from git, run phpunit, run some of the static code analysis tools in parallel<br />
&#8212;&gt; demo ant run for an <a href="http://github.com/sebastianbergmann/php-object-freezer">existing project</a>, and get a glimpse at the reports of the static code analysis tools output</p>
<p>-&gt; continuous integration server options<br />
&#8212;&gt; phpUnderControl: customized CruiseControl<br />
&#8212;&gt; Hudson [Java-based, open-source]<br />
&#8212;&gt; Bamboo -&gt; the Atlassian way of doing it, still Java-based<br />
&#8212;&gt; Arbit -&gt; an alpha release, PHP-based solution<br />
&#8212;&gt; demo: <a href="http://ci.thephp.cc/">http://ci.thephp.cc/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tekkie.ro/testing/qqa-in-software-projects-with-sebastian-bergmann-dutch-php-conference-part-2-notes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>QA in Software Projects with Sebastian Bergmann @ Dutch PHP Conference &#124; Part 1 &#124; Notes</title>
		<link>http://www.tekkie.ro/testing/qa-in-software-projects-with-sebastian-bergmann-dutch-php-conference-part-1-notes/</link>
		<comments>http://www.tekkie.ro/testing/qa-in-software-projects-with-sebastian-bergmann-dutch-php-conference-part-1-notes/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 09:25:42 +0000</pubDate>
		<dc:creator>Georgiana</dc:creator>
				<category><![CDATA[testing]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[Sebastian Bergmann]]></category>

		<guid isPermaLink="false">http://www.tekkie.ro/?p=252</guid>
		<description><![CDATA[-&#62; what is SW quality? -&#62; the BankAccount example &#8212;&#62; PHPUnit 3.4.12 is used for these examples &#8212;&#62; CLI run using phpunit BankAccountTest &#8212;&#62; phpunit &#8211;testdox BankAccountTest &#8212;&#62; used for instance to present functionality summary before the actual coding &#8212;&#62; setUp() &#8212;&#62; Q&#38;A &#8212;&#62; use @expectedException annotation instead of the try/catch block inside the method [...]]]></description>
			<content:encoded><![CDATA[<p>-&gt; what is SW quality?<br />
-&gt; the BankAccount example<br />
&#8212;&gt; PHPUnit 3.4.12 is used for these examples<br />
&#8212;&gt; CLI run using phpunit BankAccountTest<br />
&#8212;&gt; phpunit &#8211;testdox BankAccountTest &#8212;&gt; used for instance to present functionality summary before the actual coding<br />
&#8212;&gt; setUp()<br />
&#8212;&gt; Q&amp;A &#8212;&gt; use @expectedException annotation instead of the try/catch block inside the method body<br />
&#8212;&gt; Q&amp;A &#8212;&gt; use 1 test method for each test, not stuff everything in 1 method<br />
&#8212;&gt; PHPUnit 4 might use the traits feature of PHP, as opposed to the JUnit approach</p>
<p>-&gt; organizing tests<br />
&#8212;&gt; tree structure, mirroring the actual code organization<br />
&#8212;&gt; using group annotation you can run only specific tests<br />
&#8212;&gt; phpunit &#8211;filter testFreezingAnObjectWorks Tests [ excludes a specific slow test ]</p>
<p>-&gt; automated bugfixes project<br />
&#8212;&gt; write a test to repro the bug<br />
&#8212;&gt; use genetic programming to issue the patch that fixes the bug</p>
<p>-&gt; SW testing pyramid /// Categories of (Unit) Tests<br />
&#8212;&gt; bottom level: unit tests<br />
&#8212;&gt; upper level: functional tests [this is not the functional testing w/ Selenium!] [it's testing blocks of functionality instead units] [do the interfaces between classes abide their contracts?]<br />
&#8212;&gt; top-level: End-to-End Test [these are the expensive ones ... running a full Selenium arrangement across all browsers took more than 24h]</p>
<p>-&gt; minimalistic MVC implementation<br />
&#8212;&gt; used to demo unit testing for more than just the Model<br />
&#8212;&gt; assertAttributeEmpty() and assertAttributeContains() work with public / private / private class members<br />
&#8212;&gt; @depends is a simple way of declaring dependencies between tests<br />
&#8212;&gt; sample of refactoring so that there&#8217;s no need to assertAttribute*() for protected / private members</p>
<p>-&gt; PHPUnit Best Practices<br />
&#8212;&gt; use an XML configuration file<br />
&#8212;&gt; look inside the cwd for a phpunit.xml [fallback to phpunit.xml.dist]<br />
&#8212;&gt; generate code coverage report, showing also dead code<br />
&#8212;&gt; new beta thingy: code coverage distribution report + class complexity</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tekkie.ro/testing/qa-in-software-projects-with-sebastian-bergmann-dutch-php-conference-part-1-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

