How do you test for SEO

In this post I mention SEO and Search engine optimization several times, I am referring here to the optimization of a website for natural search, so without paying for it showing up high in the search result lists.

While on holiday I spent some time talking to a local entrepeneur. He makes his money through his own website, we got to talking about his website and about the translations of his site in particular. Since this site was translated from Greek into English, French, German, Italian and Russian I had a quick hunch that his meta-keywords would not be in order for all the separate languages (which does not apply to all translations he made by the way).

When asked to test a site specifically for SEO, what are the things to look at? As I mentioned above, there are a few tell-tales when you start your testing, especially when the site has been translated:

  • lang – this should be set to the actual language of the page you are testing
  • meta-keywords – these should be in the same language as the lang set in the header
  • meta-description – this should be in the same language as the lang set in the header
  • Alt-text for images –  – these should be in the same language as the lang set in the header
  • page specific URL’s – should be in the same language as the lang set in the header

Please note that this is just a sub-set of what needs to be looked at when testing a site for SEO optimization.

Based on the before mentioned website I will give some examples of what to look for when testing for search engine optimizations.

HEADER

Looking at the header of the Russian version I indeed saw exactly what I assumed I would see:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru-ru" lang="ru-ru" >
<head>
<base href="http://www.corfu-villa.gr/ru.html" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="keywords" content="corfu villa, villa corfu, seaside villa corfu, pool villa corfu, villa with sunset view corfu, villa rental corfu, corfu villa rentals" />
<meta name="description" content="Corfu villa. Two elegant seaside pool villas located in Chalikounas Corfu with amazing panoramic sunset view. See photos check 2010 availability and book online with our paypal secure system." />
<meta name="generator" content="" />
<title>Корфу Вилла | бассейн вилла с потрясающим видом на закат | villa.gr Корфу</title>

If you look fast and are not sure what to look at this looks fine, however from a Search Engine point of view this header is a bit of a drama.

The language is set to Russian in the first line, the title is in Russian, in the Cyrillic alphabet. The SEO issue however is in between the language declaration and the title: keywords and description are in English. When a Russian is trying to find a “seaside villa in Corfu” he will probably not use the English words for it, instead the keywords used will quite likely be “вилла на Корфу с видом на море“.

Just for fun, here are the result pages for the two searches; the English search on Google.ru and the Russian search on Google.ru. On the Cyrillic search the first page doesn’t have any links to our test site. On the English search however, the site is the first to surface, underneath the paid links. Problem I see with that result page however is, the url we get back is the main URL rather than the Russian URL.

The header of the homepage of the site is just the beginning of testing it for search engine optimization.

IMAGES

This being a site aimed at renting out a villa with amazing views in a fairly decadent location, it is quite visually driven. As a tester you might not pay too much attention to the images, however when testing the search engine optimization, the images should be looked at as well.

Sticking to the example of the Russian version of this site I grabbed another piece of the source code:

<div title="Corfu Villa Boxes" id="boxes">
<div title="Corfu Villa Gallery. Click to view more photos" id="left_box">
<div class="module">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td><a href="/ru/gallery.html"><img src="/templates/corfuvilla/images/gallery.jpg" border="0" alt="Corfu Villa Gallery" /></a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

Within this snippet you’ll notice again an issue similar to that in the header meta-tags. The page is supposed to be in Russian, yet the title of the div is in English. The alt-tag of the image is also in English. Both of these are supposed to be in Russian in order for this page to properly be indexed by the search engines in that language. If you really want to make an effort, the image name should also be in Russian.

The useage of the images themselves, on the rendered HTML page already gave an indication that SEO and translation were not well thought through or at least not fully implemented.

Corfu villa gallery image

The text on the image should of course also have been translated. When, as a tester, you see mistakes like this on a website, this should quickly give you an idea that the SEO has not been done properly, nor quite likely will the translation of the site have been done properly. Ideally you would want the text on this image to be configurable in the CMS and be attached to the language the page is in.

Of course there are more things you have to look at when testing for SEO, however I will stop here for now.

Throw-away test automation

I quite often tell clients that their approach to test automation is not sustainable, this got me thinking, does test automation always have to be sustainable and reusable?

This all depends on the goal you’re trying to meet I guess. If your goal is set for long-term cost efficiency, shorten the timelines on regression testing and through that get to a more rapid release cycle, yes you will need to be focussed on the re-usability of your automation suite.

However there are plenty of instances where you want to automate something to make life easier right here, right now. Most testers, I hope, know the feeling of having to go through tedious, repetitive work, setting up data for a test, going through the login flow of an application to get to the feature you want to test etc. For actions like that, you can very well use automation. In fact, you can quite often use the most simple form of automation, record/playback without having to adjust your scripts for maintainability or re-usability.

Tools like Selenium IDE and AutoIt are excellent for making life easy right here, right now when you need to quickly automate something to make life easy. Funnily enough a lot of testers either do not realize these tools can be used to make life easier. When talking with colleagues about test automation they quite often think of big test automation packages, like QTP or Rational Robot. Sometimes they ask how much you need to know of software development and writing code to automate things. And most of these conversations I let myself be sucked into the tool talks and indeed talk about the difficulties of setting up a test automation framework.

In future conversations I am going to try to explain my colleagues and fellow testers that automation does not need to be a big operation, it doesn’t need to be reusable and maintainable, at least, depending on your goals. As long as your goal is to make life easy here and now, there is no need to build something awesome.

For a lot of things, a simple script, either hand written or simply recorded, can be more than enough to get to your goal, when done with your tasks you can then throw them away, but preferably be a bit smart about it and just dump it somewhere in a repository, you might have to do this task again.

Is testing the dumping grounds of IT?

The other day I was talking to a few developers I was on an assignment with about getting testers added to their scrum team, and the response I got from them disturbed me. They told me that in their experience most testers do not work together in the team, they work against development, trying to get everything fully tested, despite them knowing this is not a feasible thing, and with that delay projects. On top of that they told me, most of the testers they have worked with, are part of the dumping grounds of the IT industry. And with that they meant that in their view most testers are not good enough to be a developer, so they decided to become testers instead (<sarcasm> cause, come on, testing is not that difficult anyone can do that! <\sarcasm>).

I was shocked to hear there are still a lot of developers out there who believe that testers are the dumping grounds of the IT industry, but I was even more shocked of their experiences with testers, working in an “us versus them” modus operandi instead of working in a team, part of a joing effort with a shared focus and goal.

What is it that still makes testers often work against developers instead of with them?

Most testers I have worked with over the past years agree that working side by side with development is the most effective and efficient way of working, this way you both keep track of your joint goal: get the software out on time, on budget and according to what your customer (or end-user for that matter) wants and needs. Together you try to add value to the software.

So is it indeed true that there are still a lot of testers out there in the field who are indeed not seeing the big picture and are trying to prove their worth by working against dev and looking for bugs that are not relevant, e.g. just looking for bugs for the sake of finding one, no matter what the value of that bug is to the end-user/customer, just so they can triumphantly point to a developer that indeed, “see! There are bugs in your code, you did it wrong!” Unfortunately I fear there are still too many testers out there that think and work this way, not to even mention all the developers out there that seem to not understand the added value of a good tester to the team and to the developers work!

Fortunately there is a wonderful contrast out there as well, in the form of this blog post by Nathan Lusher who shows that there indeed are good testers out there, who weigh in on a project and prove the value of testing and with that show that testers are not (or at least not everywhere) the dumping grounds of IT.

In my experience, there are a lot of very good, inspired and knowledgable testers out there, who see the added value of working together, in a team with a shared goal, a shared approach and shared respect. If testers want to get the respect of developers, I believe it is up to quite a lot of the testers to start by showing respect to the developers and where needed, increasing their technical knowledge in order to be able to counterbalance a developers viewpoint. You get what you give!

One year as a test consultant – a retrospective

Throughout my career I have mostly worked in house for a “software house”, with which I mean an organisation that builds software as a core of their business model. Even my times at Finalist IT Group and Quantiq X-Media, when working for external customers, and in the case of Finalist on site at the customer, I have always worked for organisations that create software to sell or sell the services of developers.

When I left Spil Games I decided I wanted a change in my career? or better said, i wanted to try different side of the business. I had spent the better part of the last 4 years managing people and processes and enjoyed it a lot and now it was time to move my skills to a different level making sure enjoying myself as a software tester is as well in scope as the managing bit. I really wanted to get back to what I like most: software testing, setting up a testing process, showing developers how things can be better when continuous testing is going on, in short “finding solutions by executing and not just managing”.
For the last year I have worked as a test consultant at Polteq Test Services. In this year I have touched a range of things in my work I am extremely passionate about, setting up test automation, attempting to help testers improve themselves and the product they work on, helped review a book, used my network to help companies deliver better products by having them tested, helping out writing commercial offers for potential customers of Polteq and probably more I don’t even remember.

So far I have quite enjoyed the variation in the work and quite enjoy being on site at the customers. The one thing I truly miss though is the direct interaction with my colleagues. When working fully in-house there are always steady colleagues, who share your thoughts and worries about the employer, the atmosphere etc. In consultancy however, quite often you do not have your own colleagues on site, you’re mostly working with the customer. So now and again you want to be able to vent frustrations, whether they are about work, traffic or your customer, it is not always easy to do that when on site.

A side effect of working for a company specialized in software testing is, that I am a lot more involved in the “community” and development of the trade. My twitter stream is a lot more active, I have started blogging about my work, I try to stay in touch with communities and groups on LinkedIn and of course on Software Testing Club.

Extra personal effect of me no longer managing people, I am generally a lot more relaxed at home, I have learned to leave my work behind me and not (well, ok, hardly) take it home with me.

Overall looking back to this year I can say that I enjoyed my new position as a consultant. My expectations were quite high to be honest and  I enjoyed it even more. So far it turned out to be beneficial for both my professional and personal life. I used my skills and capabilities in a totally out-of-box way, discovered new talents and potentials and tried out quite some new activities (book, big presentations, creating a whole new concept / theory, etc).  At the moment I consider this a very good step for my career as this kind of job keeps me motivated and inspired.

Automating a legacy system

In the past I have worked a lot with fairly new, web-based applications. So here and there I would run into some “old” desktop applications, but the majority of my professional career has been, working with web-based technologies.

In my current assignment however I have hit a nice new technology, at least new to me: COBOL over TN3270

When I started on this assignment I had one big fear: being forced to use one of the bloated commercial tools out there which claim they support TN3270 off the shelf. Oh, did I say bloated? That sounds like I am biased towards the so called big commercial tools.

This sense of bias is partially true, I am in favor of using small drivers like WebDriver or White where possible over using a full environment such as QTP or Rational Functional Tester. The big tools quite probably have  their own unique selling points, however for a small IT organisation they are a huge investment and quite often overkill compared to what is actually needed.

When we started looking into tools we almost instantly dismissed the “big ones”, not so much due to their cost, but mainly due to the amount of customization still needed to make them work “out of the box” with TN3270 and the rest of the environment we’re automating. When talking to the vendors they all claimed that their tool is excellent to use for an environment for this, when asked however whether the tool will be pluggable out of the box the answer was consistently no, you will need to do some customization (or better yet, one of their consultants would need to do some customization). This same amount of customization will need to be done with a small driver as well, so why spend a fortune on something that is no better than a small, cheaper or even free tool?

For the Proof of Concept we decided to take two different drivers: Jagacy and s3270.

Jagacy is in their own words:

“… our award winning 3270 screen-scraping library written entirely in Java. It supports SSL, TN3270E, and over thirty languages. It also includes a 3270 emulator designed to help create screen-scraping applications. Developers can also develop their own custom terminal emulators (with automated logon and logoff). Jagacy 3270 screen-scraping is faster, easier to use, and more intuitive than HLLAPI. It excels in creating applications reliably and quickly.”

I cannot but agree with especially the latter part: it is indeed faster and easier than HLLAPI. In terms of more intuitive, I am not quite convinced (yet).

s3270 is a lot more simplistic than Jagacy:

” opens a telnet connection to an IBM host, then allows a script to control the host login session. It is derived from x3270(1), an X-windows IBM 3270 emulator. It implements RFCs 2355 (TN3270E), 1576 (TN3270) and 1646 (LU name selection), and supports IND$FILE file transfer.”

In other words, s3270 can be used as a layer between an application and a legacy TN3270 system.

Talking directly to s3270 is not the most intuitive thing, this requires the code to start a process, keep track of the state of this process and throw input into this process stream. All nice and doable, however it was already invented before by others and they quite likely did an adequate job at making this work, considering TN3270 is a fairly old protocol.

In order to make life for us easier while using s3270 or the PoC, we searched around a bit and found a wonderful open source tool h3270. Put simply, h3270 is a program that allows you to communicate with tn3270 hosts from within your browser. This open source tool helped us quickly hook up our test code to s3270. We dit not however need this browser functionality but are thankfully using the object orientated abstractions within h3270 for our own purposes

One of the wonders of working with tn3270 is that a whole new world of states opens up. In a web-browser for example, something is either there and visible or it is hidden from the user. Keyboards are never locked, when opening a new page the browser will tell your driver when it is done loading. With tn3270 it is not all that simple. First of all, there are features like a locked keyboard, it works with function keys that have disappeared from our physical keyboards years ago, the state of a screen is unknown most of the time, etc.

On the other hand, a terminal emulator is still nothing other than a form of sorts, just a bit more difficult to read and write.

Basically one of the things we once more saw proven, is that in test automation the basics are always similar. It is just the way you need to talk to the system that may be different.

My personal, professional code of ethics as a tester

Inspired by both my own previous post, but mostly by a response to my post on the Software Testing Club by Ainers Galvans I decided to follow his good example and write what I believe to be my professional code of ethics as a tester.

What is a Code of Ethics?

A code of ethics, or ethical code, is, in my view the following:

  • a set of rules set up to understand the difference between ‘right’ and ‘wrong’ and to apply this understanding in my decision-making.

My professional code of ethics

I have tried to keep my professional code of ethics short and understandable. Where I believe more than a one-liner is needed I have tried to keep the explanation as short and clear as possible

  • I am always honest and do not attempt to prettify information or feedback. I expect others to treat me likewise.
  • If I can get a job done in less hours than agreed, I will do so and inform my customer that the amount of time spent was less. If I cannot get a job done in the amount of hours agreed, I will inform my customer of this as soon as I can.
  • I honour (mutual) agreements. Both verbal and written agreements as well as meetings. When I agree to something I will do what I can to honor that agreement. E.g. when I agree to come to a meeting I will do what is needed and possible to be at that meeting.
  • I try to waste as little time as possible. Both my own time and my customers’ time is valuable so if I see a way to speed things up without losing efficiency and quality, I will try to speed things up.
  • I need to see the point and added value in the things I am supposed to do. A task or a job that seems pointless to me and of which the added value remains unclear to me gives me zero motivation, which would reflect on the quality of the execution, therefore it is a must for me to see what the added value of  the task is.
  • I will always try to learn something new, regardless of the situation.

Generally I try not to compromise this set, but it is of course not a black and white set of rules, there are shades of grey as there are in all things in life. These are my professional basics which i personally am trying to stick to. There of course might be quite some additional insights to build up on top of those, which are appropriate for and depending on each customer / situation / task etc.

Work ethics – being professional?

No matter where I have worked I always believed, and still do, that I have a strong and sensible work ethic. I expect to have to work hard in order to learn new things and grow in my role. Sometimes working hard means traveling a lot, sometimes it involves working long hours or weekends without being paid extra for it. Quite often I have asked myself whether it is all worth it, generally speaking it always was.

I enjoy learning new things, new techniques or technologies. Learning means you need to invest in it, do something actively, like making an extra effort on top of your regular day-to-day life.

In return for making an extra effort, I generally get appreciation from my colleagues and customers and gain new insights and knowledge. On top of getting appreciation, I also get credits for wanting to go the extra mile, which results in goodwill from both customers and colleagues and strengthens my reputation as a professional.

Of course I too complain about things. Obviously there are things I would like to see done differently in my work. However I try to take the active approach to introduce the improvements and make life easier for all those involved.

I truly believe that in a professional working environment it is not a lot to ask people who complain – and rightly so – about things they consider wrong or up for improvement to be constructive and try to change these things, look for solutions rather than keep whining. Quite often however, when you ask the complaining people what are they planning to do to make things change, silence is the answer.

I understand that not everyone has the same drive for his work, some people rolled into a profession by accident and are not motivated to grow their, work related, knowledge and just work to make a living. They, hopefully, have something else that gives meaning to what they do and which motivates and inspires them everyday. Personally, I enjoy my job. I like testing, I like finding solutions and moving  software testing to the next level, I enjoy solving testing problems and get satisfaction from deep diving into software testing theories and challenges. I also really enjoy spending time with my family and friends, but that does not make them mutually exclusive in my view. Just as I invest in friendships and my relationship with my wife and family, I invest in my relationship with my employer and my customer.

In my professional life I try to address things I do not like or think could be better (at least in my opinion). This is why it still surprises me that quite often I run into people who are not happy with a lot of things, but when you ask them what do they propose to do about it you get no answer.

Example: as a consultant I do not have a lot of direct contact with my employer, ergo, communications between my employer and myself (and my colleagues) is not always as supple and swift as one (and the company) would like. Since I am generally at a customer site I have to read emails from my work in the evenings and weekend. We use quite some online, or cloud-based, tools to make sure we stay in touch, such as Dropbox and LinkedIn. So on my personal smartphone I make sure I have the LinkedIn app up and running so I can keep in touch with what is happening “back in the office”, even during weekends or when at a customer site where I have no access to anything but the systems we’re working on and with (bank-like institutions usually lock off their network so you also cannot get to the outside, and rightfully so).

To make all of this even easier we now have received a smartphone. Not exactly the one I would have preferred, but hey, who am I to complain about an iPhone? I had to configure the mail on it, install a few apps on it, but I now have a fully mobile miniature office with me. My employer pays for the bandwidth I use on the phone so no added costs to me, just added ways to communicate with the “home front” be it my employer, my colleagues, my assignment or my family and friends.

You’d think wonderful inventions like this make life easier for those who do not regularly read their company email or never participate in a discussion on LinkedIn. However instead it raises even more questions and reservations, such as “am I required to configure email on the phone?”, “why wasn’t this done for me already?”, “do you now expect me to read my email in the evenings?”.

Am I crazy to enjoy my work and wanting to go that extra step, if reading your email indeed should be considered an extra step? I think I am the normal one and those moaning and complaining are the crazies, but once you start noticing that a majority of the people around you are crazy, it makes you reconsider. At least it did for me.

I started to wonder whether it is normal that I feel connected to my work and to my employer, that I like responding to questions, statements or comments posted on forums, that I do read my email at the most improbable times, that I do not mind driving 400 km’s to go to my colleagues on the other side of the country to talk to them about software testing and things that keep my mind occupied.

I still believe I am the normal one, just a normal person part of a minority with strong work ethics.