Skip to main content

Why Developers Shouldn't Perform Software Testing - A Rebuttal

Take a minute and read the following 2-pager entitled "Guest View: Why developers shouldn’t perform software testing".

Man, I tried to like this article because the author, Martin Mudge, clearly knows that businesses who undervalue quality by trying to eliminate testing through simply shuffling the traditional testing task to developers are making a huge mistake. Unfortunately he begins by making an assertion that testing overburdens a developer which at face value is complete nonsense. If you feel overburdened, it is a timeline issue and that is true no matter WHAT the nature of the tasking is.  So his assertion of “one the most important” contributing factors being overburdening the developers is massively flawed. It gets immediately worse from there because his second point is about time constraints. 

Mr Mudge just gets so much wrong. What he really should be shooting down is the idea that testing, as a cost-center not as a task, can be eliminated by having your product center carry that specific task load instead. But if that’s your company’s opinion of the value of testing, then your developers aren’t going to want to be handed that. It doesn’t matter if it is testing or any other related task, if you portray the work as low-value and then ask someone who thinks of their work as high value to add it to their plate, it is naturally an insult. It all begins with management’s attitude. However, given that Mr Mudge’s company, BugFinders, sells software testing as a service, you may surmise that he’s not in the business of contradicting that point of view but exploiting it to earn a living as an outsourced contract cost center. Of the 5 points their website makes about the value of their testing service, it is very telling that the 5th point is: "Control testing costs by setting a fixed budget”. 

The bottom line is that bugs are inevitable and no amount of testing budget will 100% prevent them, even major bugs, from escaping into the wild forever. But that’s okay. Failure is okay. You should seek out failure. Everybody should visualize it, as early in the process as possible, and start thinking about how to address it. Failure should be embraced, understood, and anticipated by all team members. The value of dedicated QA Engineering is giving professionals the job of specializing in looking for, characterizing, reporting, triaging, and tracking all avenues of failure in your product and then reacting to that organizationally with sober consideration. These avenues of failure can be observed failures (bugs) or potential failures (risks). But there are many things that can lead to handling bugs or risks improperly which happens the instant your priorities are no longer aligned underneath overall quality. 



Everybody’s priorities should be the same but their role dictates how they carry out their work with respect to those priorities. Therefore if quality is anyone’s priority, it MUST be everyone’s priority. You can’t know if you’re meeting your quality priority without testing your work. That’s why really smart companies are reducing the number of dedicated QA Engineers but making everyone a tester. They’re buying into W. Edwards Deming's principle of eliminating a lengthy inspection process at the end of a production cycle and front-loading quality by making it everyone’s concern (thus reducing the overall cost of achieving higher quality). That doesn’t mean eliminating inspection. Instead that means don’t rely on dedicated inspectors only for ensuring product quality. That means elevating testing to an unmistakably high-value activity and expecting every high-value contributor to master it in the context of their role. That means more inspectors, not fewer, conducting more inspections more frequently. That means adding more perspectives and questioning more assumptions. In the end, my opinion is very clearly expressed in the title of this blog: Everybody Tests.

Comments

  1. In order to get SQA services there is no no way better than get in touch with www.nixsolutions.com/services/quality-assurance-services/

    ReplyDelete
  2. The developer does not have to be engaged in this. He should write a program code and edit it in the event of incorrect logic software. Testing should be engaged in professional teams, often independent http://www.deviqa.com. It demands the success of each new project for developers. This whole process as one that complements each other.

    ReplyDelete
  3. I have attended the PHP course. Course content is excellent. I would recommend this course anyone wants to make career in PHP. Instructor describes you course in detail. All Presentations are very good. The Course Material is truly great,and good thing is that you will get Real time Project Explanation with Case Studies.Thank you ASTERHR IT SOLUTION PHP training in chennai

    ReplyDelete
  4. Awesome information.
    such an useful article.
    thanks for posting.keep sharing.
    Best software testing training in Bengaluru

    ReplyDelete
  5. Hello sir,
    How are you,I read your blog ,and i want to suggest you a website Hello sir ,
    I am habib and i recently read your full Blog it filled with many useful information, i want to tell you about a interesting website ,i think its going to be useful for your article developments please take a look Buy Google Reviews
    Thank you i think its should be helpful to you.

    Thank you...

    ReplyDelete

Post a Comment

Popular posts from this blog

UiAutomator and Watchers: Adding Async Robustness to UI Automation

"I'm looking over your shoulder... only because I've got your back." ~ Stephen Colbert After my recent UiAutomator review a user brought up an important question about the use of UiWatcher. The watchers serve as async guardians of the test flow, making sure the odd dialog window doesn't completely frustrate your tests. Having a tool that automatically watches your back when you're focused on the functional flow of your tests is awesome. 100% pure awesomesauce. Since the API documentation on watchers is scant and the UI Testing tutorial on the Android dev guide doesn't cover their use in depth, I figured I should add a post here that goes over a simple scenario demonstrating how to use this fundamentally important UI automation tool. In my example code below, I'm using uiautomator to launch the API Demo app (meaning run this against an Emulator built in API level 17 - I used the Galaxy Nexus image included in the latest ADT and platform tools).

UiAutomator.jar: What happened when Android's JUnit and MonkeyRunner got drunk and hooked up

"Drunkenness does not create vice; it merely brings it into view" ~Seneca So Jelly Bean 4.2 landed with much fanfare and tucked in amongst the neat new OS and SDK features (hello, multi-user tablets!) was this little gem for testers: UiAutomator.jar. I have it on good authority that it snuck in amongst the updates in the preview tools and OS updates sometime around 4.1 with r3 of the platform. As a code-monkey of a tester, I was intrigued. One of the best ways Google can support developers struggling with platform fragmentation is to make their OS more testable so I hold high hopes with every release to see effort spent in that area. I have spent a couple days testing out the new UiAutomator API  and the best way I can think of describing it is that Android's JUnit and MonkeyRunner got drunk and had a code baby. Let me explain what I mean before that phrase sinks down into "mental image" territory. JUnit, for all its power and access to every interface, e

Run-As Like the Wind: Getting private app data off non-rooted devices using adb run-as and a debuggable app

"You're some kind of big, fat, smart-bug aren't you?" ~Johnny Rico, Starship Troopers (1997) One of the most important things about writing bugs is making them descriptive but concise. Screenshots, video, debug logging, and hardware snapshots are all fairly standard or available to Android testers these days and can save you enormously on text when communicating what constitutes the bug. Sometimes though, the app gets into a weird state due to some transient data issue where you may not own the API or the complexity with forcing the app data into a certain state is prohibitively high. In those cases it is very handy to directly inspect the data the app has in its own directories. Getting at this data is trivial on emulators and rooted devices but due to file system permissions, this data is otherwise completely private to the app itself. If you're like me, you tend to test using devices rather than emulators and you probably prefer not to root your devices sin