Becoming a fantastic Software Engineer in Test and Automation
Hello Hacker News,
I've moved to the testing work recently enough from Dev/Support and have had a troublesome time attempting to find resources which will make me a better tester and a better software engineer in test. The one thing I found on hacker news other than hundreds of job postings was this: https://news.ycombinator.com/item?id=3264223#up_3264286 - which is both very old and doesn't seem to contain great advice.
So HN, how do I become an awesome software engineer in test, clearly there are a lot of them out there based on job postings, so where are they? What skills do they have? Where do they go to learn new skills to become better?
Thanks!
4 comments
[ 2.0 ms ] story [ 41.5 ms ] thread(1) What are you testing? (e.g. hardware?, software?, firmware?, ... --and more detail is better)
(2) What are you trying to automate? (e.g. an oscilloscope?, a Logic Probe?, network throughput? computational load? memory usage? algorithm efficiency? a software bug test suite to find regressions? ...).
Other useful questions are:
(1) Does your company do experimental/research work?
(2) Is your company using "Agile", or "TDD" (Test Driven Development), or some other organizational methodology?
(3) What are your constraints? (e.g. do you need sub-millisecond timing resolution?, are you limited to particular interfaces/buses like Serial, GPIB/HPIB, SCPI, PCIe, USB, Ethernet, ...?, do you need to use emulators?)
(4) Does your company have an existing test regimen?
(5) Is your middle name Tim?
OK, that last one more than just a joke; it's actually a trick question and it serves a point. The best test design and automation engineers I've known all have a real knack for doing the unexpected --You can often find bugs by doing unexpected things.
Whether it's called "Test" or "Quality Assurance" or "Total Quality Management" or whatever, the field is absolutely huge, and it can be extremely fun and challenging.
2) Automated browser/ui tests, hopefully I'll get to move more toward the api/service/functional level as well. First stop will be to essentially build a regression suite.
Other
1) Nope.
2) Using agile
3) Not constrained other than by management and other workload. Essentially I can make testing here what I want and I want to make it good. I'm fighting some pretty old ideas on a regular basis.
4) Basically no, they've hired me and another guy to 'develop' it but I had zero testing experience and the other guy has a few years, though has never led.
5) No, it's Patrick!
I feel I have a knack for doing some unexpected things when I have freedom to think and I'm not hugely rushed. Unfortunately I don't get much support from management. For example, I found an unexpected bug which I and several devs thought was a 'show-stopper', the product owner thought this was, 'testers running through unrealistic scenarios.'
1.) Always show up with solutions, not problems.
With good reason, Rule #1 is the first thing to always remember. You never want to be the person who impedes development or release. You always want to be the person who improves development and release. By the nature of you job, you will be the person who often needs to deliver the unwanted bad news, but if you gain a reputation for delivering the bad news with some good news, like ways around a problem, then people will seldom dread talking to you. Take responsibility for improving the product, offer fixes, and still offer fixes when it's not your job to fix the bugs.
Never utter the words "show stopper." Even if you are right, it may not be your decision, and you can easily make enemies of the people you need to work with every day. Instead educate others on the potential harm to customers, potential loss of customers, and if that doesn't work, the potential harm to the viability of the company as an on-going venture. When you need to do this, and you will need to do it, be prepared with multiple paths for working around or fixing the issue along with a cost estimate for fixing the issue. In other words, lead others into uttering the fateful words "show stopper." Surprisingly, you job is to make the risks and consequences known, as well as provide alternatives to mitigate the risks and avoid the consequences.
Pointing out mistakes is always a touchy situation. Many people react poorly to being told that something they did is wrong, so try to memorize the secret formula, "We can improve X by doing Y to avoid Z." The "we" is important and you can even toss a "probably" in there somewhere for added effect.
If you can reliably remember the secret formula even when your scalp is sore from pulling out all of your hair, then please tell me how. ;)
2.) You will always have constraints, so know and memorize them.
When an executive spends $200K on a piece of test equipment, and the other engineers want data at some super fast resolution beyond the capacity of the equipment, you are the person responsible for knowing the constraints of the test equipment. This has actually happened to me, and it's a whole lot of no-fun. You get stuck between a rock (the other engineers) and a bad place (the exec who doesn't want to look bad for buying the wrong/cheap equipment). Sure, it may seem anecdotal, but you'll be surprised how often you are asked to do the impossible.
When you know the constraints of your test system, then you can show up saying, "We can do X with what we have currently, or you can push upstream for more investment in test infrastructure. We try doing X to see if it will suffice for your needs?"
In your situation with web apps, particularly mobile-ready web apps, testing will require a big investment in test infrastructure. If your web app is using any of the newer direct-to-hardware (WebGL, AudioAPI, ...) features, just using emulation (system/browser images with VMware or similar) may not suffice to give proper test coverage. Emulated hardware is never perfect, so you'll often need access to real hardware. Of course, you can often do tons with just emulation, but knowing where emulation will fail in strange and unexpected ways means knowing the constraints of emulation.
Knowing your constraints is knowing what you can actually test. When others have unrealistic expectations, knowing y...
Thank you very much for going to the time and effort of that reply, I really appreciate it.