September 21, 2016

How to pass a coding interview as an automation developer!

Teaser for my new TechBeacon article: How to pass a coding interview as an automation developer!

Are you an automation developer looking for a new position? Let's simulate the experience of a coding interview:

  1. Open up a browser and Google the keyword "stopwatch."
  2. Take out a blank piece of paper and a pen.
  3. Press the "Start Button" on the stopwatch web app, then attempt to answer the following question:
"Using your favorite programming language: Write a method that checks to see if a given word is a palindrome. Example palindromes: 'noon' and 'racecar'."
Ready? ... GO!

Yes. Seriously. Attempt to answer the question. I'll wait.

Try this exercise for at least a good 60 seconds, even if you think you can't do it. Don't give up!

... Time's up! How well did you do?

If you had trouble with this question, if your paper is mostly or completely blank, if your forehead is covered in flop sweat, or if your first thought was, "Why are you forcing me to do this? I'm an automation developer, not a coder!" this article is for you.

What is an automation developer?

A software quality assurance engineer is an end-user advocate, crafting the software testing process so it ensures quality—meeting and exceeding the wants and needs of the stakeholders on the project.

One of a QA engineer's responsibilities is software testing, validating whether the new features added to a web or mobile application meet the designated requirements and design specifications.

September 15, 2016

What is Your Strategy for Writing an Automated Test Framework?

I have been giving this particular question a lot of thought in the past couple of months. The question is:
"What is Your Strategy for Writing an Automated Test Framework?" 
There are a lot of moving parts when it comes to assembling an automated test language:

A way to write and execute the tests, such as TestNG or JUnit in a Selenium WebDriver / Java based framework. A way to display to display what passed and failed. Detailed logging telling what the test is actually doing. A way to rerun failing tests. A way to run tests in a continuous fashion, whether once a day, or once an hour, or anywhere it between. A way to spin up multiple browsers and platforms...

You can easily spend a good six months putting the perfect framework in place and not have time to create a single test... and that is the problem.

How can you tell if your automation framework is fitting the needs of the people who are using it: The manual testers trying to figure out what tests are covered with the automation regression test suite, the developers who need to see what the automation finds, the QA Manager who is attempting to assess what the tests are covered by automation and where manual testers should fill in the gaps?

If you are trying to build a testing framework that fits the needs of so many stakeholders... why not use the same process that you are using to construct the web app you are building: Use Agile.

Make it an iterative process:

  • Sprint 1: Bad code. Good tests. Run from local browser. No CI/ CD.
  • Sprint 2: Good code. Good tests. Run from local Selenium Grid. Investigate setting up CI/CD locally.
  • Sprint 3: Better code. Better tests. Good building blocks for tests assembled? More tests, faster! Work with DevOps to get Selenium Grid and Jenkins server remotely.

... What is your strategy for building an Automation Test Framework? Leave comments below!

Happy Testing!

-T.J. Maher
Sr. QA Engineer

// Software QA Engineer since 1996.
// Working with Selenium WebDriver since 2014.
// Follow Adventures in Automation and Like us on Facebook!

September 13, 2016

Playing with Protractor: The complexities of testing JavaScript frameworks, according to Vojtěch Jína

Vojtěch Jína, a Software Engineer at Google, finished his Master's thesis, JavaScript Test Runner, at the Czech Technical University in Prague in 2013. Vojtěch talked about, in his thesis, the difficulty developers had when attempting to write unit tests for their code when using JavaScript.

"The language for web applications is JavaScript, which is a very dynamic language without static typing. There is no compiler that could catch mistakes like misspelling a variable name or calling a non existing method on an object - developers have to actually run the code to catch these issues. Therefore testing is absolutely necessary".

JavaScript Test Runner, by Vojtěch Jína

September 12, 2016

Playing with Protractor: Learning AngularJS by setting up the PhoneCat Tutorial App

Normally, when investigating new automation tools and technologies, my modus operandi is to take a good two or three hours to figure out who created the tool, how the tool evolved, if it was based on earlier work, etc. After all that is done, I spend another hour or so formatting my research notes into a pretty blog entry.

This time around, I wanted to do something different...

Instead of starting with researching which Google employees made AngularJS and Protractor, what projects they both were based on, and how they are used, I wanted to continue what I did the previous blog entry about Protractor, AngularJS, JavaScript and Jasmine, and dive right into the code itself.

This blog is geared towards the manual tester who is attempting to learn automation, exactly where I was back in December 2014. You can read more about that transition in my TechBeacon article, Switching Careers in QA: From Manual Testing to Automation Development.

For this blog entry, I'll walk you through installing the PhoneCat Tutorial App at If you aren't familiar working every day with Git or the Command Line interface, and haven't tinkered with using Node.js or the Node Package Manager (npm), every extra bit of instruction helps.

Once you have everything set up, you can go at your own pace through Google's tutorial.

September 11, 2016

Playing with Protractor: Testing an AngularJS application with Protractor, Jasmine, and JavaScript

Yesterday was a lot of fun! I was given an automation development assignment a few days ago in preparation for an upcoming job interview:

Using any technology I’d like, as long as it could be run using freely available software, after filling out a questionnaire given on the company's healthcare web app and writing a test journal post, I was to produce automated checks for the following:
  • An “Assessment Complete” badge appears on the dashboard
  • The journal entry created is present on the journal page.
  • The personality type displayed on the dashboard matches the one given to me in the assessment
What the instructions didn't say was that before each test, you had to navigate a login procedure:

September 9, 2016

Selenium can be slow: When could we use API testing?

A Selenium WebDriver test can be slow. Imagine running a test for a login screen:

... waiting, waiting, waiting... Surprise, it's a browser! ... waiting, waiting, waiting... It's a login screen! ... waiting for SendKeys to enter the username and password into the proper textboxes... and for the Login button to be clicked.

September 3, 2016

Here's to Twenty Years in Testing!

With all that's been going on lately, I missed a very important anniversary...

As of last month, I have spent twenty years in the software testing industry.

How I Started: From a Computer Science Major to a QA Engineer

Unsure how I wanted to apply my Computer Science degree, I left college for a bit during my Junior year at Bridgewater State. Businesses were just starting to invade the web, causing the early pioneers of this new electronic frontier to grumble.

Demand was so high to find people to staff these new "dot.coms", placement agencies were called in to weed through job applications and find good candidates. I found myself at one of these agencies, Sally Silver Contract Services. After testing my analytical skills and reviewing my technical background, some code samples of work I was doing in the classroom, and a rough portfolio from when I spent two years in a college job as a graphic artist / desktop publisher, they asked me, "Have you ever heard of 'Quality Assurance'? Oracle has a new division in Massachusetts, a three month contract position with an option for extension..."

August 31, 2016

Follow Adventures in Automation!

August has been a busy month.

  • Currently, I am searching for new automation development opportunities. 
  • I've spent much of my free time preparing for whiteboard coding interviews, and juggling many, many on-site interviews. 
  • I've been working on a new article, "How To Pass A Coding Interview As An Automation Developer". It should be published by the end of September. 

Want to keep up with Adventures in Automation?

  • Follow this blog by the new widget on the right hand sidebar. 
  • Like this blog on Facebook!

Happy Testing!

-T.J. Maher
Sr. QA Engineer

// Software Quality Assurance Engineer since 1996.
// Check out Adventures in Automation and Like us on Facebook!

August 2, 2016

Looking for an automation developer in the Boston, MA area?

Anybody looking for an automation developer in the Boston, MA area? With less of a reliance on Selenium WebDriver / Java for automation, I soon will be out of job!

I have some experience setting up Automated Test Frameworks:
I published an article on TechBeacon, how I switched from manual to automated testing.

My LinkedIn Profile:
My GitHub account:

Thank you very much, and Happy Testing!

-T.J. Maher
Sr. QA Engineer,

// BSCS, MSE, and QA Engineer since Aug. 1996
// Automation developer for [ 1.5 ] years and still counting!
// Check out Adventures in Automation and Like us on Facebook!

August 1, 2016

Fitbit-Boston is looking for Senior Software Engineer for new Software Test Engineering dept

Fitbit-Boston is looking for Senior Software Engineer for their new Software Test Engineering department.

Taken from Fitbit's job posting:
"Effective Automated testing is essential to agile software development. All software developers write tests, but some kinds of testing present unique challenges. Fitbit is looking for people with the skills of a good Software Engineering  and the mindset of a tester to solve testing challenges for our teams and raise the bar for test automation at Fitbit".

"As a Senior Software Engineer on the Software Test Engineering Team at Fitbit you will work as part of a product Scrum team on a sprint-by sprint basis to identify appropriate testing strategies, help integrate testing frameworks, and solve testing challenges. Your goal will be to enable the other members of the team to improve automated test coverage."

Note: Fitbit is not looking for automation developers. Fitbit-Boston is looking for Senior Software Engineers who have five years experience in languages such as Java, Scala, and Groovy. See for more information.

... In other news, does any company in Boston need an automation developer familiar with writing automated test frameworks in Selenium WebDriver / Java? See the Table of Contents of this site to see my skill set.

-T.J. Maher
Sr. QA Engineer,

// BSCS, MSE, and QA Engineer since Aug. 1996
// Automation developer for [ 1.5 ] years and still counting!
// Check out Adventures in Automation and Like us on Facebook!

July 28, 2016

SDET Prep: Data Structures: Arrays, Hashmaps and how to implement them in Java.

This blog post is part of a series as I research how to move from Automation Development to being a Software Developer in Test. We covered some basic algorithms, before. These next few posts will deal with data structures, illustrating them with Java. 

As an automation developer, I've been focusing on browser testing with Selenium WebDriver and Java, being able to draw from my decades of experience testing web applications. When it comes to various data structures, I use arrays, lists, arraylists, and the occasional hashmap in my day-to-day work, but that is about it.

A Software Developer in Test (SDET) isn't that far removed from a Software Development Engineer (SDE), relying on data structures and algorithms I once studied as a Computer Sci major back at Bridgewater State. Note: Each link below goes to the respective Harvard University CS50 video, if any.

If you are a manual tester or automated tester and want to shift to software development, Gayle Laakmann McDowell's Cracking the Coding Interview is an excellent summation of all terms listed above. It seems to be a good resource for even Senior developers, who may be far removed from college.

July 27, 2016

SDET Prep: Mergesort: Walkthrough and sample code from "Cracking the Coding Interview"

This blog post is part of a series as I research how to move from Automation Development to being a Software Developer in Test. These next few posts will deal with algorithms.

I've often found good technical videos as difficult to find as good documentation, and for the same reasons... they are geared more towards developers who use the technology day-to-day. The last time I used sorting algorithms on a regular basis such as Insertion and Selection Sort, Bubble Sort, Mergesort, and Quicksort was when I was a Comp Sci Major back in the 1990s. I haven't really seen them while I have been an automation developer.

Luckily, there is Harvard University's CS50 at

With our last blog post, we covered the sorting algorithm Insertion Sort, good for sorting small amounts, but not very efficient for large amounts. In this blog post, we are going to be covering an algorithm that is faster for larger amounts... though it does take up a bit of space.


Mergesort is a "divide-and-conquer" algorithm. According to Wikipedia,  "In computer science, divide and conquer (D&C) is an algorithm design paradigm based on multi-branched recursion. A divide and conquer algorithm works by recursively breaking down a problem into two or more sub-problems of the same or related type, until these become simple enough to be solved directly. The solutions to the sub-problems are then combined to give a solution to the original problem".

Stanford University  professor emeritus Donald Knuth -- author of the 1960s saga "The Art of Computer Programming" -- cites the mathematician and computer scientist John von Neuman as inventing the Mergesort in 1945.

July 26, 2016

SDET Prep: Insertion Sort and Learning By Video

This blog post is part of a series as I research how to move from Automation Development to being a Software Developer in Test. These next few posts will deal with algorithms.

When I find my programming skills are a bit rusty from disuse, I find watching educational videos on the internet is the next best thing to face-to-face instruction in a classroom.

With online lessons, I can repeat an example as many times as I want, rewind the lesson, and I can pause the screen to type out the code they are using, playing around with it immediately -- the best way to learn code.

Within the last couple of blog posts, when we started talking about measuring the efficiency of algorithms using Big-O notation, I displayed Eric Drowell's Big-O Complexity Chart of commonly used sorting algorithms.

We are going to cover three of those sorting algorithms in a bit more detail: Insertion sort, mergesort, and quicksort, starting with Insertion sort.

As a reference, we'll use lessons from Khan Academy, and from Harvard's CS 50.

July 25, 2016

SDET Prepwork: What is Big O notation and Logs? Comparing Growth Rate in Algorithms

This blog post is part of a series as I research how to move from Automation Development to being a Software Developer in Test. These next few posts will deal with algorithms.

What is the difference? ... Well, the main thing is that as an automated tester, I haven't needed to worry about Big-O notation and sorting algorithms, such as the ones found on Eric Drowell's Big-O Cheat Sheet.

Big-O Complexity Chart


Array Sorting Algorithms

AlgorithmTime ComplexitySpace Complexity
QuicksortO(n log(n))O(n log(n))O(n^2)O(log(n))
MergesortO(n log(n))O(n log(n))O(n log(n))O(n)
TimsortO(n)O(n log(n))O(n log(n))O(n)
HeapsortO(n log(n))O(n log(n))O(n log(n))O(1)
Bubble SortO(n)O(n^2)O(n^2)O(1)
Insertion SortO(n)O(n^2)O(n^2)O(1)
Selection SortO(n^2)O(n^2)O(n^2)O(1)
Tree SortO(n log(n))O(n log(n))O(n^2)O(n)
Shell SortO(n log(n))O(n(log(n))^2)O(n(log(n))^2)O(1)
Bucket SortO(n+k)O(n+k)O(n^2)O(n)
Radix SortO(nk)O(nk)O(nk)O(n+k)
Counting SortO(n+k)O(n+k)O(n+k)O(k)
CubesortO(n)O(n log(n))O(n log(n))O(n)
The Big O Cheatsheet By Eric Drowell

In this blog post, we are going to be focusing on walking through the sorting algorithms Insertion Sort, Mergesort, and Quicksort, and implementing them in Java code.

First things first, though...

What is Big O Notation? 

Big O notation is how computer scientists compare and contrast the efficiency of sorting and searching algorithms, the tried-and-true recipes used to write programs that search through massive amounts of data.

The concept of Big O notation was first introduced and the popularized by the German mathematicians, first by Paul Gustav Bachman, in his book on analytical number theory, Analytische Zahlentheorie, and then by Edmund Landau.

The "O" symbol mentioned in the book was initially an omicron, the 15th letter of the Greek alphabet, showing a formula to show the formula of a rate of growth.