Friday, October 22, 2010

Introduction to Software Architecture (From the Books)

The goal of software design is to build a model that meets all customer requirements and leads to successful implementation.

What is the architecture design?

The architecture design defines relationship between structural element of the software, Styles and design patterns that can be used to achieve requirements defined for the system, and the constraints that can affect the in which architecture is implemented.(Galan and Shaw, 1996).

IEEE Std 1471 defines system architecture as "Fundamental organization of a system embodied in its elements, their relationship to each other, and to the environment, and the principle guiding its design and evolutions".

Who is responsible for the Architecture Design?

Software Architect and the designers, Translate system requirements into Software architecture design.

Why software Architecture is so important?

  1. Poor design may leads the system to not to meet the customer requirements
  2. Frailer to adapt to the future changes.
  3. May not be re-usable
  4. Exhibits unexpected behaviors
  5. Perform badly
  6. Etc.

When the Software Architecture Design is conducted?

After Software requirement Specification is finalized, Software Architect and the designers can start working software Architecture Design.

What is the outcome of a Software Architecture design? Software Design Description (SDD)

  1. Design Overview, Purpose, And the Scope
  2. Decomposition of description (Modules, Data and Processes)
  3. Dependency and Connection description (Between the modules, data,, and processes)
  4. Attributes
  5. User Interface Description
  6. Detailed Design

Architecture design is front strategy design for the detailed design..

During Architecture Design Stage,

  1. User Accessible Elements
  2. Interconnection that are visible to the stakeholders.

Detailed Design, (Also called tactical design)

  1. Local Design Constraints
  2. Internal details of each element

A functional requirement specifies the functionality of the system whereas a nonfunctional requirement specifies the system qualities, Constraints, and Behaviors.

List of tasks that has to be done by the software architect..

  1. Perform static partition and decomposition of a system into sub systems and communication among sub systems. Software element can be configured, delivered, developed, deployed, and is replaceable in the future. Each element's interface encapsulates details and provides loose coupling with other elements.
  2. Establish dynamic control relationships among different sub systems in terms of data flow, flow control orchestration, or message dispatching.
  3. Consider and evaluates alternative architecture styles that can suit the problem domain at hand.
  4. Perform tradeoff analysis on quality attributes and other non functional requirements during the selection of architecture style.

Architecture Styles

Architecture style abstracts common properties of family of similar designs.

What's includes in Architecture style?

  1. Rules
  2. Constraints
  3. Set of Patterns of how to structure set of elements and connectors.

What are the key components of an Architecture Style?

  1. Elements that perform functions required by the system.
  2. Connectors that enable communication, coordination and cooperation among the elements of the system.
  3. Constraints that defines how elements can be integrated to form the system
  4. Attributes that describes the advantages and disadvantages of the chosen structure.

Software Quality Attributes

There are three types of software quality attributes are discussed in Software Architecture Design.

  1. Software Implementation Attributes
    1. Interoperability
      1. Universal Accessibility
      2. Ability Exchange data among internal components and the outside world
      3. Loose dependency of infrastructure
    2. Maintainability and Extendibility
    3. Testability
    4. Portability
      1. Systems level independence of Software and Hardware platforms
    5. Scalability
      1. Ability to adapt into new customer requirement changes
    6. Flexibility
      1. Ease of system modification to cater to different environments or problems for which the system was not originally designed.
  2. Runtime Attributes
    1. Availability
      1. System's capability to be available 24/7.
    2. Security
      1. Ability to cope with malicious attacks from outside or inside the system
      2. Security can be achieved by installing firewalls, establish authentication and authorization process, and using encryption.
    3. Performance
      1. Response Time
      2. Throughput
      3. Resource utilization
    4. Usability
      1. The Level of human satisfaction of the using system.
      2. Completeness
      3. Correctness
      4. Compatibility
      5. Friendly User Interfaces
      6. Complete Documentation
      7. Technical Support
    5. Reliability
      1. Failure frequency,
      2. Accuracy of output results
      3. The Mean-Time –to Failure
      4. Ability to recover from Failure
      5. The Failure Predictability
    6. Maintainability
      1. Extensibility
      2. Adaptability
      3. Serviceability
      4. Testability
      5. Compatibility
      6. Configurability
      7. Ease of software system to change


  3. Business Attributes
    1. Time to market
      1. Time it's takes from requirements analysis to product release
    2. Cost
      1. Expense of building, Maintaining and Operating
    3. Lifetime
      1. Period of the product alive before retirement.

Typical Quality Attributes of Tradeoff pairs

  1. Tradeoff between space and time
    1. Example, Increase the time efficiency of a hash table means a decrease of in its space efficiency.
  2. Tradeoff between Reliability and Performance
  3. Tradeoff Between Scalability and Performance

Software Architecture Design Guidelines

  1. Thinks of what to before thinking how to do it.
  2. Think of abstract design before thinking concrete design.
  3. Think of non-functional requirements early in the design process
  4. This of software reusability and extendibility as much as possible
  5. Try to perform high cohesion within each element and loose coupling
  6. Tolerate refinement of design
  7. Avoid ambiguous design and over detailed design.

Summery

Software Architecture Specification consists of software elements, Connectors and collaboration among the elements and desired quality attributes. An Architecture style is set of rules, constraints, or patterns guide how to structure a system into set of elements and connectors, and how to govern overall structure design patterns of constituent element types and their run time interaction.


No comments:

Post a Comment