NFP Design Techniques Software Architecture Lecture 20
Complexity IEEE Definition Complexity  is the degree to which a software system or one of its components has a design or implementation that is difficult to understand and verify Complexity  is a software system’s a property that is directly proportional to the size of the system, number of its constituent elements, their internal structure, and the number and nature of their interdependencies
Software Components and Complexity Separate concerns into different components Keep only the functionality inside components Interaction goes inside connectors Keep components cohesive Be aware of the impact of off-the-shelf components on complexity Insulate processing components from changes in data format
Software Connectors and Complexity Treat connectors explicitly Keep only interaction facilities inside connectors Separate interaction concerns into different connectors Restrict interactions facilitated by each connector Be aware of the impact of off-the-shelf connectors on complexity
Architectural Configurations and Complexity Eliminate unnecessary dependencies Manage all dependencies explicitly Use hierarchical (de)composition
Complexity in Linux Software Architecture: Foundations, Theory, and Practice ; Richard N. Taylor, Nenad Medvidovic, and Eric M. Dashofy;  © 2008 John Wiley & Sons, Inc. Reprinted with permission.
Scalability and Heterogeneity Scalability  is the capability of a software system to be adapted to meet new requirements of size and scope Heterogeneity  is the quality of a software system consisting of multiple disparate constituents or functioning in multiple disparate computing environments  Heterogeneity  is a software system’s ability to consist of multiple disparate constituents or function in multiple disparate computing environments Portability  is a software system’s ability to execute on multiple platforms with minimal modifications and without significant degradation in functional or non-functional characteristics
Software Components and Scalability Give each component a single, clearly defined purpose  Define each component to have a simple, understandable interface Do not burden components with interaction responsibilities Avoid unnecessary heterogeneity Results in architectural mismatch Distribute the data sources  Replicate data when necessary
Software Connectors and Scalability Use explicit connectors Give each connector a clearly defined responsibility Choose the simplest connector suited for the task Be aware of differences between direct and indirect dependencies Avoid placing application functionality inside connectors Application functionality goes inside components Leverage explicit connectors to support data scalability
Architectural Configurations and Scalability Avoid system bottlenecks Make use of parallel processing capabilities  Place the data sources close to the data consumers  Try to make distribution transparent Use appropriate architectural styles
Adaptability Adaptability  is a software system’s ability to satisfy new requirements and adjust to new operating conditions during its lifetime
Software Components and Adaptability Give each component a single, clearly defined purpose Minimize component interdependencies Avoid burdening components with interaction responsibilities Separate processing from data Separate data from metadata
Software Connectors and Adaptability Give each connector a clearly defined responsibility Make the connectors flexible Support connector composability
Composable Connectors Software Architecture: Foundations, Theory, and Practice ; Richard N. Taylor, Nenad Medvidovic, and Eric M. Dashofy;  © 2008 John Wiley & Sons, Inc. Reprinted with permission.
Architectural Configurations and Adaptability Leverage explicit connectors Try to make distribution transparent Use appropriate architectural styles
Dependability Dependability is a collection of system properties that allows one to rely on a system functioning as required Reliability  is the probability that a system will perform its intended functionality under specified design limits, without failure, over a given time period Availability  is the probability that a system is operational at a particular time Robustness  is a system’s ability to respond adequately to unanticipated runtime conditions Fault-tolerant  is a system’s ability to respond gracefully to failures at runtime Survivability  is a system’s ability to resist, recognize, recover from, and adapt to mission-compromising threats Safety  denotes the ability of a software system to avoid failures that will result in (1) loss of life, (2) injury, (3) significant damage to property, or (4) destruction of property
Software Components and Dependability Carefully control external component inter-dependencies Provide reflection capabilities in components Provide suitable exception handling mechanisms Specify the components’ key state invariants
Software Connectors and Dependability Employ connectors that strictly control component dependencies Provide appropriate component interaction guarantees Support dependability techniques via advanced connectors
Architectural Configurations and Dependability Avoid single points of failure Provide back-ups of critical functionality and data Support non-intrusive system health monitoring Support dynamic adaptation

20 nfp design_techniques

  • 1.
    NFP Design TechniquesSoftware Architecture Lecture 20
  • 2.
    Complexity IEEE DefinitionComplexity is the degree to which a software system or one of its components has a design or implementation that is difficult to understand and verify Complexity is a software system’s a property that is directly proportional to the size of the system, number of its constituent elements, their internal structure, and the number and nature of their interdependencies
  • 3.
    Software Components andComplexity Separate concerns into different components Keep only the functionality inside components Interaction goes inside connectors Keep components cohesive Be aware of the impact of off-the-shelf components on complexity Insulate processing components from changes in data format
  • 4.
    Software Connectors andComplexity Treat connectors explicitly Keep only interaction facilities inside connectors Separate interaction concerns into different connectors Restrict interactions facilitated by each connector Be aware of the impact of off-the-shelf connectors on complexity
  • 5.
    Architectural Configurations andComplexity Eliminate unnecessary dependencies Manage all dependencies explicitly Use hierarchical (de)composition
  • 6.
    Complexity in LinuxSoftware Architecture: Foundations, Theory, and Practice ; Richard N. Taylor, Nenad Medvidovic, and Eric M. Dashofy; © 2008 John Wiley & Sons, Inc. Reprinted with permission.
  • 7.
    Scalability and HeterogeneityScalability is the capability of a software system to be adapted to meet new requirements of size and scope Heterogeneity is the quality of a software system consisting of multiple disparate constituents or functioning in multiple disparate computing environments Heterogeneity is a software system’s ability to consist of multiple disparate constituents or function in multiple disparate computing environments Portability is a software system’s ability to execute on multiple platforms with minimal modifications and without significant degradation in functional or non-functional characteristics
  • 8.
    Software Components andScalability Give each component a single, clearly defined purpose Define each component to have a simple, understandable interface Do not burden components with interaction responsibilities Avoid unnecessary heterogeneity Results in architectural mismatch Distribute the data sources Replicate data when necessary
  • 9.
    Software Connectors andScalability Use explicit connectors Give each connector a clearly defined responsibility Choose the simplest connector suited for the task Be aware of differences between direct and indirect dependencies Avoid placing application functionality inside connectors Application functionality goes inside components Leverage explicit connectors to support data scalability
  • 10.
    Architectural Configurations andScalability Avoid system bottlenecks Make use of parallel processing capabilities Place the data sources close to the data consumers Try to make distribution transparent Use appropriate architectural styles
  • 11.
    Adaptability Adaptability is a software system’s ability to satisfy new requirements and adjust to new operating conditions during its lifetime
  • 12.
    Software Components andAdaptability Give each component a single, clearly defined purpose Minimize component interdependencies Avoid burdening components with interaction responsibilities Separate processing from data Separate data from metadata
  • 13.
    Software Connectors andAdaptability Give each connector a clearly defined responsibility Make the connectors flexible Support connector composability
  • 14.
    Composable Connectors SoftwareArchitecture: Foundations, Theory, and Practice ; Richard N. Taylor, Nenad Medvidovic, and Eric M. Dashofy; © 2008 John Wiley & Sons, Inc. Reprinted with permission.
  • 15.
    Architectural Configurations andAdaptability Leverage explicit connectors Try to make distribution transparent Use appropriate architectural styles
  • 16.
    Dependability Dependability isa collection of system properties that allows one to rely on a system functioning as required Reliability is the probability that a system will perform its intended functionality under specified design limits, without failure, over a given time period Availability is the probability that a system is operational at a particular time Robustness is a system’s ability to respond adequately to unanticipated runtime conditions Fault-tolerant is a system’s ability to respond gracefully to failures at runtime Survivability is a system’s ability to resist, recognize, recover from, and adapt to mission-compromising threats Safety denotes the ability of a software system to avoid failures that will result in (1) loss of life, (2) injury, (3) significant damage to property, or (4) destruction of property
  • 17.
    Software Components andDependability Carefully control external component inter-dependencies Provide reflection capabilities in components Provide suitable exception handling mechanisms Specify the components’ key state invariants
  • 18.
    Software Connectors andDependability Employ connectors that strictly control component dependencies Provide appropriate component interaction guarantees Support dependability techniques via advanced connectors
  • 19.
    Architectural Configurations andDependability Avoid single points of failure Provide back-ups of critical functionality and data Support non-intrusive system health monitoring Support dynamic adaptation