Who are the worst programmers

Are Programmers Bad Testers?


I know this sounds a lot like other questions that have already been asked, but it's actually a little different. It is widely believed that programmers are not good at testing an application. For example:

Joel on software - the top five (wrong) reasons why you don't have testers (main focus mine)

Don't even think about telling college graduates they can work for you, but "everyone has to stay in quality assurance for a while before they move on to code". I've seen a lot of it. Programmers are not good testers , and you lose a good programmer who is much harder to replace.

And on that question, one of the most popular answers (again, my emphasis) says:

Developers can be testers, but they shouldn't be testers. Developers tend to inadvertently / unconsciously avoid using the application in ways that could break it. That's because they wrote it and, for the most part, tested it the way it should be used.

So the question is whether programmers can test badly. What evidence or arguments support this conclusion? Are programmers bad at testing their own code? There is evidence that programmers really do Well can test?

What do I mean by "testing"? I mean Not Unit testing or anything considered part of the methodology used by the software team to write software. I mean a kind of quality assurance method that is used after the code has been created and deployed in what this software team calls a "test bed".






Reply:


The question seems to revolve around system tests specifically, so that's what I'm referring to in this answer.

I think there is an important difference between bad test subjects and bad test subjects.

Why programmers test badly:

  • By the time you wrote the code, you (should) have already figured out the ways things could go wrong and looked at them.
  • If finding a particularly sensitive bug means you need to fix it in a code base that you may be fed up with, it won't help your motivation.

Why programmers can test well:

  • Programmers tend to think logically and work systematically.
  • Experienced programmers are very good at quickly identifying edge cases and finding useful tests. (If there is a formalized testing process, most of these cases should have been identified and tested prior to system testing.)
  • Programmers are pretty good at making sure that all useful information is included in a bug report.

Why programmers are bad testers:

  • Programmers are more expensive than testers (in the vast majority of cases).
  • The way of thinking is fundamentally different: "Build a (working) product" vs. "This thing doesn't go out the door with any (unknown) faults."
  • Testers tend to be more efficient - that is, they run more tests in the same amount of time.
  • Programmers specialize in programming. Quality assurance professionals specialize in testing.






I think programmers are bad at this , their own code to testing .

We like to believe that our code works perfectly as per requirements and test it as such. We test our own code in my place, then test each other before entering the actual testing cycle, and this way we have caught far more bugs than just testing our own code



Programmers are definitely the right people to test some parts of the system - the only ones in places who can potentially do it effectively.

One point that programmers find very bad about testing is the fact that they "use the user interface like a normal user" - they are not normal users and do not behave like that. For example:

  • Programmers are usually very good at getting text input just right. A common problem is leading or trailing spaces. Most people don't seem to have them, but good programmers are likely religious when it comes to getting their strings on the right string with no unnecessary spaces.
  • Programmers are usually keyboard players who use tabs and other shortcuts to speed things up. Ordinary users tend to grab the mouse between fields.
  • Programmers usually understand what the system is telling them instead of ignoring error messages and simply clicking OK.

So, ordinary users do a lot of things that programmers don't. You can't completely rely on the development team at UAT.



On a technical level (unit tests, integration tests, regression tests), programmers are likely the only qualified people who are testers because these types of tests are automatable and should therefore be automated, which requires programming.

But I don't think you're talking about it, and I'm pretty sure Joel Spolsky doesn't mean it either - it's the remaining part, the actual manual test: turning a requirements document and functional specification into a test script, and then meticulously executing it this script against the finished product.

Being a good tester requires qualities that are mostly perpendicular to those that make a good programmer. There is a bit of overlap - you have to be able to think analytically, you need a certain affinity for computers in general - but otherwise the skills of a tester are very different. That in itself doesn't mean you can have both skills, and in fact some people probably do. However, to be a really good programmer requires a certain amount of laziness (the desire to automate your tasks) while a really good tester takes persistence (check all three thousand form fields for inconsistencies) and, consequently, those programmers who do I have what it takes to be a tester and I usually loathe the idea.

And then there is the selective tendency: A programmer who is already involved in a project, even if only marginally, already has some inside knowledge of the code base and will have a hard time getting to grips with it from the end user's point of view to approach an empty head. It doesn't even have to be explicit, as in "I know this button works, so I just write down 'pass'"; it can be much more subtle, and these subtle effects can lead to critical edge cases being overlooked in testing.


In my experience, programmers are bad testers. Too many times I've seen others and I say, "Huh, but I tested this before I checked in!" when faced with a tester reproducing the bug before you.

Why? Well I'm not sure why that is, but maybe we want this stuff to work. Or we just want to finish testing this or that feature already.

Testing isn't a skill we've learned anyway, and we don't work as programmers because we're good at breaking features. Also, we may have no idea how to do proper test planning or all of the other quality assurance tasks. We are no more qualified to do the job of a tester than a tester qualified to implement your new 3D rendering pipeline.

As in the question, testing does not mean anything automated, but rather testing with the aid of the program.


There are different test levels. The "low level" tests can and must be carried out by developers. I think about Unit Testig.

On the other hand, "high-level" tests are a completely different matter. In general, I think developers are bad testers, not because they lack skills, but because it is very difficult to think and work in a few minutes.

I try to test my codes as best I can, but after at least 10 minutes of being run by a tester, something occurs that should be considered a bug or an improvement. This means that testing something you create is a tough job. You know where to click, when to click, you know the logic of business, and you probably know how data is persistent. You are a god you will never fall.


What kind of tests do you mean? If you mean full in-depth testing, I might find some reasons to say yes, although I suspect most people in this category would be poor considering all possible combinations of inputs as a requirement for such testing.

I can acknowledge that the developer making the software may have tunnel vision when it comes to how to handle the code and ignore some possible borderline cases that may not have been considered. For example, if I create a web form that takes a number n and then prints from 1 to n on the screen, there might be some special cases missing, such as: B. when nothing is entered or something that is not a natural number like e or pi. What the program should do in these cases can be questionable.

Test Driven Development would be an example of a development method that puts testing in a different light, which could give a different perspective here.



Programmers define tests exactly when they do this before the Define writing of the code. They get even better with practice.

However, when they define tests for code that they have written, they are not very good. They will have the same testing blind spots that they had while writing the code.

Doing manual tests with programmers is just silly. Manual testing alone is silly enough. Getting programmers into it is extremely stupid. It's expensive and drives off the skilled programmers.






One type of test that I've particularly seen developers fail on is testing that the requirement has been met. What developers consider to be something in a requirement and what testers consider to be something are often two completely different things.

I can think of one where the developer was recently asked to do a delta export and the developer thought it should get all the records that weren't even sent and the testers said there were new records and changes . They had to go back to the client to find out who was right. I checked the code and made the same assumption that the developer met the requirements. Because logically you would have mentioned updates if you wanted to include them. And I'm usually good at seeing these ambiguous things because I used to be at the end of things.

Other developers who run the tests tend to make a lot of the same assumptions because they too make certain assumptions, like "Well, they would have had more details if they meant X Vice Y because there are so many details to answer, before I could do this But requirement writers don't think that way, so someone who thinks more like requirement writers has to test the developers' assumptions, and someone who isn't a developer is the better person to even see that there is a problem .

We use cookies and other tracking technologies to improve your browsing experience on our website, to show you personalized content and targeted ads, to analyze our website traffic, and to understand where our visitors are coming from.

By continuing, you consent to our use of cookies and other tracking technologies and affirm you're at least 16 years old or have consent from a parent or guardian.

You can read details in our Cookie policy and Privacy policy.