Wednesday, 6 December 2023

Dependability: A Critical Factor in the Success of Complex System

A dependable system has the capability to operate continuously and yield accurate results even in the presence of faults or errors. The concept of a dependable system encompasses qualities such as availability, reliability, safety, security, maintainability, and Resilient.

 


For a system to be dependable,

1.   It must be available (e.g., ready for use when we need it),

2.   It must be reliable (e.g., able to provide continuity of service while we are using it),

3.   It must be safe (e.g., does not have a catastrophic consequence on the environment),

4.   It must be secure (e.g., able to preserve confidentiality)

5.   It must be maintainable (e.g., easily repaired, modified, or upgraded when necessary)

6.   It must be Resilient (e.g., Recover from unexpected events or disruptions)

 

Approaches to achieve dependability

Fulfilling the objective of creating a dependable system demands dedication at every stage of its development. Efforts must be invested during design, implementation, execution, and ongoing maintenance, enhancement phases.

 

During the design phase, enhancing dependability involves the adoption of fault avoidance techniques.

 

In the implementation phase, the focus shifts to increasing dependability through fault removal techniques.

 

At execution time, fault tolerance and fault recovery techniques are required to achieve a dependable system.

 

In summary, achieving dependability is an ongoing commitment that spans the entire lifecycle of a system

 

1. Fault Avoidance

Fault avoidance uses a range of tools and methodologies to structure the system in a way that minimizes the introduction of faults. By preventing faults from arising initially, there is no need to address them at a later stage.

 

We can use various fault avoidance techniques such as

a.   Design Reviews: Evaluating and validating the software design before implementation. It ensures the design aligns with requirements and best practices.

b.   Modelling: Using models (e.g., UML diagrams) to visualize and analyze software architecture and behaviour. It enhances understanding, identifies design flaws early in the process.

c.    Coding standards: By establishing and enforcing coding conventions and standards, we can improvise code consistency, readability, and reduces potential errors.

d.   Prototyping: Creating a simplified version of the software to validate requirements and design. It helps identify and rectify issues before full-scale implementation.

e.   TDD (Test Driven Development): Writing tests before writing the actual code. It ensures code meets specified requirements, facilitates early error detection.

f.     Code reviews, integrate with static code analysis tools, Brain storming sessions etc.,

 

2. Fault Removal

Fault removal uses verification and testing methodologies to identify faults, and enable necessary changes to the system. Techniques encompassed within fault removal include unit testing, integration testing, regression testing. It is typically more costly to rectify a fault than to proactively prevent its occurrence.

 

3. Fault Tolerance

Despite diligent efforts to prevent or rectify the faults, operational systems are likely to encounter faults. A system equipped with fault tolerance capabilities will continue to function, possibly at a degraded level, even when faced with these faults.

 

For a system to be considered fault-tolerant, it must have the ability to identify, diagnose, and recover from faults.

 

4. Fault Recovery

Recovering from faults and restoring the system to its normal state. This can be done through backup and restoration.

 

Examples of dependable systems

Trains, automobiles, Communication systems, financial application etc.,


                                                             System Design Questions

No comments:

Post a Comment