By Mark Winteringham
The Software Testing Clinic is a safe environment for those who are interested in software testing to learn and enhance their testing skills. It also enables more experienced testers to learn and enhance their mentoring skills. At Software Testing Clinic events, we get asked a lot of good questions and not all of them we can answer in detail. This series explores some of the more common questions attendees ask. For this article, we will explore tools in Software testing, what types of tools are out there, recommendations, and what to be aware of when choosing tools.
It’s important to ask yourself, why do you want to learn about a specific tool or set of tools? They are an integral part of software testing, supporting what we do on a daily basis. However, having knowledge of a set of tools is less important than knowing when and where to use the right tool. An effective tester will also have the skill to know when and where to use the right tool because the problem requires it, not because the job market determines it desirable. Using the wrong tool at the wrong time can have adverse effects on your day-to-day work, potentially slowing you down, or worse, giving you biased or flat out false information. That’s not to say you shouldn’t explore new tools, but always remember:
Problem first, tools second
With this concept in mind, let’s explore different categories of tools. Some examples will be offered but they are by no means an exhaustive list. I encourage you to build up a toolbox or reference list of tools you have used in the past.
Mental Tools and Tricks
For me, the most important and, in my experience, the most neglected of tools is a tester’s own brain. Software tools can only take a tester so far. To be a great tester, we need to rely on our brains for test design ideas, identify questions to ask, and choose techniques to use when testing. This can be hard to learn and is a skill that even the most experienced testers are always improving upon. There are mental tools and tricks we can use to help trigger ideas in the form of heuristics.
Heuristics are defined as a fallible method of solving a problem or making a decision. They are used to help trigger ideas, questions, and other ways of thinking which might not come naturally without a prompt.
There are many heuristics, but here are some examples:
-
The Rule Of Thumb - A simple heuristic that allows an individual to make an approximation without having to do exhaustive research.
-
CRUD - A mnemonic that helps you to determine whether an application can Create, Read, Update and Delete data.
-
Goldilocks - Ask yourself when testing data, what if submit something ‘Too big, Too small, or Just right’.
I would encourage you to go and seek heuristics and share them with others. You can mix and match them to great effect to get different results. To get you started there is a great collection you can use in the Test Heuristic Cheat Sheet.
Documentation and Recording Tools
As testers, one of our key roles is to discover information and share it with our team to keep them informed. This can become a big task especially as your product and project grows in size. When documentation is  a means for sharing information we want to strike a balance in creating content which is succinct and relevant. A 30-page document will probably be skipped over or rarely read, and a single paragraph on a page might not convey enough information. There are many ways to document information, here are some tools you can use:
-
Mind mapping - Mind mapping is a popular way to rapidly create notes on testing and share thoughts in a structured format. There are a lot of mind mapping tools out there such as Xmind, MindMup, and Freemind.
-
Diagrams - The saying ‘a picture can speak a thousand words’ is a relevant one to communicate more complex or abstract ideas to your team.  Tools such as Draw.io and Gliffy can help you quickly create diagrams to show how processes work or applications are structured.
-
Screenshots and video recording tools - Using a screenshot or video recording tool is a great way of improving your bug reports. Providing visual content to describe bugs can help developers as well as capture relevant data.
-
Test reporting tools - Tools like Rapid Reporter, a tool based on the concept of Session Based Testing allows you to generate reports documenting your testing with structure to make your reporting informative, but not so restrictive that it limits your testing to a preset instruction like test cases.
Data Generation Tools
Some testing activities require test data to be configured and stored to assist in testing activities. This can be a laborious task, and when done manually can be prone to errors. We can use tools to help us to create data rapidly, adding in features that can randomise content. These can be used to either store data for later use, or generate data based on test ideas you might have during a testing session. Here are a few tools you could consider:
-
Database Languages - The majority of applications will have some sort of data layer where content is stored. Work with your developers to learn how you can access your test database to create and query data. A good database language to learn would be SQL which is widely uses and has a lot of information available.
-
String Generators - Tools such as PerlClip and BugMagnet can create a wide range of varied strings that you can use to inject into forms that are being tested. The big list of naughty strings is a good reference as well and has a python script ready to use.
-
HTTP based tools -  If you work with web based applications you can use HTTP clients such as Postman, Curl and JMeter to generate HTTP requests that can be reused to generate data. This has the benefit that you don’t have to manually fill in a form in the UI multiple times, whilst still triggering the same behaviour the UI would carry out when sending data to the back-end of an application.
-
Form filler - You can use Chrome extensions such as Form Filler or build your own to populate forms on the user interface level.
Information Tools
An application is more than just it’s graphical user interface. There are lots of interfaces and information we can access to learn more about how the application behaves. Testers can use tools to access information on different levels of the stack. Either to retrieve specific information that we require or passively return lots information that can be processed later. There are many types of tools for this, such as:
-
Web proxies - Tools like Postman, BurpSuite, Fiddler and Charles can work as a ‘man in the middle’ listening to traffic coming from your browser or computer to your back-end and vice versa.
-
Command line tools - Tools such as ssh, grep, and tail will allow you to gain access and read relevant information on the product that typically isn’t shown in a user interface. A good, testable application should have lots of logging to give details on what is happening in the service layers of the application.
-
Monitoring tools - There are hundreds of different monitoring tools which can give data from log files, hardware stats and traffic in a way that is easy to consume. Some examples include Tailgate, Kibana and New Relic.
-
Developer tools - If you work with a web application, the most popular browsers come with developer tools. These tools are incredibly useful for testers, giving us insights into how HTML is structured, what is being downloaded to create the page, and errors or debug information about JavaScript being executed on the page.
Automation and Programming Languages
When testers talk about tools, it’s very easy to get fixated on test automation due to its popularity in the industry. The examples above show that test automation is not the be all and end all of a tester’s toolbox. However, it’s useful to learn about programming languages and test automation. Learning to program and automate isn’t just about using a tool like WebDriver to automate all your tests. Learning to program can benefit how you communicate with members of your team. It can help you identify risks to explore when reviewing newly merged code and it can also allow you to create tools similar to the ones mentioned above that work within the product’s context. Rather than suggest specific libraries, here are some sites you can go to to learn about programming:
-
Code tutorial sites - Sites such as CodeAcademy and FreeCodeCamp provide you with introductions to languages, code examples and tests.
-
Stackoverflow - Great for asking questions or searching questions similar to your issues.
-
W3Schools - Great for learning about how HTML, CSS and Javascript work together.
-
The New Boston - A youtube channel that helped me considerably when starting out.
When learning to programme, it’s important to not only know how specific libraries work but to know how to use good development techniques to create something that is robust, maintainable, and useful. Finally, if you don’t have the time or the appetite to learn how to programme, speak with a developer, they will be able to share a lot of knowledge and aren’t scary. You can even ask them to develop a tool for you!
Wrapping Up
There are many tools out there for a tester and there is no single tool or set of tools that will make you a better tester. Tools are only as effective as the context that they are used in.  Think about what it is you want to achieve and then determine what tool you can use. Don’t be afraid to experiment with tools or share your experiences with others. You may uncover hidden benefits or end up identifying a tool that benefits your whole team.
Author Bio:
Mark Winteringham is a tester, teacher, coach, mentor and international speaker, presenting workshops and talks on technical testing and automation in testing. He has worked on award-winning projects across a wide variety of technology sectors ranging from broadcast, digital, financial and public sector working with various Web, mobile and desktop technologies. Mark is an expert in technical testing and test automation and is a passionate advocate of risk-based automation and automation in testing practises which he regularly blogs about at mwtestconsultancy.co.uk he is also the co-founder of the Software Testing Clinic in London, a regular workshop for new and junior testers to receive free mentoring and lessons in software testing. Mark also has a keen interest in various technologies, developing new apps and Internet of thing devices regularly. You can get in touch with Mark on twitter: @2bittester