Software Testing Test Engineer Skills Software Tester
If software testing was easy, there would be no buggy products, but you can develop excellent software testing skills and have an enormous influence on product quality. Of course, testing software is not simply a matter of making sure that it works. The developers will have already satisfied themselves that the product basically works. No, your task is to find out and test under what circumstances the product will fail. And all products can be made to fail.Software is the coded element of a computer system and a tester needs to understand how the software is supposed to work, the platform and context in which it is intended to work, and the numerous parameters that affect how it will work. That means thinking about how the user operates the software, what the load will be, how much data will move about and when, what other software the product interacts with, and much more besides.Some software testers develop software skills themselves and can inspect the code itself, working closely with the developers to challenge the structure and logic of the programs at each stage of development, so-called white-box testing. Developers will produce their own test cases but often a tester will produce more challenging tests.But whether or not you develop those software skills, there is an enormous area of testing expertise to get into.Test case developmentIt is well-known that developers can sometimes be blinded by their closeness to the code and fail to consider paths other than those they have designed in. So when a user behaves erratically or in a counter-intuitive way, perhaps because they expect the software to work differently, the developer has not anticipated it. It is the software tester's job to anticipate just those counter-intuitive uses, the unexpected expectations, the user selection of the wrong option.There are two main areas of judgment required in development test cases: depth and coverage. Given the almost infinite number of paths through a complex piece of software, it is physically impossible to test every single route. Consequently, the tester has to judge what are the most significant, which are the most dangerous, which are the most common or likely.They will look at the testing done by the developer and then substantially augment the set of tests pushing the boundary values, putting in extreme parameters, doing the same thing multiple times, rapidly clicking the same button, trying to exhaust the resources of the system. They will heavily load the system with separate processes, reduce the memory availability, slow the network connection, generally pushing the environment towards the extremes.But they will also look at more subtle effects, for example plugging in a different piece of hardware, a different keyboard. They will test the interface with strange characters, add spaces, put is illegal characters, and so on. They will make silly mistakes deliberately, close the program mid-process, open multiple versions, and so on.But some of this activity will be highly structured to ensure coverage of particularly vulnerable aspects of the system. There will be a minimum level of both depth and coverage that has to be covered and documented which will correspond with the expected customer usage.There will be functional testing to check use cases, ensuring that the customer can actually complete successfully the tasks they need to carry out on the system. There will be usability testing to ensure that the interface is adequate, clear, and reliable. They may test the structure of menus, the accessibility of options, the size and clarity of buttons and other UI elements. In addition, they will develop expertise in testing for those with visual or physical impairment and will be aware of industry and legal standards.Performance testingWe all know that when a database is small, access times are wonderfully fast. But as the complexity and scale increases, access times can become problematic. Systems have to be resilient enough to cope not just with the known increase in load, but a rather intangible growth as well. Testers are crucial in identifying potential bottlenecks and identifying what happens when the systems are fully loaded.Sometimes, it is not possible to produce a scaled up version of the system because it would mean reproducing the entire customer installation. So modeling is an important aspect of performance testing as is automation. An automated process of logging on, driving a user interface through a sequence of actions, and then logging off, can be repeated for days on end to simulate large scale use. Testers will develop expertise in setting up and controlling automated testing processes, perhaps by writing their own scripts in a scripting language together with commercial automation tools required to interact with graphical interfaces such as Windows.Disaster recoveryThe unthinkable can in fact happen. A critical aspect of system testing is being able to recover from a catastrophic failure, a flood, a fire, an explosion, theft of all the equipment. Although many software companies treat this matter rather lightly, it is a fundamental part of system security to test the disaster recovery plan. Software testers are often involved in running through the recovery paying particular attention to points of failure, performance data, security and other aspects.Security testingOften a popular area for testers, this is subtly different from hacking and trying to crack passwords and has many subtle layers of knowledge. Good security testers are worth their weight in gold because a security breach is massively expensive for any medium to large-scale system. Not only does the system manager need to know what was accessed and perhaps changed, but they need to know what else might have been seen. Prevention is therefore very much better than cure.Security testers are often very highly skilled but possessing of a devilish sense of curiosity and daring. They will make use of any and every hacking tool available to them, exploiting every loophole and vulnerability. They will often be surprisingly efficient at cracking a system regardless of how secure they are told a system is. Possessing of in depth knowledge of system structure, operating systems, security permissions and controls, they will also possess scripting and programming skills and a wide range of knowledge including databases, services, networking, internet, and other technologies.Testers are open-minded and interestedThe best testers are always those who are curious about how the system works. They want to know how the software is constructed, they know something about the languages they are written in, the tools programmers use. They keep up to date with changes in the technology, try out new hardware, sample new software, explore all the menu options, ask questions and find answers.They are almost terrier-like when tracking down bugs and although developers and programmers sometimes may seem to be irritated by determined testers, they genuinely appreciate their efforts to drive up quality. The broader vision testers bring to the development process help good developers appreciate the limitations of their own test cases. Many programmers, myself included, have benefited enormously from the supportive criticism of highly competent testers.Good testers can do the grunt work tooThere are many times in software testing when something is repetitive, perhaps tedious, and encourages us to pay less attention. Good testers recognise this as a risk to the quality of the testing and respond by paying more attention. Even though it might be boring grunt work, just ploughing through some routine activities, they nevertheless have their antennae up, detecting the slightest sign of a defect.The very best tester catch defects that have been missed repeatedly as developers run through their routine testing. It is a particular skill to be able to do repetitive work with a high level of concentration.Good testers have a sense of realityGiven the complexity of software systems, a good tester also knows when enough is enough. At the end of the day, a product needs to be shipped. It may not be 100% secure, and there may be problems with some aspects of the functionality, and perhaps the user interface needs some changes, but at some point a business manager needs to start charging for the product in the market.So testers, just like everyone else work to deadlines. The sense of reality comes in when testers have to prioritise what they are going to test to get the maximum benefit, knowing that not everything will have been tested before shipping.This is a serious conflict for dedicated testers because they absolutely do not want to release a product that hasn't been properly tested. That word "properly" is a judgment call. Experienced testers know which areas are fundamental and which are less important but there is almost almost some argument between testers, developers, and business managers over the level of testing required to ship a product. Managers respect the judgment of testers who show this sense of realism.Software testing requires a very wide range of qualities and skills but the environment is challenging and demanding. It is a competitive field because the harm done by poor testing is very expensive. But at the same time, it provides an excellent grounding for other career paths as well, whether development management or development itself, and the skills are transferable to other industries.