25
Ensuring Non-Functional Properties

Ensuring Non-Functional Properties

  • Upload
    ondrea

  • View
    65

  • Download
    0

Embed Size (px)

DESCRIPTION

Ensuring Non-Functional Properties. What Is an NFP?. A software system’s non-functional property (NFP) is a constraint on the manner in which the system implements and delivers its functionality. Example NFPs Efficiency Complexity Scalability Heterogeneity Adaptability Dependability - PowerPoint PPT Presentation

Citation preview

Page 1: Ensuring  Non-Functional Properties

Ensuring Non-Functional

Properties

Page 2: Ensuring  Non-Functional Properties

What Is an NFP? A software system’s non-functional property

(NFP) is a constraint on the manner in which the system implements and delivers its functionality.

Example NFPs– Efficiency– Complexity– Scalability– Heterogeneity– Adaptability– Dependability

What is the role of software architecture in ensuring these?

Page 3: Ensuring  Non-Functional Properties

Efficiency

Efficiency is a software system’s ability to meet its performance requirements and satisfy the constraints on the use of the resources in its computing environment.

Page 4: Ensuring  Non-Functional Properties

Components and Efficiency

Keep the components “small” whenever possible.

Keep component interfaces simple and compact.

Allow multiple interfaces to the same functionality.

Separate data components from processing components.

Separate data from meta-data.

Page 5: Ensuring  Non-Functional Properties

Connectors and Efficiency

Carefully select connectors.

Avoid broadcast connectors unless necessary.

Make use of asynchronous interaction whenever possible.

Use location transparency judiciously.

Page 6: Ensuring  Non-Functional Properties

Configurations and Efficiency

Keep frequently interacting components “close”.

Carefully select and place connectors in the architecture.

Consider the efficiency impact of selected architectural styles and patterns.

Page 7: Ensuring  Non-Functional Properties

Complexity

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. [IEEE]

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.

Page 8: Ensuring  Non-Functional Properties

Components and Complexity

Separate functional and data concerns into different components.

Keep only the functionality inside components – not interactions.

Keep components cohesive.

Be aware of the impact of off-the-shelf components on complexity.

Insulate processing components from changes in the data.

Page 9: Ensuring  Non-Functional Properties

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.

Page 10: Ensuring  Non-Functional Properties

Configurations and Complexity

Eliminate unnecessary dependencies.

Manage all dependencies explicitly.

Use hierarchical (de)composition.

Page 11: Ensuring  Non-Functional Properties

Linux – “as documented”

Page 12: Ensuring  Non-Functional Properties

Linux – “as implemented”

Page 13: Ensuring  Non-Functional Properties

Scalability and Heterogeneity

Scalability refers to the effort required to change a software system’s size and scope in order to meet new requirements.

Heterogeneity is a software system’s ability to include multiple disparate constituent elements and to function in multiple disparate computing environments.– Internal vs. external heterogeneity

Page 14: Ensuring  Non-Functional Properties

Components and Scalability

Give each component a single, clearly defined purpose in a system.

Define each component to have a simple, understandable interface – lead to few and clear dependencies on other component.

Avoid burdening components with interaction responsibilities.

Avoid unnecessary heterogeneity – esp. COTS

Distribute the data sources – data sharing

Replicate the data when necessary – help system’s fault tolerance

Page 15: Ensuring  Non-Functional Properties

Connectors and Scalability

Use explicit connectors – easy for architects to identify and replace 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 – e.g. data processing.

Leverage explicit connectors to support data scalability; services like buffering, caching, prefetching – tailor them to an appln.

Page 16: Ensuring  Non-Functional Properties

Configurations and Scalability

Avoid system bottlenecks. E.g. ,many components interact with a single connector.

Make use of parallel processing capabilities.

Place the data sources close to the data consumers.

Try to make distribution transparent.

Use appropriate architectural styles.

Page 17: Ensuring  Non-Functional Properties

Adaptability

Adaptability is a software system’s ability to satisfy new requirements and adjust to new operating conditions during its life span.

Page 18: Ensuring  Non-Functional Properties

Components and Adaptability

Give each component a single, clearly defined purpose in a system.

Minimize component interdependencies.

Avoid burdening components with interaction responsibilities – avoid system functionality and data.

Separate processing from data.

Separate data from metadata.

Page 19: Ensuring  Non-Functional Properties

Connectors and Adaptability

Give each connector a clearly defined responsibility.

Make the connectors flexible.

Support connector composability.

Page 20: Ensuring  Non-Functional Properties

Composable Connectors

Page 21: Ensuring  Non-Functional Properties

Configurations and Adaptability

Leverage explicit connectors.

Try to make distribution transparent.

Use appropriate architectural styles.

Page 22: Ensuring  Non-Functional Properties

Dependability

Dependability is a collection of system properties that allows one to rely on a system functioning as required.– A software system’s reliability is the probability that the system will

perform its intended functionality under specified design limits, without failure, over a given time period.

– A software system’s availability is the probability that the system is operational at a particular time.

– A software system is robust if it is able to respond adequately to unanticipated runtime conditions.

– A software system is fault-tolerant if it is able to respond gracefully to failures at runtime.

– Survivability is a software system’s ability to resist, recognize, recover from, and adapt to mission-compromising threats, e.g. attacks, accidents – natural disaster.

– 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.

Page 23: Ensuring  Non-Functional Properties

Components and Dependability

Carefully control external component inter-dependencies – changes on components should have minimal impact on others

Provide reflection capabilities in components – allow other parts to assess the health of the components.

Provide suitable exception handling mechanisms.

Specify the components’ key state invariants.

Page 24: Ensuring  Non-Functional Properties

Connectors and Dependability

Employ connectors that strictly control component dependencies.

Provide appropriate component interaction guarantees.

Support dependability techniques via advanced connectors.

Page 25: Ensuring  Non-Functional Properties

Configurations and Dependability

Avoid single points of failure.

Provide back-ups of critical functionality and data

Support nonintrusive system health monitoring

Support dynamic adaptation