Deciding on what to test can be a little tricky. If you only test a program using inputs that are “valid” you could find a bug later due to the fact an “invalid” input was entered or used. These invalid and valid value tests focus on the very edges of a program, earning itself the term edge case testing.
On the other hand you may have certain manipulations or branches in a program that will need to be tested. Those tests can also have a sort of interior version of edge case testing.
To give a more concrete example later i will use an example of having a make believe chance of rain calculator. We will keep it very basic just to understand the idea.
The following will be the specifications of the program.
temp < 60 = 0%
temp >= 60 = 50%
humidity < 50 = 10%
humidity >= 50 = 30%
chance of rain = temp% + humidity%
Below is a picture from a class activity that depicts this topic. There are 4 parts that are important to understand before you start deciding on and writing test cases.

Weak Normal:
A weak normal test will focus on valid inputs, checking the basic calculations or manipulations of a function. It will not test for all of the possible combinations.
Strong Normal:
A strong normal test will focus on all of the possible different outcomes. One would view it as a more in depth version of a weak testing. The amount of tests will very quickly add up. However it becomes more obvious how important it is to test every possible outcome as a program grows and has a higher chance to produce bugs.
Weak Robust:
A weak robust is more comparable to a weak normal. Reason being that it wont test for every possible outcome like a strong normal would. However the difference between a weak robust and weak normal is that the robust will incorporate some tests using invalid inputs.
Using our example of the rain chance calculator. Would you want to make sure that the chance of rain is only 30% if the humidity has a rating of 3,000? (usually 100% humidity is raining)
Strong Robust:
Last but absolutely not least, we have the strong robust test cases. This version of testing is where every single possible input and output is accounted for and testing. This is truly the strongest version of testing and can get extensive pretty quickly. Before diving into the tests themselves using the made up rain chance calculator. It is important to take a look at the formulas below

If we use the specs for our rain calculator and the formulas above, possible Strong robust test cases might look something like:
checking temp at -1, 0 and 1
checking temp at 59,60,61
(technically temperature wouldn’t have a maximum or minimum value to test)
checking humidity at -1, 0, 1
checking humidity at 49, 50, 51
checking humidity at 99, 100, 101
With all of those inputs accounted for you would then make sure the corresponding outputs for the final calculation are correct.
In conclusion it is obvious that strong robust testing is the superior option. However with a project of smaller scope, using a weak or normal version of testing could also be sufficient.
From the blog Mikes CS Journey by Michael St. Germain and used with permission of the author. All other rights reserved by the author.




