Software Architecture and System Modeling Techniques

Context and Process Models

Context models illustrate the other systems in the environment. Process models show how the system being developed is used in broader business processes. UML activity diagrams define business process models.

Interaction Models

Interaction models cover:

  • User interaction (user inputs and outputs) – this identifies user requirements.
  • Interaction between one system and another – this shows the communication problems that can arise.
  • Interaction between the components of the systems – this helps to understand the proposed system and what it will deliver.

Use case diagrams and sequence diagrams may be used for interaction modeling.

Two Modeling Approaches Related to Interaction Modeling

  1. Use case modeling: Models interactions between a system and external actors.
  2. Interaction diagram: Models interactions between system components.

Sequence Diagrams

Sequence diagrams show the sequence of interactions that take place during a particular use case. A model is an abstract view of a system that ignores system details.

Structural Models

Structural Models display the organization of a system in terms of components that make up that system and their relationships. There are two types of structural models:

  1. Static model: Shows the structure of the system design.
  2. Dynamic model: Shows the organization of the system when executing.

Class Diagrams

Class diagrams are used when developing an object-oriented (OO) system to show classes in a system and the associations between them. An object of a class can be thought of as a general definition of one kind of system object. They might also represent something in the real world (e.g., a patient). An association of a class is a link between classes, indicating a relationship between these classes.

The Consultation Class

Includes what is in the class and their functions.

Generalization

This is inheritance in OO programming. Attributes in higher-level classes are included in lower-level classes. Lower-level classes are subclasses that inherit attributes and operations from their superclasses. Lower-level classes add more specific functions.

Object Class Aggregation

Shows how classes are collections composed of other classes.

Behavioral Models

Behavioral models are models of the dynamic behavior of the system as it is executing, showing what happens or what is supposed to happen when a system responds to a stimulus from its environment.

Two Types of Stimuli

  1. Data: Data that arrives and needs to be processed by the system.
  2. Events: Events that trigger system processing. They may have associated data, but this is not always the case.

Data-Driven Modeling

Shows the sequence of actions when inputting data and generating associated output. It is useful during analysis requirements and shows end-to-end processing in a system.

Event-Driven Modeling

Shows how a system responds to external and internal events, based on the assumption that a system has a finite number of states and events transition from one state to another. It is appropriate for real-time systems.

Unified Modeling Language (UML)

UML provides views of:

  1. Use Case View
  2. Static View
  3. Dynamic Interaction
  4. Dynamic State Machine
  5. Structural Component (Software architecture – interconnected components through ports, shown on UML structured class diagrams)
  6. Dynamic Concurrent (Software architecture – viewed as concurrent components executing on distributed nodes and communicating messages – UML concurrent communication diagrams)
  7. Deployment (A specific configuration of distributed architecture with component assignment to hardware nodes – deployment diagrams)

Software Architecture

Software architecture includes the overall server organization and technologies used to build the architecture. The architecture of software affects performance, usability, security, reliability, and maintainability.

Architecture (Noun)

The structure of a system.

Architecture (Verb)

The process of defining the structure.

Definition

The fundamental organization of a software system that includes components, their relationships, and principles guiding design and evolution.

Components

An element that implements a coherent set of functionality/features, considered as a collection of one or more services used by other components. You do not have to decide how an architectural element/component is to be implemented when designing the software architecture. You design the component interface and leave the implementation of that interface to a later stage of the deployment process.

Importance

  1. Has a fundamental influence on the non-functional properties.
  2. Helps understand the issues that affect the architecture of your product and create an architectural description that shows the critical components and their relationships.

Complexity

An important goal for architectural designers is to minimize complexity. More complex systems are more difficult and expensive to understand and change.

Design Guidelines

  1. Separation of concerns: Organizes the architecture into components that focus on a single concern.
  2. Implement once: Avoids duplicating functionality at different places in the architecture.
  3. Stable interfaces: Design component interfaces that are coherent and change slowly.

Non-Functional Requirements

Responsiveness, reliability, availability, security, usability, maintainability, resilience.

Architectural Design

Understands software system organization and designs the overall structure of the system. It links between design and requirements. The output is an architectural model describing how the system is organized as a set of communicating components.

Architectural Abstraction

Concerned with the architecture of individual programs and how they are composed. In a larger sense, it is concerned with the architecture of complex enterprise systems.

Architectural vs. Low-Level Design

Architectural: Style, components, architectural characteristics. Low-level: Class, UI, code. Unidirectional flow does not work; decisions back and forth do not work. Architecture is usually disconnected from development. A more modern view is bidirectional, with mentoring and leadership.

Analyzing Trade-offs

The answer to any trade-off question is that it depends on the environment, business drivers, company culture, budget, time, and skillset.

Architectural Design Decisions

Architectural design is a creative process that differs depending on the type of system being developed. Common decisions can span all design processes and affect the non-functional characteristics of the system.