Software Architecture in Product Design
Product Design Software Architecture
Definition: Software Architecture
“A software architecture is a set of architectural elements that have a certain way. The properties constrain the choice of the elements of the logic architecture while capturing the reasons for the choice of elements and form.”
Modular Decomposition
The modular design proposes to divide the system into separate parts and define their interfaces. Advantages: clarity, cost reduction, and reuse.
The steps are:
- Identify modules
- Describe each module
- Describe the relationship between modules
Qualities of a Modular Decomposition
A modular decomposition must have certain minimum qualities to be considered sufficiently validated.
- Functional independence
- Attachment
- Cohesion
- Understandability
- Adaptability
Cohesion
A coherent module executes a simple task in a software procedure and requires little interaction with procedures that run in other parts of a program. We say that a coherent module is one that tries to do only one thing.
Understandability
To facilitate change, maintenance, and reuse of modules, it is necessary that each one can be understood in isolation.
Software Architecture Patterns
Client-Server Architecture
In this case, the system can be viewed as a set of services provided to customers who use these services. Servers and clients are treated differently in these systems.
Distributed Object Architectures
For this architecture, there is no distinction between servers and clients, and the system can be viewed as a set of interacting objects whose location is irrelevant. There is no distinction between a service provider and a user of these services.
Both architectures are widely used in industry, supported distribution is, therefore, Intraorganizational. You can also take two other types of distributed architectures that are more suitable for inter-distribution: peer-to-peer (p2p) system architecture and service-oriented architecture. Peer-to-peer systems have been used primarily for personal systems but are beginning to be used for business applications.
Multiprocessor Architecture
A multiprocessing or multitasking system is one that allows you to run multiple processes concurrently.
Advantages of Multithreading
The advantage of a multithreaded system resides in the operation called context switching. This operation involves removing a process from the CPU, executing another process, and replacing the first without it being aware of anything.
A set of tasks can be completed more quickly if there are multiple processing units running in parallel.
Multithreading Configuration
It comprises two high-capacity computers interconnected electronically with each other. This configuration is known as multithreading and is characterized by continuous data processing, even in the event of any malfunction in one of the computers.
Example:
Air traffic control system. A set of distributed sensors collects traffic flow information and processes it locally before sending it to the control room.
Advantages of Multiprocessor Architecture
- It is economical.
- The use of commonly available components in large quantities allows us to offer higher performance at a lower price than that of processors specially designed machines (such as vector processors machines and special purpose).
- In addition, parallel computers are inherently scalable, allowing updates in line with a growing need.
Disadvantages of Multiprocessor Architecture
- Sometimes also referred to the physical limitation, there are factors that limit the speed of a processor, regardless of the economic factor.
- Insurmountable physical barriers, such as the speed of light, quantum effects by reducing the size of the elements of the processors, and problems caused by electrical phenomena at small scales, restrict the maximum capacity of a uniprocessor system, leaving the obvious choice of placing many processors to perform calculations cooperatively.
Client-Server Architecture in Detail
This architecture basically consists of a client making requests to another program (server) that responds. Although this idea can be applied to programs running on one computer, it is more advantageous in a multiuser operating system distributed across a computer network.
Characteristics
In this architecture, the processing capacity is shared between clients and servers.
Request Sender (Client)
- It is the initiator of requests and, therefore, plays an active role in communication (teacher or master device).
- It waits for and receives responses from the server.
- In general, it can connect to multiple servers at once.
- Typically interacts directly with end-users through a graphical user interface.
Request Recipient (Server)
- It starts by waiting for applications to reach customers, then plays a passive role in communication (slave device).
- Upon receipt of an application, it processes it and then sends the reply to the client.
- Usually accepts connections from a large number of customers (in some cases, the maximum number of requests may be limited).
- It does not often interact directly with end-users.
Distributed Systems
“Systems whose components (hardware and software) that are on computers connected to a network, communicate and coordinate their actions by passing messages, to achieve a goal. Establishing the communication via a protocol schema prefixed by a client-server.”
Features of Distributed Systems:
- Concurrency: This characteristic of distributed systems allows the resources available on the network to be used simultaneously by users and/or agents that interact in the network.
- Lack of global clock: The coordination for the transfer of messages between the various components to perform a task does not have a general timing; it is more well-distributed components.
- Independent failures of components: Each component of the system may fail independently, so that others can continue to execute their actions. This allows the achievement of the tasks more effectively because the whole system is still working.
Advantages of Distributed Systems:
Economy, more reliability, flexibility, resource sharing.
Design of Real-Time Software
Real-time software is tightly coupled with the external world, i.e., real-time software must respond to the scope of the problem at a time dictated by the scope of the problem. Because real-time software must operate under very stringent performance constraints, software design is often driven by both the hardware architecture of the software, the nature of the operating system, application requirements, and both the programming language extras as prospective design.