Sep
24
2010

Want a job at Innoveo?

We are searching for an excellent and motivated Software Engineer, with a focus on Java and Web Development, to support us in the development of our standard Software product -Innoveo Skye- at our office in Zurich, Switzerland. Some more information:

  • Web technology: (X)HTML, CSS, AJAX, JSF, jQuery
  • Basis technology: J2EE, Spring, XML & SOAP, Portal
  • Development: Eclipse, IntelliJ IDEA, Subversion, Maven, Tomcat, TeamCity, TDD, BDD, Scrum/XP
  • Languages: English and German

More information in this pdf (in German).

Do not hesitate to contact me if you need more information. And to spread the news!

Jul
15
2010

Application Acceptance Testing

Yesterday evening I found a set of Google blog posts talking about web application acceptance testing which reflect Google experience through “Several years of experience across multiple project teams”.

This reflect lot of points I brought into our discussions either at Innoveo or Jobping; best practices, screen/page object, dev. language, recording/coding, BDD..

Here are the blog posts:

And the key points I extracted from those three blog posts:

Best practices to have long-lived tests

“Acceptance tests must meet the needs of several groups, including the users and the developers. Long-lived tests must be written in the language of each group, using terms users will recognize and a programming language and style in which the developers are competent.”

Utilities such as recording tools can help reduce the effort required to discover how to interact with the web application. The open-source test automation tool Selenium (http://seleniumhq.org/) includes a simple IDE record and playback tool that runs in the Firefox browser. Recorded scripts can help bootstrap your automated tests. However, don’t be tempted to consider the recorded scripts as automated tests: they’re unlikely to be useful for long. Instead, plan to design and implement your test code properly, using good software design techniques.”

“Several years of experience across multiple project teams have taught us that the tests are more likely to survive when they’re familiar and close to the developers. Use their programming language, put them in their codebase, use their test automation framework (and even their operating system). We need to reduce the effort of maintaining the tests to a minimum. Get the developers to review the automated tests (whether they write them or you do) and actively involve them when designing and implementing the tests.”

Isolate things that change from those that don’t. For example, separate user account data from your test code. The separation makes changes easier, faster, and safer to implement, compared to making updates in the code for each test.”

“Robust tests can continue to operate correctly even when things change in the application being tested or in the environment. Web applications use HTML, so try to add IDs and CSS classes to relevant elements of the application

Try to avoid brittle identifiers, such as xpath expressions that rely on positional data. For example, /div[3]/div[1] becomes unreliable as soon as any of the positions change – and problems may be hard to identify unless the change is easy to identify.

Add guard conditions that assert your assumptions are still accurate. Design the tests to fail if any of the assumptions prove false.

Try to only make positive assertions. For example, if you expect an action to cause an item to be added to a list, assert that after the action the list contains the expected value, not that the list has changed size (because other functionality may affect the size). Also, if it's not something your test is concerned about, don't make assertions about it.

“Informative tests
Help your tests to help others by being informative. Use a combination of meaningful error messages and more detailed logs to help people to tell whether the tests are working as intended and, if problems occur, to figure out what’s going wrong.”

Taking screenshots of the UI when a problem occurs can help to debug the issue and disambiguate between mismatches in our assumptions vs. problems in the application.

Debug traces are useful for diagnosing acute problems, and range from simple debug statements like ‘I made it to this point’ to dumps of the entire state of values returned from the application by our automation tool. In comparison, logging is intended for longer-term tracking of behaviour which enables larger-scale thinking, such as enabling a test to be reproduced reliably over time.

Good error messages should say what’s expected and include the actual values being compared. Here are two examples of combinations of tests and assert messages, the second more helpful than the first:

1. Int actualResult = addTwoRandomOddNumbers();

assertTrue("Something wrong with calculation", actualResult % 2 == 0);

2. Int actualResult = addTwoRandomOddNumbers(number1, number2);

assertEquals(String.format("Adding two odd numbers [%d] and [%d] should return an even result. Calculated result = %d", number1, number2, actualResult) actualResult % 2 == 0);”

“My advice for developing acceptance tests for Web applications: start simple, keep them simple, and find ways to build and establish trust in your automation code.

The value of the tests, and their ability to act as safety rails, is directly related to how often failing tests are a "false positive." Too many false positives, and a team loses trust in their acceptance tests entirely.

Acceptance tests aren’t a ‘silver bullet.’ They don’t solve all our problems or provide complete confidence in the system being tested (real life usage generates plenty of humbling experiences). They should be backed up by comprehensive automated unit tests and tests for quality attributes such as performance and security. Typically, unit tests should comprise 70% of our functional tests, integration tests 20%, and acceptance tests the remaining 10%.

“Lots of bugs are discovered by means other than automated testing – they might be reported by users, for example. Once these bugs are fixed, the fixes must be tested. The tests must establish whether the problem has been fixed and, where practical, show that the root cause has been addressed. Since we want to make sure the bug doesn’t resurface unnoticed in future releases, having automated tests for the bug seems sensible. Create the acceptance tests first, and make sure they expose the problem; then fix the bug and run the tests again to ensure the fix works.”

About Screen/Page objects

Effective test designs

By using effective test designs, we can make tests easier to implement and maintain. The initial investment is minor compared to the benefits. One of my favourite designs is called Page Objects (see PageObjects on the Google Code site). A PageObject represents part or all of a page in a web application – something a user would interact with. A PageObject provides services to your test automation scripts and encapsulates the nitty-gritty details of how these services are performed. By encapsulating the nitty-gritty stuff, many changes to the web application, such as the reordering or renaming of elements, can be reflected in one place in your tests. A well-designed PageObject separates the ‘what’ from the ‘how’.

BDD – Behavior Driven Development

Another effective test design is based on three simple words: ‘given’, ‘when’, and ‘then’. As a trio they reflect the essential elements of many tests: given various preconditions and expectations, when such-and-such happens, then I expect a certain result.

// Given I have a valid user account and am at the login page,

// When I enter the account details and select the Enter button,

// Then I expect the inbox to be displayed with the most recent email selected.”

To me all those points are valid ! And the best is that most of them aren’t bound to a technology, a framework or whatsoever.

I could apply those principles on different applications built using ASP.NET MVC, WPF, Java JSF with different frameworks like MSpec, Watin, White, Selenium, JUnit/NUnit

You might read more about this on the following posts:

Jul
10
2010

Run old build using TeamCity

At Jobping and Innoveo we are using TeamCity from Jetbrains to automate our different builds.

Today I was asked by my colleague Roy the following interesting question “Can I rerun an old build?”

My first thought and question was, “do you have a tag for that old build?” The response was no. With a yes I would have proposed to use what I described in a previous post: Build and Deployment automation, VCS Root and Labeling in TeamCity. In which we could change the VCS Checkout rulesto point to that particular tag and run the build.

Then I searched the TeamCity online documentation and found about History Build which lead me to Run Custom Build Dialogwhich starts with the following:

To open the dialog:

  • Click ellipsis on the Run button

I am using for a long time TeamCity, and I can’t believe that I never pressed that part of that button!

Then you get access to the popup in which you can select an older build!

And run the build.

Which is interesting for example when you have some of your builds which are deploying your web applications and you want to come back to a last stable version.
May
7
2010

IntelliJ 9 and changeset

Day after day I find little gems in IntelliJ 9 that just make me more productive and give me more time to deal with the real interesting things.

Today for example I had to change a web.xml file which I was said that I should take care not to commit because if this file would go to our customer than we would have a problem.

We are currently using JIRA and Greenhopper and I use the excellent plugin Atlassian Connector for IntelliJ IDEA

My working process, which is not rocket science but needs a bit of discipline, is the following:

  1. Before starting a change I check that there is a task in our JIRA
  2. Then I get this task and create a changeset in IntelliJ
  3. Starting from now, everything I change is logged into that changeset
  4. If I need to work shortly on another task I get another task from JIRA and create another changeset and start to log my work on that new changeset
  5. When it is time to commit I just commit the changeset. Done

Back to my web.xml issue, I had to take care not to commit it. I knew it from the start that I will have an issue if I commit that file.

So immediately, having the information,  I created a new changeset named “Do not commit” and added the web.xml change to that changeset.

4583794252_6d251ef393_o[1]

I was then on the safe side! Why? Because after working almost the whole morning and changing hundred of files I didn’t had to remember about that possible issue because the tool will remind me that. What a mind refresher!

If I had not done that then I would have to first remind that I don’t have to commit that file and then I would have to browse the hundreds of file searching for the one I have to commit and the other one.

So help yourself work on your toolset and become a more productive developer!

May
6
2010

IntelliJ 9 CSS editor

Today at Innoveo Solutions  I work on CSS and XHTML for our Skye® product.

I am using JetBrains  IntelliJ 9 since a couple of weeks now and I enjoy it very much.

I am always searching for tools which make me more productive in my daily work. IntelliJ 9 is such a tool. And today I have used a feature that helped me a lot.

I started with a CSS I received with that definition

4581559488_dbe2f66d3d_o[1]

If you take care you will see the underline under margin and background, when you place the cursor over you get the following info

4580933991_875d77222b_o[1]

Then you can press ALT-Enter to get an action that you can execute; “optimize margin properties”

4580947043_53b7dd6c0d_o[1]

So when you execute the action for margin and background you get the following optimized result

4581578768_3002940edb_o[1]

You might read more about the CSS capabilities of JetBrains IntelliJ 9 on the following blog.

May
5
2010

Certified ScrumMaster

As you might have read on Didier’s blog or even on Innoveo’s blog I passed the ScrumMaster’s certification end of last year. Yeah I know I am late to post this ;-)

I must say that the course held  by Jimi Fosdick was interesting and brought me some new idea.

What is Scrum? (ScrumAlliance definition)

Scrum: A team-based framework to develop complex systems and products.

Scrum is an iterative, incremental framework for developing any product or managing any work. It allows teams to deliver a potentially shippable set of functionality every iteration, providing the agility needed to respond to rapidly changing requirements.

The Scrum framework constantly challenges its users to focus on improvement, and its Sprints provide the stability to address the ever-changing needs that occur in any project.

These characteristics have led to Scrum becoming the most popular method in the world of agile software development.

At Innoveo we are using Scrum to build up our product Skye®, a front end solution for insurances.

At Jobping we are also using Scrum in a distributed way to build up www.jobping.com, our new job posting web site aimed specifically at job seekers and employers who work with Microsoft technologies.

4580044891_fdac4fa445_o[1]

I would like to thank Didier and Nick, first to give me the possibility to attend the ScrumMaster course and certification  and for all the interesting discussions we had on change management in an organization, Scrum, Agile, Software Engineering…

Certification was one thing, it was a step, having the possibility to live the framework in an organization is absolutely another thing which is made of lots of other steps.

Oct
20
2009

Daily stand up meeting using Skype

Today at Innoveo Solutions we had our daily Stand Up meeting using Skype as I am at home. It worked really good ! I can’t wait to experience it on the new plasma TV that we have in our meeting room!

4028288873_799bc9aef2_o[1]

And a Chicken entering the meeting ! Hey Bojan :-)

4029051070_a90ca3a4e8_o[1]

Oct
14
2009

MVVM Light Toolkit V2

At Innoveo Solutions we are using .NET and WPF for our Innoveo Skye® Editor application. Skye® Editor is a distribution channel editor targeting business people letting them edit and configure their insurance products.

From the beginning we have adopted the Model-View-ViewModel architecture. Having our solution growing we were facing the issue of having our ViewModels dependency growing too. Some ViewModel became too much dependent of others. This was obvious in our unit tests whose complexity to setup were growing too. It was time to find a solution to decouple the ViewModels.

The solution came out after a discussion with Laurent Bugnion, the famous author of MVVM Light Toolkit. At that time we used the V1 that already helped a lot in this decoupling.

Now with MVVM Light Toolkit V2 it is even better with the new Messenger API. What we also really appreciated in comparison to other frameworks is that it is really light and the ability to open and edit the user interface into Expression Blend.

So Thank you Laurent for this GREAT framework and I looking forward for V3!

I also would like to thank my managers at Innoveo Solutions who understand Open Source and the need to have people contributing to Open Source projects, even during their professional working time. A Win-Win situation and not just a one way benefit as often.

Jul
2
2008

Innoveo Solutions new corporate identity & product name announced

At Innoveo Solutions, today we went live with our new corporate identity and announced our product name, INNOVEO SKYE.

I was quite involved into the process with the development of the web site and some minor other things.

Why a change after only 9 months?
Simply to reflect our personality, culture, spirit and soul in a more appropriate way:

VALUES /

  • INNOVATION
  • QUALITY, PROFESSIONALISM AND TRANSPARENCY
  • TRUST AND RESPECT
  • DYNAMISM AND FUN

MISSION /

  • ENABLING BUSINESS INNOVATION

VISION /

  • BE RESPECTED LEADERS IN CONNECTING THE INSURANCE BUSINESS WITH TECHNOLOGY

We started with an internal launch (I hope to be able to post some videos about it soon) made by Nick and myself!

Then after the official launch we had a little party with some German specialities brought by our German guy, Oli! And some from Italy brought by Nick!

And we made a little tour of the building to look at the new logo everywhere!

Concerning the web site here are some key points about it.

Technologies used:

Tools used during the development:

The website was developed using Scrum, Test Driven Development and Domain Driven Development.

I would like to make a BIG THANK to all peoples that helped into that process!

Internals:

  • Nick and Didier, for their great support (finally we went through the bottleneck ;)

Externals:

  • Andreas Koch, absolutely great designer (hey Andreas I am searching a designer for the new version of my website Tech Head Brothers ;-)
  • Wygwam, for their great help in the field of CSS, especially Guillaume and Matthieu (and for sure my old friend Rédo and Grégoire)
  • Evaluant, for their great Euss O/RM tool (and for sure thanks to Nicolas for the lunch, to Sébastien, Nicolas and Fabien for the support)

Stay tuned more to come from Innoveo Solutions

Jun
14
2008

Windows Live Writer Dynamic Template Plugin

Today working on the development of a website I had the following user story to develop “As an author I want to be able to add a lightbox/darkbox around my content in Live Writer”.

First of all I updated my version of Windows Live Writer to the latest CTP version. You can download it from here: Technical Preview: Now Available for Download! Nice work Joe, it is quite stable and look really nice.

Then I needed to address this user story. To do so I thought to develop my own Live Writer plugin but with some research led me to a FANTASTIC plugin called “Dynamic Template Plugin for Windows Live Writer” and by whom, you guessed, Joe. Great work!

With this plugin I was able to implement in a very user friendly way, the needed insertion of my light and dark boxes. No an author is two click away from having it boxes on the website. Nice, really nice.

But wait this plugin can do much more than templating!

Check all videos available! Watch Example 1, Watch Example 2, Watch Example 3, Watch Example 4, Watch Example 5.

Here is the result. On the left, what you see in live writer, on the right what you see on the website.

I love Live Writer! When the pages editing will evolve it will be the must for CMS.

About Laurent

Laurent Kempé

Laurent Kempé is the editor, founder, and primary contributor of Tech Head Brothers, a French portal about Microsoft .NET technologies.

He is currently employed by Innoveo Solutions since 10/2007 as a Senior Solution Architect and certified Scrum Master.

Founder, owner and Managing Partner of Jobping, which provides a unique and efficient platform for connecting Microsoft skilled job seekers with employers using Microsoft technologies.

Laurent is awarded by Microsoft since Avril 2002: Most Valuable Professional (MVP).

MVP
Certified ScrumMaster
JetBrains Academy Member

My status

Twitter

Flickr

www.flickr.com
This is a Flickr badge showing public photos and videos from Laurent Kempé. Make your own badge here.

Month List

Page List