This paper performs an analysis on the applicability of state-of-the-art fault diagnosis methodologies to both simple and complex systems. Here, a complex system represents a system whose global behavior, which emerges from the interactions between its usually large number of basic components, is difficult to accurately describe via a model. First, the basic notions used in fault detection and isolation, are introduced. Then, short reviews are given for the main quantitative methods, qualitative reasoning based methods, and soft computing approaches. The next section is dedicated to recent distributed approaches to fault diagnosis of complex systems. Finally, some conclusions are given