Hidden requirements

Reading Time: 2 minutes
credit: http://www.quizzle.com/

This post have spent some time in draft state in my Blogger. Time to reveal it. Aleksis wrote about software quality. I strongly agree with those statements and definitions that come from the context driven school of testing. It also speaks about software tester customers. Here I would like to add requirement sources for which we are testing applications. This is based on my software testing experience since 2003.

It is important to identify all your customers because it will be much easier for you to estimate amount of work and to create your commitments. You probably have some type of product solution. He wants to know when the testing will be finished. And his only requirement is that he/she do not want any problems to happen.

Technical solution has its own requirements. His requirements are concrete and those create actual deliverables. Using his input you will know amount of testing work created by those requirements. Those requirements are very often add on to any list of requirements that you already have. Do not forget to communicate those to product solution customer!

Product itself is your customer. If you create Apple store application, be sure that application conforms to all Apple store requirements. Same goes for Google Play store.

Product analyst is customer that is never forgotten by software tester. He usually has feature requirement list.

It is important to state that those customers will never have all their requirements in the written form. And that is fine, as a software tester, it is your responsibility to gather and note down all those hidden requirements.

These were customers from my software testing context. It is important that you create your customer list for your project context. And you must be proactive in order to do so.

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

Tool that automatically generates unique html id attribute

Reading Time: 2 minutes
When you start browser automation, you very quickly reach to problem of testability. How to uniquely identify page elements? You know that there is html id attribute, but when you inspect the page content, you have three possible scenarios:

  • no id attribute at all
  • id attribute on every element, but is value changes after every deploy
  • id attributes are used, but not on all elements
As an excellent tester, you immediately go to developers and kindly ask them to start using id attribute. They answer is:
  • do not have time for that
  • what id value would you like me to use?
  • gwt automatically dynamically populates id value
That problem bothered me from the first moment I did browser automation. Lets recap what is the problem.
“Element from DOM tree, that is part of browser automation, need to have id with unique predictable value on that page.”
We need some kind of magic that will do that automatically (programmatically).
What if element already has id attribute?
That is great because developer put it on purpose to help us testers to do our job.
What if developer did not put that id attribute, but it was put automatically by framework, like gwt?
We could easily break web page functionality if we put our predictable unique value (short brainstorm session with Daro).
So I decided to use custom attribute. HTML5 standard helps us with data-* custom element attributes. I chose attribute name
data-testabilityid
What about predictable, unique value for that attribute?
I choose to put path that consists of node names up to document root.
Code needs to be triggered after page is fully loaded in browser or when there is change in DOM tree. I decided to try chrome extension. And in two days, with help of excellent resources that could be found using Google, I had working application.
You can download Testability ids! chrome extension and give it a try.
Here is source code along with automation code used for testing the extension.
Additional feature is to get id value. By using shit+left click, value will be printed in javascript console.
I tried to implement clipboard functionality, but without success (I tried all the know stackoverflow solutions). So this is first to do.
Of course, we need Firefox and IE>10 extensions as well.
Icon credit goes to:
http://www.iconarchive.com/artist/rud3boy.html
Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

My experience as AST BBST Co-instructor

Reading Time: 2 minutes
Credit: associationforsoftwaretesting.org

In this post I will give my experience as AST BBST instructor for course Instructor Course. I am member of Associations for Software Testing and I successfully passed Foundations and Instructor course. These are prerequisites to be eligible to take Instructor course. When I successfully finish Instructor course, I got detailed instructions how to enroll as AST BBST Instructor.

 It is important to state that BBST is a registered trademark of Kaner Fiedler & Associates LLC. Being AST BBST instructor is a volunteer activity.

BBST Instructor is the least demanding course, so in my context that I have eight hour daily job and family, it was a good starting point as instructor. I create commitment for myself and that is that I will read every student post related to course lab activities.

Lead instructors were Justin Rohrman and Markus Gärtner. Justin first send Google spreadsheet with instructor task list. I could apply for any of those tasks, and every task had a deadline stated. Using that information, I could manage my workload and decide (given that this was my first course as instructor) which task to choose. My first task was to review the student task list spreadsheet and is everything ok with moodle course site (links,  text, forums). I choose lesson preview tasks. I needed to give students brief introduction what is next lesson all about. I put first draft in instructors forum in order to get feedback from lead instructors.

As I was reading student post to lesson lab task, I also provide several feedbacks using my knowledge that I gained in Instructor course as a student. In the end we needed to provide for every student our pass/fail decision along with comments for fail decision.

I had several takeaways from being co instructor. First was that by providing lesson previews and student feedback I actually did a recap of lesson materials which helped me to better comprehend and extend my understanding of Instructor course materials. In total I spend 12 hours over the two and a half week course duration. Second was that by reading student responses I also extended my Instructor course knowledge. I met a Miagi-Do School of Software testing instructor, Michael Corum, and Lucas Dargis uTest community contributor, testers for which I heard before by reading their blog posts.

I recommend you to become AST BBST Instructor if you want to share your knowledge with other testers and to extend and recap your knowledge from AST BBST courses. However, you also need to put some commitments from your side, and that is your free time.

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

Do not name your method dup

Reading Time: 1 minute
Credit: Amazon.com

In order to improve my testing skills, I read great book, “Clean Code“, by Robert C. Martin. This book will teach you how to write readable and maintainable code. Either if you do test automation or if you need to read someone else code, this book is for you.

One rule that book teaches you is to name your functions descriptively. They should have name by their function. Book also provides a lot of good reasons why is this important. I will provide one reason from testers perspective.

While I was testing one feature related with date calculation, I received following error:

I got error in method dup. So, instead of spending time to find out issue in my testing code or data, I had to first spend time to find out what is dup method doing. Exception was descriptive and that helped. The issue was with test data, I got null value from database. I found out on StackOverflow what does dup do. It is not easy to describe with simple name what does that method do. So I guess they agreed on some internal mnemonic. In Ruby code based that is used by millions.

Problem here is that Ruby codebase programers, by putting that simple name for method dup, put technical debt to Ruby codebase. Which could provide many different issues. When you hit hard problem, think how to solve it in proper way.

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

IronRuby magic in action

Reading Time: 1 minute
credit: channel9.msdn.com

In my current project, I have to test product that is build using .Net technology ecosystem. First thing that I did was to install IronRuby on my testing Windows box (Amazon aws instance). IronRuby is .Net implementation of Ruby language in .Net platform. As JRuby does with Java world, IronRuby combines two powerful worlds, Ruby and .Net technology ecosystem. That means that I have at my disposal Ruby gems and .Net libraries to help me in my testing activities.

As I have to test features related with dates, I need to do dates (Julian calendar) calculations. Using Ruby Date class (require ‘date’) I can immediately resolve problems with leap years,  number of days in month, various date formats.

I hit one problem that Ruby Date class was not up to. That is US week number, which is not aligned with iso 8601 standard. Lets take date ‘20100101’ in format ‘yyyymmdd’ for an example. It is week 52 in US, but in Europe and iso standard is week 53 (you can test it using this link). Ruby implements Date class according to iso 8601 standard.

Then I realized that I have .Net ecosystem at my disposal. Using Google I found my solution. Here is simple gist
And here is appropriate spec

Note that we are using Ruby Date in spec file.

What I learned? By opening to open source technologies, Microsoft is helping worldwide testers to better test products developed using Microsoft technologies. We learned how standards should be used. Problem here is that US does not obey to that standard, but it should.

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather