Friendly TesterJekyll2020-10-11T12:12:38+01:00https://thefriendlytester.co.uk/Richard Bradshawhttps://thefriendlytester.co.uk/blog@friendlytesting.comhttps://thefriendlytester.co.uk/2019/10/selenium-conference-keynote2019-10-27T00:00:00+01:002019-10-27T00:00:00+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>Seven years after attending my first conference, I just keynoted at that conference.</p>
<p>In 2012 I attended my first ever software testing conference, Selenium Conference, London. It was the start of an epic journey for me. Prior to discovering that conference I didn’t even know folk got together to talk about testing. Seven years on and I’ve been involved in over <a href="/events">85 events</a>, as a speaker, instructor, keynoter and organiser.</p>
<p>At the start of this month I had the privilege of keynoting at Selenium Conference, my keynote was titled ‘Redefining Test Automation’. This talk has been seven years in the making and it was so fitting to deliver a new version of this talk at Selenium Conference, where it all started.</p>
<p>The talk was recorded and added to <a href="https://www.youtube.com/watch?v=uIDvGzQdoxc">YouTube</a>, love to hear your thoughts on the talk.</p>
<p><a href="https://thefriendlytester.co.uk/2019/10/my-selenium-conference-keynote">My Selenium Conference Keynote</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on October 27, 2019.</p>https://thefriendlytester.co.uk/2019/06/sacred-whiteboard-testing2019-06-30T00:00:00+01:002019-06-30T00:00:00+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>After a long while I’ve finally recorded a new Whiteboard Testing video!</p>
<p>For those that haven’t seen it before, <a href="https://www.youtube.com/channel/UC0QZWhi0ojqNte3ey7RD0qQ">Whiteboard Testing</a> is a YouTube channel I created to host sub ten minute videos on software testing/quality utilising a whiteboard. We’ve had over 63,000 views on the videos!</p>
<p>This video is about my mnemonic S.A.C.R.E.D which I created to assist in teaching others about all that’s needed to create deterministic and stable automated tests/checks.</p>
<div class="centerplugin">
<iframe width="560" height="315" src="https://www.youtube.com/embed/z9m_yZMswOQ" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
</div>
<p><br /></p>
<h2 id="s---state-management">S - State Management</h2>
<p>All about managing the state of the application. This includes deploying the system, configuring it, setting feature flags and of course setting up all that important data!</p>
<h2 id="a---actions">A - Actions</h2>
<p>The actions you need to take to trigger the specific behaviour of the system. This could be clicking around a UI, filling in fields or waiting for elements. Or, this could be calling APIs with specific data in a specific order.</p>
<h2 id="c---codified-oracle">C - Codified Oracle</h2>
<p>Those familiar with exploratory testing with be familiar with oracles, those that aren’t, it’s how we detect problems. Triggers to asks ourselves, is there a problem here? We have thousands of them in our heads, however, in an automated check we tend to codify one of two of them, known as assertions. They are really important to get right, to maximise the value we get from our checks.</p>
<h2 id="r---reporting">R - Reporting</h2>
<p>The reporting takes on two forms in SACRED. The first is for reporting the results of your checks. Do you need to hook into a CI, a test management tool or something like Slack? The second side of reporting is getting your automated check to report as much as possible about failures to you. Such as log files, screenshots and decent error messages.</p>
<h2 id="e---execution">E - Execution</h2>
<p>Where are your checks going to be executed? Have you designed them to work there? We often focus on getting them working on our local machine and overlook where thwy will finally be executed. This triggers us to think about this.</p>
<h2 id="d---deterministic">D - Deterministic</h2>
<p>The goal! Automated checks need to be deterministic, they should do exactly the same thing over and over again. Pair that with a fantastic codified oracle and you should have a really valuable automated check.</p>
<p>I’ll be writing about each letter in more depth on the <a href="https://automationintesting.com">Automation in Testing</a> blog in the near future.</p>
<p>If you enjoy the video, consider subscribing to the channel.</p>
<p><a href="https://thefriendlytester.co.uk/2019/06/new-whiteboard-testing-video-sacred">New Whiteboard Testing Video - S.A.C.R.E.D</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on June 30, 2019.</p>https://thefriendlytester.co.uk/2019/06/how-I-use-twitter2019-06-24T15:00:39+01:002019-06-24T15:00:39+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>Twitter, a beautiful flourishing meadow, full of discovery and things to admire. Tweet, tweet, compliments the summer rhymes bopping around my head. A very pleasant place.</p>
<p>Twitter, a rubbish dump, with mechanical diggers pushing around the same waste, drowning me in shit. A stench so vile at times, my only option is to run.</p>
<p>I joined Twitter in October 2010. My first step in discovering other professionals and communities outside of my employer. Twitter was where I discovered Rosie Sherry and what then was the Software Testing Club. I met other testers and read my first few blogs, which inspired me to write my own. I started to gain followers. I’ve got jobs from Twitter. Training opportunities. Speaking opportunities. It’s an incredible platform for connecting with many people all at one time.</p>
<p>It’s not all been rosy though. I’ve seen a lot of hatred on Twitter, aimed at people I know well, aimed at me at times, even Ministry of Testing. I’ve seen pointless debate after pointless debate, I’ve even taken part in a few of them, pointless. I’ve seen people jump on the tiniest difference to their world view without any regard for the person behind the tweet. It’s can be rather unpleasant at times.</p>
<p>However, nine years on, I’m still using Twitter, that’s because overall I feel my seesaw is tipping into the meadow side more often than the dump. I was reflecting on this the other day after seeing someone announce they were leaving Twitter, so I asked my self why do I stay. I answered a lot of questions I posed my self and thought let’s share these and start a conversation about how and why folk use Twitter.</p>
<p>Let’s get the negatives out the way, so we can end on a high.</p>
<h2 id="three-strike-rule">Three Strike Rule</h2>
<p>My feed is my feed. Apart from when Twitter plays around with the sorting algorithms! But what I mean is, I’m in control of the people’s content I see. Therefore if I read something that makes me uneasy or uncomfortable, I unfollow those people. I tend to give folks three strikes, after that, bye.</p>
<h2 id="mute-and-block">Mute and Block</h2>
<p>Sometimes unfollowing isn’t enough. When you’re following a lot of people the chances of seeing those people via others retweets and comments are high. Therefore I take advantage of muting and blocking. Muting folk on Twitter means you still follow them, but you won’t see any of their activity in your timeline. The best bit about it though is folk won’t know you’ve muted them. Blocking on the other handle provides the same benefits but the person is able to see that you’ve blocked them. I tend to mute more than I block.</p>
<h2 id="avoid-debates">Avoid ‘Debates’</h2>
<p>I hate the world debate, but it comes up a lot on Twitter. Let’s have a debate! Does the person want a debate? But they tweeted publicly, so they must! It doesn’t work like that! Debates on Twitter suck, people don’t want them. People want to share great content, ideas and thoughts (more on this later). Why would anyone want to have a debate 220 characters at a time? I avoid them, there’re many better platforms and mediums for debate. I digest and respond. If I disagree with something I read, I don’t have to reply. If I do decide to reply, I try to be respectful. Appreciate the person and their work, and state that it triggered some useful thoughts, if they inquire about them, share them in some form, if not, I carry on.</p>
<h2 id="information-radiator">Information Radiator</h2>
<p>I described Twitter using this term once to a room full of students, but it is how I see Twitter. There are a billion things to be aware of and try to keep on top of in the world of software development, and the world for that matter. Twitters allows me to control my own vast information radiator tailored by who I decide to follow. I personally utilise Tweetdeck when at my computer. It allows me to have columns for multiple accounts I have access to, keywords, DMs and of course those notifications. But when I have the time (more on this later) I can glance at Twitter and promptly digest multiple things. Where I don’t have time to read right now I mark them to read later via Slack reminders. I’ve encouraged many folks to just use Twitter as a radiator and don’t tweet/reply at all, but the content can be that good.</p>
<h2 id="variety-of-information">Variety of Information</h2>
<p>I follow a whole heap of people, companies and tools on Twitter. This means my feed tends to be full of variety. I follow developers, testers, security experts, tool vendors, UXers, tech influencers, browser vendors, news channels, sports terms and even the odd comedian. If someone shares one thing that you find valuable, give them a follow. You’ll notice if that value disappears, then you can simply unfollow. This rapidly increases my chances of seeing something that brings me joy.</p>
<h2 id="if-this-than-that">If This Than That</h2>
<p>Twitter doesn’t have a read later option, I wish it did. So, I used to take advantage of IFTTT and utilised a recipe for pushing favourited tweets to Trello. This quickly got out of hand, because I often favourite tweets to support offers, or as a sign of appreciation if a tweet made me laugh. But it’s worth considering a solution like IFTTT to remember to check something out.</p>
<h2 id="sharing-content">Sharing Content</h2>
<p>I love creating content, and when I go to the effort of creating content it makes sense to share it, Twitter is a great place for sharing content. A few retweets can generate many clicks, many replies, many likes and gives you a nice buzz. That buzz can be bad though, many times I’ve opened Twitter just to see if a post has any more likes/RTs, that’s not healthy, I’m trying to avoid doing that these days. Maybe I’ll do it for this post though, it would be fitting after all :). Buzz aside though, it gets your views and opinions read, and usually results in some feedback being offered, which I digest, reflect, and no doubt will use in future content.</p>
<h2 id="marketing">Marketing</h2>
<p>The above applies here, I’ve built up a great following on Twitter so it’s a great place for me to market some of the initiatives I’m up to. Things like training, upcoming conference talks and things we’re up to at MoT. Again with the set up of Twitter, a few RTs could get your thing seen by many people who don’t follow you. RTing is a powerful tool.</p>
<h2 id="boosting-others">Boosting Others</h2>
<p>The large following I’ve built up is a great tool for boosting others. This could be sharing their content, or my personal favourite is boosting questions so the original posters get more answers. Those answers usually also mean they get followed and can have future interactions without needing a boost. More importantly, it feels awesome, it’s a 2-second action that could make a huge difference to someone. I know this from the story of <a href="https://ministryoftesting.com/dojo/series/the-ministry-of-testing-scholarship/lessons/emma-s-scholarship-story">Emma Keaveney</a>.</p>
<h2 id="showing-appreciation">Showing Appreciation</h2>
<p>A retweet or a like can make a real difference to the original poster, if you read something you enjoyed, share it or like it. The like button for me is the Twitter equivalent of a thumbs up. Or depending on the context of the tweet, a virtual hug.</p>
<h2 id="real-time">Real-time</h2>
<p>I like the real-time interaction of Twitter, and I tailor my interactions based on that. If I seeking more interrogation of my content or ideas, I turn to other mediums like my blog or <a href="https://club.ministryoftesting.com">The Club</a>. I also find it easier to do the odd thread on Twitter when inspiration hits, without having to go to the lengths of a blog/club post.</p>
<h2 id="smiles">Smiles</h2>
<p>Twitter regularly brings me joy. Some people’s gif game on Twitter is another level. A recent rule I adopted, some of you may have noticed it, if a tweet makes me laugh, I RT it. If it made me go, damn I didn’t know that, I RT it. If it tugs on my emotions, I RT it. There is a lot of good things on Twitter, you just need to tailor your feed to see it.</p>
<h2 id="time-sync">Time Sync</h2>
<p>Twitter can be a time stealer. I regularly have Tweetdeck open on my second monitor and glance at it far more times an hour than I should. It’s taken me a while to identify this, and I now close Tweetdeck when I need to focus, this has made a vast improvement to my focus. However, other days, I’m really happy that I left it open because fantastic content came my way.</p>
<h2 id="summary">Summary</h2>
<p>Overall Twitter has had a very positive impact on my career and life. It needs managing though, you need to make sure the tool is working for you, and change it if it isn’t. There are thousands of people sharing incredible stuff all day long. I’m continuously shifting my balance to ensure I’m in the meadow and not the dump.</p>
<p>Sometimes that balance is way off and I simply close it. Other times I’ve got more information than I know what to do with.</p>
<p><a href="https://thefriendlytester.co.uk/2019/06/twitter-and-me">Twitter and Me</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on June 24, 2019.</p>https://thefriendlytester.co.uk/2019/05/muddled-thoughts-on-bug-prevention2019-05-26T15:00:39+01:002019-05-26T15:00:39+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>Some muddled thoughts on bug prevention. I agree we can prevent them, but I still feel muddled whenever I think about the idea of prevention. An attempt to try and order my thoughts.</p>
<h2 id="can-we-prevent-bugs">Can we Prevent Bugs?</h2>
<p>Yes. Folk in software development are doing this all the time. In some cases the prevention is clear, however, in the vast majority of cases, I feel you’d never know. But it happens, you’ve prevented bugs and you’ll prevent many more. However, being able to say with confidence that we prevented a bug is where my brain starts to get muddled.</p>
<h2 id="what-is-prevention">What is Prevention?</h2>
<p>When I hear the word my brain says ‘stopping something happening’, so in the context of testing and bug prevention, I think ‘stopping bugs from being coded’. We could, and probably should, also include preventing users from discovering bugs. Muddle, now I’m left thinking in order to do that I must first find a bug. In the case of stopping it from being coded perhaps I discover a bug in someones thinking, a spec or a story. With regard to the customer, perhaps I find a bug while testing before shipping, or I find the bug in production before the customer is aware and we can address. In all those situations I start with a bug, in order to prevent a bug. Muddles.</p>
<h2 id="prevention-from-detection">Prevention From Detection</h2>
<p>I guess thinking about what a bug is to me will help with my muddles. I align with Jerry Weinberg’s definition, ‘a bug is something that bugs someone who matters’. Who matters? My stakeholders. Who are they? They vary on the context, but for this post lets go with the team and the customers.</p>
<p>So my muddles tell me that prevention comes from detection. We detect something that bugs someone who matters and therefore we change our approach. That something is information/knowledge. In <a href="https://mysoftwarequality.wordpress.com/2016/05/05/testers-prevent-problems-every-day/">this post</a> by Gus Evangelisti, he gives an example of ECB stopping the printing of the €500 bill due to its use in money laundering and terror financing. Gus encourages us to imagine Larry the tester being in the room;</p>
<blockquote>
<p>“Larry the tester – Let’s imagine that Larry, a tester, happened to be in the room where people where deciding the denominations of the euro notes. Let’s imagine he said “Hang on lads, this could be a problem as it would be easy to conceal large sums of money and smuggle them. Banknotes this valuable might help illicit traffic, should we stop at 200 or maybe even at 100?<br />
Let’s assume there were smart people in the room that decided to take the objection into consideration, made research to prove its validity and as a consequence decided not to print the 500 euro notes.”
– <cite>Gus Evangelisti</cite></p>
</blockquote>
<p>If we do as Gus suggests and we assume the people listen, we can say that Larry’s actions found a bug. Larry’s actions caused the people to find a bug in their current thinking. It was that bug, that led to the people gathering more information and deciding not to print the €500 note. Detection of a bug led to the prevention of another, the latter with significantly more impact in this case.</p>
<p>However, I do feel that we can’t 100% say that the potential bug of it being used for laundering would ever happen, however, based on information and research we can claim the probability is high. For example, let’s assume the note being used for laundering before the €500 was the €200, and they were laundering money in the millions, the chances of them moving to the €500 note and having to carry 60% fewer notes would be rather appealing.</p>
<p>Knowing you definitely prevented something is what I struggle with. Does it matter though? Do we need to know? Probability could be more than enough.</p>
<p>Historical information could also be a good place to look to confirm prevention. Example, before we started doing TDD we saw lots of bugs like A, since we started doing TDD we’ve seen very few A bugs, therefore you could suggest TDD has prevented many more A bugs. Or comparison to similar companies; Company A were considering doing ABC, however, Sarah the tester revealed some information that led to them stopping ABC. Company B recently did ABC and have since lost $100m, did Sarah prevent company A from the same outcome?</p>
<p>In all the examples I can think of though, there is still some form of detection that leads to questions and information gathering, which changes the approach taken.</p>
<h2 id="prevention-without-detection-good-practices">Prevention Without Detection, Good Practices?</h2>
<p>I thought of some other examples, good practices.<br />
You’re on a greenfield project and exploring ways to work. There is no historical data specific for this project, but there are community and personal experiences for specific techniques. We haven’t detected anything that has led to us taking action to prevent a bug, instead, we are calling on our experiences and good practices to form an approach we believe will prevent bugs. Such teams also wouldn’t just take said good practices, they would take them and mould them to their context, increasing the chances of them having a positive impact on the team and the goal of prevention.</p>
<h2 id="dangers-of-prevention">Dangers of Prevention</h2>
<p>Nothing lasts for ever though. While your current approach to prevention might be yielding results, it eventually may not. Therefore we should always be looking for new ways to increase our detection of valuable information. You could ask, ‘why didn’t we prevent this bug?’. Such a question should lead to reflection, the asking of questions, the gathering of information and subsequently a change in approach, which will hopefully lead to better prevention. With prevention being rather difficult to measure, such root cause analysis could be vital. On top of that, we should also be looking at other companies, what are they doing that is working for them, could it help us?</p>
<h2 id="focus-on-information-over-bugs">Focus on Information Over Bugs</h2>
<p>I feel focusing on information leads to a higher chance of prevention. Teams need to be sharing information more, especially the information gathered from skilled testing. Be it the testing of software or people’s ideas. I’ve experienced this information being regurgitated as bug reports and stored in some tracker to die more times than I care to accept. Share the information, ask questions, lets those answers lead to others asking questions, others gathering information; information changes the way we work. Do I care I prevented some bugs, maybe, but not as much as seeing my actions (information highlighting/gathering) impact our ways of working or the direction of a feature for the better.<br />
I’ve had some great results from adopting Session Based Test Management (SBTM), because after each session I share my information with my team, increasing the teams tacit knowledge, that usually as mentioned above leads to others asking questions/seeking information. However, when I use to go straight to logging bugs, so much of that information was lost or was revealed way too late to have an impact on prevention.</p>
<h2 id="measuring-prevention">Measuring Prevention</h2>
<p>Can you even do this? Why would we bother? If we could, would it be helpful?<br />
Decided to leave this in, as it may trigger some thoughts from others. My current thinking is all around how things were to how things are now, but I feel it would be difficult to map how things are now directly to the preventive actions we took, so many variables.</p>
<h2 id="celebrating-detection-instead-of-prevention">Celebrating Detection Instead of Prevention</h2>
<p>I’ve never quite found the words to explain this very well, but let me give it another shot. I’ve heard and read people celebrating the prevention of a bug. Preventing a bug is great and worthy of celebration, but I feel the detection of the information that led to the change in approach is more worthy of celebration. The fact someone asked a question, spoke up, introduced a new process, a new technique, created that automated check and so forth, celebrate those things. Celebrate you are continuously learning, continuously adapting and working as a great team.</p>
<p>I want to see people celebrating the detection, the skills used there and then, instead of celebrating what may or may not have been prevented.</p>
<h2 id="conclusion">Conclusion</h2>
<p>I’ve certainly ordered some thoughts, not all of them. But I enjoyed pondering bug prevention. I clearly care more about the journey than the outcome, I care about information sharing and seeing that information being used. Those usages lead to a whole host of great things, of which one is bug prevention. I want to continue to work on new ways to unveil information, confirm information and share information. I feel rapid discovery and digestion of this information leads to better software.</p>
<p><a href="https://thefriendlytester.co.uk/2019/05/muddled-thoughts-on-bug-prevention">Muddled Thoughts on Bug Prevention</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on May 26, 2019.</p>https://thefriendlytester.co.uk/2019/05/what-will-automation-look-like-in-ten-years2019-05-09T22:50:39+01:002019-05-09T22:50:39+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>I asked on Twitter what I should write about next, the second response was from RangeTester…</p>
<blockquote class="twitter-tweet tw-align-center" data-partner="tweetdeck"><p lang="en" dir="ltr">How you imagine automation in 10 years</p>— FreeRangeTester (@RangeTester) <a href="https://twitter.com/RangeTester/status/1126422822564143106?ref_src=twsrc%5Etfw">May 9, 2019</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>This a tough question, usually the type of question I avoid answering because it’s impossible to know where it will be. However, I feel like indulging the question and having some fun trying to answer it. So, given the domain we are in, I’ve assumed the question was about automation in the context of testing.</p>
<h2 id="state-of-play">State of Play</h2>
<p>For me, there is only one place to start with this question, what does automation look like right now? This question I can answer, but in doing so, it reveals a huge gulf, a gulf that is probably about ten years in the making! There are still many teams who don’t utilise automation at all, some genuinely don’t need to, and others that just haven’t been able to get going for one reason or another. Then at the other end of the scale we have teams who’ve adopted continuous deployment and are running thousands of automated checks on all layers of their application umpteen times a day. Then, of course, they are teams who have thrown some AI magic into the mix, but we’ll get to that.</p>
<p>However, I feel the majority of teams sit somewhere between these two points on the scale, with a large proportion of them having some form of continuous integration with thousands of UI and API automated checks.</p>
<p>However, such scales have little value in my opinion, as software development is very contextual, so many factors impact your testability, so to say one end is the pinnacle, or more mature (our industry loves a maturity model) doesn’t really progress the use of automation. However, I think everyone is in agreement that rapid feedback is a must, and that is what all the teams are striving for.</p>
<h2 id="future">Future</h2>
<p>The future for every time is to make rapid more rapid, so let’s procrastinate and predict how teams may be able to do this in the future.</p>
<h3 id="automating-on-many-more-layers-and-seams">Automating on Many More Layers and Seams</h3>
<p>I feel we are finally dropping our industries obsession with the GUI, and automating everything on that layer. I’ve seen a sharp increase in API automation, through demand for training, but also in community activity on the topic. Then we’ve seen vast improvements in visual testing tools and javascript testing tools in recent years, I only see them getting better and better. Many teams have already added these tools to their tool belts and many more have plans to do so, so first and foremost, I see a steep increase adoption of these tools and teams automating on more seams.
I spoke about this in my recent talk at SauceCon, you can watch it on <a href="https://www.youtube.com/watch?v=83aHKC5C14Q&list=PL67l1VPxOnT5PZQ1r60wQoT2UPDk1of4z" target="_blank">YouTube</a>.</p>
<h3 id="self-healing-automated-checks">Self-Healing Automated Checks</h3>
<p>We have these already, I believe <a href="https://testim.io" target="_blank">testim.io</a> were the first to work on this problem and have a great working solution out there right now. I only see such tools increasing and becoming more sophisticated. However, with the previous section, these tools are going to have to move this healing to other seams, as I predict teams will be writing less UI automation and will start looking for tools that can help heal other layers.</p>
<h3 id="state-management">State Management</h3>
<p>This is by far the most important thing you can automate IMO. Such automation supports automated checks and exploratory testing, and I even heard stories of support teams utilising such automation to replicate live issues. If you’re not familiar with the term it’s automating things like deployments, date creation, config flags, being able to programmatically control your application so you can proceed to manipulate it through testing. With the increase in frameworks to support testing on different seams our solutions for state management need to evolve with them. If you’ve created code to manage data in Java for your UI scripts and have decided to add some API automation in JavaScript, you don’t want to recreate that state management code in JS, that would create waste. One way I’m combated this is by utilising a protocol most languages support, HTTP. Take that Java code and add an API above it, allowing you to utilise the same code across all your testing frameworks. So, I expect to see a surge of tools around state management in the coming years, and I imagine many of them will try and utilise AI in form or another. How are you currently managing state?</p>
<h3 id="analytics">Analytics</h3>
<p>I wasn’t sure what to call this section, but basically, I’m thinking about tools that provide us with analysis of our development, live system and automated checks. These tools would just sit there running in the background guiding us as to where they believe we need to take a closer look. Let me paint the picture. I built a tool to do this a few years back, but never progressed the idea.</p>
<p>You have a model for your system and development, for ease let’s say it has eight sections, and we utilise tags to map to those sections. We then tag everything to those sections. Commits, automated checks, exploratory testing sessions, stories, features, production analytics, support tickets, bugs I’m sure you can see where this is heading. The tool then processes all this data and using some weighting decides if further work is needed or it thinks we are covered. Let’s say we commit 50 changes in a section that has little automated checks and we’ve done no exploratory testing sessions, but according to the analytics it is used by 90% of our users, as a team, we may want to have a look into that area to see if we are happy. It could be a two-minute investigation or could result in some more in-depth testing. But I envisage such a tool ticking away supporting our testing efforts with little prompts and nudges. Just for clarification, I’m not saying we solely rely on such a tool, it would play a supportive role.</p>
<p>Does this make sense, would you utilise such a tool?</p>
<h3 id="low-hanging-fruit-ai-generated-automated-checks">Low Hanging Fruit AI Generated Automated Checks</h3>
<p>‘We use AI’, how? ‘We use AI’, where, for what? AI AI AI AI AI!
This is the current state of AI in my opinion, lots of talk about AI, but little evidence. One major exception I see is <a href="https://twitter.com/jarbon" target="_blank">Jason Arbon</a>, the CEO of <a href="https://test.ai" target="_blank">test.ai</a> who is very public with his companies use of AI, and also have a vast background in testing and that shows with the way he talks about the future involvement of AI.</p>
<p>Jason in a recent conference talk mentioned that it wouldn’t be until 2027 when AI was able to contextual computation. Now I haven’t seen the talk, just the <a href="https://www.linkedin.com/feed/update/urn:li:activity:6532019229951176705" target="_blank">slide his posted on LinkedIn</a>, however, my thinking around AI with regard to automation is how it would be able to understand the context of the system, especially the domain knowledge to perform ‘human-like’ testing. I should just Jason he has far more knowledge in AI then I do, but I don’t think it will happen in ten years, but I do see a sharp increase in the low hanging fruit category. Many tools already offering it, but when I say sharp increase I’m referring to teams actually utilising such tools.</p>
<p>The majority of these tools I’ve read about or had demoed to me are basically advanced crawlers. They’ve been taught how to navigate a website and are looking for common web issues; broken links, console errors, broken images and so forth. The difference I’ve seen in some of them is they are capable of filling in basic forms and trying common flows. For example, if it detects there is a shopping cart, it will see if it can work out how to add something to the cart and buy it. Contextual to the domain, but not to the business and it’s that business context that I feel will take a lot longer to achieve, if ever.</p>
<p>But I see lots of companies adopting the low hanging fruit tools, why wouldn’t you? If you could just have it running continuously looking for things it believes to be wrong and pinging them to you to investigate it could provide lots of value. Especially if it truly learnt as you acted upon its data. Again though, this should never be an approach to testing, but a tool to support the team.</p>
<h3 id="the-exploratory-testing-bot">The Exploratory Testing Bot</h3>
<p>I’ve wanted to build this tool for a long time, but I simply don’t have the skills or the money to pay someone else to do it! But I believe someone else will build it eventually. But the idea is a bot that supports your testing efforts. It is observing you as you test, observing the system, the logs, previous testing sessions and processing all that to offer you guidance. ‘Richard you tested something like this in December and found a bug by exploring A, perhaps try that here?’, ‘Are you stuck for test ideas Richard, I see a form, perhaps try Too Big Too Small heuristic?’. Again, a tool offering guidance. I’d also code it to make other things easier for me, such as ‘record me’, ‘take a screenshot’, ‘get me that log’ these things are possible now, but I believe frameworks and libraries will be written to get such tooling into more companies.</p>
<h2 id="summary">Summary</h2>
<p>I could go on, but I’ve realised my own theme, and it’s the theme me and Mark Winteringham talk about within <a href="https://automationintesting.com" target="_blank">‘Automation in Testing’</a>, human-centric automation, that truly supports testing. I don’t see anything coming along that we can just point to an application and it does all the testing and says yay or nay, but I do expect to see a huge increase in tools that we can point and play and have them offer suggestions for us to explore further. Then a suite of tools that increase testers (someone wearing a testing hat) ability to test faster and smarter, by making things great testers do now more accessible to others.</p>
<p>I’d love for this to trigger some conversations, what do you think automation in the context of testing will look like in ten years?</p>
<p><a href="https://thefriendlytester.co.uk/2019/05/what-will-automation-look-like-in-ten-years">Crystal Ball - Automation in Ten Years Time</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on May 09, 2019.</p>https://thefriendlytester.co.uk/2019/05/how-you-leant-from-mistakes-and-from-successes2019-05-08T14:23:39+01:002019-05-08T14:23:39+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>I asked on Twitter what I should write about next, the first response was from Dennis…</p>
<blockquote class="twitter-tweet tw-align-center" data-lang="en"><p lang="en" dir="ltr">How you learned from mistakes and from successes?</p>— Dennis de Booij (@testinsideout) <a href="https://twitter.com/testinsideout/status/1126185068949643265?ref_src=twsrc%5Etfw">May 8, 2019</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>First and foremost, I know for a fact I haven’t learnt from every mistake, I imagine there are many occasions where I don’t even know it’s a mistake yet, and probably never will. In that same vein I’m probably not that great at identifying successes, I tend to be very hard on myself.</p>
<p>Regardless of success or failure, one thing I do a lot of is thinking, specifically reflection. I often sit and daydream post events; How did that go? Did I behave OK? Could I have done something better? What actions are needed next? What did I learn? Could others learn from it? These type of questions.</p>
<p>I believe reflection has got me to where I am, my studying of testing is mainly based on reflection. I want to say it was a drive to be better, but I don’t think it’s that, it’s a drive to understand, to understand why things went the way they did. Attempting to identify small things that could be improved, identifying the patterns and heuristics I used, my oracles.</p>
<p>Reflective thinking is a form of critical thinking, so I believe my relentless reflection has also honed my critical thinking skills for other activities, not to mention my love of puzzle games and sudoku! Reflection has allowed me to design triggers for myself, such as the ones I tweeted about not to long ago about trying to <a href="https://twitter.com/FriendlyTester/status/1111962966117793792">stop using certain words</a>. That came from me analysing a talk performance.</p>
<p>I know I should celebrate successes more, and perhaps my first step there is to work on identifying them, and accepting them. As a whole though, regardless of success or failure, I enjoying reflecting on what was, and aiming to improve myself each day. However, there has been occasions where I drown myself in reflection, mainly negative thoughts and get myself into a spiral I don’t recover from, I simply can’t see the positives.</p>
<p>My awesome partner got me a gift recently to help with that, which I’m not utilising, it was this <a href="https://www.amazon.co.uk/LUX-Productivity-Planner-Brown-Reflection/dp/B0771YBLQK/ref=sr_1_3?crid=204D89I1ZAI66&keywords=productivity+planner&qid=1557340009&s=gateway&sprefix=product%2Caps%2C145&sr=8-3">productivity planner</a>. The goal being it provides me a structured format, I like structure. I need to use this more!</p>
<p><img src="/images/blogpostimages/2019/productivityplanner.jpg" alt="Picture of pages from the productivity planner" /></p>
<p><strong>Edit</strong>: Perhaps this post is one of those times to appreciate success, I haven’t posted on here since 16th July 2018!</p>
<p><a href="https://thefriendlytester.co.uk/2019/05/how-you-learn-from-mistakes-and-from-successes">How You Learn From Mistakes and From Successes</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on May 08, 2019.</p>https://thefriendlytester.co.uk/2018/06/using-automator-to-convert-pdf-to-images2018-07-16T14:23:39+01:002018-07-16T14:23:39+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>So, I’m currently editing some videos for a conference that Ministry of Testing sponsored, this is a great new initiative which I’ll write about on MoT soon. Now, I’ve never edited conference videos, but I’ve recorded and edited lots of training material for YouTube and The Dojo, so, I wanted to give it a go, to see if I can learn more about Camtasia and the process as a whole. I didn’t expect to find myself creating some awesome automation to help me, but I did!</p>
<p>Today I discovered, <a href="https://support.apple.com/en-gb/guide/automator/welcome/mac">Automator</a> on MacOS. I’d never heard of this before today, but it’s provided by Apple and it allows you to create your own little apps/batch jobs/workflows on MacOS by combining existing functions available in MacOS applications. If you have a Mac and never explored this tool, I encourage you to open it and take a look, you could create some really interesting workflows.</p>
<h3 id="pdf-to-images">PDF to Images</h3>
<p>I discovered this tool while googling a specific issue I was facing, which was converting speakers slides in PDF format to Images, so I can edit them in to the video. I knew I could export a page of a PDF to an image using Preview, however, it does one images at a time, not great when someone has 40+ slides! Lot’s of commercial tools came up in my results, but as this is currently a one of for me, I didn’t want to pay for something. Then I found <a href="https://www.alananna.co.uk/blog/2015/pdf-to-png-automator-script/">this post</a> explaining how it could be done using Automator.</p>
<p>I copied the instructions as per the post, it is as simple as dragging and dropping the functions you require, changing a few of the options and saving it as an application. I now have an app in my Apps folder called PDFToImages.app, which I can drag a PDF on to, it then opens a file dialog where I can choose where to save them, and boom, it does them all, and takes less time than it took for me to export a single page! Whooop! This is the kind of automation I love!</p>
<h3 id="final-app">Final App</h3>
<p><img src="/images/blogpostimages/pdftoimages/thefinalscript.png" alt="The final script in Automator" /></p>
<h3 id="future">Future</h3>
<p>I have another three talks to edit where the slides are in PDF, so this will provide me with a lot of value today. Not sure when I’ll need such a tool in the future, but that isn’t important. It’s saved me nearly 45-60 minutes today, plus I’m aware of a new tool that will be in my toolbox for future problems I may face.</p>
<p><a href="https://thefriendlytester.co.uk/2018/06/using-automator-on-a-mac-to-convert-pdf-to-images">Using Automator on a Mac to Convert PDF to Images</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on July 16, 2018.</p>https://thefriendlytester.co.uk/2018/06/speaker-rider2018-06-12T14:23:39+01:002018-06-12T14:23:39+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>It was April 10th 2018 at about 11pm, I was in Utrecht, the Netherlands for TestBash Netherlands. I was about to go to sleep when I decided to check Twitter, a habit I can’t seem to kick! I was expecting the norm, a few new notifications to check and to skim over the latest tweets. I got that, but I also had a DM from the awesome Julie Sharp directing me towards a tweet from <a href="https://thefox.is/">Karolina Szczur</a>, or <a href="https://twitter.com/fox">@fox</a> on Twitter. This was the tweet:</p>
<blockquote class="twitter-tweet tw-align-center" data-lang="en"><p lang="en" dir="ltr">Wow, this one is a true achievement.<br /><br />Congratulations on full lineup of 87 MALE SPEAKERS <a href="https://twitter.com/code_europe?ref_src=twsrc%5Etfw">@code_europe</a>!<a href="https://t.co/LWvBGdS2JF">https://t.co/LWvBGdS2JF</a></p>— 🇵🇱 fantastic ms. (@fox) <a href="https://twitter.com/fox/status/983806610093961216?ref_src=twsrc%5Etfw">April 10, 2018</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Julie had seen this tweet, checked the lineup and saw I was speaking there, I was one of those 87 men. I remember accepting this conference, it’s a developer-focused conference, something I personally want to talk at more. I have very <a href="https://twitter.com/FriendlyTester/status/890543166994214912">strong views on PayToSpeak conferences</a>, and they’d assured me all speakers would be reimbursed for travel and accommodation, so I accepted their invitation. They booked my flights, hotel and I added it to my calendar, I thought no more off it. A pattern I’ve taken with nearly every event I’ve spoken at. I tend to usually look at the rest of the programme while waiting at the airport on route to the event.</p>
<p>But upon seeing Karolina’s tweet, it was time for a change.</p>
<p>Firstly, there was absolutely no way I could attend that conference, such a line up goes against everything I believe and support. It doesn’t matter how much they may have tried, or speakers cancelling, the final result is something I can simply not support. So, I emailed them within 5 minutes of reading Karolina’s tweet so inform them I would no longer be attending.</p>
<blockquote>
<p>Hello,
This tweet was brought to my attention, I cannot support such a lineup. It goes against what I stand for, and what my company stands for.<br />
Therefore I’m withdrawing from Code Europe, please remove me from the speakers’ page ASAP.<br />
I’m more than happy to cover the cost of my flight if required, but I cannot attend the event with that lineup.<br />
All the best,</p>
</blockquote>
<p>They promptly actioned my request in the morning, I shared my actions on Twitter, and I have to say, was absolutely blown away by the response.</p>
<blockquote class="twitter-tweet tw-align-center" data-lang="en"><p lang="en" dir="ltr">I’m on that list. I’m most definitely not comfortable with that line up at all, nor is my company.<br />I hadnt even looked at any of it since accepting.<br />I’ve just emailed them to cancel my attendance, thank you for bringing this to attention.</p>— Richard Bradshaw (@FriendlyTester) <a href="https://twitter.com/FriendlyTester/status/983826283191824385?ref_src=twsrc%5Etfw">April 10, 2018</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>My first reaction was anger, followed by disappointment. How did I let this happen? Your name was on that conference page Richard, your company was on that page! I felt embarrassed. These thoughts came after cancelling my attendance, cancelling was a must, as a male speaker who cares about their craft, cares about inclusion, there was only one option, the right one. It was great to read a few replies later from some of the other male speakers cancelling their attendance. Post that though, I was really disappointed in myself, I stayed awake till 2am questioning my approach to conferences. I had to make some changes, and my <a href="/speaker-rider">Speaker Rider</a> is the first of them.</p>
<p>Before we look into that in more depth though, I want to say thank you to every single person that liked my tweet, quoted me saying really nice things about my actions and stance. Truly humbled by it. I was even quoted in a post by <a href="https://code.likeagirl.io/not-cool-bro-cb8a187b3da7">Better Alies</a>. I know I’m a better ally in the tech industry, I’ve tried to show this with my stance on PayToSpeak conferences, with how we organise our conferences at <a href="https://ministryoftesting.com/testbash">Ministry of Testing</a> and how I try to offer support to all. However, in this instance, I failed, and actions need to be taken to ensure it doesn’t happen again.</p>
<p>It was actually Karolina who introduced me to the term Speaker Rider in some of her responses to her own tweet. In my head, a rider was what celebrities asked for, and they tend to include things like ten white kittens, only orange smarties and a pink sofa. But, if you remove the celebrity mindset from it, it’s simply a list of demands in order to get their services. I was already doing that with my requirements on PayToSpeak, so it’s about time I made it formal, to try and avoid a situation like above happening to me in the future. I also hope it inspires others to take similar action, and we can improve the shape of future conferences.</p>
<p>You can read the full <a href="/speaker-rider">rider here</a>, it includes detailed breakdowns for each section. If you want the TL;DR though, it’s here:</p>
<ul>
<li><strong>Must have a Code of Conduct</strong></li>
<li><strong>Diverse Speakers</strong></li>
<li><strong>Not pay to speak</strong>*</li>
<li><strong>Fees for workshops, tutorials and keynotes</strong></li>
<li><strong>Workshop and tutorial max attendance is up to me</strong></li>
</ul>
<p><a href="https://thefriendlytester.co.uk/2018/06/my-speaker-rider-and-why">My Speaker Rider and Why It's Needed</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on June 12, 2018.</p>https://thefriendlytester.co.uk/2018/02/lauching-automation-in-testing2018-02-04T10:23:39+00:002018-02-04T10:23:39+00:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>I talk a lot about automation, I enjoy talking about automation.<br />
I read a lot about automation, I enjoy reading about automation.<br />
I think a lot about automation, I enjoy thinking about automation.<br />
I write a lot about automation, I enjoy writing about automation.<br />
I write a lot of automation, I enjoy writing automation.</p>
<p>The community seems to like the results of all the above. You share my talks, my blogs, my articles, my podcasts. I get listed on top testers to follow lists, you follow me on social channels, and you watch my short youtube videos. You all rock, you help fuel the fire, I appreciate every one of you.</p>
<p>Others have had similar journies to the one above, such as <a href="https://twitter.com/2bittester">Mark Winteringham</a>. A person who I’ve personally known for a while, and whose work on API/Web Services I’ve followed and shared for a number of years. Mark and I have also taught a class together over recent years called ‘Automated Checking Beyond WebDriver’. Throughout those years we started working a lot closer with regard to our efforts on automation, striking up a great partnership. It’s that partnership that has led to this, Automation in Testing.</p>
<h3 id="what">What</h3>
<p>Automation in Testing (AiT) is a namespace initially contributed to by Mark and my self. This is how we view it:</p>
<blockquote>
<p>Automation in Testing (AiT) is a mindset and namespace that promotes human-centric automation within the context of testing. AiT focuses on the strategy, creation, usage and education of valuable automation that truly supports our testing activities.</p>
</blockquote>
<p>Our goal is not to dictate or claim this is how it should be, we’ll let others continue to do that. It’s the complete opposite. Our goal is to create a collection of resources, use cases and training under the umbrella of AiT. Resources that can be referenced, that can inspire, can guide, can influence, but not dictate. We are not saying this is how it should be, we are saying here is what we think perhaps it can help you?</p>
<h3 id="why">Why</h3>
<p>Anyone who has read a lot of my work knows I take issues with the industries use of ‘Test Automation’, to me it’s become a synonym for automated testing. In my opinion, this is limiting people’s thinking around the use of automation, and how it can support their testing efforts. Therefore when I talk about my thoughts on automation that supports testing, using the word test automation muddles the water, so I personally need to use some others words, those words have ended up being ‘Automation in Testing’ since 2014.</p>
<h3 id="who">Who</h3>
<p>As mentioned already, it will be my self and Mark making this happen. We have independently developed similar thinking with regard to automation, but more importantly, the same with testing. We’ve been working together for a number of years so this is a great progression for us. We both have strong reputations in this space and I believe our views are respected by the community.</p>
<h3 id="how">How</h3>
<p>The two main methods will be through blogging and training. All our blogs about AiT will be posted over on the new AiT site, https://automationintesting.com. I’ve migrated my <a href="http://automationintesting.com/onlinecourses/">three free programming courses</a> to that domain and redirected the existing links. Mark has also added a new one, <a href="http://automationintesting.com/node/course/">Javascript/Node.js Basics</a>. We’ll also be presenting lots of AiT material at conferences around the world as well as through various online channels. We are also discussing setting up an annual peer conference solely focused on automation.</p>
<h3 id="when">When</h3>
<p>The hard work has been ongoing for a few years, but starting now is when you should all start seeing the fruit of this work.<br />
The first is our new three-day class aptly called ‘Automation in Testing’ which is having its inaugural class at <a href="https://ministryoftesting.com/events/testbash-brighton-2018">TestBash Brighton</a> in March and has already sold out! We didn’t expect this, so huge thanks to the attendees and all who helped share it.</p>
<p>So there we have it, Automation in Testing has a website, so it’s officially a thing. It’s all rather exciting if you ask me!</p>
<p><a href="https://thefriendlytester.co.uk/2018/02/lauching-automation-in-testing">Launching Automation in Testing</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on February 04, 2018.</p>https://thefriendlytester.co.uk/2017/08/three-free-programming-courses-for-testers2017-08-25T11:23:39+01:002017-08-25T11:23:39+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>Three Free is difficult to say! I’ve created <strong>three programming courses</strong> to support testers or anyone for that matter in their programming journey. They’re all text and code based, and available for free on this blog.</p>
<p>I’m calling them courses, as in a way they are. What they all are is a collection of structured posts in a logical order with the hope of teaching/informing people of things related to programming, that I believe are important. Some posts are just text, some are posts with code examples, and some are just text with links to code over in GitHub. All the code I’ve written I’ve heavily documented, and where possible I’ve added additional notes for the context of testing.</p>
<h3 id="why">Why?</h3>
<p>This started as a simple job of rewriting my Selenium WebDriver in Java course until I realised I’d inferred so much knowledge, that I thought a beginner would really struggle with this, especially someone with no knowledge of programming whatsoever. Which got me thinking further. I see an unpleasant pattern in software testing, which is the push to code. My view is simple, the more tools you have in your tool belt the better. However, there are only so many slots in someone’s belt, so choose which best suits your current roles or roles in your area. Now having said that, many testers are wanting to learn to code and turning to the internet to do so. Now, aside from a few exceptions, most notably Alan Richardson’s ‘<a href="http://javafortesters.com/page/about/">Java For Testers</a>’, a lot of the content aimed at testers wanting to learn to code starts with a framework, such as Selenium WebDriver. So they fire open an IDE they know nothing about, copy some code from a page, google how to run it, it works, they declare themselves all conquering and continue to build up from that example without understanding it, at all. Sweeping generalisation, I know, but I know it happens.</p>
<p>This, in my opinion, is leading to testers who know enough of a programming language to build an ‘automation framework’, based on scenarios framed by the framework, not the language, but have no idea why people design them the way they do. Or really struggle to talk about what they are doing or thinking. This is a common problem already with testers talking about testing, yet we are not learning when it comes to automation and code. I’ve used this example in talks, but a few years back I was interviewing for an Automator, mostly Selenium WebDriver in C#. During the interview I asked if they could explain Encapsulation and Abstraction to me, they declined and said they couldn’t. 5-10 minutes on in the interview, he explained how he would implement PageObjects for the example application I gave him. Page Objects… but can’t tell me what Encapsulation and Abstraction are? That is broken.</p>
<p>So I pondered a lot about what I should do about this. I have this problem for my own course but also feeling like it’s a wider problem. I also saw a post on Twitter saying that testers at their meet-up were desperate to learn to code but didn’t know where to turn to. Now, there is a lot of basic programming material out there, most of it free, but perhaps they weren’t looking outside of testing, I don’t know. In creating all this material I found loads, and have included links to them on each lesson. I want to say how awesome the BBC Bitesize material is on programming.</p>
<h3 id="what">What?</h3>
<p>So after the pondering, I decided on my approach. First, I wanted to make a programming basics course that was code agnostic. Covering common terminology shared by most languages, along with some more specific terminology relating to programming paradigms. My aim for this is to help people talk about their code and their thinking. Also to understand why some frameworks are designed the way they are, instead of just accepting it and proceeded to use it. Second, I wanted to create a Basic Java course which provided code examples of whats covered in the programming basics. So now we can talk about it, as well as implement it. This Basic Java also proceeded to 7 lessons on JUnit as I find it the easiest way for beginners to run their code, as well as three lessons on using IntelliJ. Finally where all this started, rewriting my Selenium WebDriver course.</p>
<h3 id="how">How?</h3>
<p>I reckon this has taken me 100+ hours to complete, this was a significant investment by me. Sure, I didn’t set out thinking it would take 100 hours, far from it, but it has done and I’m OK with that. I haven’t done this for money, I did it because I care about my craft and I want to support others on their journeys.</p>
<p>Overall <strong>there are 55 pages</strong>, many lines of code, and many external links to learn more from. This material is by no means polished, I’m not declaring what I’ve written is gospel, but I’ve done my best. In actual fact, I have huge imposter syndrome releasing this. The whole process has made me somewhat uncomfortable. However, it’s been very rewarding. I actually learnt a lot, realised some things I thought I knew all about, I knew nothing. Realised I knew a lot of things I couldn’t talk about. In the majority of cases was just a great refresher.</p>
<p>I’m not a good writer, or at least that’s what I tell my self. Others tell me I am. I make many mistakes when writing, spelling mistakes and a lot of time I throw some random words in there. So, these pages will be full of mistakes, so if you see some do feel free to point them out, or if you’re comfortable with GitHub, my <a href="https://github.com/FriendlyTester/friendlytester.github.io">blog is open source</a>, so you can go right ahead and submit a pull request. But please don’t just fire typos at me without anything positive to say about the content, I personally find it disheartening.</p>
<p>Content, if you think I’m missing something please reach out to me, or add a comment on the lesson or roadmap page for that course. If you think I’ve written something inaccurate or misleading, again please contact me or add a comment. Or as with the grammar, if you’re comfortable with GitHub just go ahead and submit a PR on my <a href="https://github.com/FriendlyTester/friendlytester.github.io">blog repo</a>.</p>
<h3 id="where">Where?</h3>
<p>A page for all my online courses is <a href="https://thefriendlytester.co.uk/training/online/">right here!</a>. Or individually with lesson breakdown:</p>
<ul>
<li><a href="/programming/course/">Programming basics</a></li>
<li><a href="/java/course/">Java Basics</a> which includes IntelliJ and JUnit</li>
<li><a href="/selenium/course/">Selenium WebDriver in Java</a></li>
</ul>
<h3 id="next">Next?</h3>
<p>I’ll likely record these classes as videos and add them to the <a href="https://ministryoftesting.com" target="_blank">Ministry of Testing Dojo</a>.<br />
All the courses have a roadmap page on them, I’ve asked people to submit requests on those and I’ve also added things I intend to add.</p>
<p>So there we have it. It’s finally live. I hope this provides some value to people and helps those who have decided to add automation/coding to their belt.</p>
<p>Many thanks</p>
<p><a href="https://thefriendlytester.co.uk/2017/08/three-free-programming-courses-for-testers">Three Free Programming Courses for Testers</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on August 25, 2017.</p>https://thefriendlytester.co.uk/2017/07/future-of-automation-reaction-from-alan-page-tweets2017-07-29T11:23:39+01:002017-07-29T11:23:39+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>So this is very fitting, I actually spoke to Alan last week, after he tweeted about a <em>BS</em> article. I said I’d always considered doing blog posts as reactions to other material, be it articles, blogs or tweets. Yet never got around to doing any. Until now.</p>
<p>Last night Alan shared his thoughts on the future of <em>test automation</em> and in particular the role of the <em>automation engineer</em> in an excellent <a href="https://twitter.com/alanpage/status/891113697313079296">twitter thread</a>. So I’m going to share each tweet in the thread and share my views on it.</p>
<blockquote class="twitter-tweet tw-align-center" data-lang="en"><p lang="en" dir="ltr">I probably should blog this next tweet stream, but fuckit - Twitter is a great place to write an outline....</p>— Alan Page (@alanpage) <a href="https://twitter.com/alanpage/status/891113697313079296">July 29, 2017</a></blockquote>
<script async="" src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>100% this. Twitter is a great place for this. This is one of the things I think Twitter is actually good for. Lengthy debates and elaborating on ideas, not the best place. Blogs, forums like <a href="club.ministryoftesting.com">The Club</a>, and voice to voice, be it online or face to face are much better suited.</p>
<blockquote class="twitter-tweet tw-align-center" data-conversation="none" data-lang="en"><p lang="en" dir="ltr">I read a few people say recently (I'd cite it, but I can't remember where) that test automation is the use of *any* tools to aid in testing</p>— Alan Page (@alanpage) <a href="https://twitter.com/alanpage/status/891113885008146434">July 29, 2017</a></blockquote>
<blockquote class="twitter-tweet tw-align-center" data-conversation="none" data-lang="en"><p lang="en" dir="ltr">Which I don't agree with, so for the purpose of this stream, define test automation as code that executes the system under test...</p>— Alan Page (@alanpage) <a href="https://twitter.com/alanpage/status/891114046883115008">July 29, 2017</a></blockquote>
<p>Now, I’m not looking for a debate about words here, I made my <a href="/2017/04/you-say-test-i-say-check-on-we-go.html">stance</a> on such discussions clear. I call this Automation in Testing (AIT), the use of automation in the context of testing. I’m not trying to be smart or clever by creating my own term for this, I’m using the term to aid my own thoughts on the topic of automation in software testing. As widely agreed, at least I believe it is, automation > automated checks/tests. It’s also going to be getting a lot bigger with more CI, CD, virtualisation, ML and AI in the future. For both automated checks and tools to facilitate testing. I’m working with <a href="https://twitter.com/2bittester">Mark Winteringham</a> to create an AIT namespace. Not to tell people how it should be done, or send them links to say <em>‘you’re wrong’</em> but to build up a body of material and courses on how Mark and I see it. I hope you’ll hear and read more of those in 2018. I’m excited about it.</p>
<p>I digress, apologies.</p>
<p>I would love for <em>test automation</em> to mean the use of any tools to aid testing, but it doesn’t. The term has been bastardised and tarnished over the years, in my opinion. Test automation in the wider software development space means automated checks/tests. I’ve had great conversations with early authorities in this space like Dot Graham and they’ve indicated they share the same view. But this is OK, it’s OK for it to have that meaning. It just means we need to explore alternative words, alternative thoughts to discuss other usages for automation. Hence my direction with AIT. Many will disagree with AIT, and I hope they do, because that’s going to aid us in having conversations about the use of automation, and hopefully move it forward.</p>
<blockquote class="twitter-tweet tw-align-center" data-conversation="none" data-lang="en"><p lang="en" dir="ltr">I have friends, both personal and virtual who are in a "tester" role and write test automation. It's also what a lot of testers aspire to do</p>— Alan Page (@alanpage) <a href="https://twitter.com/alanpage/status/891114377381675008">July 29, 2017</a></blockquote>
<p>I’ve been occupying such a role for the last 10 years. I consider the ability to code, and my understanding of automation to be some of the many tools I have on my belt. It certainly is what a lot of testers aspire to do, but I also wonder how many just want to be a <em>‘test automator’</em>?</p>
<blockquote class="twitter-tweet tw-align-center" data-conversation="none" data-lang="en"><p lang="en" dir="ltr">I feel strongly that the role of "test automator" will disappear in the near future. It's a job better suited for the product developers.</p>— Alan Page (@alanpage) <a href="https://twitter.com/alanpage/status/891114914055454720">July 29, 2017</a></blockquote>
<p>Now, in a recent talk I also said the role of a <em>‘test automator</em>’ will disappear, and also feel strongly about this. However, in my talk, I didn’t say it was better suited to product developers, although in the majority of cases they would do a much better job. My thoughts are centred around <em>‘toolsmiths’</em>, a role specifically designed to build tools to assist with software development. Those would be tools to support all the roles involved in software development. I intend to write more about this soon.</p>
<blockquote class="twitter-tweet tw-align-center" data-conversation="none" data-lang="en"><p lang="en" dir="ltr">I feel really strongly about this. 95% of the test automation needed on a product can, and should be done by the programmers of that project</p>— Alan Page (@alanpage) <a href="https://twitter.com/alanpage/status/891115118167154688">July 29, 2017</a></blockquote>
<p>Definitely. One of the best places I worked, we would explore the existing code and checks in the pre-planning meeting, once the room agreed on the understanding of the new feature we would make notes on the ticket about which checks may need re-work, deleting and which new ones would need adding. Now sure, it takes some testing knowledge to design such checks and make decisions on risk, but if you’re in the room, you can just lead such discussions, ensure all agree, then it doesn’t really matter who implements them does it? The other angle of this is that if the developers are writing these checks, these checks that have been agreed and discussed with the team, then you will get software that <strong>can</strong> work because there will be an agreed check already on CI <em>passing</em>. Allowing you do some further testing if required.</p>
<blockquote class="twitter-tweet tw-align-center" data-conversation="none" data-lang="en"><p lang="en" dir="ltr">There is, of course, a massive amount of testing work that can done via coding or tools. Stress, analysis, diagnostics, etc.</p>— Alan Page (@alanpage) <a href="https://twitter.com/alanpage/status/891115595764072449">July 29, 2017</a></blockquote>
<p>There is indeed, a huge amount. Again, I’m not writing enough, but I’ve spoken a lot about the distinction between reading and writing code. Reading code is a great source of test ideas and bug discovery. Even better if you read or create it with the dev. But yeah tools. There a lot of fantastic tools out there, I personally try to find time each week to try a new one. Performance tools, proxies, tools within IDEs, tools within SDKs, the plethora of tools in the virtualisation / DevOps space. It’s truly awesome. I’m always looking to add new tools to my belt. I don’t claim to be a master of them all, but I know they exist. Sadly though, I hear and meet a lot of testers who just stick to a single language and framework. Go explore others, fill that belt up. You’ll be surprised how much you can transfer from one tool to the other when you take the time to reflect on the skills you have.</p>
<blockquote class="twitter-tweet tw-align-center" data-conversation="none" data-lang="en"><p lang="en" dir="ltr">Any testing not done by the implementer(s) of the code requires people that can use, implement, and write these tools.</p>— Alan Page (@alanpage) <a href="https://twitter.com/alanpage/status/891116022194774016">July 29, 2017</a></blockquote>
<p>Definitely this. Again though, a huge difference between spotting opportunities for tools and implementing them. In recent talks, I’ve been sharing heuristics for spotting testability opportunities. I’ll write something in more depth on this soon. Another skill related here is what I call the education section of <a href="https://thefriendlytester.co.uk/training/legoautomation/">LegoAutomation</a>. Educating the team on the tools we’ve built, how they work, how to install them, who to talk to about improvements. The same for checks. Hopefully, all were in the room, so we know which were added and removed, but sometimes if you’re not in the room it’s important to share with the team what has been implemented, so there is a wider understanding of what a green build radiator actual means.</p>
<blockquote class="twitter-tweet tw-align-center" data-conversation="none" data-lang="en"><p lang="en" dir="ltr">Sprinkle in some data analysis, customer empathy, and systems thinking, and that's the future of test.</p>— Alan Page (@alanpage) <a href="https://twitter.com/alanpage/status/891116210321899521">July 29, 2017</a></blockquote>
<p>Ooooh, I do love me a bit of these things. Data analysis is big right now, and only going to be getting bigger. Testers have a huge role to play in designing and implementing such data capture, using our systems thinking skills. Then when we have a mass of data we need to be able to find interesting information from it. Looking for patterns, anomalies and traits to assist us with our testing decisions. Such data can support risk assessments, test design and test prioritisation. Also, not just data from the live system, data from our own development process. Looking for opportunities to improve quality earlier on.</p>
<p>Customer empathy is really important. I was really close to my customers in my first few testing gigs, my automation heavy period in the middle of my career I probably couldn’t have been further away, these days I always find the time. To clarify, customers to me here are PO/Business but also users. Social media is huge, there is probably a customer somewhere talking about your product, what are they saying? Could it be useful? I remember when <a href="https://twitter.com/testertested">Pradeep Soundararajan</a> introduced me to Twitter driven testing, which I later changed to social media driven testing. He was working on a public app and decided to see if there were any tweets about the product, there were hundreds of them! He’d just discovered a huge resource of test ideas. In my recent role at O2Priority, I did exactly the same.</p>
<blockquote class="twitter-tweet tw-align-center" data-conversation="none" data-lang="en"><p lang="en" dir="ltr">I've alienated a lot of testers by now, but I've spotted trends before, so you'll have to trust me with this next, important tweet.</p>— Alan Page (@alanpage) <a href="https://twitter.com/alanpage/status/891116760056815616">July 29, 2017</a></blockquote>
<blockquote class="twitter-tweet tw-align-center" data-conversation="none" data-lang="en"><p lang="en" dir="ltr">If you want to be a better tester and be an expert in testing, do not even bother learning to write test automation.</p>— Alan Page (@alanpage) <a href="https://twitter.com/alanpage/status/891116948909457408">July 29, 2017</a></blockquote>
<p>Now having read this tweet, I immediately tweeted to clarify to others that Alan was saying don’t learn to write test automation, based on his earlier definition. He didn’t say don’t learn code, he actually said to learn code in an earlier tweet. Another important thing here is that he says write. As already mentioned, there is a big difference between identifying and designing tools and checks, than actually implementing them. Plus there is most definitely someone in your team better at writing code. It doesn’t mean you shouldn’t, if you want to, please do. Also if you do, work with those developers, learn from them, pair with them. I’m just making the argument that the other work involved in automation is harder to master, and more important, than the code itself. In my opinion.</p>
<p>I’ve given this a lot of thought, hence why this post wasn’t finished 6 hours ago! I agree with Alan.</p>
<p>As I’ve been trying to teach with <a href="https://thefriendlytester.co.uk/training/legoautomation/">LegoAutomation</a> for the last few years, there is so much more to automated checks than writing the code. I’d argue the writing of the code itself is probably the easiest part of the whole thing. So why not utilise the people in the team with the strongest skills to implement them?</p>
<p>So many other aspects of testing to spend time on, to deepen our knowledge on, to learn, and to share. Exploring, story telling, talking testing, test design, check design, coaching, mentoring, pairing, CI, CD, AI, ML, bug reporting, information sharing, agile, empathy, problem-solving, risk assessment, biases, big data, analytics, it’s late and I’m tired, perhaps you can all add to this list.</p>
<p>In summary, I’m onboard with Alan’s views, important for me though is to distinguish between the design, creation, and information usage from automated checks. I’m going to be writing a lot more in the coming months, I care deeply about this topic. Also I’m not saying don’t write automated checks, if you are currently or want to, please continue, I encourage you to go learn. I’m just agreeing with Alan that’s not the only way to go, and the way the future is shaping a deeper understanding of automation as a whole (not the writing checks part) and other areas of testing will be more valuable.</p>
<p>I want to thank Alan for putting his thoughts out there, encourage him to continue to do so and I eagerly wait to read them. I hope to do more posts like this.</p>
<p><a href="https://thefriendlytester.co.uk/2017/07/a-look-at-test-automation-and-test-automators">A Look At Test Automation and 'Test Automators' - Inspired From Alan Page's Tweets</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on July 29, 2017.</p>https://thefriendlytester.co.uk/2017/07/blogger-to-jekyll-migrationblogger-to-jekyll-migration-timeline2017-07-10T19:23:39+01:002017-07-10T19:23:39+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>I thought about writing a guide to explain how I migrated my blog from Blogger to Jekyll, however, it became too long, so instead here is a timeline and if you want to know more about a section, please comment at the bottom.</p>
<ol>
<li>Forked <a href="https://github.com/barryclark/jekyll-now">Jekyll-Now</a> into my own GitHub Repo</li>
<li>Renamed the repo to <strong><em>GitHubUsername</em></strong>.github.io, this is how GitHub pages works</li>
<li>Cloned that repo to my local machine</li>
<li>Decided I was going to use <a href="https://atom.io/">Atom</a> as my Editor</li>
<li>Changed basic settings in the _config.yml file, such as site name and social media links</li>
<li>Pushed to GitHub and checked my site was working</li>
<li>Made a plan about which pages I was going to migrate first</li>
<li>Refreshed my <a href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet">Markdown</a> knowledge</li>
<li>Familiarised myself with <a href="https://jekyllrb.com/docs/frontmatter/"><em>Front Matter</em></a></li>
<li>Started with my <a href="https://thefriendlytester.co.uk/events">events</a> page, and had to read about <a href="https://shopify.github.io/liquid/">Liquid</a>, <a href="https://jekyllrb.com/docs/templates/">Templates</a> and <a href="https://shopify.github.io/liquid/filters/abs/">Filters</a></li>
<li>Got Jekyll up and <a href="https://jekyllrb.com/docs/usage/">running locally</a> instead of pushing to GitHub each time I wanted to check something</li>
<li>Even though it’s quite simple I also took a refresher on <a href="http://www.yaml.org/start.html">YAML</a></li>
<li>Worked out how to embed things in pages such as <a href="http://www.adamwadeharris.com/how-to-easily-embed-youtube-videos-in-jekyll-sites-without-a-plugin/">YouTube</a> and <a href="https://github.com/jekyll/jekyll-gist">Gist</a> posts.</li>
<li>Exported all my posts from <a href="https://support.google.com/blogger/answer/41387?hl=en">Blogger</a></li>
<li>Used a really <a href="http://import.jekyllrb.com/docs/blogger/">helpful tool</a> from Jekyll to convert the Blogger export to individual markdown files for each post</li>
<li>Explored the results from the above tool, to under the Front Matter automatically added</li>
<li>Mirrored the format of blog URLs from Blogger so I have no Google/Bing dead links and negative points for broken links</li>
<li>Started working on each post to convert the HTML to Markdown, a combination of manually checking and using this <a href="https://domchristie.github.io/to-markdown/">awesome converter</a></li>
<li>Went through each post adding categories and tags to improve searching and to build the <a href="/categories">categories</a> and <a href="/tags">tags</a> pages</li>
<li>Created the <a href="/about">about me</a> page</li>
<li>Asked some friends what they thought of my new design, the awesome <a href="https://twitter.com/AshColeman30">Ash Coleman</a> got her designer friend to provide me awesome feedback!<br />
<br />
<img src="https://thefriendlytester.co.uk/images/blogpostimages/blogdesignfeedback.png" alt="Blog feedback" />
<br />
<br /></li>
<li>Action all the feedback I got, which was a deep dive into CSS. Magic stuff. I utilised <a href="https://www.w3schools.com/">W3CSchools</a> a lot!</li>
<li>Re-structured the details about each blog post and added the <a href="https://carlosbecker.com/posts/jekyll-reading-time-without-plugins/">read time</a></li>
<li>Added comments to my blog using Disqus, I actually copied this from <a href="https://github.com/vivrichards600/vivrichards600.github.io">Viv’s repo</a></li>
<li>Got the awesome <a href="https://twitter.com/thomasdharvey">Thomas Harvey</a> to create me a Friendly Tester logo in the same style as Friendly Testing</li>
<li>Checked that my blog was providing all the <a href="https://github.com/jekyll/jekyll-seo-tag">SEO</a> tags</li>
<li>Changed my hosting DNS to point to <a href="https://help.github.com/articles/setting-up-an-apex-domain/">GitHub pages</a></li>
<li>Then realised GitHub Pages don’t offer HTTPS with custom domains, so discovered I could use <a href="https://www.cloudflare.com/">Cloudflare</a> for free!</li>
<li>Shared it with the community!</li>
<li>Wrote about the <a href="/2017/07/ten-insights-from-my-blog-migration/index.html">what I learnt</a> and why I <a href="/2017/07/why-jekyll">chose Jekyll</a>
<br />
<br />
<br />
I reckon that’s that.
As mentioned at the start if you’re going through the same process and have some questions on specific sections, ask me in the comments.</li>
</ol>
<p><a href="https://thefriendlytester.co.uk/2017/07/blogger-to-jekyll-migration-timeline">Blogger to Jekyll Migration Timeline</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on July 10, 2017.</p>https://thefriendlytester.co.uk/2017/07/why-I-chose-jekyll2017-07-07T19:30:39+01:002017-07-07T19:30:39+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>Why Jekyll Richard? This was the question <a href="http://sjpknight.com/">Simon Knight</a> asked me Wednesday after I published some <a href="https://thefriendlytester.co.uk/2017/07/ten-insights-from-my-blog-migration/index.html">learnings from my blog migration</a>.</p>
<p>I’d been thinking about a blog migration for a while, I wasn’t happy with Blogger. My site was looking rather dated, and so is Blogger for that matter. Also, my <em>blog</em> has turned into site these days. I have a lot more on there than just a blog. So when I looked at <a href="http://vivrichards.co.uk">Viv’s blog</a> I was immediately drawn to the design, but after talking to him and checking out Jekyll I was even more convinced.</p>
<h2 id="jekylls-appeal">Jekyll’s Appeal</h2>
<h3 id="open-source">Open source</h3>
<p>As mentioned in the first post, Jekyll is open source and has many clean designs available for it. I feel this is going to give me more options in the future. I’ll be able to find packages from others as well as looking at coding something myself if I have specific needs I can find an existing package for.</p>
<h3 id="design">Design</h3>
<p>I don’t know what it is about this design, but when I saw it, it was clear to me I had to have it. Sure it’s nothing fancy, but I just found it really clean looking. Now in terms of Blogger and moving, sure I could have found a similar theme, but again it’s in the constraints of blogger, having to use their editor. I get to code this in whichever editor I wish.</p>
<h3 id="dynamic-pages">Dynamic Pages</h3>
<p>When looking into Jekyll one of the first things I came across was the fact is offered dynamic pages. That being the ability to dynamically create pages based on some data source. In Jekyll’s case, this data can be stored in many formats the most common being YAML or JSON. You can then write code to loop over this data and display exactly what you want in any order you want. It uses some called Liquid to achieve this. You can see an example of this on my <a href="https://thefriendlytester.co.uk/events">event page</a>, the <a href="https://github.com/FriendlyTester/friendlytester.github.io/blob/master/_data/conferences.yml">data source</a> and the <a href="https://github.com/FriendlyTester/friendlytester.github.io/blob/master/events.html">page code</a>. The code is a bit rough at the moment, it was one of the first pages I tackled I intend to refactor this in the near future now I have a better understanding of Liquid and the filters available in Jekyll.</p>
<p>The ability to store some of my content in data sources is something I hope to take advantage of more in the future. For example, now all my events are in a data source I could add something to the home page to show the next event I’m attending or organising for example. The same with my training classes, I could add a location to them and have some logic to show them on the homepage if there is one configured. I’m also contemplating the <a href="https://www.troyhunt.com/im-now-offering-sponsorship-of-this-blog/">blog sponsorship</a> idea as created by Troy Hunt.</p>
<p>The ability to draw numbers from my data and use data source across multiple page was really appealing. I really like being able to add stats to a page like on the top of the <a href="https://thefriendlytester.co.uk/events">events</a>. Also simple things like having Jekyll tell me the word count, so I could add a estimated read time to the blog.</p>
<h3 id="markdown--data-files">Markdown / Data Files</h3>
<p>Having all the posts in a not platformed tied format like Markdown means should I ever wish to move platforms in the future, it should be a lot simpler. The same applies the data sources I mentioned above, with those being in YAML I can easy reuse them on other sites, and again reuse them without any modification if I move to another platform in the future.</p>
<h3 id="github-pages">GitHub Pages</h3>
<p>The idea of hosting the site for free on GitHub was certainly an appeal. Sure hosting costs aren’t expensive these days, but it makes life a lot easier. The additional bonus of this is that anyone can now see the code to my blog. They could make their own with the same look and feel, or they can use the code to support something they may be doing.
Then a proper Brucie bonus is that when I make mistakes or someone spots something that can be better than can submit a PR to me and fix it for me :D</p>
<h3 id="alternatives">Alternatives</h3>
<p>I didn’t explore any if truth be told. As soon as I investigated further into Jekyll, it became apparent to me that it could fulfil all I was looking for in terms of a new blog/site. I’ve since been told about a similar offering built on top of react.js but I can’t recall the name!</p>
<h3 id="coding">Coding</h3>
<p>I must admit this was an appeal. Actually getting to code my own blog. Now sure, yeah I know, it’s already 90% done, but I got to do that extra 10% and hopefully more in the future. It’s a very satisfying feeling writing some code, git pushing and seeing it live.</p>
<p>So in short, coding, dynamic pages and open source were the appeals.</p>
<p><a href="https://thefriendlytester.co.uk/2017/07/why-jekyll">Why Jekyll</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on July 07, 2017.</p>https://thefriendlytester.co.uk/2017/07/ten-insights-from-my-blog-migration/blog-migration-ten-learnings2017-07-04T20:58:39+01:002017-07-04T20:58:39+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>So unless this is your first time visiting my blog, if it is, welcome, you’ll have noticed it looks a bit different. I’ve recently migrated my blog from Blogger to Jekyll hosted on GitHub pages. I asked on Twitter if anyone would be interested in the journey, the response was positive, so I started writing. 60 minutes in and 3000 words later, I wasn’t happy. It had turned into a guide, it sucked. Well, that’s harsh, it didn’t suck, it was an awesome guide, the start of one anyhow, but not really useful to the people who read my blog and it wasn’t really challenging me either. So I’ve decided to change tac and write the top ten takeaways from migrating my blog.</p>
<h3 id="open-source-is-incredible">Open Source is Incredible</h3>
<p>Is that really a new insight for you Richard? No, it’s not. However, what this process did do is give me a reminder of how incredible the open source community/movement is. In my little bubble of testing and software development, it’s all too common to expect there to be an open source version of a tool you’ve seen or to expect someone to have created the tool you think of. The movement is far beyond that now. I remember in the past looking for a theme for Blogger, and they were all awful. The nice ones cost. It was the same when I checked out WordPress a few years ago. Now don’t get me wrong, it’s fine to charge for your work, but it’s great to see a large number of Jekyll themes available online and open, and I’m sure if I looked again I’d see more for Blogger and WordPress.</p>
<p>It’s kind of satisfying now to know that my blog code is on GitHub, sat there ready to be forked if anyone was inclined to. I also ensured to list the to main repos I took the majority of the code from. I’ve tried to make a conscious effort to share code over the years, however, it’s something I should do more of, and will be aiming to do over the coming years.</p>
<h3 id="arghhhh-css">Arghhhh CSS</h3>
<p>CSS is magic! It’s a dark art. But, with the right tools and some good googling skills, it can be tamed. Aside from being a master of CSS Selectors, my CSS skills were weak.<br />
I was naive. My initial plan of attack was to use Chrome Developer Tools, inspect the element I wanted to change, find it’s class, find that class in the code base, change the values, job done! Actually, that was my second plan of attack. My first attack was to do a mass replace all :D, it didn’t work. Mostly because of the colours used in the original design. The designer has used <em>black</em> in places and hex codes in other places. So when I did a replace all of black to blue, lots of things changed I didn’t want to, one of those being the text colour of the blog contents. So a second plan was required.</p>
<p>My first true finding related to CSS was the fact Chrome told you what line in the CSS file the styles were coming from, this proved an invaluable observation. It made making my changes a lot easier and was a lot quicker to find than searching for the class name in the various CSS files. My second finding was to expand/Beautify foundation.min.css file. It had been minified, so the whole file was two lines long. So when I looked in Dev tools it was always on line two, not useful, and doing a find was hard work also, with just this mass of text. So I downloaded a plugin for Atom called ‘Atom Beautify’ which takes many file formats and makes them beautiful! In the context of CSS is put each class onto its own line along with each style on their own line, so inspecting styles in Dev tools from foundation.min.css became a whole lot easier.</p>
<p>The biggest troubles I had with CSS were around padding and width. I was hacking my way through, change a value here a value there, see what it looks like and repeat. I was learning each time, but without structure or knowledge or why it was working. So I took the time to learn them, mostly from <a href="https://www.w3schools.com/">W3C Schools</a>, and spent 30-60 mins making noddy little web pages moving and arranging different elements.<br />
Sometimes it’s enough to try, then hack and eventually get there. Other times it’s quicker and more beneficial in the long term to dive into an area a bit and then return to the task.</p>
<p>I’ll conclude with, CSS is magic! It appears to have logic and reasonings to it, it doesn’t, it’s magic!</p>
<h3 id="the-power-of-the-local-environment">The Power of the Local Environment</h3>
<p>For the first few days of hacking away on this blog, I kept pushing to GitHub and then going to my GitHub page to see the results. GitHub pages are very quick to deploy but I started to feel this wasn’t the best approach, especially pushing code into my repo I hadn’t tested. So I did a bit of googling and was able to get Jekyll up and running locally. It’s actually really easy, I should have done this initially.</p>
<p>This really sped up my work. I was able to get Jekyll to watch my files, so as soon as I made some changes it would regenerate without any input from me. It also allowed me to test my work, and made making little CSS changes a lot easier. It also allowed me to work on the train!</p>
<p>Another thing running Jekyll locally gave me was the ability to see all the build warnings that GitHub does show me. GitHub will tell you if the deployment fails, but not about warnings. Turns out a lot of the warning were deprecations and easy to fix, but I much prefer a build with no warning at all, which is what I have now.</p>
<p>Obviously, we all know the benefit to developers of having a local environment, but I encourage all testers to get the products they test running locally on their machines, it’ll open you up to a whole host of new information and testing opportunities.</p>
<h3 id="universal-language">Universal Language</h3>
<p>To migrate my blog posts, I had to export them from Blogger. Blogger provides a way to do this which is great. However, it exports them as HTML, not a problem you’re thinking, most blogging platforms let you add posts in HTML. The problem I faced was that some of them were full of crazy HTML, some of you will have seen this, the crazy HTML comes from copying and pasting directly from Google Docs or Word straight into Blogger. All those classes that were in the HTML were affecting my styling on my posts. So it actually took a fair amount of time to get them all migrated to Markdown.</p>
<p>Going forward I intend to write all my future posts in Markdown. Not because I have too, Jekyll would still let me do HTML, but because with Markdown, I could migrate my posts to any platform in the future with ease I feel. There are plenty of Markdown to HTML and Markdown to rich text converters out there. Plus the way tech is going I’m sure they’ll be some shiny new platform we’ll be wanting to move to in the future.</p>
<h3 id="tools-tools-and-more-tools">Tools Tools and More Tools</h3>
<p>I’ve lost track of the number of tools I used during the creation of the new blog and migration of the old posts. As regular readers will know I’m a huge advocate of using tools to support our work, and encouraging teams to build tools to support their testing and development, and not just focusing on automated checks.</p>
<p>I listen to my inner self. In this case, I kept thinking to myself there has to be an easier way to do this. A lot of you will have had that feeling before, listen to it and more importantly act on it. Even if it’s just a quick Google and look at the top five results if no joy carry on. Chances are though that you’ll find something to help you. If you really do have no joy, and this feel repeats itself again, talk to the team, see if someone can build something to help you.</p>
<p>In my case with the migration, it was converting the blog posts from HTML to Markdown. Brace yourself for laughter… yep, I did the first 10 post manually. Then my brain decided to go ‘I wonder if there is a tool to convert HTML to Markdown’ of course <a href="https://domchristie.github.io/to-markdown/">there is!!!</a> That really helped me and saved me a lot of time.</p>
<h3 id="transferable-programming-skills">Transferable Programming Skills</h3>
<p>I’m not a developer, but I can develop. I’ve spent most of my career thus far using C#, Java and JavaScript. This project was mostly HTML, CSS and Ruby. I’m rather comfortable with HTML, we’ve covered the magic world of CSS, but Ruby was all new. But, it’s not just the language that is new, it’s the tools that support it, such as <em>gem</em> and YAML. A quick google of <em>gem</em> though and you’re immediately good. Gem is a package manager for managing Ruby gems. Sure I’ve not used it before, but I’ve used NuGet, Maven, NPM, Yarn so I could use that knowledge to help me. For example, I needed to install a specific version of a gem, I know it will be possible, so I just needed to find the right command.</p>
<p>Jekyll uses a syntax called Liquid to help you manage dynamic content on your pages and posts. I’d never heard of Liquid, but it just abstracts some Ruby for you. So with knowing basic programming concepts, you expect the basics to exist such as loops and if statements and indeed they do, and they work exactly how you’d expect them to, you can get straight into writing your queries but you know how these concepts work. It’s just a case of getting the right Liquid syntax, you already have the skills to model your query.</p>
<h3 id="mastering-google">Mastering Google</h3>
<p>I believe Googling is a skill. I also happen to believe I’m good at it. There is information about pretty much everything on the internet, but especially around programming. I love solving problems, I really do, it’s a fantastic feeling when you do, but don’t become obsessed with it, it’s perfectly acceptable and encouraged to ask for help. In such a project where the team is just me, I turn to Google. Practice and get used to using Google to help you with your programming, I could probably write a very lengthy post about this but for now, it’s a tool, use it, your problem is unlikely to be original especially when using tech that is a few years old.</p>
<h3 id="have-a-plan">Have a Plan</h3>
<p>Migrating a blog doesn’t sound like a big job, but it was. I reckon all in all it took me about 40 hours. I spent the first 2-3 hours just hacking away until it became apparent to me that there was a lot to do and a plan would be useful. I started with a simple handwritten bullet point list, but it soon became illegible. In the end, I moved to Trello, I already use this for my personal kanban board, so it made logical sense.</p>
<p>This proved a smart move in many ways. The first was that I was able to add more useful things to the cards, such as helpful links I stumbled across, or to leave myself some insight I may have had while doing another task. The second being the satisfaction you get when you complete a task. Sure you’ve still got another fifty tasks to go, but you’ve completed one! Without the plan and the cards, it could feel like you’re not making progress when you really are.</p>
<h3 id="dive-deeper">Dive Deeper</h3>
<p>There were several occasions throughout this process where I was able to get something working by copying and pasting the code from examples in the original repos or from a website. Some would consider that a success and move on, sometimes I did exactly that, but the majority of the time I wanted to learn more about the answers and why they worked. For example, if a site told me to use this exact Liquid syntax, I would try it, see that it worked but then search the official documentation to learn more about it. This would help me understand why it worked, but it also took me to places within documentation where I could learn about other commands, and in some situations, I was actually able to find a better solution.</p>
<p>So what I’m trying to say, and remind myself of, is to be inquisitive. We’ve mentioned it already, Google is all knowing, but go deeper, dive into the depths it could help you in the long run, but it will most certainly reveal more doors for you to explore.</p>
<h3 id="side-projects-are-fun">Side Projects Are Fun</h3>
<p>Even though this project is related to my work, having this side project over the last few weeks has been very rewarding. It’s helped me realise that I need projects like this. Projects that result in something awesome being built, but the real gold is in the journey. I’ve had many over the years, but I need to remind myself to have more of them, as it’s all to easier to get bogged down in work or using the same old tech all the time.</p>
<p>A bit lengthy, but it’s been an epic journey.<br />
I’ve decided against writing a full experience of the whole process, too much simply happened. But if you’re interested in knowing specifics just reach out to me and I’d be happy to talk to you more about Jekyll.</p>
<p><a href="https://thefriendlytester.co.uk/2017/07/ten-insights-from-my-blog-migration/index.html">Ten Insights From My Blog Migration</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on July 04, 2017.</p>https://thefriendlytester.co.uk/2017/04/new-headless-chrome-with-selenium2017-04-30T22:09:00+01:002017-04-30T22:09:00+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p><img src="https://thefriendlytester.co.uk/images/blogpostimages/headlesschrome.jpg" alt="Headless Chrome" title="Headless Chrome" /></p>
<p>So if you hadn’t heard, Google has implemented a headless option for Chrome. This will be included from version 59, however you can download it now and a play using the <a href="https://www.google.com/chrome/browser/canary.html">Canary</a> install.</p>
<p>So I did just that. I downloaded the latest <a href="https://chromedriver.storage.googleapis.com/index.html">ChromeDriver</a>, wasn’t sure if a new version was required or not, digging a little bit deeper after the event, I realised it wasn’t, but seems like a good practice when trying out new things. Then I downloaded and installed the Canary Chrome, nice thing about Canary Chrome is it remains a seperate app, so doesn’t interfere with your existing chrome.</p>
<p>Then from a quick google, I discovered the argument for headless, is well ‘–headless’, easy!</p>
<p>So I know from existing use cases that you can pass arguments to ChromeDriver using ChromeOptions, so I created a ChromeOptions in my code and passed in the argument ‘–headless’.<br />
Now as mentioned above, Canary Chrome installs a seperate app, so this reminds me, that I have to instruct ChromeDriver on where to find this binary.</p>
<p>So again, we can do this using ChromeOptions, and specifically the setBinary method. Now the first time I did this, I set the path to be “<span class="bluenumber">/Applications/Google Chrome Canary.app</span>”, this didn’t work. So I dug a little bit deeper into the content of the package and discovered that I needed to go all the way to the executable, which turns out to be “<span class="bluenumber">/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary</span>”, and boom it worked!</p>
<p>I then thought I’d instruct WebDriver to take a ScreenShot so I could indeed see if it was working, alas this functionality isn’t available on a Mac yet, but I read <a href="https://github.com/nightwatchjs/nightwatch/issues/1439">here</a>, that it does indeed work on Linux.</p>
<p>So here is plain pretty dull Java code, but it does the trick and runs successfully using Chrome headlessly!</p>
<div class="centerplugin">
<script src="https://gist.github.com/FriendlyTester/d0706d5ca51e573c0bd3554c70dc5b2f.js"> </script>
</div>
<p>Now, historically I’m not a fan of headless browsers. If I’m going to go the expense of automating on the UI, I want those to execute on a browser that my users actually use, non of my users use a headless browser!</p>
<p>This may change with headless chrome though, may. I say this because, in the past, most of the headless options were standalone tools, seperate from the common browsers, such as HTMLUnit or PhantomJS. Also if you hadn’t seen it <a href="https://groups.google.com/forum/m/#!topic/phantomjs/9aI5d-LDuNE" target="_blank">looks like</a> PhantomJS will no longer be supported as the project lead stepped down. So I think once it’s more stable and available in standard Chrome, I’ll do some experiments against it to see what the gains are, or aren’t as the case may be. Plus I’ll see if I can find some information on the internals to see how much it differs from how Chrome with a head works.</p>
<p>Few useful links I found since writing:</p>
<ul>
<li><a href="https://developers.google.com/web/updates/2017/04/headless-chrome">https://developers.google.com/web/updates/2017/04/headless-chrome</a></li>
<li><a href="https://medium.com/@dschnr/using-headless-chrome-as-an-automated-screenshot-tool-4b07dffba79a">https://medium.com/@dschnr/using-headless-chrome-as-an-automated-screenshot-tool-4b07dffba79a</a></li>
<li><a href="https://watirmelon.blog/2011/08/27/running-headless-watir-webdriver-tests-using-a-real-browser">https://watirmelon.blog/2011/08/27/running-headless-watir-webdriver-tests-using-a-real-browser</a></li>
</ul>
<p><a href="https://thefriendlytester.co.uk/2017/04/new-headless-chrome-with-selenium.html">New Headless Chrome With Selenium WebDriver</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on April 30, 2017.</p>https://thefriendlytester.co.uk/2017/04/you-say-test-i-say-check-on-we-go2017-04-15T14:52:00+01:002017-04-15T14:52:00+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>This discussion has been going on for a very long time, and it won’t ever end, it won’t end. I repeat that because it’s reality, such a discussion will never end. But that’s OK.</p>
<p>I consider myself a student of testing, over the last ten plus years I’ve formulated a mass of thoughts on testing. One of those happens to be the believe that there is a huge difference between what a human can do and what a computer can do, in the context of testing. One of those distinctions is labelled by some as checking and testing. The distinction being that when we automate a check, it’s a fixed algorithm, unable to observe anything other than what’s it’s instructed to. Unable to change its behaviour or flow other than the flows that have been coded. Therefore, it’s checking the flow of the steps and some outcome/behaviour at the end. However, when we test, due to the fact we’re humans and have the best tool out there, the brain, we can observe all, we can change our focus hundreds of times a minute. We can observe in real time and adapt accordingly. Now sure, for the AI/ML fans, sure computers are showing some signs of this now, but they won’t be in the regular development teams office any time soon. But that’s not the point of this post.</p>
<p>I believe this distinction is universally agreed by any student of software development, and especially testing students. So, we end up at our choice of words and their importance. They do carry some importance. Others have written far better pieces on that topic then I can, so we won’t go in to this.</p>
<p>So, let’s look at this from my angle:</p>
<blockquote>
<p>I don’t care what words <strong>you</strong> use.</p>
</blockquote>
<p>I actually don’t. I do not care. I’ll never correct you. I’ll never reply to your blog post going ‘I think you mean checking’, ‘excellent piece, but by the way, automation cannot test, that’s checking!’. I won’t do that.</p>
<p>What I will do, is frame my responses to match my own views of testing, because in my testing world there is testing and checking. Those words are congruent with my view of testing. Therefore, when I write or talk about testing, I use those words, they fit my current beliefs of testing. They fit my models of testing. My models. They may not be in your beliefs or models of testing, and that is OK. In fact, it’s more than OK, it’s awesome, it’s awesome that you’re aware of your own models and sharing those with a wider audience.</p>
<p>You will hear me say ‘automated checking, you will hear me say ‘automation in testing’ and you will hear me say ‘automated check. You will also hear me say, ‘I’m going to use my language for testing during this talk, so if you hear me say the word check and you’re unsure what I mean, replace it with test and say it back to yourself’. I make a similar statement when I say tester these days, ‘if I say tester during this talk, I mean anyone who does some testing, not the role’, but I digress. You will also hear me say the words above without making such a statement, but hey-ho, on we go.</p>
<p>You will hear and read people saying automated testing, you will hear and read people saying automated checking, but allow yourself to process them against your models, let you brain change checking to testing, or check to test, or vice versa and continue the conversation, continue the learning.</p>
<p>Now I do tailor my language for who I’m talking to. If I’m talking to a fellow student and I know their models are similar to mine, I’ll choose my words accordingly. This allows us to get straight to the heart of the discussion. If I’m talking to a client, I’ll use their language, as this will make them more comfortable and allow me to truly understand their problem and needs. Overtime I may introduce some of the words more congruent with me, but only if it brings value and helps us solve the problem(s).</p>
<p>So on we go, I say check, you say test, I’ll say test sometimes, you’ll say check sometime. Be congruent with your own beliefs and models, but at the same time, bend a little bit, flex here and there, I believe such an approach will improve all of us, and in turn, testing and software development.</p>
<p><a href="https://thefriendlytester.co.uk/2017/04/you-say-test-i-say-check-on-we-go.html">You Say Test I Say Check. On We Go.</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on April 15, 2017.</p>https://thefriendlytester.co.uk/2017/02/what-is-legoautomation2017-02-18T06:44:00+00:002017-02-18T06:44:00+00:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p><img src="https://thefriendlytester.co.uk/images/blogpostimages/legoautomationbanner.jpg" alt="Lego Automation" title="Lego Automation" /></p>
<p><strong>TL; DR.</strong> Solid, valuable, reliable automation requires far more important core set of skills than coding. We can and should practice these skills. LegoAutomation is designed to introduce you to these skills, in a highly unique interactive class. The class has something to offer all roles involved with software development. We do not write any code during the class or use laptops; broadening the scope and application of knowledge gained. We use Lego Duplo, the room, a dose of creativity and your desire to learn. Public classes are available now, read further to find out more. Private classes are available internally upon request.</p>
<p>This is a highly interactive class, completely unique, doesn’t involve a laptop, uses Lego to model theory and is entirely focused on automation in the context of testing.</p>
<p>I’ve spent years teaching automation, designed and ran several technical workshops. All included writing code and using some specific frameworks. These are great for people interested in those frameworks and wanting to learn those programming languages.</p>
<p>That’s what those classes do, they teach people how use a specific framework with a specific language using some predesigned scenarios. There is nothing wrong with these courses, I still teach them myself, but what about a more holistic approach to automation? Where can we go to learn about this? Where does someone go to improve their automation skills beyond the code itself? Because, believe me when I say, there is so much more to automation than code!</p>
<p>These are the reasons I designed Lego Automation. I wanted a class that focused on automation, but didn’t involve laptops and code. For several reasons:</p>
<ul>
<li>It doesn’t alienate anyone; anyone can attend the class and no previous programming experience is required. I’ve had Testers, Developers, Managers, ScrumMasters and even a CTO attend the class.</li>
<li>We can dive straight into active, experiential learning, no laptops to try and tame, no dev environments to configure. This allows us to make the most of our time.</li>
<li>Reassure learners that they have far more automation skills then they may have realised, a lot tend to just focus on the programming languages and tools they know.</li>
<li>Introduce people to some terminology to allow them to talk about their automation, not just the code.</li>
</ul>
<p>The class consists of 4-7 rounds, depending on the time allocated. Each round is designed to build upon the last, allowing us to build upon our knowledge gained from earlier rounds. We use Lego Dulpo and the room to design the product we’ll be automating.</p>
<p>I don’t want to share too much about the specifics, but you can explore <a href="https://twitter.com/search?q=%23legoautomation&src=typd">#LegoAutomation</a> on Twitter to get an insight into the class.</p>
<p>I do want to spend some time talking about my aims for the class, and what I hope attendees leave with.</p>
<p>The class is completely experiential, there is a loose structure in place (the rounds) to try and guide the learning, but importantly there are no right answers in this class! There is no correct way to write the scripts you create, or to solve the problems, there is just the way you take.</p>
<p>One of the key aspects of the class is getting people talking about their work. We’re working closer and closer together these days, in terms of interacting with team members. Which means we need to be comfortable talking about our work. Which in the context of automation needs to be more than just explaining the code and why X framework was used over Y. We need to be able to walk people through our problem solving, our check design, and our final solution.</p>
<p>We also spend some time exploring assumptions, specifically how our automation is full of them, but often unspoken or undocumented. We look at the importance of them, and how they influence our design. Talking about influence, we also explore biases in the context of automation and of course Lego!</p>
<p>We’ll explore some heuristics which are invaluable when designing checks and code. We’ll also introduce you to some automation specific terminology. I have too often seen competent ‘automators’ struggle to convey their thinking and rationale to colleagues and this section of the course will help overcome this common problem.</p>
<p>There is much more, but at the very core of this course is what using Lego gives us. It gives us the ability to quickly put theory into action and to get feedback there and then in the class! Giving you a personal and active learning experience, whilst broadening and deepening your automation skills. Sure, we’re using Lego and none of you create your automation using Lego in your workplace, but the thinking and processes are the same. This gives attendees a real foundation for their automation efforts, completely applicable to any language or framework.</p>
<h2 id="here-are-some-takeaways-for-different-roles">Here are some takeaways for different roles:</h2>
<ul>
<li>
<h5 id="testers">Testers</h5>
<ul>
<li>The ability to talk congruently about automation.</li>
<li>Realisation that ‘non-technical’ testers have a huge part to play in an automation effort, without writing any code!</li>
<li>Modelling is a crucial skill regarding automation.</li>
</ul>
</li>
<li>
<h5 id="developers">Developers</h5>
<ul>
<li>Appreciate that we can’t just create automated checks, they require thought, a testing mind-set and developers can achieve this.</li>
<li>The code is important and we should follow good practices. They really can help testers/automators with this, they know a lot about coding!</li>
<li>Appreciation for well targeted automation and how the testability of the products is a significant part of this method. Testability is something developers can improve.</li>
</ul>
</li>
<li>
<h5 id="managers">Managers</h5>
<ul>
<li>Queue sweeping generalisations! Appreciation that automation requires constant support, we can’t just write and forget.</li>
<li>An understanding of the steps and effort involved in creating highly maintainable automation, both from a code and check perspective.</li>
<li>We can’t just hire someone with the best coding skills, we need automators who understand testing.</li>
</ul>
</li>
<li>
<h5 id="ctos">CTOs</h5>
<ul>
<li>I doubt another one will attend, but you never know! I hope they take away that that every team member has a part to play in testing, especially automation, and they should encourage this to be the standard.</li>
</ul>
</li>
</ul>
<p>So, with all that being said, if you’re looking to move into automation or improve your universal automation skills, I am certain that this is the class for you! This really is a class like no other! I’ve been running this class for over 2 years now and I’m yet to receive any complaints… perhaps everyone is just too polite. But genuinely, I have received many compliments and positive feedback from attendees from all backgrounds, skill level and role. Especially based around the finding that using Lego really works! It’s not just a gimmick, it truly does support the theory, class and learning.</p>
<p>I regularly teach the class publicly, you can see my schedule to see where next, and I also offer the class internally please contact me using a method from my footer.</p>
<p><a href="https://thefriendlytester.co.uk/2017/02/what-is-legoautomation.html">What is Lego Automation?</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on February 18, 2017.</p>https://thefriendlytester.co.uk/2016/10/how-i-get-technical-workshops-up-and2016-10-16T17:49:00+01:002016-10-16T17:49:00+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<blockquote class="twitter-tweet tw-align-center" data-lang="en-gb"><p lang="en" dir="ltr">The first hour in most technical workshops is a slight mess with setups. Does anyone do this really, really fast and what's their secret?</p>— Maaret Pyhäjärvi (@maaretp) <a href="https://twitter.com/maaretp/status/783931493190144000">6 October 2016</a></blockquote>
<script async="" src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>A few days a go I saw this tweet from Maaret. At the time of reading it, I felt I was at 100% success rate with technical workshops. I had the formula.<br />
I stated on Twitter that I would write about the <em>formula</em>. Then last Tuesday happened.</p>
<p>Last Tuesday, I visited a client to do some internal WebDriver training, and well lets just say, it didn’t go to plan. We adapted the plan until lunch, then throw all the plans out after lunch and did something completely different. I’m fortunate to have alternatives at my disposal and be comfortable enough with my knowledge to deal with it, others may not feel the same.</p>
<p>So I’m going to write about some of the approaches I’ve taken in order to get technical workshops up and running faster, allowing us more time to actually learn.</p>
<h3 id="virtual-machines-vm">Virtual Machines (VM)</h3>
<p>I haven’t used this approach for a while. In fact, I only ever tried it once. However I know several people who swear by this approach. Simple concept, create a VM with all the dependencies on it. Have the attendees download a specific VM client, distribute the VM image, set-up the image and off we go!</p>
<p>My class didn’t go to plan. Peoples machines were not powerful enough to run a VM. They got the VM up and running, but interacting with it was painful. Like using IE on 56k modem painful, or watching AOL connect back in the day painful.</p>
<p>Now, other issues I’ve seen with such approaches, is distributing the image. These images can be big files, some into the GB’s depending on the operating system. So downloading them in advance is an option, but could be a slow, data consuming process for some. If they don’t download them in advance, it’s time to pray to the conference wifi while someone, or several people, download this image. Or, we distribute the image on USB pens, an option not all would be comfortable with, given the security concerns of flash pens.</p>
<p>My final issues with a VM is that in some context, the actual process of setting up the environment is important, especially if a student intends to take their newly found skills forward and use them at work. They will no doubt have to set up an environment, and by using a VM, they won’t know how to do this, or not all of it. Easy for the trainer to mitigate by providing a environment setup guide, but I’ve only had one person do this.</p>
<h3 id="docker">Docker</h3>
<p>It wouldn’t be right to talk about VMs and not include Docker. Now, let’s be clear I’m not stating they are the same thing, they are not. However one use of Docker I’ve tried on a course I teach with Mark Winteringham is to <em>dockerise</em> the test application. So we ask attendees to install Docker, then we distribute the container. This is because the application is not our focus of the training, it’s just the vehicle. We took this approach, as the application has several dependencies, rather poor instructions to deploy, but more importantly, was quick to get up and running. We’d also taken the approach to <em>dockerise</em> the application for our own deployment to AWS, so was a bonus really.</p>
<p>So I would recommend containers for a test application. But they don’t really work for tools that the students are going to interact with, because you cannot get in side them as easy as a VM.</p>
<p>Going to move away from tools now and talk about approaches I’ve taken, prior and during the class.</p>
<h3 id="advanced-prerequisites">Advanced Prerequisites</h3>
<p>Send the students a list of prerequisites as far in advance as you can. Not always easy, especially if using certain tools, as new versions could be released during that window. So be aware of that.</p>
<p>These prerequisites should be more than just a list of tools. Where possible include installation guides or at least link to existing ones. Give the student as much support as you can. Consider writing a list of instructions, referencing specific guides for tools if required, giving the student something to follow.</p>
<p>Checklists. Provide a checklist for the user to run through to ensure they have all they needed. For example, at the end of installing all the prerequisites for a Java WebDriver class, you might instruct a student to execute <em>‘javac -version’</em> in the console, to ensure the JDK was installed successfully.</p>
<p>I’ve more recently taken to recording a short video that students can follow. Details where to find the prerequisites, downloading them, installing them, and checking everything is as expected. It might seem like overkill, however it’s something I was doing before each class to check my own environment was prepared, so recording it wasn’t much more work.</p>
<p>Now, some of you will would have been reading that, with a little voice in the back of your head saying <em>‘but no one ever does them Richard!!!’</em>. True, there will always be a few people who don’t. My only advice here is to ensure they get your message. So ask students to respond to tell you they have received your email, allowing you to chase those that don’t respond in the run up to the event. Another additional you can take is to give students a way of informing you they have indeed done it. This could be a simple email, or a Google spreadsheet/form where they can tick their name of.</p>
<p>Also, stress the importance of these to the students. They allow the class to get up and running faster, meaning we can all maximise the time we have together.</p>
<p>Finally, make yourself available to help debug students before the class. I’ve only had to do this a few times, but it really did make the class go smoother on the day. Helped my focus, and importantly started all students on the same page, keeping the flow going.</p>
<h3 id="pretest-with-your-contact">Pretest with your contact</h3>
<p>This advice is more related to internal client visits, and one I received recently from Alan Richardson. Arrange a call/hangout with your contact at the company, and do a pretest on their machines. So instruct them to run the prerequisites, but they have a call to distribute the specific code for the class and ensure they can compile and run it.</p>
<p>This would have saved me recently, as installing prerequisites was all good, however when it came to actually import the project, it turned out the clients internal network blocked all maven calls, meaning none of the dependencies could be downloaded, something I wasn’t prepared for.</p>
<h3 id="start-immediately">Start immediately</h3>
<p>Both internally and public events, I tend to get to my room 30-45 minutes before I need to. I like to get my machine set up, the desk how I like it, and just get a general feel for the room. This is also the case for some students. In my experience students tend to arrive 15 minutes or so before the official start time of classes. I like to take advantage of this time.</p>
<p>I will ask those who arrive earlier if they have downloaded all the prerequisites and have everything set. If someone says no, I can now try and get them setup in the <em>free</em> time. By free, I mean it isn’t going to eat into the class time. This isn’t always an option, but it’s one I like to take advantage of if it arises.</p>
<h3 id="class-support">Class support</h3>
<p>When running a class, especially at a conference, I like to gauge the level of the students. As there is usually someone who has experience with the environment, tool or programming language. If I do believe I’ve found someone, I will approach them to see if they are willing to help me with getting people setup. Then can be incredible valuable to me, the class, and them as it will speed us up in getting to the fun bits!</p>
<h3 id="backup-plan">Backup plan</h3>
<p>Have a back up plan. I could end it there, but let me elaborate with some experiences. Wifi Internet… as we all know, it can be very hit and miss. So if your class requires access to a specific site, and the Internet goes down, you’re a bit stuck. So if you have control of the application consider ensuring you can run this site locally. This could then allow you to turn your machine in a hot spot and have people connect and use an instance running on your machine, instead of using the www.</p>
<p>Another option is to have some theory activities ready, which you can get students to work through, while you try and resolve issues. Visualisation tasks work great for this. Or a retrospectives on what’s been covered this far.</p>
<p>Have installations, remember to include all operating systems, on a USB pen ready to distribute if the Internet has gone. Of course this comes with the risks mentioned above.</p>
<h3 id="pairing">Pairing</h3>
<p>If someone is really struggling with their environment/laptop, see if someone in the class is willing to pair with them. This can be a great way to keep the class flowing. Then at a break or lunch, you can then work with the student on the machine to see if you can get it up and running for them.</p>
<p>Pairing also comes with multiple other benefits which lots of people have written about.</p>
<h3 id="your-machine">Your machine</h3>
<p>If pairing isn’t an option, I’ve actually given my machine to a student before. This works well in a show and tell then practise format. In the instance I did this it was a class where we were exploring how to use proxies with your mobile device</p>
<p>Not always a valid option but one to consider.</p>
<p>If you have multiple laptops, this could also be a possibility. Give the student a spare machine. I personally don’t have a spare, but some of you might!</p>
<h3 id="stay-after-the-class">Stay after the class</h3>
<p>I still like to work to the principle that every attendee of my classes will leave with working/running code on their machine. So with that in mind I always try and ensure that I’m free immediately after my class. I do this anyhow for questions etc, but even more time to debug a machine if needed.</p>
<h3 id="post-the-class-conference">Post the class, conference</h3>
<p>I like to say that my classes come with life time support. So I do. And I mean it. Funny how very few people take me up on this. Anyhow, what I mean is, if we were still unable to get a machine or something up and running, I will give them access to me post the event. This could be my email, Skype or hangout etc.</p>
<p>So the student can work on the issue in the own time with my support. Or, when they have got their environment working they may want to re-run through specifics from the class, I’m always happy to do this.</p>
<h3 id="videos--handouts">Videos / Handouts</h3>
<p>Another back up plan is to have a video(s) or handout(s) of the activities available for attendees post the class. This is especially useful when talking over code, or explaining how to use a specific tool. Allowing the student to work though the material again in their own time, pausing where they need to.</p>
<h3 id="summary">Summary</h3>
<p>Technically workshops are hard. They are more complex by the very fact we have to use laptops. However we can do a lot to make this easier, however a lot of it requires work prior to the event. However as a teacher of technical classes I feel we have to go this extra mile.</p>
<p>If I design a class on a specific tool I want to ensure I can teach about that tool, not spend the first 0.5-2 hours battling admin permissions or other common issues. I want to teach the class.</p>
<p>If you have any advice on the above, or other ways you try to ensure the smooth running on a technical workshop, I would love to hear it.</p>
<p>Thanks for reading.</p>
<p><a href="https://thefriendlytester.co.uk/2016/10/how-i-get-technical-workshops-up-and.html">How I Get Technical Workshops Up and Running</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on October 16, 2016.</p>https://thefriendlytester.co.uk/2016/10/win-ticket-to-european-testing2016-10-03T14:53:00+01:002016-10-03T14:53:00+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>So, the folks at <a href="http://europeantestingconference.eu/2017/">European Testing Conference 2017</a> are awesome, because they share the profits with the people who play a large part in making the event happen, the speakers. So this year I did a workshop and a talk, therefore I earned free conference ticket for the 2017 event in Helsinki, or the money, I opted for the ticket.</p>
<p>I’m taking a sabbatical next year, and therefore unable to use this ticket, so I’m going to give it away!</p>
<p>So the conference is taking place in Helsinki on the 9th-10th February 2017. This competition is for the ticket <strong><span style="color: red;">ONLY</span></strong>, I’m not offering travel and accommodation.</p>
<p>So, how do you enter, and importantly give yourself a chance to win?</p>
<p>Well, I started a YouTube channel called <a href="https://www.youtube.com/channel/UC0QZWhi0ojqNte3ey7RD0qQ">Whiteboard Testing</a>, the purpose of the channel is to offer short informative videos on testing, no longer than 10 minutes. So to enter, I want you to create a video for the YouTube channel.</p>
<p>The rules:-</p>
<ul>
<li>This can be on any topic you believe relates to testing</li>
<li>IMPORTANT, please don’t mention that this is for the competition during the video</li>
<li>You do not need to use a whiteboard specifically, it could be a piece of paper stuck on a wall or a chalkboard, but there should be some visualisation to support the talk</li>
<li>Submit your video to me at richard<donotincludethisbitinmyemailaddress>bradshaw@gmail.com along with a title and description of the video for YouTube</donotincludethisbitinmyemailaddress></li>
<li>I suggest you watch some of the existing videos to get an idea of the pattern</li>
<li>You can enter as many different videos as you wish</li>
</ul>
<p><span style="color: red;">The competition ends on the 31st October 2016</span></p>
<p>I will then form a team of testing excellence to determine which we believe is the best video, and they win the ticket!!!<br />
Simples.</p>
<p><a href="https://thefriendlytester.co.uk/2016/10/win-ticket-to-european-testing.html">Win A Ticket To European Testing Conference 2017</a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on October 03, 2016.</p>https://thefriendlytester.co.uk/2016/08/charles-proxy-to-rescue-of-adobe2016-08-28T12:16:00+01:002016-08-28T12:16:00+01:00Richard Bradshawhttps://thefriendlytester.co.ukblog@friendlytesting.com
<p>The client I’m currently working at has decided to switch from Google Analytics to Adobe Analytics for our native mobile application. Which created a new testing problem for me, how do I test this?</p>
<p>Our current solution for Google Analytics (GA) was to use a development key, and using a combination of the Real-Time feature on GA and checking back the next day to see final propagated results.</p>
<p>But Adobe Analytics offers a tool to help test them called <a href="https://marketing.adobe.com/developer/gallery/bloodhound-app-measurement-qa-tool-1">Bloodhound</a>. Bloodhound is simply a proxy. You configure your device to route all your traffic via Bloodhound running on your machine, just like you would with any proxy tool such as Charles / Fiddler. So I gave it a go.</p>
<p>Initially I got no results in Bloodhound, turns out that is due to the SSL restrictions on iOS, so no problem, Bloodhound comes with a cert you just need to install. Installed it and just like magic analytics started appearing in Bloodhound! The magic didn’t last long though, because while Bloodhound seemed happy enough to pick up all the analytic calls, it seemed to kill all other calls, render my app pretty much useless! I could interact with our navigation and see the app making such tap and page calls to analytics, but I couldn’t get to 50% of the screens as they required server calls!</p>
<p>I discovered two ways to fix my issue.</p>
<p>The first one is very specific to our context. The iOS developers of our app has built an offline version of the APIs call, essentially a mock. So I was able to configure our app to use the offline mode and I was now able to navigate to all the pages and see if the analytics calls were correct. Sadly. though I ran into an issue with our offline mode, it didn’t quite have all the scenarios I needed to be happy with my testing, so back to the problem of Bloodhound eating my apps requests.</p>
<p>I did some googling and find some forums, but most of them were Adobe forums telling you to contact support and they would solve your problem with you. Nice support, but not something I was interested in at this stage, kind of expected it to take a while to get a response being a big company, probably a bias that could do with being tested again.</p>
<p>Anyhow, I ponded for a few more minutes, and decided, well if Bloodhound can intercept these calls, surely any proxy could. Sure enough, <a href="http://charlesproxy.com/">Charles</a> could see all the requests to the Adobe servers, and I could see the specific analytic calls being made. However it wasn’t as easy as Bloodhound.</p>
<p>Bloodhound was designed to show these analytics, Charles isn’t. So in Charles I get calls with lots of analytics in, in their raw form. Bloodhound was designed to strip individual analytic from the calls, meaning I could easy find a specific analytic caused by the action I just did, such as clicking a button or landing on a specific page.</p>
<p>So while I could now use the app against real servers, and see all the analytics, and able to test them, it just wasn’t as easy as I wanted. As said, Bloodhound made it really easy to test individual analytics. The process of tapping/navigating in the app, checking Bloodhound, was quick and efficient. It was a bit more cumbersome in Charles as I had to read over the raw call to find the exact analytic.</p>
<p>So again I pondered for a few more minutes, and remember a feature of request forwarding / mapping in Charles. Something I hadn’t actually used for a while, so required a few googles to refresh my memory. But there it was, Map Remote, the missing piece. Charles allow you to map requests to a remote server. A featured I’d actually used in the past to test against different version of an API, tricking the app in to using a version of the API it wasn’t yet coded to do so, a great way to test early.</p>
<p>However, as Bloodhound was running on my local machine, instead of mapping remotely, I wanted to map locally. No a problem, instead of a remote IP you just enter localhost or your IP. So I enabled ‘Map Remote’ in Charles and added a new rule. I should add here that you can configure the port Bloodhound runs on, in this instance it was 50000.</p>
<p>I configured my device to point to Charles and instructed it to map any calls for our Adobe server (you can find this out from Adobe SDK config, or just from looking at the recorded traffic in Charles) to my IP address on port 50000, which was where Bloodhound was running. I saved my config and gave it ago.</p>
<p>Voila! It worked. I was now able to see all my analytics in Bloodhound and my app was also able to hit the server, allowing me to hit every page in the app, and verify the analytics in Bloodhound. Win.</p>
<p>So there you have it, a nice combination of tools. I really do love proxies! Such a powerful tool.</p>
<p><a href="https://thefriendlytester.co.uk/2016/08/charles-proxy-to-rescue-of-adobe.html">Charles Proxy To The Rescue of Adobe Bloodhound </a> was originally published by Richard Bradshaw at <a href="https://thefriendlytester.co.uk">Friendly Tester</a> on August 28, 2016.</p>