Sources of Learning Technical Skills for Software Testers
An important area of expertise for Software Testers to develop skills is in our ability to gain an understanding of how our software behaves and interacts with its environment. When testing software the temptation can be to focus on the product features, however the manner that the software interacts with the operating system, network, databases and other resources that reside within the operating environment can throw up as many significant issues. The problem that we face as testers in this regard is that there is no de-facto source for learning this stuff. Whereas there are many approaches and schools documenting testing theory and the design and management of tests, there are no such schools teaching the skills of monitoring and measurement of application resource usage. Given that the possible range of skills that a tester may need to draw upon depending on the task at hand is so diverse, it is understandable that this is the case, but this doesn't really help us. The good news is that, with an enthusiastic approach and a good dose of persistence there are plenty of channels via which we can learn valuable skills which will help us in our testing endeavours.
Here I present a few ideas of potential sources of information that can help enthusiastic testers to develop their skills.
Potential Angry Stakeholders
One of the first places to look when trying to establish how to measure the resource usage of your system within its environment is to consider who's going to get mad with you if the system performs terribly in that regard. Finding those individuals whose domain your poorly performing software will be messing up and finding out how they measure what is important to them is a great start. In my experience people are always happier to share a skill with you to allow you to progress on your own than for you to bother them repeatedly requesting assistance. Asking for some devoted time for one on one training will not be rejected if it allows you to be less dependent on their skills in the future.
- System Admins Internal IT folks and system administrators are a great source of information on understanding the behaviour and configuration of operating systems. If you have a friendly system admin team, arrange some time to spend with them learning the attributes of software that are important to them and the tools that they use to measure these. A few years ago I learned a great deal on the monitoring of Windows processes and nework usage from the system admins at the organisation that I was working with, which helped me to pinpoint some network problems to a specific device in our installation architecture.
- DBAs. At some point in your testing career you will almost certainly work with a system that interacts with a database. Being able to query to check that your data is present in the tables is a good start, but it will really benefit your testing to avance your skills beyond this basic level. Your DBA can help you to understand what can impact the performance of a database system, and how to monitor activity as your application runs. Being able to examine the queries that your software is executing against the database and critically assess the efficiency of these is a valuable skill to learn. Reporting performance is one thing, but if you can go to the programmers with a set of recommendations of how they might actually improve the performance of the application through better query design or indexing, this will earn you a whole heap of respect with the team.
As well as potential stakeholders, a tester's colleagues also have a vested interest in their ability to monitor the application's use of resources. It can be easy to overlook those closest to you when looking for ways to improve your knowledge and skills.
- Programmers Programmers are highly skilled and inquisitive (and sometimes, dare I say it, a bit geeky) so usually have a range of knowledge that extends well beyond cutting code for the product in question. If you are lucky enough to work with a friendly crowd (not always the case) chat to your colleagues and see if they know any tools that might help you in your testing endeavours. In my experience many programmer write their own tools to help with their day to day work, often including tools to view key system information. Developer written tools in my toolkit include handy command line odbc query tools that query at various interface levels within the system, a tool to measure the in memory size of an object and numerous flags and debugging options to obtain runtime information from the application. In addition to learning some excellent tips and tools, I find that actively trying to learn from the programmers helps to elevate your reputation with them and give greater credence to any issues that you raise.
- Your tester colleagues As I wrote about here a test team should ideally comprise individuals with a matrix of skills and experience. Each tester may possess skills or expertise that could be shared across the team. In your own company try developing a culture of communal learning among your fellow testers. Creating a wiki with sections for useful testing tools and tricks in a similar way to what I describe in this post is a great way to share knowledge. Taking it in turns to do lunchtime presentations on tools that you have been using will help to advance the knowledge of the team as a whole. Sharing your learning will help not only improve your skills as a team but consequently the quality of your product as well.
Not every tester has the benefit of expert stakeholders or skilled colleagues to help them to advance their craft. Although appropriate for all testers, in this situation particularly the use of external resources is key.
- Operating system tools There are many tools and utilities available integrated with or in extension to operating systems that can help with monitoring such as procmon/filemon/perfmon/procexp for windows, top/ps/iostat/netstat/sar/lsof to name but a few of hundreds for unix/linux. Looking at the man pages of the tools that are available by default in the operating system command line can give some great information on options that might make those tools useful for testing purposes.
- Open Source Tools There are many open source tools for more specific tasks such as WireShark/Fiddler for monitoring network/http activity, cports for monitoring open ports and FireBug for debugging web page content. Try searching around and see what is available, and assign time in your schedule for researching and learning new tools. This investment of time and effort will pay for itself in the longer term with the skills that you will develop and the insights those abilities will give you into the performance of your software.
- Testing forums For any testing/monitoring problem that you face the chances are that someone has hit something similar before and there will likely be a forum discussion somewhere discussing related issues. If not then there are many great forums online for software testers where you could post your question such as the Agile Testing Group, the Context-Driven Testing Group as well as the Software Testing Club. Ask specific questions on testing forums and you will have a wealth of experts to help you. Be careful not to waste time with questions that are too general or not well thought out, if you have put no effort into researching your question then don't expect busy folk to spend their time furnishing you with an answer.
- Training Courses Although sometimes not the most cost effective method of learning, it might be that a training course is an option to get you started in working with a particular technology. If the relevant expertise is not available in house then a training course might be the best avenue available to you. If you need database skills, for example, and don't have an in house DBA then discuss with your manager about getting some training. If you outline the activities that you hope to be able to achieve with your skills and the resulting benefits then an understanding manager may well agree to a training budget for you. On more than one occasion in the past I've successfully lobbied for budget for training courses to get me started with technologies that my product was interfacing with or languages to aid test automation.