You may be wishing that you had a magic tool that would automate all of the testing for you. If so, you will be disappointed. However, there are a number of very useful tools that can bring significant benefits. In this chapter we will see that there is tool support for many different aspects of software testing. We will see that success with tools is not guaranteed, even if an appropriate tool is acquired – there are also risks in using tools. There are some special considerations mentioned in the Syllabus for certain types of tool: test execution tools, performance testing tools, static analysis tools and test management tools.
6.1 TYPES OF TEST TOOL
- Classify different types of test tools according to the test process activities. (K2)
- Recognize tools that may help developers in their testing. (K1)
In this section, we will describe the various tool types in terms of their general functionality, rather than going into lots of detail. The reason for this is that, in general, the types of tools will be fairly stable over a longer period, even though there will be new vendors in the market, new and improved tools, and even new types of tools in the coming years.
We will not mention any commercial tools in this chapter. If we did, this book would date very quickly! Tool vendors are acquired by other vendors, change their names, and change the names of the tools quite frequently, so we will not mention the names of any tools or vendors.
6.1.1 Test tool classification
The tools are grouped by the testing activities or areas that are supported by a set of tools, for example, tools that support management activities, tools to support static testing, etc….
There is not necessarily a one-to-one relationship between a type of tool described here and a tool offered by a commercial tool vendor or an open-source tool. Some tools perform a very specific and limited function (sometimes called a “point solution”), but many of the commercial tools provide support for a number of different functions (tool suites or families of tools). For example, a “test management” tool may provide support for managing testing (progress monitoring), configuration management of testware, incident management, and requirements management and traceability; another tool may provide both coverage measurement and test design support.
There are some things that people can do much better or easier than a computer can do. For example, when you see a friend in an unexpected place, say in an airport, you can immediately recognize their face. This is an example of pattern recognition that people are very good at, but it is not easy to write software that can recognize a face.
There are other things that computers can do much better or more quickly than people can do. For example, can you add up 20 three-digit numbers quickly? This is not easy for most people to do, so you are likely to make some mistakes even if the numbers are written down. A computer does this accurately and very quickly. As another example, if people are asked to do exactly the same task over and over, they soon get bored and then start making mistakes.
The point is that it’s a good idea to use computers to do things that computers are really good at, and that people are not very good at. So, tool support is very useful for repetitive tasks – the computer doesn’t get bored and will be able to exactly repeat what was done before. Because the tool will be fast, this can make those activities much more efficient and more reliable. The tools can also do things that might overload a person, such as comparing the contents of a large data file or simulating how the system would behave.
A tool that measures some aspect of software may have unexpected side effects on that software. For example, a tool that measures timings for nonfunctional (performance) testing needs to interact very closely with that software in order to measure it. A performance tool will set a start time and a stop time for a given transaction in order to measure the response time, for example. But the act of taking that measurement, i.e., storing the time at those two points, could actually make the whole transaction take slightly longer than it would do if the tool wasn’t measuring the response time. Of course, the extra time is very small, but it is still there. This effect is called the “probe effect”.
Another example of the probe effect occurs with coverage tools. In order to measure coverage, the tool must first identify all of the structural elements that might be exercised to see whether a test exercises it or not. This is called ‘instrumenting the code’. The tests are then run through the instrumented code so that the tool can tell (through the instrumentation) whether or not a given branch (for example) has been exercised. But the instrumented code is not the same as the real code – it also includes the instrumentation code. In theory the code is the same, but in practice, it isn’t. Because different coverage tools work in slightly different ways, you may get a slightly different coverage measure on the same program because of the probe effect. For example, different tools may count branches in different ways, so the percentage of coverage would be compared to a different total number of branches. The response time of the instrumented code may also be significantly worse than the code without instrumentation. (There are also non-intrusive coverage tools that observe the blocks of memory containing the object code to get a rough measurement without instrumentation, e.g., for embedded software.)
One further example of the probe effect is when a debugging tool is used to try to find a particular defect. If the code is run with the debugger, then the bug disappears; it only re-appears when the debugger is turned off (thereby making it much more difficult to find). These are sometimes known as “Heizenbugs” (after Heizenberg’s uncertainty principle). In the descriptions of the tools below, we will indicate the tools which are more likely to be used by developers during component testing and component integration testing. For example, coverage measurement tools are most often used in component testing, but performance testing tools are more often used at system testing, system integration testing and acceptance testing.
Note that for the Foundation Certificate exam, you only need to recognize the different types of tools and what they do; you do not need a detailed understanding of them (or know how to use them).
I was very happy to search out this web-site.I wished to thanks in your time for this glorious learn!! I undoubtedly enjoying each little little bit of it and I’ve you bookmarked to check out new stuff you weblog post.
Excellent post. I used to be checking continuously this blog and I am inspired! Very useful info particularly the last phase 🙂 I deal with such info much. I was looking for this particular info for a long time. Thanks and good luck.
I’ve been surfing online more than three hours today, yet I never found any interesting article like yours. It is pretty worth enough for me. In my view, if all web owners and bloggers made good content as you did, the web will be much more useful than ever before.
Someone essentially assist to make seriously articles I might state. That is the first time I frequented your website page and up to now? I surprised with the analysis you made to create this particular post amazing. Wonderful task!