I recently wired my lab for ethernet and began automating my testing with Python scripts and the awesome Python(x,y) environment curated and maintained by Google. Freed from the burden of so much test setup this got me thinking about how to design and execute a test which fully and accurately characterized the unit under test. This is broken into the following objectives:
Let's start with a (very general) listing all the main stages in a product design and highlighting where this article focuses:
Providing thorough test coverage requires wisdom and is a bit of an art. But this is a general guideline that should provide good coverage:
It's a hierarchy. If you've listed out all of the features and all the components that provide them and you have functionality left over it doesn't belong or you've made a mistake.
For example you want to store movies in a set top box so the NVRAM in the system will need a thorough testing. But the power supplies and bus that provides the interconnect also needs validation as does the host processor.
BTW, when designing any IC I usually go through the following steps. Bring-up and verification are usually the same:
Accurate measuring requires careful consideration of your test circuit and how it is affecting the system. That is really a separate article (or book) and is not the focus of this article, but generally speaking your test system should not load the circuit under test and should provide performance >= to the circuit.
Meaningful to me means a test result or measurement that accurately conveys the performance of ALL SYSTEMS not the particular system under test or the time it was tested. This means that a particular functionality needs to be characterized over all possible dimensions and be sampled enough to be statistically meaningful. For most consumer electronics this means testing over temperature, altitude, system configuration (e.g. CPU load, settings, etc), component/process and manufacturing/assembly variation.
Statistically meaningful means taking enough measurements from which an accurate sigma can be be determined. This allows you to calculate the 6 sigma values and know with certainty the performance of your system and whether or not it will fail or violate spec. Typically once I have a good setup I will use a pass/fail or mask on my test equipment (or in software) and take hundreds if not thousands of measurements. This is usually pretty easy on a modern scope that can trigger on a specific behavior, display a mask, count violations and display histograms or statistical information.
Testing a circuit on one system will provide a distribution (probably Gaussian) that describes your system but does not cover environmental and component/process variation. In order to test over environment you need to use a chamber to simulate the environmental extremes the product is designed to operate in. But the reason we test more than one unit is to provide coverage over component/process variation and manufacturing/assembly variation. And just like any test to be statistically significant you must test many, many units.
The sum of the distributions of all the units over environment, system configuration and process will provide you with accurate characterization of the design.
If you aren't violating spec you are ready to ramp.