Prior to starting designing and during design you should have created a number of documents, like User Requirements Specification (URS) and Functional Requirements Specification (FRS).
Everything you specify sooner or later has to be tested!
Why else would you take the trouble to put it on paper?
The URS should be where you derive the User Manual from, but also the User Test Specification. Describe what you expect to happen when the user performs an action, like pressing a button, under which circumstances. Pressing button 1 may cause a different action depending on the state of switch A.
So you describe start conditions, actions, expected end conditions. For all normal user actions.
Then there's unintended use. Organize a creativity session to discover as many ways as possible to abuse the product. If you know how to conduct a brainstorm you could use that. Issues could go from pressing several buttons simultaneously to inserting batteries the wrong way. Can you insert the wrong type of batteries? Again you describe start conditions, actions, expected end conditions. If you don't know what the result of an (even unintended) action should be then you missed something during design.
This implies that writing a Test Specification (especially the part about unintended use) shouldn't be done just before testing. The software designer must know what should happen if you press two buttons at the same time before she starts writing the software. Remember that the cost of changes in a design rises exponentially with time.
It is of course that device failure under certain conditions is allowed. You may not have protection against inserting batteries the wrong way and you know the device will be damaged if the user does. (Not a good idea IMO, just an example.) Also then this has to be described in a functional spec, to show that you haven't overlooked it. I would even mention it in the test spec with the comment "test not required".
It should be obvious that pressing two buttons simultaneously shouldn't lock up the software. But don't say it's impossible. The software designer must be able to show in her code how she deals with this. Which is even better than just trying it. During testing one button may be pressed slightly later than the other.
In the semiconductor industry these are called DUT (for Device Under Test) or Load boards and they map from the ide pins to the tester standard connection format. They can be fairly expensive because of size and thickness (to ensure stiffness).
However, you don't need most of that. at the center of a DUT board are cantilevered comb like structures that are very stiff but are spaced at the 100 um pad pitch with 50 um tips. These are relatively inexpensive, no more than the cost of a single pogo-pin.
Here is a super fancy, RF matched and reinforced version:
If you look closely you can see a bunch of very fine fingers. Of course you can only use these under a microscope as you will bend the crap out of them if you hand place them.
here is what a old style DUT board looks like. A lot of the design is the interface to the system electronics, which you don't care about.
Originally pogopins were developed to contact the DUT board to the tester.
Here is a picture of wafer probe or probe fingers taken from UP patent 7688097 B2
This is still very fancy. I have seen these "combs" go for only a few $100's
Here are some picoprobe probecards from GGB industries which I've used.
And finally if you search on probecards you get lots of hits.
Best Answer
I add test points to a majority of the boards I work on - unless the client specifies otherwise. I won't add test point for every net, but power and ground nets definitely get a test point. When we get a batch of boards back from the fab house, I grab the DMM and "Ohm out" the test points, to make sure nothing is shorted to ground.
We mostly do very low volume production at my work, so most of our testing is done manually.
We do have a higher volume product, though, that does use a bed-of-nails test fixture. In addition to power and ground nets, we have test points for other functional blocks like Ethernet, SPI, audio (speaker/mic).
If you are doing a first run prototype, you might want to have all those test points for debugging. But in later revisions, after functional blocks have been proved OK, you can remove them from the board if you want.
In the end, it really comes down to your production volume and how much risk you want to take with testing/not testing certain aspects of the board.