Saturday, August 1, 2009

Philosophy of testing

Often software testing is discussed from different technical aspects, but it is quite important to discuss psychology and economics of software testing, as software testing is quite integral part of software development life cycle, so it is quite important to adopt the appropriate frame of mind towards testing. So lets starts our discussion.

Definition Of Testing
It is quite adequate that purpose and objective should be cleared before starting any activity, the same is true with software testing, people use different definitions of testing, e-g we come across statements like

“Testing is the process to make sure that errors are not present in the software.”
Or
“ The purpose of testing is to show that program is performing its intended functionality.”
Or
“ Testing is the process of establishing the confidence that a developer does what it is supposed to do.”


If we analyze these statements, we will notice that these are reflecting exactly the opposite to the objective of software testing because testing is an activity which requires human resources and effort, so one can think what should be the outcome of software testing?

Problematic Definitions
If we analyze the definition such as “Testing is the process to make sure that errors are not present in the software.” this definition has psychology effect, because it is not possible that any software is error free and this goal is quite impossible to achieve so when any testers start testing with this mindset, it will not end up in good results because psychology studies show that human perform poorly in a job which they know it is not feasible or impossible. So defining software testing as a process of uncovering errors makes it a feasible task, and thus overcoming the psychology problem.

In the same way, we have a definition “The purpose of testing is to show that program is performing its intended functionality”. It is quite evident that error would be there if the software is not doing what it is supposed to do, but errors can be there if the software is doing what it is not supposed to do.

Correct Definition of Testing
The outcome of software testing should be that software application should be reliable, it can only be reliable when it is error free, it can only be error free when testing is started with assumption that it contains errors in it. If we start testing with this frame of mind, then testing can add lot of value in software/application development. So the correct definition of software testing can be stated as:

“ Testing is the process of executing the program with the intent of find errors”.

Here human psychology comes into play because humans are highly goal oriented, and establishing a proper goal has an important psychological effect. If the testing is done with a goal that program has no error then testers will subconsciously steered towards this goal, and he will un consciously select the test data that has low probability of finding errors, on the other hand if testing is done with the goal that errors are there in the application, then software testing will add a great value to the application, and testers unconsciously steered towards test cases and test data that has high probability of finding errors.

Conclusion
To summarize this vital discussion, we can say that software testing is a destructive and sadistic process of finding the uncovered errors in the program Its human nature that most of us are geared toward building objects rather ripping them apart, that is why testing is a difficult job to do.
A successful test case is one who progresses in this direction and finds error in the software, because purpose of software testing is to establish a confidence that software does what it is supposed to do, and does not do what it is not supposed to do.



3 comments:

  1. Some queries and comments here:

    - In a psychological way, testing could termed as destructive and sadistic but overall isn't it like demolishing a building in order to renovate or revamp it which surely give a sense of relief n feel of contentment?

    - Often s/w contains features that were not a part of requirements but also doesn't harm s/w in any sense, should we consider them as errors too in light of your following comments:
    "...because purpose of software testing is to establish a confidence that software does what it is supposed to do, and does not do what it is not supposed to do."

    - Well, I am strongly agree with your this statement:
    "...it can only be error free when testing is started with assumption that it contains errors in it. If we start testing with this frame of mind, then testing can add lot of value in software/application development. "

    ReplyDelete
  2. Thanks fatima for your comment.
    well, yes you are true its not like demolishing the building rather, it is about building it in a right way,so that we have minimum or no issues later on , but testers always work with code breaking attitude so it seems destructive process.

    As far as your second point is concerned, sometimes we have scenario, where we have to consult our stake holders like, lets have a scenario, that after changing password, what would be appropriate behavior, user should be redirected to main page, or remian on this page, now this does not harm any body, but user can raise his desire, so there might e some usuability issues. in that case, as a tester, we should have a deep look on the application.

    i think i tried to clear my point, looking for your feedback.

    ReplyDelete
  3. If the software has features that were not part of requirements the tester should be asking why the heck they are there. To some degree they're as bad as bugs in that they may not add value to the customer and may detract from developing what is of value.

    Kashif, have a look for the book called 'Did you spot the gorilla' where Dr Wiseman talks about change blindness. There's a video related to the effect here http://snipurl.com/qfz0p

    It struck me that when we test we can often have a gut feel that a page we clicked a moment ago was somehow different than now. Is it Change Blindness that stops the difference being apparent to us.

    Exploratory testing is a great technique for overcoming this issue, if we 'feel' there is a difference there probably is. We can then apply ET approaches and tester skill to find where the bug is.

    Mark

    ReplyDelete