1 / 25

Ensuring Non-Functional Properties

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

ondrea
Télécharger la présentation

Ensuring Non-Functional Properties

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ensuring Non-Functional Properties

  2. 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?

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

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

  5. Connectors and Efficiency • Carefully select connectors. • Avoid broadcast connectors unless necessary. • Make use of asynchronous interaction whenever possible. • Use location transparency judiciously.

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

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

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

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

  10. Configurations and Complexity • Eliminate unnecessary dependencies. • Manage all dependencies explicitly. • Use hierarchical (de)composition.

  11. Linux – “as documented”

  12. Linux – “as implemented”

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

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

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

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

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

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

  19. Connectors and Adaptability • Give each connector a clearly defined responsibility. • Make the connectors flexible. • Support connector composability.

  20. Composable Connectors

  21. Configurations and Adaptability • Leverage explicit connectors. • Try to make distribution transparent. • Use appropriate architectural styles.

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

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

  24. Connectors and Dependability • Employ connectors that strictly control component dependencies. • Provide appropriate component interaction guarantees. • Support dependability techniques via advanced connectors.

  25. Configurations and Dependability • Avoid single points of failure. • Provide back-ups of critical functionality and data • Support nonintrusive system health monitoring • Support dynamic adaptation

More Related