Psychology of Testing

Software development, including software testing, involves human beings. Therefore, human psychology has important effect on software testing.




In software testing, psychology plays an extremely important role. It is one of those factors that stay behind the scene, but has a great impact of the end result. Categorized into three sections, the psychology of testing enables smooth testing as well as makes the process hassle-free. It is mainly dependent on the mindset of the developers and testers, as well as the quality of communication between them. Moreover, the psychology of testing improves mutual understanding among team members and helps them work towards a common goal.



The three sections of the psychology of testing are:


  • The mindset of Developers and Testers.
  • Communication in a Constructive Manner.
  • Test Independence.

The mindset of Developers and Testers



Software development life cycle is a combination of various activities, which are performed by different individuals using their expertise and knowledge. It is not an unknown fact that to accomplish the success, development of software, people with different skill and mindset are required. 

Developers synthesize code. They build up things, putting pieces together and figuring out fun and unique ways of combining those distinct little bits to do wonderful and amazing things. 

But Testers are all about analysis. Once it has all been put together, the tester likes to take it apart again, piece by piece, this time looking for those little corners, edges, and absurdities that hide in those weird and strange interactions that come from those new and amazing ways of putting pieces together.

Testing and Reviewing of the applications are different from analyzing and developing of it. While testing or reviewing a product, testers mainly look for the defects or failures in the product. If we are building or developing applications, we have to work positively to solve the problems during the development process and to make the product according to the user specification.





As an example,

Identifying defects during static testing such as requirements review or user story refinement session or identifying failures during dynamic test execution, may be perceived as Criticism of the product and of its author.
So the developer or the analyst may have problems with you as a tester because he thinks that you are criticizing them.

There's an element of human psychology called Confirmation bias, which means that most of the people find it difficult to accept information that disagrees with currently held believes.

For example, since developers expect their code to be correct, they have a confirmation bias that makes it difficult to accept that the code is incorrect.
In addition to confirmation bias, other cognitive biases may make it difficult for people to understand or accept information produced by testing.



Further, it is a common human trait to blame the bearer of bad news and information produced by testing often contains bad news.
So as a result of these psychological factors, some people may perceive testing as a destructive activity, even though it contributes greatly to project progress and product quality.
To try to reduce these perceptions, information about defects and failures should be communicated in a Constructive Way.
This way, tensions between the testers and the analysts, product owners, designers, and developers can be reduced. This applies during both static and dynamic testing in which Static Testing is a software testing technique where the software is tested without executing the code and Dynamic Testing will use the dynamic behaviour of the code by opening the application and run it.


Communication in a Constructive Manner


Testers and test managers need to have good interpersonal skills to be able to communicate effectively about the defects, failures, test results, test progress and risks and to build positive relationship among colleagues.






Communication, if done in a polite and respectful manner can help build a strong and reliable relationship between the team members and help them avoid any misunderstanding. 

Similarly during the process of testing also, the requirement of communication in a constructive manner is extremely high. As testers are responsible for finding bugs and reporting them, it becomes vitally important for them to communicate it in a respectful, polite, and suitable way to avoid hurting and disappointing someone. 
Finding and reporting defects can be an achievement for the tester but is merely an inconvenience for programmers, designers, developers, and other stakeholders of the project. As testing can be a destructive activity, it is important for software testers to report defects and failures as objectively and politely as possible to avoid hurting and upsetting other members related to the project.

So as testers, there are many ways to communicate collaboratively with developers.



  • Start with collaboration rather than battels. Remind everyone about their common goal of having better quality systems.
  • Emphasize the benefits of testing.
               For example, for the authors, defect information can help them to improve the work products and their skills.
  • For the organization, defects found and fixed during testing will save money, time and reduce overall risk to product quality.
  • Communicate test result and other findings in a neutral, fact focused way without criticizing the person who created the defected item.
  • Write objectives, defect reports and review findings.
  • Try to understand how the other person feels and the reasons they may react negatively to the information.
  • Confirm that the other person has understood what has been said.
  • Clearly define the right set of test objectives has important psychological implications.
  • Most people tend to align their plans and behaviors with the objectives set by the team, management, and stakeholders. So it's also important that testers adhere to these objectives with minimum personnel bias.


Self-testing and Independent testing

Comparison of the mindsets of a tester and a programmer does not mean that a tester cannot be a programmer, or that a programmer cannot be the tester, although they often are separate roles. In fact, programmers are the testers. They always test the component which they built. 
While testing their own code they find many problems so the programmers, architect and the developers always test their own code before giving it to anyone. However, we all know that it is difficult to find our own mistakes. It might be due to some reasons such as,


  • “Parental feelings” towards their code
  •  Focus on the “Positive Paths”
  • Work-based on the principle of simplifying of complex scenarios
  • Inability to catch small things in big pictures
  • Lack of end-to-end & real-user perspective
  • bLess experience with common bugs & application pitfalls




So, programmers, architect, business analyst depend on others to help test their work. This other person might be some other developer from the same team or the Testing specialists or professional testers.
Giving applications to the testing specialists or professional testers allows an independent test of the system.
As this type of testing is mainly performed by individuals, who are not related to the project directly or are from a different organization, are hired mainly to test the quality as well as the effectiveness of the developed product. Test independence, therefore, helps developers and other stakeholders get more accurate test results, which helps them build a better software product, with innovative and unique features and functionality.
There are several levels of independence in software testing which is listed here from the lowest level of independence to the highest:

    i.  Tests by the person who wrote the item.

    ii.  Tests by another person within the same team, like another programmer.

    iii.  Tests by the person from some different group such as an independent test team.

    iv.  Tests by a person from a different organization or company, such as outsourced testing or certification by an external body.

    To achieve successful testing it's important for the software engineers to consider the psychological aspects of testing, as they can interrupt the result of testing and can impact the performance of the end product. The importance of these technological aspects is similar to any other tool or technique adopted for the process of testing.

    The mindset of the team members, the communication between them, and most importantly the test independance while performing the testing is crucial and needs great consideration.Therefore, if you want your software testing to be free of any hurdles, do consider the psychological aspects stated above.

















Comments

Popular posts from this blog

ස්ටීවන් හෝකින් (Stephen Hawking)

Performance Testing in Software Testing

Why Functional testing?