7 Practical Software Testing Principles & Myths from Jerry Gao

Software Testing can easily be derailed by a trail of misconceptions and ignorance of its core principles. Dr. Jerry Gao, a Professor at the Computer Science Department of San Jose University provides useful software testing principles which can add value to your test sessions:


Principle #1: Complete testing is impossible. This is because we can never test a program completely. Test coverage is often constrained by the number of resources and paths that can be tested within the available time. Arriving at 100% certainty that testing is adequate is difficult to achieve.

Principle #2: Software testing is not simple.


  • Quality testing requires testers to understand a system/product completely
  • Quality testing requires adequate test sets and efficient testing methods
  • Quality testing is prone to tight schedules and a lack of testing tools.

Principle #3: Testing is risk-based. This implies that tests are always prone to risks. To minimize this risk, testers should focus on the critical areas of the system and prioritize test cases based on the level of risk associated with each.

Principle #4: Testing must be planned. A test plan detailing test configurations, roles, testing timelines and all other relevant information should be designed before testing begins to reduce surprises and manage expectations.

Principle #5: Testing requires independence. Independence of test cases and testers are essential to producing good quality results.

Principle #6: Quality software testing is influenced by:

  • An understanding of software products and related domain applications
  • A cost-effective testing methodology, coverage, test methods and tools.
  • Good engineers with creative ideas and software testing experience

Jerry Gao also provides some insightful software testing myths all testers should be aware of:

  • We can test a program exhaustively and find all the errors as long as test engineers do a good job.
  • We can test a program by trying all possible inputs and states of the program.
  • A good test suite must include a great number of test cases.
  • Good test cases are the complicated ones.
  • Software test automation can replace test engineers in comprehensive software testing.
  • Software testing is simple and easy. Anyone can do it. No training is needed.

Good software testers should recognize these myths and apply their knowledge to managing test sessions. There's no testing that can possibly find all the bugs in a system. With rigorous and frequent testing, however, it is possible to reduce the risks associated with using the system. 

Linus's Law, "Given enough eyeballs, all bugs are shallow" holds true. Sometimes, the quickest way to find as many bugs as possible, is to allow the use of the system. 

Visit the resources section for a download of the full presentation.

Jerry Gao has also written a book on testing in collaboration with other authors:

Testing Object-Oriented Software (Practitioners)
By David C. Kung, Pei Hsia, Jerry Gao