Software Architecture & Design Introduction

 

The architecture of a system describes its major components, their relationships (structures), and how they interact with each other. Software architecture and design includes several contributory factors such as Business strategy, quality attributes, human dynamics, design, and IT environment.

Software Architecture Types

We can segregate Software Architecture and Design into two distinct phases: Software Architecture and Software Design. In Architecture, nonfunctional decisions are cast and separated by the functional requirements. In Design, functional requirements are accomplished.

Software Architecture

Architecture serves as a blueprint for a system. It provides an abstraction to manage the system complexity and establish a communication and coordination mechanism among components. It defines a structured solution to meet all the technical and operational requirements, while optimizing the common quality attributes like performance and security.

Further, it involves a set of significant decisions about the organization related to software development and each of these decisions can have a considerable impact on quality, maintainability, performance, and the overall success of the final product. These decisions comprise of −

Software Design

Software design provides a design plan that describes the elements of a system, how they fit, and work together to fulfill the requirement of the system. The objectives of having a design plan are as follows −

Domain analysis, requirements analysis, and risk analysis comes before architecture design phase, whereas the detailed design, coding, integration, and testing phases come after it.

Software Design

Goals of Architecture

The primary goal of the architecture is to identify requirements that affect the structure of the application. A well-laid architecture reduces the business risks associated with building a technical solution and builds a bridge between business and technical requirements.

Some of the other goals are as follows −

Limitations

Software architecture is still an emerging discipline within software engineering. It has the following limitations −

Role of Software Architect

A Software Architect provides a solution that the technical team can create and design for the entire application. A software architect should have expertise in the following areas −

Design Expertise

Domain Expertise

Technology Expertise

Methodological Expertise

Deliverables of the Architect

An architect is expected to deliver clear, complete, consistent, and achievable set of functional goals to the organization. Besides, he is also responsible to provide −

Hidden Role of Software Architect

Besides, facilitating the technical work among team members, it has also some subtle roles such as reinforce the trust relationship among team members and protect team members from the external forces that could distract them and bring less value to the project.

Quality Attributes

Quality is a measure of excellence or the state of being free from deficiencies or defects. Quality attributes are the system properties that are separate from the functionality of the system.

Implementing quality attributes makes it easier to differentiate a good system from a bad one. Attributes are overall factors that affect runtime behavior, system design, and user experience.

They can be classified as −

Quality Scenarios

Quality scenarios specify how to prevent a fault from becoming a failure. They can be divided into six parts based on their attribute specifications −

Common Quality Attributes

The following table lists the common quality attributes a software architecture must have −

Category Quality Attribute Description
Design Qualities Conceptual Integrity Defines the consistency and coherence of the overall design. This includes the way components or modules are designed.
Maintainability Ability of the system to undergo changes with a degree of ease.
Reusability Defines the capability for components and subsystems to be suitable for use in other applications.
Run-time Qualities Interoperability Ability of a system or different systems to operate successfully by communicating and exchanging information with other external systems written and run by external parties.
Manageability Defines how easy it is for system administrators to manage the application.
Reliability Ability of a system to remain operational over time.
Scalability Ability of a system to either handle the load increase without impacting the performance of the system or the ability to be readily enlarged.
Security Capability of a system to prevent malicious or accidental actions outside of the designed usages.
Performance Indication of the responsiveness of a system to execute any action within a given time interval.
Availability Defines the proportion of time that the system is functional and working. It can be measured as a percentage of the total system downtime over a predefined period.
System Qualities Supportability Ability of the system to provide information helpful for identifying and resolving issues when it fails to work correctly.
Testability Measure of how easy it is to create test criteria for the system and its components.
User Qualities Usability Defines how well the application meets the requirements of the user and consumer by being intuitive.
Architecture Quality Correctness Accountability for satisfying all the requirements of the system.
Non-runtime Quality Portability Ability of the system to run under different computing environment.
Integrality Ability to make separately developed components of the system work correctly together.
Modifiability Ease with which each software system can accommodate changes to its software.
Business quality attributes Cost and schedule Cost of the system with respect to time to market, expected project lifetime & utilization of legacy.
Marketability Use of system with respect to market competition.