Last Friday I visited my old university where I studied up until just four years from now. The place where I learned how to learn. It was amazing how little changed beside the fact that students nowadays get charged a whole lot more money for their education. In Germany currently there is a rough discussion about these fees and that the universities do not take care for the educational side properly. The graduation celebration I visited last Friday was accompanied with a talk from a previous mentor of mine. He had some data on how education had changed over the last decade and made a comparison between the old Diplom courses and the new Bachelor and Master system. Reflecting over the past years and that talk, I came to the realization that there seems to be a gap in our industry currently.
What did I see or hear that leads me to this conclusion? Reflecting back four years from now I knew nothing about software testing. Over the last years of my study I concentrated on pattern recognition, like face-detection in images, and my diploma thesis handled about hand gesture detection in human-robot interaction scenarios. Back in April 2006 I joined a team of great testers and needed to learn software testing. Thus far I had not participated in a course on software testing. The team I was working in was doing a whole bunch of software test automation using shell-scripts. Over the course of the next few years I did learn how to teach myself what software testing is about. I learned that software test automation is software development, I learned that exploratory and sapient tests are very worth the effort, when accompanied with the right organizational methods, and I learned a whole bunch about Craftsmanship and Cooperative learning sessions.
In general I would conclude that I learned almost eighty percent of the stuff I need on a daily basis right after leaving the university, while the material I learned in university is not that relevant for me any more. As a software tester I don’t need to know how a wrenches for robot hand motorics work, since I don’t need them. Multi-layer perceptrons are not an option for me. Learning algorithms like AdaBoost and online and offline algorithms are not needed in order to test software. Well, I wouldn’t claim that the rough six years I spend at the university were wasted, but I feel that I dd not learn the right things there.
Recently I noticed that there seem to be others who feel just like me. The Software Craftsmanship conducts coding dojos and programming katas to teach the apprentices what the universities are not teaching them. Design Principles like SOLID and Design Patterns are taught on a on-the-job training between Journeyman and Apprentices. For software testers there are similar things happening, i.e. James Bach and Michael Bolton created a Rapid Software Testing class, Cem Kaner has also great courses. Yet, besides Cem Kaner and other distinct persons we do not seem to have reached the universities with our efforts. When I took a course named “Software Praktikum” back in the year 2000, people were talking about test-driven development and that new movement called eXtreme Programming, but no one really taught us something about it.
When I took a look on the course material nowadays I found out that the situation had been improved over the last few years. Nowadays students get offered test-driven development courses, some Design Patterns and maybe some Refactoring. Unfortunately I did not run across a testing course at my university.
Therefore I concluded that I would like to do something on this as part of a New Year’s resolution. Personally I want to help people understand software testing, help them grow into the craft and hopefully get a better tester than I am. There are a lot of movements currently going on, and I think based on my past I can be a contribution to these movements. This is all I want to say for now. If I made you curious about more, you may want to subscribe to my feed, as I will be digging deeper here shortly.
I’m with you on the education front! There needs to be a more formal curriculum used as part of a software engineering program.
I’ve been thinking about this same issue for a while myself.
I think first of all we need some skilled trainers like Cem Kaner, James Bach and Michael Bolton. Over time we will be able to come up with a curriculum, when we start to see patterns in the education of good testers. In general I don’t see a silver bullet coming in the next few years, yet. What we can found now is the basis for the curriculum to come in some years, perhaps decades. But I’m not that good at looking into the future. I saw many surprises over the course of the last year. I hope there will be more supporters of good education (in comparison to the marketing and certification guys who just seem to watch out for easy money to make) in the next few years.
I had one or two classes in my 4 years at university that talked about testing. I know some universities are changing that but it is still not mainstream; it seems to depend on the professors at each university. One of the things I got out of my universtity education was not the practical skills, but the ability to question and to seek out new ways of learning.
I think one of the most important things we can do as a profession is keep talking about what good testing means, and encourage people to take charge of their careers; to read what some of the good testers have to say, and push the envelope.
In the spirit of discussing this topic deeply, I’m going to disagree with Markus. We shouldn’t have to wait for good trainers to start. I don’t believe that is the missing piece. Nor do I believe that we should look for the patterns from the educators because they are educators. The folks you mention are practitioners as well as educators, but I believe there needs to be a focus on meta-teaching. i.e. how we teach the teachers.
There will need to be deliberate planning on what the gaps are and what skills are needed. A few that come to mind:
– core test techniques
– essential test planning
– basic test management
– how testing fits into software development processes.
These can be followed with more advanced studies:
– why are the techniques useful? (e.g. the math behind pairwise testing, theory behind usability testing, etc.)
– building test tools
– etc.
All of this is topped off with research into validating effectiveness of testing, developing new test techniques, etc.
I think we agree on a more abstract level, but not on the detailed approach to take. That’s ok for me, and I think that I also agree to some aspects of your proposal. There are things we can now define, yet I came to the conclusion that there is whole lot more of practical things that we need to understand to teach them. But maybe you just showed me my own self-blindness here….
I will continue on this blog series tomorrow after giving this some more thought. Thanks for your inspirations. :)