As software testing continues to be recognized as one of the key enablers of DevOps and digital transformation success, the need for experienced testers is growing. Those looking for ways to become better testers have never had to look far, as countless blogs, podcasts, and lists of recommended reading have existed for years. But one area for learning more about the art and science behind testing that’s always been somewhat lacking is in college classrooms.
With a long history in technology and a deep appreciation for software quality, entrepreneur and college professor Khayyam Hashmi noticed an opportunity to launch a software testing course at his alma mater, Wayne State University.
We sat down with Khayyam to learn more about what inspired the creation of this course and why students pursuing computer science degrees benefit when entering the workforce with a greater understanding of modern approaches to software quality.
Noel: Would you mind sharing a bit about your background and how you became interested in software testing?
Khayyam: Sure. My testing background is a mix of both academia as well as in the tech industry. My masters was in software engineering and included a focus in software testing. That focus was really more around “formal” testing, rather than the development testing that we do here in the course I teach.
After I graduated, I worked as a software design engineer for Microsoft. My team was responsible for writing test frameworks, something similar to let’s say, Selenium or other script-based tools. We had our own internal tools and we used to write sample test cases on top of that.
Later on, I had a couple of SaaS start-ups, and I was always keenly focused on ensuring that we’d gotten the quality right everytime our product shipped. All of that combined is what motivated me to be help create software testing courses at Wayne State for both undergraduate and postgraduate students.
Noel: I know our CEO is a fellow Wayne State Alumni; I’m sure he supported the addition of this course to the catalog.
Khayyam: That’s really an interesting story. In the year that this class was first offered, I reached out to the head of our department at the beginning of that summer, saying, “I’d like to offer a course on software testing.” And then in early Fall of that same year, Sandeep contacted our dean with a similar proposition. I’d been designing the course for 2-3 months, and we ended up combining Sandeep’s ideas and mine for what I think is a really valuable learning experience for our students.
Everything just kind of fell into place at the right time.
Noel: That’s awesome! You mentioned that instruction is available for both under- and post-graduate students; what sort of variation is there in the students’ experience with software testing? Do you have students who are coming in who really don’t have any real knowledge of what software testing even is, as well as some with a much higher level of understanding?
Khayyam: We do, and based on percentages for the class, it’s pretty interesting. We have a very large number of novices, where this course is literally the first time they’ve even heard the phrase software testing before. Then I usually have some students who have been software testers for about three or four years. And then some In various capacities in between those. Tailoring this course to certified audiences is definitely a challenge.
Noel: I bet. How do you go about trying to do that?
Khayyam: What I usually tend to do is first break the course down into three parts. Part one is an introduction to make sure everyone is on the same page. Part two is where I try to bring up the students who have less knowledge of software testing and get them interacting with some basic test cases and gaining some experience around automation. Part three is where we go deeper into some of these topics to make sure that even the people who come in with some advanced knowledge will definitely learn more, but even the novices will have learned enough at this point to grasp some pretty advanced, modern concepts.
Khayyam: The eventual plan is to split this course into at least two courses. One will be an introduction to software testing, and the other will start with more advanced instruction.
Noel: For the students who come in there with years of experience, what is it that they still take away as something brand new?
Khayyam: The “experienced” students that I have dealt with so far are largely those who just went into the field of software testing without any formal education and they just learn skills over time. One of the main things that they take out of this course is a process. How to go about testing something. Maybe it’s learning different testing methodologies, and they also always learn how to effectively use a couple of new tools, and how to evaluate their strengths and weaknesses.
Lastly, the students, at all levels of experience, always really enjoy learning more about exploratory testing and dissecting some modern concepts around quality that are fun to dive deeper into.
Noel: What tools do you cover in the class?
Khayyam: We usually spend time on three different tools. Selenium, Tricentis Tosca, and JUnit.
Noel: Very cool. I assume they get some hands-on experience with each of those.
Khayyam: Absolutely. For Tricentis Tosca in particular, the students get their own sandbox application where they can really get their hands dirty. We give them a mock application to start with and they automate those same test cases in multiple environments throughout the semester so we can see what approaches work and which ones don’t in a number of different situations.
Noel: That’s neat. There’s so much that can be learned from all of the blogs, podcasts, and a number of really respected books out there, but hands-on learning, especially in testing, is such a powerful method.
Have you been able to see how this class has benefitted any of your former students who’ve moved into the workplace after graduation?
Khayyam: Definitely. A lot of them end up working in software testing for Ford, GM, and other automotive companies in this area, and they end up with a nice mix of hardware/software testing verifications. I’ve spoken to a number of students who I taught just this year who went in for a software testing-focused interview and who were offered jobs right on the spot.
Noel: That’s fantastic! I’m also curious about your final exam. I know you probably can’t reveal all that will be tested on, but how are the students evaluated when the course comes to a close?
Khayyam: There are two main parts. There’s a final exam that is paper-based, and then a project that is all hands-on and focused on test automation. They’re given an application and asked to write the automation that will give them a very high amount of code coverage. Say, 90%.
The paper-based exam is more like a case study. “This is what we want to do. What type of requirements would you write, and how would you make sure the requirements are correct? How to test this application from an end user perspective”
One of the key things that I focus on and make sure the students understand is that software testing doesn’t start after you start writing code. Software testing starts from the very first day when you have an idea and you want to actually convert this idea into technical requirements. That’s where the testing starts. I focus pretty heavily on that aspect. The students write the requirements, they figure out what kind of methodology they want to use for testing, what some of the sample test cases are that they will try, and how will they make sure that they cover pretty much every scenario.
Noel: Right. You also mentioned that the students get excited to learn more about exploratory testing. Are the students coming in knowing what exploratory testing is, or is it something they’re being introduced to for the first time?
Khayyam: It’s slightly tricky because there’s a very big misconception on what exploratory testing is. That’s the first thing that I focus on. Making sure they understand the difference between “random clicks” on a keyboard and actually trying to figure out different scenarios through exploration.
The students are often really well-suited for this type of testing, even without a strong testing or technological background. They’re curious to learn, and they really want to figure out, “Hey how does this application work?” That’s what you really want out of a good software tester. You don’t assume anything.
This is the kind of stuff that excites them. Determining what they have to be cautious about, learning how to propose and defend certain discoveries, how to really think about the bugs they come across.
This is my personal observation, but it’s often that the most non-technical people come out with the most interesting scenarios because they really don’t have any bias. They really don’t have any prior knowledge and they represent true end-user scenarios.
Noel: So, along that same way of thinking, what do you think are the three most important qualities of software testers?
Khayyam: The three key things that I usually focus on my class are, first, acquiring the skills to analyze any problem. Second is the ability to learn, really gaining the ability to learn about different components of an application and how they’ll be used. And then lastly, the ability to understand the impact of a change. “We’re going to change something…what all is this going to impact? None of these skills have to do anything with how good of a developer you are, or how technical you are.
Khayyam: It’s about how quickly can you analyze a situation and that probably … that’s the hardest thing to teach people. You know, you can be a really, really good software tester and not know how to write a single line of code.
Khayyam: That’s one thing that I really tend to focus on. The second thing is looking at how important is test automation and what can we learn from it? People tend to falsely believe that test automation is only for saving time for software testing. It’s also a great tool to reveal your design and implementation issues. You make a small change somewhere. You run the whole suite of software tests and you figure out something in a very small is broken because of this one test change.
These are some insights that big organizations actually go and look for.
Noel: That’s great that these students can enter the workforce with a greater understanding of how to connect what they’ve learned and the skills they have with what’s going on in the business world.
Well, to wrap this up, we talked earlier about the aspects of this class that tend to most excite your students, but I’d love to know what aspects of software testing excites you the most. Even as software development and testing have changed over just your own time in this industry, what’s been something that’s stuck around and remained exciting and engaging for you?
Khayyam: For me, the most empowering part of software testing is, as a tester, you really are the product owner. You have the ability to know more than anyone else in the whole organization about how the product works, and, as we talked about earlier, the impact of every change made and evolution the product will go through.
What changes have been made? What changes are we considering making? How do we manage all of those things? How will these changes impact and be received by our customers? That’s the most interesting part of software testing to me.