_By Usman Khan _
When it comes to building mobile and web applications, testing is absolutely crucial to ensure that you create a high quality, robust and scalable applications. Here at xDesign, we incorporate testing (unit testing) throughout the entire app development cycle. This ensures we can significantly reduce the number of bugs by identifying any issues earlier on in the development process. A solid testing strategy ultimately enhances the overall user experience and ensures that we deliver the highest quality apps to our clients.
Recently, I had the opportunity to attend the London Tester Gathering Workshops run by the Ministry of Testing in London. These workshops are a fantastic way to keep on top of what’s going on within the wider software testing space and allows testers to come together to collaborate and share new ideas.
Here’s a quick run down of how we got on and what we learned over the 2 days of workshops: #### iOS UI Testing with XCUITest in Swift
This workshop focused on writing UI automation tests for iOS applications using Apples XCUITest framework. Due to the technical knowledge required, this was primarily aimed at those who were familiar with Apples Xcode IDE and Swift programming language.
Some of the topics that were covered included: - Capabilities of XCUITest
- How to get started with writing tests
- Identifying what to automate
- Good practices in writing automation tests
The workshop itself was interesting and we enjoyed the fact it was very practical, interactive and hands on.
The facilitator had setup a Github repository with three sample projects to work with. As a group we tackled each project and discussed what should be tested and what components we need to identify when trying to write these tests- for example, identifying navigation bar components such as UIBarButtonItems.
There were some minor hiccups at the start of the workshop as some people did not have MacBooks and the latest Xcode version installed - these were some of the prerequisites but we managed to get up and running eventually!
I ended up pairing up with someone who did not have any iOS knowledge and it turned out to be a really good experience. I made the decision to let my partner take the reins since I already had existing knowledge of the topics covered in this. It was interesting to see how accessible Apples framework and component ‘lingo’ was. We were able to identify and discuss the components and actions that would be good to automate UI tests and why these would be important - eg. relating to business needs etc.
The main takeaway for me was towards the end of the workshop when there was a really interesting discussion on the Page Object Model (POM). POM is a widely used pattern when automating tests as it separates page specific code and test code. Little did I know I had actually started implementing POM without realising this in the past!
Learning more about this has spurred us on to look into the Page Object Model and take some of our existing apps and start applying these practices into our existing projects for our enterprise clients. #### Exploratory Testing 101
This was one of the workshops we were most excited to attend. The purpose of it was to explore the concept of exploratory testing and how to adopt it in a way that is effective for us as software testers and for our wider team.
Instead of focusing on managing mountains of test cases and dealing with bugs that can potentially slip through the net, the purpose of exploratory testing is about finding out about what the software is, what it does and what works and what doesn’t work. The tester is then constantly making decisions about what to test next and enables them to effectively prioritise.
The main advantages of exploratory testing is that typically, less preparation is needed, more bugs are found and faster and testers can use deductive reasoning based on results of previous testing. They do not need to complete a series of scripted tests and arguably accelerates faster bug detection overall.
This workshop itself was a lot of fun and involved a large amount of collaboration. After a brief introduction on why testing is important, we were split in teams of 5 and were asked to follow a set of test cases.
As you can see from the above photo, the test cases involved us looking around the building and following the steps in the chart. As we were exploring, we found that the test cases were too ‘by the book’ and not very flexible. For example, some of the criteria was met but not quite. This sparked conversations about how test cases are good but the risk associated with each case is different depending on the impact it has E.g Financial loss, Compliance etc
The second half of the workshop was practical and it involved us testing a game called “ZType.” The purpose of the exercise was to:
-quickly and efficiently discover bugs through exploratory testing techniques
-identify potential vulnerabilities and risks earlier on
-move away from looking at single a set of test cases and take a more holistic view
From participating in this we quickly realised that exploratory testing had a range of benefits, in particular around picking up on issues and bugs that might not be covered in normal test cases. It also allowed us to pick up on additional issues and prioritise the risks. We learned how to accurately assess vulnerabilities and risks and not just sporadically raise bugs.
We’d highly recommend attending workshops run by the Ministry of Testing. Not only does it give you the opportunity to expand your knowledge and learn new ways of working, but it also allows you to network and collaborate with fellow testers who may have an entirely different skill set to you and whom you can also learn from.
We are looking forward to incorporating exploratory testing into our existing and future client projects, especially into big enterprise client projects that are often complex and heavily rely on business logic.