6
$\begingroup$

I am trying to understand the difference in the definition of "fault tolerance" and "robustness" when it comes to system design.

For instance, what would be the main design considerations or what would be the definition of the terms when looking at engineering problems? In particular, how do those terms apply to mechanical or electrical power engineering?

I found some definitions but they were centered on computational engineering. The document didn't give much insight in how to define those terms in other engineering disciplines.

Robustness: The capability to cope with unknown errors during execution and provide the system services all the same.

Fault-tolerance: The capability to tolerate a certain set of errors defined during the development of a system.

Source

What would be the difference between a fault tolerant and robust design?
Can a hard distinction be made?

Which techniques or design principles are applied to ensure a fault tolerant design, and which are applied to ensure a robust design?

$\endgroup$
  • 2
    $\begingroup$ FMEA is often used during the design process to ensure the design is fault tolerant. $\endgroup$ – am304 May 13 '15 at 10:23
  • 1
    $\begingroup$ Think of building a fort. Make the walls tall and strong to handle anything that they can throw at us = robust. Make the walls fireproof = fault tolerant. $\endgroup$ – Myles May 13 '15 at 22:08
8
$\begingroup$

What would be the difference between a fault tolerant and robust design?

The most important difference is that robustness takes into account external factors. A more robust system will function in spite of some conditions that would impair the normal function of a less robust system. More robust systems might be referred to as sturdy, heavy-duty, perhaps even overbuilt; less robust systems might be referred to as delicate or fine-tuned.

For example, I own an antique watch. It works very well under normal operating conditions but its parts are somewhat delicate. If I drop it on the ground, the glass and/or some internal components of the watch are very likely to break (based on experience, I'm afraid). If I put it through the washing machine, the soapy water is very likely to rust and corrode some internal components. I could dent or scratch the metal case without a great deal of effort; although this probably wouldn't affect the mechanical function of the watch, it would certainly impair its aesthetic function.

In comparison, most modern watches wouldn't stop functioning if you dropped them from your wrist or pocket. Their windows may be acrylic, mineral crystal or sapphire, any of which is more durable than the glass in my pocket watch. Their cases may use a harder metal or polymer that resists dents and scratches better than my pocket watch. They can be designed to be waterproof. They can use quartz movements.

These are all qualities that make a watch more robust, but not more fault-tolerant. None of the failures I described above are really the fault of the watch or its components; they are caused entirely by user error. Unlike robustness, fault-tolerance is concerned with faults that are expected to occur, especially within components of the system.

A ground fault circuit interrupter (GFCI) is a great example of fault-tolerant design. A ground fault occurs when the current in a circuit is allowed to flow directly to the ground. The classic example involves using a hair dryer in the bathtub, but there are many ways ground faults can occur that don't involve user error.* A residential electrical system is usually in place for decades; we do expect that at some point, ground faults are expected to occur, and except in cases of user error,** they occur within the components of the system.

If the circuit runs directly from a main line, a ground fault can seriously threaten life and property. With the addition of a fuse on the circuit, if a ground fault causes the current in the circuit to exceed some upper limit (overload), the fuse burns out and current stops before anything important melts or catches fire. Circuit breakers do the same thing but unlike fuses, they don't have to be replaced when they're triggered; they can be reset at the electrical panel, which can mean less downtime and expense. GFCI circuit breakers additionally protect against leakage, which involves smaller currents that can still be dangerous even if they wouldn't melt a conductor or start a fire. These technologies make the system increasingly more fault-tolerant.

Which techniques or design principles are applied to ensure a fault tolerant design, and which are applied to ensure a robust design?

Both of these qualities exist on a spectrum. If someone points at a design and says, "That's a robust design," what they mean is that it's relatively robust in comparison to some reference point they have in mind. Different people have different reference points, so I think it's better to be explicit about what comparison you're making. Note that in the first part of this answer, I didn't say my antique watch is not robust—just that it is less robust than modern watches.

This is a pretty broad topic, but I'll take a stab at a summary treatment.

Robustness can come from many places, but is usually closely related to cost. Take fasteners as an example: stainless vs. galvanized; screws vs. bolts; the smallest size rated for your load, or the next size up. In each case it's a trade-off between robustness and cost. As long as either option meets the basic requirements of the design, this is a business decision more than an engineering decision.

If someone is telling you that you have to produce a robust design, ask them, in comparison to what, and by what metric? You need a specific definition of "robust," whether it's comparative ("make it more water-resistant than our competitor's product") or quantitative ("make it water-resistant to 15 m"). Once you have that definition, you can forget about the word "robust."

Fault-tolerance is something that can require a bit more imagination and due diligence on your part. Managers who lack experience with the specific product or technology you're working with, especially those without technical backgrounds, may not be able to tell you what faults to expect. They'll say something like, "The user should be able to replace broken components without interrupting operation of the system," and you'll have to do the work to figure out:

  • In what ways can each component fail?
  • How likely is any component to fail, in each of the ways it can fail?
  • What other components will be affected when a component fails in a particular way and what will be the overall impact on the system?

As you gather this information, be sure to consider the assumptions your design relies on. All assumptions break down at some point, and knowing how your system will behave in those circumstances will help you to identify faults that could occur. Once you've identified what faults to expect, it's usually more straightforward to figure out how much it will cost to mitigate particular risks.

Some general principles:

  • If a process needs to maintain some minimum capacity, and a critical component is likely to fail at some point, make the component redundant (e.g., more engines than needed for basic flight) or provide a fallback (e.g., the ability to perform an unpowered landing).
  • Always use tested products and components, even if it means you have to do the testing yourself.
  • Provide a mechanism for your customers/clients/users to give feedback about failures as they occur. You'll hardly ever anticipate every possibility and being able to retrofit or adapt an existing design is important.

* Stripping too much insulation during installation; pests chewing on wires; running wires through studs without a nail plate; cutting flex conduit improperly/not deburring; etc.
** You could also argue for expanding the system to include users as internal components—especially children and pets—but that's another discussion altogether.

$\endgroup$
  • $\begingroup$ I'm not sure that I follow your watch example. For instance, do modern watches use sapphire instead of glass to be more robust, or is the robustness a result of being fault (i.e. drop or scratch) tolerant? Does the fault have to be internal only? $\endgroup$ – hazzey May 13 '15 at 19:29
  • $\begingroup$ Normal wear (scratches) is not a fault of the design - everything is subject to wear. If a component can become so weakened by normal wear that it fails, that would be a fault of the design. Consider "the design" and "the system" interchangeably. It gets fuzzy when you consider that you can redraw your system boundary however you want, but I would say that yes, the faults we are concerned with are internal. $\endgroup$ – Air May 13 '15 at 19:51
  • $\begingroup$ The other question here is, if you drop a watch and it breaks, is that a fault of the watch? I would say it depends on the watch. Antique pocket watches were not designed for mountain bikers and skateboarders and are typically kept on chains. If the chain breaks, that's a fault of the chain. If you don't use a chain, that's your fault. On the other hand, some modern watches are designed specifically to be abused, and in that case I'd consider impact resistance to be the explicit responsibility of the design. So again, it's a bit fuzzy. $\endgroup$ – Air May 13 '15 at 20:00
  • $\begingroup$ @Air I like your answer very much, you explained the differences well. The only thing I'm missing is some references. I'm especially interested in the main claims, e.g. what fault tolerance and robustness are. Do you know any reputable sources for these claims? Thanks for the answer! $\endgroup$ – WalyKu May 26 '15 at 7:25
  • $\begingroup$ @Kurtovic I'm afraid not. Hopefully your bounty will attract the attention of someone who specializes in this area - I'll advertise your bounty from our Twitter account as well. :) $\endgroup$ – Air May 26 '15 at 20:22
0
$\begingroup$

Here is my attempt at a short and sweet distinction between the two concepts:

Fault tolerant:

How many mistakes of other people can I handle before I fail myself?

Robust:

How many new scenarios can I be useful in (or new inputs can I accept that I have never seen before) that I wasn't originally designed for?

$\endgroup$
0
$\begingroup$

Robustness (of a system): The system keeps its expected performance (not failing) even when the real operation conditions (external to the system) are not the same as the ones assumed in the design. The broader is the range around the expected conditions more robust is the system. As a simple example you can consider a car that was designed to run over relatively smooth asphalt and you happen to use the car in a very poorly maintained road. The more robust is the car design, less will be the impact of the poorly maintained road on the performance (for example comfort of passengers) or expectation of failure (kilometers run before breaking) of the car.

Fault tolerant (system): The system keeps the expected performance (not failing) even when one of its components (which are internal to the system) fail. For this analysis is important to know the criticality of each component and also the likelihood of failure of that component.

To make a system fail-tolerant you make each component less critical (one plane with more than one engine and that don't need all engines working in order to fly is fault-tolerant on engine failures). A plane with just one engine is not fault-tolerant on the regard of engine failures.

If it is not practical to make the system fail-tolerant on regard of a specific component, you make that component more robust, so the likelihood of that component to fail is reduced (which means that component can cope a wide range of operating conditions when you look at it as a system).

$\endgroup$
  • $\begingroup$ Thanks for the answer! Do you know any reputable sources that verify your claims? $\endgroup$ – WalyKu May 27 '15 at 8:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.