The world around us is digital. Only 2% of microprocessors are used in desktops and laptops, the rest 98% are embedded and hidden. We are in the total dependence upon electronics, but we will notice this dependency only when something will crash. This is why the dependability is one of the most important characteristics of digital systems today.
The main tools for maintaining dependability of systems are: test generation and fault diagnosis. Mathematically these problems may be considered as direct and reverse problems formulated on the same model of diagnostic experiment with a digital system. The main challenges related to both of these problems are: (1) the complexity of systems, (2) the need for exact fault diagnosis, and (3) the need for high fault coverage in test generation.
A short overview about the nature of these challenges will be given, accompanied with explanations how to cope with them. Different paradoxes related to understanding of the test complexity will be highlighted. The philosophical differences between structural and functional testing, and the relativity between the terms “fault” and “test” will be discussed.
Some ideas will be presented how to formalize the problem of test programming for complex digital systems like microprocessors, CPUs and digital systems in general. To understand the main concepts of cause-effect relationships in diagnostic reasoning of complex systems, graphical languages are most suitable. A novel hierarchical approach for diagnostic reasoning of digital systems using Binary Decision Diagrams at logic level and generalized High-Level Decision Diagrams (HLDD) at higher functional or behaviour levels will be discussed. It will be shown on this HLDD basis how related are the problems of hardware and software testing.
A novel concept called "Angel's Advocate Approach to Digital Test" will be presented. Traditionally, so called “Devil’s advocate approach” is used, where the test engineer is targeting the faults as test objectives. The idea of the Angel’s Advocate Approach is to prove the correctness of selected parts of the system. The main advantage of the latter approach is to avoid counting of faults, and to overcome, in this way, the cases when the faults are not countable (either because the fault mechanism is unknown, or there is a multiple fault present in the system). A novel functional measure for the quality of test, in case when structural faults cannot be counted, will be suggested.