Becoming A Software Test Engineer

What a test engineer is

Before we go into how to become a test engineer we should be clear about what a test engineer is. A test engineer is a software developer. Test engineers create software to aid the QA effort. This can include writing test automation, creating QA tools, automating environment setups, etc.

What a test engineer isn’t

It is also important to be clear about what a test engineer is not. A test engineer is not anyone that uses a record and playback tool. They are also not script kiddies. And they are not just people from QA that write unit tests for development.

Test automation is not cheap. One of the most common reasons test automation fails is because the maintenance cost is too high. Recording tools can create test code very quickly, but what they produce is very hard to maintain. Script kiddies can do some pretty impressive things but adhere to poor (no) coding standards which makes there code almost as hard to maintain.

Where to test engineers come from

Test engineer typically come from manual testing or development.

Manual tester to automation engineer

Transitioning from a manual tester to an automation engineer is not a trivial change. They need to learn how to code affectively. They don’t need to be a Rockstar, but they do need decent coding skills. Test automation written by manual testers often results in very procedural and difficult to maintain test code.

The advantage manual testers have is that they understand how to manually test software. This makes them much better at working collaboratively with manual tests. They know the pain points and what would aid the overall testing effort. Collaboration is key because automation that duplicates manual testing is a huge waste of effort.

Developer to automation engineer

In many ways developers have an easier time transitioning into a test engineer role. Test engineers leverage the same tools (unit testing frameworks, IDEs, etc.) as development. For the most part they also use the same coding practices.

The biggest issue for most developers is there mindset. Many developers see the test engineer role as tedious. In my experience this is largely due to a misunderstanding of what test engineers do. There is also the inclination to see this role as someone that does more unit testing. There can be some crossover, but automation testing (what test engineer produce) is not the same thing as unit testing.

Keys to becoming a test engineer

Sharpen your development skill

As mentioned before a test engineer is a software engineer with a quality assurance focus. Like any other development, following good coding practices typically produces better (easier to maintain) code. Few things kill an automation project faster than spaghetti code.

Become versed in quality assurance practices

Ideally test engineers work collaboratively with manual testers. In order to effectively communicate it really helps if a test engineer knows the jargon and practices.

Develop a testing mindset

The point of automation is not to create tests that pass. All too often people’s first instinct is to disable or "fix" failing automation tests. This can totally defeat the purpose of test automation. The result of this flawed mindset is often missed bugs and tests that don’t cover what they were intended to cover. As a test engineer figuring out why a test fails needs to come first.

Understanding not everything should be automated

People and software have different strengths and weaknesses. People are very good at pattern matching. In many cases this is a great asset, but it can also result in people seeing things that don’t exist – AKA pareidolia. When you are doing highly repetitive testing automation is almost always the better choice. The problem with software is that it does exactly what it is told to do. If you are dealing with something very visual of contextual people are often much better. Everything "can" be automated, but it is prohibitively expensive to truly do this well. For most projects a mix of manual and automation is ideal.

I want to be a test engineer, what should I learn

  • Programming languages
    • There are no "right" languages
      I am partial to Java or C#, but any modern language will do
  • Design patterns
  • Technologies
    • Unit test runners – Such as TestNG, JUnit, Visual Studio Unit Testing * Framework, etc.
    • Databases
    • Web services
    • Selenium
    • Appium