Tag Archives: Architecture

Software Architecture Fundamentals

Although software architecture is a key factor in determining the success or failure of a software system, software professionals throughout the industry continue to struggle with questions like:

–   What exactly is a software architecture?
–   Why is software architecture important?
–   What factors influence the design of a software architecture?
–   Which requirements are most important during software architecture design?

The SEI defines Software Architecture as

the structure or structures of the system, which comprise the software elements, the externally visible properties of those elements, and the relationships among them

The importance of Software Architecture can be outlined in three high-level aspects:
  1. Firstly, it is a vehicle for communication, so the development team and stakeholders are able to inter-exchange ideas based on the same “language” and principles.
  2. Secondly, it is a manifestation of earliest design decisions that defines implementation constraints, among others.
  3. Finally, it is a transferable, reusable abstraction.

Now, which requirements are most important to architectural design? The following figure depicts Software Arquitecture as a product of the architectural design process, which depends on functional requirements, design constraints and quality attribute requirements.

Requirements and Architecture Design

Requirements and Architecture Design

The requirements are above and beyond functionality, and they require us to structure an architecture. They include design constraints and quality attributes.

Some issues in eliciting quality attribute requirements:
Non-Operational requirements
  • “The system must be easy to use.”
  • “The system must have high performance.”
  • “The system must be portable.”
Debating the quality attribute to which a system behavior belongs
  • “The system must process 10,000 messages per second.”
Vocabulary variations
  • Everyone knows what “high performance” means, right?

On the other hand, Software Architecture is influenced by the technical, business, and social environment.

Other influences on the Software Architecture

The understanding of this cycle helps us to plan for and manage change throughout the lifetime of a system.

Some influences on the Software architecture:

– Stakeholders

  • customers, users, managers, marketing, developers, maintainers, etc.

– Development organization

  • immediate and long term business goals
  • organizational structure

– Technical environment

  • object oriented, WWW, intelligent agents, EJB, service oriented, J2EE, thin client, .NET, etc.

Background and experience

  • architect and organizational experience
  • education and training

Furthermore, Software Architecture can influence on some aspects of the project and organisation. Lets take a look to some examples:

– Development organization

  • structure, goals, artifacts, etc.

– Stakeholder requirements

  • demand for similar features, existing components and system

Technical environment

  • relational databases, WWW, service oriented architectures, etc.

Background and experience

  • promote approaches that have been successful
  • reject approaches that have failed

Source: Software Architecture Fundamentals: Technical, Business, and Social Influences (Webinar): http://www.sei.cmu.edu/library/abstracts/presentations/webinar20100708.cfm