<?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>Gojko Adzic &#187; selenium</title>
	<atom:link href="http://gojko.net/tag/selenium/feed/" rel="self" type="application/rss+xml" />
	<link>http://gojko.net</link>
	<description>Building software that matters</description>
	<lastBuildDate>Wed, 04 Aug 2010 11:38:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>How to implement UI testing without shooting yourself in the foot</title>
		<link>http://gojko.net/2010/04/13/how-to-implement-ui-testing-without-shooting-yourself-in-the-foot-2/</link>
		<comments>http://gojko.net/2010/04/13/how-to-implement-ui-testing-without-shooting-yourself-in-the-foot-2/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 06:56:58 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[agile acceptance testing]]></category>
		<category><![CDATA[atdd]]></category>
		<category><![CDATA[fitnesse]]></category>
		<category><![CDATA[page object]]></category>
		<category><![CDATA[robot framework]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[twist]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=1782</guid>
		<description><![CDATA[I&#8217;m currently interviewing lots of teams that have implemented acceptance testing for my new book. A majority of those interviewed so far have at some point shot themselves in the foot with UI test automation. After speaking to several people who are about to do exactly that at the Agile Acceptance Testing Days in Belgium [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently interviewing lots of teams that have implemented acceptance testing for my new book. A majority of those interviewed so far have at some point shot themselves in the foot with UI test automation. After speaking to several people who are about to do exactly that at the Agile Acceptance Testing Days in Belgium a few weeks ago, I&#8217;d like to present what I consider a very good practice for how to do UI test automation efficiently. <span id="more-1782"></span></p>
<p><a href="http://gojko.net/2007/09/25/effective-user-interface-testing/">I&#8217;ve written against UI test automation several times so far, so I won&#8217;t repeat myself</a>. However, many teams I interviewed seem to prefer UI level automation, or think that such level of testing is necessary to prove the required business functionality. Almost all of them have realised six to nine months after starting this effort that the cost of maintaining UI level tests is higher than the benefit they bring. Many have thrown away the tests at that point and effectively lost all the effort they put into them. If you have to do UI test automation (which I&#8217;d challenge in the first place), here is how do go about doing it so that the cost of maintenance doesn&#8217;t kill you later.</p>
<h2>Three levels of UI test automation</h2>
<p>A very good idea when designing UI level functional tests is to think about describing the test and the automation at these three levels:</p>
<p><img align="right" src="http://gojko.s3.amazonaws.com/three_levels.png"/></p>
<ul>
<li>Business rule/functionality level: what is this test demonstrating or exercising. For example: Free delivery is offered to customers who order two or more books.</li>
<li>User interface workflow level: what does a user have to do to exercise the functionality through the UI, on a higher activity level. For example, put two books in a shopping cart, enter address details, verify that delivery options include free delivery.</li>
<li>Technical activity level: what are the technical steps required to exercise the functionality. For example, open the shop homepage, log in with &#8220;testuser&#8221; and &#8220;testpassword&#8221;, go to the &#8220;/book&#8221; page, click on the first image with the &#8220;book&#8221; CSS class, wait for page to load, click on the &#8220;Buy now&#8221; link&#8230; and so on.</li>
</ul>
<p><br clear="all" /></p>
<p>At the point where they figured out that UI testing is not paying off, most teams I interviewed were describing tests at the technical level only (an extreme case of this are recorded test scripts, where even the third level isn&#8217;t human readable). Such tests are very brittle, and many of them tend to break with even the smallest change in the UI. The third level is quite verbose as well, so it is often hard to understand what is broken when a test fails. Some teams were describing tests at the workflow level, which was a bit more stable. These tests weren&#8217;t bound to a particular layout, but they were bound to user interface implementation. When the page workflow changes, or when the underlying technology changes, such tests break.</p>
<p>Before anyone starts writing an angry comment about the technical level being the only thing that works, I want to say: <i>Yes, we do need the third level</i>. It is where the automation really happens and where the test exercises our web site. But there are serious benefits to not having <i>only the third level</i>.</p>
<p>The stability in acceptance tests comes from the fact that business rules don&#8217;t change as much as technical implementations. Technology moves much faster than business. The closer your acceptance tests are to the business rules, the more stable they are. Note that this doesn&#8217;t necessarily mean that these tests won&#8217;t be executed through the user interface &#8211; just that they are defined in a way that is not bound to a particular user interface. </p>
<p>The idea of thinking about these different levels is good because it allows us to write UI-level tests that are easy to understand, efficient to write and relatively inexpensive to maintain. This is because there is a natural hierarchy of concepts on these three levels. Checking that delivery is available for two books involves putting a book in a shopping cart. Putting a book in a shopping cart involves a sequence of technical steps. Entering address details does as well. Breaking things down like that and combining lower level concepts into higher level concepts reduces the cognitive load and promotes reuse.</p>
<h2>Easy to understand</h2>
<p>From the bottom up, the clarity of the test increases. At the technical activity level, tests are very technical and full of clutter &#8211; it&#8217;s hard to see the forest for the trees. At the user interface workflow level, tests describe how something is done, which is easier to understand but still has too much detail to efficiently describe several possibilities. At the business rule level, the intention of the test is described in a relatively terse form. We can use that level to effectively communicate all different possibilities in important example cases. It is much more efficient to give another example as &#8220;Free delivery is not offered to customers who have one book&#8221; than to talk about logging in, putting only a single book in a cart, checking out etc. I&#8217;m not even going to mention how much cognitive overload a description of that same thing would require if we were to talk about clicking check-boxes and links.</p>
<h2>Efficient to write</h2>
<p>From the bottom up, the technical level of tests decreases. At the technical activity level, you need people who understand the design of a system, HTTP calls, DOM and such to write the test. To write tests at the user interface workflow level, you only need to understand the web site workflow. At the business rule level, you need to understand what the business rule is. Given a set of third-level components (eg login, adding a book), testers who are not automation specialists and business users can happily write the definition of second level steps. This allows them to engage more efficiently during development and reduce the automation load on developers. </p>
<p>More importantly, the business rule and the workflow level can be written before the UI is actually there. Tests at these levels can be written before the development starts, and be used as guidelines for development and as acceptance criteria to verify the output. </p>
<h2>Relatively inexpensive to maintain</h2>
<p>The business rule level isn&#8217;t tied to any particular web site design or activity flow, so it remains stable and unchanged during most web user interface changes, be it layout or workflow improvements. The user interface workflow level is tied to the activity workflow, so when the flow for a particular action changes we need to rewrite only that action. The technical level is tied to the layout of the pages, so when the layout changes we need to rewrite or re-record only the implementation of particular second-level steps affected by that (without changing the description of the test at the business or the workflow level). </p>
<p>To continue with the free delivery example from above, if the login form was suddenly changed not to have a button but an image, we only need to re-write the &#8220;login&#8221; action at the technical level. From my experience, it is the technical level where changes happen most frequently &#8211; layout, not the activity workflow. So by breaking up the implementation into this hierarchy, we&#8217;re creating several layers of insulation and limiting the propagation of changes. This reduces the cost of maintenance significantly.</p>
<h2>Implementing this in practice</h2>
<p>There are many good ways to implement this idea in practice. Most test automation tools provide one or two levels of indirection that can be used for this. In fact, this is why I think Cucumber found such a sweet spot for browser based user interface testing. With Cucumber, step definitions implemented in a programming language naturally sit with developers and this is where the technical activity level UI can be described. These step definition can then be reused to create scenarios (user interface workflow level), and <a href="http://gojko.net/2010/01/05/bdd-in-net-with-cucumber-part-3-scenario-outlines-and-tabular-templates/">scenario outlines</a> can be used to efficiently describe tests at the business rule level.</p>
<p>New SLIM test runner for FitNesse provides similar levels of isolation. The bottom fixture layer sits naturally with the technical activity level. Scenario definitions can be used to describe workflows at the activity level. Scenario tables then present a nice, concise view at the business rule level. </p>
<p><a href="http://gojko.net/2009/05/28/robot-framework-review/">Robot Framework</a> uses &#8220;keywords&#8221; to describe tests, and allows us to define keywords either directly in code (which becomes the technical level) or by combining existing keywords (which becomes the workflow and business rule level).</p>
<p>The <a href="http://code.google.com/p/webdriver/wiki/PageObjects">Page Object</a> idea from Selenium and WebDriver is a good start, but stops short of finishing the job. It requires us to encapsulate the technical activity level into higher level &#8220;page&#8221; functionality. These can then be used to describe business workflows. It lacks the consolidation of workflows into the top business rule level &mdash; so make sure to do create this level yourself in the code. (Antony Marcano also raised a valid point that users <a href="http://gojko.net/2009/10/06/putting-selenium-in-the-right-place/">think about business activities, not page functionality</a> during CITCON Europe 09, so page objects might not be the best way to go anyway).</p>
<p>TextTest works with <a href="http://texttest.carmen.se/index.php?page=concepts&#038;n=xusecase">xUseCase recorders</a>, an interesting twist on this concept that allows you to record the technical level of step definitions without having to program it manually. This might be interesting for thick-client UIs where automation scripts are not as developed as in the web browser space.</p>
<p>With <a href="http://gojko.net/2010/04/06/twist-2-0-acceptance-testing-the-productive-way/">Twist</a>, you can record the technical level and it will create fixture definitions for you. Instead of using that directly in the test, you can use &#8220;abstract concepts&#8221; to combine steps into workflow activities and then use that for business level testing. Or you can add fixture methods to produce workflow activities in code. </p>
<h2>Beware of programming in text</h2>
<p>Looking at UI tests at these three levels is I think generally a good practice. Responsibility for automation at the user interface level is something that each team needs to decide depending on their circumstances. </p>
<p>Implementing the workflow level in plain text test scripts (Robot Framework higher level keywords, Twist abstract concepts, SLIM scenario tables) allows business people and testers who aren&#8217;t automation specialists to write and maintain them. For some teams, this is a nice benefit because developers can then focus on other things and testers can engage earlier. That does mean, however, that there is no automated refactoring, syntax checking or anything like that at the user interface automation level. </p>
<p>Implementing the workflow level in code enables better integration and reuse, also giving you the possibility of implementing things below the UI when that is easier, without disrupting the higher level descriptions. It does, however, require people with programming knowledge to automate that level.</p>
<p>An interesting approach that one team I interviewed had is to train testers to write code enough to be able to implement the user activity level in code as well. This doesn&#8217;t require advanced programming knowledge, and developers are there anyway to help if someone gets stuck. </p>
<h2>Things to remember</h2>
<p>To avoid shooting yourself in the foot with UI tests, remember these things:</p>
<ul>
<li>Think about UI test automation at three levels: business rules, user interface workflow and technical activity</li>
<li>Even if the user interface workflow automation gets implemented in plain text, make sure to put one level of abstraction above it and describe business rules directly. Don&#8217;t describe rules as workflows (unless they genuinely deal with workflow decisions &#8211; and even then it&#8217;s often good to describe individual decisions as state machines).</li>
<li>Even if the user interface workflow automation gets implemented in code, make sure to separate technical activities required to fulfil a step into a separate layer. Reuse these step definitions to get stability and easy maintenance later.</li>
<li>Beware of programming in plain text.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2010/04/13/how-to-implement-ui-testing-without-shooting-yourself-in-the-foot-2/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Putting Selenium in the right place</title>
		<link>http://gojko.net/2009/10/06/putting-selenium-in-the-right-place/</link>
		<comments>http://gojko.net/2009/10/06/putting-selenium-in-the-right-place/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 08:15:18 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[citcon]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=1253</guid>
		<description><![CDATA[Although Selenium is an essential trace element, it is toxic if taken in excess. That is what Wikipedia has to say on the chemical element Selenium, but pretty much sums up my feelings about the web testing tool of the same name as well. I like very much how easy it is to implement web [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/images/organic_selenium.jpg" style="width:200px" align="left" />Although Selenium is an essential trace element, it is toxic if taken in excess. That is what Wikipedia has to say on the chemical element Selenium, but pretty much sums up my feelings about the web testing tool of the same name as well. I like very much how easy it is to implement web tests with Selenium, but I&#8217;ve seen so many teams shoot themselves in the foot by misusing it and wasting a ton of time on writing and executing tests that simply got thrown away on the end. The <a href="http://code.google.com/p/webdriver/wiki/PageObjects">Page Object</a> pattern, popularised by Simon Stewart with WebDriver, seems to be the universally accepted best practice to manage UI tests efficiently and the preferred way to implement Selenium tests. However, at the recent <a href="/tag/citcon">CITCON Europe</a> conference in Paris, <a href="http://am.testingreflections.com">Antony Marcano</a> spoke against this and offered an alternative.<span id="more-1253"></span></p>
<p>One of the biggest issues with UI tests described at the task level (such as click there, type this etc) is that they <a href="http://gojko.net/2007/09/25/effective-user-interface-testing/">are very brittle and hard to understand</a>. Too many details in technical steps make it hard to see the big picture, so tests work nicely as a regression check but once something fails it is hard to figure out what exactly went wrong. They are also bound to a particular UI design, so when the design changes, lots of tests break. Selenium works on the technical task level and tests written for Selenium frequently fall into this black whole. Once the design is changed, you might as well do everything again from scratch. </p>
<p>Instead of writing tests at the technical task level, the Page Object pattern suggests creating one more level of indirection and describing business functionality of pages with objects (eg search for customers, submit registration form) and then implementing individual methods of these objects with Selenium. Tests are then written with the page object methods, which make them much more understandable and easier to maintain. Once the UI changes, we can reimplement only the relevant methods of Page Objects making the effects of changes relatively contained. Tests themselves don&#8217;t need to change. Similar ideas are implemented by <a href="http://texttest.carmen.se/index.php?page=concepts&#038;n=xusecase">xUseCase recorders</a> and Domain-Specific Testing Languages in Selenium (see <a href="http://www.solutionsiq.com/agile2008/agile-2008-domain.php">Mickey Phoenix&#8217;s Agile 2008 presentation</a>).</p>
<p>Marcano said that page objects focus on the wrong thing. Taking ideas from interaction design, he suggested that it is natural to think about functionality on three levels &mdash; goals, activities and tasks:</p>
<ol>
<li>Goal: Buy a book</li>
<li>Activities: Add the following items to the cart,&#8230;</li>
<li>Tasks: click search, type in book name, click book image, click Add to cart&#8230;</li>
</ol>
<p><br clear="all" /><br />
When thinking about web site functionality, people don&#8217;t think about pages but about activities that span multiple pages. Focusing on goal oriented cross-page activities instead of page oriented functionality makes tests more natural, easier to understand and maintain. Instead of Page Objects, Marcano suggested implementing activities with Selenium and then composing tests from activities. One more significant benefit of this approach is that activities aren&#8217;t baked into the user interface, unlike objects representing web pages, so the same test definitions can be kept for testing below the UI with different task implementations.</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2009/10/06/putting-selenium-in-the-right-place/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>An excellent agile testing experience report</title>
		<link>http://gojko.net/2009/07/23/an-excellent-agile-testing-experience-report/</link>
		<comments>http://gojko.net/2009/07/23/an-excellent-agile-testing-experience-report/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 07:24:43 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile testing]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[twill]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=1025</guid>
		<description><![CDATA[The agile testing evening sessions at Skills Matter are getting better and better. I thoroughly enjoyed yesterday&#8217;s session with an experience report given by Nathan Bain and Anand Ramdeo. Anand and Nathan talked about their work at Global Radio focusing on how they implemented agile testing, and the topic turned out to be so thought-provoking [...]]]></description>
			<content:encoded><![CDATA[<p>The agile testing evening sessions at Skills Matter are getting better and better. I thoroughly enjoyed yesterday&#8217;s session with an experience report given by <a href="http://www.nathanbain.co.uk">Nathan Bain</a> and <a href="http://www.testinggeek.com">Anand Ramdeo</a>. Anand and Nathan talked about their work at Global Radio focusing on how they implemented agile testing, and the topic turned out to be so thought-provoking that the presentation often turned into a free discussion and the event lasted twice longer than expected. In spite of that, some attendees complained that it was too short. Luckily the local pub is open till much later than Skills Matter so we continued the discussion there.<span id="more-1025"></span></p>
<p>Anand focused on the process, and key take-away ideas from his presentation for me are:</p>
<ul>
<li>Four-column scrum wall: they added a &#8220;done-done&#8221; step after &#8220;done&#8221;, making it very explicit that a task needs to get verified after it is thought to be finished. Testers owned this phase which gave them the responsibility to see it through, not necessarily perform it themselves. For tasks that are not easily verifiable through the user interface or things such as usability or design where testers were not qualified to assert completeness, they were still expected to chase someone else to verify that the task is done. This could involve a code review, another developer or a designer confirming that something is OK etc.</li>
<li>Requirements meetings: Product owner, technical owner and a tester met before a story went into development to discuss what the acceptance criteria is. This made at least three people capable of answering questions from developers and it cut down the need to document stuff. It also ensured that testers knew what they should expect and test on the end. This idea is going along the same lines as <a href='http://gojko.net/2008/11/12/specification-workshops-an-agile-way-to-get-better-requirements/'>specification workshops</a> but seems to be focused more on fleshing out key ideas rather than getting to the full specifications. </li>
<li>Two-step continuous integration: Their functional test suite took a few hours to run (as it was running through the UI), and running this as part of the build even in continuous integration would make the feedback too slow. On the other hand, these tests had to be executed. Anand suggested doing continuous integration in two steps. First build and run basic (quick) tests. When that succeeds, run the entire test suite. I would typically investigate whether these two hours could be cut down or automated at a lower level to make it quicker, but this requires development resources so Anand&#8217;s solution might be very interesting to people who don&#8217;t have the option or knowledge to automate below the UI.</li>
<li>Using named UI elements in Selenium scripts: to make UI tests easier to maintain and understand, they used macros to encapsulate locators for UI elements and gave them meaningful names such as &#8220;register button&#8221;. When the UI changes, they only update a macro, without the need to change tests. This also enabled them to write tests before the web UI was actually developed, and put in values for locators into macros later. This is again an idea similar to page objects but implemented completely from a tester&#8217;s perspective without the need to involve developers.
</li>
<li>Web testing below the browser &#8211; they used a tool of which I haven&#8217;t heard before, called <a href="http://twill.idyll.org/">Twill</a>. Twill automates web testing by executing HTTP requests but not through the browser, making it easier and faster to automate tests than with Selenium. It does not execute javascript so it cannot be applied to complicated browser-oriented tasks, but it is very useful for form submission, link parsing etc. With Python, they built a DSL for testing web pages using Twill. It seems like it could do a very good job for a large number of web tests that don&#8217;t involve JavaScript.</li>
</ul>
<p>Nathan started with a great cartoon introduction to acceptance testing (he promised to upload the slides to <a href="http://www.nathanbain.com">nathanbain.com</a>) and then went on to talk about what he would have liked to have known when he was starting with agile testing. Some of the key take-away points are:</p>
<ul>
<li>The rules of agile testing are still being written, and lots of information is only available online on blogs and mailing lists &#8211; testers need to read and research more. Nathan also recommended <a href="http://gojko.net/2009/02/23/agile-testing-crispingregory-is-a-great-book-long-overdue/">Agile Testing</a> by Lisa Crispin and Janet Gregory and my <a href="http://acceptancetesting.info/the-book">Bridging the Communication Gap</a> as good sources of information on the current state of agile testing.</li>
<li>Although testers might find themselves in uncharted territories on an agile team, the team expects of them to be the testing experts so they have to find ways to help the team rather than waiting to be told what to do. Testers should be proactive and help define their role by looking at the ways they can improve process and product.</li>
<li>Promote proactive testing and defining acceptance criteria as tests in the team to raise awareness of what testing is about and get support and help from developers and business. Nathan organised workshops and presentations on acceptance testing to help other members of his team understand how he can help them better.</li>
<li>Getting more involved in the process is the key to success. Nathan suggested learning about the domain, working closely with developers, going to meetings even if you&#8217;re not invited and making sure that you are on all the mailing lists. Nathan warned that people who are outside the loop get left behind, and by being more involved testers can help the team more but also show the others their value better</li>
<li>Instead of writing down bug reports, discuss them &#8211; sometimes the bug turns out not to be a bug at all and the discussion helps to make discovering a real bug constructive rather than an act that conflicts with development. This discussion helps the morale on the team.</li>
<li>Recruiting casual testers elsewhere &#8211; try to get project managers, product owners, developers and anyone else involved with testing. Prepare test scripts as simple check-lists that they can follow. Describe manual tests in plain English so that you can get more people involved.</li>
<li>Using acceptance tests as a good start for exploration &#8211; instead of specifying everything in detail, specify the core as acceptance tests and then use them as a start for exploratory testing, sort of a reminder of where to begin and what to look for.</li>
</ul>
<p>Altogether a very enjoyable evening. I really liked this and I think that we should have more experience reports like these. The event was filmed and I strongly recommend watching the videos (they should be available in a few days on the Skills Matter <a href="http://skillsmatter.com/go/agile-testing">agile testing page</a> (subscribe to my <a href="/feed">rss feed</a> to get notified when they become available). </p>
<p>The next agile testing evening at Skills Matter will be on the 18th of August. David Evans and Mike Scott from SQS-UK will talk about Testify, a project that helps kick-start Test-Driven Development in .NET by installing and setting up all the basic tools that people typically need and creating a basic project structure that makes TDD easier. The event is free as usual, but up-front registration is required for capacity planning. You can find more information on this event and register at <a href='http://skillsmatter.com/event/agile-testing/fast-track-test-driven-development-testify-your-project'>skillsmatter.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2009/07/23/an-excellent-agile-testing-experience-report/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Introducing Alt.NET courses at Skills Matter</title>
		<link>http://gojko.net/2008/12/22/introducing-altnet-courses-at-skills-matter/</link>
		<comments>http://gojko.net/2008/12/22/introducing-altnet-courses-at-skills-matter/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 08:42:35 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[alt.net]]></category>
		<category><![CDATA[altdotnet]]></category>
		<category><![CDATA[castle]]></category>
		<category><![CDATA[cruise control]]></category>
		<category><![CDATA[monorail]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[rhino mocks]]></category>
		<category><![CDATA[scriptsharp]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[skillsmatter]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=555</guid>
		<description><![CDATA[From February 2009, Skills Matter will start organising public Alt.NET courses (first in London and then across Europe). Opensource .NET tools crash course The first will be a three-day crash course on tools and practices aimed at .NET developers that want to learn about Alt.NET tools and Java developers that are migrating to .NET and [...]]]></description>
			<content:encoded><![CDATA[<p>From February 2009, Skills Matter will start organising public Alt.NET courses (first in London and then across Europe). </p>
<h2>Opensource .NET tools crash course</h2>
<p>The first will be <a href="http://skillsmatter.com/course/open-source-dot-net/opensource-dot-net-tools-crash-course">a three-day crash course</a> on tools and practices aimed at .NET developers that want to learn about Alt.NET tools and Java developers that are migrating to .NET and looking for good equivalents to the tools that they are used to working with. The course gives an overview of the most popular opensource .net tools and introduces modern development practices that these tools promote, such as test driven development, continuous integration, dependency injection, object-relational mapping and web development using the model-view-controller pattern. </p>
<p>Learn how to:</p>
<ul>
<li>Implement TDD in .NET using NUnit, MBUnit, Rhino Mocks and FitNesse</li>
<li>Utilise Aspect oriented programming and Dependency Injection using Castle Windsor</li>
<li>Efficiently build Web applications using the MVC pattern in Monorail and utilising Monorail and Script# for Ajax and test them using Selenium Remote Console.</li>
<li>Manage persistence easily using ORM tools such as ActiveRecord and NHibernate</li>
<li>Introduce continuous integration in your projects using CruiseControl.NET and CI Factory</li>
</ul>
<p>See the <a href="http://skillsmatter.com/course/open-source-dot-net/opensource-dot-net-tools-crash-course">full programme</a>.</p>
<h2>Agile Web Development with the Castle Framework</h2>
<p>The second one is a <a href="http://skillsmatter.com/course/open-source-dot-net/agile-web-development-with-the-castle-framework">two-day course on Agile Web Development using the Castle project</a>, teaching the basics of the Castle Framework and helping people develop a solid understanding of its benefits. Over the course of the two days, attendees will create a simple but complete web application using agile Web development practices such as Inversion of Control, Dependency Injection, Aspect Oriented Programming, Object/Relational Mapping and applying the Model-View-Controller pattern.</p>
<p>Learn how to</p>
<ul>
<li>Apply agile web development practices like MVC and dependency injection</li>
<li>Use ActiveRecord to manage the object-relational mapping and the database layer</li>
<li>Use the Monorail MVC engine to create web applications that are easy to maintain and test</li>
<li>Explain the basics of Monorail views, layouts, rescues</li>
<li>Use the NVelocity view engine to build web UIs for Monorail</li>
<li>Apply Windsor Microkernel to configure and wire application components</li>
<li>Unit test the data access layer with Castle</li>
<li>Unit test web controllers</li>
<li>Describe how Castle components come together to help us develop web applications easier</li>
<li>Explain why this approach is much more effective than ASP.NET</li>
<li>Apply best practices, common pitfalls, and tips and tricks for Castle Web development</li>
</ul>
<p>See the <a href="http://skillsmatter.com/course/open-source-dot-net/agile-web-development-with-the-castle-framework">full programme</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2008/12/22/introducing-altnet-courses-at-skills-matter/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Video from the Selenium talk</title>
		<link>http://gojko.net/2008/09/03/video-from-the-selenium-talk/</link>
		<comments>http://gojko.net/2008/09/03/video-from-the-selenium-talk/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 19:22:15 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[presentations]]></category>
		<category><![CDATA[acceptance testing]]></category>
		<category><![CDATA[cubictest]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[skills matter]]></category>
		<category><![CDATA[stiq]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=330</guid>
		<description><![CDATA[Here is the video from the Testing Web Applications with Selenium and Selenium Remote Control talk that Milan Bogdanovic, Ivan Sanchez and I organised last week at Skills Matter. The first part of the talk introduces Selenium and some related tools that allow us to use Selenium easier. In the second part, Milan demonstrates Selenium [...]]]></description>
			<content:encoded><![CDATA[<p><embed id="VideoPlayback" src="http://video.google.com/googleplayer.swf?docid=2555750123066853800&#038;hl=en&#038;fs=true" style="float:right; width:400px;height:326px;margin:5px 5px 5px 5px" allowFullScreen="true" allowScriptAccess="always" type="application/x-shockwave-flash"></embed> Here is the video from the <a href="http://skillsmatter.com/podcast/open-source-dot-net/testing-web-applications-with-selenium-selenium-remote-control" target="_blank">Testing Web Applications with Selenium and Selenium Remote Control</a> talk that Milan Bogdanovic, Ivan Sanchez and I organised last week at Skills Matter. The first part of the talk introduces Selenium and some related tools that allow us to use Selenium easier. In the second part, Milan demonstrates Selenium IDE and talks about Selenese language. In the third part, Ivan talks about Remote Control, how to make tests easier to manage and introduced the Page Object pattern. <a href="http://gojko.net/2008/08/28/links-and-slides-from-testing-web-applications-with-selenium/"> Download links and slides from the talk.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2008/09/03/video-from-the-selenium-talk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
