Categories
Agile Books Conferences Critical Thinking Presenting Software Testing Technology Testing Archives

Where are they now?

Have you heard of the Agile Manifesto? It was published in 2001 when 17 blokes who work in tech came together to come up with a consolidated way of working. They came up with 12 principles which still hold up today. It’s worth a read.

This blog is digging into the archives and asking the question; where are they now? It is in alphabetical order by surname.

Kent Beck

He’s got a wikipedia page, I wonder how many of these blokes have their own wikipedia page? Author of the extreme programming series, which I’ve heard still holds up today.

You could also watch his recent YOW! Conference keynote presentation from 2018:

You can check out my sketchnotes of his talk here:

Mike Beedle

He also has a wikipedia page, he died in 2018, he got stabbed. Ouch, my condolences to his family and the community. At least he didn’t have to experience the dumpster fire that is 2020.

Arie van Bennekum

Alistair Cockburn

Ward Cunningham

Most of these blokes have a wikipedia page. But here’s the first one in this list to have a TEDx talk:

Martin Fowler

I often reference Martin Fowler’s content on my blog. I’ve also seen this bloke give a few presentations here in the land down under too:

James Grenning

Has published a book on TDD for embedded chips. Here’s a talk for TDD for embedded systems (I’m a sucker for a good testing talk):

Jim Highsmith

Andrew Hunt

I’ve been meaning to read the pragmatic programmer. Rubber ducking as a debug method was coined in that book and referenced in this talk:

Ron Jeffries

I’m following Ron on twitter, his blog on space invaders and testing seems to be a bit of fun to read. Does everything have to be a user story?

Jon Kern

He doesn’t have a SSL cert on his blog, well my old blog has had the SSL cert expire so I can’t blame him.

Brian Marick

Robert C. Martin

There’s a bit of controversy around “Uncle Bob”. I’ve previously mentioned some of these issues. So I won’t say too much but he’s been “cancelled” for a recent conference and then threatened to sue. Lovely stuff.

Steve Mellor

Ken Schwaber

If you want a bit of context on the term of Scrum, here is a good talk:

Jeff Sutherland

He’s also got a TEDx talk:

Dave Thomas

Finally I’ll leave you an Agile is Dead talk by Dave Thomas. It’s probably one of the most viewed software engineering talks on youtube that I’ve seen since I started putting this blog post together (over 1.2 million views):

Conclusion

Surprisingly, only one of these blokes is confirmed as dead. And there is a serious lack of diversity in this group. However they have all been instrumental in current development practices. Who hasn’t heard of Agile?

So who do you think is driving software development further these days?

Categories
Critical Thinking Software Testing Testing Archives

Interviewing technical testers

Angie Jones has this awesome video explaining the technical interview process for software testers. This blog is a summary of that process in written form. I often watch these videos at double speed.

1. The Testing Question

Many automation engineers out there are great at code but not so great at the testing element. Companies are looking for people with strong skills in both. Someone could ask you:

  • How would you test this pen/chair/bottle?
  • How would you test a username/password log in field on a website?

It’s easy to jump straight into test scenarios. BUT make sure you come back to the context;

  • Why is this being tested?
  • Who is it being built for?
  • What are the requirements/features?

2. Unit Testing

You might be given a sample function and ask to come up with some unit testing ideas. As an Automation Engineer you probably won’t be writing unit tests but this question is to see how you apply that testing mindset. You might answer this in a Test Driven Development approach.

public int add(int a, int b);
  • Does this method add two integers and return it?
  • What are the min and max values? e.g. is what about an integer larger than 32 bits?
  • a = 0 and/or b = 0
  • Negative numbers?

3. Service Tests

You might be asked to test a simple CRUD API for a sample API e.g. user management, what scenarios would you create to test the API? Make sure to talk about the different HTTP methods and the different error responses. How would you create scenarios to test them?

4. UI Tests

You might be given a web page and asked to create some UI tests using the tools you are the most familiar with. You could talk about the different approaches you might use too. If you could talk out how you would build out a page object model, what parts are common across different pages and how you’d abstract them out in their own classes such that they could be easily reused this would be gold.

5. Programming questions

Unfortunately you might have the same programming questions thrown at you as developers. These are a horrible part of the interview process but it’s something we have to live with. HackerRank is a great way to practice and to get efficient at this type of performance.

Dan Ashby’s approach to interviewing testers

Dan Ashby has this great post on how he interviews testers using this mindmap:

My approach

If I was interview a technical tester I’d start with an intro. We will then dive into an exploratory testing question. Then ask about using GIT and how you would collaborate with developers. Then deep diving into some more technical questions on unit/API testing depending on the role.

  • tell me a bit about yourself…
  • How would you test a username/password login page?
  • How do you create a pull request in GIT?
  • What unit tests for this function can you come up with?
  • How would you test this sample API?

If I was interviewing for a mobile tester role I’d ask about using command line tools like Android Debug Bridge (ADB). For example, how would you generate a battery historian report and pull files from an android device using ADB?

How do you go about interviewing testers? Do you have any other tips to add?

Categories
Critical Thinking mindfulness

Reflections on free speech

In today’s internet era it feels all too easy to get angry and upset over something offensive. It can be easy to find the rage machine in full swing and to get caught up in it all. Many platforms can concentrate that anger and it’s all in the name of “engagement”. Outrage gets more clicks and shares.

This blog post is a reflection on my thoughts about free speech, hate speech and how people become hateful.

3 approaches to moderation

If we let all types of speech fly under the free speech banner, then what do we do about speech that enacts violence? On the internet I’ve seen three levels of moderation:

1) Reddit – let everything fly

If you want to see some dark nasty corner of the internet you will find just the right corner in some subreddit thread somewhere. 4Chan has a similar culture. Anything goes, no moderation here.

Remember #GamerGate? One part of of it was some people didn’t like Anita Sarkeesian’s video posts on Tropes vs Women in video games. Someone even created a beat up Anita game.

2) Twitter – let most things fly

If it enacts a sense of violence twitter will now tag the post with a warning:

Twitter has flagged and hidden a tweet by United States President Donald Trump, saying he violated Twitter’s rules about glorifying violence.

https://www.aljazeera.com/news/2020/05/twitter-flags-hides-trump-tweet-glorified-violence-200529080054304.html

3) Facebook – post no evil

Facebook has a team of people and algorithms searching and blocking hate speech, e.g. commenting “Men are scum” will be removed.

you can’t attack a person or group of people based on a protected characteristic. A characteristic like race, religion or gender.

https://www.wnycstudios.org/podcasts/radiolab/articles/post-no-evil

Free speech isn’t a free pass

If I say something hateful, offensive or generally misguided, I should be held accountable for what I said. I want people to call out my offensive nature. There’s lots of things I don’t know or misunderstand. By calling me out you help me to improve my understanding.

We have to take responsibility of what we say

Rowan Atkinson – https://www.youtube.com/watch?v=BiqDZlAZygU

Comedians and cancel culture

Comedians have a reputation for being a bit offensive or a bit on the nose with their comedy. Comedy is criticism of society at large. Here are some Comedians calling out Cancel Culture:

These comedians tend to think we are now too sensitive and over react to everything.

How people are radicalized

I’m going to leave you with a video on how people become radicalized. It doesn’t matter if it’s veganism, transphobia, racism, sexism or general hatred. No one starts their life hating another group of people. We learn this behavior through the culture we absorb:

If you find yourself getting angry over something on the internet, please take some time to reflect and understand where that anger is coming from.

Further Reading

https://ketanjoshi.co/2020/08/07/journalism-has-a-social-media-abuse-problem-no-not-that-one/

Categories
Critical Thinking Marketing Mobile Testing Software Testing

That elusive Test Strategy

I recently was asked about recommendations for learning about test strategies. Here are my sample strategies:

a strategy doesn’t have to be a big giant document. It starts as an idea in your head and you have to get other people on board as part of that strategy. So you need to share some knowledge in some format to help share your idea. This blog is about how I’d go about developing a new test strategy in a new team.

History of the term

First let’s take some time to understand this term; strategy. Historically the word strategy is associated with war and battle:

Quote: Strategy without tactics is the slowest route to victory. Tactics without Strategy is the noise before the defeat - Sun Tzu
https://www.pinterest.com.au/pin/287878601154737781/

Strategy is to help you win or achieve some goal. Many people talk about their tactics when they are thinking of their strategy. Tactics are your how. They aren’t your whole strategy.

A tactic is a conceptual action or short series of actions with the aim of achieving of a short-term goal. This action can be implemented as one or more specific tasks.

https://en.wikipedia.org/wiki/Tactic_(method)

Book: I have a strategy (No you don’t)

This book helped me understand the term, “Strategy” in a visual and fun way.

https://www.amazon.com.au/Have-Strategy-You-Dont-Illustrated/dp/1118484207

According to this book a strategy has 4 parts:

  • A purpose
  • A distinct, measurable goal
  • A plan
  • A sequence of actions or tactics

Start with a purpose

If I was dumped into a new team tomorrow and asked to develop a test strategy, I’d start by interviewing/surveying a few people. Depending on the size of the team and who I was working with it could be an online survey or a casual chat over a coffee. I’d ask something along the following lines:

  • What does quality mean to you?
  • What are common problems in the testing process here?
  • If you could fix just one thing about our quality, what would it be?

Now different people are going to answer this differently. Developers might say test code coverage, easily maintainable code and easy deployments make a high quality product. Your project manager might say happy customers. Testers might say less bugs found in the test phase.

Develop a goal

Once I’ve surveyed enough people (5 people is a good enough number for most user research interviews), I’ll work on constructing a goal. it might be;

  • improve our continuous integration build times
  • increase our test coverage
  • reduce the amount of negative customer feedback

Make sure it is measurable. You could use SMART or OKR goal formats.

https://www.toolshero.com/personal-development/smart-goals/
https://blog.weekdone.com/introduction-okr-objectives-key-results/

Develop a plan

Now what are some things I or the team could do to achieve our goals? We could create tasks during our sprint to help us work towards our goal. Once you’ve achieved something you survey those original interviewers to see if the perceived quality has actually improved.

Measure your progress

Measure the improvements in quality of your product. For my team we are tracking the average app store ratings, crash rates and engagement with in app features to see if they are actually useful. https://bughuntersam.com/metrics-and-quality/

Risks and Gaps

A Test Strategy could also have a section about risks or gaps in this approach. For example things like performance testing and security testing might not be included. Having a brief explainer why these aren’t part of your strategy can be useful for explaining the context and scope.

UI Automation Visual Risk Framework

if you are working on improving the UI Test automation coverage you can use this visual risk based framework to help focus on where to start and what to automate first and measure progress against it as part of your strategy.

https://bughuntersam.com/visual-risk-ui-automation-framework/

Conclusion

I’m more comfortable with the term marketing strategy over test strategy because it’s easier to measure your impact and easier to come up with concrete goals. Software testing isn’t as tangible as many other parts of the business process and can be hard to measure.

Can your strategy be summarised by this comic:

test all the things
automate all/some things

What resources have helped you understand test strategies? I’d love to check them out.

Categories
Craft Beer Critical Thinking Finances Job hunting Marketing mental health mindfulness Software Testing Technology

Buddha in Testing: Chapter 5

At the end of Buddha in Testing, Pradeep asks the reader to co-author the next chapter with him. So this blog post is my attempt at writing part of Chapter 5 of this book:

What is the chaos that surrounds you in testing?

Write now, during the pandemic a lot of people have been made redundant and are struggling to find work. I’m lucky enough that my day job isn’t all that chaotic, which is a good thing. The mobile app I’m working on is doing pretty well. I wouldn’t want to be dealing with a stressful work load on top of everything else.

What is my contribution?

I put together a software testers career cheatsheet to help anyone whose struggling to find work right now. After having career coaching sessions with a bunch of people, a few themes came to light. I got the inspiration to do a video series on those points. I found out it makes for great marketing content.

What situations have put you out of calmness?

Last weekend I recorded 7 career tip videos in one weekend. I was burnt out by Monday and a blubbery, teary mess. I couldn’t focus on work and took the day off to mentally recharge. I told twitter I was out of spoons.

How did you bring peace?

Walking around the city, listening to podcasts and shopping in second hand clothes stores was how I recharged. I even had a beer in a sports bar at lunch and watched some cricket (England vs West Indies) :

What answers are you searching for?

Satisfaction in life. I’m over software testing. I’m starting a graduate diploma in financial advice next week because I have an idea to disrupt the retirement funds industry here in Australia. Making retirement funds easier is something I can get behind.

How will you recognise the peace?

I enjoy adding value to other people. It’s a huge driver to most of what I do. I miss the constant interaction with people from my shop assistant days. If money/labour wasn’t a drawback I’d prefer to work in a supermarket over most of the testing roles I’ve had. With my history of depression, I don’t think I’d ever achieve peace but I can be more content with life.

I’m now outta steam

I could continue answering the questions but I think I’m going to leave it there. How would you answer some of these questions?

Categories
Critical Thinking Job hunting Marketing Software Testing Technology

Technical tips for Software Testers

My software testing career tips on Youtube is going well. So well in fact that I need to break out and collect the 4 part mini series on technical skills into it’s own blog post.

Part 1: learn command line

Nothing will impress you colleagues more than your technical prowess with the command line, even if all your doing is checking your email. Here’s all of the references in the video:

Part 2: trending tools

You should focus on learning tools and technology that help you collaborate with the developers on your team. Here’s all of the references in the video:

Part 3: The Technical profile

Having a GitHub profile is key to establishing your tech credibility. Here’s all of the references in the video:

Part 4: Manual vs Automation

I avoid these terms in my profile like the plague and as an Industry we should drop these terms. Here’s all of the references in the video:

What are your tips for testers when it comes to improving their technical skills?

Categories
Critical Thinking Software Testing Technology

Code Smells and Boolean Logic

Have you ever come across a boolean in code (i.e. a TRUE/FALSE) variable and had to stop and question if TRUE meant enabled or disabled? I call this a code smell.

A code smell is a surface indication that usually corresponds to a deeper problem in the system.

https://martinfowler.com/bliki/CodeSmell.html

Naming variables is hard

One of the hardest things in software engineering is naming variables. They need to be easy to understand, short (ish) yet descriptive. And working in international teams, everyone has a different understanding of language. It’s a nigh impossible task if you ask me.

Kill Switches

Say there’s a kill switch feature that a business or developer can enable to block a client from hitting a backend via an API. Just in case there’s peak demand or something in the system is struggling. Or maybe you are concerned there’s a widespread Denial of Service Attack (DoS) hitting your system and you want to keep your customer data safe.

What should this kill switch be named? And what state corresponds to the switching off of web traffic?

The enabled state should correspond with the no traffic state. When this kill switch is enabled, the business has gone in and switched it on, effectively switching off traffic. By default this kill switch is disabled and web traffic is normal. You might want to call this kill switch something that relates to the API it switches off, e.g. WebLoginKillSwitch if the kill switch prevents people from login to your web.

Feature Flags

A feature flag is a software development technique used to enable or disable functionality remotely without deploying code.

https://launchdarkly.com/blog/what-are-feature-flags/

Say you are working on a new feature but you are operating in a continuous integration and deployment environment. Once your code is merged in it could be deployed to customers within minutes. But your feature isn’t ready for customers just yet. You can wrap your feature behind a feature flag and enable it for your team so you can test in production even before your customers see it.

By default this feature is disabled for most of your users. But you could also set up a % rollout for the feature too. Maybe 5% of your users see the new feature before doing a general release.

When naming a feature flag you don’t need to include the word enabled or disabled in the variable. If you are experimenting with a new way of web login using apple ID you might call this feature flag webLoginWithAppleID and have it disabled by default.

Read the art of readable code

If you are interested in learning more about readable code, I recommend reading the Art of Readable Code:

Do you have any code smells related to naming of variables? How about test code smells?

Categories
Critical Thinking

Birthday Reflections

I recently survived another year on this rock rotating around the sun. It doesn’t feel that long that I was reflecting on turning 30 last year. I also set myself some goals at the start of the year but 2020 has been a doozey and put lot’s of those intentions on hold. This blog is a brain dump of reflections.

Finances

Looking at my finance figures from my turning 30 blog, everything is still on track. My student loans are at 33K, my super is at 62K and progress towards my credit card debt is happening, today it’s at 22k outstanding.

Goals

I’ve spent some time reassessing my goals for this year. I had signed up for the Sydney Community College gold membership but because of covid-19 it’s been cancelled. I might start a diploma in financial advice for the rest of this year.

Values personality Test

Today I did a values personality test from Psychologist Today. It’s a good way to get some other words that I can use to describe my values. Here is my top value:

Top Core Value: Theoretical Values

People with theoretical values regard logical thought and the pursuit of knowledge very highly. They respect the value of education, both formal and informal, and believe in learning for the sake of learning.

They don’t make decisions based on a set ideology; rather, they try to base your opinions, beliefs, and decisions on “truth”. Rather than listening and blindly following what others are saying, people with theoretical values make their own choices based on all the information available to them.

This translates to a very deliberate, logical way of thinking. They want to understand how things in the world work, and are not afraid to ask why something is the way it is.

Influencing Values

  • Social Values
  • Aesthetic Values
  • Political Values
  • Realistic Values

Minor Values

  • Traditional Values

You can access the full PDF report of my test here if you like. I’d actually say community is my biggest personal value but they didn’t come across in this test. Anyway, it’s good food for thought and explains why I want to pursue further education.

How do you go about self reflection? I find writing helps me (hence this blog)

Categories
Critical Thinking Mobile Testing Software Testing

Mindmaps and Heuristics for testing

I like to use mind maps to help me test. Mind maps are a visual way of brainstorming different ideas. On a previous mobile team I printed and laminated this mind map to bring along to every planning session to help remind me to ask questions like, “What about accessibility? Automation? Security? or Performance?”:

As I go through exploratory testing (or pair testing), I’ll tick things off as I go and take session notes. Often this will involve having conversations with people, sometimes bugs are raised. 
Here is a quick mind map I’ll use for log in testing:

Heuristics for testing

This mind map approach can be combined with a heuristic test strategy approach or a nemonic test approach. Heuristics is a rule of thumb that helps you solve problems, they often have gaps because no mental model is perfect.

SFDPOT is a common nemonic that was developed by James Bach; who also developed Rapid Software Testing; a context driven methodology. James Developed his RST course with Michael Bolton

In SFDPOT each letter stands for something that is meant to help generate testing ideas, they are; Structure, Functions, Data, Platform, Operations and Time. Here’s someone’s blog on applying SFDPOT to a mobile app testing approach.
I tend to use all of these different approaches as part of my exploratory testing practices.

More resources

If you are interested in reading about exploratory testing Elisabeth Hendrickson has written this book called Explore It!, reduce risk and increase confidence with exploratory testing. Elisabeth also has this nightmare headlines game which is a fun tool for brainstorming potential error cases.

Your team could also go through the process of creating your own nemonic/mindmap to help you have consistency across different testing styles, maybe something that made sense for your context? 

You could also use mindmaps to feed into the different feedback loops you’d like to have in your team. You can read more in this mobile test strategy blog.

Categories
Agile Critical Thinking Mobile Testing Software Testing Technology

Visual Risk & UI Automation framework

Have you wanted to start with automation testing and not known where to begin? Or maybe you have 100’s or thousands of test cases in your current automation pipeline and you want to reduce the build times. Here I will walk you through one way you could consider slicing up this problem. Using examples from Tyro’s banking app (I use to work on their mobile iOS team).

Break into flows

Analyse your app/site/tool and brainstorm the main flows that people will take through it. I picked 6 flows using tyro as an example app. Next I numbered them.

1. Registration

Registration is a pretty common feature, you might also set a 2 factor authentication, a pin and a password for the account (especially if it’s a bank account)

2. Transfer Funds

If you have a bank account, it’s highly likely you want to access the money in it at some point

3. View Transaction

You might want to check if that bill was paid correctly or if the last transfer was processed

4. Contact Us

Something not quite right? send us a request and we will give you a phone call at a convenient time

5. Change Pin

When was the last time you changed the pin for your mobile banking app?

6. Log in

I’d say this is a pretty common feature

Mapping those flows to a risk board

Draw a graph, put frequency of use on the x axis down the bottom; things that are more used will be on the right hand side. On the vertical y axis put impact if broken. This is from a person point of view, how much would they care if that feature was a broken? From a business point of view you may have a different understanding of risk and that’s fine two. We will go into how to reflect that later.

Add your flows

We have our 6 flows to the right hand side of our graph, we’ve also broken our graph into 3 areas

Move the flows to your graph

It helps to pair on this exercise to help build up a shared understand. Do your designers and engineers have the same understanding of risk as you do? It’s ok if your answer is different to mine, we all have a different context and understanding.

Reflect other elements of risk

You might want to reflect other elements of risk such as security, financial, regulatory and anything else you can think of. At the end of the day this is only a 2 representation of risk and risk is a little more complex than these dimensions we put here.

Neat, what’s next?

If you are thinking, well that’s cool and all but what does that have to do with automation testing? Then please continue reading. You could use this board to decide which tests you should focus on building/refactoring next (hint, the stuff with 3 stars is pretty important). You could also use this to priortise your performance testing efforts. I took this board to our planning sessions to talk about new features and it helped with deciding how much automation/testing effort we may need. At the end of the day, your software will be more complex than this example.

Here is the actual board I used at Tyro with a bit more detail:

I then broke down each flow into a test case, and grouped similar test cases into a barebones automation test suite. You can also use this approach to generate exploratory testing ideas for each screen in your flow.

You can watch this talk in full here:

I also run this as a lunchtime 30-45 minute workshop exercise. Book me in for a lunchtime brownbag if you are based in Sydney (I can do remote too).